Compare commits
	
		
			6810 Commits
		
	
	
		
			curl-7_9_3
			...
			cares-1_4_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					82d6240e7d | ||
| 
						 | 
					ad80490711 | ||
| 
						 | 
					38b490a310 | ||
| 
						 | 
					2ea052336f | ||
| 
						 | 
					3b9eefca89 | ||
| 
						 | 
					073a6cea45 | ||
| 
						 | 
					345ffd1163 | ||
| 
						 | 
					f0ffb35d55 | ||
| 
						 | 
					b4d2fbae6d | ||
| 
						 | 
					42a2138d11 | ||
| 
						 | 
					e86dfd9688 | ||
| 
						 | 
					a466b31574 | ||
| 
						 | 
					48064f8dee | ||
| 
						 | 
					e71378d3c8 | ||
| 
						 | 
					90d40aff72 | ||
| 
						 | 
					30808dca40 | ||
| 
						 | 
					8629620b1c | ||
| 
						 | 
					25d2a27c64 | ||
| 
						 | 
					b084dc8760 | ||
| 
						 | 
					2ae9536d32 | ||
| 
						 | 
					f5713dbb2e | ||
| 
						 | 
					b10ff9791b | ||
| 
						 | 
					86a25239ec | ||
| 
						 | 
					4c663ba9a8 | ||
| 
						 | 
					713c9f8602 | ||
| 
						 | 
					14b9b823e6 | ||
| 
						 | 
					6a674ded0e | ||
| 
						 | 
					2faba57c85 | ||
| 
						 | 
					79d59ec97b | ||
| 
						 | 
					a49e78d9b7 | ||
| 
						 | 
					9583b51d80 | ||
| 
						 | 
					670273968c | ||
| 
						 | 
					b6820b2674 | ||
| 
						 | 
					b9a6dfab03 | ||
| 
						 | 
					8bd7197a8f | ||
| 
						 | 
					ebb5e1db4b | ||
| 
						 | 
					4702807da8 | ||
| 
						 | 
					fe1fe64fd4 | ||
| 
						 | 
					9d904ee41b | ||
| 
						 | 
					fcc3e2ca34 | ||
| 
						 | 
					c25da51913 | ||
| 
						 | 
					05ab8d291c | ||
| 
						 | 
					70b1900dd1 | ||
| 
						 | 
					380e132da3 | ||
| 
						 | 
					f2eb3c1f79 | ||
| 
						 | 
					96c093f27c | ||
| 
						 | 
					a9d49769ff | ||
| 
						 | 
					d7616d8a0a | ||
| 
						 | 
					826bbfc01c | ||
| 
						 | 
					250f9670b7 | ||
| 
						 | 
					ed4936fd30 | ||
| 
						 | 
					4dd2628093 | ||
| 
						 | 
					8479785620 | ||
| 
						 | 
					0427e94465 | ||
| 
						 | 
					09fd3b4935 | ||
| 
						 | 
					3fef839f75 | ||
| 
						 | 
					ea43bb013b | ||
| 
						 | 
					b0a4c992e7 | ||
| 
						 | 
					85707460e5 | ||
| 
						 | 
					41ba7666f0 | ||
| 
						 | 
					4367e0513a | ||
| 
						 | 
					ed998270aa | ||
| 
						 | 
					1b7f00b2a6 | ||
| 
						 | 
					ad19f95f15 | ||
| 
						 | 
					bcfe3cb231 | ||
| 
						 | 
					805a5dcac8 | ||
| 
						 | 
					0b67ee7bad | ||
| 
						 | 
					9298037639 | ||
| 
						 | 
					f7472075d7 | ||
| 
						 | 
					9f72db13c4 | ||
| 
						 | 
					acc4868b78 | ||
| 
						 | 
					1afb67e31b | ||
| 
						 | 
					2f0539d880 | ||
| 
						 | 
					6f7d0a7cbd | ||
| 
						 | 
					3d513f7ab1 | ||
| 
						 | 
					6c8e6549d0 | ||
| 
						 | 
					eec105daba | ||
| 
						 | 
					19a80add95 | ||
| 
						 | 
					93844f64ef | ||
| 
						 | 
					60588b2455 | ||
| 
						 | 
					5187faeeb9 | ||
| 
						 | 
					1228ec9fbb | ||
| 
						 | 
					717adfeb96 | ||
| 
						 | 
					503557e5ce | ||
| 
						 | 
					f611f42dcf | ||
| 
						 | 
					7a0e0c36c5 | ||
| 
						 | 
					61edee979f | ||
| 
						 | 
					7a343a3f60 | ||
| 
						 | 
					b4d3c4a76c | ||
| 
						 | 
					f213d0db98 | ||
| 
						 | 
					6e835ef3aa | ||
| 
						 | 
					ed8cb57151 | ||
| 
						 | 
					9bdb05b4d6 | ||
| 
						 | 
					94b253fde7 | ||
| 
						 | 
					61d7e720a5 | ||
| 
						 | 
					17507eac85 | ||
| 
						 | 
					bc1ae973da | ||
| 
						 | 
					6a35841b2e | ||
| 
						 | 
					28dde78dde | ||
| 
						 | 
					37171809f6 | ||
| 
						 | 
					3398eca7c3 | ||
| 
						 | 
					3616912d22 | ||
| 
						 | 
					0abccc676d | ||
| 
						 | 
					a93af43974 | ||
| 
						 | 
					0bbc759c0c | ||
| 
						 | 
					56a5c49ac0 | ||
| 
						 | 
					02267eba4c | ||
| 
						 | 
					cea9695bcf | ||
| 
						 | 
					92039629c7 | ||
| 
						 | 
					c8d3327e92 | ||
| 
						 | 
					043070f90e | ||
| 
						 | 
					36626c4b6e | ||
| 
						 | 
					7f33aae067 | ||
| 
						 | 
					61022f3817 | ||
| 
						 | 
					bf648fcfc3 | ||
| 
						 | 
					b0e909329e | ||
| 
						 | 
					ae3d5949b8 | ||
| 
						 | 
					c234b9d04b | ||
| 
						 | 
					7a86740afd | ||
| 
						 | 
					8e719e3ef5 | ||
| 
						 | 
					66fc5498d2 | ||
| 
						 | 
					f30ae93a1f | ||
| 
						 | 
					365e8eb78e | ||
| 
						 | 
					76627b322e | ||
| 
						 | 
					827228bd69 | ||
| 
						 | 
					69c5506b69 | ||
| 
						 | 
					3a2e623fc8 | ||
| 
						 | 
					8aa9f01ed8 | ||
| 
						 | 
					b0b6a853f6 | ||
| 
						 | 
					0563a7a923 | ||
| 
						 | 
					945ba7cb7e | ||
| 
						 | 
					e3dab1bea2 | ||
| 
						 | 
					9c369c695d | ||
| 
						 | 
					011ccbc31a | ||
| 
						 | 
					f1596698ae | ||
| 
						 | 
					c60b52ab43 | ||
| 
						 | 
					71a0d50f48 | ||
| 
						 | 
					8d2a0fe85b | ||
| 
						 | 
					b039d883e5 | ||
| 
						 | 
					b3401ddbad | ||
| 
						 | 
					038fe54e21 | ||
| 
						 | 
					4b5a65455e | ||
| 
						 | 
					2566a5d4da | ||
| 
						 | 
					c38c339480 | ||
| 
						 | 
					ea74b4b8e1 | ||
| 
						 | 
					2364066be0 | ||
| 
						 | 
					b36376e12d | ||
| 
						 | 
					8aae15b630 | ||
| 
						 | 
					88bf2a2dc7 | ||
| 
						 | 
					45847c5324 | ||
| 
						 | 
					70cce4cddd | ||
| 
						 | 
					42c0ac2008 | ||
| 
						 | 
					70ddabbfb0 | ||
| 
						 | 
					e3716938bd | ||
| 
						 | 
					b122959c8b | ||
| 
						 | 
					84c5e846b3 | ||
| 
						 | 
					47f044265e | ||
| 
						 | 
					d46d995766 | ||
| 
						 | 
					1a0cc60741 | ||
| 
						 | 
					7cbbd1b56b | ||
| 
						 | 
					5daa6b9367 | ||
| 
						 | 
					a7aca2e8af | ||
| 
						 | 
					d8d3dc9302 | ||
| 
						 | 
					5be7b543d8 | ||
| 
						 | 
					910ee13b20 | ||
| 
						 | 
					35935d71d2 | ||
| 
						 | 
					de17f4436e | ||
| 
						 | 
					be5ade5c7a | ||
| 
						 | 
					0e05a6329a | ||
| 
						 | 
					c518c52aba | ||
| 
						 | 
					e4c28abdc1 | ||
| 
						 | 
					a11374d994 | ||
| 
						 | 
					d9e89e170f | ||
| 
						 | 
					47594be5c0 | ||
| 
						 | 
					0d635a1119 | ||
| 
						 | 
					e9ffa9a3b8 | ||
| 
						 | 
					248a5381d4 | ||
| 
						 | 
					c1ab3e2d59 | ||
| 
						 | 
					c895dc8a19 | ||
| 
						 | 
					a0a79ce853 | ||
| 
						 | 
					70f9a13ecb | ||
| 
						 | 
					c321b9f704 | ||
| 
						 | 
					7e74349b86 | ||
| 
						 | 
					fd016fb3ee | ||
| 
						 | 
					09dd2d3856 | ||
| 
						 | 
					5625e5d5b8 | ||
| 
						 | 
					8a529bd987 | ||
| 
						 | 
					8fe9376d54 | ||
| 
						 | 
					a1f72943e9 | ||
| 
						 | 
					0969a96732 | ||
| 
						 | 
					ec8019b2a8 | ||
| 
						 | 
					27d2d78059 | ||
| 
						 | 
					7d48d851a2 | ||
| 
						 | 
					6a2cecf153 | ||
| 
						 | 
					990b15e402 | ||
| 
						 | 
					584f3639e3 | ||
| 
						 | 
					2886ce96b0 | ||
| 
						 | 
					3344142b87 | ||
| 
						 | 
					f1b4f5e2ae | ||
| 
						 | 
					bcf0af9ddb | ||
| 
						 | 
					70550a0572 | ||
| 
						 | 
					d7088d1032 | ||
| 
						 | 
					d07a874899 | ||
| 
						 | 
					c420113795 | ||
| 
						 | 
					5c850b825b | ||
| 
						 | 
					7bbad0b534 | ||
| 
						 | 
					305e03905f | ||
| 
						 | 
					161be66c89 | ||
| 
						 | 
					4095c9de37 | ||
| 
						 | 
					20d33ad7e5 | ||
| 
						 | 
					b8c12fe658 | ||
| 
						 | 
					e4d4ee8db5 | ||
| 
						 | 
					8a7d58378b | ||
| 
						 | 
					bdbaedc452 | ||
| 
						 | 
					0839621f47 | ||
| 
						 | 
					bf2c1e099c | ||
| 
						 | 
					6c6e4710b5 | ||
| 
						 | 
					5e7164f87a | ||
| 
						 | 
					ef10eaeb29 | ||
| 
						 | 
					fce4dcccd8 | ||
| 
						 | 
					f2beee209b | ||
| 
						 | 
					9d8b22d3de | ||
| 
						 | 
					5796c7b132 | ||
| 
						 | 
					dc2ea33e32 | ||
| 
						 | 
					c1f117700a | ||
| 
						 | 
					7ea90c46eb | ||
| 
						 | 
					4d9e24d1e4 | ||
| 
						 | 
					1f236ba108 | ||
| 
						 | 
					d27813c2dd | ||
| 
						 | 
					453e9b0dce | ||
| 
						 | 
					b8626c3df8 | ||
| 
						 | 
					f8d78d57a7 | ||
| 
						 | 
					371a25eee9 | ||
| 
						 | 
					e535a71c71 | ||
| 
						 | 
					b9e5fecf5f | ||
| 
						 | 
					3af08472ad | ||
| 
						 | 
					fdc1b61507 | ||
| 
						 | 
					7fd154f094 | ||
| 
						 | 
					a209c32bf3 | ||
| 
						 | 
					75db459f0a | ||
| 
						 | 
					74e54c5a49 | ||
| 
						 | 
					6fc151577e | ||
| 
						 | 
					3dcc7202d5 | ||
| 
						 | 
					40981286ea | ||
| 
						 | 
					f55a1c3a6c | ||
| 
						 | 
					c5586a65c2 | ||
| 
						 | 
					ffb11ad5c6 | ||
| 
						 | 
					fbb1e49215 | ||
| 
						 | 
					c26320d94f | ||
| 
						 | 
					f6e892b1b6 | ||
| 
						 | 
					59302d4ba0 | ||
| 
						 | 
					c563a53c16 | ||
| 
						 | 
					7763bb9172 | ||
| 
						 | 
					e37a49086e | ||
| 
						 | 
					a1e5c621c0 | ||
| 
						 | 
					f776c1d2eb | ||
| 
						 | 
					3d5a8515a6 | ||
| 
						 | 
					42a7905205 | ||
| 
						 | 
					bfa0f8c6c2 | ||
| 
						 | 
					869d192ffc | ||
| 
						 | 
					60bc103a78 | ||
| 
						 | 
					8a0a7ce3a8 | ||
| 
						 | 
					31b1e988f4 | ||
| 
						 | 
					25c064c888 | ||
| 
						 | 
					884171aecf | ||
| 
						 | 
					45b2577974 | ||
| 
						 | 
					d58c7a8bdd | ||
| 
						 | 
					eed47311f8 | ||
| 
						 | 
					59eaae42b8 | ||
| 
						 | 
					59c620bfa5 | ||
| 
						 | 
					4294cac701 | ||
| 
						 | 
					282127fbff | ||
| 
						 | 
					d49e9fad19 | ||
| 
						 | 
					fba4cd0e62 | ||
| 
						 | 
					2166645ce4 | ||
| 
						 | 
					844f5b6b45 | ||
| 
						 | 
					424063235b | ||
| 
						 | 
					8272abef28 | ||
| 
						 | 
					5fbc93c3eb | ||
| 
						 | 
					8851df41c5 | ||
| 
						 | 
					a6f4612154 | ||
| 
						 | 
					52e5e869e6 | ||
| 
						 | 
					12ef1035bb | ||
| 
						 | 
					6c56b5301f | ||
| 
						 | 
					07b6625573 | ||
| 
						 | 
					fa0780bb91 | ||
| 
						 | 
					f08ac86834 | ||
| 
						 | 
					d6eca89229 | ||
| 
						 | 
					2bd1d7e996 | ||
| 
						 | 
					3b355421ec | ||
| 
						 | 
					0dd1219668 | ||
| 
						 | 
					b7131009fb | ||
| 
						 | 
					3d528e1b15 | ||
| 
						 | 
					f9a339a225 | ||
| 
						 | 
					0043e87014 | ||
| 
						 | 
					0f634a0c89 | ||
| 
						 | 
					047cd1a533 | ||
| 
						 | 
					f9eb61e90a | ||
| 
						 | 
					34afb0b257 | ||
| 
						 | 
					6bb9bd8b69 | ||
| 
						 | 
					72175c738f | ||
| 
						 | 
					2288094b26 | ||
| 
						 | 
					273b2b230b | ||
| 
						 | 
					3229a80c9f | ||
| 
						 | 
					5eba84eed3 | ||
| 
						 | 
					4fb483012c | ||
| 
						 | 
					f1a8fd843f | ||
| 
						 | 
					8920606b8b | ||
| 
						 | 
					90ce18019c | ||
| 
						 | 
					fe10cb2ef5 | ||
| 
						 | 
					842be6c52f | ||
| 
						 | 
					e4b754f64e | ||
| 
						 | 
					34ed4642ec | ||
| 
						 | 
					248f057137 | ||
| 
						 | 
					2b6a0c0a7c | ||
| 
						 | 
					072a8b2955 | ||
| 
						 | 
					0c817b6614 | ||
| 
						 | 
					e9cbd0c366 | ||
| 
						 | 
					ff314d7600 | ||
| 
						 | 
					d052e545af | ||
| 
						 | 
					da2b75a026 | ||
| 
						 | 
					0e2d3b7b6c | ||
| 
						 | 
					46a50aa001 | ||
| 
						 | 
					605a391178 | ||
| 
						 | 
					de6f82d094 | ||
| 
						 | 
					c1f3edbdd1 | ||
| 
						 | 
					a20a6f67c5 | ||
| 
						 | 
					75931492c3 | ||
| 
						 | 
					800b55c702 | ||
| 
						 | 
					a53411c0dd | ||
| 
						 | 
					b169aa2992 | ||
| 
						 | 
					9189ac1141 | ||
| 
						 | 
					5c7c79bd08 | ||
| 
						 | 
					8605321d06 | ||
| 
						 | 
					d314453037 | ||
| 
						 | 
					9cb69f77f1 | ||
| 
						 | 
					ee332e0c8e | ||
| 
						 | 
					0188493d54 | ||
| 
						 | 
					ae07fd2ba8 | ||
| 
						 | 
					d76a734043 | ||
| 
						 | 
					b66def2b4c | ||
| 
						 | 
					20b9ab49a7 | ||
| 
						 | 
					c8cd13337e | ||
| 
						 | 
					40e9e40cb4 | ||
| 
						 | 
					09c70dec08 | ||
| 
						 | 
					0dc570862a | ||
| 
						 | 
					dbaf4f9361 | ||
| 
						 | 
					433575068c | ||
| 
						 | 
					40087ce7c0 | ||
| 
						 | 
					e12d46ac50 | ||
| 
						 | 
					1e55ed5c7d | ||
| 
						 | 
					6dd4fe0740 | ||
| 
						 | 
					3789e2e6ce | ||
| 
						 | 
					1962ebf8e7 | ||
| 
						 | 
					7c144d5a7e | ||
| 
						 | 
					0f0540d00b | ||
| 
						 | 
					3f29ed6d44 | ||
| 
						 | 
					1bfa7dfe39 | ||
| 
						 | 
					85daec253c | ||
| 
						 | 
					389a15a867 | ||
| 
						 | 
					74befdfbe0 | ||
| 
						 | 
					d31feb8ff9 | ||
| 
						 | 
					4c3568bfd6 | ||
| 
						 | 
					b4ef5e22e0 | ||
| 
						 | 
					23786eae32 | ||
| 
						 | 
					c84f84c70d | ||
| 
						 | 
					e5f8e5e57a | ||
| 
						 | 
					53a3abc76b | ||
| 
						 | 
					bfd6474f6b | ||
| 
						 | 
					d3b89e114a | ||
| 
						 | 
					aeddea2b71 | ||
| 
						 | 
					cef5b14baa | ||
| 
						 | 
					82d310d0d9 | ||
| 
						 | 
					4fdb42377b | ||
| 
						 | 
					be8a5d0aef | ||
| 
						 | 
					dd433679e6 | ||
| 
						 | 
					99dcd33f04 | ||
| 
						 | 
					e817eb6cec | ||
| 
						 | 
					060f7ca2d2 | ||
| 
						 | 
					638c715a51 | ||
| 
						 | 
					af9a63287e | ||
| 
						 | 
					00f36c5f45 | ||
| 
						 | 
					e69d82a5fb | ||
| 
						 | 
					d165da07fe | ||
| 
						 | 
					15363cd6dc | ||
| 
						 | 
					b3272fd799 | ||
| 
						 | 
					fa31335926 | ||
| 
						 | 
					acc4cf87cd | ||
| 
						 | 
					7444342675 | ||
| 
						 | 
					ee1235a7cd | ||
| 
						 | 
					c514a2a89a | ||
| 
						 | 
					e2f0580dfe | ||
| 
						 | 
					d165bed2d6 | ||
| 
						 | 
					802a5b618e | ||
| 
						 | 
					1ca763d1d1 | ||
| 
						 | 
					8b26c93a59 | ||
| 
						 | 
					b819c72700 | ||
| 
						 | 
					d2cfb7fd13 | ||
| 
						 | 
					e37973913d | ||
| 
						 | 
					8b5295d003 | ||
| 
						 | 
					fe0afb211e | ||
| 
						 | 
					141b3d0c2f | ||
| 
						 | 
					2a6a22a3b0 | ||
| 
						 | 
					4937281ddc | ||
| 
						 | 
					8e27ed2fdd | ||
| 
						 | 
					9bf9617ad6 | ||
| 
						 | 
					69565afab0 | ||
| 
						 | 
					39aac63521 | ||
| 
						 | 
					f19d333ef6 | ||
| 
						 | 
					3a634a273a | ||
| 
						 | 
					06d1b029f6 | ||
| 
						 | 
					45bf417301 | ||
| 
						 | 
					48029d7e74 | ||
| 
						 | 
					83e078256c | ||
| 
						 | 
					2f5e99ca02 | ||
| 
						 | 
					6014c21bc9 | ||
| 
						 | 
					8c0b1dc3c5 | ||
| 
						 | 
					be3c5f0b94 | ||
| 
						 | 
					e268e8559e | ||
| 
						 | 
					29bb6f65f1 | ||
| 
						 | 
					37f07a54bd | ||
| 
						 | 
					da8c666e4f | ||
| 
						 | 
					c11681becd | ||
| 
						 | 
					78a1e5d1a6 | ||
| 
						 | 
					116f60e063 | ||
| 
						 | 
					7725853446 | ||
| 
						 | 
					9993e2121d | ||
| 
						 | 
					9a70ce4245 | ||
| 
						 | 
					7ba53a4f41 | ||
| 
						 | 
					1297c54b26 | ||
| 
						 | 
					1045b8d382 | ||
| 
						 | 
					d2bdad5945 | ||
| 
						 | 
					17e8d60c01 | ||
| 
						 | 
					ec1b351317 | ||
| 
						 | 
					75fca27f8e | ||
| 
						 | 
					f2cd2882a0 | ||
| 
						 | 
					07d8a14ec0 | ||
| 
						 | 
					31e598d2f3 | ||
| 
						 | 
					cbf58d88d0 | ||
| 
						 | 
					300cbc2e21 | ||
| 
						 | 
					ec9e399668 | ||
| 
						 | 
					2691f1efc8 | ||
| 
						 | 
					d9bf55570b | ||
| 
						 | 
					b54a8531a9 | ||
| 
						 | 
					789fd0b74a | ||
| 
						 | 
					8103915797 | ||
| 
						 | 
					c461254dea | ||
| 
						 | 
					3f140a6008 | ||
| 
						 | 
					a0a47f2767 | ||
| 
						 | 
					213017e9cf | ||
| 
						 | 
					69f2f5cb6f | ||
| 
						 | 
					d46cab4a94 | ||
| 
						 | 
					4dc453c087 | ||
| 
						 | 
					a1d5983991 | ||
| 
						 | 
					4894ce16fc | ||
| 
						 | 
					aa4435c23b | ||
| 
						 | 
					dca8f962e0 | ||
| 
						 | 
					059b57677c | ||
| 
						 | 
					9896421586 | ||
| 
						 | 
					6663608d15 | ||
| 
						 | 
					d21e4eb8ae | ||
| 
						 | 
					d381dd68cf | ||
| 
						 | 
					7a97e66fb3 | ||
| 
						 | 
					d86e6d3ed2 | ||
| 
						 | 
					f99ca90540 | ||
| 
						 | 
					e24cb6cb90 | ||
| 
						 | 
					b05f408348 | ||
| 
						 | 
					c5e7d839d5 | ||
| 
						 | 
					e3ade3ccb5 | ||
| 
						 | 
					71afe05b9f | ||
| 
						 | 
					5a267c4312 | ||
| 
						 | 
					fbcf86b83e | ||
| 
						 | 
					5c3f36b4b4 | ||
| 
						 | 
					9de4e5ebe4 | ||
| 
						 | 
					7033a1c072 | ||
| 
						 | 
					4efa0d9f68 | ||
| 
						 | 
					e021fe9444 | ||
| 
						 | 
					23d1041bd8 | ||
| 
						 | 
					be71ccbce3 | ||
| 
						 | 
					0db485a448 | ||
| 
						 | 
					6d05a33ed9 | ||
| 
						 | 
					569c169559 | ||
| 
						 | 
					ecbc7f89c0 | ||
| 
						 | 
					5649b738be | ||
| 
						 | 
					0f9f6cf180 | ||
| 
						 | 
					7f70dbcad5 | ||
| 
						 | 
					28b932fb4e | ||
| 
						 | 
					a631741141 | ||
| 
						 | 
					c7d0966201 | ||
| 
						 | 
					cf491357b6 | ||
| 
						 | 
					02c17651bf | ||
| 
						 | 
					890b34d22e | ||
| 
						 | 
					e89fb10736 | ||
| 
						 | 
					48e8b52fbb | ||
| 
						 | 
					61f19c6ca3 | ||
| 
						 | 
					8c9233f6b2 | ||
| 
						 | 
					6fcf98f617 | ||
| 
						 | 
					2f4fe0175b | ||
| 
						 | 
					9f62ff5df6 | ||
| 
						 | 
					4e3f3e751e | ||
| 
						 | 
					04e6568a7e | ||
| 
						 | 
					7a39b98471 | ||
| 
						 | 
					4ab91a93e8 | ||
| 
						 | 
					6647ca6ec5 | ||
| 
						 | 
					529e01736c | ||
| 
						 | 
					078fc4186b | ||
| 
						 | 
					fabbb3fc34 | ||
| 
						 | 
					1db063e705 | ||
| 
						 | 
					1fa9ef246a | ||
| 
						 | 
					e12220cc4c | ||
| 
						 | 
					77fcad041f | ||
| 
						 | 
					e213555c98 | ||
| 
						 | 
					3a813b3c3b | ||
| 
						 | 
					028a9d6785 | ||
| 
						 | 
					d0aca8017f | ||
| 
						 | 
					91386937ff | ||
| 
						 | 
					0fc51ac5a6 | ||
| 
						 | 
					bc2183b440 | ||
| 
						 | 
					01c4fba15c | ||
| 
						 | 
					9b6474378a | ||
| 
						 | 
					5446ed4733 | ||
| 
						 | 
					a50414f594 | ||
| 
						 | 
					fe7fa8e794 | ||
| 
						 | 
					6a175b42db | ||
| 
						 | 
					a7748c2024 | ||
| 
						 | 
					8f87c15bda | ||
| 
						 | 
					82f52e5a6f | ||
| 
						 | 
					67d2dd62f9 | ||
| 
						 | 
					138b4f27b4 | ||
| 
						 | 
					c26ec47e90 | ||
| 
						 | 
					8337a375dd | ||
| 
						 | 
					8260243be1 | ||
| 
						 | 
					ef6f24a7ce | ||
| 
						 | 
					abe90019d3 | ||
| 
						 | 
					c185cdf2b4 | ||
| 
						 | 
					f71c8c7d84 | ||
| 
						 | 
					d32f1390b3 | ||
| 
						 | 
					68f3c2adca | ||
| 
						 | 
					2a8e2edf83 | ||
| 
						 | 
					401598c2fe | ||
| 
						 | 
					d60848d04b | ||
| 
						 | 
					d2dd3d7e16 | ||
| 
						 | 
					1c63ceb317 | ||
| 
						 | 
					c25283185a | ||
| 
						 | 
					54db98c220 | ||
| 
						 | 
					5565f45f5e | ||
| 
						 | 
					49c4d9c9cd | ||
| 
						 | 
					c2639e0738 | ||
| 
						 | 
					e485a23a3e | ||
| 
						 | 
					d7d5baa0e2 | ||
| 
						 | 
					e1e55e4d04 | ||
| 
						 | 
					1eb530d8dc | ||
| 
						 | 
					bad67830b3 | ||
| 
						 | 
					db22c83031 | ||
| 
						 | 
					a4b39c6ab8 | ||
| 
						 | 
					d10e174fd1 | ||
| 
						 | 
					e994c6af75 | ||
| 
						 | 
					ef442d5803 | ||
| 
						 | 
					8680e010c2 | ||
| 
						 | 
					4d8dcf7b77 | ||
| 
						 | 
					abdbd3100f | ||
| 
						 | 
					ddace02efe | ||
| 
						 | 
					1f4c8c4f09 | ||
| 
						 | 
					8162b32bad | ||
| 
						 | 
					daf527b276 | ||
| 
						 | 
					ee51c07be6 | ||
| 
						 | 
					856ba4c6c6 | ||
| 
						 | 
					b3e23373bd | ||
| 
						 | 
					e5adab39b1 | ||
| 
						 | 
					d31153584e | ||
| 
						 | 
					823d296e12 | ||
| 
						 | 
					e09450103b | ||
| 
						 | 
					fbc4407583 | ||
| 
						 | 
					a79e5d7925 | ||
| 
						 | 
					82491d5c06 | ||
| 
						 | 
					b6f889085d | ||
| 
						 | 
					cdbbb7d900 | ||
| 
						 | 
					2bf4d9a22c | ||
| 
						 | 
					f1918aa343 | ||
| 
						 | 
					56580fc6f8 | ||
| 
						 | 
					2e6600425e | ||
| 
						 | 
					cc021fc200 | ||
| 
						 | 
					e6aed92742 | ||
| 
						 | 
					02fb4d96d1 | ||
| 
						 | 
					43e3c5e5fa | ||
| 
						 | 
					4f496f2f70 | ||
| 
						 | 
					d681bc7520 | ||
| 
						 | 
					f21a2b3270 | ||
| 
						 | 
					5f5a28d20e | ||
| 
						 | 
					89f9cb4041 | ||
| 
						 | 
					2b280bcc69 | ||
| 
						 | 
					1c0224be42 | ||
| 
						 | 
					dbdb7fa55a | ||
| 
						 | 
					83a43bea8a | ||
| 
						 | 
					abb4cdafe9 | ||
| 
						 | 
					2b7bcf2505 | ||
| 
						 | 
					5aefdd93cb | ||
| 
						 | 
					4b27fae069 | ||
| 
						 | 
					10a13eba72 | ||
| 
						 | 
					44ac2776ae | ||
| 
						 | 
					36e3e6ed16 | ||
| 
						 | 
					5f9cbc4209 | ||
| 
						 | 
					3239f059b8 | ||
| 
						 | 
					45bac25d90 | ||
| 
						 | 
					354c8dcd82 | ||
| 
						 | 
					b1e4cc370d | ||
| 
						 | 
					2293474b90 | ||
| 
						 | 
					9e1aef7183 | ||
| 
						 | 
					f68323da7d | ||
| 
						 | 
					a61aafa325 | ||
| 
						 | 
					33bea767eb | ||
| 
						 | 
					9ab7cda010 | ||
| 
						 | 
					6da70628c6 | ||
| 
						 | 
					3bae748256 | ||
| 
						 | 
					521c4b303d | ||
| 
						 | 
					a2effd123a | ||
| 
						 | 
					7b704e173c | ||
| 
						 | 
					6045d051d7 | ||
| 
						 | 
					cfe00ed4ad | ||
| 
						 | 
					0b4bdcf18f | ||
| 
						 | 
					8cade952bf | ||
| 
						 | 
					385e612fa5 | ||
| 
						 | 
					1886388791 | ||
| 
						 | 
					32fe5b14ec | ||
| 
						 | 
					bbdc483671 | ||
| 
						 | 
					f11d3c329c | ||
| 
						 | 
					b0d13fa4cb | ||
| 
						 | 
					0fb5a65a58 | ||
| 
						 | 
					c8afb02b4c | ||
| 
						 | 
					869d65337e | ||
| 
						 | 
					277df1c6b1 | ||
| 
						 | 
					5ec5b95f54 | ||
| 
						 | 
					9e61c904ac | ||
| 
						 | 
					7efb955fd0 | ||
| 
						 | 
					75899741b9 | ||
| 
						 | 
					d465199411 | ||
| 
						 | 
					55123424c8 | ||
| 
						 | 
					f5e4a78b59 | ||
| 
						 | 
					7515a75206 | ||
| 
						 | 
					4750e6f3c5 | ||
| 
						 | 
					b7aaa4d907 | ||
| 
						 | 
					e61e09f658 | ||
| 
						 | 
					058e993acb | ||
| 
						 | 
					359d500908 | ||
| 
						 | 
					cb42855445 | ||
| 
						 | 
					d8ff0336a5 | ||
| 
						 | 
					0682d25da5 | ||
| 
						 | 
					d86d14074d | ||
| 
						 | 
					8500397cf1 | ||
| 
						 | 
					bd600fbebe | ||
| 
						 | 
					064bbb999f | ||
| 
						 | 
					bedc61ac45 | ||
| 
						 | 
					61a6992559 | ||
| 
						 | 
					ebee2e323d | ||
| 
						 | 
					b2f8de571f | ||
| 
						 | 
					cb4a5f5a2b | ||
| 
						 | 
					1beb7de7e0 | ||
| 
						 | 
					89ab5f4380 | ||
| 
						 | 
					439b84c782 | ||
| 
						 | 
					0e899d7728 | ||
| 
						 | 
					1a85fb2bd0 | ||
| 
						 | 
					8d11767048 | ||
| 
						 | 
					fcccf9aa0d | ||
| 
						 | 
					72bd027537 | ||
| 
						 | 
					1d44c9ccc1 | ||
| 
						 | 
					33831759b5 | ||
| 
						 | 
					6fe932b255 | ||
| 
						 | 
					8da02df8e0 | ||
| 
						 | 
					587c99351d | ||
| 
						 | 
					88c8d72a21 | ||
| 
						 | 
					cf99fed17a | ||
| 
						 | 
					ca48b6bf35 | ||
| 
						 | 
					4dcd606b47 | ||
| 
						 | 
					393ddd6e1f | ||
| 
						 | 
					840e796aa9 | ||
| 
						 | 
					5fd096da8d | ||
| 
						 | 
					eb29c5c285 | ||
| 
						 | 
					1eb286e43e | ||
| 
						 | 
					ae76ebe2d1 | ||
| 
						 | 
					e4505aefd9 | ||
| 
						 | 
					d6b0612882 | ||
| 
						 | 
					4c65eb0af8 | ||
| 
						 | 
					318a8258fd | ||
| 
						 | 
					17ae28e0fe | ||
| 
						 | 
					3c4f622479 | ||
| 
						 | 
					3ce43764be | ||
| 
						 | 
					b555c60e49 | ||
| 
						 | 
					2336d010ef | ||
| 
						 | 
					b9af0d89d5 | ||
| 
						 | 
					6f2afe0c30 | ||
| 
						 | 
					d8c61d459e | ||
| 
						 | 
					7ae5ebbeb2 | ||
| 
						 | 
					7335b71dfb | ||
| 
						 | 
					9583b03074 | ||
| 
						 | 
					3c81d5f125 | ||
| 
						 | 
					688699a046 | ||
| 
						 | 
					090f5a9a45 | ||
| 
						 | 
					da58d03ff7 | ||
| 
						 | 
					9ea3831c08 | ||
| 
						 | 
					a46f55b9de | ||
| 
						 | 
					a634f64400 | ||
| 
						 | 
					bcd8a3b240 | ||
| 
						 | 
					04d5d1895c | ||
| 
						 | 
					abd2775a70 | ||
| 
						 | 
					73226415fc | ||
| 
						 | 
					ab160ef445 | ||
| 
						 | 
					268fe09322 | ||
| 
						 | 
					7a557e984a | ||
| 
						 | 
					f1a55cbe6d | ||
| 
						 | 
					1e35d95df8 | ||
| 
						 | 
					d8387b418d | ||
| 
						 | 
					adea16a294 | ||
| 
						 | 
					7f2d5cab2d | ||
| 
						 | 
					c6ff612f6e | ||
| 
						 | 
					8db353e1d7 | ||
| 
						 | 
					e6978117a7 | ||
| 
						 | 
					5dcb055077 | ||
| 
						 | 
					0b5e1a9b2f | ||
| 
						 | 
					2e17a97474 | ||
| 
						 | 
					74ddbd8a3b | ||
| 
						 | 
					b8039a821b | ||
| 
						 | 
					438312f00e | ||
| 
						 | 
					381ccaa391 | ||
| 
						 | 
					3204494883 | ||
| 
						 | 
					e264f699d4 | ||
| 
						 | 
					68d4b77d44 | ||
| 
						 | 
					e1ac99af1f | ||
| 
						 | 
					be0d17e812 | ||
| 
						 | 
					4eb35406f4 | ||
| 
						 | 
					624745ab20 | ||
| 
						 | 
					9354822e09 | ||
| 
						 | 
					17d4f9513e | ||
| 
						 | 
					f830d77307 | ||
| 
						 | 
					a03c76b228 | ||
| 
						 | 
					35ad61429d | ||
| 
						 | 
					b5b3d9e5c7 | ||
| 
						 | 
					6e682c2b01 | ||
| 
						 | 
					7e2ea2ece0 | ||
| 
						 | 
					01926d66d7 | ||
| 
						 | 
					69f7d0a0ce | ||
| 
						 | 
					d1c84705ec | ||
| 
						 | 
					3274908551 | ||
| 
						 | 
					c730934498 | ||
| 
						 | 
					471a8b223b | ||
| 
						 | 
					47ee9202c3 | ||
| 
						 | 
					1bcbe89802 | ||
| 
						 | 
					bf57e9bb12 | ||
| 
						 | 
					318a7584f3 | ||
| 
						 | 
					961ec228d4 | ||
| 
						 | 
					a777eb3d81 | ||
| 
						 | 
					7f79b52dae | ||
| 
						 | 
					db680edc26 | ||
| 
						 | 
					e6ce80458f | ||
| 
						 | 
					cdcb123aa8 | ||
| 
						 | 
					78081a1652 | ||
| 
						 | 
					7408976b15 | ||
| 
						 | 
					763bb73cc3 | ||
| 
						 | 
					1dee2cd55e | ||
| 
						 | 
					426ecfd136 | ||
| 
						 | 
					4913baed16 | ||
| 
						 | 
					675f6a8901 | ||
| 
						 | 
					2147284cad | ||
| 
						 | 
					7f1870da5f | ||
| 
						 | 
					2149a095f7 | ||
| 
						 | 
					e8d21adbaa | ||
| 
						 | 
					fa28531322 | ||
| 
						 | 
					deef85ca9a | ||
| 
						 | 
					4f4427ff41 | ||
| 
						 | 
					0ed285e84d | ||
| 
						 | 
					905ca77c9e | ||
| 
						 | 
					61043c7e74 | ||
| 
						 | 
					4545c9f22f | ||
| 
						 | 
					ad772d7b48 | ||
| 
						 | 
					a56ef92729 | ||
| 
						 | 
					561d01c450 | ||
| 
						 | 
					c6c8a30da1 | ||
| 
						 | 
					914dbeb12c | ||
| 
						 | 
					56dc90eaab | ||
| 
						 | 
					f51c567de3 | ||
| 
						 | 
					9b2acca63e | ||
| 
						 | 
					afcd9f1b1c | ||
| 
						 | 
					755ccbc468 | ||
| 
						 | 
					0af7aec211 | ||
| 
						 | 
					ee085ad6bd | ||
| 
						 | 
					719bec2606 | ||
| 
						 | 
					b1db9dbb16 | ||
| 
						 | 
					609044aea2 | ||
| 
						 | 
					ba481718a4 | ||
| 
						 | 
					1be60dde7f | ||
| 
						 | 
					e92e811a61 | ||
| 
						 | 
					5aa0db8681 | ||
| 
						 | 
					d5691211dd | ||
| 
						 | 
					a93695a70e | ||
| 
						 | 
					ce935a2697 | ||
| 
						 | 
					812ce0d93f | ||
| 
						 | 
					bbae5b49f9 | ||
| 
						 | 
					772a985dc3 | ||
| 
						 | 
					8a7514de8a | ||
| 
						 | 
					32ad212ac9 | ||
| 
						 | 
					8a8d5c784c | ||
| 
						 | 
					125830ab4b | ||
| 
						 | 
					5b75b423e6 | ||
| 
						 | 
					012d7e2878 | ||
| 
						 | 
					cd3029f36f | ||
| 
						 | 
					6adaac7e18 | ||
| 
						 | 
					cde5e35d9b | ||
| 
						 | 
					ee17fba72e | ||
| 
						 | 
					6296b89319 | ||
| 
						 | 
					5450db9151 | ||
| 
						 | 
					b4700f026b | ||
| 
						 | 
					d771fa7c48 | ||
| 
						 | 
					b2c378267b | ||
| 
						 | 
					384c8f3560 | ||
| 
						 | 
					f44ef427a2 | ||
| 
						 | 
					c54a4301ee | ||
| 
						 | 
					36a3514225 | ||
| 
						 | 
					e1edd41e1b | ||
| 
						 | 
					13e60c55a1 | ||
| 
						 | 
					9b8b1a68f0 | ||
| 
						 | 
					4ec9316155 | ||
| 
						 | 
					ef769500d4 | ||
| 
						 | 
					23692574a2 | ||
| 
						 | 
					5f6fd682a5 | ||
| 
						 | 
					db24518a30 | ||
| 
						 | 
					90933ac660 | ||
| 
						 | 
					087579a6f4 | ||
| 
						 | 
					de59cde155 | ||
| 
						 | 
					3cd95eacdf | ||
| 
						 | 
					deb81b2ad4 | ||
| 
						 | 
					4e717cdb30 | ||
| 
						 | 
					33acd6f041 | ||
| 
						 | 
					7575e6afc4 | ||
| 
						 | 
					316a9f6480 | ||
| 
						 | 
					c6de584cad | ||
| 
						 | 
					d997ff6aa8 | ||
| 
						 | 
					b9ccecf86e | ||
| 
						 | 
					bd5d21aaf2 | ||
| 
						 | 
					19e07771d1 | ||
| 
						 | 
					ef267ab449 | ||
| 
						 | 
					4f6ed683e8 | ||
| 
						 | 
					c818e7064f | ||
| 
						 | 
					ead6ab2ef7 | ||
| 
						 | 
					5c3dc49f44 | ||
| 
						 | 
					83884180ac | ||
| 
						 | 
					4cac96c33a | ||
| 
						 | 
					5df4be1165 | ||
| 
						 | 
					96445f1b7d | ||
| 
						 | 
					4bdd7596d3 | ||
| 
						 | 
					18aae32015 | ||
| 
						 | 
					a8996b9e52 | ||
| 
						 | 
					94095c61d8 | ||
| 
						 | 
					1cddd744ad | ||
| 
						 | 
					786738dd00 | ||
| 
						 | 
					5b8d5fdf2f | ||
| 
						 | 
					694f31ca37 | ||
| 
						 | 
					9c1ad0f9f7 | ||
| 
						 | 
					71c6335293 | ||
| 
						 | 
					8c38ea4ebc | ||
| 
						 | 
					44d84ac164 | ||
| 
						 | 
					930f9bd534 | ||
| 
						 | 
					b61fbbde46 | ||
| 
						 | 
					ec956b0334 | ||
| 
						 | 
					44ffe0dc79 | ||
| 
						 | 
					e3a61fba52 | ||
| 
						 | 
					65794f60ec | ||
| 
						 | 
					7a710b4970 | ||
| 
						 | 
					0bb20cc611 | ||
| 
						 | 
					433c0c895e | ||
| 
						 | 
					67e8d22958 | ||
| 
						 | 
					10d1fc0e73 | ||
| 
						 | 
					2260c8aa11 | ||
| 
						 | 
					97eb62aff8 | ||
| 
						 | 
					1855fc35f2 | ||
| 
						 | 
					dc3ed35313 | ||
| 
						 | 
					6b868df554 | ||
| 
						 | 
					5ccbbe40c2 | ||
| 
						 | 
					86f93a53d6 | ||
| 
						 | 
					f53347631e | ||
| 
						 | 
					efe3cb6e1a | ||
| 
						 | 
					32ac4edeed | ||
| 
						 | 
					4c04c09138 | ||
| 
						 | 
					47ea80baee | ||
| 
						 | 
					95c3fa836b | ||
| 
						 | 
					ab60a12465 | ||
| 
						 | 
					2d38e51867 | ||
| 
						 | 
					a5dda669e3 | ||
| 
						 | 
					3c4f3a680a | ||
| 
						 | 
					b61c06384a | ||
| 
						 | 
					e7742bfb7c | ||
| 
						 | 
					22307ae0ee | ||
| 
						 | 
					e150150d9f | ||
| 
						 | 
					943f0733bb | ||
| 
						 | 
					8274447dd9 | ||
| 
						 | 
					083a84e5d0 | ||
| 
						 | 
					d5eb386d00 | ||
| 
						 | 
					1ce7b48057 | ||
| 
						 | 
					cbcdd337aa | ||
| 
						 | 
					c144adf77c | ||
| 
						 | 
					d390039873 | ||
| 
						 | 
					7d0c58a285 | ||
| 
						 | 
					9263001b21 | ||
| 
						 | 
					66ee6d07f8 | ||
| 
						 | 
					a40dcca794 | ||
| 
						 | 
					15e3dfe1d3 | ||
| 
						 | 
					a1de9367ec | ||
| 
						 | 
					eceb37bde2 | ||
| 
						 | 
					56fcf85ab6 | ||
| 
						 | 
					77db81d661 | ||
| 
						 | 
					2ad7fcbc2f | ||
| 
						 | 
					2c62dfd124 | ||
| 
						 | 
					ef66497a0d | ||
| 
						 | 
					1128029599 | ||
| 
						 | 
					befc30bc55 | ||
| 
						 | 
					ca5846cde9 | ||
| 
						 | 
					8547ab1663 | ||
| 
						 | 
					9c0e6ac365 | ||
| 
						 | 
					552b963e6d | ||
| 
						 | 
					e2b48366d3 | ||
| 
						 | 
					5e0d9aea32 | ||
| 
						 | 
					ae13c93b7d | ||
| 
						 | 
					b9f8a4a477 | ||
| 
						 | 
					68e9f75708 | ||
| 
						 | 
					d569693f24 | ||
| 
						 | 
					15d8bb2105 | ||
| 
						 | 
					b2ca777a08 | ||
| 
						 | 
					ba01198e6c | ||
| 
						 | 
					6ebd5e1761 | ||
| 
						 | 
					2723eda1e4 | ||
| 
						 | 
					1fa3a5cce9 | ||
| 
						 | 
					fe8aee6b08 | ||
| 
						 | 
					0639e2a6e2 | ||
| 
						 | 
					f1d707705e | ||
| 
						 | 
					296a7db960 | ||
| 
						 | 
					4c0936e72f | ||
| 
						 | 
					0992e391ba | ||
| 
						 | 
					b22aaeef6a | ||
| 
						 | 
					8090ee0e5d | ||
| 
						 | 
					f7d31bb3e3 | ||
| 
						 | 
					9cd928674f | ||
| 
						 | 
					3ea8a4d220 | ||
| 
						 | 
					b0d3ba76a0 | ||
| 
						 | 
					ab798fe5ba | ||
| 
						 | 
					e7d90e08b9 | ||
| 
						 | 
					c2404f77e9 | ||
| 
						 | 
					ec4a16f2e0 | ||
| 
						 | 
					ca5de26f50 | ||
| 
						 | 
					71920d61e6 | ||
| 
						 | 
					5de75eee56 | ||
| 
						 | 
					2d5fc39d35 | ||
| 
						 | 
					c001ed53fa | ||
| 
						 | 
					39e01e9349 | ||
| 
						 | 
					9e54d4c7d2 | ||
| 
						 | 
					56bf97ffc9 | ||
| 
						 | 
					7d3e719a2c | ||
| 
						 | 
					e55d4fd5c1 | ||
| 
						 | 
					5ee231415f | ||
| 
						 | 
					c866771cd2 | ||
| 
						 | 
					4a24219a1a | ||
| 
						 | 
					733a184ce0 | ||
| 
						 | 
					eee09e79e8 | ||
| 
						 | 
					6df85adf3e | ||
| 
						 | 
					3ee6036551 | ||
| 
						 | 
					fb65080548 | ||
| 
						 | 
					3a5f21b0d1 | ||
| 
						 | 
					13a5598dc3 | ||
| 
						 | 
					5a6c89661a | ||
| 
						 | 
					7c5745720a | ||
| 
						 | 
					00ae13f966 | ||
| 
						 | 
					29dc39fce1 | ||
| 
						 | 
					5c184cfc0d | ||
| 
						 | 
					055022a55f | ||
| 
						 | 
					c30e908034 | ||
| 
						 | 
					8d24c0212e | ||
| 
						 | 
					8240cea628 | ||
| 
						 | 
					f2a33eb372 | ||
| 
						 | 
					e134a40208 | ||
| 
						 | 
					690888cfc1 | ||
| 
						 | 
					fb8d9b6645 | ||
| 
						 | 
					f7ddb39ee1 | ||
| 
						 | 
					145084b699 | ||
| 
						 | 
					f1ba12607a | ||
| 
						 | 
					bb87b65f08 | ||
| 
						 | 
					b0f6e7cee4 | ||
| 
						 | 
					ed72d4e104 | ||
| 
						 | 
					8ec1bfe897 | ||
| 
						 | 
					1dec17562f | ||
| 
						 | 
					9cc3795f1a | ||
| 
						 | 
					be1306a6c2 | ||
| 
						 | 
					e9160a31e0 | ||
| 
						 | 
					0a670c578f | ||
| 
						 | 
					e3c15fc4b9 | ||
| 
						 | 
					dc7c915553 | ||
| 
						 | 
					b7eeb6e67f | ||
| 
						 | 
					7e4193b538 | ||
| 
						 | 
					a932803eac | ||
| 
						 | 
					52560142bf | ||
| 
						 | 
					874a4ef8c7 | ||
| 
						 | 
					0bb3ac7c31 | ||
| 
						 | 
					1e9f5845ab | ||
| 
						 | 
					c41dfc2501 | ||
| 
						 | 
					30ac7eced1 | ||
| 
						 | 
					466d093a92 | ||
| 
						 | 
					1e9be353c2 | ||
| 
						 | 
					4f4277d9c7 | ||
| 
						 | 
					6728bda5c5 | ||
| 
						 | 
					dc9f154823 | ||
| 
						 | 
					d7168a82e2 | ||
| 
						 | 
					c9c8ee3796 | ||
| 
						 | 
					c7aae10300 | ||
| 
						 | 
					909941405f | ||
| 
						 | 
					4031eb1d91 | ||
| 
						 | 
					59cf6fd4f0 | ||
| 
						 | 
					6de9732a88 | ||
| 
						 | 
					1f7f500922 | ||
| 
						 | 
					4b1462ec65 | ||
| 
						 | 
					6ed47f0aad | ||
| 
						 | 
					2d8c7ba9fc | ||
| 
						 | 
					3b342d18bc | ||
| 
						 | 
					f24ad3800c | ||
| 
						 | 
					e2ff369eba | ||
| 
						 | 
					9691a78f6b | ||
| 
						 | 
					7ff6b6fafd | ||
| 
						 | 
					7c621cfbdf | ||
| 
						 | 
					5acadc9cd7 | ||
| 
						 | 
					2ff609dd43 | ||
| 
						 | 
					da48a6ba87 | ||
| 
						 | 
					cd6c58216a | ||
| 
						 | 
					bdbd0cf27a | ||
| 
						 | 
					d792937686 | ||
| 
						 | 
					bac66ec26b | ||
| 
						 | 
					77516822f6 | ||
| 
						 | 
					37d8c67530 | ||
| 
						 | 
					cfdcae4bc7 | ||
| 
						 | 
					74a6921bc4 | ||
| 
						 | 
					490cccba3c | ||
| 
						 | 
					839441e236 | ||
| 
						 | 
					ba9ea943e2 | ||
| 
						 | 
					455087faae | ||
| 
						 | 
					31def9e217 | ||
| 
						 | 
					ee3514ccdc | ||
| 
						 | 
					cf606d7da0 | ||
| 
						 | 
					eb26a581f9 | ||
| 
						 | 
					b04cbebf86 | ||
| 
						 | 
					4272af801f | ||
| 
						 | 
					0b633027cb | ||
| 
						 | 
					93943ef949 | ||
| 
						 | 
					b184b87714 | ||
| 
						 | 
					a11473f85d | ||
| 
						 | 
					1eedad27a2 | ||
| 
						 | 
					ac02d379ba | ||
| 
						 | 
					a4ebf5b507 | ||
| 
						 | 
					c410769588 | ||
| 
						 | 
					997a987943 | ||
| 
						 | 
					6201dc083a | ||
| 
						 | 
					b33f47804d | ||
| 
						 | 
					7ba5e098a3 | ||
| 
						 | 
					824b78021c | ||
| 
						 | 
					31657c85e5 | ||
| 
						 | 
					7010e5ea84 | ||
| 
						 | 
					2cba6b246d | ||
| 
						 | 
					52cc2a7a0c | ||
| 
						 | 
					c012e2b408 | ||
| 
						 | 
					646a6b604f | ||
| 
						 | 
					cca00a6378 | ||
| 
						 | 
					10b7fc7e51 | ||
| 
						 | 
					43e4544d51 | ||
| 
						 | 
					21aa8f0b45 | ||
| 
						 | 
					b708fa51ad | ||
| 
						 | 
					8709f6c4b3 | ||
| 
						 | 
					2ac560e58b | ||
| 
						 | 
					8f8ba9486d | ||
| 
						 | 
					f55924b3e0 | ||
| 
						 | 
					7240acdebc | ||
| 
						 | 
					b9b06b00bf | ||
| 
						 | 
					51f258d103 | ||
| 
						 | 
					4c75f1c7b7 | ||
| 
						 | 
					ed7bff1fec | ||
| 
						 | 
					01a79be2c9 | ||
| 
						 | 
					d211fcd34f | ||
| 
						 | 
					159834171e | ||
| 
						 | 
					8a38c72c48 | ||
| 
						 | 
					fbcdc192d5 | ||
| 
						 | 
					ee642859ef | ||
| 
						 | 
					9f579f12fc | ||
| 
						 | 
					825a526789 | ||
| 
						 | 
					ae8a01ead6 | ||
| 
						 | 
					9dde0b54a3 | ||
| 
						 | 
					f1343b2f55 | ||
| 
						 | 
					962b7985e6 | ||
| 
						 | 
					5a1c64d316 | ||
| 
						 | 
					01b2cf82ec | ||
| 
						 | 
					c033c4c71c | ||
| 
						 | 
					aa791ee5cf | ||
| 
						 | 
					305671e2ab | ||
| 
						 | 
					d654736834 | ||
| 
						 | 
					2c81bfead5 | ||
| 
						 | 
					77b3bc239d | ||
| 
						 | 
					c10d15aa0f | ||
| 
						 | 
					a88deadd6f | ||
| 
						 | 
					e6ea8f1199 | ||
| 
						 | 
					4d4151f6c1 | ||
| 
						 | 
					518becfe2e | ||
| 
						 | 
					6f6b93da02 | ||
| 
						 | 
					45b1843dc9 | ||
| 
						 | 
					cb86a302d8 | ||
| 
						 | 
					d15ed439ae | ||
| 
						 | 
					b765e1f3b7 | ||
| 
						 | 
					2527b53019 | ||
| 
						 | 
					78a47826b2 | ||
| 
						 | 
					ecfaa4f869 | ||
| 
						 | 
					f36adcdb73 | ||
| 
						 | 
					13616f8f96 | ||
| 
						 | 
					ab486d1e27 | ||
| 
						 | 
					9111909c1d | ||
| 
						 | 
					4a1a1a75fb | ||
| 
						 | 
					e4d6ade4b3 | ||
| 
						 | 
					c82e880f5b | ||
| 
						 | 
					f2aa3b21e0 | ||
| 
						 | 
					385db0e97d | ||
| 
						 | 
					4e58da5222 | ||
| 
						 | 
					1c6ebb0782 | ||
| 
						 | 
					7e8b84c3e7 | ||
| 
						 | 
					132067b081 | ||
| 
						 | 
					8c36fc8f31 | ||
| 
						 | 
					93858efe73 | ||
| 
						 | 
					ba7f27a3f6 | ||
| 
						 | 
					2f70fb7015 | ||
| 
						 | 
					655ec6bf8e | ||
| 
						 | 
					c4ad533300 | ||
| 
						 | 
					5cdbd0cf4a | ||
| 
						 | 
					a55c70d4ae | ||
| 
						 | 
					02938a010d | ||
| 
						 | 
					e40641bf7c | ||
| 
						 | 
					27c0b43897 | ||
| 
						 | 
					d46de5ab8b | ||
| 
						 | 
					73ebb0edde | ||
| 
						 | 
					684245d6ce | ||
| 
						 | 
					d157c29269 | ||
| 
						 | 
					4d2e81661b | ||
| 
						 | 
					483a586d55 | ||
| 
						 | 
					4ac54f8c2c | ||
| 
						 | 
					840aacf7dd | ||
| 
						 | 
					ab4256d53a | ||
| 
						 | 
					46c5e562bf | ||
| 
						 | 
					42f5a90d09 | ||
| 
						 | 
					ef82da93fb | ||
| 
						 | 
					06d05b18b2 | ||
| 
						 | 
					431c4bd6e3 | ||
| 
						 | 
					f72c4e82fd | ||
| 
						 | 
					9c83a20a27 | ||
| 
						 | 
					773bec5ae5 | ||
| 
						 | 
					f3c508f6e8 | ||
| 
						 | 
					2aa4710745 | ||
| 
						 | 
					3b0a920fad | ||
| 
						 | 
					daef1cf34d | ||
| 
						 | 
					bd8d4637a3 | ||
| 
						 | 
					d2cefc140a | ||
| 
						 | 
					ccfce89423 | ||
| 
						 | 
					700cd5805c | ||
| 
						 | 
					498aad8587 | ||
| 
						 | 
					73f407b7ae | ||
| 
						 | 
					4be7dcba48 | ||
| 
						 | 
					f0694c582e | ||
| 
						 | 
					f90f0c98d9 | ||
| 
						 | 
					95aecc5dbb | ||
| 
						 | 
					f975fd03a1 | ||
| 
						 | 
					8272874704 | ||
| 
						 | 
					86f4cead16 | ||
| 
						 | 
					88a1a10e6f | ||
| 
						 | 
					624e657210 | ||
| 
						 | 
					2278e8f1ba | ||
| 
						 | 
					58176d1484 | ||
| 
						 | 
					10489879f7 | ||
| 
						 | 
					fe22872d14 | ||
| 
						 | 
					4d95d23d99 | ||
| 
						 | 
					c6fc5a1a26 | ||
| 
						 | 
					012d75442a | ||
| 
						 | 
					dcc7900e7c | ||
| 
						 | 
					34f5e8ad0e | ||
| 
						 | 
					c2fee9894a | ||
| 
						 | 
					abd983e851 | ||
| 
						 | 
					28611704d9 | ||
| 
						 | 
					305dddeab0 | ||
| 
						 | 
					ee8112b42f | ||
| 
						 | 
					ca319f63ad | ||
| 
						 | 
					a09a8164db | ||
| 
						 | 
					e5cf6a20a7 | ||
| 
						 | 
					af5e6e7e6d | ||
| 
						 | 
					70f2b5e877 | ||
| 
						 | 
					8ef454dcbe | ||
| 
						 | 
					551a041283 | ||
| 
						 | 
					03288943af | ||
| 
						 | 
					725f734bae | ||
| 
						 | 
					0f32460656 | ||
| 
						 | 
					25180cc850 | ||
| 
						 | 
					2a0e41cab9 | ||
| 
						 | 
					05edd48ad0 | ||
| 
						 | 
					266ab95557 | ||
| 
						 | 
					0a4bba565c | ||
| 
						 | 
					2ddb9d57aa | ||
| 
						 | 
					4f012ad703 | ||
| 
						 | 
					a1cd180082 | ||
| 
						 | 
					bc2f0c7dcb | ||
| 
						 | 
					c6ae0ebcbf | ||
| 
						 | 
					c6ec576cbb | ||
| 
						 | 
					55329b56cb | ||
| 
						 | 
					7e43d06b60 | ||
| 
						 | 
					89f54f3739 | ||
| 
						 | 
					01fa02d0b5 | ||
| 
						 | 
					8bed45340a | ||
| 
						 | 
					55138753c6 | ||
| 
						 | 
					43369b8096 | ||
| 
						 | 
					bec1977137 | ||
| 
						 | 
					4c08eb4b11 | ||
| 
						 | 
					0163730437 | ||
| 
						 | 
					39745ac38e | ||
| 
						 | 
					cacf8bbb58 | ||
| 
						 | 
					a1c6d5861a | ||
| 
						 | 
					589c4596d8 | ||
| 
						 | 
					7a6d7fca42 | ||
| 
						 | 
					5305c9f1e8 | ||
| 
						 | 
					b1022ea4c1 | ||
| 
						 | 
					380a74a4ed | ||
| 
						 | 
					ff709848a6 | ||
| 
						 | 
					279dd6d878 | ||
| 
						 | 
					2e0ad842d0 | ||
| 
						 | 
					a3949c7786 | ||
| 
						 | 
					2320606262 | ||
| 
						 | 
					b01286d280 | ||
| 
						 | 
					64f72c22b9 | ||
| 
						 | 
					856114d05c | ||
| 
						 | 
					98b8c4b0c9 | ||
| 
						 | 
					01f5f0be5a | ||
| 
						 | 
					eb6d404753 | ||
| 
						 | 
					c508ab1aef | ||
| 
						 | 
					0793dc922c | ||
| 
						 | 
					00a41ab296 | ||
| 
						 | 
					37f4877e56 | ||
| 
						 | 
					a6fc45c02f | ||
| 
						 | 
					25411e01db | ||
| 
						 | 
					a8ac6f1dc1 | ||
| 
						 | 
					dfe1884c25 | ||
| 
						 | 
					3e5dcc8bcd | ||
| 
						 | 
					ff81900784 | ||
| 
						 | 
					4cb30a3057 | ||
| 
						 | 
					72f80b88f7 | ||
| 
						 | 
					3008d8133c | ||
| 
						 | 
					4524618bf2 | ||
| 
						 | 
					55d22ba10c | ||
| 
						 | 
					76cf020750 | ||
| 
						 | 
					f13ac35edf | ||
| 
						 | 
					59582a9d9d | ||
| 
						 | 
					6246bbc656 | ||
| 
						 | 
					1b028b419b | ||
| 
						 | 
					4c6c768422 | ||
| 
						 | 
					1d3969b215 | ||
| 
						 | 
					94116d9ebc | ||
| 
						 | 
					cc5174a89a | ||
| 
						 | 
					31552100c5 | ||
| 
						 | 
					8df5dcb193 | ||
| 
						 | 
					7929600798 | ||
| 
						 | 
					a05ea124b9 | ||
| 
						 | 
					6a03ab3ad4 | ||
| 
						 | 
					6a151c1312 | ||
| 
						 | 
					990e56fb13 | ||
| 
						 | 
					2bd3033f68 | ||
| 
						 | 
					fe105a07e3 | ||
| 
						 | 
					a5782defd3 | ||
| 
						 | 
					bcccd2fe74 | ||
| 
						 | 
					404e23734b | ||
| 
						 | 
					973d63f4f2 | ||
| 
						 | 
					405d98ee63 | ||
| 
						 | 
					f81724969d | ||
| 
						 | 
					edb5444fa3 | ||
| 
						 | 
					e877cb7bd7 | ||
| 
						 | 
					482b3ba702 | ||
| 
						 | 
					752acedc0b | ||
| 
						 | 
					fb88723afc | ||
| 
						 | 
					3718737091 | ||
| 
						 | 
					3d3f056f7e | ||
| 
						 | 
					c60621c367 | ||
| 
						 | 
					606562aa7e | ||
| 
						 | 
					f689d06ca9 | ||
| 
						 | 
					7cfd7f3fb1 | ||
| 
						 | 
					4a8dfb3461 | ||
| 
						 | 
					3752b3aead | ||
| 
						 | 
					b81d41df22 | ||
| 
						 | 
					dadf3f06ee | ||
| 
						 | 
					8ed0d5675f | ||
| 
						 | 
					d5e9041344 | ||
| 
						 | 
					d99c20f628 | ||
| 
						 | 
					973ed24dc8 | ||
| 
						 | 
					5d5f5e3be8 | ||
| 
						 | 
					d9e14408f0 | ||
| 
						 | 
					c9c5ce2365 | ||
| 
						 | 
					975534370f | ||
| 
						 | 
					28605f6bd3 | ||
| 
						 | 
					3c6d3b69c2 | ||
| 
						 | 
					00312e95fe | ||
| 
						 | 
					4223130bb0 | ||
| 
						 | 
					c811e1ce70 | ||
| 
						 | 
					77475f2ad0 | ||
| 
						 | 
					3680a2f6f5 | ||
| 
						 | 
					1946058e7b | ||
| 
						 | 
					73daf8ce33 | ||
| 
						 | 
					094ceeba14 | ||
| 
						 | 
					3b7359a27a | ||
| 
						 | 
					df9108e19b | ||
| 
						 | 
					6307e783d8 | ||
| 
						 | 
					b9cd73c76d | ||
| 
						 | 
					b62c230ca2 | ||
| 
						 | 
					800193da9b | ||
| 
						 | 
					577ba5783c | ||
| 
						 | 
					9bece2b313 | ||
| 
						 | 
					e85e30546c | ||
| 
						 | 
					758f6eed51 | ||
| 
						 | 
					80ee5d3bd8 | ||
| 
						 | 
					dd06c60ada | ||
| 
						 | 
					6ca627ae74 | ||
| 
						 | 
					80a0b81c2a | ||
| 
						 | 
					06a7b0561b | ||
| 
						 | 
					12db20be4e | ||
| 
						 | 
					3cbb1b2b64 | ||
| 
						 | 
					d75e587613 | ||
| 
						 | 
					414c57d138 | ||
| 
						 | 
					c14a84e6f2 | ||
| 
						 | 
					def0db30e7 | ||
| 
						 | 
					6ef7a81a3b | ||
| 
						 | 
					95152aec68 | ||
| 
						 | 
					8ed6762363 | ||
| 
						 | 
					87c5ed8bec | ||
| 
						 | 
					ecc6c1f501 | ||
| 
						 | 
					3d8338b0d4 | ||
| 
						 | 
					c91e25518f | ||
| 
						 | 
					a8dddeab61 | ||
| 
						 | 
					8f0a5ab660 | ||
| 
						 | 
					db03d4bdd0 | ||
| 
						 | 
					0ec96e4279 | ||
| 
						 | 
					6e520c4cdc | ||
| 
						 | 
					1e8683d72d | ||
| 
						 | 
					2df622fd14 | ||
| 
						 | 
					fede784fa2 | ||
| 
						 | 
					f191b143e9 | ||
| 
						 | 
					59212553b5 | ||
| 
						 | 
					e532b196cc | ||
| 
						 | 
					0f5232280c | ||
| 
						 | 
					38898ba4af | ||
| 
						 | 
					48f56d9600 | ||
| 
						 | 
					17bf5ac2fc | ||
| 
						 | 
					343b882d80 | ||
| 
						 | 
					db06d21339 | ||
| 
						 | 
					19240f08bb | ||
| 
						 | 
					d774730f83 | ||
| 
						 | 
					c2edf42567 | ||
| 
						 | 
					08f0e55b4f | ||
| 
						 | 
					deeb74b7e4 | ||
| 
						 | 
					0542002d7a | ||
| 
						 | 
					c1e307f585 | ||
| 
						 | 
					7b4ba43dcf | ||
| 
						 | 
					b0e4debaab | ||
| 
						 | 
					676597e961 | ||
| 
						 | 
					686d90745b | ||
| 
						 | 
					5dc02d53c3 | ||
| 
						 | 
					0598547b58 | ||
| 
						 | 
					67c7745f5d | ||
| 
						 | 
					a2c289646d | ||
| 
						 | 
					e6efecd054 | ||
| 
						 | 
					778b6a86c0 | ||
| 
						 | 
					e5babd086d | ||
| 
						 | 
					c212ebbdda | ||
| 
						 | 
					83b8de3d43 | ||
| 
						 | 
					e174d374f2 | ||
| 
						 | 
					4edb93508d | ||
| 
						 | 
					38c994b83b | ||
| 
						 | 
					1b8643d4c9 | ||
| 
						 | 
					d3c796f5b0 | ||
| 
						 | 
					83d8a6a450 | ||
| 
						 | 
					a21a77d230 | ||
| 
						 | 
					260b88c197 | ||
| 
						 | 
					655331a91b | ||
| 
						 | 
					09e569f83d | ||
| 
						 | 
					e4a4b562c4 | ||
| 
						 | 
					35b4a755f9 | ||
| 
						 | 
					5a4b43848a | ||
| 
						 | 
					d98869a088 | ||
| 
						 | 
					4d33cf739d | ||
| 
						 | 
					34e7daf989 | ||
| 
						 | 
					b0adcd6a46 | ||
| 
						 | 
					be285cde3f | ||
| 
						 | 
					0ff1faf7f2 | ||
| 
						 | 
					bcc62cc9e3 | ||
| 
						 | 
					97b466d409 | ||
| 
						 | 
					f17d9bba14 | ||
| 
						 | 
					d74725ce67 | ||
| 
						 | 
					3dad55d7a8 | ||
| 
						 | 
					598ffeea89 | ||
| 
						 | 
					83367f67de | ||
| 
						 | 
					15f2647d71 | ||
| 
						 | 
					6421d69bff | ||
| 
						 | 
					18081e30e1 | ||
| 
						 | 
					97181b5c0d | ||
| 
						 | 
					a63f9887b9 | ||
| 
						 | 
					1282aad4a5 | ||
| 
						 | 
					b8fad99f09 | ||
| 
						 | 
					c7e9e60b05 | ||
| 
						 | 
					47f2e1da73 | ||
| 
						 | 
					5975229919 | ||
| 
						 | 
					38295e8a75 | ||
| 
						 | 
					f9612b5eaf | ||
| 
						 | 
					5cf2ef2ef7 | ||
| 
						 | 
					938b5c886e | ||
| 
						 | 
					0618e68200 | ||
| 
						 | 
					bac52f3969 | ||
| 
						 | 
					d494d62953 | ||
| 
						 | 
					7206181385 | ||
| 
						 | 
					3f22901a43 | ||
| 
						 | 
					f70f11fc70 | ||
| 
						 | 
					cffebd7fd6 | ||
| 
						 | 
					b8c8e7349f | ||
| 
						 | 
					8bba99ae56 | ||
| 
						 | 
					b5c5f57613 | ||
| 
						 | 
					33df856925 | ||
| 
						 | 
					ce09cedd2e | ||
| 
						 | 
					7d68101f83 | ||
| 
						 | 
					aa50a00898 | ||
| 
						 | 
					26f112ba55 | ||
| 
						 | 
					159b9162f8 | ||
| 
						 | 
					d7999f9fcb | ||
| 
						 | 
					f13eba4c78 | ||
| 
						 | 
					050e82e088 | ||
| 
						 | 
					88377e5b61 | ||
| 
						 | 
					241af465fd | ||
| 
						 | 
					59510a554d | ||
| 
						 | 
					b10aa95d28 | ||
| 
						 | 
					097bee681a | ||
| 
						 | 
					8548c2fc61 | ||
| 
						 | 
					dc4fbd2e97 | ||
| 
						 | 
					60b029869f | ||
| 
						 | 
					f592ea6c30 | ||
| 
						 | 
					a39ac3d94a | ||
| 
						 | 
					4b23ddc002 | ||
| 
						 | 
					4486d336a6 | ||
| 
						 | 
					45e4b811b0 | ||
| 
						 | 
					0e6a1a4420 | ||
| 
						 | 
					b8bf708db9 | ||
| 
						 | 
					6fdbb01194 | ||
| 
						 | 
					d29147565c | ||
| 
						 | 
					75c9430559 | ||
| 
						 | 
					9ac99a80c3 | ||
| 
						 | 
					a15d107dde | ||
| 
						 | 
					09897b8146 | ||
| 
						 | 
					29e446e508 | ||
| 
						 | 
					10beb36b1c | ||
| 
						 | 
					a65a888866 | ||
| 
						 | 
					98180b5cc7 | ||
| 
						 | 
					92009181af | ||
| 
						 | 
					831bdb9f63 | ||
| 
						 | 
					50a4dbbb5e | ||
| 
						 | 
					ad6511c313 | ||
| 
						 | 
					7a37fa4aef | ||
| 
						 | 
					dcee24191f | ||
| 
						 | 
					87bcb6f377 | ||
| 
						 | 
					b0bc2f00d2 | ||
| 
						 | 
					3b19c7d0d9 | ||
| 
						 | 
					12f5c67bf5 | ||
| 
						 | 
					d7a83d8995 | ||
| 
						 | 
					7725729d90 | ||
| 
						 | 
					e96445bd02 | ||
| 
						 | 
					da2c124675 | ||
| 
						 | 
					8cb695a963 | ||
| 
						 | 
					54cbd7e154 | ||
| 
						 | 
					5994b62930 | ||
| 
						 | 
					2fbf94b0f3 | ||
| 
						 | 
					32bc30e210 | ||
| 
						 | 
					f3bc8e6ce1 | ||
| 
						 | 
					16f3a32bec | ||
| 
						 | 
					c44d2498e3 | ||
| 
						 | 
					2aed209efa | ||
| 
						 | 
					b55b780d7b | ||
| 
						 | 
					8d4eb2bc1f | ||
| 
						 | 
					67bf4f28ff | ||
| 
						 | 
					803582f8ac | ||
| 
						 | 
					03603f392a | ||
| 
						 | 
					fcfd6d9504 | ||
| 
						 | 
					c31451cf13 | ||
| 
						 | 
					5deff1a179 | ||
| 
						 | 
					e236a1c99b | ||
| 
						 | 
					a2f3094eb0 | ||
| 
						 | 
					65afc576ea | ||
| 
						 | 
					8971f656b4 | ||
| 
						 | 
					394ce9ee39 | ||
| 
						 | 
					67a83c1b34 | ||
| 
						 | 
					1e8d094274 | ||
| 
						 | 
					4c35a40858 | ||
| 
						 | 
					802b2aaf6a | ||
| 
						 | 
					0e79a8944b | ||
| 
						 | 
					bebf70667d | ||
| 
						 | 
					d9bd5de0b1 | ||
| 
						 | 
					31c7aa0ba4 | ||
| 
						 | 
					fc2388189f | ||
| 
						 | 
					4431338691 | ||
| 
						 | 
					bda1e9aeab | ||
| 
						 | 
					4969ca768d | ||
| 
						 | 
					2acd1c1642 | ||
| 
						 | 
					e1e753179a | ||
| 
						 | 
					f4cc8153ae | ||
| 
						 | 
					e4d8cb4ee0 | ||
| 
						 | 
					723a78ae3f | ||
| 
						 | 
					cd9d0d7dec | ||
| 
						 | 
					665d4f08c8 | ||
| 
						 | 
					00c7780fcb | ||
| 
						 | 
					15ab13dc42 | ||
| 
						 | 
					8a0ca3066e | ||
| 
						 | 
					ea01755bb4 | ||
| 
						 | 
					69c2084a18 | ||
| 
						 | 
					99c0a1a7d0 | ||
| 
						 | 
					5acf997e69 | ||
| 
						 | 
					dd87e4ed39 | ||
| 
						 | 
					2f8c26ba8a | ||
| 
						 | 
					81b9793807 | ||
| 
						 | 
					7278f17e8f | ||
| 
						 | 
					66c7427df0 | ||
| 
						 | 
					c1a06d858d | ||
| 
						 | 
					53b5fdbe9e | ||
| 
						 | 
					687cf0235e | ||
| 
						 | 
					b6e9229cf0 | ||
| 
						 | 
					089e4848d8 | ||
| 
						 | 
					58d2e7c6d1 | ||
| 
						 | 
					fa18d6fb76 | ||
| 
						 | 
					4dcb930247 | ||
| 
						 | 
					74a299fd08 | ||
| 
						 | 
					532a560d87 | ||
| 
						 | 
					0040a60559 | ||
| 
						 | 
					cc34342790 | ||
| 
						 | 
					bdbf6e9d19 | ||
| 
						 | 
					db86f765eb | ||
| 
						 | 
					b11dec5dd5 | ||
| 
						 | 
					86becc7591 | ||
| 
						 | 
					8922bc038b | ||
| 
						 | 
					009f5790a4 | ||
| 
						 | 
					0536b6c459 | ||
| 
						 | 
					0e3ebd9841 | ||
| 
						 | 
					598965a606 | ||
| 
						 | 
					d7a2938849 | ||
| 
						 | 
					a683658675 | ||
| 
						 | 
					25169f68b7 | ||
| 
						 | 
					e5247ae65d | ||
| 
						 | 
					a718cb05ff | ||
| 
						 | 
					b466ef2581 | ||
| 
						 | 
					c7a634641f | ||
| 
						 | 
					e4388643f1 | ||
| 
						 | 
					bc4208201c | ||
| 
						 | 
					a0d69d52a1 | ||
| 
						 | 
					c23a1be139 | ||
| 
						 | 
					9799f7afb0 | ||
| 
						 | 
					6358b24fac | ||
| 
						 | 
					b58634316f | ||
| 
						 | 
					e3657644d6 | ||
| 
						 | 
					7d1e3ebeed | ||
| 
						 | 
					9e61dfe85e | ||
| 
						 | 
					7b51aafa86 | ||
| 
						 | 
					5f487123df | ||
| 
						 | 
					f1f32477e3 | ||
| 
						 | 
					df2b1251a0 | ||
| 
						 | 
					02c7cf6fa5 | ||
| 
						 | 
					60006ff993 | ||
| 
						 | 
					f3af5d7b8e | ||
| 
						 | 
					d551412a32 | ||
| 
						 | 
					6de67a134e | ||
| 
						 | 
					8ec31398e0 | ||
| 
						 | 
					fd0d560b47 | ||
| 
						 | 
					cc542269a1 | ||
| 
						 | 
					7b488a3bef | ||
| 
						 | 
					f448168501 | ||
| 
						 | 
					80a8fb98db | ||
| 
						 | 
					898bb397b1 | ||
| 
						 | 
					74ed5b5ebd | ||
| 
						 | 
					178afd81a9 | ||
| 
						 | 
					d6eb1a7b98 | ||
| 
						 | 
					4ff56b15e9 | ||
| 
						 | 
					e6b98d3152 | ||
| 
						 | 
					5fd8dd2dce | ||
| 
						 | 
					0ad3e046a4 | ||
| 
						 | 
					d6c5d24af3 | ||
| 
						 | 
					8a3280a2de | ||
| 
						 | 
					450a0a647a | ||
| 
						 | 
					676c0cf123 | ||
| 
						 | 
					a731319321 | ||
| 
						 | 
					81b06a09b7 | ||
| 
						 | 
					23b34744d9 | ||
| 
						 | 
					bc8590aa12 | ||
| 
						 | 
					939d368d5f | ||
| 
						 | 
					336e3b8baf | ||
| 
						 | 
					47c06fa308 | ||
| 
						 | 
					b7f447f8d8 | ||
| 
						 | 
					03af76b631 | ||
| 
						 | 
					e105d5c28f | ||
| 
						 | 
					d6ffb4c177 | ||
| 
						 | 
					6dbfce1031 | ||
| 
						 | 
					fea5ddf585 | ||
| 
						 | 
					b9f39c2711 | ||
| 
						 | 
					5acac0309a | ||
| 
						 | 
					78febad718 | ||
| 
						 | 
					a6a5bba0a9 | ||
| 
						 | 
					51581c034d | ||
| 
						 | 
					8f25a95b47 | ||
| 
						 | 
					7f5d092223 | ||
| 
						 | 
					2e5cccd1b6 | ||
| 
						 | 
					2645782f89 | ||
| 
						 | 
					9533092511 | ||
| 
						 | 
					6005a461bb | ||
| 
						 | 
					e2df946eee | ||
| 
						 | 
					d14588120f | ||
| 
						 | 
					ab31cfa664 | ||
| 
						 | 
					af1c397969 | ||
| 
						 | 
					947f9deed5 | ||
| 
						 | 
					ce95eee903 | ||
| 
						 | 
					b15f3bb969 | ||
| 
						 | 
					998e8cba19 | ||
| 
						 | 
					e3f523ab2a | ||
| 
						 | 
					36485e56ed | ||
| 
						 | 
					b4113360f6 | ||
| 
						 | 
					2d71e22f08 | ||
| 
						 | 
					2ae67c431c | ||
| 
						 | 
					4b1a91b64f | ||
| 
						 | 
					4f69318e12 | ||
| 
						 | 
					1cc98ab50f | ||
| 
						 | 
					a6494602fd | ||
| 
						 | 
					50ec78b488 | ||
| 
						 | 
					7d044d14f9 | ||
| 
						 | 
					df03d5a8b2 | ||
| 
						 | 
					6a0ed81e67 | ||
| 
						 | 
					c94f3e8188 | ||
| 
						 | 
					1e5f6cc1dc | ||
| 
						 | 
					b1fece74e3 | ||
| 
						 | 
					fdbe0df6e7 | ||
| 
						 | 
					93d59520e4 | ||
| 
						 | 
					b68d3a073b | ||
| 
						 | 
					2100311f41 | ||
| 
						 | 
					e1269e3156 | ||
| 
						 | 
					c88d61b044 | ||
| 
						 | 
					f49df54a36 | ||
| 
						 | 
					952bbc4410 | ||
| 
						 | 
					1eb4b85d72 | ||
| 
						 | 
					59b6cb9e91 | ||
| 
						 | 
					e06afaeb7a | ||
| 
						 | 
					8c6f654b26 | ||
| 
						 | 
					1d8212e53a | ||
| 
						 | 
					083c5e17e1 | ||
| 
						 | 
					272231fb09 | ||
| 
						 | 
					67b4d9b232 | ||
| 
						 | 
					21709e1557 | ||
| 
						 | 
					9c312637d1 | ||
| 
						 | 
					feacad7f68 | ||
| 
						 | 
					6513303498 | ||
| 
						 | 
					3e2a52b034 | ||
| 
						 | 
					176d4e85e9 | ||
| 
						 | 
					84d30dffb6 | ||
| 
						 | 
					0fd282b078 | ||
| 
						 | 
					cdf4afbe50 | ||
| 
						 | 
					b222b2304e | ||
| 
						 | 
					fdf9900114 | ||
| 
						 | 
					5867eb2dd2 | ||
| 
						 | 
					61f145e3de | ||
| 
						 | 
					b97e7fc730 | ||
| 
						 | 
					01cbf08064 | ||
| 
						 | 
					fec632e948 | ||
| 
						 | 
					6aab5b57e1 | ||
| 
						 | 
					d2a27e02ce | ||
| 
						 | 
					b55506a76d | ||
| 
						 | 
					afc2aa2b3f | ||
| 
						 | 
					d055b269ed | ||
| 
						 | 
					8a246a4a9f | ||
| 
						 | 
					2f684351bf | ||
| 
						 | 
					74e5beab9d | ||
| 
						 | 
					b41765f441 | ||
| 
						 | 
					05a6013f42 | ||
| 
						 | 
					cfff544d67 | ||
| 
						 | 
					599d9642ca | ||
| 
						 | 
					0264faaa4e | ||
| 
						 | 
					4022a60ea7 | ||
| 
						 | 
					39e366fc11 | ||
| 
						 | 
					096675824f | ||
| 
						 | 
					80bfa76ac9 | ||
| 
						 | 
					b2e553a82e | ||
| 
						 | 
					772b64d9d3 | ||
| 
						 | 
					92c0de518e | ||
| 
						 | 
					ff96456513 | ||
| 
						 | 
					e89adbef51 | ||
| 
						 | 
					22a6a6cf81 | ||
| 
						 | 
					fd870e4e8a | ||
| 
						 | 
					d52ed3fff2 | ||
| 
						 | 
					bac17ab7d8 | ||
| 
						 | 
					9ace303528 | ||
| 
						 | 
					7e81c35cdc | ||
| 
						 | 
					0f125d9bcf | ||
| 
						 | 
					d4714517c0 | ||
| 
						 | 
					280e4bf4c3 | ||
| 
						 | 
					adf462fe05 | ||
| 
						 | 
					c2862742ab | ||
| 
						 | 
					8a712eb5af | ||
| 
						 | 
					d58790af17 | ||
| 
						 | 
					9ef7a13403 | ||
| 
						 | 
					a5da1219bb | ||
| 
						 | 
					be524fed38 | ||
| 
						 | 
					042016b85e | ||
| 
						 | 
					f6da574324 | ||
| 
						 | 
					b09d5c3135 | ||
| 
						 | 
					ec65c3fd53 | ||
| 
						 | 
					7ca2f31c8d | ||
| 
						 | 
					2275737a5d | ||
| 
						 | 
					5e3836055f | ||
| 
						 | 
					37a6a0bb3e | ||
| 
						 | 
					6bcca3eca9 | ||
| 
						 | 
					ce40b8d531 | ||
| 
						 | 
					9f109b94b8 | ||
| 
						 | 
					89024febde | ||
| 
						 | 
					b7a673c6e2 | ||
| 
						 | 
					7f68be770d | ||
| 
						 | 
					4f173f35db | ||
| 
						 | 
					ae9fbe573e | ||
| 
						 | 
					29676f473d | ||
| 
						 | 
					a5fcb26ab1 | ||
| 
						 | 
					d68b1a1e8c | ||
| 
						 | 
					bd8baed138 | ||
| 
						 | 
					00a7dda273 | ||
| 
						 | 
					4dba07c384 | ||
| 
						 | 
					4d39c6b7cc | ||
| 
						 | 
					7d6f6158c9 | ||
| 
						 | 
					6863dbbc0c | ||
| 
						 | 
					28b96efd8b | ||
| 
						 | 
					0f82af0f49 | ||
| 
						 | 
					f0d839436f | ||
| 
						 | 
					f1aa4b4127 | ||
| 
						 | 
					ccdb43f7f1 | ||
| 
						 | 
					72900f0f90 | ||
| 
						 | 
					3ad958ddb1 | ||
| 
						 | 
					2c77cc90f4 | ||
| 
						 | 
					db4c33b4fb | ||
| 
						 | 
					3fb04115fc | ||
| 
						 | 
					4faaa32aef | ||
| 
						 | 
					cab59b4c32 | ||
| 
						 | 
					931eff89f5 | ||
| 
						 | 
					175335808b | ||
| 
						 | 
					e00216581e | ||
| 
						 | 
					23951ec00c | ||
| 
						 | 
					a8fc5d0f9f | ||
| 
						 | 
					f5e85bab1c | ||
| 
						 | 
					9a44fa83dc | ||
| 
						 | 
					6b1e54da62 | ||
| 
						 | 
					b91421b107 | ||
| 
						 | 
					43b3954fa5 | ||
| 
						 | 
					80f2e3f263 | ||
| 
						 | 
					9ea423b4c1 | ||
| 
						 | 
					b259c9c535 | ||
| 
						 | 
					80f481a5f7 | ||
| 
						 | 
					115fe1b577 | ||
| 
						 | 
					06d6ea651e | ||
| 
						 | 
					966fa848a0 | ||
| 
						 | 
					6f8fe67ace | ||
| 
						 | 
					d49edc8e09 | ||
| 
						 | 
					3b9c20fe31 | ||
| 
						 | 
					bd72c5eacf | ||
| 
						 | 
					9d152a77fd | ||
| 
						 | 
					33dc28b905 | ||
| 
						 | 
					43ce64dcca | ||
| 
						 | 
					9e0882ba98 | ||
| 
						 | 
					c890149c8c | ||
| 
						 | 
					1a1ab2e2e8 | ||
| 
						 | 
					715b706caa | ||
| 
						 | 
					bfa9c42c25 | ||
| 
						 | 
					9d98f97e1b | ||
| 
						 | 
					5eb5ce6ff3 | ||
| 
						 | 
					be9c873a6e | ||
| 
						 | 
					034d80f6cd | ||
| 
						 | 
					021e786c71 | ||
| 
						 | 
					0c6bb8cb66 | ||
| 
						 | 
					4d7f08a99e | ||
| 
						 | 
					fdef584681 | ||
| 
						 | 
					f335bac8a3 | ||
| 
						 | 
					51369753bb | ||
| 
						 | 
					82a4c2bce3 | ||
| 
						 | 
					e73c6e039e | ||
| 
						 | 
					19bad0844f | ||
| 
						 | 
					96cec4dfd7 | ||
| 
						 | 
					943aea6267 | ||
| 
						 | 
					b433e4a1e7 | ||
| 
						 | 
					20f1966c0e | ||
| 
						 | 
					ab1f5c3edd | ||
| 
						 | 
					b2be6799f2 | ||
| 
						 | 
					ea2618fc6f | ||
| 
						 | 
					62fdf8eaed | ||
| 
						 | 
					d3569a3572 | ||
| 
						 | 
					89df76e449 | ||
| 
						 | 
					e5b2f33b4f | ||
| 
						 | 
					934d312f50 | ||
| 
						 | 
					68917eb517 | ||
| 
						 | 
					3beb2f6b5d | ||
| 
						 | 
					b29017f15b | ||
| 
						 | 
					db83a0ebbc | ||
| 
						 | 
					6d9fddb95d | ||
| 
						 | 
					4284190cc4 | ||
| 
						 | 
					5e4cbd2d24 | ||
| 
						 | 
					06c3bec65d | ||
| 
						 | 
					e8c3bb45ba | ||
| 
						 | 
					4ec55a964d | ||
| 
						 | 
					b9420864c0 | ||
| 
						 | 
					bf6588b6a7 | ||
| 
						 | 
					e43217e664 | ||
| 
						 | 
					e19ee2d102 | ||
| 
						 | 
					b4c53e2cfd | ||
| 
						 | 
					a2902de67c | ||
| 
						 | 
					da192f7955 | ||
| 
						 | 
					a2210d23c3 | ||
| 
						 | 
					bd5a622400 | ||
| 
						 | 
					b9494cb0d6 | ||
| 
						 | 
					0f73af4470 | ||
| 
						 | 
					45e26b5c02 | ||
| 
						 | 
					6af5ea38ce | ||
| 
						 | 
					b6f0aa4394 | ||
| 
						 | 
					774dab58f6 | ||
| 
						 | 
					e3bdb98f7a | ||
| 
						 | 
					58d628c9f8 | ||
| 
						 | 
					1e69394545 | ||
| 
						 | 
					1cf798ad14 | ||
| 
						 | 
					da3992d2e9 | ||
| 
						 | 
					48908e4633 | ||
| 
						 | 
					f5ae149338 | ||
| 
						 | 
					3fe5311967 | ||
| 
						 | 
					6a48639c68 | ||
| 
						 | 
					e7093b3ca8 | ||
| 
						 | 
					d0a4104c0c | ||
| 
						 | 
					90559bed53 | ||
| 
						 | 
					973a18cf03 | ||
| 
						 | 
					3c666ce57a | ||
| 
						 | 
					a1287ec64f | ||
| 
						 | 
					5fbfa1bfa8 | ||
| 
						 | 
					da3ecc91f8 | ||
| 
						 | 
					09c8f558f7 | ||
| 
						 | 
					528a149def | ||
| 
						 | 
					29e36afb6b | ||
| 
						 | 
					0e39543d35 | ||
| 
						 | 
					0de20d8ee6 | ||
| 
						 | 
					cd5de5c0e5 | ||
| 
						 | 
					bd5afc26bd | ||
| 
						 | 
					9542dfdcdc | ||
| 
						 | 
					97a6d7b1a8 | ||
| 
						 | 
					209b9d4374 | ||
| 
						 | 
					0b8ccd0ae7 | ||
| 
						 | 
					0b7f5ad508 | ||
| 
						 | 
					8a38805e82 | ||
| 
						 | 
					836d88a4b8 | ||
| 
						 | 
					d5268ed511 | ||
| 
						 | 
					0e7d93858d | ||
| 
						 | 
					2164d760b7 | ||
| 
						 | 
					b9c8de598b | ||
| 
						 | 
					9889a811db | ||
| 
						 | 
					9e38d882b9 | ||
| 
						 | 
					e8635044b5 | ||
| 
						 | 
					56dea0ac9a | ||
| 
						 | 
					e8b77477c7 | ||
| 
						 | 
					64298e528d | ||
| 
						 | 
					4f1465e7c7 | ||
| 
						 | 
					6120041b69 | ||
| 
						 | 
					8c1213627d | ||
| 
						 | 
					3e6ae6eeb8 | ||
| 
						 | 
					291e9aeabd | ||
| 
						 | 
					a3d776187a | ||
| 
						 | 
					e55f502e2f | ||
| 
						 | 
					e369270f88 | ||
| 
						 | 
					7e845e7cfd | ||
| 
						 | 
					56d9624b56 | ||
| 
						 | 
					911d135deb | ||
| 
						 | 
					8107b90678 | ||
| 
						 | 
					7722452b98 | ||
| 
						 | 
					6e1a986e0f | ||
| 
						 | 
					e0785ade35 | ||
| 
						 | 
					0177ed6f03 | ||
| 
						 | 
					c62635a3b5 | ||
| 
						 | 
					0177476fd2 | ||
| 
						 | 
					76d7dface7 | ||
| 
						 | 
					982ba21460 | ||
| 
						 | 
					6081c60556 | ||
| 
						 | 
					2fe3c22108 | ||
| 
						 | 
					75dbb3189a | ||
| 
						 | 
					32330300a9 | ||
| 
						 | 
					64414df27e | ||
| 
						 | 
					f98ec86798 | ||
| 
						 | 
					87bbd13899 | ||
| 
						 | 
					51a4493add | ||
| 
						 | 
					5effe8f336 | ||
| 
						 | 
					296eb2bd61 | ||
| 
						 | 
					9853acba66 | ||
| 
						 | 
					09cb9c782d | ||
| 
						 | 
					575ce905b2 | ||
| 
						 | 
					54887af471 | ||
| 
						 | 
					573350637e | ||
| 
						 | 
					49a16f7121 | ||
| 
						 | 
					a4773fcbbb | ||
| 
						 | 
					1e038c4bc6 | ||
| 
						 | 
					6ba19692a3 | ||
| 
						 | 
					432dfe2b8f | ||
| 
						 | 
					a142372750 | ||
| 
						 | 
					f14195f786 | ||
| 
						 | 
					9d54f9a6b7 | ||
| 
						 | 
					ebb91191bf | ||
| 
						 | 
					8742e294d4 | ||
| 
						 | 
					8882d1fa1b | ||
| 
						 | 
					0c37ab5255 | ||
| 
						 | 
					747a05844d | ||
| 
						 | 
					c7b7bf32f8 | ||
| 
						 | 
					710ee3b0e0 | ||
| 
						 | 
					7a8993892d | ||
| 
						 | 
					5e16a77fa9 | ||
| 
						 | 
					ef35519696 | ||
| 
						 | 
					d5baaf7756 | ||
| 
						 | 
					2a94387fc3 | ||
| 
						 | 
					6a5c2b0fc3 | ||
| 
						 | 
					fc281d6440 | ||
| 
						 | 
					e22ac39da4 | ||
| 
						 | 
					34cadb1e54 | ||
| 
						 | 
					94692b904e | ||
| 
						 | 
					18f3087afd | ||
| 
						 | 
					15bc228ae9 | ||
| 
						 | 
					2b7a38d032 | ||
| 
						 | 
					90e1a6905a | ||
| 
						 | 
					c36af24cbd | ||
| 
						 | 
					a676c18502 | ||
| 
						 | 
					362912ff83 | ||
| 
						 | 
					46ff13f243 | ||
| 
						 | 
					340a67a6f8 | ||
| 
						 | 
					9294c1e76c | ||
| 
						 | 
					fd704f8de0 | ||
| 
						 | 
					d9ca9154d1 | ||
| 
						 | 
					35110eca73 | ||
| 
						 | 
					9ad92b3007 | ||
| 
						 | 
					2f78c96330 | ||
| 
						 | 
					639857ceb2 | ||
| 
						 | 
					162f58c53c | ||
| 
						 | 
					84c4d96e71 | ||
| 
						 | 
					c0d343d56d | ||
| 
						 | 
					6d14a80608 | ||
| 
						 | 
					f451bb7c49 | ||
| 
						 | 
					20b17d6b04 | ||
| 
						 | 
					bb2317b63c | ||
| 
						 | 
					189461dc98 | ||
| 
						 | 
					69af552bc1 | ||
| 
						 | 
					0ae6ff9f72 | ||
| 
						 | 
					8b571fbbb1 | ||
| 
						 | 
					f3fcd409d5 | ||
| 
						 | 
					a47532f88a | ||
| 
						 | 
					6c157a404b | ||
| 
						 | 
					4f8a49143d | ||
| 
						 | 
					493d6033aa | ||
| 
						 | 
					8f219af884 | ||
| 
						 | 
					aeb04136f7 | ||
| 
						 | 
					0b8f57bf06 | ||
| 
						 | 
					6508d446e1 | ||
| 
						 | 
					82cb462bb4 | ||
| 
						 | 
					9a264bf610 | ||
| 
						 | 
					57007e80a9 | ||
| 
						 | 
					b6c876bdb6 | ||
| 
						 | 
					57afae79eb | ||
| 
						 | 
					84c2184909 | ||
| 
						 | 
					e358a24a75 | ||
| 
						 | 
					9da9d00c62 | ||
| 
						 | 
					ec3f269d1f | ||
| 
						 | 
					1c388a52a5 | ||
| 
						 | 
					34a827bbfe | ||
| 
						 | 
					726b9e2240 | ||
| 
						 | 
					2236ba0d20 | ||
| 
						 | 
					463c0f7096 | ||
| 
						 | 
					e49a7e361c | ||
| 
						 | 
					6e87cf5b30 | ||
| 
						 | 
					5872e8dd7e | ||
| 
						 | 
					e81d4ac8c8 | ||
| 
						 | 
					4922904991 | ||
| 
						 | 
					decae2dcda | ||
| 
						 | 
					16bbd13af7 | ||
| 
						 | 
					ee0666c8df | ||
| 
						 | 
					a8a8ae2e92 | ||
| 
						 | 
					fd1148a728 | ||
| 
						 | 
					74c7b41ee7 | ||
| 
						 | 
					465e19dbe9 | ||
| 
						 | 
					86660c73e5 | ||
| 
						 | 
					6d8a208df2 | ||
| 
						 | 
					c3a826fdce | ||
| 
						 | 
					c5d6a42abf | ||
| 
						 | 
					d49c144297 | ||
| 
						 | 
					e7de7d5eb3 | ||
| 
						 | 
					20005a83d2 | ||
| 
						 | 
					27926030f9 | ||
| 
						 | 
					701de67b79 | ||
| 
						 | 
					883479f01e | ||
| 
						 | 
					b37a0b0512 | ||
| 
						 | 
					5c5d5270d2 | ||
| 
						 | 
					36461fb2aa | ||
| 
						 | 
					d8dcd5e472 | ||
| 
						 | 
					c51b46c982 | ||
| 
						 | 
					b1b63c1dd1 | ||
| 
						 | 
					30c93d66eb | ||
| 
						 | 
					3b60bb7259 | ||
| 
						 | 
					c73f8e835f | ||
| 
						 | 
					93558c4299 | ||
| 
						 | 
					396cff5779 | ||
| 
						 | 
					336154e729 | ||
| 
						 | 
					bb0aba34fa | ||
| 
						 | 
					1dc0ce9562 | ||
| 
						 | 
					e4aee168b5 | ||
| 
						 | 
					2c10c895da | ||
| 
						 | 
					c04fae3096 | ||
| 
						 | 
					a214af0830 | ||
| 
						 | 
					f21bc46e82 | ||
| 
						 | 
					044327a488 | ||
| 
						 | 
					c4bbcc83b6 | ||
| 
						 | 
					eb162b73c2 | ||
| 
						 | 
					29aafb9cea | ||
| 
						 | 
					40eb7d0d48 | ||
| 
						 | 
					1dcb2b7e65 | ||
| 
						 | 
					5470b9aa73 | ||
| 
						 | 
					050bd7dd0b | ||
| 
						 | 
					f75038634f | ||
| 
						 | 
					300b4a9158 | ||
| 
						 | 
					52071f3476 | ||
| 
						 | 
					42ddd745f8 | ||
| 
						 | 
					a7846189cd | ||
| 
						 | 
					4762995d1f | ||
| 
						 | 
					e3a530eb61 | ||
| 
						 | 
					d1235ff058 | ||
| 
						 | 
					4370e92dbd | ||
| 
						 | 
					50e9522a06 | ||
| 
						 | 
					b5bb9aa8e3 | ||
| 
						 | 
					cf2e365f23 | ||
| 
						 | 
					72e532cb67 | ||
| 
						 | 
					ac5635f77d | ||
| 
						 | 
					640d67c119 | ||
| 
						 | 
					3e79693e3b | ||
| 
						 | 
					d55d3c2fd0 | ||
| 
						 | 
					3aced17c75 | ||
| 
						 | 
					bac63914db | ||
| 
						 | 
					6a63c51f7c | ||
| 
						 | 
					632cf13767 | ||
| 
						 | 
					e7012a515c | ||
| 
						 | 
					6b638af92f | ||
| 
						 | 
					c654b79c53 | ||
| 
						 | 
					bee7b874ea | ||
| 
						 | 
					9c3fc592f7 | ||
| 
						 | 
					4eab7a1ebc | ||
| 
						 | 
					3d985688e4 | ||
| 
						 | 
					17ea2631cd | ||
| 
						 | 
					b749910e6c | ||
| 
						 | 
					eff36caea8 | ||
| 
						 | 
					6ff092f140 | ||
| 
						 | 
					28bb36e53d | ||
| 
						 | 
					4a091bbd8a | ||
| 
						 | 
					e99a6b813e | ||
| 
						 | 
					b9e5302f27 | ||
| 
						 | 
					dd7b6aef39 | ||
| 
						 | 
					910b8b6a69 | ||
| 
						 | 
					c3207e215f | ||
| 
						 | 
					f83be11b85 | ||
| 
						 | 
					45bce1062a | ||
| 
						 | 
					8cb344bf3c | ||
| 
						 | 
					fcc4518cdc | ||
| 
						 | 
					c84839eb91 | ||
| 
						 | 
					1f878aee69 | ||
| 
						 | 
					84fd4686e2 | ||
| 
						 | 
					ede9fb4fcc | ||
| 
						 | 
					723aef71e8 | ||
| 
						 | 
					48964a911e | ||
| 
						 | 
					6a35cb60fd | ||
| 
						 | 
					1e51c3a832 | ||
| 
						 | 
					205dda2b39 | ||
| 
						 | 
					1c18d19da0 | ||
| 
						 | 
					645729e943 | ||
| 
						 | 
					f425a25c98 | ||
| 
						 | 
					aaace2e802 | ||
| 
						 | 
					3f16d9fbc9 | ||
| 
						 | 
					3afc57bab8 | ||
| 
						 | 
					55225106b6 | ||
| 
						 | 
					1a31bff9fe | ||
| 
						 | 
					4eaa3329ec | ||
| 
						 | 
					028d78b993 | ||
| 
						 | 
					944af98be6 | ||
| 
						 | 
					2789b2b0ad | ||
| 
						 | 
					7dded571de | ||
| 
						 | 
					95fe8372e8 | ||
| 
						 | 
					ecdcb0ef67 | ||
| 
						 | 
					6a04a03eb5 | ||
| 
						 | 
					0c96056a94 | ||
| 
						 | 
					f518a5e231 | ||
| 
						 | 
					f581c1062e | ||
| 
						 | 
					0b3deceea3 | ||
| 
						 | 
					fa4cd8868c | ||
| 
						 | 
					8c573ca7f3 | ||
| 
						 | 
					5a5cf3a51d | ||
| 
						 | 
					3f23e8443e | ||
| 
						 | 
					a00f9b093c | ||
| 
						 | 
					5f538ce3f8 | ||
| 
						 | 
					ebcaa3d579 | ||
| 
						 | 
					60e26199a2 | ||
| 
						 | 
					11defd180c | ||
| 
						 | 
					c82c1691ee | ||
| 
						 | 
					364562f209 | ||
| 
						 | 
					5d9fc28fa7 | ||
| 
						 | 
					e5ec5c284f | ||
| 
						 | 
					a90e33ad71 | ||
| 
						 | 
					62ab21ce7d | ||
| 
						 | 
					cc8e8db1e5 | ||
| 
						 | 
					b19cba2016 | ||
| 
						 | 
					315a9c95d5 | ||
| 
						 | 
					e010ac9706 | ||
| 
						 | 
					e4c0a85da0 | ||
| 
						 | 
					d3e4cdd5b0 | ||
| 
						 | 
					763b812dc7 | ||
| 
						 | 
					3269dfb4ab | ||
| 
						 | 
					e816bd259f | ||
| 
						 | 
					a295408e09 | ||
| 
						 | 
					42a34c7cd7 | ||
| 
						 | 
					9a72751958 | ||
| 
						 | 
					314e6fa80b | ||
| 
						 | 
					b2b66f749a | ||
| 
						 | 
					708ed6fded | ||
| 
						 | 
					5c30fa50d6 | ||
| 
						 | 
					fc33c424d9 | ||
| 
						 | 
					b04d6dd0b1 | ||
| 
						 | 
					9c5f79c56a | ||
| 
						 | 
					ef5eea689a | ||
| 
						 | 
					fd191deb49 | ||
| 
						 | 
					e1da1ff7d3 | ||
| 
						 | 
					2b00ed7ef8 | ||
| 
						 | 
					d960ea959d | ||
| 
						 | 
					274842ec41 | ||
| 
						 | 
					c06da7c84a | ||
| 
						 | 
					cea117b509 | ||
| 
						 | 
					6078c938b2 | ||
| 
						 | 
					9e95dd4821 | ||
| 
						 | 
					0cc8b57d4f | ||
| 
						 | 
					2179e6e797 | ||
| 
						 | 
					7dde3d1825 | ||
| 
						 | 
					a0fe950b75 | ||
| 
						 | 
					44985e8884 | ||
| 
						 | 
					f03366bcbf | ||
| 
						 | 
					d43ea83033 | ||
| 
						 | 
					11bdba0007 | ||
| 
						 | 
					07e58aaa79 | ||
| 
						 | 
					a31ddd363b | ||
| 
						 | 
					ed9e10f2d8 | ||
| 
						 | 
					02ae3c2810 | ||
| 
						 | 
					669ebb5f71 | ||
| 
						 | 
					9a3e0e52cb | ||
| 
						 | 
					b0f856213d | ||
| 
						 | 
					6f4ff1f2bf | ||
| 
						 | 
					d3eea61f1f | ||
| 
						 | 
					d59d81fae8 | ||
| 
						 | 
					329ca40b6f | ||
| 
						 | 
					e71bd416f4 | ||
| 
						 | 
					ad66fc6cc2 | ||
| 
						 | 
					d12b44204b | ||
| 
						 | 
					4be2136de4 | ||
| 
						 | 
					c4dbed040b | ||
| 
						 | 
					366b62af2d | ||
| 
						 | 
					a6955aa486 | ||
| 
						 | 
					ad30341fa2 | ||
| 
						 | 
					23da55a9f1 | ||
| 
						 | 
					41e6292e7b | ||
| 
						 | 
					ae1d6f29d9 | ||
| 
						 | 
					ccfc1ddbef | ||
| 
						 | 
					002de1eae2 | ||
| 
						 | 
					63621bae81 | ||
| 
						 | 
					85f9e6c4b9 | ||
| 
						 | 
					967ec296c0 | ||
| 
						 | 
					c6aae9b1d7 | ||
| 
						 | 
					913c370c25 | ||
| 
						 | 
					e5472bbd21 | ||
| 
						 | 
					957c258c6d | ||
| 
						 | 
					abee109cd1 | ||
| 
						 | 
					502e5ae6e1 | ||
| 
						 | 
					b8417be1f2 | ||
| 
						 | 
					9e037431b4 | ||
| 
						 | 
					f71b3676bb | ||
| 
						 | 
					50fe7b5e35 | ||
| 
						 | 
					9fb253388b | ||
| 
						 | 
					8cf1786296 | ||
| 
						 | 
					51b17b299c | ||
| 
						 | 
					78882e4642 | ||
| 
						 | 
					8465a367a4 | ||
| 
						 | 
					3bcfe678ab | ||
| 
						 | 
					d5403f3a5b | ||
| 
						 | 
					26abb48533 | ||
| 
						 | 
					177848ed27 | ||
| 
						 | 
					656a2e93d7 | ||
| 
						 | 
					6b1220b61d | ||
| 
						 | 
					9d7330d879 | ||
| 
						 | 
					26a5954fa0 | ||
| 
						 | 
					01165e08e0 | ||
| 
						 | 
					6e1633a6c5 | ||
| 
						 | 
					a8ff0a21bf | ||
| 
						 | 
					b8bc6bed97 | ||
| 
						 | 
					1a4402038c | ||
| 
						 | 
					5ac51cc9b5 | ||
| 
						 | 
					c12159ce21 | ||
| 
						 | 
					4485503ecc | ||
| 
						 | 
					200ac588cc | ||
| 
						 | 
					0bb040822d | ||
| 
						 | 
					543fbe14ee | ||
| 
						 | 
					e02ab66120 | ||
| 
						 | 
					76c7c694c5 | ||
| 
						 | 
					f0057977b7 | ||
| 
						 | 
					e8e43f06af | ||
| 
						 | 
					04b35e86d5 | ||
| 
						 | 
					64ab85da4f | ||
| 
						 | 
					b8d7a13ea3 | ||
| 
						 | 
					78a76dc905 | ||
| 
						 | 
					5fa5fff0e9 | ||
| 
						 | 
					d323b3d816 | ||
| 
						 | 
					b685b5672a | ||
| 
						 | 
					8f6c2f87c8 | ||
| 
						 | 
					f30e8b11eb | ||
| 
						 | 
					8bd6d6a4de | ||
| 
						 | 
					b3a8f438fc | ||
| 
						 | 
					e78ddf0a95 | ||
| 
						 | 
					5f0366c2cb | ||
| 
						 | 
					779ca09775 | ||
| 
						 | 
					313f1a1e83 | ||
| 
						 | 
					21337f4776 | ||
| 
						 | 
					53a8e5655b | ||
| 
						 | 
					2d85585ae1 | ||
| 
						 | 
					63d109f7be | ||
| 
						 | 
					c904b6b5bf | ||
| 
						 | 
					6a27449922 | ||
| 
						 | 
					9a9c07f571 | ||
| 
						 | 
					4382204e1b | ||
| 
						 | 
					6d3114efe2 | ||
| 
						 | 
					b62baaed95 | ||
| 
						 | 
					9b391e531b | ||
| 
						 | 
					a0c7a6d22b | ||
| 
						 | 
					14424f7058 | ||
| 
						 | 
					6063dff8d0 | ||
| 
						 | 
					7fba9ed398 | ||
| 
						 | 
					53280a196b | ||
| 
						 | 
					0bf9a5704b | ||
| 
						 | 
					8182d17ae1 | ||
| 
						 | 
					69b1ac7dcd | ||
| 
						 | 
					b15507aac3 | ||
| 
						 | 
					6c2f583f51 | ||
| 
						 | 
					a72eaddda3 | ||
| 
						 | 
					dc050e45df | ||
| 
						 | 
					2fcbf13920 | ||
| 
						 | 
					099ae31523 | ||
| 
						 | 
					c2fcdf3a02 | ||
| 
						 | 
					2056a538b9 | ||
| 
						 | 
					cd1144dc24 | ||
| 
						 | 
					e9d068b913 | ||
| 
						 | 
					ec2ad57c32 | ||
| 
						 | 
					316adac511 | ||
| 
						 | 
					d7b11d4c33 | ||
| 
						 | 
					c52aa6df33 | ||
| 
						 | 
					a19b23b59f | ||
| 
						 | 
					4e26b2a65b | ||
| 
						 | 
					7c4feac6db | ||
| 
						 | 
					e01e364c37 | ||
| 
						 | 
					c13a3d7b84 | ||
| 
						 | 
					67805b6dc5 | ||
| 
						 | 
					0050ab2a3d | ||
| 
						 | 
					60e66c6cbf | ||
| 
						 | 
					5ad2a253e8 | ||
| 
						 | 
					b5d50e9298 | ||
| 
						 | 
					37f7362aca | ||
| 
						 | 
					bee198def5 | ||
| 
						 | 
					f09e479fd6 | ||
| 
						 | 
					80fe93bc33 | ||
| 
						 | 
					ea03ad3bee | ||
| 
						 | 
					feec421744 | ||
| 
						 | 
					634982840e | ||
| 
						 | 
					fb3c85ab2f | ||
| 
						 | 
					a9b7c3531c | ||
| 
						 | 
					a7ba0d908d | ||
| 
						 | 
					2fc70e2c5d | ||
| 
						 | 
					7ae3f0e70c | ||
| 
						 | 
					9afaa51e3f | ||
| 
						 | 
					c736a719f1 | ||
| 
						 | 
					37a547842b | ||
| 
						 | 
					b9f1d43921 | ||
| 
						 | 
					bec6423c02 | ||
| 
						 | 
					241b2b4ae3 | ||
| 
						 | 
					14d9b56937 | ||
| 
						 | 
					1c3766eb46 | ||
| 
						 | 
					70024d61eb | ||
| 
						 | 
					2085f133d6 | ||
| 
						 | 
					2a045dfceb | ||
| 
						 | 
					893cbaaf2f | ||
| 
						 | 
					6e61939382 | ||
| 
						 | 
					015a618172 | ||
| 
						 | 
					2a8b91cdb9 | ||
| 
						 | 
					bebd5dbc5a | ||
| 
						 | 
					018dbfe058 | ||
| 
						 | 
					c6ea597817 | ||
| 
						 | 
					175b00c0a2 | ||
| 
						 | 
					5ebc6e305e | ||
| 
						 | 
					993600761f | ||
| 
						 | 
					1d9fff80b7 | ||
| 
						 | 
					c712b84dd5 | ||
| 
						 | 
					dcf8dd4b5e | ||
| 
						 | 
					ba26c3fb22 | ||
| 
						 | 
					41563607a8 | ||
| 
						 | 
					2d4dcfb740 | ||
| 
						 | 
					34854e70cf | ||
| 
						 | 
					758d9fe852 | ||
| 
						 | 
					6a6c0e7a73 | ||
| 
						 | 
					ee44eec3e1 | ||
| 
						 | 
					eccd0d8e37 | ||
| 
						 | 
					983be0ec60 | ||
| 
						 | 
					243a45d840 | ||
| 
						 | 
					60ec804047 | ||
| 
						 | 
					c53e9ccf4a | ||
| 
						 | 
					6e8e0418fc | ||
| 
						 | 
					e9eb52305f | ||
| 
						 | 
					8501ae748c | ||
| 
						 | 
					da59692067 | ||
| 
						 | 
					bae77c0a46 | ||
| 
						 | 
					b42bc7329e | ||
| 
						 | 
					9b3c2b6ae2 | ||
| 
						 | 
					833b6df969 | ||
| 
						 | 
					0b45431139 | ||
| 
						 | 
					5d1349031c | ||
| 
						 | 
					82388a5e4c | ||
| 
						 | 
					74816fed6c | ||
| 
						 | 
					b4c9789d5f | ||
| 
						 | 
					f96fadc074 | ||
| 
						 | 
					f6b1173437 | ||
| 
						 | 
					346992c366 | ||
| 
						 | 
					ab4086bc24 | ||
| 
						 | 
					d8e7f2b2c7 | ||
| 
						 | 
					93fcb94b62 | ||
| 
						 | 
					32a446cf19 | ||
| 
						 | 
					94459cab98 | ||
| 
						 | 
					158588640a | ||
| 
						 | 
					f00f050d1b | ||
| 
						 | 
					c4f34c60a5 | ||
| 
						 | 
					371ef80dc3 | ||
| 
						 | 
					84b4e9ff7c | ||
| 
						 | 
					677a74fa1b | ||
| 
						 | 
					8a076d1dba | ||
| 
						 | 
					970722483c | ||
| 
						 | 
					31443724c6 | ||
| 
						 | 
					0e7614919b | ||
| 
						 | 
					2bf72937d2 | ||
| 
						 | 
					4e555c7b32 | ||
| 
						 | 
					bd7021d05b | ||
| 
						 | 
					1a14555605 | ||
| 
						 | 
					cb3fb371ea | ||
| 
						 | 
					6c6dda1b74 | ||
| 
						 | 
					a712808006 | ||
| 
						 | 
					e19c203728 | ||
| 
						 | 
					8817779f23 | ||
| 
						 | 
					3e5a32671c | ||
| 
						 | 
					d34f32b39e | ||
| 
						 | 
					c85a77e0b1 | ||
| 
						 | 
					9406e517e6 | ||
| 
						 | 
					4a56049225 | ||
| 
						 | 
					04ea4b4d75 | ||
| 
						 | 
					5b6b6283f3 | ||
| 
						 | 
					38f07ce0fb | ||
| 
						 | 
					987cdebefb | ||
| 
						 | 
					6b978db369 | ||
| 
						 | 
					5840c8cb70 | ||
| 
						 | 
					44f2024bab | ||
| 
						 | 
					410942e9df | ||
| 
						 | 
					5b3730feae | ||
| 
						 | 
					38f797ccd6 | ||
| 
						 | 
					553c5a7501 | ||
| 
						 | 
					bbba9d568f | ||
| 
						 | 
					11e43dd021 | ||
| 
						 | 
					e8ddf84871 | ||
| 
						 | 
					67f04d2d5f | ||
| 
						 | 
					8f646eef45 | ||
| 
						 | 
					d26e932858 | ||
| 
						 | 
					73b9d0840c | ||
| 
						 | 
					2ea4326c40 | ||
| 
						 | 
					8b80ac2877 | ||
| 
						 | 
					233237740d | ||
| 
						 | 
					f5cdac38bd | ||
| 
						 | 
					760565dcad | ||
| 
						 | 
					b5d97b3d94 | ||
| 
						 | 
					4a6cc54eb5 | ||
| 
						 | 
					61133545f6 | ||
| 
						 | 
					bf87d13f5b | ||
| 
						 | 
					efaf688650 | ||
| 
						 | 
					9a5c21c16f | ||
| 
						 | 
					06ffb47ef2 | ||
| 
						 | 
					1acbda97e0 | ||
| 
						 | 
					d6460aff36 | ||
| 
						 | 
					a357f77c4c | ||
| 
						 | 
					d5bdd2b2f9 | ||
| 
						 | 
					562d2de303 | ||
| 
						 | 
					1f68fa19c7 | ||
| 
						 | 
					677ddd6160 | ||
| 
						 | 
					228e627475 | ||
| 
						 | 
					ec4e653c6f | ||
| 
						 | 
					3916d1e6cb | ||
| 
						 | 
					387aaba810 | ||
| 
						 | 
					9f3d9da119 | ||
| 
						 | 
					76c24a0d82 | ||
| 
						 | 
					ffd65a1956 | ||
| 
						 | 
					de8947f92f | ||
| 
						 | 
					d2b4dedbe4 | ||
| 
						 | 
					34865ffb4a | ||
| 
						 | 
					62970da675 | ||
| 
						 | 
					8ed31c48e0 | ||
| 
						 | 
					13d40e33a4 | ||
| 
						 | 
					c765213aaa | ||
| 
						 | 
					983bf93a24 | ||
| 
						 | 
					2f8085af15 | ||
| 
						 | 
					88a4dc2795 | ||
| 
						 | 
					b5112096d7 | ||
| 
						 | 
					fc80c714e8 | ||
| 
						 | 
					84bc23b92f | ||
| 
						 | 
					d90472dd64 | ||
| 
						 | 
					3b63ed8230 | ||
| 
						 | 
					e75441e027 | ||
| 
						 | 
					0ae8b51230 | ||
| 
						 | 
					547c136b4f | ||
| 
						 | 
					4ed13bde55 | ||
| 
						 | 
					80e01deba0 | ||
| 
						 | 
					fb9ae9d0e2 | ||
| 
						 | 
					dd54d8551b | ||
| 
						 | 
					205f8b266c | ||
| 
						 | 
					c4ce9ac4de | ||
| 
						 | 
					0e4e28fdda | ||
| 
						 | 
					db2370a12f | ||
| 
						 | 
					d1d35ba85f | ||
| 
						 | 
					2ab2e7675c | ||
| 
						 | 
					0472629222 | ||
| 
						 | 
					c4f7570a23 | ||
| 
						 | 
					d26cfd5791 | ||
| 
						 | 
					b7ffc6bb45 | ||
| 
						 | 
					8a96aec567 | ||
| 
						 | 
					5cd9f57137 | ||
| 
						 | 
					702664e959 | ||
| 
						 | 
					18d87edd6d | ||
| 
						 | 
					dc59795629 | ||
| 
						 | 
					cb9bb31f7d | ||
| 
						 | 
					02706bec94 | ||
| 
						 | 
					7657186bf6 | ||
| 
						 | 
					42ac24448c | ||
| 
						 | 
					31891b55a4 | ||
| 
						 | 
					aa47ac4c06 | ||
| 
						 | 
					b01151e81c | ||
| 
						 | 
					67bd6f9ccd | ||
| 
						 | 
					4869fa285b | ||
| 
						 | 
					d221e01406 | ||
| 
						 | 
					874fc8228a | ||
| 
						 | 
					6f752c64bc | ||
| 
						 | 
					ccb7950c4c | ||
| 
						 | 
					750e771376 | ||
| 
						 | 
					7012a4a291 | ||
| 
						 | 
					40ab20a252 | ||
| 
						 | 
					6af315e50c | ||
| 
						 | 
					861b5e608b | ||
| 
						 | 
					f61917594e | ||
| 
						 | 
					0ddab51ad8 | ||
| 
						 | 
					9798432f56 | ||
| 
						 | 
					5faf52619d | ||
| 
						 | 
					f8b4ba80e0 | ||
| 
						 | 
					527f70e540 | ||
| 
						 | 
					19f66c7575 | ||
| 
						 | 
					b7721deb02 | ||
| 
						 | 
					5ba188ab2d | ||
| 
						 | 
					eadfd78c2e | ||
| 
						 | 
					4d815c9990 | ||
| 
						 | 
					176981b529 | ||
| 
						 | 
					85baebd0d4 | ||
| 
						 | 
					ac022b2e30 | ||
| 
						 | 
					f169b750b8 | ||
| 
						 | 
					86295eef13 | ||
| 
						 | 
					32d60b2714 | ||
| 
						 | 
					0a3065a2f2 | ||
| 
						 | 
					b98faaa8c0 | ||
| 
						 | 
					73772323c9 | ||
| 
						 | 
					98389066e2 | ||
| 
						 | 
					fb53ed4c1f | ||
| 
						 | 
					e719eb5b81 | ||
| 
						 | 
					3858063bcd | ||
| 
						 | 
					d4f5fea840 | ||
| 
						 | 
					22c1d48cb2 | ||
| 
						 | 
					e7cefd684b | ||
| 
						 | 
					d2485e4f20 | ||
| 
						 | 
					160d6b26b0 | ||
| 
						 | 
					17d61e4f29 | ||
| 
						 | 
					446b9467da | ||
| 
						 | 
					3970a7056c | ||
| 
						 | 
					74068a6d1b | ||
| 
						 | 
					8c83422fe2 | ||
| 
						 | 
					61a1e3cd01 | ||
| 
						 | 
					89cac6f25c | ||
| 
						 | 
					62082293c5 | ||
| 
						 | 
					153fd2752c | ||
| 
						 | 
					e649a40f5d | ||
| 
						 | 
					32d76a5b57 | ||
| 
						 | 
					14aa3fa258 | ||
| 
						 | 
					f5394cccb1 | ||
| 
						 | 
					64dd9c7656 | ||
| 
						 | 
					16ae0c6466 | ||
| 
						 | 
					6a2e21ec8c | ||
| 
						 | 
					120f17ce04 | ||
| 
						 | 
					ab938bb9bd | ||
| 
						 | 
					33820cd2ac | ||
| 
						 | 
					41def21f91 | ||
| 
						 | 
					d118312922 | ||
| 
						 | 
					82b93e4945 | ||
| 
						 | 
					e36fb1ecda | ||
| 
						 | 
					e4a1788614 | ||
| 
						 | 
					7b23eff9cf | ||
| 
						 | 
					67ff8e3ea3 | ||
| 
						 | 
					2248599ae1 | ||
| 
						 | 
					29350b363b | ||
| 
						 | 
					83c470a443 | ||
| 
						 | 
					ab96e2d6e9 | ||
| 
						 | 
					6b81cf4bc9 | ||
| 
						 | 
					0d9301539e | ||
| 
						 | 
					4a9e12542d | ||
| 
						 | 
					21b4105454 | ||
| 
						 | 
					d7648d94ca | ||
| 
						 | 
					883343ba63 | ||
| 
						 | 
					16b5dc710f | ||
| 
						 | 
					686d767053 | ||
| 
						 | 
					ed3176dd6b | ||
| 
						 | 
					6a99ab098c | ||
| 
						 | 
					b03adde546 | ||
| 
						 | 
					e6034ea299 | ||
| 
						 | 
					c7f51ebeab | ||
| 
						 | 
					9a820d7a98 | ||
| 
						 | 
					8dbaf534c8 | ||
| 
						 | 
					91f483c591 | ||
| 
						 | 
					c5b448038f | ||
| 
						 | 
					c4ff5eb0ca | ||
| 
						 | 
					0859cd2444 | ||
| 
						 | 
					59b45a90cc | ||
| 
						 | 
					f661475962 | ||
| 
						 | 
					54b02ecf09 | ||
| 
						 | 
					4551e7ce49 | ||
| 
						 | 
					064bc3ecbc | ||
| 
						 | 
					cf38a4c470 | ||
| 
						 | 
					aacc79a3a3 | ||
| 
						 | 
					9864bf703d | ||
| 
						 | 
					289a42f050 | ||
| 
						 | 
					ade1e79b37 | ||
| 
						 | 
					2415724d5f | ||
| 
						 | 
					5463177f1f | ||
| 
						 | 
					4efd751eda | ||
| 
						 | 
					2337efc3b1 | ||
| 
						 | 
					b942a25a45 | ||
| 
						 | 
					beab9a9696 | ||
| 
						 | 
					177dbc7be0 | ||
| 
						 | 
					f2e71edcbd | ||
| 
						 | 
					fad6e5a5bc | ||
| 
						 | 
					52f6c437fe | ||
| 
						 | 
					80a8be6319 | ||
| 
						 | 
					043d70fcdf | ||
| 
						 | 
					4f7e958969 | ||
| 
						 | 
					53143910a1 | ||
| 
						 | 
					95656cd7f3 | ||
| 
						 | 
					d8f79b263d | ||
| 
						 | 
					51da8552c3 | ||
| 
						 | 
					7e42cb61f7 | ||
| 
						 | 
					6c038680f9 | ||
| 
						 | 
					291a908f19 | ||
| 
						 | 
					b264a03f89 | ||
| 
						 | 
					7472ede32a | ||
| 
						 | 
					b5065e462b | ||
| 
						 | 
					8dd799b4bd | ||
| 
						 | 
					a38520c90d | ||
| 
						 | 
					3050ae57c0 | ||
| 
						 | 
					01205f772c | ||
| 
						 | 
					06ad5be3af | ||
| 
						 | 
					2fe3829e5e | ||
| 
						 | 
					a0c8b9bc68 | ||
| 
						 | 
					0406b1facf | ||
| 
						 | 
					65dbee01e5 | ||
| 
						 | 
					b1080f7c9a | ||
| 
						 | 
					7bfd58d41f | ||
| 
						 | 
					3851c6aae2 | ||
| 
						 | 
					ae03fa7d8e | ||
| 
						 | 
					8a14dd25a9 | ||
| 
						 | 
					e0bea7d541 | ||
| 
						 | 
					534a8a05f3 | ||
| 
						 | 
					f5b8a26d9a | ||
| 
						 | 
					cf51f7fb65 | ||
| 
						 | 
					4d1f3d3cd0 | ||
| 
						 | 
					f70b87b4c5 | ||
| 
						 | 
					0e26355348 | ||
| 
						 | 
					246ea56eab | ||
| 
						 | 
					7c1bba315b | ||
| 
						 | 
					9395cad379 | ||
| 
						 | 
					c5b2e85b47 | ||
| 
						 | 
					38f8087281 | ||
| 
						 | 
					e3fa7d021e | ||
| 
						 | 
					a1813e2b2d | ||
| 
						 | 
					2e62458eef | ||
| 
						 | 
					bb9e5565f2 | ||
| 
						 | 
					29102befa6 | ||
| 
						 | 
					9d1145598a | ||
| 
						 | 
					065e466f1a | ||
| 
						 | 
					3ac00f32af | ||
| 
						 | 
					21bb852750 | ||
| 
						 | 
					83bab78bda | ||
| 
						 | 
					894ec46ef4 | ||
| 
						 | 
					4eb1d3eb1b | ||
| 
						 | 
					945423e83a | ||
| 
						 | 
					9fd33c0b96 | ||
| 
						 | 
					3c09f2d2bd | ||
| 
						 | 
					7b4bf6a22c | ||
| 
						 | 
					b5b77f6367 | ||
| 
						 | 
					5a8097a4d5 | ||
| 
						 | 
					9cdf6fb64b | ||
| 
						 | 
					a137223b4f | ||
| 
						 | 
					52e1ce9518 | ||
| 
						 | 
					8127a34f98 | ||
| 
						 | 
					2dcb8b674f | ||
| 
						 | 
					1e3b1b6e47 | ||
| 
						 | 
					9cdaae94cc | ||
| 
						 | 
					316e74be74 | ||
| 
						 | 
					af69c4f4f7 | ||
| 
						 | 
					ad9648a215 | ||
| 
						 | 
					1576f3319e | ||
| 
						 | 
					8ac90316d9 | ||
| 
						 | 
					35ba5c826d | ||
| 
						 | 
					4f4ffa98b5 | ||
| 
						 | 
					b7d92c3e03 | ||
| 
						 | 
					4ecf939452 | ||
| 
						 | 
					7ef6b05ef1 | ||
| 
						 | 
					695f95aad1 | ||
| 
						 | 
					2a6ea6d7a7 | ||
| 
						 | 
					f5e0ff2170 | ||
| 
						 | 
					814d176b86 | ||
| 
						 | 
					3955b31362 | ||
| 
						 | 
					4b3fb5a01c | ||
| 
						 | 
					67abd4cd47 | ||
| 
						 | 
					58f4af7973 | ||
| 
						 | 
					99befd3a15 | ||
| 
						 | 
					3acda85c2b | ||
| 
						 | 
					dbb69797cf | ||
| 
						 | 
					2910880b15 | ||
| 
						 | 
					8b5f0abef1 | ||
| 
						 | 
					10b5327b19 | ||
| 
						 | 
					4ba1eb26fa | ||
| 
						 | 
					444f6427b8 | ||
| 
						 | 
					a173e07eec | ||
| 
						 | 
					3de85777de | ||
| 
						 | 
					f4c5314890 | ||
| 
						 | 
					1225ad58bd | ||
| 
						 | 
					951fdeba67 | ||
| 
						 | 
					327b46cced | ||
| 
						 | 
					80d301257c | ||
| 
						 | 
					0e59182945 | ||
| 
						 | 
					7270d5ce26 | ||
| 
						 | 
					a142d419d2 | ||
| 
						 | 
					23cf63f550 | ||
| 
						 | 
					13ee90bbd4 | ||
| 
						 | 
					754d6c3abd | ||
| 
						 | 
					c6f6e81238 | ||
| 
						 | 
					7803a1a28a | ||
| 
						 | 
					3d647b9a98 | ||
| 
						 | 
					090a7f38be | ||
| 
						 | 
					8ad47a13e5 | ||
| 
						 | 
					497cc6bfaf | ||
| 
						 | 
					d5be114c07 | ||
| 
						 | 
					6e43a4ccce | ||
| 
						 | 
					a07dcfd850 | ||
| 
						 | 
					321511a5be | ||
| 
						 | 
					c5297b9fd9 | ||
| 
						 | 
					7e00076586 | ||
| 
						 | 
					9a8ba19b73 | ||
| 
						 | 
					41e776f9db | ||
| 
						 | 
					5c2d4a6bdd | ||
| 
						 | 
					83b709401c | ||
| 
						 | 
					3590fffeae | ||
| 
						 | 
					5e2e87cc8d | ||
| 
						 | 
					b1bdba7db5 | ||
| 
						 | 
					e3d342df96 | ||
| 
						 | 
					ff54a74b4d | ||
| 
						 | 
					ccf65be0a4 | ||
| 
						 | 
					7dfef13224 | ||
| 
						 | 
					0b85e53af2 | ||
| 
						 | 
					26cfb21c00 | ||
| 
						 | 
					b7acdbcb4c | ||
| 
						 | 
					6e1e9caa32 | ||
| 
						 | 
					f71725de6e | ||
| 
						 | 
					26fe6da93b | ||
| 
						 | 
					8d4ac69175 | ||
| 
						 | 
					4f5a6a33b4 | ||
| 
						 | 
					ec8ee4404b | ||
| 
						 | 
					e47b5d4e6c | ||
| 
						 | 
					494c40fd98 | ||
| 
						 | 
					d3b414724b | ||
| 
						 | 
					38181fbc74 | ||
| 
						 | 
					8847e61fca | ||
| 
						 | 
					95b84adb9b | ||
| 
						 | 
					b34d161703 | ||
| 
						 | 
					d88b3d3d5d | ||
| 
						 | 
					f2fb9039bd | ||
| 
						 | 
					a28b32aa45 | ||
| 
						 | 
					1ba47e7af9 | ||
| 
						 | 
					9359498b06 | ||
| 
						 | 
					553082e24a | ||
| 
						 | 
					dc28a9c0c1 | ||
| 
						 | 
					1faef62d59 | ||
| 
						 | 
					0d0d5e7ee3 | ||
| 
						 | 
					4f567d0f81 | ||
| 
						 | 
					f23d923fd3 | ||
| 
						 | 
					10d6d8b2ae | ||
| 
						 | 
					358e08b95d | ||
| 
						 | 
					e181eda253 | ||
| 
						 | 
					7d3f5d7ac1 | ||
| 
						 | 
					37c7a695a2 | ||
| 
						 | 
					07f107ae20 | ||
| 
						 | 
					5c14b3be6d | ||
| 
						 | 
					1dc15ec1bc | ||
| 
						 | 
					6a9ed44088 | ||
| 
						 | 
					bdb0620529 | ||
| 
						 | 
					be9ea07e87 | ||
| 
						 | 
					4cf14e9f85 | ||
| 
						 | 
					d02b2c4308 | ||
| 
						 | 
					1687a9eb94 | ||
| 
						 | 
					344c6a3725 | ||
| 
						 | 
					f966dad306 | ||
| 
						 | 
					887f41c062 | ||
| 
						 | 
					4b1350e467 | ||
| 
						 | 
					22a0c57746 | ||
| 
						 | 
					fec571f5b0 | ||
| 
						 | 
					976285ccbc | ||
| 
						 | 
					9b3b7ad22e | ||
| 
						 | 
					1b8ac7c6b5 | ||
| 
						 | 
					bd2db87237 | ||
| 
						 | 
					df3ca59116 | ||
| 
						 | 
					3ca4509ae9 | ||
| 
						 | 
					d531926246 | ||
| 
						 | 
					357fdb60b6 | ||
| 
						 | 
					b6f855cb9b | ||
| 
						 | 
					b6646310e8 | ||
| 
						 | 
					070da3c08f | ||
| 
						 | 
					6b7f6369ec | ||
| 
						 | 
					309e3ce4f9 | ||
| 
						 | 
					8a4eb8ed45 | ||
| 
						 | 
					eee70dcf8e | ||
| 
						 | 
					c0c885a1f3 | ||
| 
						 | 
					a7488672bf | ||
| 
						 | 
					c1312cab1f | ||
| 
						 | 
					8c833d375a | ||
| 
						 | 
					18f14ae23d | ||
| 
						 | 
					98adcdd466 | ||
| 
						 | 
					a2bd47c567 | ||
| 
						 | 
					7b3c308eb0 | ||
| 
						 | 
					1be1d3cfb8 | ||
| 
						 | 
					b970469df9 | ||
| 
						 | 
					80a324386b | ||
| 
						 | 
					163518778c | ||
| 
						 | 
					7fd1ce4dc3 | ||
| 
						 | 
					c78ee11c41 | ||
| 
						 | 
					4435e3b269 | ||
| 
						 | 
					b96a0dba90 | ||
| 
						 | 
					30dfc00a54 | ||
| 
						 | 
					fe5979cfdb | ||
| 
						 | 
					a1f7987ad8 | ||
| 
						 | 
					ac269a8f68 | ||
| 
						 | 
					35944744f8 | ||
| 
						 | 
					4b1c0bd1e7 | ||
| 
						 | 
					b7ff86fa2b | ||
| 
						 | 
					2c27e4ee76 | ||
| 
						 | 
					6ac9e67bd7 | ||
| 
						 | 
					8726a6b6ed | ||
| 
						 | 
					2f26069a41 | ||
| 
						 | 
					d6c155ff47 | ||
| 
						 | 
					15360e5e51 | ||
| 
						 | 
					e587a56fc0 | ||
| 
						 | 
					113531432a | ||
| 
						 | 
					bfa74c2649 | ||
| 
						 | 
					6bb215f56c | ||
| 
						 | 
					8b37844e5f | ||
| 
						 | 
					1445e62312 | ||
| 
						 | 
					4781ff88fd | ||
| 
						 | 
					c28e15c682 | ||
| 
						 | 
					fe0585ec91 | ||
| 
						 | 
					18c0b49f3d | ||
| 
						 | 
					5d69c956ee | ||
| 
						 | 
					93aa22ea08 | ||
| 
						 | 
					b7c6bc20be | ||
| 
						 | 
					9bb4a95e08 | ||
| 
						 | 
					0966ddafaa | ||
| 
						 | 
					c073625fb9 | ||
| 
						 | 
					85dd4bfb8d | ||
| 
						 | 
					5ae34aa8e1 | ||
| 
						 | 
					0eb8414750 | ||
| 
						 | 
					09717d3fc8 | ||
| 
						 | 
					81a3246a56 | ||
| 
						 | 
					4c8fbe9abf | ||
| 
						 | 
					c0d448f778 | ||
| 
						 | 
					16e9a9eaef | ||
| 
						 | 
					0d7446c134 | ||
| 
						 | 
					a4752673bb | ||
| 
						 | 
					9a0d5c4ed8 | ||
| 
						 | 
					d85bc18178 | ||
| 
						 | 
					f0e66d8c76 | ||
| 
						 | 
					af114358c8 | ||
| 
						 | 
					ffe17a8197 | ||
| 
						 | 
					2459e1e268 | ||
| 
						 | 
					a34a4af36a | ||
| 
						 | 
					bf51f05a50 | ||
| 
						 | 
					5d94ff5974 | ||
| 
						 | 
					0d4ddfa743 | ||
| 
						 | 
					56c9899832 | ||
| 
						 | 
					7b3fba1ad5 | ||
| 
						 | 
					700e3b685a | ||
| 
						 | 
					3e1caa6185 | ||
| 
						 | 
					50eafb7668 | ||
| 
						 | 
					25559ac02e | ||
| 
						 | 
					51a87fa652 | ||
| 
						 | 
					b2dad0342f | ||
| 
						 | 
					a5abce7982 | ||
| 
						 | 
					de3f22b288 | ||
| 
						 | 
					be5cc378c8 | ||
| 
						 | 
					4afc4aed73 | ||
| 
						 | 
					a4e1ac7952 | ||
| 
						 | 
					f84d2b4d36 | ||
| 
						 | 
					b4c7876e4b | ||
| 
						 | 
					4207ef3d27 | ||
| 
						 | 
					b3572269a4 | ||
| 
						 | 
					097d449cc1 | ||
| 
						 | 
					7f44713487 | ||
| 
						 | 
					b7a6b78e0c | ||
| 
						 | 
					855a9eff76 | ||
| 
						 | 
					8e34e75100 | ||
| 
						 | 
					4be60ac155 | ||
| 
						 | 
					5ec4501b9d | ||
| 
						 | 
					e80f566a14 | ||
| 
						 | 
					1729918777 | ||
| 
						 | 
					cef290c6b4 | ||
| 
						 | 
					539e34b5df | ||
| 
						 | 
					765683403f | ||
| 
						 | 
					cca9fca894 | ||
| 
						 | 
					2b403db811 | ||
| 
						 | 
					03e7b7c95f | ||
| 
						 | 
					1a05a90f1c | ||
| 
						 | 
					dcea109bb5 | ||
| 
						 | 
					d46a573bbe | ||
| 
						 | 
					7d0d19708a | ||
| 
						 | 
					09f14efade | ||
| 
						 | 
					87753cda49 | ||
| 
						 | 
					66f6f43056 | ||
| 
						 | 
					86f059dcfb | ||
| 
						 | 
					5931d43a36 | ||
| 
						 | 
					8475a0df2f | ||
| 
						 | 
					ccc4c9c02c | ||
| 
						 | 
					16edb15600 | ||
| 
						 | 
					9e7534a46e | ||
| 
						 | 
					737dddaec0 | ||
| 
						 | 
					b5c90c9b05 | ||
| 
						 | 
					c3ecd552f5 | ||
| 
						 | 
					56f0227c92 | ||
| 
						 | 
					dcb5a4df01 | ||
| 
						 | 
					fd64213c2f | ||
| 
						 | 
					fc2c06754c | ||
| 
						 | 
					7ec200f4d1 | ||
| 
						 | 
					e53f139925 | ||
| 
						 | 
					61599ceb7b | ||
| 
						 | 
					6f8e3f106a | ||
| 
						 | 
					8fd676f73e | ||
| 
						 | 
					98a8103a3b | ||
| 
						 | 
					94043b1150 | ||
| 
						 | 
					1b02ad5e8a | ||
| 
						 | 
					4897587615 | ||
| 
						 | 
					8e2f57c82e | ||
| 
						 | 
					c3323b1902 | ||
| 
						 | 
					59c063dfd3 | ||
| 
						 | 
					8c16696f47 | ||
| 
						 | 
					f68950db67 | ||
| 
						 | 
					710e370c34 | ||
| 
						 | 
					7bb6d76d14 | ||
| 
						 | 
					2467f814a8 | ||
| 
						 | 
					a654ef9ee6 | ||
| 
						 | 
					c1688733c1 | ||
| 
						 | 
					cd73a733c7 | ||
| 
						 | 
					8ef8e949bd | ||
| 
						 | 
					49111a63e6 | ||
| 
						 | 
					ee4ecf5155 | ||
| 
						 | 
					3478253e5a | ||
| 
						 | 
					6ddc59dadf | ||
| 
						 | 
					dc8688b8dc | ||
| 
						 | 
					865e495188 | ||
| 
						 | 
					d3c0ed007e | ||
| 
						 | 
					0dc79376e7 | ||
| 
						 | 
					3ccbed1022 | ||
| 
						 | 
					377e43fbb9 | ||
| 
						 | 
					1f2b042b95 | ||
| 
						 | 
					fd49ba6c18 | ||
| 
						 | 
					facfa19cdd | ||
| 
						 | 
					3347ced899 | ||
| 
						 | 
					592686bee9 | ||
| 
						 | 
					f471a293ea | ||
| 
						 | 
					c688166066 | ||
| 
						 | 
					5dcd2710d4 | ||
| 
						 | 
					16d8383625 | ||
| 
						 | 
					6b49fd7483 | ||
| 
						 | 
					f10985fc50 | ||
| 
						 | 
					edeac97773 | ||
| 
						 | 
					40498ffdd0 | ||
| 
						 | 
					fd884a3cd2 | ||
| 
						 | 
					1887629c5c | ||
| 
						 | 
					d3be5b2725 | ||
| 
						 | 
					2e973684c0 | ||
| 
						 | 
					ab909fc4c2 | ||
| 
						 | 
					4cd5220d27 | ||
| 
						 | 
					24d47a6e07 | ||
| 
						 | 
					8a66584db4 | ||
| 
						 | 
					186f433e40 | ||
| 
						 | 
					736a40fec9 | ||
| 
						 | 
					4245400ae4 | ||
| 
						 | 
					629bba6b35 | ||
| 
						 | 
					f6f2a9e4be | ||
| 
						 | 
					8bfcae65ef | ||
| 
						 | 
					96cf615e9d | ||
| 
						 | 
					e9b3e1d031 | ||
| 
						 | 
					7167cde020 | ||
| 
						 | 
					2a80a4c521 | ||
| 
						 | 
					83f11b1c9b | ||
| 
						 | 
					a00e7f0f5e | ||
| 
						 | 
					e1607f5705 | ||
| 
						 | 
					cce931f27d | ||
| 
						 | 
					34089c93bb | ||
| 
						 | 
					beb61ef429 | ||
| 
						 | 
					72aff74798 | ||
| 
						 | 
					8e715af480 | ||
| 
						 | 
					2730842559 | ||
| 
						 | 
					cac269cf91 | ||
| 
						 | 
					249036ada0 | ||
| 
						 | 
					18d80b9e8f | ||
| 
						 | 
					b2d8e0b476 | ||
| 
						 | 
					225a652021 | ||
| 
						 | 
					38b1d96750 | ||
| 
						 | 
					2f069ad3e2 | ||
| 
						 | 
					a3dbe03e80 | ||
| 
						 | 
					f4bef25b5e | ||
| 
						 | 
					ebf7d22503 | ||
| 
						 | 
					9296d9deb8 | ||
| 
						 | 
					7b95a25adc | ||
| 
						 | 
					82d6cfa7fc | ||
| 
						 | 
					48750d5fc7 | ||
| 
						 | 
					4f0258ec09 | ||
| 
						 | 
					db4d0d307a | ||
| 
						 | 
					2baf22e184 | ||
| 
						 | 
					21d5aead47 | ||
| 
						 | 
					f40c9b83df | ||
| 
						 | 
					b9e082b811 | ||
| 
						 | 
					0bfa601a9f | ||
| 
						 | 
					e356420123 | ||
| 
						 | 
					e8f85cba0f | ||
| 
						 | 
					1aba99b1e7 | ||
| 
						 | 
					12815d7cd6 | ||
| 
						 | 
					9deb76ce3e | ||
| 
						 | 
					c98676068e | ||
| 
						 | 
					b534f74bf4 | ||
| 
						 | 
					411e9b0c45 | ||
| 
						 | 
					3fa1879f6a | ||
| 
						 | 
					d30cf22c12 | ||
| 
						 | 
					557b6cfd3f | ||
| 
						 | 
					84bf03b365 | ||
| 
						 | 
					34342bcd19 | ||
| 
						 | 
					5322a86313 | ||
| 
						 | 
					1dc50e21c4 | ||
| 
						 | 
					1eddbb1b47 | ||
| 
						 | 
					bb8591cf54 | ||
| 
						 | 
					a7913a62a9 | ||
| 
						 | 
					6d1b37b3da | ||
| 
						 | 
					34750cc738 | ||
| 
						 | 
					af677c4e1d | ||
| 
						 | 
					298076e00f | ||
| 
						 | 
					0d2cdd9773 | ||
| 
						 | 
					eb5d3b5a7c | ||
| 
						 | 
					7663775971 | ||
| 
						 | 
					fe46572f2b | ||
| 
						 | 
					a6d4d3eeac | ||
| 
						 | 
					62f97f1817 | ||
| 
						 | 
					253ff7b2ad | ||
| 
						 | 
					c274e51654 | ||
| 
						 | 
					1239e48304 | ||
| 
						 | 
					52313cbac9 | ||
| 
						 | 
					071218a201 | ||
| 
						 | 
					f0d6cc23ae | ||
| 
						 | 
					ceefe2e248 | ||
| 
						 | 
					9a2aed7d7a | ||
| 
						 | 
					a91a75355d | ||
| 
						 | 
					01acbfa1a5 | ||
| 
						 | 
					49b2896a3b | ||
| 
						 | 
					39af394a1c | ||
| 
						 | 
					5c7dcc6c33 | ||
| 
						 | 
					6c5ea2af27 | ||
| 
						 | 
					93e084e097 | ||
| 
						 | 
					1a61bcecfc | ||
| 
						 | 
					3d9fb701e2 | ||
| 
						 | 
					19a568a983 | ||
| 
						 | 
					70c3f6a8dd | ||
| 
						 | 
					bb999d8213 | ||
| 
						 | 
					121197bc87 | ||
| 
						 | 
					d5dd8e0fdc | ||
| 
						 | 
					c368800877 | ||
| 
						 | 
					6eb58549a9 | ||
| 
						 | 
					95def48071 | ||
| 
						 | 
					2ee6c33412 | ||
| 
						 | 
					be7ce435c0 | ||
| 
						 | 
					f4252f8672 | ||
| 
						 | 
					f4f961c4ea | ||
| 
						 | 
					e2fe03df8e | ||
| 
						 | 
					19b284c214 | ||
| 
						 | 
					6b3e3095ea | ||
| 
						 | 
					fd2aad1d9b | ||
| 
						 | 
					d239fc5d04 | ||
| 
						 | 
					ec4da97a35 | ||
| 
						 | 
					bb48ccedd7 | ||
| 
						 | 
					afc0dfb141 | ||
| 
						 | 
					8e87223195 | ||
| 
						 | 
					be1cece69b | ||
| 
						 | 
					45be6d6645 | ||
| 
						 | 
					d4db35c125 | ||
| 
						 | 
					94c6a5eeab | ||
| 
						 | 
					35292e794a | ||
| 
						 | 
					c2043a7f94 | ||
| 
						 | 
					e752588e8d | ||
| 
						 | 
					8f30dbd4f0 | ||
| 
						 | 
					29eb80dbd1 | ||
| 
						 | 
					6cf6f9a21e | ||
| 
						 | 
					6af6a2bbe8 | ||
| 
						 | 
					2576ac1c76 | ||
| 
						 | 
					bfeea8e6b7 | ||
| 
						 | 
					2f89f2311c | ||
| 
						 | 
					75e5967afd | ||
| 
						 | 
					1003628103 | ||
| 
						 | 
					3451e888b9 | ||
| 
						 | 
					12dc142a28 | ||
| 
						 | 
					cb80670885 | ||
| 
						 | 
					c189687188 | ||
| 
						 | 
					595016d393 | ||
| 
						 | 
					23550fe5de | ||
| 
						 | 
					8420de971f | ||
| 
						 | 
					17f8f32b2e | ||
| 
						 | 
					7676f40218 | ||
| 
						 | 
					2de62cb06f | ||
| 
						 | 
					be1df3ca0a | ||
| 
						 | 
					543ab6f331 | ||
| 
						 | 
					2b6f7ef2a9 | ||
| 
						 | 
					0d37f8564e | ||
| 
						 | 
					6cd2536048 | ||
| 
						 | 
					60fccf4e37 | ||
| 
						 | 
					8a8028394f | ||
| 
						 | 
					6a06667cc0 | ||
| 
						 | 
					25bf23105d | ||
| 
						 | 
					2544c78083 | ||
| 
						 | 
					40b9b6f6dc | ||
| 
						 | 
					f5e1beddf1 | ||
| 
						 | 
					d4076c9a8a | ||
| 
						 | 
					106695d45e | ||
| 
						 | 
					f71b3f48a1 | ||
| 
						 | 
					aa8dd932c1 | ||
| 
						 | 
					adbe3eefb6 | ||
| 
						 | 
					33f69c0546 | ||
| 
						 | 
					6c3a87a599 | ||
| 
						 | 
					13cc010e38 | ||
| 
						 | 
					e99bf99829 | ||
| 
						 | 
					2e7dcc1e2a | ||
| 
						 | 
					b85a036e4a | ||
| 
						 | 
					7885264b29 | ||
| 
						 | 
					73dd450147 | ||
| 
						 | 
					96efa990f9 | ||
| 
						 | 
					4e0aee9408 | ||
| 
						 | 
					27d509cfe9 | ||
| 
						 | 
					ade8e47a8c | ||
| 
						 | 
					ca52c963c7 | ||
| 
						 | 
					17acdb5acf | ||
| 
						 | 
					f6433211ae | ||
| 
						 | 
					0ec4c66fba | ||
| 
						 | 
					1faa9d6fd5 | ||
| 
						 | 
					23d64e720d | ||
| 
						 | 
					b8b56248bd | ||
| 
						 | 
					33929117f9 | ||
| 
						 | 
					2b1673c9c8 | ||
| 
						 | 
					702f549a6a | ||
| 
						 | 
					428741d7cf | ||
| 
						 | 
					6fa624cf8c | ||
| 
						 | 
					5f60188b8a | ||
| 
						 | 
					75a6fdeb58 | ||
| 
						 | 
					5f3fa92062 | ||
| 
						 | 
					66077ae48b | ||
| 
						 | 
					92637303db | ||
| 
						 | 
					811dfd710b | ||
| 
						 | 
					b08dc2cadb | ||
| 
						 | 
					f7c5a097e3 | ||
| 
						 | 
					5eb3102cd1 | ||
| 
						 | 
					05825a8a9f | ||
| 
						 | 
					24353c4372 | ||
| 
						 | 
					e89ea07626 | ||
| 
						 | 
					b99c95ba46 | ||
| 
						 | 
					9432bfe90c | ||
| 
						 | 
					37bf6da9c8 | ||
| 
						 | 
					b3ebbd60a2 | ||
| 
						 | 
					e942394bdb | ||
| 
						 | 
					4adfcd4fd7 | ||
| 
						 | 
					c10196afc0 | ||
| 
						 | 
					49746d1dce | ||
| 
						 | 
					d46e235c2a | ||
| 
						 | 
					ee44677d7e | ||
| 
						 | 
					20057aee2e | ||
| 
						 | 
					7119679080 | ||
| 
						 | 
					d869b51a57 | ||
| 
						 | 
					dbacc81af7 | ||
| 
						 | 
					b233c13dca | ||
| 
						 | 
					464be27479 | ||
| 
						 | 
					d736ac51c0 | ||
| 
						 | 
					e8b295ff7d | ||
| 
						 | 
					4a4490d5f1 | ||
| 
						 | 
					46313be2f5 | ||
| 
						 | 
					723bfe42e7 | ||
| 
						 | 
					e35c7dcd72 | ||
| 
						 | 
					fa83a0573e | ||
| 
						 | 
					7b97371ab1 | ||
| 
						 | 
					b17e32baa7 | ||
| 
						 | 
					cd52b9f0da | ||
| 
						 | 
					c3d74ffe48 | ||
| 
						 | 
					a231a96841 | ||
| 
						 | 
					93b61bf0d3 | ||
| 
						 | 
					06d39bd303 | ||
| 
						 | 
					52177b1f60 | ||
| 
						 | 
					566f7b5e58 | ||
| 
						 | 
					c8c47768c7 | ||
| 
						 | 
					62ff567c47 | ||
| 
						 | 
					ee400f9552 | ||
| 
						 | 
					9ac7629e2c | ||
| 
						 | 
					d72ca96a43 | ||
| 
						 | 
					d0dcb3b554 | ||
| 
						 | 
					e139e49826 | ||
| 
						 | 
					3838745fdb | ||
| 
						 | 
					06a5c70f4d | ||
| 
						 | 
					62af3fb7b9 | ||
| 
						 | 
					db302a1055 | ||
| 
						 | 
					847c91e568 | ||
| 
						 | 
					2646af106b | ||
| 
						 | 
					7261b4556b | ||
| 
						 | 
					071e3cf007 | ||
| 
						 | 
					164184b484 | ||
| 
						 | 
					8b6e87abee | ||
| 
						 | 
					45197b188e | ||
| 
						 | 
					559553b169 | ||
| 
						 | 
					84ec4068de | ||
| 
						 | 
					aea87be19e | ||
| 
						 | 
					9f14744d16 | ||
| 
						 | 
					1dc8c1dbc8 | ||
| 
						 | 
					e9812c53cb | ||
| 
						 | 
					ed98565963 | ||
| 
						 | 
					1d3233612a | ||
| 
						 | 
					8362a34cef | ||
| 
						 | 
					edd16d978f | ||
| 
						 | 
					4356356305 | ||
| 
						 | 
					cb88135220 | ||
| 
						 | 
					498a0fe795 | ||
| 
						 | 
					0ca1b6afcf | ||
| 
						 | 
					d3c9f3d6f8 | ||
| 
						 | 
					df59ca1a45 | ||
| 
						 | 
					9d84442409 | ||
| 
						 | 
					5ab9d72e45 | ||
| 
						 | 
					6060e7ed96 | ||
| 
						 | 
					7ca7f7a725 | ||
| 
						 | 
					355b3d3057 | ||
| 
						 | 
					d5bdf5f89c | ||
| 
						 | 
					17de7e0f1c | ||
| 
						 | 
					2cea484428 | ||
| 
						 | 
					fb3e19ae50 | ||
| 
						 | 
					99db7fb222 | ||
| 
						 | 
					49d0272627 | ||
| 
						 | 
					da30242640 | ||
| 
						 | 
					811edcde18 | ||
| 
						 | 
					4934e6471b | ||
| 
						 | 
					9dbd6659dc | ||
| 
						 | 
					5ddad4cdb3 | ||
| 
						 | 
					338c2da24f | ||
| 
						 | 
					b5cafc0b83 | ||
| 
						 | 
					c50ced6cc2 | ||
| 
						 | 
					f4783bda27 | ||
| 
						 | 
					b55507c8a7 | ||
| 
						 | 
					827a805966 | ||
| 
						 | 
					e23ba31eb9 | ||
| 
						 | 
					02c6fde11e | ||
| 
						 | 
					d003f6e125 | ||
| 
						 | 
					1dfff2487f | ||
| 
						 | 
					4ff9cd39c5 | ||
| 
						 | 
					9c4ffcc250 | ||
| 
						 | 
					6b5a04cf83 | ||
| 
						 | 
					55e61c092e | ||
| 
						 | 
					de6ab3de22 | ||
| 
						 | 
					5e1eb58e5a | ||
| 
						 | 
					d892a4dc23 | ||
| 
						 | 
					496ea65f39 | ||
| 
						 | 
					6577b15d08 | ||
| 
						 | 
					f2e35fad27 | ||
| 
						 | 
					81c48aa43d | ||
| 
						 | 
					0cfa9b52ae | ||
| 
						 | 
					48b92c163f | ||
| 
						 | 
					b7575b39c4 | ||
| 
						 | 
					ae2f002b44 | ||
| 
						 | 
					89c312691e | ||
| 
						 | 
					1d23affbc5 | ||
| 
						 | 
					26ffaa263b | ||
| 
						 | 
					ca5e6160b7 | ||
| 
						 | 
					6d60ff6ea1 | ||
| 
						 | 
					43ae26f146 | ||
| 
						 | 
					3e01f70468 | ||
| 
						 | 
					b9f1dd7691 | ||
| 
						 | 
					a7bed4fc7c | ||
| 
						 | 
					7ca49dc91d | ||
| 
						 | 
					645ee8a42a | ||
| 
						 | 
					115dd6f095 | ||
| 
						 | 
					0e03165467 | ||
| 
						 | 
					6574f4106e | ||
| 
						 | 
					8e7fcd9ee1 | ||
| 
						 | 
					ad63e1e698 | ||
| 
						 | 
					d784526dae | ||
| 
						 | 
					79d480e1e7 | ||
| 
						 | 
					b3b2ba31f7 | ||
| 
						 | 
					7f78bc3c6d | ||
| 
						 | 
					f508f30fb6 | ||
| 
						 | 
					d20a05161a | ||
| 
						 | 
					6769ab2797 | ||
| 
						 | 
					85867cbe94 | ||
| 
						 | 
					5e8d3988a2 | ||
| 
						 | 
					1cd0a08575 | ||
| 
						 | 
					efd71af2a1 | ||
| 
						 | 
					2ea80c29fa | ||
| 
						 | 
					e3fc0d5e78 | ||
| 
						 | 
					33f42aacca | ||
| 
						 | 
					c85bf83e88 | ||
| 
						 | 
					060b6ce148 | ||
| 
						 | 
					35618b4712 | ||
| 
						 | 
					cd2e99e980 | ||
| 
						 | 
					0359ae8f40 | ||
| 
						 | 
					972d39234f | ||
| 
						 | 
					798349fce6 | ||
| 
						 | 
					9612fda886 | ||
| 
						 | 
					4b217efb84 | ||
| 
						 | 
					555cfb3059 | ||
| 
						 | 
					c0d1d6926c | ||
| 
						 | 
					fca8fcec3e | ||
| 
						 | 
					6844d5dcad | ||
| 
						 | 
					d759e97166 | ||
| 
						 | 
					cbfc737d79 | ||
| 
						 | 
					ab64bf6fb1 | ||
| 
						 | 
					0b0d20021c | ||
| 
						 | 
					932a6f6b77 | ||
| 
						 | 
					1318760ad2 | ||
| 
						 | 
					15a403a98d | ||
| 
						 | 
					a92b7c1b16 | ||
| 
						 | 
					0c54013ee3 | ||
| 
						 | 
					ca5d1e7a8d | ||
| 
						 | 
					40a39e2270 | ||
| 
						 | 
					982530b186 | ||
| 
						 | 
					fadc08445a | ||
| 
						 | 
					783381c163 | ||
| 
						 | 
					5f26bee7c8 | ||
| 
						 | 
					2be57d0833 | ||
| 
						 | 
					6e6748f051 | ||
| 
						 | 
					a8d544d9b3 | ||
| 
						 | 
					5f1490e1bd | ||
| 
						 | 
					2c3e557b5c | ||
| 
						 | 
					08df4b8971 | ||
| 
						 | 
					11f58ea896 | ||
| 
						 | 
					15f3b4b6d1 | ||
| 
						 | 
					35270e50c2 | ||
| 
						 | 
					8c975657e7 | ||
| 
						 | 
					03cb3b9db1 | ||
| 
						 | 
					19ad942739 | ||
| 
						 | 
					3cf452b923 | ||
| 
						 | 
					2a6f9aa155 | ||
| 
						 | 
					570455b21d | ||
| 
						 | 
					dccdf9e66c | ||
| 
						 | 
					dd4d5bb1e0 | ||
| 
						 | 
					842e4aaa0d | ||
| 
						 | 
					ebb09cd9c4 | ||
| 
						 | 
					9a6df07d3d | ||
| 
						 | 
					c59c429a69 | ||
| 
						 | 
					69f9d0c916 | ||
| 
						 | 
					56edbe3804 | ||
| 
						 | 
					94c4a18541 | ||
| 
						 | 
					bdcf8d626d | ||
| 
						 | 
					576b40b1b0 | ||
| 
						 | 
					954575a19d | ||
| 
						 | 
					47bbe36725 | ||
| 
						 | 
					1a8f7e830c | ||
| 
						 | 
					dfc85b7291 | ||
| 
						 | 
					1457b80617 | ||
| 
						 | 
					dba40b35f2 | ||
| 
						 | 
					e9d95f1a25 | ||
| 
						 | 
					67e40a2b16 | ||
| 
						 | 
					25f5f14d35 | ||
| 
						 | 
					dfda9cc007 | ||
| 
						 | 
					e39b29fc48 | ||
| 
						 | 
					4c17ba4fc0 | ||
| 
						 | 
					4511f7ac50 | ||
| 
						 | 
					b9f76f11bb | ||
| 
						 | 
					17841a20e3 | ||
| 
						 | 
					d90d40b5d1 | ||
| 
						 | 
					d2e6a0583a | ||
| 
						 | 
					b2c9277e66 | ||
| 
						 | 
					31c332af93 | ||
| 
						 | 
					90af60a6ef | ||
| 
						 | 
					80c7566203 | ||
| 
						 | 
					efb1fdbec8 | ||
| 
						 | 
					bada8cc259 | ||
| 
						 | 
					c3a076176e | ||
| 
						 | 
					2cda3070d5 | ||
| 
						 | 
					728bed8c98 | ||
| 
						 | 
					6e72ea7442 | ||
| 
						 | 
					a4aac27fd3 | ||
| 
						 | 
					5b8816dcb7 | ||
| 
						 | 
					fc0df97278 | ||
| 
						 | 
					592658e874 | ||
| 
						 | 
					5a70e42428 | ||
| 
						 | 
					e4caa98901 | ||
| 
						 | 
					c211a7c685 | ||
| 
						 | 
					7876c078bc | ||
| 
						 | 
					aedadfc779 | ||
| 
						 | 
					2046a6b9e5 | ||
| 
						 | 
					d1d53b2bbf | ||
| 
						 | 
					950aa1c743 | ||
| 
						 | 
					a9572bf88a | ||
| 
						 | 
					5a93f50394 | ||
| 
						 | 
					60af1cbcc2 | ||
| 
						 | 
					8952ef933b | ||
| 
						 | 
					b350d5da59 | ||
| 
						 | 
					6df3bf3644 | ||
| 
						 | 
					35840a2c5c | ||
| 
						 | 
					090b89cc76 | ||
| 
						 | 
					f05d47ddd6 | ||
| 
						 | 
					fcfd4bef2d | ||
| 
						 | 
					18dc8fbc26 | ||
| 
						 | 
					d9ceee1c75 | ||
| 
						 | 
					097281f459 | ||
| 
						 | 
					087748c48e | ||
| 
						 | 
					e35187741b | ||
| 
						 | 
					574e911375 | ||
| 
						 | 
					ce945bd2f0 | ||
| 
						 | 
					8efa6f407d | ||
| 
						 | 
					85bd4621db | ||
| 
						 | 
					6c3759d78d | ||
| 
						 | 
					4af08a19f8 | ||
| 
						 | 
					c14650caec | ||
| 
						 | 
					c7a9e07909 | ||
| 
						 | 
					185baf036b | ||
| 
						 | 
					3523613826 | ||
| 
						 | 
					782ade7223 | ||
| 
						 | 
					ba40eccc90 | ||
| 
						 | 
					4191741fb6 | ||
| 
						 | 
					7a52f44bd4 | ||
| 
						 | 
					efa5485744 | ||
| 
						 | 
					c81ac51e5c | ||
| 
						 | 
					fd17cf2e3c | ||
| 
						 | 
					d4b0999415 | ||
| 
						 | 
					03f8ec89db | ||
| 
						 | 
					f633ab688b | ||
| 
						 | 
					808621ab22 | ||
| 
						 | 
					6ed5feda2b | ||
| 
						 | 
					964066c0de | ||
| 
						 | 
					a913e93667 | ||
| 
						 | 
					a7b99fc463 | ||
| 
						 | 
					6f252f4704 | ||
| 
						 | 
					b596c34bed | ||
| 
						 | 
					b0cd96478c | ||
| 
						 | 
					387ec712e6 | ||
| 
						 | 
					f2a99d7d74 | ||
| 
						 | 
					8b6b15dccc | ||
| 
						 | 
					bbb72b7b6b | ||
| 
						 | 
					785bad388b | ||
| 
						 | 
					cf10df6c68 | ||
| 
						 | 
					5b55dcbfbb | ||
| 
						 | 
					e7dbbd16a5 | ||
| 
						 | 
					62f0457961 | ||
| 
						 | 
					8879b57b73 | ||
| 
						 | 
					e49a6feabb | ||
| 
						 | 
					feb2dd2835 | ||
| 
						 | 
					5e34f3dc01 | ||
| 
						 | 
					0031d76f2a | ||
| 
						 | 
					00ee738fdd | ||
| 
						 | 
					8d0a823124 | ||
| 
						 | 
					9729df1756 | ||
| 
						 | 
					cdb419d65e | ||
| 
						 | 
					d6f9a41539 | ||
| 
						 | 
					1daa258b8a | ||
| 
						 | 
					560c257bd0 | ||
| 
						 | 
					d7aae417b1 | ||
| 
						 | 
					c39858aac0 | ||
| 
						 | 
					818aed35e2 | ||
| 
						 | 
					2ed524f07e | ||
| 
						 | 
					5f1eefd03f | ||
| 
						 | 
					522b4d7576 | ||
| 
						 | 
					d6dcb08407 | ||
| 
						 | 
					806c756a2d | ||
| 
						 | 
					2494701347 | ||
| 
						 | 
					1c10272e15 | ||
| 
						 | 
					0badcf381a | ||
| 
						 | 
					35558e6bd7 | ||
| 
						 | 
					7659747e6f | ||
| 
						 | 
					53189fb2d7 | ||
| 
						 | 
					450c178d77 | ||
| 
						 | 
					a20eb6df1b | ||
| 
						 | 
					d73425061a | ||
| 
						 | 
					0051d5ac88 | ||
| 
						 | 
					76920413d9 | ||
| 
						 | 
					44d9a8ba4e | ||
| 
						 | 
					38dc548a87 | ||
| 
						 | 
					dca6386234 | ||
| 
						 | 
					2a701a1aac | ||
| 
						 | 
					0cb297abc9 | ||
| 
						 | 
					821a23535b | ||
| 
						 | 
					bc80599178 | ||
| 
						 | 
					941374b573 | ||
| 
						 | 
					1886893d66 | ||
| 
						 | 
					7291772b1f | ||
| 
						 | 
					8e28721057 | ||
| 
						 | 
					8d2120566e | ||
| 
						 | 
					67341c4cbe | ||
| 
						 | 
					f8188ddfee | ||
| 
						 | 
					29c546b426 | ||
| 
						 | 
					0d259b898b | ||
| 
						 | 
					c136b80af5 | ||
| 
						 | 
					83b87d53c1 | ||
| 
						 | 
					1e99f1ee41 | ||
| 
						 | 
					d7fe136d54 | ||
| 
						 | 
					cd7a0f829f | ||
| 
						 | 
					cf3f1ef284 | ||
| 
						 | 
					a737864a1c | ||
| 
						 | 
					c68a6805b3 | ||
| 
						 | 
					bd3d5a17b4 | ||
| 
						 | 
					d4b577114b | ||
| 
						 | 
					713effb6e4 | ||
| 
						 | 
					b92e2ab6b1 | ||
| 
						 | 
					05baf94b43 | ||
| 
						 | 
					a76288b99a | ||
| 
						 | 
					557e95c0a3 | ||
| 
						 | 
					0a83fa90bb | ||
| 
						 | 
					daeb143177 | ||
| 
						 | 
					9f752120c0 | ||
| 
						 | 
					80a1e972fc | ||
| 
						 | 
					5e65d48ffa | ||
| 
						 | 
					752ef08141 | ||
| 
						 | 
					070e0e8b0a | ||
| 
						 | 
					2ed0728cef | ||
| 
						 | 
					a79b9e9d4a | ||
| 
						 | 
					24572daccc | ||
| 
						 | 
					1770563fff | ||
| 
						 | 
					4cd96483f6 | ||
| 
						 | 
					8f1783b8a7 | ||
| 
						 | 
					be72eaa327 | ||
| 
						 | 
					61bded1d82 | ||
| 
						 | 
					4b3937373a | ||
| 
						 | 
					08bf0907d4 | ||
| 
						 | 
					eb044f8787 | ||
| 
						 | 
					8d0c77403c | ||
| 
						 | 
					601062455c | ||
| 
						 | 
					5be788ba36 | ||
| 
						 | 
					281559b31b | ||
| 
						 | 
					ef1aa4e5e9 | ||
| 
						 | 
					7b7ac04895 | ||
| 
						 | 
					60f5b2b275 | ||
| 
						 | 
					c0f9d7fdb7 | ||
| 
						 | 
					fc4d6f73a6 | ||
| 
						 | 
					295169f9d9 | ||
| 
						 | 
					1a3797a699 | ||
| 
						 | 
					977e106924 | ||
| 
						 | 
					8d76d4016d | ||
| 
						 | 
					9f92657f76 | ||
| 
						 | 
					9f341f9ce5 | ||
| 
						 | 
					2098871509 | ||
| 
						 | 
					3d00c86f4c | ||
| 
						 | 
					90037b85d1 | ||
| 
						 | 
					6ec145d4b4 | ||
| 
						 | 
					40a58c392f | ||
| 
						 | 
					9733cd59bb | ||
| 
						 | 
					b3caf7bfa8 | ||
| 
						 | 
					23fbb89805 | ||
| 
						 | 
					bd1adaf7ea | ||
| 
						 | 
					0c9e23fc0c | ||
| 
						 | 
					f091ce64ac | ||
| 
						 | 
					55a69ebea6 | ||
| 
						 | 
					d6b3850562 | ||
| 
						 | 
					80197cf493 | ||
| 
						 | 
					8ee564c216 | ||
| 
						 | 
					5bfeb60a83 | ||
| 
						 | 
					1ab4a2f870 | ||
| 
						 | 
					2a627059ac | ||
| 
						 | 
					3f739acf24 | ||
| 
						 | 
					d3454ceb94 | ||
| 
						 | 
					59695c05b1 | ||
| 
						 | 
					f0969c9692 | ||
| 
						 | 
					18dd8154e2 | ||
| 
						 | 
					4c58797607 | ||
| 
						 | 
					d620f1e529 | ||
| 
						 | 
					e0b436f8e1 | ||
| 
						 | 
					e99d1e97de | ||
| 
						 | 
					1fb74b4fa2 | ||
| 
						 | 
					473f6ea9f0 | ||
| 
						 | 
					0b04c52119 | ||
| 
						 | 
					8383945acc | ||
| 
						 | 
					fce9d51122 | ||
| 
						 | 
					7c3ee84295 | ||
| 
						 | 
					a8db25f48b | ||
| 
						 | 
					20705ca311 | ||
| 
						 | 
					af33c6b549 | ||
| 
						 | 
					2b8775dff7 | ||
| 
						 | 
					ea81dd9e2e | ||
| 
						 | 
					7dcb102733 | ||
| 
						 | 
					aa0e32060e | ||
| 
						 | 
					2e8f37aca5 | ||
| 
						 | 
					195d769c4b | ||
| 
						 | 
					70f08b5baa | ||
| 
						 | 
					9e987ac6a2 | ||
| 
						 | 
					de03f172ad | ||
| 
						 | 
					0078944486 | ||
| 
						 | 
					d3f796ac59 | ||
| 
						 | 
					3d38080d54 | ||
| 
						 | 
					fe07962f9c | ||
| 
						 | 
					938a72b2db | ||
| 
						 | 
					a8827b1ed6 | ||
| 
						 | 
					ff40cd71ac | ||
| 
						 | 
					39626d8cfd | ||
| 
						 | 
					67ad29e716 | ||
| 
						 | 
					8bbf9b13af | ||
| 
						 | 
					cb21851c74 | ||
| 
						 | 
					8d611bec6e | ||
| 
						 | 
					1de1dc7314 | ||
| 
						 | 
					aca79af7de | ||
| 
						 | 
					da6eea9b38 | ||
| 
						 | 
					dcf7310b2d | ||
| 
						 | 
					c2e8ba0fba | ||
| 
						 | 
					a5360255ba | ||
| 
						 | 
					5690a2b493 | ||
| 
						 | 
					ff0429a802 | ||
| 
						 | 
					46cdc83b81 | ||
| 
						 | 
					76dfef7117 | ||
| 
						 | 
					de2aeb9fc2 | ||
| 
						 | 
					17a5b44205 | ||
| 
						 | 
					f99e347878 | ||
| 
						 | 
					f5a0c17322 | ||
| 
						 | 
					8442c3942d | ||
| 
						 | 
					15cd35f67f | ||
| 
						 | 
					459801d6e0 | ||
| 
						 | 
					2c43d64302 | ||
| 
						 | 
					fd802db39f | ||
| 
						 | 
					765754d39d | ||
| 
						 | 
					f7f6b288eb | ||
| 
						 | 
					11ee9540bf | ||
| 
						 | 
					f6319bd706 | ||
| 
						 | 
					0912015a5c | ||
| 
						 | 
					4e7575fc7a | ||
| 
						 | 
					6531a6116d | ||
| 
						 | 
					9a33561e80 | ||
| 
						 | 
					88229a0f2a | ||
| 
						 | 
					120394cc45 | ||
| 
						 | 
					1adfe0fe18 | ||
| 
						 | 
					d57c178a62 | ||
| 
						 | 
					6faa83bc6a | ||
| 
						 | 
					9fb4e019fa | ||
| 
						 | 
					74551597b1 | ||
| 
						 | 
					37c269d0ba | ||
| 
						 | 
					5d8b526b80 | ||
| 
						 | 
					83dcc3e061 | ||
| 
						 | 
					4ed58463f7 | ||
| 
						 | 
					85b2056dc7 | ||
| 
						 | 
					94ca911dc1 | ||
| 
						 | 
					24420c2191 | ||
| 
						 | 
					59f904d8de | ||
| 
						 | 
					755f98e768 | ||
| 
						 | 
					aadc797225 | ||
| 
						 | 
					5c882bdfa3 | ||
| 
						 | 
					60f9450594 | ||
| 
						 | 
					ff52ba7f7b | ||
| 
						 | 
					0fbcea45d6 | ||
| 
						 | 
					ca6d430561 | ||
| 
						 | 
					91601b3bf4 | ||
| 
						 | 
					cdd70596df | ||
| 
						 | 
					7e186f9a63 | ||
| 
						 | 
					a94e117ede | ||
| 
						 | 
					662cb30372 | ||
| 
						 | 
					bd3aba5d6a | ||
| 
						 | 
					29ed6d24bf | ||
| 
						 | 
					e2c5c20896 | ||
| 
						 | 
					7c4b6cb0d9 | ||
| 
						 | 
					aced2904ff | ||
| 
						 | 
					17eb1fca7c | ||
| 
						 | 
					2511d1193a | ||
| 
						 | 
					e9056f5f95 | ||
| 
						 | 
					a9893ca79a | ||
| 
						 | 
					f39f7c28f0 | ||
| 
						 | 
					a807065ccc | ||
| 
						 | 
					67532e916c | ||
| 
						 | 
					3920b4dae8 | ||
| 
						 | 
					d70a335dce | ||
| 
						 | 
					8001921112 | ||
| 
						 | 
					d7cb09bd18 | ||
| 
						 | 
					e11710714c | ||
| 
						 | 
					5b0bfc298f | ||
| 
						 | 
					0383f7f19d | ||
| 
						 | 
					23a43c6e0f | ||
| 
						 | 
					eb946690d2 | ||
| 
						 | 
					c090fdbdf1 | ||
| 
						 | 
					de279099e5 | ||
| 
						 | 
					6bd8db3c99 | ||
| 
						 | 
					6176f14141 | ||
| 
						 | 
					512e54ff85 | ||
| 
						 | 
					a5aa569fe3 | ||
| 
						 | 
					e2e593a036 | ||
| 
						 | 
					9ce0a7b49d | ||
| 
						 | 
					4ab0d74250 | ||
| 
						 | 
					b5f85ba77d | ||
| 
						 | 
					b6ee33c6e1 | ||
| 
						 | 
					1c69b15c7c | ||
| 
						 | 
					54cd2bee58 | ||
| 
						 | 
					5bf02b16a0 | ||
| 
						 | 
					594cb8507b | ||
| 
						 | 
					78aba6e4cd | ||
| 
						 | 
					ccdcdb2a46 | ||
| 
						 | 
					b121e41ec3 | ||
| 
						 | 
					05d8e56ffd | ||
| 
						 | 
					4345c7a712 | ||
| 
						 | 
					12d5e33dc9 | ||
| 
						 | 
					6d70a82757 | ||
| 
						 | 
					47d52d4eca | ||
| 
						 | 
					4973b0f88a | ||
| 
						 | 
					d1542bf549 | ||
| 
						 | 
					2b7727aad1 | ||
| 
						 | 
					fd775454ca | ||
| 
						 | 
					8e09a389c4 | ||
| 
						 | 
					aa3ae01878 | ||
| 
						 | 
					c123676825 | ||
| 
						 | 
					d60c22572b | ||
| 
						 | 
					1d7ce36791 | ||
| 
						 | 
					34e8baab9a | ||
| 
						 | 
					a219d774fe | ||
| 
						 | 
					005042e973 | ||
| 
						 | 
					d301d69fbf | ||
| 
						 | 
					34af02caca | ||
| 
						 | 
					91025d1dd6 | ||
| 
						 | 
					c9bab31a7f | ||
| 
						 | 
					2f60e91a9b | ||
| 
						 | 
					018affe6d0 | ||
| 
						 | 
					aeb27ccfdb | ||
| 
						 | 
					939866faab | ||
| 
						 | 
					98f968f2ee | ||
| 
						 | 
					864f1a3366 | ||
| 
						 | 
					f42b10242f | ||
| 
						 | 
					853134017d | ||
| 
						 | 
					d3999e06d1 | ||
| 
						 | 
					0b0b37cffe | ||
| 
						 | 
					a13f5888d5 | ||
| 
						 | 
					c8807438ce | ||
| 
						 | 
					3f106afd00 | ||
| 
						 | 
					d925057e11 | ||
| 
						 | 
					bbafb2eb27 | ||
| 
						 | 
					434bc13812 | ||
| 
						 | 
					5c592f7dd9 | ||
| 
						 | 
					9bf1ba2f7e | ||
| 
						 | 
					724e4a3585 | ||
| 
						 | 
					f69711fc78 | ||
| 
						 | 
					04e2520dbb | ||
| 
						 | 
					7a35fb5403 | ||
| 
						 | 
					63f97b38eb | ||
| 
						 | 
					b8541929c8 | ||
| 
						 | 
					329f17ac7c | ||
| 
						 | 
					5dcab07c54 | ||
| 
						 | 
					1f798affb9 | ||
| 
						 | 
					a2ecdf4249 | ||
| 
						 | 
					71fdc063bd | ||
| 
						 | 
					887d78a9ad | ||
| 
						 | 
					00557a5475 | ||
| 
						 | 
					e18d27b78a | ||
| 
						 | 
					228fea4628 | ||
| 
						 | 
					e64dacb40e | ||
| 
						 | 
					fff01f24bf | ||
| 
						 | 
					e55dee3807 | ||
| 
						 | 
					8c2ce33c0b | ||
| 
						 | 
					135394f511 | ||
| 
						 | 
					fe065dc851 | ||
| 
						 | 
					445c7791a7 | ||
| 
						 | 
					686ba84128 | ||
| 
						 | 
					3394c01826 | ||
| 
						 | 
					d67ea8c7ad | ||
| 
						 | 
					535046430a | ||
| 
						 | 
					9aebdff219 | ||
| 
						 | 
					90da930131 | ||
| 
						 | 
					fbdc1b1e3d | ||
| 
						 | 
					e942df755b | ||
| 
						 | 
					91c8be3628 | ||
| 
						 | 
					d56c03840b | ||
| 
						 | 
					d3d5cdf305 | ||
| 
						 | 
					af43ce73e5 | ||
| 
						 | 
					84b52e92f4 | ||
| 
						 | 
					0aa7d11cc9 | ||
| 
						 | 
					933f7cecae | ||
| 
						 | 
					8e73e55336 | ||
| 
						 | 
					55c015c136 | ||
| 
						 | 
					bde6c6685e | ||
| 
						 | 
					58387b91f9 | ||
| 
						 | 
					6f74820cfc | ||
| 
						 | 
					af72f198ba | ||
| 
						 | 
					3fc831f9eb | ||
| 
						 | 
					9f660862ec | ||
| 
						 | 
					1354671c90 | ||
| 
						 | 
					1175a226e3 | ||
| 
						 | 
					358b72bb12 | ||
| 
						 | 
					6c408c885a | ||
| 
						 | 
					9cf04dff6a | ||
| 
						 | 
					6bdcfecbcf | ||
| 
						 | 
					3f21fe60fc | ||
| 
						 | 
					b2c290e40e | ||
| 
						 | 
					bc5b2fa12c | ||
| 
						 | 
					32a9554c92 | ||
| 
						 | 
					afc1ed60f7 | ||
| 
						 | 
					91018f4f24 | ||
| 
						 | 
					fb086b57a8 | ||
| 
						 | 
					3fc39a6efb | ||
| 
						 | 
					6062ac7c37 | ||
| 
						 | 
					caf7854a3c | ||
| 
						 | 
					6def0892ea | ||
| 
						 | 
					1c0744bde6 | ||
| 
						 | 
					7591e07b7c | ||
| 
						 | 
					35ab93f484 | ||
| 
						 | 
					dcf5e52b62 | ||
| 
						 | 
					aae521d086 | ||
| 
						 | 
					78e6508e22 | ||
| 
						 | 
					4d9517f0b4 | ||
| 
						 | 
					a331aa0221 | ||
| 
						 | 
					679cabb532 | ||
| 
						 | 
					7332350e85 | ||
| 
						 | 
					69f4dda74a | ||
| 
						 | 
					c19c3bd15a | ||
| 
						 | 
					76ff92b811 | ||
| 
						 | 
					4250637e7d | ||
| 
						 | 
					08d1da106e | ||
| 
						 | 
					9e31a0536e | ||
| 
						 | 
					2960d37d71 | ||
| 
						 | 
					c63af5fc01 | ||
| 
						 | 
					fc6eff13b5 | ||
| 
						 | 
					e7ee1ccf45 | ||
| 
						 | 
					98bf69f8f1 | ||
| 
						 | 
					0363fbc411 | ||
| 
						 | 
					e3bc92ae53 | ||
| 
						 | 
					27e76021e9 | ||
| 
						 | 
					93dde29979 | ||
| 
						 | 
					d42dcd60cd | ||
| 
						 | 
					ade89799f5 | ||
| 
						 | 
					6e118ce50f | ||
| 
						 | 
					34be9df773 | ||
| 
						 | 
					7356a67780 | ||
| 
						 | 
					f77949ef3b | ||
| 
						 | 
					26b8b3fc53 | ||
| 
						 | 
					38cc79a54f | ||
| 
						 | 
					ec113aefb9 | ||
| 
						 | 
					913e1570bd | ||
| 
						 | 
					e2aaf22d5d | ||
| 
						 | 
					3304589043 | ||
| 
						 | 
					0247642bb6 | ||
| 
						 | 
					19f5aa165c | ||
| 
						 | 
					1756499b11 | ||
| 
						 | 
					15f9a93c25 | ||
| 
						 | 
					e99287734b | ||
| 
						 | 
					8349dde0f1 | ||
| 
						 | 
					59907ebc0e | ||
| 
						 | 
					da91d6ac66 | ||
| 
						 | 
					7548115a0e | ||
| 
						 | 
					8ca37dd1c7 | ||
| 
						 | 
					31e9e4bb76 | ||
| 
						 | 
					84a322ab23 | ||
| 
						 | 
					707f217b2d | ||
| 
						 | 
					e6b45a66ec | ||
| 
						 | 
					b34c40dcf5 | ||
| 
						 | 
					699ebe2f0b | ||
| 
						 | 
					e1c6f216c2 | ||
| 
						 | 
					630b73bfa8 | ||
| 
						 | 
					877f16e5a5 | ||
| 
						 | 
					fbe1fa9dcc | ||
| 
						 | 
					5b65cc55a2 | ||
| 
						 | 
					97769737d0 | ||
| 
						 | 
					5b0a5c4050 | ||
| 
						 | 
					4b9f8e766d | ||
| 
						 | 
					96002646f1 | ||
| 
						 | 
					5ef6904ec3 | ||
| 
						 | 
					2f53da5e7a | ||
| 
						 | 
					58f1cc0b5f | ||
| 
						 | 
					98c70b73f2 | ||
| 
						 | 
					6bd02a3ab5 | ||
| 
						 | 
					372e7a6cd4 | ||
| 
						 | 
					211004bb0d | ||
| 
						 | 
					80d2fff1a1 | ||
| 
						 | 
					cf3cf413c8 | ||
| 
						 | 
					e218811ca3 | ||
| 
						 | 
					a9f2274bd8 | ||
| 
						 | 
					92179ff990 | ||
| 
						 | 
					4aac210a83 | ||
| 
						 | 
					245e3122df | ||
| 
						 | 
					ffc5fa3a2b | ||
| 
						 | 
					f5042cce34 | ||
| 
						 | 
					712c67b4ae | ||
| 
						 | 
					5dcfb8ad66 | ||
| 
						 | 
					673ff5eb2c | ||
| 
						 | 
					92fc3f07ba | ||
| 
						 | 
					cff90cf3f9 | ||
| 
						 | 
					a33c53a36b | ||
| 
						 | 
					2370d4fa02 | ||
| 
						 | 
					f128d904a5 | ||
| 
						 | 
					fb1039f2ab | ||
| 
						 | 
					923ce98e42 | ||
| 
						 | 
					8e935b58a2 | ||
| 
						 | 
					c93e972543 | ||
| 
						 | 
					1cb66f5262 | ||
| 
						 | 
					648e82f05d | ||
| 
						 | 
					1dbe60b8b7 | ||
| 
						 | 
					9631fa7407 | ||
| 
						 | 
					9befc682ee | ||
| 
						 | 
					fbeb674479 | ||
| 
						 | 
					af641d20a7 | ||
| 
						 | 
					d02587750c | ||
| 
						 | 
					241a4b3d45 | ||
| 
						 | 
					496e81a25a | ||
| 
						 | 
					f39b081253 | ||
| 
						 | 
					c96f7f13da | ||
| 
						 | 
					1bdc4b2006 | ||
| 
						 | 
					3915fecf80 | ||
| 
						 | 
					f94f06825c | ||
| 
						 | 
					2ddbf8975a | ||
| 
						 | 
					68a3cbe384 | ||
| 
						 | 
					b9432d1296 | ||
| 
						 | 
					e202a29a9a | ||
| 
						 | 
					3755bffcc2 | ||
| 
						 | 
					2a0a305300 | ||
| 
						 | 
					70e2aadc18 | ||
| 
						 | 
					a1c8aaf666 | ||
| 
						 | 
					8ee470aaeb | ||
| 
						 | 
					37e4858cd0 | ||
| 
						 | 
					a27072bebb | ||
| 
						 | 
					47059f45fe | ||
| 
						 | 
					daced8041d | ||
| 
						 | 
					b053ae6a65 | ||
| 
						 | 
					42f60ecb36 | ||
| 
						 | 
					550862f41a | ||
| 
						 | 
					6838f74fe0 | ||
| 
						 | 
					2ff30d067c | ||
| 
						 | 
					84406b3e2c | ||
| 
						 | 
					c323969bdd | ||
| 
						 | 
					43cbbdbea0 | ||
| 
						 | 
					1d3f76df71 | ||
| 
						 | 
					33cb93ad0b | ||
| 
						 | 
					4dc9179f4b | ||
| 
						 | 
					26a5ec9aa0 | ||
| 
						 | 
					883ea3113c | ||
| 
						 | 
					62b7c08bb3 | ||
| 
						 | 
					a85fa66cc8 | ||
| 
						 | 
					9ba010c629 | ||
| 
						 | 
					3ef3f2b6f0 | ||
| 
						 | 
					1401d909e8 | ||
| 
						 | 
					3233322622 | ||
| 
						 | 
					e373f1fd73 | ||
| 
						 | 
					dc25cd6f3a | ||
| 
						 | 
					0e31d41d4e | ||
| 
						 | 
					b7a7600465 | ||
| 
						 | 
					111a2f3057 | ||
| 
						 | 
					760cecac8d | ||
| 
						 | 
					6f8b4395ec | ||
| 
						 | 
					5506f8767c | ||
| 
						 | 
					5887945828 | ||
| 
						 | 
					25e98179be | ||
| 
						 | 
					78ebe3fa5a | ||
| 
						 | 
					a8e8e51b14 | ||
| 
						 | 
					f97d194934 | ||
| 
						 | 
					4661cc7403 | ||
| 
						 | 
					bc11929395 | ||
| 
						 | 
					caf37bc92e | ||
| 
						 | 
					5de447b0cb | ||
| 
						 | 
					5dbaced4a2 | ||
| 
						 | 
					43f8a1f5de | ||
| 
						 | 
					f57efa1899 | ||
| 
						 | 
					592522ceaf | ||
| 
						 | 
					4f84e6d9e2 | ||
| 
						 | 
					6f08903f07 | ||
| 
						 | 
					220cd010bd | ||
| 
						 | 
					68e8a0f0d9 | ||
| 
						 | 
					b23dbf9f34 | ||
| 
						 | 
					1d0b5b507a | ||
| 
						 | 
					b83d8104cd | ||
| 
						 | 
					bf6e1053cf | ||
| 
						 | 
					c3dd928e29 | ||
| 
						 | 
					aba6c2b89d | ||
| 
						 | 
					9c0a386246 | ||
| 
						 | 
					bba3bb7556 | ||
| 
						 | 
					c1422864b5 | ||
| 
						 | 
					31a693b99a | ||
| 
						 | 
					804534fbc9 | ||
| 
						 | 
					1bc6532c16 | ||
| 
						 | 
					b48bf7470d | ||
| 
						 | 
					1ca9ce5ef4 | ||
| 
						 | 
					789f2ecbe7 | ||
| 
						 | 
					ee7d1d0701 | ||
| 
						 | 
					4e3aa250c4 | ||
| 
						 | 
					3647a6ddcd | ||
| 
						 | 
					79aaa85a51 | ||
| 
						 | 
					392a543eff | ||
| 
						 | 
					eb6345de60 | ||
| 
						 | 
					0fd3b7a00a | ||
| 
						 | 
					bd51b80fa5 | ||
| 
						 | 
					15c900839b | ||
| 
						 | 
					2fd463e979 | ||
| 
						 | 
					de8660a96a | ||
| 
						 | 
					1e9cb272f1 | ||
| 
						 | 
					72b1144b8c | ||
| 
						 | 
					348fe0e210 | ||
| 
						 | 
					cf1f46e1ca | ||
| 
						 | 
					f052cbee19 | ||
| 
						 | 
					1f5e8670e1 | ||
| 
						 | 
					3b491d0f73 | ||
| 
						 | 
					26a2b8d26d | ||
| 
						 | 
					a7fd6f9007 | ||
| 
						 | 
					8ed44e8dfb | ||
| 
						 | 
					f617c1131a | ||
| 
						 | 
					5ca47f19d7 | ||
| 
						 | 
					9044fcbb5f | ||
| 
						 | 
					7a82810b59 | ||
| 
						 | 
					0ccdf3d0e6 | ||
| 
						 | 
					ca7f0852df | ||
| 
						 | 
					780b962336 | ||
| 
						 | 
					bbeb840916 | ||
| 
						 | 
					f4ec465bfc | ||
| 
						 | 
					57c86a953d | ||
| 
						 | 
					0fff8656e9 | ||
| 
						 | 
					7b929636ee | ||
| 
						 | 
					76835a2e00 | ||
| 
						 | 
					1b171b02ac | ||
| 
						 | 
					a8dc362572 | ||
| 
						 | 
					7c72f8ee6c | ||
| 
						 | 
					c39a54609b | ||
| 
						 | 
					ce6b767b47 | ||
| 
						 | 
					7ba4d3464f | ||
| 
						 | 
					03def138fe | ||
| 
						 | 
					9d99af5329 | ||
| 
						 | 
					c8d850dbad | ||
| 
						 | 
					01ea357744 | ||
| 
						 | 
					ad9e83a90f | ||
| 
						 | 
					6c9d96e811 | ||
| 
						 | 
					f840e5192c | ||
| 
						 | 
					ba9272dd05 | ||
| 
						 | 
					675db3a211 | ||
| 
						 | 
					1fc7ff878e | ||
| 
						 | 
					b643d148b1 | ||
| 
						 | 
					5804c995e1 | ||
| 
						 | 
					13a6f85320 | ||
| 
						 | 
					8b4582f111 | ||
| 
						 | 
					cd3bf7c56f | ||
| 
						 | 
					ee1595dcd5 | ||
| 
						 | 
					310086deed | ||
| 
						 | 
					5d27f50f2f | ||
| 
						 | 
					9d0330d5bd | ||
| 
						 | 
					d5074f74bb | ||
| 
						 | 
					ea0cf7c87b | ||
| 
						 | 
					a56164c8e0 | ||
| 
						 | 
					cd95bb22ea | ||
| 
						 | 
					1745ecd8ac | ||
| 
						 | 
					75d66b9c62 | ||
| 
						 | 
					2ff9f55001 | ||
| 
						 | 
					ce446dbdc2 | ||
| 
						 | 
					dd2add82ee | ||
| 
						 | 
					40d9855df2 | ||
| 
						 | 
					ecf7adba15 | ||
| 
						 | 
					931c847e2b | ||
| 
						 | 
					8230d9bff8 | ||
| 
						 | 
					64cc14e9e6 | ||
| 
						 | 
					d5b8971ff3 | ||
| 
						 | 
					7ea837a18c | ||
| 
						 | 
					b8b8473b6d | ||
| 
						 | 
					894dbae455 | ||
| 
						 | 
					2c11425868 | ||
| 
						 | 
					a2ea0abf7f | ||
| 
						 | 
					be8f8e66a4 | ||
| 
						 | 
					9fadfffb9d | ||
| 
						 | 
					76f23acfa1 | ||
| 
						 | 
					6950aeafcc | ||
| 
						 | 
					cd160a66c9 | ||
| 
						 | 
					a7376968d2 | ||
| 
						 | 
					fd96a2af34 | ||
| 
						 | 
					a90cd1a45c | ||
| 
						 | 
					8e92600ddd | ||
| 
						 | 
					5e75c310ba | ||
| 
						 | 
					20cab07c29 | ||
| 
						 | 
					f466d7a6f1 | ||
| 
						 | 
					dc46f535ae | ||
| 
						 | 
					27fd5d6d6a | ||
| 
						 | 
					18a3c3302f | ||
| 
						 | 
					97959a00d7 | ||
| 
						 | 
					5e92b2906b | ||
| 
						 | 
					126ed14313 | ||
| 
						 | 
					712d0374f7 | ||
| 
						 | 
					4b49b2e3cf | ||
| 
						 | 
					d85c21994f | ||
| 
						 | 
					6b33a5f954 | ||
| 
						 | 
					ed22afe5fb | ||
| 
						 | 
					843391c745 | ||
| 
						 | 
					ad6699e0c4 | ||
| 
						 | 
					43137cf595 | ||
| 
						 | 
					db6dc49b0b | ||
| 
						 | 
					593170d1de | ||
| 
						 | 
					0eace2fefe | ||
| 
						 | 
					abd65e21c6 | ||
| 
						 | 
					e21104a865 | ||
| 
						 | 
					3ecf63fa66 | ||
| 
						 | 
					762dcf0780 | ||
| 
						 | 
					75ee9b5333 | ||
| 
						 | 
					e161bdc5be | ||
| 
						 | 
					bb3d6e8552 | ||
| 
						 | 
					189c2f4989 | ||
| 
						 | 
					f28389c87b | ||
| 
						 | 
					7461592a16 | ||
| 
						 | 
					50b0e72f7b | ||
| 
						 | 
					76e73cfec8 | ||
| 
						 | 
					5d8ec172a6 | ||
| 
						 | 
					0953140b53 | ||
| 
						 | 
					6c2825997a | ||
| 
						 | 
					accc6eb91a | ||
| 
						 | 
					eab8cdc640 | ||
| 
						 | 
					dc9d0f256d | ||
| 
						 | 
					b60d6404d8 | ||
| 
						 | 
					08fe4b3210 | ||
| 
						 | 
					0e60a118d0 | ||
| 
						 | 
					4b78b4124e | ||
| 
						 | 
					0d6d9af7ab | ||
| 
						 | 
					41cd36b830 | ||
| 
						 | 
					242be55771 | ||
| 
						 | 
					7cf47ea5b5 | ||
| 
						 | 
					6fb0012833 | ||
| 
						 | 
					9d1ce9c0df | ||
| 
						 | 
					5947e4e9fd | ||
| 
						 | 
					e992aa6a54 | ||
| 
						 | 
					2cf218610e | ||
| 
						 | 
					fe6f0aeb26 | ||
| 
						 | 
					bd04c6fb67 | ||
| 
						 | 
					c5637baa06 | ||
| 
						 | 
					f8426a2c44 | ||
| 
						 | 
					0c791d1e76 | ||
| 
						 | 
					c4a89d29f6 | ||
| 
						 | 
					306ff5649a | ||
| 
						 | 
					1c652dfc5d | ||
| 
						 | 
					1f61e7f8f4 | ||
| 
						 | 
					1a5f190e47 | ||
| 
						 | 
					570033448c | ||
| 
						 | 
					f44b655513 | ||
| 
						 | 
					0aa720fa26 | ||
| 
						 | 
					d44f3f84f8 | ||
| 
						 | 
					d426db3d27 | ||
| 
						 | 
					0fd88d7c8f | ||
| 
						 | 
					4e84ac4db8 | ||
| 
						 | 
					da5c8a121f | ||
| 
						 | 
					76c36688d0 | ||
| 
						 | 
					651c8d3bc4 | ||
| 
						 | 
					a8a946d71d | ||
| 
						 | 
					c5c005609e | ||
| 
						 | 
					97886f9353 | ||
| 
						 | 
					a784bd0797 | ||
| 
						 | 
					4aacf65678 | ||
| 
						 | 
					dd1ba7633e | ||
| 
						 | 
					a4ea5a4054 | ||
| 
						 | 
					69060b1382 | ||
| 
						 | 
					a6562ea77d | ||
| 
						 | 
					ad3563096a | ||
| 
						 | 
					c5f02c1986 | ||
| 
						 | 
					7ef5d20cad | ||
| 
						 | 
					98b619c3a7 | ||
| 
						 | 
					5b75919f95 | ||
| 
						 | 
					20b76e09e3 | ||
| 
						 | 
					67fca4cb01 | ||
| 
						 | 
					606715b2cd | ||
| 
						 | 
					ce04b35032 | ||
| 
						 | 
					ec7f244ee9 | ||
| 
						 | 
					a5b206f398 | ||
| 
						 | 
					306a05f9ff | ||
| 
						 | 
					81f8350616 | ||
| 
						 | 
					760ca6adc4 | ||
| 
						 | 
					ffb35ff5c3 | ||
| 
						 | 
					8eda06131b | ||
| 
						 | 
					5b55f9ecb3 | ||
| 
						 | 
					3417e0b0fc | ||
| 
						 | 
					79ed144b0f | ||
| 
						 | 
					8e5cf6589c | ||
| 
						 | 
					fc67cca882 | ||
| 
						 | 
					eea2287068 | ||
| 
						 | 
					5fe5de7511 | ||
| 
						 | 
					4a6b9972dd | ||
| 
						 | 
					256a16a8a3 | ||
| 
						 | 
					30e0891d3d | ||
| 
						 | 
					8147ccdf76 | ||
| 
						 | 
					26ab286630 | ||
| 
						 | 
					738807883e | ||
| 
						 | 
					03a0988ce8 | ||
| 
						 | 
					7de892eeb4 | ||
| 
						 | 
					8c4e91a653 | ||
| 
						 | 
					8f77030473 | ||
| 
						 | 
					546d0bd3d1 | ||
| 
						 | 
					5d53b544d3 | ||
| 
						 | 
					6dc8fac122 | ||
| 
						 | 
					8114f8562b | ||
| 
						 | 
					c79fa187b9 | ||
| 
						 | 
					237ec68b0e | ||
| 
						 | 
					4ebf4f6e55 | ||
| 
						 | 
					4d86593f3c | ||
| 
						 | 
					ec050ccbc4 | ||
| 
						 | 
					f19cade50f | ||
| 
						 | 
					a2f35aaf67 | ||
| 
						 | 
					e5c4b6b345 | ||
| 
						 | 
					bad978feb2 | ||
| 
						 | 
					bea9152aa8 | ||
| 
						 | 
					f788f988ea | ||
| 
						 | 
					d04ffd258b | ||
| 
						 | 
					24cfa7f1bb | ||
| 
						 | 
					94a1d09ac7 | ||
| 
						 | 
					230a75091b | ||
| 
						 | 
					4ad68ec305 | ||
| 
						 | 
					ef776ab893 | ||
| 
						 | 
					f8ff0f6bef | ||
| 
						 | 
					bc7122f6e2 | ||
| 
						 | 
					e5963dae48 | ||
| 
						 | 
					1ebda8fa0e | ||
| 
						 | 
					9af532e662 | ||
| 
						 | 
					9d064a3927 | ||
| 
						 | 
					d6edcfb486 | ||
| 
						 | 
					1d5a914c1c | ||
| 
						 | 
					666bc9ee4e | ||
| 
						 | 
					e545e33d5f | ||
| 
						 | 
					326e8b9fc1 | ||
| 
						 | 
					0d1fc73f21 | ||
| 
						 | 
					50a1853560 | ||
| 
						 | 
					35e158d80b | ||
| 
						 | 
					7225b14002 | ||
| 
						 | 
					85838a8966 | ||
| 
						 | 
					d29590f583 | ||
| 
						 | 
					467c3e3a1f | ||
| 
						 | 
					b484b3b696 | ||
| 
						 | 
					b45d50ccc2 | ||
| 
						 | 
					78e0ba82b0 | ||
| 
						 | 
					c39c55cb2d | ||
| 
						 | 
					cf004cbc7e | ||
| 
						 | 
					9948250723 | ||
| 
						 | 
					47afa058a8 | ||
| 
						 | 
					40e892bb36 | ||
| 
						 | 
					bc6f3beb9c | ||
| 
						 | 
					f9e1f32adb | ||
| 
						 | 
					93f96835f8 | ||
| 
						 | 
					22f4d81f3e | ||
| 
						 | 
					0d1f80ccb5 | ||
| 
						 | 
					4e87dd89bf | ||
| 
						 | 
					60e4b57ad8 | ||
| 
						 | 
					ce5805a955 | ||
| 
						 | 
					dad0715d79 | ||
| 
						 | 
					52d85341ae | ||
| 
						 | 
					7b2869338d | ||
| 
						 | 
					ab35b2837f | ||
| 
						 | 
					863473a856 | ||
| 
						 | 
					be6af69dc7 | ||
| 
						 | 
					3a80dc7f3e | ||
| 
						 | 
					bd42a2acb1 | ||
| 
						 | 
					7f0e708322 | ||
| 
						 | 
					8cbfe5d24a | ||
| 
						 | 
					bab9f532f2 | ||
| 
						 | 
					09cce943cb | ||
| 
						 | 
					702021e099 | ||
| 
						 | 
					e94c46c00c | ||
| 
						 | 
					9d311ff2c0 | ||
| 
						 | 
					108434b95c | ||
| 
						 | 
					c30cb73a5b | ||
| 
						 | 
					b7c56594b3 | ||
| 
						 | 
					2b700fae9d | ||
| 
						 | 
					ef783d8da7 | ||
| 
						 | 
					a4f1833629 | ||
| 
						 | 
					2c756fa1d7 | ||
| 
						 | 
					385086b460 | ||
| 
						 | 
					72a4715dff | ||
| 
						 | 
					7e6043f04f | ||
| 
						 | 
					576be36249 | ||
| 
						 | 
					c52c592f4c | ||
| 
						 | 
					d9ffd2f544 | ||
| 
						 | 
					a684c51c9b | ||
| 
						 | 
					3fa4ac080e | ||
| 
						 | 
					9c8b2a9958 | ||
| 
						 | 
					498666bdc3 | ||
| 
						 | 
					3d3612e252 | ||
| 
						 | 
					e9920d8a04 | ||
| 
						 | 
					acc5096eef | ||
| 
						 | 
					6717240650 | ||
| 
						 | 
					ef0a2c714b | ||
| 
						 | 
					2cd6403011 | ||
| 
						 | 
					75e1483e0d | ||
| 
						 | 
					8a4532ca2d | ||
| 
						 | 
					13f98c5c18 | ||
| 
						 | 
					30e71d54e0 | ||
| 
						 | 
					465753c2de | ||
| 
						 | 
					e40392ac03 | ||
| 
						 | 
					1eb9fd6c4d | ||
| 
						 | 
					78e47fbb5c | ||
| 
						 | 
					2b59e90c54 | ||
| 
						 | 
					59a30e6d9b | ||
| 
						 | 
					e0287fea20 | ||
| 
						 | 
					4fbf3f16e2 | ||
| 
						 | 
					de6433d5c2 | ||
| 
						 | 
					23ef66f33a | ||
| 
						 | 
					2479e06848 | ||
| 
						 | 
					f2abe03fcf | ||
| 
						 | 
					5e7f1a0eaf | ||
| 
						 | 
					eb9383d49b | ||
| 
						 | 
					817d17354e | ||
| 
						 | 
					88e226c686 | ||
| 
						 | 
					9116dd41bd | ||
| 
						 | 
					213d64fbd7 | ||
| 
						 | 
					a8419d68b6 | ||
| 
						 | 
					87a1c7033e | ||
| 
						 | 
					6e3fa90c9e | ||
| 
						 | 
					b2ef40731a | ||
| 
						 | 
					e2f7030202 | ||
| 
						 | 
					533519cc9c | ||
| 
						 | 
					7c85be9435 | ||
| 
						 | 
					89829093ca | ||
| 
						 | 
					7cb10a1853 | ||
| 
						 | 
					33d67c68de | ||
| 
						 | 
					e46b5719f2 | ||
| 
						 | 
					353f764119 | ||
| 
						 | 
					9f437269fb | ||
| 
						 | 
					45391178c9 | ||
| 
						 | 
					eddeb49fb6 | ||
| 
						 | 
					7ab3b5b3bb | ||
| 
						 | 
					00d5f886e3 | ||
| 
						 | 
					49daeaf805 | ||
| 
						 | 
					d03fbf5dfb | ||
| 
						 | 
					cb72a80fe0 | ||
| 
						 | 
					71d81f1f75 | ||
| 
						 | 
					b0c51d198c | ||
| 
						 | 
					71335e5b99 | ||
| 
						 | 
					c9b23ca055 | ||
| 
						 | 
					7983ec84a7 | ||
| 
						 | 
					8cb2a68694 | ||
| 
						 | 
					485122035c | ||
| 
						 | 
					5c4dba1418 | ||
| 
						 | 
					d6eb28400b | ||
| 
						 | 
					526c61c657 | ||
| 
						 | 
					fd6ec05916 | ||
| 
						 | 
					6789dfc5f5 | ||
| 
						 | 
					193a652e6a | ||
| 
						 | 
					4d12be9867 | ||
| 
						 | 
					87e7f4f688 | ||
| 
						 | 
					5eeaff8235 | ||
| 
						 | 
					7d2e872828 | ||
| 
						 | 
					097938e6c8 | ||
| 
						 | 
					d57b84e290 | ||
| 
						 | 
					fcc07bed90 | ||
| 
						 | 
					43bda5cd17 | ||
| 
						 | 
					45c7f064d4 | ||
| 
						 | 
					4dfc0a78e7 | ||
| 
						 | 
					82bd583251 | ||
| 
						 | 
					78f52c05a9 | ||
| 
						 | 
					d818cbe58c | ||
| 
						 | 
					4ae4336643 | ||
| 
						 | 
					25bcd45034 | ||
| 
						 | 
					f53d6e1c39 | ||
| 
						 | 
					17a3aa1ddc | ||
| 
						 | 
					6c78b4b7c0 | ||
| 
						 | 
					2b634be467 | ||
| 
						 | 
					c5b8e446f6 | ||
| 
						 | 
					7bd55dc17c | ||
| 
						 | 
					009cd96490 | ||
| 
						 | 
					d0242da304 | ||
| 
						 | 
					ab44763cb7 | ||
| 
						 | 
					3a80bb0a09 | ||
| 
						 | 
					77268e0649 | ||
| 
						 | 
					1ceb77b4dc | ||
| 
						 | 
					3430ce7907 | ||
| 
						 | 
					4ba7ef34d1 | ||
| 
						 | 
					4515d06465 | ||
| 
						 | 
					b6a4ca9bc8 | ||
| 
						 | 
					9b6350d0b0 | ||
| 
						 | 
					07de0ff0ff | ||
| 
						 | 
					7d8cd5906c | ||
| 
						 | 
					1056d2d22d | ||
| 
						 | 
					d571064b65 | ||
| 
						 | 
					33eaf2e18b | ||
| 
						 | 
					a054e5baf3 | ||
| 
						 | 
					85af357d81 | ||
| 
						 | 
					d687eed33e | ||
| 
						 | 
					38b6016dfa | ||
| 
						 | 
					be2cdf14f3 | ||
| 
						 | 
					0943f33438 | ||
| 
						 | 
					4427d91479 | ||
| 
						 | 
					0c03ed6013 | ||
| 
						 | 
					0c3c1b390a | ||
| 
						 | 
					9b09193cfd | ||
| 
						 | 
					b2cff76722 | ||
| 
						 | 
					37817667e2 | ||
| 
						 | 
					f9b2b7940e | ||
| 
						 | 
					5168b32f86 | ||
| 
						 | 
					0373758359 | ||
| 
						 | 
					df94c7aedc | ||
| 
						 | 
					6bd2de0c42 | ||
| 
						 | 
					82c31256e1 | ||
| 
						 | 
					403cbbe0c4 | ||
| 
						 | 
					9a7e3437ae | ||
| 
						 | 
					4fa58560bf | ||
| 
						 | 
					be62b27ce2 | ||
| 
						 | 
					3be66f3a03 | ||
| 
						 | 
					089bdaed00 | ||
| 
						 | 
					0d3674129f | ||
| 
						 | 
					fce6783be4 | ||
| 
						 | 
					48bc26e7e3 | ||
| 
						 | 
					f128fae705 | ||
| 
						 | 
					800fa31b65 | ||
| 
						 | 
					2ae4420869 | ||
| 
						 | 
					8ba042cf88 | ||
| 
						 | 
					7adf43c1c5 | ||
| 
						 | 
					d007e5615c | ||
| 
						 | 
					888eec833c | ||
| 
						 | 
					2911e63bc2 | ||
| 
						 | 
					34d247bc4e | ||
| 
						 | 
					99bc7e5fd3 | ||
| 
						 | 
					0b1f7995c5 | ||
| 
						 | 
					f35c28214e | ||
| 
						 | 
					35fd1365ae | ||
| 
						 | 
					f493081004 | ||
| 
						 | 
					e1b5e15431 | ||
| 
						 | 
					1aba4c519b | ||
| 
						 | 
					ae76a67566 | ||
| 
						 | 
					76241d0a02 | ||
| 
						 | 
					89227a9d75 | ||
| 
						 | 
					dfb5090e0f | ||
| 
						 | 
					c7fe8a7a11 | ||
| 
						 | 
					7174ca7a20 | ||
| 
						 | 
					2e61fde07f | ||
| 
						 | 
					41263f7d88 | ||
| 
						 | 
					02095ba0e1 | ||
| 
						 | 
					32a678eab3 | ||
| 
						 | 
					bd7ba3bde6 | ||
| 
						 | 
					0ffec4272a | ||
| 
						 | 
					ea4cd4d8aa | ||
| 
						 | 
					c7775c59bf | ||
| 
						 | 
					243bd5bbb4 | ||
| 
						 | 
					4bde770169 | ||
| 
						 | 
					9af7e46f72 | ||
| 
						 | 
					7d844c430c | ||
| 
						 | 
					4f953b6459 | ||
| 
						 | 
					44995d6877 | ||
| 
						 | 
					2ebc821558 | ||
| 
						 | 
					907bb78f3e | ||
| 
						 | 
					b2e1bf7e7d | ||
| 
						 | 
					7173a0f7b6 | ||
| 
						 | 
					a49bebc74e | ||
| 
						 | 
					8777ba7e42 | ||
| 
						 | 
					a39669198f | ||
| 
						 | 
					2c0c75e345 | ||
| 
						 | 
					236337ce86 | ||
| 
						 | 
					224ccc780a | ||
| 
						 | 
					ccde85d198 | ||
| 
						 | 
					9e7657d6ed | ||
| 
						 | 
					7ac455fca3 | ||
| 
						 | 
					e295cd759c | ||
| 
						 | 
					a472cd9310 | ||
| 
						 | 
					8794cb286b | ||
| 
						 | 
					455b1af214 | ||
| 
						 | 
					d765a00adb | ||
| 
						 | 
					de37308722 | ||
| 
						 | 
					7729c63be0 | ||
| 
						 | 
					eebcf90942 | ||
| 
						 | 
					fa8ecd3d53 | ||
| 
						 | 
					134cb66129 | ||
| 
						 | 
					349a15b089 | ||
| 
						 | 
					c14fa2c935 | ||
| 
						 | 
					6ca7af3419 | ||
| 
						 | 
					afa5924487 | ||
| 
						 | 
					bd63a557f3 | ||
| 
						 | 
					49aa798082 | ||
| 
						 | 
					c6e5b67197 | ||
| 
						 | 
					e7050f97c4 | ||
| 
						 | 
					b28f3d43bf | ||
| 
						 | 
					edd467a12c | ||
| 
						 | 
					0bf1bd51c4 | ||
| 
						 | 
					4cf70e3069 | ||
| 
						 | 
					9efddfedab | ||
| 
						 | 
					4b11e19f26 | ||
| 
						 | 
					de681d3b8f | ||
| 
						 | 
					f33be3c313 | ||
| 
						 | 
					62a12b7faf | ||
| 
						 | 
					e75ab79bdb | ||
| 
						 | 
					abd7e32c66 | ||
| 
						 | 
					e2b6a45cfa | ||
| 
						 | 
					e0c0b2ba7d | ||
| 
						 | 
					debbcf81bb | ||
| 
						 | 
					8300a880cc | ||
| 
						 | 
					420bbd2e08 | ||
| 
						 | 
					d87981e4c1 | ||
| 
						 | 
					59091fa860 | ||
| 
						 | 
					dc659ec736 | ||
| 
						 | 
					09aa165942 | ||
| 
						 | 
					f2fbb5f3d5 | ||
| 
						 | 
					29bedfcf7f | ||
| 
						 | 
					ccdaa0b51f | ||
| 
						 | 
					f516734941 | ||
| 
						 | 
					d53d33698c | ||
| 
						 | 
					39926181ea | ||
| 
						 | 
					8415b4a271 | ||
| 
						 | 
					e4916145ef | ||
| 
						 | 
					3ec605de67 | ||
| 
						 | 
					a7e04cac78 | ||
| 
						 | 
					8ddc18a4f9 | ||
| 
						 | 
					0d3aa8b7be | ||
| 
						 | 
					496bbceef1 | ||
| 
						 | 
					901edd32b5 | ||
| 
						 | 
					0612c275a7 | ||
| 
						 | 
					f3d91528a1 | ||
| 
						 | 
					f7fae23546 | ||
| 
						 | 
					2d41efb71e | ||
| 
						 | 
					7abf2f44ec | ||
| 
						 | 
					3a36d4fdea | ||
| 
						 | 
					12b71e422f | ||
| 
						 | 
					d25a0a1bc8 | ||
| 
						 | 
					4d17e77532 | ||
| 
						 | 
					6a921197e2 | ||
| 
						 | 
					fa57a8a78e | ||
| 
						 | 
					eb4d65d0ba | ||
| 
						 | 
					e7d9ea8919 | ||
| 
						 | 
					372b141d5b | ||
| 
						 | 
					115e74a8ad | ||
| 
						 | 
					1b26fe39f9 | ||
| 
						 | 
					4674f3f115 | ||
| 
						 | 
					d8a1415646 | ||
| 
						 | 
					773e7e871e | ||
| 
						 | 
					1d937d62c0 | ||
| 
						 | 
					f3663a9d0f | ||
| 
						 | 
					199b2f4602 | ||
| 
						 | 
					49ab1d914c | ||
| 
						 | 
					f9a6e7b68d | ||
| 
						 | 
					5d64d657de | ||
| 
						 | 
					52caba0417 | ||
| 
						 | 
					ad1a70205f | ||
| 
						 | 
					d57eed6f22 | ||
| 
						 | 
					a3d39efa3b | ||
| 
						 | 
					50efb8f33e | ||
| 
						 | 
					ad75360ec7 | ||
| 
						 | 
					7f29bf61e2 | ||
| 
						 | 
					9ca395fded | ||
| 
						 | 
					68e140b2eb | ||
| 
						 | 
					283f68f660 | ||
| 
						 | 
					e6947f99ed | ||
| 
						 | 
					93e32e6f62 | ||
| 
						 | 
					f8a5ec1380 | ||
| 
						 | 
					2d0b2f294f | ||
| 
						 | 
					08e286ed68 | ||
| 
						 | 
					220caed248 | ||
| 
						 | 
					6eb0b5b917 | ||
| 
						 | 
					3bdc883c93 | ||
| 
						 | 
					cc85f813d1 | ||
| 
						 | 
					e723d2eb7c | ||
| 
						 | 
					b440c6638f | ||
| 
						 | 
					648c5b05c0 | ||
| 
						 | 
					011929cf4d | ||
| 
						 | 
					7f679c3da3 | ||
| 
						 | 
					3e4cd0b422 | ||
| 
						 | 
					fc4f777b42 | ||
| 
						 | 
					208a31f549 | ||
| 
						 | 
					e565631afe | ||
| 
						 | 
					9f2780a2ee | ||
| 
						 | 
					1a6969a887 | ||
| 
						 | 
					f56d753507 | ||
| 
						 | 
					e5165af5a6 | ||
| 
						 | 
					83e878420a | ||
| 
						 | 
					58a5f485db | ||
| 
						 | 
					e8fb77fac3 | ||
| 
						 | 
					d292088a83 | ||
| 
						 | 
					de100f8b51 | ||
| 
						 | 
					1cb2306ae0 | ||
| 
						 | 
					cc90a235f4 | ||
| 
						 | 
					e97ce57d0b | ||
| 
						 | 
					dc753b8315 | ||
| 
						 | 
					a5c4442ebf | ||
| 
						 | 
					a271cfb697 | ||
| 
						 | 
					6dffe9702d | ||
| 
						 | 
					f71139750d | ||
| 
						 | 
					690b3e58b2 | ||
| 
						 | 
					0c7cb0c10f | ||
| 
						 | 
					4816294f52 | ||
| 
						 | 
					6587ff440a | ||
| 
						 | 
					791e49134b | ||
| 
						 | 
					9254c3a103 | ||
| 
						 | 
					9c95ebcbe7 | ||
| 
						 | 
					3a4ed71b88 | ||
| 
						 | 
					d6d312d550 | ||
| 
						 | 
					1fa163fdf7 | ||
| 
						 | 
					82b27d1b97 | ||
| 
						 | 
					f7dee3b846 | ||
| 
						 | 
					a7b5045598 | ||
| 
						 | 
					b7fda8ec73 | ||
| 
						 | 
					3d7f4c0d77 | ||
| 
						 | 
					01771e50a1 | ||
| 
						 | 
					c23cf6a058 | ||
| 
						 | 
					79f9914af8 | ||
| 
						 | 
					803fb123cb | ||
| 
						 | 
					97728f5b1c | ||
| 
						 | 
					36d5f30b8c | ||
| 
						 | 
					e82a575894 | ||
| 
						 | 
					773a8fe598 | ||
| 
						 | 
					fa1c0d4a56 | ||
| 
						 | 
					7e01548d46 | ||
| 
						 | 
					14b36a8cba | ||
| 
						 | 
					1089d91e77 | ||
| 
						 | 
					556b68f44e | ||
| 
						 | 
					3f37ae471d | ||
| 
						 | 
					9f4e682ca9 | ||
| 
						 | 
					5fc8d4da45 | ||
| 
						 | 
					4af66b70fc | ||
| 
						 | 
					95dd343244 | ||
| 
						 | 
					e449aab0af | ||
| 
						 | 
					3a0192bea6 | ||
| 
						 | 
					37685848d1 | ||
| 
						 | 
					0412a201a3 | ||
| 
						 | 
					ca522d4787 | ||
| 
						 | 
					c2967c3c39 | ||
| 
						 | 
					70d7a9e6a5 | ||
| 
						 | 
					462d1c5231 | ||
| 
						 | 
					886391d145 | ||
| 
						 | 
					1442fab4b6 | ||
| 
						 | 
					aa93e2e638 | ||
| 
						 | 
					e1d541086c | ||
| 
						 | 
					3b0f52205d | ||
| 
						 | 
					b84eaff1d5 | ||
| 
						 | 
					9eb6fc1fb6 | ||
| 
						 | 
					253f5f1a9a | ||
| 
						 | 
					dd1f495c2f | ||
| 
						 | 
					12fa877f00 | ||
| 
						 | 
					580a2fe72b | ||
| 
						 | 
					7f0ec86769 | ||
| 
						 | 
					5e69ca0ebd | ||
| 
						 | 
					b6592e29a4 | ||
| 
						 | 
					4cba2ea1ad | ||
| 
						 | 
					14cb9d296c | ||
| 
						 | 
					df750c236c | ||
| 
						 | 
					154c9bc3b8 | ||
| 
						 | 
					508ad2c92f | ||
| 
						 | 
					36a90aeaec | ||
| 
						 | 
					f385b1976e | ||
| 
						 | 
					3d99b566a6 | ||
| 
						 | 
					99a3e2d769 | ||
| 
						 | 
					aaa42735e6 | ||
| 
						 | 
					50c80a49cc | ||
| 
						 | 
					6b7f169b10 | ||
| 
						 | 
					01e3bb98b5 | ||
| 
						 | 
					7052598e59 | ||
| 
						 | 
					ab52e20832 | ||
| 
						 | 
					f50678eda7 | ||
| 
						 | 
					3ded81188b | ||
| 
						 | 
					a435151735 | ||
| 
						 | 
					bfe5568c85 | ||
| 
						 | 
					7e45a1ac53 | ||
| 
						 | 
					76a51ef4b3 | ||
| 
						 | 
					fc7c4d6157 | ||
| 
						 | 
					4d17d6876e | ||
| 
						 | 
					0d6236f7e1 | ||
| 
						 | 
					0e4e72f193 | ||
| 
						 | 
					107413c021 | ||
| 
						 | 
					d7579087f2 | ||
| 
						 | 
					3415ac3866 | ||
| 
						 | 
					d50b209a7a | ||
| 
						 | 
					62e0f10eba | ||
| 
						 | 
					0b2b7439fe | ||
| 
						 | 
					edcd1981ea | ||
| 
						 | 
					ada9a9f4a1 | ||
| 
						 | 
					1c0e4f1178 | ||
| 
						 | 
					663d2080d1 | ||
| 
						 | 
					e5641a33bb | ||
| 
						 | 
					9b24c9a754 | ||
| 
						 | 
					99b96d5446 | ||
| 
						 | 
					cf7817eb38 | ||
| 
						 | 
					9bca9681ba | ||
| 
						 | 
					958987c214 | ||
| 
						 | 
					ed75842df0 | ||
| 
						 | 
					f35398e414 | ||
| 
						 | 
					3b39cee785 | ||
| 
						 | 
					dc932f739a | ||
| 
						 | 
					7d15651115 | ||
| 
						 | 
					e096072745 | ||
| 
						 | 
					5d947e973e | ||
| 
						 | 
					2465ff991f | ||
| 
						 | 
					d10a941d29 | ||
| 
						 | 
					5a58d51993 | ||
| 
						 | 
					142f40582f | ||
| 
						 | 
					4227407438 | ||
| 
						 | 
					6e29f5d1df | ||
| 
						 | 
					334c3df09d | ||
| 
						 | 
					4120b7b0c0 | ||
| 
						 | 
					fac1c13895 | ||
| 
						 | 
					649caa1953 | ||
| 
						 | 
					d8ee927be2 | ||
| 
						 | 
					3efb90dd75 | ||
| 
						 | 
					e4c5653035 | ||
| 
						 | 
					ad7e26b140 | ||
| 
						 | 
					f39749cee4 | ||
| 
						 | 
					87eb26a33d | ||
| 
						 | 
					9a48ca69fc | ||
| 
						 | 
					a259f66fa4 | ||
| 
						 | 
					83d77dc013 | ||
| 
						 | 
					e36914a425 | ||
| 
						 | 
					5bd0471315 | ||
| 
						 | 
					b791e158f0 | ||
| 
						 | 
					6cd0a90b52 | ||
| 
						 | 
					d5bb877fba | ||
| 
						 | 
					0c4907afcc | ||
| 
						 | 
					e5cd0cc402 | ||
| 
						 | 
					252423a725 | ||
| 
						 | 
					eaddf3d198 | ||
| 
						 | 
					a37a79c2a9 | ||
| 
						 | 
					fadf077502 | ||
| 
						 | 
					863c7c7282 | ||
| 
						 | 
					3a85b187c6 | ||
| 
						 | 
					296ccc35d2 | ||
| 
						 | 
					68826c25f8 | ||
| 
						 | 
					5e2fcc1f74 | ||
| 
						 | 
					e262a7265a | ||
| 
						 | 
					945c6f7279 | ||
| 
						 | 
					6ddec1f169 | ||
| 
						 | 
					9beae7693a | ||
| 
						 | 
					d204c62c39 | ||
| 
						 | 
					13dd99842a | ||
| 
						 | 
					2431b2caff | ||
| 
						 | 
					f44bc85545 | ||
| 
						 | 
					52df162c2f | ||
| 
						 | 
					60787171c7 | ||
| 
						 | 
					61e3d75def | ||
| 
						 | 
					27b7220f1b | ||
| 
						 | 
					a275365c72 | ||
| 
						 | 
					80ef1bad86 | ||
| 
						 | 
					686c70c5b5 | ||
| 
						 | 
					f94502ecba | ||
| 
						 | 
					4c70c3e820 | ||
| 
						 | 
					84990cb176 | ||
| 
						 | 
					eabbb5331a | ||
| 
						 | 
					898bf8bb0b | ||
| 
						 | 
					3d66d10fbe | ||
| 
						 | 
					7052daf475 | ||
| 
						 | 
					846d203d31 | ||
| 
						 | 
					7561cbda0a | ||
| 
						 | 
					c5c89862b2 | ||
| 
						 | 
					3a70d686ee | ||
| 
						 | 
					2d567af069 | ||
| 
						 | 
					d2f7037ff7 | ||
| 
						 | 
					c3614fa6a3 | ||
| 
						 | 
					f1da9e508e | ||
| 
						 | 
					9e80356dd5 | ||
| 
						 | 
					4a4295290d | ||
| 
						 | 
					57f67d0241 | ||
| 
						 | 
					d50c9218c7 | ||
| 
						 | 
					3c1bb36193 | ||
| 
						 | 
					16c747da76 | ||
| 
						 | 
					baf948db40 | ||
| 
						 | 
					9906eb8e19 | ||
| 
						 | 
					44d931dbc7 | ||
| 
						 | 
					d0ad607c46 | ||
| 
						 | 
					36f76396ea | ||
| 
						 | 
					1cb3cd1463 | ||
| 
						 | 
					a76235c008 | ||
| 
						 | 
					71b3cc08a6 | ||
| 
						 | 
					d8dd9b0008 | ||
| 
						 | 
					35fd3a3139 | ||
| 
						 | 
					90be1d157e | ||
| 
						 | 
					8433068f3a | ||
| 
						 | 
					e043cf22e2 | ||
| 
						 | 
					206039cb76 | ||
| 
						 | 
					4ba05e1128 | ||
| 
						 | 
					0ae7e93299 | ||
| 
						 | 
					5baf747e67 | ||
| 
						 | 
					3a61c98b65 | ||
| 
						 | 
					5173bab0bb | ||
| 
						 | 
					b291bbc9a6 | ||
| 
						 | 
					11e8600390 | ||
| 
						 | 
					93aea06ed9 | ||
| 
						 | 
					9e5aee63c7 | ||
| 
						 | 
					60cc5a3f27 | ||
| 
						 | 
					5ac047dc39 | ||
| 
						 | 
					6cd280fdfb | ||
| 
						 | 
					c8ac7a0d95 | ||
| 
						 | 
					44031f32a1 | ||
| 
						 | 
					7237221108 | ||
| 
						 | 
					ad36138f52 | ||
| 
						 | 
					8a16e48a6c | ||
| 
						 | 
					4c3a2318ae | ||
| 
						 | 
					7beac70644 | ||
| 
						 | 
					b16dfbee99 | ||
| 
						 | 
					202e54cf9c | ||
| 
						 | 
					e0d9e7a255 | ||
| 
						 | 
					c2bc5662b5 | ||
| 
						 | 
					f4569f10f0 | ||
| 
						 | 
					23cfb9a832 | ||
| 
						 | 
					b921777057 | ||
| 
						 | 
					ff6d9a1109 | ||
| 
						 | 
					053f6c85ef | ||
| 
						 | 
					9970fb863d | ||
| 
						 | 
					feeef39ebf | ||
| 
						 | 
					7bf11297fe | ||
| 
						 | 
					292ef5fabb | ||
| 
						 | 
					2b277f85f5 | ||
| 
						 | 
					9363d94f9b | ||
| 
						 | 
					ea1c98dccf | ||
| 
						 | 
					1109a4a629 | ||
| 
						 | 
					2d01740e1a | ||
| 
						 | 
					979a1e6237 | ||
| 
						 | 
					b60e0fa97e | ||
| 
						 | 
					41c6f68d94 | ||
| 
						 | 
					411d0cb715 | ||
| 
						 | 
					8b3946efda | ||
| 
						 | 
					763d6a8524 | ||
| 
						 | 
					232b051254 | ||
| 
						 | 
					aef6208bd7 | ||
| 
						 | 
					50c5a69d70 | ||
| 
						 | 
					9ebe4ab60c | ||
| 
						 | 
					a0edfb90c2 | ||
| 
						 | 
					93a8572928 | ||
| 
						 | 
					591fe66f18 | ||
| 
						 | 
					a99e6445bf | ||
| 
						 | 
					f3e5d4a602 | ||
| 
						 | 
					1d6248baa4 | ||
| 
						 | 
					61685fee7e | ||
| 
						 | 
					55e4d79111 | ||
| 
						 | 
					84b3c3b569 | ||
| 
						 | 
					4ea14b25df | ||
| 
						 | 
					4223f602ed | ||
| 
						 | 
					8146d46386 | ||
| 
						 | 
					36a2fac79f | ||
| 
						 | 
					58cf108251 | ||
| 
						 | 
					6c6e5522cb | ||
| 
						 | 
					aff9a817b4 | ||
| 
						 | 
					f4e987cd19 | ||
| 
						 | 
					b3afb31181 | ||
| 
						 | 
					a3ad4295c9 | ||
| 
						 | 
					2450506c83 | ||
| 
						 | 
					23a6041698 | ||
| 
						 | 
					979ba8a8b5 | ||
| 
						 | 
					cd9dea3091 | ||
| 
						 | 
					989ec98ebd | ||
| 
						 | 
					d262d0a62a | ||
| 
						 | 
					15b775e126 | ||
| 
						 | 
					3788f25eac | ||
| 
						 | 
					5b8852107b | ||
| 
						 | 
					cfe53768dd | ||
| 
						 | 
					947e656367 | ||
| 
						 | 
					50e7545118 | ||
| 
						 | 
					0839d6e6bc | ||
| 
						 | 
					bbafc27b42 | ||
| 
						 | 
					a7de09a966 | ||
| 
						 | 
					1410deb8f7 | ||
| 
						 | 
					7dea4acc46 | ||
| 
						 | 
					a3c09e636d | ||
| 
						 | 
					a025425d06 | ||
| 
						 | 
					4eb9ac0821 | ||
| 
						 | 
					77a5e7c646 | ||
| 
						 | 
					8f0abd31c5 | ||
| 
						 | 
					a13f85fb33 | ||
| 
						 | 
					3b048880ad | ||
| 
						 | 
					24ac5b8a6c | ||
| 
						 | 
					9bc97b2d3c | ||
| 
						 | 
					9825d81973 | ||
| 
						 | 
					1e012c5259 | ||
| 
						 | 
					68c508976f | ||
| 
						 | 
					4d8a53da2f | ||
| 
						 | 
					29d3deaee8 | ||
| 
						 | 
					6c56340e1a | ||
| 
						 | 
					134ab91358 | ||
| 
						 | 
					fb927939e2 | ||
| 
						 | 
					ac114ed45b | ||
| 
						 | 
					d46a735418 | ||
| 
						 | 
					5a87203fe4 | ||
| 
						 | 
					90e9c64f72 | ||
| 
						 | 
					8742d39060 | ||
| 
						 | 
					821302bcf3 | ||
| 
						 | 
					f68219ddaa | ||
| 
						 | 
					7e3cd82b50 | ||
| 
						 | 
					bc372815a8 | ||
| 
						 | 
					391a37ebbf | ||
| 
						 | 
					a61dc1e9c5 | ||
| 
						 | 
					2e0d1a55c6 | ||
| 
						 | 
					dfd1a636b4 | ||
| 
						 | 
					ee337309cf | ||
| 
						 | 
					437afe0767 | ||
| 
						 | 
					0ab2dff69c | ||
| 
						 | 
					bff59dac12 | ||
| 
						 | 
					ea53aed841 | ||
| 
						 | 
					e2555cf83d | ||
| 
						 | 
					f7c8a57206 | ||
| 
						 | 
					02bf6660bf | ||
| 
						 | 
					6c8e6df38f | ||
| 
						 | 
					96d3db1687 | ||
| 
						 | 
					3e43105ff1 | ||
| 
						 | 
					8ccc1148d9 | ||
| 
						 | 
					06c38330ba | ||
| 
						 | 
					0f4d042d3e | ||
| 
						 | 
					c79de8d86e | ||
| 
						 | 
					d670f308a6 | ||
| 
						 | 
					e64e9d7fed | ||
| 
						 | 
					ad5ead8bed | ||
| 
						 | 
					1b99d33b59 | ||
| 
						 | 
					800052dc50 | ||
| 
						 | 
					d4629fd395 | ||
| 
						 | 
					2c22feced2 | ||
| 
						 | 
					41688a1642 | ||
| 
						 | 
					2cf209d3f7 | ||
| 
						 | 
					909887f310 | ||
| 
						 | 
					d1d417664e | ||
| 
						 | 
					7d7e99104e | ||
| 
						 | 
					3eeea48839 | ||
| 
						 | 
					cd653f1be9 | ||
| 
						 | 
					5751796ddd | ||
| 
						 | 
					012c4ee1fa | ||
| 
						 | 
					426954ff95 | ||
| 
						 | 
					471c30372b | ||
| 
						 | 
					f6413f2cb4 | ||
| 
						 | 
					e80bdd66f9 | ||
| 
						 | 
					d083fac1fc | ||
| 
						 | 
					1d85f950bf | ||
| 
						 | 
					1d977b7848 | ||
| 
						 | 
					b3803903d1 | ||
| 
						 | 
					efc9410796 | ||
| 
						 | 
					45614d54c6 | ||
| 
						 | 
					50e690f2dd | ||
| 
						 | 
					2f9f843e8a | ||
| 
						 | 
					15d41dfbcd | ||
| 
						 | 
					bc01ad5b9e | ||
| 
						 | 
					dadc1026f1 | ||
| 
						 | 
					d8cf2d42c0 | ||
| 
						 | 
					96d7a95ce4 | ||
| 
						 | 
					d5d55a856e | ||
| 
						 | 
					dac045029a | ||
| 
						 | 
					1e98727c55 | ||
| 
						 | 
					1c700b5a5c | ||
| 
						 | 
					af9dc9f128 | ||
| 
						 | 
					4874aa6986 | ||
| 
						 | 
					c0336dcc52 | ||
| 
						 | 
					78fb476677 | ||
| 
						 | 
					3fed12a203 | ||
| 
						 | 
					ed2b831afe | ||
| 
						 | 
					f481b3e1dc | ||
| 
						 | 
					2769f3b245 | ||
| 
						 | 
					e9a545c710 | ||
| 
						 | 
					edce444551 | ||
| 
						 | 
					7bee4140e8 | ||
| 
						 | 
					cc48658564 | ||
| 
						 | 
					79e4aee185 | ||
| 
						 | 
					4d28012468 | ||
| 
						 | 
					e1d01045e2 | ||
| 
						 | 
					0717e4690e | ||
| 
						 | 
					a0a5668dbd | ||
| 
						 | 
					bfc7d6c11b | ||
| 
						 | 
					dfe0118033 | ||
| 
						 | 
					a701f3dddf | ||
| 
						 | 
					f99a1d4e82 | ||
| 
						 | 
					43bb20461f | ||
| 
						 | 
					b9d3c71178 | ||
| 
						 | 
					1e251a64f3 | ||
| 
						 | 
					776f0bd95e | ||
| 
						 | 
					cd9aabb474 | ||
| 
						 | 
					e42f806b3f | ||
| 
						 | 
					0850aec780 | ||
| 
						 | 
					ad77f760cf | ||
| 
						 | 
					a50d2a45d7 | ||
| 
						 | 
					17a834bc63 | ||
| 
						 | 
					c10bc0ef12 | ||
| 
						 | 
					f9b1981bd7 | ||
| 
						 | 
					451d34ce21 | ||
| 
						 | 
					445950aa70 | ||
| 
						 | 
					8be602cdfd | ||
| 
						 | 
					3dd40cca9a | ||
| 
						 | 
					f1445ea228 | ||
| 
						 | 
					c40309ae21 | ||
| 
						 | 
					fe0b5801ec | ||
| 
						 | 
					3de511b248 | ||
| 
						 | 
					b1aa8eb7ef | ||
| 
						 | 
					967cb4d75e | ||
| 
						 | 
					bcbaeaf7d5 | ||
| 
						 | 
					41be41358e | ||
| 
						 | 
					ecb818805b | ||
| 
						 | 
					d95f7129d5 | ||
| 
						 | 
					6294b356fb | ||
| 
						 | 
					3e64a76498 | ||
| 
						 | 
					dec9907c16 | ||
| 
						 | 
					527850928d | ||
| 
						 | 
					eee3f13134 | ||
| 
						 | 
					80d2be541d | ||
| 
						 | 
					472c4d8616 | ||
| 
						 | 
					45abf75e1e | ||
| 
						 | 
					4ec4e91de0 | ||
| 
						 | 
					f6645094a2 | ||
| 
						 | 
					7496e87d16 | ||
| 
						 | 
					bd4c081157 | ||
| 
						 | 
					927e392b31 | ||
| 
						 | 
					aeb5edbf07 | ||
| 
						 | 
					67dcddbef7 | ||
| 
						 | 
					7ffb8c6aee | ||
| 
						 | 
					344c378996 | ||
| 
						 | 
					445f54db57 | ||
| 
						 | 
					9b7c311929 | ||
| 
						 | 
					6a21a28048 | ||
| 
						 | 
					0adb75114b | ||
| 
						 | 
					ecfb53f06d | ||
| 
						 | 
					c020ee2eb6 | ||
| 
						 | 
					a3279d4baf | ||
| 
						 | 
					c45f43ce32 | ||
| 
						 | 
					0eb037a849 | ||
| 
						 | 
					5a089f6c1f | ||
| 
						 | 
					556d59dfcf | ||
| 
						 | 
					79cb1400ab | ||
| 
						 | 
					d1b94a5f3f | ||
| 
						 | 
					a07f43d202 | ||
| 
						 | 
					a717afc3a7 | ||
| 
						 | 
					f023b4cc79 | ||
| 
						 | 
					a7aacac5e8 | ||
| 
						 | 
					decdb93ccb | ||
| 
						 | 
					3e24c6a957 | ||
| 
						 | 
					00d2c9d92d | ||
| 
						 | 
					bd383f0c60 | ||
| 
						 | 
					900cecae96 | ||
| 
						 | 
					ffc58c6620 | ||
| 
						 | 
					39f673874f | ||
| 
						 | 
					fe291202db | ||
| 
						 | 
					4606dc4158 | ||
| 
						 | 
					36d6b16c23 | ||
| 
						 | 
					b4d8108ba1 | ||
| 
						 | 
					2c120aa05c | ||
| 
						 | 
					693df0fa34 | ||
| 
						 | 
					fb26b2bd98 | ||
| 
						 | 
					5554f1ccba | ||
| 
						 | 
					46accd62d1 | ||
| 
						 | 
					41535eaea9 | ||
| 
						 | 
					02437b2d51 | ||
| 
						 | 
					c964aedf3b | ||
| 
						 | 
					5f4fb857f0 | ||
| 
						 | 
					0334509754 | ||
| 
						 | 
					aad70aa24e | ||
| 
						 | 
					e9c835ad06 | ||
| 
						 | 
					0701b973df | ||
| 
						 | 
					ec59aa259f | ||
| 
						 | 
					ffc6d062d8 | ||
| 
						 | 
					757a7d0851 | ||
| 
						 | 
					25613503cb | ||
| 
						 | 
					60ef75f2ee | ||
| 
						 | 
					1cdc66d927 | ||
| 
						 | 
					ba12c5deda | ||
| 
						 | 
					203f66d0cb | ||
| 
						 | 
					54c6f2c7c0 | ||
| 
						 | 
					4cccceb034 | ||
| 
						 | 
					245ab7c796 | ||
| 
						 | 
					2bdf52d4c5 | ||
| 
						 | 
					f991a69cce | ||
| 
						 | 
					3dd26b7932 | ||
| 
						 | 
					a5e22867c7 | ||
| 
						 | 
					5c96266d45 | ||
| 
						 | 
					fcfc6de918 | ||
| 
						 | 
					da0b380655 | ||
| 
						 | 
					ed7ac3c932 | ||
| 
						 | 
					b5d4a71883 | ||
| 
						 | 
					a9d74e6c97 | ||
| 
						 | 
					d46afd2b6a | ||
| 
						 | 
					ce4b8420d1 | ||
| 
						 | 
					faabd44658 | ||
| 
						 | 
					2fe5f5ab4b | ||
| 
						 | 
					656d4b4c20 | ||
| 
						 | 
					7247041e21 | ||
| 
						 | 
					017a78d0c5 | ||
| 
						 | 
					9010bd3831 | ||
| 
						 | 
					ded884e825 | ||
| 
						 | 
					b53a5e92c0 | ||
| 
						 | 
					69bdb82586 | ||
| 
						 | 
					4799d39be6 | ||
| 
						 | 
					f32d011d90 | ||
| 
						 | 
					14f795816d | ||
| 
						 | 
					5987791516 | ||
| 
						 | 
					db074518c3 | ||
| 
						 | 
					64731b0056 | ||
| 
						 | 
					debe6a1432 | ||
| 
						 | 
					715c3f6482 | ||
| 
						 | 
					f232baf4d2 | ||
| 
						 | 
					b439e8ffb7 | ||
| 
						 | 
					475166fc8b | ||
| 
						 | 
					be2b742b85 | ||
| 
						 | 
					640d6a5564 | ||
| 
						 | 
					2e9d100d03 | ||
| 
						 | 
					294adcae9d | ||
| 
						 | 
					1fd16e7b04 | ||
| 
						 | 
					d1c08e1d85 | ||
| 
						 | 
					d7c09efeb1 | ||
| 
						 | 
					b83c7ade10 | ||
| 
						 | 
					7d6584e140 | ||
| 
						 | 
					31b6bb6a41 | ||
| 
						 | 
					b84607ff7b | ||
| 
						 | 
					ac2af59880 | ||
| 
						 | 
					d9f961ed2d | ||
| 
						 | 
					c7f5476416 | ||
| 
						 | 
					381c6c5d52 | ||
| 
						 | 
					9df8f9a63d | ||
| 
						 | 
					5eee801d06 | ||
| 
						 | 
					80a06403e4 | ||
| 
						 | 
					7ad69f59c7 | ||
| 
						 | 
					83b82e4472 | ||
| 
						 | 
					65dab79ca5 | ||
| 
						 | 
					f0089b6291 | ||
| 
						 | 
					d10508e08c | ||
| 
						 | 
					630995f40a | ||
| 
						 | 
					f7f7cd6cce | ||
| 
						 | 
					ce7326ed09 | ||
| 
						 | 
					b3591ec464 | ||
| 
						 | 
					b1952e773a | ||
| 
						 | 
					ce5db9a86e | ||
| 
						 | 
					94568f884d | ||
| 
						 | 
					d095b20d1c | ||
| 
						 | 
					18b809e7e4 | ||
| 
						 | 
					3f458fc650 | ||
| 
						 | 
					9935d33b8e | ||
| 
						 | 
					d42c6b7e78 | ||
| 
						 | 
					d70550f949 | ||
| 
						 | 
					679654bd47 | ||
| 
						 | 
					9e3f54431d | ||
| 
						 | 
					3d59934163 | ||
| 
						 | 
					a77d931cd0 | ||
| 
						 | 
					260c353577 | ||
| 
						 | 
					8823679e70 | ||
| 
						 | 
					722ece4055 | ||
| 
						 | 
					cc09e31acf | ||
| 
						 | 
					fe09079778 | ||
| 
						 | 
					8f5b80c715 | ||
| 
						 | 
					460979496e | ||
| 
						 | 
					cadcc12169 | ||
| 
						 | 
					22adcb9cd1 | ||
| 
						 | 
					597c1fe6bc | ||
| 
						 | 
					7201a5a290 | ||
| 
						 | 
					c6a0bb99af | ||
| 
						 | 
					622984de64 | ||
| 
						 | 
					a9af971c59 | ||
| 
						 | 
					171229e122 | ||
| 
						 | 
					b71ca15598 | ||
| 
						 | 
					1c604b7ba9 | ||
| 
						 | 
					749f5387c1 | ||
| 
						 | 
					7553341bad | ||
| 
						 | 
					c6f11b053d | ||
| 
						 | 
					7d6e2a3adb | ||
| 
						 | 
					43cc844d3f | ||
| 
						 | 
					941dfc502a | ||
| 
						 | 
					8341e8e502 | ||
| 
						 | 
					e85881d7ec | ||
| 
						 | 
					c9d154ca7f | ||
| 
						 | 
					5911485f38 | ||
| 
						 | 
					6d6de53eb9 | ||
| 
						 | 
					022996e5c7 | ||
| 
						 | 
					4935853eb9 | ||
| 
						 | 
					d1a3c9944e | ||
| 
						 | 
					8996a7346e | ||
| 
						 | 
					e4adbf4017 | ||
| 
						 | 
					c29740f0d8 | ||
| 
						 | 
					1a4fddb9ba | ||
| 
						 | 
					af19ff51e6 | ||
| 
						 | 
					5438ced6b3 | ||
| 
						 | 
					2eb3ad7678 | ||
| 
						 | 
					b86ad6438e | ||
| 
						 | 
					81f250be59 | ||
| 
						 | 
					9db5dfc15d | ||
| 
						 | 
					377ce6a2c2 | ||
| 
						 | 
					867c189ef7 | ||
| 
						 | 
					33525ac165 | ||
| 
						 | 
					5c52cacc98 | ||
| 
						 | 
					e612f73374 | ||
| 
						 | 
					ff5b6ff528 | ||
| 
						 | 
					c86768d856 | ||
| 
						 | 
					9f002b1289 | ||
| 
						 | 
					0436fbe226 | ||
| 
						 | 
					6494889e3b | ||
| 
						 | 
					f52534522c | ||
| 
						 | 
					0b615afac9 | ||
| 
						 | 
					b61c25af45 | ||
| 
						 | 
					bf20ed5984 | ||
| 
						 | 
					9d5c22d5ae | ||
| 
						 | 
					aaddfa0181 | ||
| 
						 | 
					17e13acd10 | ||
| 
						 | 
					5564e9a321 | ||
| 
						 | 
					a0118fb390 | ||
| 
						 | 
					57b6202eaa | ||
| 
						 | 
					0bbe184f1f | ||
| 
						 | 
					1b0af1c53a | ||
| 
						 | 
					23f8692058 | ||
| 
						 | 
					780652e5b6 | ||
| 
						 | 
					8297ac4a28 | ||
| 
						 | 
					45ef092cc2 | ||
| 
						 | 
					a191fe028c | ||
| 
						 | 
					343291ce37 | ||
| 
						 | 
					b864e25011 | ||
| 
						 | 
					24836d30f5 | ||
| 
						 | 
					ba1ff79b3f | ||
| 
						 | 
					09d593ade0 | ||
| 
						 | 
					d1b17779a3 | ||
| 
						 | 
					588b63a05b | ||
| 
						 | 
					a5c2a86649 | ||
| 
						 | 
					8a46c64c78 | ||
| 
						 | 
					2d4c0af528 | ||
| 
						 | 
					edd09a1b16 | ||
| 
						 | 
					0edab55dd2 | ||
| 
						 | 
					16643faaa1 | ||
| 
						 | 
					881c38b38a | ||
| 
						 | 
					59889d45da | ||
| 
						 | 
					734c17ae56 | ||
| 
						 | 
					48c1943824 | ||
| 
						 | 
					9ef76fecef | ||
| 
						 | 
					8aa2894bfb | ||
| 
						 | 
					f40467638d | ||
| 
						 | 
					2297eca103 | ||
| 
						 | 
					09ccfcdcd4 | ||
| 
						 | 
					bbc01c36d2 | ||
| 
						 | 
					b560428492 | ||
| 
						 | 
					d19134e644 | ||
| 
						 | 
					951e2a6545 | ||
| 
						 | 
					fcacd38036 | ||
| 
						 | 
					c4aca23ec4 | ||
| 
						 | 
					20943292ff | ||
| 
						 | 
					b2ddfb54a7 | ||
| 
						 | 
					76b9631d03 | ||
| 
						 | 
					58b1437cae | ||
| 
						 | 
					c611ac958e | ||
| 
						 | 
					e7160459ab | ||
| 
						 | 
					071fc74c0e | ||
| 
						 | 
					14597475b1 | ||
| 
						 | 
					de3281a3a8 | ||
| 
						 | 
					6e16985156 | ||
| 
						 | 
					50dacab379 | ||
| 
						 | 
					7c2930611b | ||
| 
						 | 
					84bc46ac3b | ||
| 
						 | 
					fd42247cac | ||
| 
						 | 
					0efcb57623 | ||
| 
						 | 
					6fde147273 | ||
| 
						 | 
					cc497fd153 | ||
| 
						 | 
					c1f31180a2 | ||
| 
						 | 
					d4ab68cd51 | ||
| 
						 | 
					e8c762981a | ||
| 
						 | 
					0ef3e6fe8a | ||
| 
						 | 
					adcbe03aeb | ||
| 
						 | 
					359c0eac0d | ||
| 
						 | 
					a53d7848eb | ||
| 
						 | 
					29b7fb628e | ||
| 
						 | 
					df760a0a4b | ||
| 
						 | 
					f2057eb744 | ||
| 
						 | 
					2956fe97a0 | ||
| 
						 | 
					1f9b0e70ab | ||
| 
						 | 
					8fae12b2f1 | ||
| 
						 | 
					7410210f19 | ||
| 
						 | 
					40e6b12cca | ||
| 
						 | 
					f2d422235b | ||
| 
						 | 
					6a678f6d64 | ||
| 
						 | 
					52ceab5e41 | ||
| 
						 | 
					cafcc242e6 | ||
| 
						 | 
					2ad0a7d20f | ||
| 
						 | 
					481094db90 | ||
| 
						 | 
					840c0af014 | ||
| 
						 | 
					f193ab4b59 | ||
| 
						 | 
					f7db3023a8 | ||
| 
						 | 
					cfe80449e2 | ||
| 
						 | 
					818d231849 | ||
| 
						 | 
					eb9937ec1a | ||
| 
						 | 
					070cd2b52f | ||
| 
						 | 
					96d9ddee38 | ||
| 
						 | 
					5629eeaec2 | ||
| 
						 | 
					46c2bc4bb6 | ||
| 
						 | 
					3938e0f58b | ||
| 
						 | 
					fa162e8feb | ||
| 
						 | 
					a95df8246b | ||
| 
						 | 
					8feb5110b5 | ||
| 
						 | 
					32899f8309 | ||
| 
						 | 
					dc7c6d1030 | ||
| 
						 | 
					7fdd0bd367 | ||
| 
						 | 
					4459d3b434 | ||
| 
						 | 
					7e7d89471a | ||
| 
						 | 
					e67d15b50e | ||
| 
						 | 
					bd78878cc3 | ||
| 
						 | 
					5974309d10 | ||
| 
						 | 
					d00e4a377b | ||
| 
						 | 
					afc6ade2b9 | ||
| 
						 | 
					734e8d6229 | ||
| 
						 | 
					61629d2c86 | ||
| 
						 | 
					cb48c6a3d8 | ||
| 
						 | 
					93a29c3c45 | ||
| 
						 | 
					e92b7c73bc | ||
| 
						 | 
					0ea74e3255 | ||
| 
						 | 
					3bd52e3cb1 | ||
| 
						 | 
					c7f9c51fe6 | ||
| 
						 | 
					b1da98170f | ||
| 
						 | 
					0496598e77 | ||
| 
						 | 
					fb3eee5f0b | ||
| 
						 | 
					e16bc91601 | ||
| 
						 | 
					a8c78cbbb0 | ||
| 
						 | 
					3a5a6038e7 | ||
| 
						 | 
					d412724598 | ||
| 
						 | 
					f95de76789 | ||
| 
						 | 
					33cf204e9a | ||
| 
						 | 
					dafc652f63 | ||
| 
						 | 
					c16dd085f1 | ||
| 
						 | 
					a7349a48ff | ||
| 
						 | 
					8042cd93c3 | ||
| 
						 | 
					394faaeb97 | ||
| 
						 | 
					5c2df3e1a4 | ||
| 
						 | 
					6fc55467f4 | ||
| 
						 | 
					a147a07956 | ||
| 
						 | 
					a10581d459 | ||
| 
						 | 
					cc2d6942bb | ||
| 
						 | 
					3974c02bb1 | ||
| 
						 | 
					09b5ddaea5 | ||
| 
						 | 
					acbcd68d89 | ||
| 
						 | 
					4281470fca | ||
| 
						 | 
					68a4aa6773 | ||
| 
						 | 
					905b160097 | ||
| 
						 | 
					52596c339b | ||
| 
						 | 
					73500267ee | ||
| 
						 | 
					e6011e33a6 | ||
| 
						 | 
					3454319c17 | ||
| 
						 | 
					02c78ecf81 | ||
| 
						 | 
					caca034302 | ||
| 
						 | 
					fb366ed35f | ||
| 
						 | 
					b352ffca15 | ||
| 
						 | 
					2d94856efd | ||
| 
						 | 
					ae66bd1284 | ||
| 
						 | 
					89d9d4e6c8 | ||
| 
						 | 
					fe60fc4730 | ||
| 
						 | 
					46690d5e1c | ||
| 
						 | 
					beaea8cb25 | ||
| 
						 | 
					409ec90c85 | ||
| 
						 | 
					4d423eeabe | ||
| 
						 | 
					019e612225 | ||
| 
						 | 
					6550d271f0 | ||
| 
						 | 
					c46da65263 | ||
| 
						 | 
					b46745759b | ||
| 
						 | 
					9687571a84 | ||
| 
						 | 
					c13236de25 | ||
| 
						 | 
					8ffbb6acd4 | ||
| 
						 | 
					a3e5d81765 | ||
| 
						 | 
					e2aecfe80f | ||
| 
						 | 
					a3c1248214 | ||
| 
						 | 
					b933639222 | ||
| 
						 | 
					27619fc450 | ||
| 
						 | 
					96fecba190 | ||
| 
						 | 
					50257d4f50 | ||
| 
						 | 
					3eb4ae031c | ||
| 
						 | 
					6a4ec3be81 | ||
| 
						 | 
					cc9ac6ad14 | ||
| 
						 | 
					644990a835 | ||
| 
						 | 
					d3b81ea3f7 | ||
| 
						 | 
					3660f67534 | ||
| 
						 | 
					203cc4a5c3 | ||
| 
						 | 
					c7be232fee | ||
| 
						 | 
					2617b379be | ||
| 
						 | 
					84ed5e755a | ||
| 
						 | 
					2f17615790 | ||
| 
						 | 
					acfa131c8c | ||
| 
						 | 
					793d0e27e1 | ||
| 
						 | 
					fdf0c443c3 | ||
| 
						 | 
					1b39b53321 | ||
| 
						 | 
					1679993e3b | ||
| 
						 | 
					4c831f8b68 | ||
| 
						 | 
					7a19923afa | ||
| 
						 | 
					3e122a765d | ||
| 
						 | 
					d873ba8c9f | ||
| 
						 | 
					8093338f39 | ||
| 
						 | 
					07660eea1e | ||
| 
						 | 
					a2b2d4cd5c | ||
| 
						 | 
					96e217b496 | ||
| 
						 | 
					2dd1518d63 | ||
| 
						 | 
					168703b7bf | ||
| 
						 | 
					0f2d680f1f | ||
| 
						 | 
					b7930b6ebd | ||
| 
						 | 
					8fa43b469a | ||
| 
						 | 
					894e52f61a | ||
| 
						 | 
					3c294691aa | ||
| 
						 | 
					acbf932861 | ||
| 
						 | 
					26f5c53be8 | ||
| 
						 | 
					8dd069604c | ||
| 
						 | 
					5dadbd094e | ||
| 
						 | 
					514a8739b6 | ||
| 
						 | 
					12e78a082e | ||
| 
						 | 
					9273096a8a | ||
| 
						 | 
					686c6133f8 | ||
| 
						 | 
					1d1276cc3a | ||
| 
						 | 
					d987676ef0 | ||
| 
						 | 
					6e4658c89d | ||
| 
						 | 
					b7cbcf7434 | ||
| 
						 | 
					e347d06a49 | ||
| 
						 | 
					2077e9365a | ||
| 
						 | 
					6e3adc9b14 | ||
| 
						 | 
					7954eee639 | ||
| 
						 | 
					f9f1f0e316 | ||
| 
						 | 
					a9afe6aa84 | ||
| 
						 | 
					6d36796135 | ||
| 
						 | 
					9e81fd5703 | ||
| 
						 | 
					609059b6ec | ||
| 
						 | 
					6af73f417a | ||
| 
						 | 
					32468a0072 | ||
| 
						 | 
					6800c45104 | ||
| 
						 | 
					0d8c754ffd | ||
| 
						 | 
					1b80276496 | ||
| 
						 | 
					bf9a138276 | ||
| 
						 | 
					b3f9c636b9 | ||
| 
						 | 
					18975d44a6 | ||
| 
						 | 
					b201db5cec | ||
| 
						 | 
					bbe23945e4 | ||
| 
						 | 
					bbdc0394ff | ||
| 
						 | 
					38a9b14965 | ||
| 
						 | 
					77ba0d3686 | ||
| 
						 | 
					065c8d7a95 | ||
| 
						 | 
					c704d1545c | ||
| 
						 | 
					62b65a5f20 | ||
| 
						 | 
					665a7a3848 | ||
| 
						 | 
					256b9f31e1 | ||
| 
						 | 
					a3037e1173 | ||
| 
						 | 
					f3e7a5d755 | ||
| 
						 | 
					5f0cba7775 | ||
| 
						 | 
					673759fe7e | ||
| 
						 | 
					b73612392d | ||
| 
						 | 
					f85935f0f9 | ||
| 
						 | 
					1e7e53c87e | ||
| 
						 | 
					b9fdf3cc3b | ||
| 
						 | 
					c462601362 | ||
| 
						 | 
					859877dcfc | ||
| 
						 | 
					c04ce95106 | ||
| 
						 | 
					98ee12bc35 | ||
| 
						 | 
					fdda786fa2 | ||
| 
						 | 
					831be4f4dd | ||
| 
						 | 
					41ae97e710 | ||
| 
						 | 
					f72ba7f79d | ||
| 
						 | 
					296046510b | ||
| 
						 | 
					db9f87f697 | ||
| 
						 | 
					3270ea55dd | ||
| 
						 | 
					a358ac24f4 | ||
| 
						 | 
					8bedd43b28 | ||
| 
						 | 
					9ea2087ede | ||
| 
						 | 
					9f7c634133 | ||
| 
						 | 
					da20d68a12 | ||
| 
						 | 
					d3e512c738 | ||
| 
						 | 
					339f84fe1f | ||
| 
						 | 
					2d41b735ec | ||
| 
						 | 
					e3b4dd08ff | ||
| 
						 | 
					6809a906bb | ||
| 
						 | 
					1c35cbcc07 | ||
| 
						 | 
					5f8989a436 | ||
| 
						 | 
					aa7b0648ff | ||
| 
						 | 
					2fbe61960f | ||
| 
						 | 
					bdb5e5a250 | ||
| 
						 | 
					48a580e609 | ||
| 
						 | 
					1361fc69b9 | ||
| 
						 | 
					93352e56d8 | ||
| 
						 | 
					d9246ff24d | ||
| 
						 | 
					9301bc3444 | ||
| 
						 | 
					76352c4e2d | ||
| 
						 | 
					428f41bd12 | ||
| 
						 | 
					99c32e460f | ||
| 
						 | 
					83f249cf65 | ||
| 
						 | 
					2c2baa93ea | ||
| 
						 | 
					f0278ca114 | ||
| 
						 | 
					297b1b5013 | ||
| 
						 | 
					e9f63bf4e8 | ||
| 
						 | 
					556ce1c6a1 | ||
| 
						 | 
					cc4ff62681 | ||
| 
						 | 
					0423fd9b55 | ||
| 
						 | 
					789ab20bf7 | ||
| 
						 | 
					b47462bd68 | ||
| 
						 | 
					1a94fee42d | ||
| 
						 | 
					a91ce6a5d6 | ||
| 
						 | 
					981ffd9fce | ||
| 
						 | 
					e76c960624 | ||
| 
						 | 
					416c92cc6f | ||
| 
						 | 
					fb731eb3e7 | ||
| 
						 | 
					6f2a4d290f | ||
| 
						 | 
					cefc8ba938 | ||
| 
						 | 
					d0bd644eef | ||
| 
						 | 
					071c95128e | ||
| 
						 | 
					1a192c489b | ||
| 
						 | 
					56014e74a0 | ||
| 
						 | 
					172271498d | ||
| 
						 | 
					f2882cb88c | ||
| 
						 | 
					152f1fee40 | ||
| 
						 | 
					968234e6ae | ||
| 
						 | 
					5e133e2dff | ||
| 
						 | 
					0049c09fc3 | ||
| 
						 | 
					a2a63c27f4 | ||
| 
						 | 
					c50a601f1a | ||
| 
						 | 
					bc0fd6db71 | ||
| 
						 | 
					52b631fade | ||
| 
						 | 
					2f0bc9d1f7 | ||
| 
						 | 
					5ef6520d4e | ||
| 
						 | 
					2c1925161e | ||
| 
						 | 
					0529b349d5 | ||
| 
						 | 
					b4620364a2 | ||
| 
						 | 
					634aef3895 | ||
| 
						 | 
					06c86d1a8c | ||
| 
						 | 
					79749f8eb4 | ||
| 
						 | 
					b036986b3e | ||
| 
						 | 
					938f1d1da7 | ||
| 
						 | 
					58b6b3df06 | ||
| 
						 | 
					f9c3347f7c | ||
| 
						 | 
					5b72eb0b03 | ||
| 
						 | 
					6dd4c13bc0 | ||
| 
						 | 
					e4e7db551f | ||
| 
						 | 
					ebfde8da56 | ||
| 
						 | 
					756bc0f4b7 | ||
| 
						 | 
					269d491b6a | ||
| 
						 | 
					449e5bc2ad | ||
| 
						 | 
					8736c11d84 | ||
| 
						 | 
					45fc760985 | ||
| 
						 | 
					7968e3c2de | ||
| 
						 | 
					964a41c75c | ||
| 
						 | 
					5931d53637 | ||
| 
						 | 
					3ed3ae5bcf | ||
| 
						 | 
					6519cc70c5 | ||
| 
						 | 
					505a4f27fa | ||
| 
						 | 
					79144eba99 | ||
| 
						 | 
					26e17d89c9 | ||
| 
						 | 
					4322c1106f | ||
| 
						 | 
					73071dfd4f | ||
| 
						 | 
					b7c14b3c27 | ||
| 
						 | 
					3130b44535 | ||
| 
						 | 
					a2bd73334f | ||
| 
						 | 
					1a393f5625 | ||
| 
						 | 
					d4951e837e | ||
| 
						 | 
					26f6365e93 | ||
| 
						 | 
					3a552b1e63 | ||
| 
						 | 
					69eb1790da | ||
| 
						 | 
					a1af6f3614 | ||
| 
						 | 
					3aced61465 | ||
| 
						 | 
					6f02ddfce8 | ||
| 
						 | 
					c2faa39b62 | ||
| 
						 | 
					2d3734b8b5 | ||
| 
						 | 
					ed908b7f89 | ||
| 
						 | 
					f7d795a364 | ||
| 
						 | 
					8919b39d54 | ||
| 
						 | 
					84cedc094e | ||
| 
						 | 
					3b2b2496d7 | ||
| 
						 | 
					445684c409 | ||
| 
						 | 
					898e067ccc | ||
| 
						 | 
					12859e345f | ||
| 
						 | 
					89f4af695e | ||
| 
						 | 
					308bc9d919 | ||
| 
						 | 
					db566c54ae | ||
| 
						 | 
					81d403e207 | ||
| 
						 | 
					2bd71d70ff | ||
| 
						 | 
					1eef6f44ba | ||
| 
						 | 
					204f03912f | ||
| 
						 | 
					f8c3b3aa18 | ||
| 
						 | 
					d4df981463 | ||
| 
						 | 
					497c6d516d | ||
| 
						 | 
					8288862b7e | ||
| 
						 | 
					9aae16c236 | ||
| 
						 | 
					80c194a70a | ||
| 
						 | 
					c832b2db5b | ||
| 
						 | 
					27018882ec | ||
| 
						 | 
					caf6e9c540 | ||
| 
						 | 
					e727fb82f2 | ||
| 
						 | 
					c78df56801 | ||
| 
						 | 
					d13202f43b | ||
| 
						 | 
					9d139a6b35 | ||
| 
						 | 
					d2abe44e6f | ||
| 
						 | 
					bc67228576 | ||
| 
						 | 
					ecf32c964a | ||
| 
						 | 
					e58f30b82a | ||
| 
						 | 
					654e3f1101 | ||
| 
						 | 
					86689dc524 | ||
| 
						 | 
					5f62a0c1ca | ||
| 
						 | 
					ad1bf0f389 | ||
| 
						 | 
					9c7703ace1 | ||
| 
						 | 
					4a8155b53c | ||
| 
						 | 
					80d6d5c5c4 | ||
| 
						 | 
					c624be8388 | ||
| 
						 | 
					09df1cd41e | ||
| 
						 | 
					52c5b57200 | ||
| 
						 | 
					5ea04a852e | ||
| 
						 | 
					a2eef05198 | ||
| 
						 | 
					55f75af353 | ||
| 
						 | 
					fb6a51b8fd | ||
| 
						 | 
					252cc2213e | ||
| 
						 | 
					73c5f24fa4 | ||
| 
						 | 
					4c80e103a0 | ||
| 
						 | 
					39ea557360 | ||
| 
						 | 
					d0cc92a01a | ||
| 
						 | 
					d7980c1a45 | ||
| 
						 | 
					e56ae1426c | ||
| 
						 | 
					696843c020 | ||
| 
						 | 
					6ff5621dd7 | ||
| 
						 | 
					e7fb72a732 | ||
| 
						 | 
					8d30d34e0c | ||
| 
						 | 
					bc7fe85f8a | ||
| 
						 | 
					89352d92c5 | ||
| 
						 | 
					c32390d84c | ||
| 
						 | 
					45ca866a2d | ||
| 
						 | 
					ceef206c21 | ||
| 
						 | 
					7c6424f0a9 | ||
| 
						 | 
					bc942de6f1 | ||
| 
						 | 
					06984df5cb | ||
| 
						 | 
					4f136a3a76 | ||
| 
						 | 
					363bf3ba30 | ||
| 
						 | 
					acb895956a | ||
| 
						 | 
					21e87b9bb3 | ||
| 
						 | 
					c896ebcf12 | ||
| 
						 | 
					d288222e80 | ||
| 
						 | 
					4eb2a6c9a3 | ||
| 
						 | 
					2563731c4d | ||
| 
						 | 
					4e410111db | ||
| 
						 | 
					5670563a26 | ||
| 
						 | 
					6caa656d01 | ||
| 
						 | 
					c12af7aed1 | ||
| 
						 | 
					dcb6d1c01d | ||
| 
						 | 
					18234cbdac | ||
| 
						 | 
					06bf988dc1 | ||
| 
						 | 
					55ff4c3f08 | ||
| 
						 | 
					4915002168 | ||
| 
						 | 
					5bd8d60e41 | ||
| 
						 | 
					fc872808c5 | ||
| 
						 | 
					0f4feda382 | ||
| 
						 | 
					90b0f38316 | ||
| 
						 | 
					18f630ab21 | ||
| 
						 | 
					e97fd44151 | ||
| 
						 | 
					b75679778f | ||
| 
						 | 
					35a84ad576 | ||
| 
						 | 
					4ed28be75a | ||
| 
						 | 
					e2f4656a86 | ||
| 
						 | 
					1e14da5c60 | ||
| 
						 | 
					b2ef79ef3d | ||
| 
						 | 
					f488874ff5 | ||
| 
						 | 
					23258648da | ||
| 
						 | 
					6b84ebe501 | ||
| 
						 | 
					07dd067f73 | ||
| 
						 | 
					420744d048 | ||
| 
						 | 
					01108e3a63 | ||
| 
						 | 
					8026b1e194 | ||
| 
						 | 
					a39d77227f | ||
| 
						 | 
					9f69deec7d | ||
| 
						 | 
					e912f772e0 | ||
| 
						 | 
					0102726aeb | ||
| 
						 | 
					1e7aa04040 | ||
| 
						 | 
					00a7c6fe6b | ||
| 
						 | 
					87f8c0d471 | ||
| 
						 | 
					334d78cd18 | ||
| 
						 | 
					2356325592 | ||
| 
						 | 
					d78ec593fa | ||
| 
						 | 
					d5043133e6 | ||
| 
						 | 
					509f69a457 | ||
| 
						 | 
					662c659220 | ||
| 
						 | 
					9a6566e774 | ||
| 
						 | 
					4da0428d9e | ||
| 
						 | 
					8ee1177206 | ||
| 
						 | 
					e9154b2549 | ||
| 
						 | 
					d398a0dd58 | ||
| 
						 | 
					7723a24297 | ||
| 
						 | 
					95a4b8db68 | ||
| 
						 | 
					663c1898a3 | ||
| 
						 | 
					465de793e8 | ||
| 
						 | 
					de9b76cef0 | ||
| 
						 | 
					1747a8d3d9 | ||
| 
						 | 
					1094e79749 | ||
| 
						 | 
					22569681bc | ||
| 
						 | 
					e615d117a0 | ||
| 
						 | 
					a51258b6bb | ||
| 
						 | 
					8894bd07b6 | ||
| 
						 | 
					ec45a9e825 | ||
| 
						 | 
					871358a6e5 | ||
| 
						 | 
					2e2e0fba60 | ||
| 
						 | 
					4a5139e3f4 | ||
| 
						 | 
					8f85933d7c | ||
| 
						 | 
					246f3a63f6 | ||
| 
						 | 
					e99eff4eb0 | ||
| 
						 | 
					c0197f19cf | ||
| 
						 | 
					3994d67eea | ||
| 
						 | 
					9ead79c9d4 | ||
| 
						 | 
					9371aed46c | ||
| 
						 | 
					940707ad66 | ||
| 
						 | 
					e6c267fb4c | ||
| 
						 | 
					93538fccd6 | ||
| 
						 | 
					83a7fad308 | ||
| 
						 | 
					3c7e33388e | ||
| 
						 | 
					7b0f35edb6 | ||
| 
						 | 
					94a157d0b0 | ||
| 
						 | 
					ca04620253 | ||
| 
						 | 
					073ef0b36a | ||
| 
						 | 
					c41c05d4f4 | ||
| 
						 | 
					f1ea54e07a | ||
| 
						 | 
					a139ce901a | ||
| 
						 | 
					7431957113 | ||
| 
						 | 
					1752d80915 | ||
| 
						 | 
					aa7420e109 | ||
| 
						 | 
					a290d4b9db | ||
| 
						 | 
					19a4314e7f | ||
| 
						 | 
					d166e85e0a | ||
| 
						 | 
					f213e857ab | ||
| 
						 | 
					eb6130baa7 | ||
| 
						 | 
					f69ea2c68a | ||
| 
						 | 
					078441d477 | ||
| 
						 | 
					95f6b15a67 | ||
| 
						 | 
					ee29dbdb8f | ||
| 
						 | 
					15f3f4c93f | ||
| 
						 | 
					6932e94e0e | ||
| 
						 | 
					3ef06d7efe | ||
| 
						 | 
					fb012b48e9 | ||
| 
						 | 
					bc77bf217f | ||
| 
						 | 
					37d1e9351e | ||
| 
						 | 
					4494c0dee0 | ||
| 
						 | 
					26afc604ac | ||
| 
						 | 
					9aefcada19 | ||
| 
						 | 
					69fc363760 | ||
| 
						 | 
					bea02ddebe | ||
| 
						 | 
					3fb257c39c | ||
| 
						 | 
					7c96c5a39b | ||
| 
						 | 
					efd836d971 | ||
| 
						 | 
					836aaa1647 | ||
| 
						 | 
					bf2b3dbf3e | ||
| 
						 | 
					b4fa2ff995 | ||
| 
						 | 
					2f9cabc30b | ||
| 
						 | 
					63593f5597 | ||
| 
						 | 
					c0acaa5d2c | ||
| 
						 | 
					2e46f8d0a6 | ||
| 
						 | 
					51da6aaa07 | ||
| 
						 | 
					c8b79e36db | ||
| 
						 | 
					208374bcc9 | ||
| 
						 | 
					7f0a6e7203 | ||
| 
						 | 
					54ebb9cfd4 | ||
| 
						 | 
					49e9c1495b | ||
| 
						 | 
					a84b0fbd52 | ||
| 
						 | 
					c95814c04d | ||
| 
						 | 
					9f8123f1b8 | ||
| 
						 | 
					8b23db4f4d | ||
| 
						 | 
					d77cc13374 | ||
| 
						 | 
					9a12db1aa2 | ||
| 
						 | 
					eb54d34bec | ||
| 
						 | 
					4b1203d4c9 | ||
| 
						 | 
					183a9c6244 | ||
| 
						 | 
					1f2294d585 | ||
| 
						 | 
					0b839c4f77 | ||
| 
						 | 
					1d4fd1fcae | ||
| 
						 | 
					b1d8d72c16 | ||
| 
						 | 
					bafb68b844 | ||
| 
						 | 
					21873b52e9 | ||
| 
						 | 
					0aa8b82871 | ||
| 
						 | 
					f9781afafd | ||
| 
						 | 
					fece361a55 | ||
| 
						 | 
					7b51b2f128 | ||
| 
						 | 
					22d88fb28e | ||
| 
						 | 
					f7c5b28e76 | ||
| 
						 | 
					5760f2a307 | ||
| 
						 | 
					ee46efb5a5 | ||
| 
						 | 
					eb6ffebfc7 | ||
| 
						 | 
					c06c44f286 | ||
| 
						 | 
					019c4088cf | ||
| 
						 | 
					0b0a88b78d | ||
| 
						 | 
					028e9cc56f | ||
| 
						 | 
					e0d8615ece | ||
| 
						 | 
					c8ecbda40b | ||
| 
						 | 
					2324c10d43 | ||
| 
						 | 
					89cfa76291 | ||
| 
						 | 
					072070a22c | ||
| 
						 | 
					3c3ad134ea | ||
| 
						 | 
					a4ffcfd4d5 | ||
| 
						 | 
					136670c58a | ||
| 
						 | 
					28169725fa | ||
| 
						 | 
					5b13106f54 | ||
| 
						 | 
					1a2db0dfb1 | ||
| 
						 | 
					696f95bb0a | ||
| 
						 | 
					acec588fe3 | ||
| 
						 | 
					6ed0da8e98 | ||
| 
						 | 
					7fd91d70bd | ||
| 
						 | 
					61788a0389 | ||
| 
						 | 
					0821447b5b | ||
| 
						 | 
					3cba274ba6 | ||
| 
						 | 
					df7bbcfd21 | ||
| 
						 | 
					021d406f0c | ||
| 
						 | 
					294569c502 | ||
| 
						 | 
					bfd00ac2ed | ||
| 
						 | 
					735a4714f4 | ||
| 
						 | 
					827fd47198 | ||
| 
						 | 
					e26b917661 | ||
| 
						 | 
					92872a2a3c | ||
| 
						 | 
					16ddb09cb4 | ||
| 
						 | 
					d37031f14e | ||
| 
						 | 
					b4e84ca7d2 | ||
| 
						 | 
					47970b9e6f | ||
| 
						 | 
					f65f120d50 | ||
| 
						 | 
					df00ec3c82 | ||
| 
						 | 
					ad6fca28f9 | ||
| 
						 | 
					fd33923496 | ||
| 
						 | 
					a55649dc82 | ||
| 
						 | 
					9558f229db | ||
| 
						 | 
					7917bfb1c9 | ||
| 
						 | 
					25f611ca42 | ||
| 
						 | 
					e6eb49e7e0 | ||
| 
						 | 
					9a075f53dc | ||
| 
						 | 
					4b3f800c03 | ||
| 
						 | 
					82bc76b243 | ||
| 
						 | 
					18b9b04907 | ||
| 
						 | 
					87f1f08b36 | ||
| 
						 | 
					7d7ebbe9f7 | ||
| 
						 | 
					5111ce782f | ||
| 
						 | 
					20b0e563ce | ||
| 
						 | 
					8b6cf239a3 | ||
| 
						 | 
					bcc285cffd | ||
| 
						 | 
					d5ba030942 | ||
| 
						 | 
					803f43592a | ||
| 
						 | 
					904b9ccaa3 | ||
| 
						 | 
					89721ff04a | ||
| 
						 | 
					6164823921 | ||
| 
						 | 
					f8b3c47f99 | ||
| 
						 | 
					56dd2da962 | ||
| 
						 | 
					68bb74d172 | ||
| 
						 | 
					bf5e12c8e0 | ||
| 
						 | 
					de11f5e53a | ||
| 
						 | 
					b125e8e23a | ||
| 
						 | 
					b28b616eb2 | ||
| 
						 | 
					4534ca238d | ||
| 
						 | 
					cee0e94294 | ||
| 
						 | 
					8319ea7078 | ||
| 
						 | 
					5334a58f9b | ||
| 
						 | 
					2616bdc4cd | ||
| 
						 | 
					c149b3f797 | ||
| 
						 | 
					d349eb3d43 | ||
| 
						 | 
					9b43ade1c0 | ||
| 
						 | 
					ad05d0a8d9 | ||
| 
						 | 
					e6bfbe9683 | ||
| 
						 | 
					c871efca4b | ||
| 
						 | 
					12c72b419c | ||
| 
						 | 
					a15b7691ca | ||
| 
						 | 
					01618d323b | ||
| 
						 | 
					bb6d0e37e3 | ||
| 
						 | 
					24a6100897 | ||
| 
						 | 
					0251563c98 | ||
| 
						 | 
					72673a351b | ||
| 
						 | 
					96b7131844 | ||
| 
						 | 
					dcc2f16416 | ||
| 
						 | 
					c2b8a04000 | ||
| 
						 | 
					d65587b06c | ||
| 
						 | 
					1ab0134522 | ||
| 
						 | 
					afffce80f0 | ||
| 
						 | 
					70b80b0160 | ||
| 
						 | 
					64067a04b5 | ||
| 
						 | 
					38cf0268c0 | ||
| 
						 | 
					2d2034703f | ||
| 
						 | 
					571ceeff90 | ||
| 
						 | 
					34c4ba4321 | ||
| 
						 | 
					babb372eb9 | ||
| 
						 | 
					5b9b82c1cd | ||
| 
						 | 
					075c534270 | ||
| 
						 | 
					f317f8b149 | ||
| 
						 | 
					f8d552dde5 | ||
| 
						 | 
					606f72bb13 | ||
| 
						 | 
					327e6a2b4f | ||
| 
						 | 
					be8f6c7f5c | ||
| 
						 | 
					073448e0ea | ||
| 
						 | 
					f136f435b5 | ||
| 
						 | 
					ebea6b487b | ||
| 
						 | 
					e5b7dc56e6 | ||
| 
						 | 
					c2d8025a0a | ||
| 
						 | 
					853e240e1d | ||
| 
						 | 
					8755a6d1ac | ||
| 
						 | 
					9f723061cb | ||
| 
						 | 
					652683fc04 | ||
| 
						 | 
					83a463891d | ||
| 
						 | 
					957b618fdc | ||
| 
						 | 
					ebe5191b63 | ||
| 
						 | 
					c426234df7 | ||
| 
						 | 
					8c3a10392e | ||
| 
						 | 
					d0e44946e9 | ||
| 
						 | 
					46a593d968 | ||
| 
						 | 
					eb0cc34951 | ||
| 
						 | 
					1c7dfda4bc | ||
| 
						 | 
					3c0e4a2fa1 | ||
| 
						 | 
					c753072ae1 | ||
| 
						 | 
					243942a7aa | ||
| 
						 | 
					8d5ac8b43c | ||
| 
						 | 
					17962b3d2e | ||
| 
						 | 
					f70acd5979 | ||
| 
						 | 
					ffe5c46224 | ||
| 
						 | 
					3242ea5f66 | ||
| 
						 | 
					39a282bffc | ||
| 
						 | 
					29583004ce | ||
| 
						 | 
					0a1a185874 | ||
| 
						 | 
					8f809e2a93 | ||
| 
						 | 
					f216059b49 | ||
| 
						 | 
					9121b1f41d | ||
| 
						 | 
					60e015d0c1 | ||
| 
						 | 
					7e049fca61 | ||
| 
						 | 
					0f0e4de6a4 | ||
| 
						 | 
					bc1102922b | ||
| 
						 | 
					a3d3642a30 | ||
| 
						 | 
					248eb47329 | ||
| 
						 | 
					52ebf50607 | ||
| 
						 | 
					d34a4b126e | ||
| 
						 | 
					de96719a45 | ||
| 
						 | 
					9876ed09fe | ||
| 
						 | 
					17cbbe3dc5 | ||
| 
						 | 
					b995af17eb | ||
| 
						 | 
					6589579850 | ||
| 
						 | 
					5ddc260fc2 | ||
| 
						 | 
					db5c9cd4c0 | ||
| 
						 | 
					9b6d010aef | ||
| 
						 | 
					065b87e949 | ||
| 
						 | 
					a6206a3aef | ||
| 
						 | 
					30639ed72b | ||
| 
						 | 
					9d02a39e13 | ||
| 
						 | 
					fc0af0d4d1 | ||
| 
						 | 
					a683416081 | ||
| 
						 | 
					9faf57ee8d | ||
| 
						 | 
					44b9ccb7e2 | ||
| 
						 | 
					de003d9cf8 | ||
| 
						 | 
					8a2a523c70 | ||
| 
						 | 
					c3dfe50aaf | ||
| 
						 | 
					9659d862c7 | ||
| 
						 | 
					69ab4cd391 | ||
| 
						 | 
					498f3985b3 | ||
| 
						 | 
					977175d4fd | ||
| 
						 | 
					3ddc7b9390 | ||
| 
						 | 
					10e9bf623f | ||
| 
						 | 
					48a5c64e94 | ||
| 
						 | 
					140606ccd5 | ||
| 
						 | 
					f56d006f93 | ||
| 
						 | 
					beb13a1d3e | ||
| 
						 | 
					fa47138327 | ||
| 
						 | 
					9421d4510a | ||
| 
						 | 
					ff8abfca85 | ||
| 
						 | 
					5c858965b8 | ||
| 
						 | 
					e3f83cb17a | ||
| 
						 | 
					de6008e01a | ||
| 
						 | 
					6417e696df | ||
| 
						 | 
					5d28f3781b | ||
| 
						 | 
					10026bb62e | ||
| 
						 | 
					21c16f923c | ||
| 
						 | 
					32cef52f0d | ||
| 
						 | 
					e7dd7c54ff | ||
| 
						 | 
					b0b50bd12a | ||
| 
						 | 
					f2c6057490 | ||
| 
						 | 
					169b2eeb94 | ||
| 
						 | 
					f81d027f60 | ||
| 
						 | 
					872eeb7339 | ||
| 
						 | 
					7f67a28c2a | ||
| 
						 | 
					30a46e1135 | ||
| 
						 | 
					3a01478ce8 | ||
| 
						 | 
					53d71fab60 | ||
| 
						 | 
					be891f112c | ||
| 
						 | 
					89934239d7 | ||
| 
						 | 
					8986037fdd | ||
| 
						 | 
					a7c72b7abf | ||
| 
						 | 
					409ac80710 | ||
| 
						 | 
					fc7bebdf55 | ||
| 
						 | 
					ca52549557 | ||
| 
						 | 
					8948a65654 | ||
| 
						 | 
					b4e33cfcc7 | ||
| 
						 | 
					86742e8334 | ||
| 
						 | 
					173b35eaf8 | ||
| 
						 | 
					2b054e5309 | ||
| 
						 | 
					a302ff1605 | ||
| 
						 | 
					f7bb4e6138 | ||
| 
						 | 
					5c5489916b | ||
| 
						 | 
					5627cf7167 | ||
| 
						 | 
					c05dae4a68 | ||
| 
						 | 
					57e61e3743 | ||
| 
						 | 
					a6c395c156 | ||
| 
						 | 
					543e0b1e0f | ||
| 
						 | 
					64b0ff875f | ||
| 
						 | 
					a034208a00 | ||
| 
						 | 
					5f1251586b | ||
| 
						 | 
					6f6cffdc32 | ||
| 
						 | 
					21a98ef264 | ||
| 
						 | 
					aa90436435 | ||
| 
						 | 
					61225052f9 | ||
| 
						 | 
					dee3163d95 | ||
| 
						 | 
					8b0668b99e | ||
| 
						 | 
					8471a82c85 | ||
| 
						 | 
					ed4dff63b9 | ||
| 
						 | 
					838e776542 | ||
| 
						 | 
					39c12790bc | ||
| 
						 | 
					126e6d6645 | ||
| 
						 | 
					5796a1b282 | ||
| 
						 | 
					90982529fc | ||
| 
						 | 
					aba51d6b60 | ||
| 
						 | 
					49bc4567bb | ||
| 
						 | 
					2ac52705c6 | ||
| 
						 | 
					d0eb56dd97 | ||
| 
						 | 
					b9c60df04b | ||
| 
						 | 
					8c236e4dfa | ||
| 
						 | 
					154a59f21f | ||
| 
						 | 
					9689e1c548 | ||
| 
						 | 
					5a83976c99 | ||
| 
						 | 
					b5276a9a69 | ||
| 
						 | 
					30377baa5e | ||
| 
						 | 
					aa8b7dd336 | ||
| 
						 | 
					f26a338a54 | ||
| 
						 | 
					c4383f1d99 | ||
| 
						 | 
					4527995e66 | ||
| 
						 | 
					b0fbb98f41 | ||
| 
						 | 
					63667dfd96 | ||
| 
						 | 
					77c388c928 | ||
| 
						 | 
					a69b814ded | ||
| 
						 | 
					c51ada766d | ||
| 
						 | 
					ef2709f97c | ||
| 
						 | 
					bf9b9ca29d | ||
| 
						 | 
					64f224bb22 | ||
| 
						 | 
					285a8fe4d0 | ||
| 
						 | 
					3773d76dfd | ||
| 
						 | 
					94c5c7bd6d | ||
| 
						 | 
					12cfc4c0b0 | ||
| 
						 | 
					9a2de6e6ee | ||
| 
						 | 
					2ede47b8c8 | ||
| 
						 | 
					76e107506f | ||
| 
						 | 
					6f35ed51dc | ||
| 
						 | 
					c94ba66310 | ||
| 
						 | 
					a15133f5cf | ||
| 
						 | 
					cc09e9d4c2 | ||
| 
						 | 
					16e0da2c4b | ||
| 
						 | 
					ed22f75241 | ||
| 
						 | 
					ba25cad6e2 | ||
| 
						 | 
					abb01123cb | ||
| 
						 | 
					e2d249f8c5 | ||
| 
						 | 
					4a2ac166fa | ||
| 
						 | 
					5fab55383d | ||
| 
						 | 
					f152f23a68 | ||
| 
						 | 
					24e78b3571 | ||
| 
						 | 
					9a239edb52 | ||
| 
						 | 
					abcc5c5a82 | ||
| 
						 | 
					cb5ba675a7 | ||
| 
						 | 
					2288086695 | ||
| 
						 | 
					61421b7a8f | ||
| 
						 | 
					6a7e53a7c7 | ||
| 
						 | 
					ca134d5522 | ||
| 
						 | 
					ec24efda74 | ||
| 
						 | 
					7f0f10e498 | ||
| 
						 | 
					aa5af100b4 | ||
| 
						 | 
					37ae32f688 | ||
| 
						 | 
					d0cffdec5d | ||
| 
						 | 
					0f34521612 | ||
| 
						 | 
					e69362df22 | ||
| 
						 | 
					3de8f6f38e | ||
| 
						 | 
					5359bc8083 | ||
| 
						 | 
					eb6a14fe10 | ||
| 
						 | 
					2912537533 | ||
| 
						 | 
					cfb32da198 | ||
| 
						 | 
					9b4f92130f | ||
| 
						 | 
					5a2ab686a6 | ||
| 
						 | 
					3b8583b014 | ||
| 
						 | 
					ed29552b1e | ||
| 
						 | 
					a2ada3cf96 | ||
| 
						 | 
					88825a1187 | ||
| 
						 | 
					264e7fc58b | ||
| 
						 | 
					1698015e3c | ||
| 
						 | 
					39dc14c002 | ||
| 
						 | 
					04c499a5fc | ||
| 
						 | 
					efbe930a69 | ||
| 
						 | 
					747f87f61e | ||
| 
						 | 
					5a4c56fc44 | ||
| 
						 | 
					81f45ba92a | ||
| 
						 | 
					a5dc4e32f2 | ||
| 
						 | 
					2b839853ec | ||
| 
						 | 
					66b6cd68ed | ||
| 
						 | 
					0ef3d90838 | ||
| 
						 | 
					5cc50f9b27 | ||
| 
						 | 
					e879e26a5b | ||
| 
						 | 
					96d84150e1 | ||
| 
						 | 
					2aa0c6c488 | ||
| 
						 | 
					811138386f | ||
| 
						 | 
					c433cf7459 | ||
| 
						 | 
					e0d6ebc2f2 | ||
| 
						 | 
					4938991ab8 | ||
| 
						 | 
					13722f536e | ||
| 
						 | 
					57f0e3292d | ||
| 
						 | 
					da5ae565ab | ||
| 
						 | 
					87c5066242 | ||
| 
						 | 
					b528bde470 | ||
| 
						 | 
					57572e550f | ||
| 
						 | 
					3aea0d3d68 | ||
| 
						 | 
					9ae920c1b6 | ||
| 
						 | 
					dff406a360 | ||
| 
						 | 
					d346ba5c3c | ||
| 
						 | 
					978541adc2 | ||
| 
						 | 
					637bce2707 | ||
| 
						 | 
					07e3dc2ee2 | ||
| 
						 | 
					ead065d803 | ||
| 
						 | 
					0150bff7b4 | ||
| 
						 | 
					0f493b6038 | ||
| 
						 | 
					f26b709c50 | ||
| 
						 | 
					ae10d9cf22 | ||
| 
						 | 
					81af9674ed | ||
| 
						 | 
					b63df7991a | ||
| 
						 | 
					a79990465c | ||
| 
						 | 
					ad6bd530ac | ||
| 
						 | 
					c1b369fd4c | ||
| 
						 | 
					01fcd3c2d5 | ||
| 
						 | 
					7196d784d3 | ||
| 
						 | 
					0f0aaf51e0 | ||
| 
						 | 
					b5f493c55a | ||
| 
						 | 
					0aa031beb9 | ||
| 
						 | 
					db6ff224f8 | ||
| 
						 | 
					b3c7cd61f3 | ||
| 
						 | 
					9ae05c4d91 | ||
| 
						 | 
					264e6f6efd | ||
| 
						 | 
					ec7bccf671 | ||
| 
						 | 
					49f75ee8ce | ||
| 
						 | 
					4bcc866c52 | ||
| 
						 | 
					c65e088caf | ||
| 
						 | 
					6ca4116555 | ||
| 
						 | 
					f6cdb820af | ||
| 
						 | 
					081e5a82ff | ||
| 
						 | 
					2ad2a4bd9f | ||
| 
						 | 
					645e700da3 | ||
| 
						 | 
					92aea29a30 | ||
| 
						 | 
					e1c01af929 | ||
| 
						 | 
					7ef749497d | ||
| 
						 | 
					d72aa49126 | ||
| 
						 | 
					e92bd312ec | ||
| 
						 | 
					b097c2cfb0 | ||
| 
						 | 
					a39cdc80b7 | ||
| 
						 | 
					a47250810e | ||
| 
						 | 
					1f50f3031f | ||
| 
						 | 
					75145dd753 | ||
| 
						 | 
					d0b97f7e1f | ||
| 
						 | 
					199a0311e2 | ||
| 
						 | 
					fa446f860f | ||
| 
						 | 
					7a74303f3c | ||
| 
						 | 
					7d9eabb981 | ||
| 
						 | 
					ff5308a5af | ||
| 
						 | 
					3f8ba3a986 | ||
| 
						 | 
					4a555de1b2 | ||
| 
						 | 
					d27e4a08f9 | ||
| 
						 | 
					bf678a1ca9 | ||
| 
						 | 
					13a903de28 | ||
| 
						 | 
					a3c14c031e | ||
| 
						 | 
					e90d528026 | ||
| 
						 | 
					d64dd77993 | ||
| 
						 | 
					113850a748 | ||
| 
						 | 
					1c49a00d64 | ||
| 
						 | 
					eef6c83503 | ||
| 
						 | 
					ceb5648eb7 | ||
| 
						 | 
					a0eadb76ea | ||
| 
						 | 
					065852e46c | ||
| 
						 | 
					e5e2fb8274 | ||
| 
						 | 
					0210b3c893 | ||
| 
						 | 
					7df5677b46 | ||
| 
						 | 
					2e71876b28 | ||
| 
						 | 
					11576b1142 | ||
| 
						 | 
					ce011b8a2d | ||
| 
						 | 
					12cfb4f7ee | ||
| 
						 | 
					9e1123debe | ||
| 
						 | 
					c7354142c0 | ||
| 
						 | 
					dee84f448f | ||
| 
						 | 
					1607711603 | ||
| 
						 | 
					8bca5e05b8 | ||
| 
						 | 
					f68505ee23 | ||
| 
						 | 
					d2174da641 | ||
| 
						 | 
					255b1e68d0 | ||
| 
						 | 
					fbee6b87f5 | ||
| 
						 | 
					3836a70f97 | ||
| 
						 | 
					e0ec9fa294 | ||
| 
						 | 
					80fe50590f | ||
| 
						 | 
					ae18d1c55a | ||
| 
						 | 
					75194373e0 | ||
| 
						 | 
					f3875048f6 | ||
| 
						 | 
					210af986ad | ||
| 
						 | 
					c03044f492 | ||
| 
						 | 
					522b85ae21 | ||
| 
						 | 
					208e56dbe9 | ||
| 
						 | 
					42acb00c81 | ||
| 
						 | 
					ca6e770837 | ||
| 
						 | 
					775968003c | ||
| 
						 | 
					323d3e9b5d | ||
| 
						 | 
					16f9755e73 | ||
| 
						 | 
					66eb98bb0a | ||
| 
						 | 
					299546f5c0 | ||
| 
						 | 
					7be9b4c418 | ||
| 
						 | 
					03c22b4576 | ||
| 
						 | 
					ef749fa9ce | ||
| 
						 | 
					a23c92596e | ||
| 
						 | 
					abb1497c98 | ||
| 
						 | 
					7a8594da43 | ||
| 
						 | 
					cbf28daed9 | ||
| 
						 | 
					0ff1ca30c3 | ||
| 
						 | 
					2cff251863 | ||
| 
						 | 
					73d996bf26 | ||
| 
						 | 
					5bc78cb724 | ||
| 
						 | 
					cdba92ac3c | ||
| 
						 | 
					6d28f92ffe | ||
| 
						 | 
					01387f42c5 | ||
| 
						 | 
					8f52b731f4 | ||
| 
						 | 
					d442088ed3 | ||
| 
						 | 
					22a323890a | ||
| 
						 | 
					163bba1410 | ||
| 
						 | 
					db1c618fcf | ||
| 
						 | 
					01bdfa7b6d | ||
| 
						 | 
					6a88c8d845 | ||
| 
						 | 
					b8a6913e09 | ||
| 
						 | 
					744d8c1006 | ||
| 
						 | 
					c2e2c98d81 | ||
| 
						 | 
					3fa353a2d3 | ||
| 
						 | 
					c27c9f80d2 | ||
| 
						 | 
					b5a74715cf | ||
| 
						 | 
					13ee2901f4 | ||
| 
						 | 
					32c03eadd6 | ||
| 
						 | 
					0fa512f26d | ||
| 
						 | 
					219d88518c | ||
| 
						 | 
					ecf3aee43a | ||
| 
						 | 
					7f08cab73e | ||
| 
						 | 
					c4e9ef199e | ||
| 
						 | 
					9e612b5550 | ||
| 
						 | 
					203633d34d | ||
| 
						 | 
					45bd009bb1 | ||
| 
						 | 
					ee656415c4 | ||
| 
						 | 
					156aad198f | ||
| 
						 | 
					b1ffb79a50 | ||
| 
						 | 
					d6654bfe00 | ||
| 
						 | 
					eefdd67d22 | ||
| 
						 | 
					86a86d7afd | ||
| 
						 | 
					b6dac2b484 | ||
| 
						 | 
					e6367abae9 | ||
| 
						 | 
					fc4d1d9a60 | ||
| 
						 | 
					94bae20776 | ||
| 
						 | 
					bb8c8d273c | ||
| 
						 | 
					ee600ace37 | ||
| 
						 | 
					da86e32eb4 | ||
| 
						 | 
					b5bbc04ad1 | ||
| 
						 | 
					265c58611f | ||
| 
						 | 
					25c973a39e | ||
| 
						 | 
					123c7b32db | ||
| 
						 | 
					e2d8e2c4ae | ||
| 
						 | 
					701509d322 | ||
| 
						 | 
					c3cc616264 | ||
| 
						 | 
					91b84b89e4 | ||
| 
						 | 
					017ec204a9 | ||
| 
						 | 
					8dbfecd153 | ||
| 
						 | 
					512db1bc54 | ||
| 
						 | 
					e157aabd4d | ||
| 
						 | 
					db2fea448c | ||
| 
						 | 
					dd82d69b8c | ||
| 
						 | 
					27328281b7 | ||
| 
						 | 
					51d205b267 | ||
| 
						 | 
					84800914f6 | ||
| 
						 | 
					9b296e65bd | ||
| 
						 | 
					5f649a1649 | ||
| 
						 | 
					daea056210 | ||
| 
						 | 
					30c0db06bd | ||
| 
						 | 
					91168c005c | ||
| 
						 | 
					cfa0054077 | ||
| 
						 | 
					3d5820648b | ||
| 
						 | 
					d08df97fe5 | ||
| 
						 | 
					fd6624a058 | ||
| 
						 | 
					8aa41dd04b | ||
| 
						 | 
					e890113fc6 | ||
| 
						 | 
					e2e64798b5 | ||
| 
						 | 
					b9b6a6566a | ||
| 
						 | 
					dc9e415602 | ||
| 
						 | 
					84fa12c885 | ||
| 
						 | 
					296b35fe9b | ||
| 
						 | 
					0ff89b9c3c | ||
| 
						 | 
					3b33540c99 | ||
| 
						 | 
					29d0174253 | ||
| 
						 | 
					cc7f2a0d08 | ||
| 
						 | 
					b1579aed2f | ||
| 
						 | 
					9247daf953 | ||
| 
						 | 
					9031e33b66 | ||
| 
						 | 
					1ee1f5f427 | ||
| 
						 | 
					a5874a5393 | ||
| 
						 | 
					969217c9d9 | ||
| 
						 | 
					e399502c7a | ||
| 
						 | 
					6883f0c49f | ||
| 
						 | 
					3fc2c813cc | ||
| 
						 | 
					9de4b99fc7 | ||
| 
						 | 
					24e7036822 | ||
| 
						 | 
					ec9acbcda7 | ||
| 
						 | 
					c0460660d5 | ||
| 
						 | 
					b03f4919fb | ||
| 
						 | 
					08620743b9 | ||
| 
						 | 
					41362f063a | ||
| 
						 | 
					5b3069e265 | ||
| 
						 | 
					b466924717 | ||
| 
						 | 
					cbc0f65fa3 | ||
| 
						 | 
					35089a4289 | ||
| 
						 | 
					aef3131e92 | ||
| 
						 | 
					342fce97af | ||
| 
						 | 
					fb5d267bd0 | ||
| 
						 | 
					c19844a0a3 | ||
| 
						 | 
					22cf05519a | ||
| 
						 | 
					511ce35631 | ||
| 
						 | 
					e9b7548dd6 | ||
| 
						 | 
					010cde0a4a | ||
| 
						 | 
					cac5251a98 | ||
| 
						 | 
					3b825bcbfb | ||
| 
						 | 
					31959fb24b | ||
| 
						 | 
					5e9675ad1e | ||
| 
						 | 
					084b7675b2 | ||
| 
						 | 
					ed8be5bc55 | ||
| 
						 | 
					efca2943a0 | ||
| 
						 | 
					371da7132f | ||
| 
						 | 
					9a3ff5c46a | ||
| 
						 | 
					b36c654a3d | ||
| 
						 | 
					ddeb2613ec | ||
| 
						 | 
					2d02d20911 | ||
| 
						 | 
					b2563b9f9f | ||
| 
						 | 
					fccf6925b1 | ||
| 
						 | 
					4a7cf65064 | ||
| 
						 | 
					56587e2821 | ||
| 
						 | 
					33b8e71583 | ||
| 
						 | 
					1c96128695 | ||
| 
						 | 
					ca516b1b26 | ||
| 
						 | 
					ba4e69bebc | ||
| 
						 | 
					de5e9f100c | ||
| 
						 | 
					955da86a3e | ||
| 
						 | 
					8d85be4c5e | ||
| 
						 | 
					93eadfb10f | ||
| 
						 | 
					f8e0b18439 | ||
| 
						 | 
					64bbe9dfaf | ||
| 
						 | 
					2e8a9416af | ||
| 
						 | 
					5dd40bd0bb | ||
| 
						 | 
					1822dd0549 | ||
| 
						 | 
					751e49fb0a | ||
| 
						 | 
					56c43604d0 | ||
| 
						 | 
					7438c378be | ||
| 
						 | 
					0e0caf7c06 | ||
| 
						 | 
					5644f4a295 | ||
| 
						 | 
					98e1605b17 | ||
| 
						 | 
					73f0e32d1a | ||
| 
						 | 
					713cb56fea | ||
| 
						 | 
					bd3bb70ee8 | ||
| 
						 | 
					8aa3f14303 | ||
| 
						 | 
					ac285b453e | ||
| 
						 | 
					daf55705e4 | ||
| 
						 | 
					7140baae72 | ||
| 
						 | 
					27a2e590cd | ||
| 
						 | 
					7172fa058a | ||
| 
						 | 
					c0790ccf08 | ||
| 
						 | 
					87c43517cd | ||
| 
						 | 
					6561ec524b | ||
| 
						 | 
					982c5460f0 | ||
| 
						 | 
					2a3a8848f3 | ||
| 
						 | 
					752520e428 | ||
| 
						 | 
					8095b776fe | ||
| 
						 | 
					e504103e2c | ||
| 
						 | 
					904183262a | ||
| 
						 | 
					2a0bc64226 | ||
| 
						 | 
					6b975c308c | ||
| 
						 | 
					74be55a477 | ||
| 
						 | 
					394832c2d6 | ||
| 
						 | 
					f636c12255 | ||
| 
						 | 
					03e4a8214c | ||
| 
						 | 
					6d7785a35b | ||
| 
						 | 
					904f579332 | ||
| 
						 | 
					a72d789b08 | ||
| 
						 | 
					87ad7ace18 | ||
| 
						 | 
					35153eb524 | ||
| 
						 | 
					c8ee1fa62e | ||
| 
						 | 
					5c1a6ed719 | ||
| 
						 | 
					9d68fde148 | ||
| 
						 | 
					c7d517f6d2 | ||
| 
						 | 
					183f1531d3 | ||
| 
						 | 
					6dfe0ec31e | ||
| 
						 | 
					8b3f1cebda | ||
| 
						 | 
					086daf913c | ||
| 
						 | 
					6a3e2272e9 | ||
| 
						 | 
					d0e0bf53a6 | ||
| 
						 | 
					0009e4dfb9 | ||
| 
						 | 
					30b7a9f172 | ||
| 
						 | 
					c74cb59e08 | ||
| 
						 | 
					c1f29a8e08 | ||
| 
						 | 
					cb895ec335 | ||
| 
						 | 
					2df4866cfa | ||
| 
						 | 
					423a1cf486 | ||
| 
						 | 
					7aeb63c817 | ||
| 
						 | 
					476fa1f4d2 | ||
| 
						 | 
					0bea215560 | ||
| 
						 | 
					3c20b98d99 | ||
| 
						 | 
					8bcdda29d4 | ||
| 
						 | 
					c88036405f | ||
| 
						 | 
					60cddab4f2 | ||
| 
						 | 
					411ca1c050 | ||
| 
						 | 
					d1be3a4a1d | ||
| 
						 | 
					b5dd257427 | ||
| 
						 | 
					4cf953678d | ||
| 
						 | 
					ca5678c8c1 | ||
| 
						 | 
					9e4594be53 | ||
| 
						 | 
					d16c757c28 | ||
| 
						 | 
					312bcafd05 | ||
| 
						 | 
					be24652d4d | ||
| 
						 | 
					6ab44d9439 | ||
| 
						 | 
					108cb14d1f | ||
| 
						 | 
					b98308b524 | ||
| 
						 | 
					215c445583 | ||
| 
						 | 
					20d8e32a58 | ||
| 
						 | 
					33306b2749 | ||
| 
						 | 
					94eeeba79a | ||
| 
						 | 
					ecd29a289a | ||
| 
						 | 
					e7d0af72e3 | ||
| 
						 | 
					fcb1d3521a | ||
| 
						 | 
					890bf3bd27 | ||
| 
						 | 
					dafd81178f | ||
| 
						 | 
					99dfdebc64 | ||
| 
						 | 
					c1cfdd6323 | ||
| 
						 | 
					264a9bc6ed | ||
| 
						 | 
					f79f5cbf82 | ||
| 
						 | 
					7313501e30 | ||
| 
						 | 
					d8b2c819e7 | ||
| 
						 | 
					69f6d14b81 | ||
| 
						 | 
					9f3856e646 | ||
| 
						 | 
					a46e2e9900 | ||
| 
						 | 
					14f0dd2dd0 | ||
| 
						 | 
					c051438fa1 | ||
| 
						 | 
					52e32ac1d3 | ||
| 
						 | 
					7f8ad34ba2 | ||
| 
						 | 
					a9c0302454 | ||
| 
						 | 
					a33e89b44a | ||
| 
						 | 
					e203ecebee | ||
| 
						 | 
					2f8e7f56b3 | ||
| 
						 | 
					2443e1f38c | ||
| 
						 | 
					eb164098b7 | ||
| 
						 | 
					62527fa98a | ||
| 
						 | 
					b9f8e80b14 | ||
| 
						 | 
					b79e250ed2 | ||
| 
						 | 
					fc5c9d8f17 | ||
| 
						 | 
					72d57a8ee6 | ||
| 
						 | 
					23262e30bc | ||
| 
						 | 
					8b4ad40ed6 | ||
| 
						 | 
					d7e9797365 | ||
| 
						 | 
					e54e0c7877 | ||
| 
						 | 
					5cb06d8fd6 | ||
| 
						 | 
					2b34d4e1f7 | ||
| 
						 | 
					c7aa095fac | ||
| 
						 | 
					93f1784526 | ||
| 
						 | 
					559dc503c2 | ||
| 
						 | 
					414afe0935 | ||
| 
						 | 
					4ad4f3fc70 | ||
| 
						 | 
					67273eed9b | ||
| 
						 | 
					3c63e1d8d9 | ||
| 
						 | 
					cae555c977 | ||
| 
						 | 
					407583e8e2 | ||
| 
						 | 
					131645dc31 | ||
| 
						 | 
					dafd644fe7 | ||
| 
						 | 
					73cc1742af | ||
| 
						 | 
					87afd7686f | ||
| 
						 | 
					8ce10b5dfa | ||
| 
						 | 
					943e31b35c | ||
| 
						 | 
					20f85b94df | ||
| 
						 | 
					17b784381e | ||
| 
						 | 
					e3031fddb9 | ||
| 
						 | 
					38c994a7ae | ||
| 
						 | 
					85e2e96fb6 | ||
| 
						 | 
					be35b3ad03 | ||
| 
						 | 
					dbbd871ea1 | ||
| 
						 | 
					813911db59 | ||
| 
						 | 
					3c49b405de | ||
| 
						 | 
					4cfffd6c4a | ||
| 
						 | 
					e9f1c12f0f | ||
| 
						 | 
					4fe252847c | ||
| 
						 | 
					109cbbe9c5 | ||
| 
						 | 
					fd3881eaa6 | ||
| 
						 | 
					08ef208fb7 | ||
| 
						 | 
					8c45e2a641 | ||
| 
						 | 
					25dc520163 | ||
| 
						 | 
					fc37ef9e4b | ||
| 
						 | 
					11ba367fc9 | ||
| 
						 | 
					78473f71eb | ||
| 
						 | 
					8b77f40f99 | ||
| 
						 | 
					d866716565 | ||
| 
						 | 
					307d0effe2 | ||
| 
						 | 
					b47b053e54 | ||
| 
						 | 
					b79f01caf3 | ||
| 
						 | 
					0db227f55e | ||
| 
						 | 
					ac48b38842 | ||
| 
						 | 
					0cbb9365c6 | ||
| 
						 | 
					798b8c522b | ||
| 
						 | 
					15bc7e19f9 | ||
| 
						 | 
					0be3f1a063 | ||
| 
						 | 
					c0257c6721 | ||
| 
						 | 
					9aec0fc7de | ||
| 
						 | 
					bce5e0d82c | ||
| 
						 | 
					62032ee248 | ||
| 
						 | 
					775645f29b | ||
| 
						 | 
					99c0456872 | ||
| 
						 | 
					0236bee5de | ||
| 
						 | 
					59c11b82d5 | ||
| 
						 | 
					98871d1e9e | ||
| 
						 | 
					b40dc5d742 | ||
| 
						 | 
					17b0723713 | ||
| 
						 | 
					ec585e8907 | ||
| 
						 | 
					0aeb25ff3b | ||
| 
						 | 
					a928f2c4aa | ||
| 
						 | 
					51fcee6f81 | ||
| 
						 | 
					654be65590 | ||
| 
						 | 
					105ec79b2b | ||
| 
						 | 
					c759d8427a | ||
| 
						 | 
					c7b03d6479 | ||
| 
						 | 
					2080738883 | ||
| 
						 | 
					48bc73c271 | ||
| 
						 | 
					3d0969d1d1 | ||
| 
						 | 
					323f195036 | ||
| 
						 | 
					c3c392fc98 | ||
| 
						 | 
					5d2944c211 | ||
| 
						 | 
					fe3ba1dd11 | ||
| 
						 | 
					0c00eb93a0 | ||
| 
						 | 
					baa77ec13b | ||
| 
						 | 
					9263652c6d | ||
| 
						 | 
					bc74375543 | ||
| 
						 | 
					edb1756050 | ||
| 
						 | 
					5215f6f654 | ||
| 
						 | 
					1913b4eeed | ||
| 
						 | 
					b44a4da5df | ||
| 
						 | 
					919878fbb2 | ||
| 
						 | 
					06bdf83419 | ||
| 
						 | 
					2ff2810a92 | ||
| 
						 | 
					20d9c1b30d | ||
| 
						 | 
					bbe10cb0cb | ||
| 
						 | 
					daba8f3a70 | ||
| 
						 | 
					1458c3668d | ||
| 
						 | 
					980a47b42b | ||
| 
						 | 
					f7ca561b06 | ||
| 
						 | 
					cacd756efd | ||
| 
						 | 
					8539e76cb9 | ||
| 
						 | 
					3bbf694d5a | ||
| 
						 | 
					44debdde62 | ||
| 
						 | 
					c6cf2b8e93 | ||
| 
						 | 
					69c5452b25 | ||
| 
						 | 
					d321056e8d | ||
| 
						 | 
					d9a1a59f22 | ||
| 
						 | 
					0b898b5a8a | ||
| 
						 | 
					a9e0885be0 | ||
| 
						 | 
					57ff28c9b7 | ||
| 
						 | 
					86cc34c0de | ||
| 
						 | 
					39028f1bd4 | ||
| 
						 | 
					71f4c05665 | ||
| 
						 | 
					9ef9797998 | ||
| 
						 | 
					ab9374de57 | ||
| 
						 | 
					913e997061 | ||
| 
						 | 
					8e50d6b6f3 | ||
| 
						 | 
					2db0744a7b | ||
| 
						 | 
					2de0028349 | ||
| 
						 | 
					35d04c5398 | ||
| 
						 | 
					b1becd0ed5 | ||
| 
						 | 
					bd9650bc81 | ||
| 
						 | 
					969a25d1b2 | ||
| 
						 | 
					f144f77ba7 | ||
| 
						 | 
					abea1f8910 | ||
| 
						 | 
					8eaa7fec76 | ||
| 
						 | 
					fdace647e8 | ||
| 
						 | 
					d7531c18fc | ||
| 
						 | 
					ef3f978784 | ||
| 
						 | 
					e410860e0e | ||
| 
						 | 
					c64fca1b0c | ||
| 
						 | 
					15b2a3af91 | ||
| 
						 | 
					8358505b6d | ||
| 
						 | 
					1c42779845 | ||
| 
						 | 
					32823f17e0 | ||
| 
						 | 
					e1c2e3f5e9 | ||
| 
						 | 
					044755b30f | ||
| 
						 | 
					9aa22399a8 | ||
| 
						 | 
					f564905ac4 | ||
| 
						 | 
					00e4f81446 | ||
| 
						 | 
					8927ddec16 | ||
| 
						 | 
					f6525ae200 | ||
| 
						 | 
					0be7944d66 | ||
| 
						 | 
					47819ea86e | ||
| 
						 | 
					96ce3461ad | ||
| 
						 | 
					8b6d555421 | ||
| 
						 | 
					3b9ef8dfc8 | ||
| 
						 | 
					db6d4bcf47 | ||
| 
						 | 
					471f1d694f | ||
| 
						 | 
					495f6f6bd3 | ||
| 
						 | 
					36e35b6f60 | ||
| 
						 | 
					192606bc4b | ||
| 
						 | 
					53a9fdf078 | ||
| 
						 | 
					ef436bdbe8 | ||
| 
						 | 
					72d722b07b | ||
| 
						 | 
					21fc402c01 | ||
| 
						 | 
					381f77756d | ||
| 
						 | 
					a386562d9a | ||
| 
						 | 
					2bc84fb163 | ||
| 
						 | 
					08f8917acb | ||
| 
						 | 
					62d205a2ec | ||
| 
						 | 
					29e873b12d | ||
| 
						 | 
					95f78080ab | ||
| 
						 | 
					9549cfde02 | ||
| 
						 | 
					2361aabbef | ||
| 
						 | 
					e0cc8d2ce9 | ||
| 
						 | 
					53c0e97117 | ||
| 
						 | 
					bb44791bf3 | ||
| 
						 | 
					9ebcfe9dff | ||
| 
						 | 
					f339bf613c | ||
| 
						 | 
					b00c59816d | ||
| 
						 | 
					a00918116d | ||
| 
						 | 
					d26c318321 | ||
| 
						 | 
					eb8770506f | ||
| 
						 | 
					c06171a802 | ||
| 
						 | 
					5528c1eaa5 | ||
| 
						 | 
					93516effe4 | ||
| 
						 | 
					38e518c710 | ||
| 
						 | 
					3f6133be27 | ||
| 
						 | 
					c3bfb355c5 | ||
| 
						 | 
					c69dd14cbc | ||
| 
						 | 
					7954652b80 | ||
| 
						 | 
					ca35b39900 | ||
| 
						 | 
					09df9b90c3 | ||
| 
						 | 
					308ae5cbf2 | ||
| 
						 | 
					1cd5cdfccb | ||
| 
						 | 
					606e7fd744 | ||
| 
						 | 
					e8109b09b1 | ||
| 
						 | 
					536ea60d73 | ||
| 
						 | 
					3390b6446c | ||
| 
						 | 
					bfc7f1e4ac | ||
| 
						 | 
					8ba410a56e | ||
| 
						 | 
					14d1da3ae0 | ||
| 
						 | 
					2a72641a0b | ||
| 
						 | 
					9c4e5dc3ee | ||
| 
						 | 
					540e5ffa90 | ||
| 
						 | 
					c1a57591ee | ||
| 
						 | 
					1a4f72dd4f | ||
| 
						 | 
					c3c8bbd3b2 | ||
| 
						 | 
					fb7d34cea8 | ||
| 
						 | 
					0866c1b52d | ||
| 
						 | 
					136f728b49 | ||
| 
						 | 
					5d28a857a4 | ||
| 
						 | 
					edbe0d166c | ||
| 
						 | 
					4db8c8b1a3 | ||
| 
						 | 
					2b16b8604a | ||
| 
						 | 
					f630929810 | ||
| 
						 | 
					016abdfef6 | ||
| 
						 | 
					fd915609cd | ||
| 
						 | 
					064697fde6 | ||
| 
						 | 
					a03fd7b81c | ||
| 
						 | 
					1cfcbc50a6 | ||
| 
						 | 
					ea1f138c08 | ||
| 
						 | 
					d560207ea1 | ||
| 
						 | 
					90b51831fd | ||
| 
						 | 
					38ed8938d8 | ||
| 
						 | 
					547e91dbf0 | ||
| 
						 | 
					04da96e044 | ||
| 
						 | 
					4a7def101b | ||
| 
						 | 
					541e5a3b82 | ||
| 
						 | 
					5af61716aa | ||
| 
						 | 
					6f3e0051c3 | ||
| 
						 | 
					703ecc3521 | ||
| 
						 | 
					67b0f9aacd | ||
| 
						 | 
					854277bae5 | ||
| 
						 | 
					ca9760756a | ||
| 
						 | 
					f1f993a25b | ||
| 
						 | 
					eb0f727818 | ||
| 
						 | 
					dc3d0289d6 | ||
| 
						 | 
					bd830c6f4d | ||
| 
						 | 
					51d602f973 | ||
| 
						 | 
					30d5401f31 | ||
| 
						 | 
					ab6b0f9843 | ||
| 
						 | 
					c560327f26 | ||
| 
						 | 
					28939dd45c | ||
| 
						 | 
					3853e3d6f3 | ||
| 
						 | 
					6062a1bd68 | ||
| 
						 | 
					8d94688fd1 | ||
| 
						 | 
					6b4532b592 | ||
| 
						 | 
					286fb6f645 | ||
| 
						 | 
					340caf5da3 | ||
| 
						 | 
					171c4fd49f | ||
| 
						 | 
					b8a0fb1dfe | ||
| 
						 | 
					e65993bccb | ||
| 
						 | 
					7ffb4660ec | ||
| 
						 | 
					974f314f57 | ||
| 
						 | 
					4cec22fa19 | ||
| 
						 | 
					069477d35c | ||
| 
						 | 
					eaff1a344e | ||
| 
						 | 
					1fe1e39a88 | ||
| 
						 | 
					33b06f56f0 | ||
| 
						 | 
					61a84abe2a | ||
| 
						 | 
					3d03100079 | ||
| 
						 | 
					5297a52bf0 | ||
| 
						 | 
					88631276e8 | ||
| 
						 | 
					2c0d9ad64c | ||
| 
						 | 
					5c691ed835 | ||
| 
						 | 
					f73864a045 | ||
| 
						 | 
					94da04fcac | ||
| 
						 | 
					5f758fbd11 | ||
| 
						 | 
					fb29529a52 | ||
| 
						 | 
					3cd2673077 | ||
| 
						 | 
					d242214e18 | ||
| 
						 | 
					468b787272 | ||
| 
						 | 
					cfdb6f851c | ||
| 
						 | 
					7886f120f3 | ||
| 
						 | 
					76fe69b133 | ||
| 
						 | 
					e1bae4fc7e | ||
| 
						 | 
					bc9705f758 | ||
| 
						 | 
					c819e234b8 | ||
| 
						 | 
					ce021b79a7 | ||
| 
						 | 
					805a2f6f99 | ||
| 
						 | 
					eb78400b53 | ||
| 
						 | 
					4852f9ffbd | ||
| 
						 | 
					c8d2ad2513 | ||
| 
						 | 
					9f374c2050 | ||
| 
						 | 
					5799852424 | ||
| 
						 | 
					6417fa95cf | ||
| 
						 | 
					61f6284a35 | ||
| 
						 | 
					6b1a1a62a3 | ||
| 
						 | 
					feacb4b481 | ||
| 
						 | 
					fe3c874001 | ||
| 
						 | 
					d9459b54d9 | ||
| 
						 | 
					017be8a882 | ||
| 
						 | 
					b86e543a13 | ||
| 
						 | 
					c2d4fd876c | ||
| 
						 | 
					58cad04bbb | ||
| 
						 | 
					9bb64d6827 | ||
| 
						 | 
					4441df90c1 | ||
| 
						 | 
					f51f2417c5 | ||
| 
						 | 
					aad617647d | ||
| 
						 | 
					49c0d62dda | ||
| 
						 | 
					f752098ba5 | ||
| 
						 | 
					a4477b9e4b | ||
| 
						 | 
					ad3cef0fc8 | ||
| 
						 | 
					d89dbe5bd6 | ||
| 
						 | 
					b0475dbdbc | ||
| 
						 | 
					60b2e74fa3 | ||
| 
						 | 
					cda16297d1 | ||
| 
						 | 
					d6c9a72e15 | ||
| 
						 | 
					4d7b1512c1 | ||
| 
						 | 
					d8a35d745e | ||
| 
						 | 
					e22657ea13 | ||
| 
						 | 
					d06d6b5534 | ||
| 
						 | 
					cec8ab1fde | ||
| 
						 | 
					9fc62a8dd0 | ||
| 
						 | 
					61540b98c2 | ||
| 
						 | 
					465ae39e86 | ||
| 
						 | 
					01f04b9a41 | ||
| 
						 | 
					34f9ab1046 | ||
| 
						 | 
					699876778b | ||
| 
						 | 
					8fc5a0d19e | ||
| 
						 | 
					62b5926d58 | ||
| 
						 | 
					4d1037f385 | ||
| 
						 | 
					e4addb3975 | ||
| 
						 | 
					2aef351980 | ||
| 
						 | 
					d88c153c7d | ||
| 
						 | 
					9e9883082e | ||
| 
						 | 
					71440df4c7 | ||
| 
						 | 
					80b004a57d | ||
| 
						 | 
					ea8476a2dc | ||
| 
						 | 
					cb85ca18ab | ||
| 
						 | 
					f1103b95cf | ||
| 
						 | 
					aa5ff53bcf | ||
| 
						 | 
					907dabed5d | ||
| 
						 | 
					0cacbc892c | ||
| 
						 | 
					6753c3c715 | ||
| 
						 | 
					36e1363e3d | ||
| 
						 | 
					d1a711eb6a | ||
| 
						 | 
					d8dea4dcc7 | ||
| 
						 | 
					ca161737bc | ||
| 
						 | 
					3612c3774e | ||
| 
						 | 
					e6a65bb3ef | ||
| 
						 | 
					ff291eee48 | ||
| 
						 | 
					66b8f48a88 | ||
| 
						 | 
					634760cbdc | ||
| 
						 | 
					a23a897ad2 | ||
| 
						 | 
					d9c244278d | ||
| 
						 | 
					b6c4185b27 | ||
| 
						 | 
					5896d35e72 | ||
| 
						 | 
					b4dfdd8bbc | ||
| 
						 | 
					e6ed3478ea | ||
| 
						 | 
					db08d9c6b9 | ||
| 
						 | 
					9490278ece | ||
| 
						 | 
					fd8bf5f171 | ||
| 
						 | 
					c9bc14a222 | ||
| 
						 | 
					63708cbfb0 | ||
| 
						 | 
					d9f307623c | ||
| 
						 | 
					540f77a627 | ||
| 
						 | 
					71bb2d0b8b | ||
| 
						 | 
					87dc44e434 | ||
| 
						 | 
					29e0fcd091 | ||
| 
						 | 
					2e9a798f09 | ||
| 
						 | 
					b32a39f44f | ||
| 
						 | 
					d86f9611b3 | ||
| 
						 | 
					6a62fc4a40 | ||
| 
						 | 
					7cdd6455d7 | ||
| 
						 | 
					e4fefd088d | ||
| 
						 | 
					95e601e2b1 | ||
| 
						 | 
					b1ffe7b74a | ||
| 
						 | 
					417c8fb602 | ||
| 
						 | 
					85efa64c31 | ||
| 
						 | 
					d8cb026e80 | ||
| 
						 | 
					41dd5121f0 | ||
| 
						 | 
					94482d7ca5 | ||
| 
						 | 
					4d0e51aead | ||
| 
						 | 
					ae8a8c8ba4 | ||
| 
						 | 
					7d043f46d5 | ||
| 
						 | 
					cbca19d6c2 | ||
| 
						 | 
					b40b9677b6 | ||
| 
						 | 
					c80ad865db | ||
| 
						 | 
					758eae49ab | ||
| 
						 | 
					721b05e343 | ||
| 
						 | 
					a333bddeeb | ||
| 
						 | 
					4c6a52fe90 | ||
| 
						 | 
					792d73a9cf | ||
| 
						 | 
					9a95a3f8c3 | ||
| 
						 | 
					485edb777f | ||
| 
						 | 
					a8c3431ae9 | ||
| 
						 | 
					6fe4a6fa9a | ||
| 
						 | 
					6d8c7356d6 | ||
| 
						 | 
					a782c96e81 | ||
| 
						 | 
					c795123cd5 | ||
| 
						 | 
					0ec370e6fb | ||
| 
						 | 
					3d5732d4e0 | ||
| 
						 | 
					b795929858 | ||
| 
						 | 
					535258ffe4 | ||
| 
						 | 
					cc161b96ac | ||
| 
						 | 
					5c4b422b18 | ||
| 
						 | 
					89bad584c3 | ||
| 
						 | 
					e21926f7f0 | ||
| 
						 | 
					e452f467d4 | ||
| 
						 | 
					dfda7ba456 | ||
| 
						 | 
					feb6b6445e | ||
| 
						 | 
					0b57fa9c51 | ||
| 
						 | 
					55c6f60c90 | ||
| 
						 | 
					9def011e8e | ||
| 
						 | 
					7cf6e8c9cc | ||
| 
						 | 
					cdee43aa59 | ||
| 
						 | 
					9c25b58b4c | ||
| 
						 | 
					83f35463f5 | ||
| 
						 | 
					818cdb879e | ||
| 
						 | 
					3eead2d6c4 | ||
| 
						 | 
					5cffe055ad | ||
| 
						 | 
					3d4511daf3 | ||
| 
						 | 
					4748b40ad9 | ||
| 
						 | 
					c40b4f6c39 | ||
| 
						 | 
					d3b96dd394 | ||
| 
						 | 
					f946df640b | ||
| 
						 | 
					fef78bd6f1 | ||
| 
						 | 
					9e6cc86bf7 | ||
| 
						 | 
					b544c5fa5c | ||
| 
						 | 
					afa64ee31f | ||
| 
						 | 
					e9bfef0eb1 | ||
| 
						 | 
					ddbcccd43d | ||
| 
						 | 
					5370d7a6eb | ||
| 
						 | 
					685b180ab6 | ||
| 
						 | 
					9dab850874 | ||
| 
						 | 
					0d5bfe883e | ||
| 
						 | 
					cc2f1d4894 | ||
| 
						 | 
					a8dd13db4c | ||
| 
						 | 
					325391aef9 | ||
| 
						 | 
					3474ec4ecb | ||
| 
						 | 
					ec1736d488 | ||
| 
						 | 
					4522579688 | ||
| 
						 | 
					907a6e0eed | ||
| 
						 | 
					d20186a7b8 | ||
| 
						 | 
					b28051881e | ||
| 
						 | 
					bdea56cd3f | ||
| 
						 | 
					8a3ec2c659 | ||
| 
						 | 
					14e9420d2c | ||
| 
						 | 
					5b58e61f28 | ||
| 
						 | 
					be2f3071b5 | ||
| 
						 | 
					85dbf82d93 | ||
| 
						 | 
					a9c4963cc0 | ||
| 
						 | 
					a4934387d5 | ||
| 
						 | 
					e88a2ec6fc | ||
| 
						 | 
					0666960173 | ||
| 
						 | 
					f114caca90 | ||
| 
						 | 
					9468c9c796 | ||
| 
						 | 
					76c53c690c | ||
| 
						 | 
					c341b11aaf | ||
| 
						 | 
					6212e6990a | ||
| 
						 | 
					28049a183c | ||
| 
						 | 
					5d3dd7911e | ||
| 
						 | 
					ae8375516b | ||
| 
						 | 
					e3f10eb825 | ||
| 
						 | 
					2b1f683239 | ||
| 
						 | 
					a2b19c9a63 | ||
| 
						 | 
					4146ce8267 | ||
| 
						 | 
					170bd6dafc | ||
| 
						 | 
					7e16ec8724 | ||
| 
						 | 
					8c459156f8 | ||
| 
						 | 
					2db894807b | ||
| 
						 | 
					95ceeb6e0b | ||
| 
						 | 
					c9c00d2a23 | ||
| 
						 | 
					1afe49864d | ||
| 
						 | 
					6924bee3a0 | ||
| 
						 | 
					39d4552dab | ||
| 
						 | 
					a23c63738f | ||
| 
						 | 
					e911945c55 | ||
| 
						 | 
					6d58d13710 | ||
| 
						 | 
					0b177cb165 | ||
| 
						 | 
					3e31b619de | ||
| 
						 | 
					f925979b2f | ||
| 
						 | 
					49f7fa82b9 | ||
| 
						 | 
					e4cd4cf3f3 | ||
| 
						 | 
					e74b20926d | ||
| 
						 | 
					a312127c91 | ||
| 
						 | 
					1dc5bf4f73 | ||
| 
						 | 
					01cfe670c5 | ||
| 
						 | 
					fd307bfe29 | ||
| 
						 | 
					a00de093a7 | ||
| 
						 | 
					7bfe853af3 | ||
| 
						 | 
					cbaecca8e9 | ||
| 
						 | 
					8edfb370a8 | ||
| 
						 | 
					4c08c8f7db | ||
| 
						 | 
					c174680a03 | ||
| 
						 | 
					cb5f6e18e6 | ||
| 
						 | 
					b798e7a5ae | ||
| 
						 | 
					5deab7ad27 | ||
| 
						 | 
					12cdfd282d | ||
| 
						 | 
					eba8035e12 | ||
| 
						 | 
					edcbf4350b | ||
| 
						 | 
					9289ea471f | ||
| 
						 | 
					7d06185aa6 | ||
| 
						 | 
					01ecb1d7e7 | ||
| 
						 | 
					e177f14595 | ||
| 
						 | 
					5c6eddcadd | ||
| 
						 | 
					b3b4786990 | 
							
								
								
									
										16
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
compile
 | 
			
		||||
config.log
 | 
			
		||||
Makefile
 | 
			
		||||
libtool
 | 
			
		||||
Makefile.in
 | 
			
		||||
aclocal.m4
 | 
			
		||||
configure
 | 
			
		||||
config.h
 | 
			
		||||
config.status
 | 
			
		||||
curl-config
 | 
			
		||||
autom4te.cache
 | 
			
		||||
depcomp
 | 
			
		||||
config.guess
 | 
			
		||||
config.sub
 | 
			
		||||
ltmain.sh
 | 
			
		||||
libcurl.pc
 | 
			
		||||
							
								
								
									
										835
									
								
								CHANGES.1999
									
									
									
									
									
								
							
							
						
						
									
										835
									
								
								CHANGES.1999
									
									
									
									
									
								
							@@ -1,835 +0,0 @@
 | 
			
		||||
Daniel (28 December 1999):
 | 
			
		||||
 - Tim Verhoeven correctly identified that curl
 | 
			
		||||
   doesn't support URL formatted file names when getting ftp. Now, there's a
 | 
			
		||||
   problem with getting very weird file names off FTP servers. RFC 959 defines
 | 
			
		||||
   that the file name syntax to use should be the same as in the native OS of
 | 
			
		||||
   the server. Since we don't know the peer server system we currently just
 | 
			
		||||
   translate the URL syntax into plain letters. It is still better and with
 | 
			
		||||
   the solaris 2.6-supplied ftp server it works with spaces in the file names.
 | 
			
		||||
 | 
			
		||||
Daniel (27 December 1999):
 | 
			
		||||
 - When curl parsed cookies straight off a remote site, it corrupted the input
 | 
			
		||||
   data, which, if the downloaded headers were stored made very odd characters
 | 
			
		||||
   in the saved data. Correctly identified and reported by Paul Harrington.
 | 
			
		||||
 | 
			
		||||
Daniel (13 December 1999):
 | 
			
		||||
 - General cleanups in the library interface. There had been some bad kludges
 | 
			
		||||
   added during times of stress and I did my best to clean them off. It was
 | 
			
		||||
   both regarding the lib API as well as include file confusions.
 | 
			
		||||
 | 
			
		||||
Daniel (3 December 1999):
 | 
			
		||||
 - A small --stderr bug was reported by Eetu Ojanen...
 | 
			
		||||
 | 
			
		||||
 - who also brought the suggestion of extending the -X flag to ftp list as
 | 
			
		||||
   well. So, now it is and the long option is now --request instead. It is
 | 
			
		||||
   only for ftp list for now (and the former http stuff too of course).
 | 
			
		||||
 | 
			
		||||
Lars J. Aas (24 November 1999):
 | 
			
		||||
 - Patched curl to compile and build under BeOS. Doesn't work yet though!
 | 
			
		||||
 | 
			
		||||
 - Corrected the Makefile.am files to allow putting object files in
 | 
			
		||||
   different directories than the sources.
 | 
			
		||||
 | 
			
		||||
Version 6.3.1
 | 
			
		||||
 | 
			
		||||
Daniel (23 November 1999):
 | 
			
		||||
 - I've had this major disk crash. My good old trust-worthy source disk died
 | 
			
		||||
   along with the machine that hosted it. Thank goodness most of all the
 | 
			
		||||
   things I've done are either backed up elsewhere or stored in this CVS
 | 
			
		||||
   server!
 | 
			
		||||
 | 
			
		||||
 - Michael S. Steuer pointed out a bug in the -F handling
 | 
			
		||||
   that made curl hang if you posted an empty variable such as '-F name='. It
 | 
			
		||||
   was one of those old bugs that never have worked properly...
 | 
			
		||||
 | 
			
		||||
 - Jason Baietto pointed out a general flaw in the HTTP
 | 
			
		||||
   download. Curl didn't complain if it was prematurely aborted before the
 | 
			
		||||
   entire download was completed. It does now.
 | 
			
		||||
 | 
			
		||||
Daniel (19 November 1999):
 | 
			
		||||
 - Chris Maltby very accurately criticized the lack of
 | 
			
		||||
   return code checks on the fwrite() calls. I did a thorough check for all
 | 
			
		||||
   occurrences and corrected this.
 | 
			
		||||
 | 
			
		||||
Daniel (17 November 1999):
 | 
			
		||||
 - Paul Harrington pointed out that the -m/--max-time option
 | 
			
		||||
   doesn't work for the slow system calls like gethostbyname()... I don't have
 | 
			
		||||
   any good fix yet, just a slightly less bad one that makes curl exit hard
 | 
			
		||||
   when the timeout is reached.
 | 
			
		||||
 | 
			
		||||
 - Bjorn Reese helped me point out a possible problem that might be the reason
 | 
			
		||||
   why Thomas Hurst experience problems in his Amiga version.
 | 
			
		||||
 | 
			
		||||
 Daniel (12 November 1999):
 | 
			
		||||
 - I found a crash in the new cookie file parser. It crashed when you gave
 | 
			
		||||
   a plain http header file as input...
 | 
			
		||||
 | 
			
		||||
Version 6.3
 | 
			
		||||
 | 
			
		||||
 Daniel (10 November 1999):
 | 
			
		||||
 - I kind of found out that the HTTP time-conditional GETs (-z) aren't always
 | 
			
		||||
   respected by the web server and the document is therefore sent in whole
 | 
			
		||||
   again, even though it doesn't match the requested condition. After reading
 | 
			
		||||
   section 13.3.4 of RFC 2616, I think I'm doing the right thing now when I do
 | 
			
		||||
   my own check as well. If curl thinks the condition isn't met, the transfer
 | 
			
		||||
   is aborted prematurely (after all the headers have been received).
 | 
			
		||||
 | 
			
		||||
 - After comments from Robert Linden I also rewrote some parts of the man page
 | 
			
		||||
   to better describe how the -F works.
 | 
			
		||||
 | 
			
		||||
 - Michael Anti put up a new curl download mirror in
 | 
			
		||||
   China:  http://www.pshowing.com/curl/
 | 
			
		||||
 | 
			
		||||
 - I added the list of download mirrors to the README file
 | 
			
		||||
 | 
			
		||||
 - I did add more explanations to the man page
 | 
			
		||||
 | 
			
		||||
 Daniel (8 November 1999):
 | 
			
		||||
 - I made the -b/--cookie option capable of reading netscape formatted cookie
 | 
			
		||||
   files as well as normal http-header files. It should be able to
 | 
			
		||||
   transparently figure out what kind of file it got as input.
 | 
			
		||||
 | 
			
		||||
 Daniel (29 October 1999):
 | 
			
		||||
 - Another one of Sebastiaan van Erk's ideas (that has been requested before
 | 
			
		||||
   but I seem to have forgotten who it was), is to add support for ranges in
 | 
			
		||||
   FTP downloads. As usual, one request is just a request, when they're two
 | 
			
		||||
   it is a demand. I've added simple support for X-Y style fetches. X has to
 | 
			
		||||
   be the lower number, though you may omit one of the numbers. Use the -r/
 | 
			
		||||
   --range switch (previously HTTP-only).
 | 
			
		||||
 | 
			
		||||
 - Sebastiaan van Erk suggested that curl should be
 | 
			
		||||
   able to show the file size of a specified file. I think this is a splendid
 | 
			
		||||
   idea and the -I flag is now working for FTP. It displays the file size in
 | 
			
		||||
   this manner:
 | 
			
		||||
        Content-Length: XXXX
 | 
			
		||||
   As it resembles normal headers, and leaves us the opportunity to add more
 | 
			
		||||
   info in that display if we can come up with more in the future! It also
 | 
			
		||||
   makes sense since if you access ftp through a HTTP proxy, you'd get the
 | 
			
		||||
   file size the same way.
 | 
			
		||||
 | 
			
		||||
   I changed the order of the QUOTE command executions. They're now executed
 | 
			
		||||
   just after the login and before any other command. I made this to enable
 | 
			
		||||
   quote commands to run before the -I stuff is done too.
 | 
			
		||||
 | 
			
		||||
 - I found out that -D/--dump-header and -V/--version weren't documented in
 | 
			
		||||
   the man page.
 | 
			
		||||
 | 
			
		||||
 - Many HTTP/1.1 servers do not support ranges. Don't ask me why. I did add
 | 
			
		||||
   some text about this in the man page for the range option. The thread in
 | 
			
		||||
   the mailing list that started this was initiated by Michael Anti.
 | 
			
		||||
 | 
			
		||||
 - I get reports about nroff crashes on solaris 2.6+ when displaying the curl
 | 
			
		||||
   man page. Switch to gnroff instead, it is reported to work(!). Adam Barclay
 | 
			
		||||
   reported and brought the suggestion.
 | 
			
		||||
 | 
			
		||||
 - In a dialogue with Johannes G. Kristinsson we came
 | 
			
		||||
   up with the idea to let -H/--header specified headers replace the
 | 
			
		||||
   internally generated headers, if you happened to select to add a header
 | 
			
		||||
   that curl normally uses by itself. The advantage with this is not entirely
 | 
			
		||||
   obvious, but in Johannes' case it means that he can use another Host: than
 | 
			
		||||
   the one curl would set.
 | 
			
		||||
 | 
			
		||||
 Daniel (27 October 1999):
 | 
			
		||||
 - Jongki Suwandi brought a nice patch for (yet another) crash when following
 | 
			
		||||
   a location:. This time you had to follow a https:// server's redirect to
 | 
			
		||||
   get the core.
 | 
			
		||||
 | 
			
		||||
Version 6.2
 | 
			
		||||
 | 
			
		||||
 Daniel (21 October 1999):
 | 
			
		||||
 - I think I managed to remove the suspicious (nil) that has been seen just
 | 
			
		||||
   before the "Host:" in HTTP requests when -v was used.
 | 
			
		||||
 - I found out that if you followed a location: when using a proxy, without
 | 
			
		||||
   having specified http:// in the URL, the protocol part was added once again
 | 
			
		||||
   when moving to the next URL! (The protocol part has to be added to the
 | 
			
		||||
   URL when going through a proxy since it has no protocol-guessing system
 | 
			
		||||
   such as curl has.)
 | 
			
		||||
 - Benjamin Ritcey reported a core dump under solaris 2.6
 | 
			
		||||
   with OpenSSL 0.9.4. It turned out this was due to a bad free() in main.c
 | 
			
		||||
   that occurred after the download was done and completed.
 | 
			
		||||
 - Benjamin found ftp downloads to show the first line of the download meter
 | 
			
		||||
   to get written twice, and I removed that problem. It was introduced with
 | 
			
		||||
   the multiple URL support.
 | 
			
		||||
 - Dan Zitter correctly pointed out that curl 6.1 and earlier versions didn't
 | 
			
		||||
   honor RFC 2616 chapter 4 section 2, "Message Headers": "...Field names are
 | 
			
		||||
   case-insensitive..."  HTTP header parsing assumed a certain casing. Dan
 | 
			
		||||
   also provided me with a patch that corrected this, which I took the liberty
 | 
			
		||||
   of editing slightly.
 | 
			
		||||
 - Dan Zitter also provided a nice patch for config.guess to better recognize
 | 
			
		||||
   the Mac OS X
 | 
			
		||||
 - Dan also corrected a minor problem in the lib/Makefile that caused linking
 | 
			
		||||
   to fail on OS X.
 | 
			
		||||
 | 
			
		||||
 Daniel (19 October 1999):
 | 
			
		||||
 - Len Marinaccio came up with some problems with curl.  Since Windows has a
 | 
			
		||||
   crippled shell, it can't redirect stderr and that causes trouble. I added
 | 
			
		||||
   --stderr today which allows the user to redirect the stderr stream to a
 | 
			
		||||
   file or stdout.
 | 
			
		||||
 | 
			
		||||
 Daniel (18 October 1999):
 | 
			
		||||
 - The configure script now understands the '--without-ssl' flag, which now
 | 
			
		||||
   totally disable SSL/https support. Previously it wasn't possible to force
 | 
			
		||||
   the configure script to leave SSL alone. The previous functionality has
 | 
			
		||||
   been retained. Troy Engel helped test this new one.
 | 
			
		||||
 | 
			
		||||
Version 6.1
 | 
			
		||||
 | 
			
		||||
 Daniel (17 October 1999):
 | 
			
		||||
 - I ifdef'ed or commented all the zlib stuff in the sources and configure
 | 
			
		||||
   script. It turned out we needed to mock more with zlib than I initially
 | 
			
		||||
   thought, to make it capable of downloading compressed HTTP documents and
 | 
			
		||||
   uncompress them on the fly. I didn't mean the zlib parts of curl to become
 | 
			
		||||
   more than minor so this means I halt the zlib expedition for now and wait
 | 
			
		||||
   until someone either writes the code or zlib gets updated and better
 | 
			
		||||
   adjusted for this kind of usage.  I won't get into details here, but a
 | 
			
		||||
   short a summary is suitable:
 | 
			
		||||
   - zlib can't automatically detect whether to use zlib or gzip
 | 
			
		||||
     decompression methods.
 | 
			
		||||
   - zlib is very neat for reading gzipped files from a file descriptor,
 | 
			
		||||
     although not as nice for reading buffer-based data such as we would
 | 
			
		||||
     want it.
 | 
			
		||||
   - there are still some problems with the win32 version when reading from
 | 
			
		||||
     a file descriptor if that is a socket
 | 
			
		||||
 | 
			
		||||
 Daniel (14 October 1999):
 | 
			
		||||
 - Moved the (external) include files for libcurl into a subdirectory named
 | 
			
		||||
   curl and adjusted all #include lines to use <curl/XXXX> to maintain a
 | 
			
		||||
   better name space and control of the headers. This has been requested.
 | 
			
		||||
 | 
			
		||||
 Daniel (12 October 1999):
 | 
			
		||||
 - I modified the 'maketgz' script to perform a 'make' too before a release
 | 
			
		||||
   archive is put together in an attempt to make the time stamps better and
 | 
			
		||||
   hopefully avoid the double configure-running that use to occur.
 | 
			
		||||
 | 
			
		||||
 Daniel (11 October 1999):
 | 
			
		||||
 - Applied J<>rn's patches that fixes zlib for mingw32 compiles as well as
 | 
			
		||||
   some other missing zlib #ifdef and more text on the multiple URL docs in
 | 
			
		||||
   the man page.
 | 
			
		||||
 | 
			
		||||
Version 6.1beta
 | 
			
		||||
 | 
			
		||||
 Daniel (6 October 1999):
 | 
			
		||||
 - Douglas E. Wegscheid sent me a patch that made the exact same thing as I
 | 
			
		||||
   just made: the -d switch is now capable of reading post data from a named
 | 
			
		||||
   file or stdin.  Use it similarly to the -F. To read the post data from a
 | 
			
		||||
   given file:
 | 
			
		||||
 | 
			
		||||
        curl -d @path/to/filename www.postsite.com
 | 
			
		||||
 | 
			
		||||
   or let curl read it out from stdin:
 | 
			
		||||
 | 
			
		||||
        curl -d @- www.postit.com
 | 
			
		||||
 | 
			
		||||
 J<>rn Hartroth (3 October 1999):
 | 
			
		||||
 - Brought some more patches for multiple URL functionality. The MIME
 | 
			
		||||
   separation ideas are almost scrapped now, and a custom separator is being
 | 
			
		||||
   used instead. This is still compile-time "flagged".
 | 
			
		||||
 | 
			
		||||
 Daniel
 | 
			
		||||
 - Updated curl.1 with multiple URL info.
 | 
			
		||||
 | 
			
		||||
 Daniel (30 September 1999):
 | 
			
		||||
 - Felix von Leitner brought openssl-check fixes for configure.in to work
 | 
			
		||||
   out-of-the-box when the openssl files are installed in the system default
 | 
			
		||||
   dirs.
 | 
			
		||||
 | 
			
		||||
 Daniel (28 September 1999)
 | 
			
		||||
 - Added libz functionality. This should enable decompressing gzip, compress
 | 
			
		||||
   or deflate encoding HTTP documents. It also makes curl send an accept that
 | 
			
		||||
   it accepts that kind of encoding. Compressed contents usually shortens
 | 
			
		||||
   download time. I *need* someone to tell me a site that uses compressed HTTP
 | 
			
		||||
   documents so that I can test this out properly.
 | 
			
		||||
 | 
			
		||||
 - As a result of the adding of zlib awareness, I changed the version string
 | 
			
		||||
   a little. I plan to add openldap version reporting in there too.
 | 
			
		||||
 | 
			
		||||
 Daniel (17 September 1999)
 | 
			
		||||
 - Made the -F option allow stdin when specifying files. By using '-' instead
 | 
			
		||||
   of file name, the data will be read from stdin.
 | 
			
		||||
 | 
			
		||||
Version 6.0
 | 
			
		||||
 | 
			
		||||
 Daniel (13 September 1999)
 | 
			
		||||
 - Added -X/--http-request <request> to enable any HTTP command to be sent.
 | 
			
		||||
   Do not that your server has to support the exact string you enter. This
 | 
			
		||||
   should possibly a string like DELETE or TRACE.
 | 
			
		||||
 | 
			
		||||
 - Applied Douglas' mingw32-fixes for the makefiles.
 | 
			
		||||
 | 
			
		||||
 Daniel (10 September 1999)
 | 
			
		||||
 - Douglas E. Wegscheid pointed out a problem. Curl didn't check the FTP
 | 
			
		||||
   servers return code properly after the --quote commands were issued. It
 | 
			
		||||
   took anything non 200 as an error, when all 2XX codes should be accepted as
 | 
			
		||||
   OK.
 | 
			
		||||
 | 
			
		||||
 - Sending cookies to the same site in multiple lines like curl used to do
 | 
			
		||||
   turned out to be bad and breaking the cookie specs. Curl now sends all
 | 
			
		||||
   cookies on a single Cookie: line. Curl is not yet RFC 2109 compliant, but I
 | 
			
		||||
   doubt that many servers do use that syntax (yet).
 | 
			
		||||
 | 
			
		||||
 Daniel (8 September 1999)
 | 
			
		||||
 - J<>rn helped me make sure it still compiles nicely with mingw32 under win32.
 | 
			
		||||
 | 
			
		||||
 Daniel (7 September 1999)
 | 
			
		||||
 - FTP upload through proxy is now turned into a HTTP PUT. Requested by
 | 
			
		||||
   Stefan Kanthak.
 | 
			
		||||
 | 
			
		||||
 - Added the ldap files to the .m32 makefile.
 | 
			
		||||
 | 
			
		||||
 Daniel (3 September 1999)
 | 
			
		||||
 - Made cookie matching work while using HTTP proxy.
 | 
			
		||||
 | 
			
		||||
 Bjorn Reese (31 August 1999)
 | 
			
		||||
 - Passed his ldap:// patch. Note that this requires the openldap shared
 | 
			
		||||
   library to be installed and that LD_LIBRARY_PATH points to the
 | 
			
		||||
   directory where the lib will be found when curl is run with a
 | 
			
		||||
   ldap:// URL.
 | 
			
		||||
 | 
			
		||||
 J<>rn Hartroth (31 August 1999)
 | 
			
		||||
 - Made the Mingw32 makefiles into single files.
 | 
			
		||||
 - Made file:// work for Win32. The same code is now used for unix as well for
 | 
			
		||||
   performance reasons.
 | 
			
		||||
 | 
			
		||||
 Douglas E. Wegscheid (30 August 1999)
 | 
			
		||||
 - Patched the Mingw32 makefiles for SSL builds.
 | 
			
		||||
 | 
			
		||||
 Matthew Clarke (30 August 1999)
 | 
			
		||||
 - Made a cool patch for configure.in to allow --with-ssl to specify the
 | 
			
		||||
   root dir of the openssl installation, as in
 | 
			
		||||
 | 
			
		||||
        ./configure --with-ssl=/usr/ssl_here
 | 
			
		||||
 | 
			
		||||
 - Corrected the 'reconf' script to work better with some shells.
 | 
			
		||||
 | 
			
		||||
 J<>rn Hartroth (26 August 1999)
 | 
			
		||||
 - Fixed the Mingw32 makefiles in lib/ and corrected the file.c for win32
 | 
			
		||||
   compiles.
 | 
			
		||||
 | 
			
		||||
Version 5.11
 | 
			
		||||
 | 
			
		||||
 Daniel (25 August 1999)
 | 
			
		||||
 - John Weismiller pointed out a bug in the header-line
 | 
			
		||||
   realloc() system in download.c.
 | 
			
		||||
 | 
			
		||||
 - I added lib/file.[ch] to offer a first, simple, file:// support. It
 | 
			
		||||
   probably won't do much good on win32 system at this point, but I see it
 | 
			
		||||
   as a start.
 | 
			
		||||
 | 
			
		||||
 - Made the release archives get a Makefile in the root dir, which can be
 | 
			
		||||
   used to start the compiling/building process easier. I haven't really
 | 
			
		||||
   changed any INSTALL text yet, I wanted to get some feed-back on this
 | 
			
		||||
   first.
 | 
			
		||||
 | 
			
		||||
 Daniel (17 August 1999)
 | 
			
		||||
 - Another Location: bug. Curl didn't do proper relative locations if the
 | 
			
		||||
   original URL had cgi-parameters that contained a slash. Nusu's page
 | 
			
		||||
   again.
 | 
			
		||||
 | 
			
		||||
 - Corrected the NO_PROXY usage. It is a list of substrings that if one of
 | 
			
		||||
   them matches the tail of the host name it should connect to, curl should
 | 
			
		||||
   not use a proxy to connect there. Pointed out to me by Douglas
 | 
			
		||||
   E. Wegscheid.  I also changed the README text a little regarding this.
 | 
			
		||||
 | 
			
		||||
 Daniel (16 August 1999)
 | 
			
		||||
 - Fixed a memory bug with http-servers that sent Location: to a Location:
 | 
			
		||||
   page. Nusu's page showed this too.
 | 
			
		||||
 | 
			
		||||
 - Made cookies work a lot better. Setting the same cookie name several times
 | 
			
		||||
   used to add more cookies instead of replacing the former one which it
 | 
			
		||||
   should've. Nusu <nus at intergorj.ro> brought me an URL that made this
 | 
			
		||||
   painfully visible...
 | 
			
		||||
 | 
			
		||||
 Troy (15 August 1999)
 | 
			
		||||
 - Brought new .spec files as well as a patch for configure.in that lets the
 | 
			
		||||
   configure script find the openssl files better, even when the include
 | 
			
		||||
   files are in /usr/include/openssl
 | 
			
		||||
 | 
			
		||||
Version 5.10
 | 
			
		||||
 | 
			
		||||
 Daniel (13 August 1999)
 | 
			
		||||
 - SSL_CTX_set_default_passwd_cb() has been modified in the 0.9.4 version of
 | 
			
		||||
   OpenSSL. Now why couldn't they simply add a *new* function instead of
 | 
			
		||||
   modifying the parameters of an already existing function? This way, we get
 | 
			
		||||
   a compiler warning if compiling with 0.9.4 but not with earlier. So, I had
 | 
			
		||||
   to come up with a #if construction that deals with this...
 | 
			
		||||
 | 
			
		||||
 - Made curl output the SSL version number get displayed properly with 0.9.4.
 | 
			
		||||
 | 
			
		||||
 Troy (12 August 1999)
 | 
			
		||||
 - Added MingW32 (GCC-2.95) support under Win32. The INSTALL file was also
 | 
			
		||||
   a bit rearranged.
 | 
			
		||||
 
 | 
			
		||||
 Daniel (12 August 1999)
 | 
			
		||||
 - I had to copy a good <arpa/telnet.h> include file into the curl source
 | 
			
		||||
   tree to enable the silly win32 systems to compile. The distribution rights
 | 
			
		||||
   allows us to do that as long as the file remains unmodified.
 | 
			
		||||
 | 
			
		||||
 - I corrected a few minor things that made the compiler complain when
 | 
			
		||||
   -Wall -pedantic was used.
 | 
			
		||||
 | 
			
		||||
 - I'm moving the official curl web page to http://curl.haxx.nu. I think it
 | 
			
		||||
   will make it easier to remember as it is a lot shorter and less cryptic.
 | 
			
		||||
   The old one still works and shows the same info.
 | 
			
		||||
 | 
			
		||||
 Daniel (11 August 1999)
 | 
			
		||||
 - Albert Chin-A-Young mailed me another correction for NROFF in the
 | 
			
		||||
   configure.in that is supposed to be better for IRIX users.
 | 
			
		||||
 | 
			
		||||
 Daniel (10 August 1999)
 | 
			
		||||
 - Albert Chin-A-Young helped me with some stupid Makefile things, as well as
 | 
			
		||||
   some fiddling with the getdate.c stuff that he had problems with under
 | 
			
		||||
   HP-UX v10. getdate.y will now be compiled into getdate.c if the appropriate
 | 
			
		||||
   yacc or bison is found by the configure script. Since this is slightly new,
 | 
			
		||||
   we need to test the output getdate.c with win32 systems to make sure it
 | 
			
		||||
   still compiles there.
 | 
			
		||||
 | 
			
		||||
 Daniel (5 August 1999)
 | 
			
		||||
 - I've just setup a new mailing list with the intention to keep discussions
 | 
			
		||||
   around libcurl development in it. I mainly expect it to be for thoughts and
 | 
			
		||||
   brainstorming around a "next generation" library, rather than nitpicking
 | 
			
		||||
   about the current implementation or details in the current libcurl.
 | 
			
		||||
 | 
			
		||||
   To join our happy bunch of future-looking geeks, enter 'subscribe
 | 
			
		||||
   <address>' in the body of a mail and send it to
 | 
			
		||||
   libcurl-request@listserv.fts.frontec.se.  Curl bug reports, the usual curl
 | 
			
		||||
   talk and everything else should still be kept in this mailing list. I've
 | 
			
		||||
   started to archive this mailing list and have put the libcurl web page at
 | 
			
		||||
   www.fts.frontec.se/~dast/libcurl/.
 | 
			
		||||
 | 
			
		||||
 - Stefan Kanthak contacted me regarding a few problems in the configure
 | 
			
		||||
   script which he discovered when trying to make curl compile and build under
 | 
			
		||||
   Siemens SINIX-Z V5.42B2004!
 | 
			
		||||
 | 
			
		||||
 - Marcus Klein very accurately informed me that src/version.h was not present
 | 
			
		||||
   in the CVS repository. Oh, how silly...
 | 
			
		||||
 | 
			
		||||
 - Linus Nielsen rewrote the telnet:// part and now curl offers limited telnet
 | 
			
		||||
   support. If you run curl like 'curl telnet://host' you'll get all output on
 | 
			
		||||
   the screen and curl will read input from stdin. You'll be able to login and
 | 
			
		||||
   run commands etc, but since the output is buffered, expect to get a little
 | 
			
		||||
   weird output.
 | 
			
		||||
 | 
			
		||||
   This is still in its infancy and it might get changed. We need your
 | 
			
		||||
   feed-back and input in how this is best done.
 | 
			
		||||
 | 
			
		||||
   WIN32 NOTE: I bet we'll get problems when trying to compile the current
 | 
			
		||||
   lib/telnet.c on win32, but I think we can sort them out in time.
 | 
			
		||||
 | 
			
		||||
 - David Sanderson reported that FORCE_ALLOCA_H or HAVE_ALLOCA_H must be
 | 
			
		||||
   defined for getdate.c to compile properly on HP-UX 11.0. I updated the
 | 
			
		||||
   configure script to check for alloca.h which should make it.
 | 
			
		||||
 | 
			
		||||
 Daniel (4 August 1999)
 | 
			
		||||
 - I finally got to understand Marcus Klein's ftp download resume problem,
 | 
			
		||||
   which turns out to be due to different outputs from different ftp
 | 
			
		||||
   servers. It makes ftp download resuming a little trickier, but I've made
 | 
			
		||||
   some modifications I really believe will work for most ftp servers and I do
 | 
			
		||||
   hope you report if you have problems with this!
 | 
			
		||||
 | 
			
		||||
 - Added text about file transfer resuming to README.curl.
 | 
			
		||||
 | 
			
		||||
 Daniel (2 August 1999)
 | 
			
		||||
 - Applied a progress-bar patch from Lars J. Aas. It offers
 | 
			
		||||
   a new styled progress bar enabled with -#/--progress-bar. 
 | 
			
		||||
 | 
			
		||||
 T. Yamada <tai at imasy.or.jp> (30 July 1999)
 | 
			
		||||
 - It breaks with segfault when 1) curl is using .netrc to obtain
 | 
			
		||||
   username/password (option '-n'), and 2) is automatically redirected to
 | 
			
		||||
   another location (option '-L').
 | 
			
		||||
 | 
			
		||||
   There is a small bug in lib/url.c (block starting from line 641), which
 | 
			
		||||
   tries to take out username/password from user- supplied command-line
 | 
			
		||||
   argument ('-u' option). This block is never executed on first attempt since
 | 
			
		||||
   CONF_USERPWD bit isn't set at first, but curl later turns it on when it
 | 
			
		||||
   checks for CONF_NETRC bit. So when curl tries to redo everything due to
 | 
			
		||||
   redirection, it segfaults trying to access *data->userpwd.
 | 
			
		||||
 | 
			
		||||
Version 5.9.1
 | 
			
		||||
 | 
			
		||||
 Daniel (30 July 1999)
 | 
			
		||||
 - Steve Walch pointed out that there is a memory leak in the formdata
 | 
			
		||||
   functions. I added a FormFree() function that is now used and supposed to
 | 
			
		||||
   correct this flaw.
 | 
			
		||||
 | 
			
		||||
 - Mark Wotton reported:
 | 
			
		||||
   'curl -L https://www.cwa.com.au/' core dumps.  I managed to cure this by
 | 
			
		||||
   correcting the cleanup procedure. The bug seems to be gone with my OpenSSL
 | 
			
		||||
   0.9.2b, although still occurs when I run the ~100 years old SSLeay 0.8.0. I
 | 
			
		||||
   don't know whether it is curl or SSLeay that is to blame for that.
 | 
			
		||||
 | 
			
		||||
 - Marcus Klein:
 | 
			
		||||
   Reported an FTP upload resume bug that I really can't repeat nor understand.
 | 
			
		||||
   I leave it here so that it won't be forgotten.
 | 
			
		||||
 | 
			
		||||
 Daniel (29 July 1999)
 | 
			
		||||
 - Costya Shulyupin suggested support for longer URLs when following Location:
 | 
			
		||||
   and I could only agree and fix it!
 | 
			
		||||
 | 
			
		||||
 - Leigh Purdie found a problem in the upload/POST department. It turned out
 | 
			
		||||
   that http.c accidentaly cleared the pointer instead of the byte counter
 | 
			
		||||
   when supposed to.
 | 
			
		||||
 | 
			
		||||
 - Costya Shulyupin pointed out a problem with port numbers and Location:. If
 | 
			
		||||
   you had a server at a non-standard port that redirected to an URL using a
 | 
			
		||||
   standard port number, curl still used that first port number.
 | 
			
		||||
 | 
			
		||||
 - Ralph Beckmann pointed out a problem when using both CONF_FOLLOWLOCATION
 | 
			
		||||
   and CONF_FAILONERROR simultaneously. Since the CONF_FAILONERROR exits on
 | 
			
		||||
   the 302-code that the follow location header outputs it will never show any
 | 
			
		||||
   html on location: pages. I have now made it look for >=400 codes if
 | 
			
		||||
   CONF_FOLLOWLOCATION is set.
 | 
			
		||||
 | 
			
		||||
 - 'struct slist' is now renamed to 'struct curl_slist' (as suggested by Ralph
 | 
			
		||||
   Beckmann).
 | 
			
		||||
 | 
			
		||||
 - Joshua Swink and Rick Welykochy were the first to point out to me that the
 | 
			
		||||
   latest OpenSSL package now have moved the standard include path. It is now
 | 
			
		||||
   in /usr/local/ssl/include/openssl and I have now modified the --enable-ssl
 | 
			
		||||
   option for the configure script to use that as the primary path, and I
 | 
			
		||||
   leave the former path too to work with older packages of OpenSSL too.
 | 
			
		||||
 | 
			
		||||
 Daniel (9 June 1999)
 | 
			
		||||
 - I finally understood the IRIX problem and now it seem to compile on it!
 | 
			
		||||
   I am gonna remove those #define strcasecmp() things once and for all now.
 | 
			
		||||
 | 
			
		||||
 Daniel (4 June 1999)
 | 
			
		||||
 - I adjusted the FTP reply 227 parser to make the PASV command work better
 | 
			
		||||
   with more ftp servers. Appearantly the Roxen Challanger server replied
 | 
			
		||||
   something curl 5.9 could deal with! :-( Reported by Ashley Reid-Montanaro
 | 
			
		||||
   and Mark Butler brought a solution for it.
 | 
			
		||||
 | 
			
		||||
 Daniel (26 May 1999)
 | 
			
		||||
 - Rearranged. README is new, the old one is now README.curl and I added a
 | 
			
		||||
   README.libcurl with text I got from Ralph Beckmann.
 | 
			
		||||
 | 
			
		||||
 - I also updated the INSTALL text.
 | 
			
		||||
 | 
			
		||||
 Daniel (25 May 1999)
 | 
			
		||||
 - David Jonathan Lowsky correctly pointed out that curl didn't properly deal
 | 
			
		||||
   with form posting where the variable shouldn't have any content, as in curl
 | 
			
		||||
   -F "form=" www.site.com. It was now fixed.
 | 
			
		||||
 | 
			
		||||
Version 5.9
 | 
			
		||||
 | 
			
		||||
 Daniel (22 May 1999)
 | 
			
		||||
 - I've got a bug report from Aaron Scarisbrick in which he states he has some
 | 
			
		||||
   problems with -L under FreeBSD 3.0. I have previously got another bug
 | 
			
		||||
   report from Stefan Grether which points at an error with similar sympthoms
 | 
			
		||||
   when using win32. I made the allocation of the new url string a bit faster
 | 
			
		||||
   and different, don't know if it actually improves anything though...
 | 
			
		||||
 | 
			
		||||
 Daniel (20 May 1999)
 | 
			
		||||
 - Made the cookie parser deal with CRLF newlines too.
 | 
			
		||||
 | 
			
		||||
 Daniel (19 May 1999)
 | 
			
		||||
 - Download() didn't properly deal with failing return codes from the sread()
 | 
			
		||||
   function. Adam Coyne found the problem in the win32 version, and Troy Engel
 | 
			
		||||
   helped me out isolating it.
 | 
			
		||||
 | 
			
		||||
 Daniel (16 May 1999)
 | 
			
		||||
 - Richard Adams pointed out a bug I introduced in 5.8. --dump-header doesn't
 | 
			
		||||
   work anymore! :-/ I fixed it now.
 | 
			
		||||
 | 
			
		||||
 - After a suggestion by Joshua Swink I added -S / --show-error to force curl
 | 
			
		||||
   to display the error message in case of an error, even if -s/--silent was
 | 
			
		||||
   used.
 | 
			
		||||
 | 
			
		||||
 Daniel (10 May 1999)
 | 
			
		||||
 - I moved the stuff concerning HTTP, DICT and TELNET it their own source
 | 
			
		||||
   files now. It is a beginning on my clean-up of the sources to make them
 | 
			
		||||
   layer all those protocols better to enable more to be added easier in the
 | 
			
		||||
   future!
 | 
			
		||||
 | 
			
		||||
 - Leon Breedt sent me some files I've not put into the main curl
 | 
			
		||||
   archive. They're for creating the Debian package thingie. He also sent me a
 | 
			
		||||
   debian package that I've made available for download at the web page
 | 
			
		||||
 | 
			
		||||
 Daniel (9 May 1999)
 | 
			
		||||
 - Made it compile on cygwin too.
 | 
			
		||||
 | 
			
		||||
 Troy Engel (7 May 1999)
 | 
			
		||||
 - Brought a series of patches to allow curl to compile smoothly on MSVC++ 6
 | 
			
		||||
   again!
 | 
			
		||||
 | 
			
		||||
 Daniel (6 May 1999)
 | 
			
		||||
 - I changed the #ifdef HAVE_STRFTIME placement for the -z code so that it
 | 
			
		||||
   will be easier to discover systems that don't have that function and thus
 | 
			
		||||
   can't use -z successfully. Made the strftime() get used if WIN32 is defined
 | 
			
		||||
   too.
 | 
			
		||||
 | 
			
		||||
Version 5.8
 | 
			
		||||
 | 
			
		||||
 Daniel (5 May 1999)
 | 
			
		||||
 - I've had it with this autoconf/automake mess. It seems to work allright
 | 
			
		||||
   for most people who don't have automake installed, but for those who have
 | 
			
		||||
   there are problems all over.
 | 
			
		||||
 | 
			
		||||
   I've got like five different bug reports on this only the last
 | 
			
		||||
   week... Claudio Neves and Federico Bianchi and root <duggerj001 at
 | 
			
		||||
   hawaii.rr.com> are some of them reporting this.
 | 
			
		||||
 | 
			
		||||
   Currently, I have no really good fix since I want to use automake myself to
 | 
			
		||||
   generate the Makefile.in files. I've found out that the @SHELL@-problems
 | 
			
		||||
   can often be fixed by manually invoking 'automake' in the archive root
 | 
			
		||||
   before you run ./configure... I've hacked my maketgz script now to fiddle
 | 
			
		||||
   a bit with this and my tests seem to work better than before at least!
 | 
			
		||||
 | 
			
		||||
 Daniel (4 May 1999)
 | 
			
		||||
 - mkhelp.pl has been doing badly lately. I corrected a case problem in
 | 
			
		||||
   the regexes.
 | 
			
		||||
 | 
			
		||||
 - I've now remade the -o option to not touch the file unless it needs to.
 | 
			
		||||
   I had to do this to make -z option really fine, since now you can make a
 | 
			
		||||
   curl fetch and use a local copy's time when downloading to that file, as
 | 
			
		||||
   in:
 | 
			
		||||
 | 
			
		||||
        curl -z dump -o dump remote.site.com/file.html
 | 
			
		||||
 | 
			
		||||
   This will only get the file if the remote one is newer than the local.
 | 
			
		||||
   I'm aware that this alters previous behaviour a little. Some scripts out
 | 
			
		||||
   there may depend on that the file is always touched...
 | 
			
		||||
 | 
			
		||||
 - Corrected a bug in the SSLv2/v3 selection.
 | 
			
		||||
 | 
			
		||||
 - Felix von Leitner requested that curl should be able to send
 | 
			
		||||
   "If-Modified-Since" headers, which indeed is a fair idea.  I implemented it
 | 
			
		||||
   right away! Try -z <expression> where expression is a full GNU date
 | 
			
		||||
   expression or a file name to get the date from!
 | 
			
		||||
 | 
			
		||||
 Stephan Lagerholm (30 Apr 1999)
 | 
			
		||||
 - Pointed out a problem with the src/Makefile for FreeBSD. The RM variable
 | 
			
		||||
   isn't set and causes the make to fail.
 | 
			
		||||
 | 
			
		||||
 Daniel (26 April 1999)
 | 
			
		||||
 - Am I silly or what? Irving Wolfe pointed out to me that the curl version
 | 
			
		||||
   number was not set properly. Hasn't been since 5.6. This was due to a bug
 | 
			
		||||
   in my maketgz script!
 | 
			
		||||
 | 
			
		||||
 David Eriksson (25 Apr 1999)
 | 
			
		||||
 - Found a bug in cookies.c that made it crash at times.
 | 
			
		||||
 | 
			
		||||
Version 5.7.1
 | 
			
		||||
 | 
			
		||||
 Doug Kaufman (23 Apr 1999)
 | 
			
		||||
 - Brought two sunos 4 fixes. One of them being the hostip.c fix mentioned
 | 
			
		||||
   below and the other one a correction in include/stdcheaders.h
 | 
			
		||||
 | 
			
		||||
 - Added a paragraph about compiling with the US-version of openssl to the
 | 
			
		||||
   INSTALL file.
 | 
			
		||||
 | 
			
		||||
 Daniel
 | 
			
		||||
 - New mailing list address. Info updated on the web page as well as in the
 | 
			
		||||
   README file
 | 
			
		||||
 | 
			
		||||
 Greg Onufer (20 Apr 1999)
 | 
			
		||||
 - hostip.c didn't compile properly on SunOS 5.5.1.
 | 
			
		||||
   It needs an #include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
Version 5.7
 | 
			
		||||
 | 
			
		||||
 Daniel (Apr 20 1999)
 | 
			
		||||
 - Decided to upload a non-beta version right now!
 | 
			
		||||
 | 
			
		||||
 - Made curl support any-length HTTP headers. The destination buffer is now
 | 
			
		||||
   simply enlarged every time it turns out to be too small!
 | 
			
		||||
 | 
			
		||||
 - Added the FAQ file to the archive. Still a bit smallish, but it is a
 | 
			
		||||
   start.
 | 
			
		||||
 | 
			
		||||
 Eric Thelin (15 Apr 1999)
 | 
			
		||||
 - Made -D accept '-' instead of filename to write to stdout.
 | 
			
		||||
 | 
			
		||||
Version 5.6.3beta
 | 
			
		||||
 | 
			
		||||
 Daniel (Apr 12 1999)
 | 
			
		||||
 | 
			
		||||
 - Changed two #ifdef WIN32 to better #ifdef <errorcode> when connect()ing
 | 
			
		||||
   in url.c and ftp.c. Makes cygwin32 deal with them better too. We should
 | 
			
		||||
   try to get some decent win32-replacement there. Anyone?
 | 
			
		||||
 | 
			
		||||
 - The old -3/--crlf option is now ONLY --crlf!
 | 
			
		||||
 | 
			
		||||
 - I changed the "SSL fix" to a more lame one, but that doesn't remove as
 | 
			
		||||
   much functionality. Now I've enabled the lib to select what SSL version it
 | 
			
		||||
   should try first. Appearantly some older SSL-servers don't like when you
 | 
			
		||||
   talk v3 with them so you need to be able to force curl to talk v2 from the
 | 
			
		||||
   start. The fix dated April 6 and posted on the mailing list forced curl to
 | 
			
		||||
   use v2 at all times using a modern OpenSSL version, but we don't really
 | 
			
		||||
   want such a crippled solution.
 | 
			
		||||
 
 | 
			
		||||
 - Marc Boucher sent me a patch that corrected a math error for the
 | 
			
		||||
   "Curr.Speed" progress meter.
 | 
			
		||||
 | 
			
		||||
 - Eric Thelin sent me a patch that enables '-K -' to read a config file from
 | 
			
		||||
   stdin.
 | 
			
		||||
 | 
			
		||||
 - I found out we didn't close the file properly before so I added it!
 | 
			
		||||
 | 
			
		||||
 Daniel (Apr 9 1999)
 | 
			
		||||
 - Yu Xin pointed out a problem with ftp download resume.  It didn't work at
 | 
			
		||||
   all! ;-O
 | 
			
		||||
 | 
			
		||||
 Daniel (Apr 6 1999)
 | 
			
		||||
 - Corrected the version string part generated for the SSL version.
 | 
			
		||||
 | 
			
		||||
 - I found a way to make some other SSL page work with openssl 0.9.1+ that
 | 
			
		||||
   previously didn't (ssleay 0.8.0 works with it though!). Trying to get
 | 
			
		||||
   some real info from the OpenSSL guys to see how I should do to behave the
 | 
			
		||||
   best way. SSLeay 0.8.0 shouldn't be that much in use anyway these days!
 | 
			
		||||
 | 
			
		||||
Version 5.6.2beta
 | 
			
		||||
 | 
			
		||||
 Daniel (Apr 4 1999)
 | 
			
		||||
 - Finally have curl more cookie "aware". Now read carefully. This is how
 | 
			
		||||
   it works.
 | 
			
		||||
   To make curl read cookies from an already existing file, in plain header-
 | 
			
		||||
   format (like from the headers of a previous fetch) invoke curl with the
 | 
			
		||||
   -b flag like:
 | 
			
		||||
 | 
			
		||||
        curl -b file http://site/foo.html
 | 
			
		||||
 | 
			
		||||
   Curl will then use all cookies it finds matching. The old style that sets
 | 
			
		||||
   a single cookie with -b is still supported and is used if the string
 | 
			
		||||
   following -b includes a '=' letter, as in "-b name=daniel".
 | 
			
		||||
 | 
			
		||||
   To make curl read the cookies sent in combination with a location: (which
 | 
			
		||||
   sites often do) point curl to read a non-existing file at first (i.e
 | 
			
		||||
   to start with no existing cookies), like:
 | 
			
		||||
 | 
			
		||||
        curl -b nowhere http://site/setcookieandrelocate.html
 | 
			
		||||
 | 
			
		||||
 - Added a paragraph in the TODO file about the SSL problems recently
 | 
			
		||||
   reported. Evidently, some kind of SSL-problem curl may need to address.
 | 
			
		||||
 | 
			
		||||
 - Better "Location:" following.
 | 
			
		||||
 | 
			
		||||
 Douglas E. Wegscheid (Tue, 30 Mar 1999)
 | 
			
		||||
 - A subsecond display patch.
 | 
			
		||||
 | 
			
		||||
 Daniel (Mar 14 1999)
 | 
			
		||||
 - I've separated the version number of libcurl and curl now. To make
 | 
			
		||||
   things a little easier, I decided to start the curl numbering from
 | 
			
		||||
   5.6 and the former version number known as "curl" is now the one
 | 
			
		||||
   set for libcurl.
 | 
			
		||||
 | 
			
		||||
 - Removed the 'enable-no-pass' from configure, I doubt anyone wanted
 | 
			
		||||
   that.
 | 
			
		||||
 | 
			
		||||
 - Made lots of tiny adjustments to compile smoothly with cygwin under
 | 
			
		||||
   win32. It's a killer for porting this to win32, bye bye VC++! ;-)
 | 
			
		||||
   Compiles and builds out-of-the-box now. See the new wordings in
 | 
			
		||||
   INSTALL for details.
 | 
			
		||||
 | 
			
		||||
 - Beginning experiments with downloading multiple document from a http
 | 
			
		||||
   server while remaining connected.
 | 
			
		||||
 | 
			
		||||
Version 5.6beta
 | 
			
		||||
 | 
			
		||||
 Daniel (Mar 13 1999)
 | 
			
		||||
 - Since I've changed so much, I thought I'd just go ahead and implement the
 | 
			
		||||
   suggestion from Douglas E. Wegscheid. -D or --dump-header is now storing
 | 
			
		||||
   HTTP headers separately in the specified file.
 | 
			
		||||
 | 
			
		||||
 - Added new text to INSTALL on what to do to build this on win32 now.
 | 
			
		||||
 | 
			
		||||
 - Aaargh. I had to take a step back and prefix the shared #include files
 | 
			
		||||
   in the sources with "../include/" to please VC++...
 | 
			
		||||
 | 
			
		||||
 Daniel (Mar 12 1999)
 | 
			
		||||
 - Split the url.c source into many tiny sources for better readability
 | 
			
		||||
   and smaller size.
 | 
			
		||||
 | 
			
		||||
 Daniel (Mar 11 1999)
 | 
			
		||||
 - Started to change stuff for a move to make libcurl and a more separate
 | 
			
		||||
   curl application that uses the libcurl. Made the libcurl sources into
 | 
			
		||||
   the new lib directory while the curl application will remain in src as
 | 
			
		||||
   before. New makefiles, adjusted configure script and so.
 | 
			
		||||
 | 
			
		||||
   libcurl.a built quickly and easily. I better make a better interface to
 | 
			
		||||
   the lib functions though.
 | 
			
		||||
 | 
			
		||||
   The new root dir include/ is supposed to contain the public information
 | 
			
		||||
   about the new libcurl. It is a little ugly so far :-)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Daniel (Mar 1 1999)
 | 
			
		||||
 - Todd Kaufmann sent me a good link to Netscape's cookie spec as well as the
 | 
			
		||||
   info that RFC 2109 specifies how to use them.  The link is now in the
 | 
			
		||||
   README and the RFC in the RESOURCES.
 | 
			
		||||
 | 
			
		||||
 Daniel (Feb 23 1999)
 | 
			
		||||
 - Finally made configure accept --with-ssl to look for SSL libs and includes
 | 
			
		||||
   in the "standard" place /usr/local/ssl...
 | 
			
		||||
 | 
			
		||||
 Daniel (Feb 22 1999)
 | 
			
		||||
 - Verified that curl linked fine with OpenSSL 0.9.1c which seems to be
 | 
			
		||||
   the most recent.
 | 
			
		||||
 | 
			
		||||
 Henri Gomez (Fri Feb  5 1999)
 | 
			
		||||
 - Sent in an updated curl-ssl.spec. I still miss the script that builds an
 | 
			
		||||
   RPM automatically...
 | 
			
		||||
 | 
			
		||||
Version 5.5.1
 | 
			
		||||
 | 
			
		||||
 Mark Butler (27 Jan 1999)
 | 
			
		||||
 - Corrected problems in Download().
 | 
			
		||||
 | 
			
		||||
 Danitel Stenberg (25 Jan 1999)
 | 
			
		||||
 - Jeremie Petit pointed out a few flaws in the source that prevented it from
 | 
			
		||||
   compile warning free with the native compiler under Digital Unix v4.0d.
 | 
			
		||||
 | 
			
		||||
Version 5.5
 | 
			
		||||
 | 
			
		||||
 Daniel Stenberg (15 Jan 1999)
 | 
			
		||||
 - Added Bjorns small text to the README about the DICT protocol.
 | 
			
		||||
 | 
			
		||||
 Daniel Stenberg (11 Jan 1999)
 | 
			
		||||
 - <jswink at softcom.net> reported about the win32-versioin: "Doesn't use
 | 
			
		||||
   ALL_PROXY environment variable". Turned out to be because of the static-
 | 
			
		||||
   buffer nature of the win32 environment variable calls!
 | 
			
		||||
 | 
			
		||||
 Bjorn Reese (10 Jan 1999)
 | 
			
		||||
 - I have attached a simple addition for the DICT protocol (RFC 2229).
 | 
			
		||||
   It performs dictionary lookups. The output still needs to be better
 | 
			
		||||
   formatted.
 | 
			
		||||
 | 
			
		||||
   To test it try (the exact format, and more examples are described in
 | 
			
		||||
   the RFC)
 | 
			
		||||
 | 
			
		||||
        dict://dict.org/m:hello
 | 
			
		||||
        dict://dict.org/m:hello::soundex
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Vicente Garcia (10 Jan 1999)
 | 
			
		||||
 - Corrected the progress meter for files larger than 20MB.
 | 
			
		||||
 | 
			
		||||
 Daniel Stenberg (7 Jan 1999)
 | 
			
		||||
 - Corrected the -t and -T help texts. They claimed to be FTP only.
 | 
			
		||||
 | 
			
		||||
Version 5.4
 | 
			
		||||
 | 
			
		||||
 Daniel Stenberg
 | 
			
		||||
 (7 Jan 1999)
 | 
			
		||||
 - Irving Wolfe reported that curl -s didn't always supress the progress
 | 
			
		||||
   reporting. It was the form post that autoamtically always switched it on
 | 
			
		||||
   again. This is now corrected!
 | 
			
		||||
 | 
			
		||||
 (4 Jan 1999)
 | 
			
		||||
 - Andreas Kostyrka suggested I'd add PUT and he helped me out to test it. If
 | 
			
		||||
   you use -t or -T now on a http or https server, PUT will be used for file
 | 
			
		||||
   upload.
 | 
			
		||||
 | 
			
		||||
   I removed the former use of -T with HTTP. I doubt anyone ever really used
 | 
			
		||||
   that.
 | 
			
		||||
 | 
			
		||||
 (4 Jan 1999)
 | 
			
		||||
 - Erik Jacobsen found a width bug in the mprintf() function.  I corrected it
 | 
			
		||||
   now.
 | 
			
		||||
 | 
			
		||||
 (4 Jan 1999)
 | 
			
		||||
 - As John V. Chow pointed out to me, curl accepted very limited URL sizes. It
 | 
			
		||||
   should now accept path parts that are up to at least 4096 bytes.
 | 
			
		||||
 | 
			
		||||
 - Somehow I screwed up when applying the AIX fix from Gilbert Ramirez, so
 | 
			
		||||
   I redid that now.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1381
									
								
								CHANGES.2000
									
									
									
									
									
								
							
							
						
						
									
										1381
									
								
								CHANGES.2000
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										21
									
								
								COPYING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								COPYING
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
COPYRIGHT AND PERMISSION NOTICE
 | 
			
		||||
 | 
			
		||||
Copyright (c) 1996 - 2007, Daniel Stenberg, <daniel@haxx.se>.
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and distribute this software for any purpose
 | 
			
		||||
with or without fee is hereby granted, provided that the above copyright
 | 
			
		||||
notice and this permission notice appear in all copies.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
 | 
			
		||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 | 
			
		||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 | 
			
		||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
 | 
			
		||||
OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
Except as contained in this notice, the name of a copyright holder shall not
 | 
			
		||||
be used in advertising or otherwise to promote the sale, use or other dealings
 | 
			
		||||
in this Software without prior written authorization of the copyright holder.
 | 
			
		||||
							
								
								
									
										43
									
								
								CVS-INFO
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								CVS-INFO
									
									
									
									
									
								
							@@ -15,40 +15,49 @@ Compile and build instructions follow below.
 | 
			
		||||
  CHANGES.0     contains ancient changes.
 | 
			
		||||
  CHANGES.$year contains changes for the particular year.
 | 
			
		||||
 | 
			
		||||
  memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
 | 
			
		||||
                is used when compiling
 | 
			
		||||
 | 
			
		||||
  buildconf     builds the makefiles and configure stuff
 | 
			
		||||
 | 
			
		||||
  Makefile.dist is included as the root Makefile in distribution archives
 | 
			
		||||
 | 
			
		||||
  perl/         is a subdirectory with various perl scripts
 | 
			
		||||
 | 
			
		||||
To build after having extracted everything from CVS, do this:
 | 
			
		||||
To build in environments that support configure, after having extracted
 | 
			
		||||
everything from CVS, do this:
 | 
			
		||||
 | 
			
		||||
./buildconf
 | 
			
		||||
./configure
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
  Daniel uses a ./configure line similar to this for easier development:
 | 
			
		||||
 | 
			
		||||
  ./configure --disable-shared --enable-debug --enable-maintainer-mode
 | 
			
		||||
 | 
			
		||||
In environments that don't support configure (i.e. Microsoft), do this:
 | 
			
		||||
 | 
			
		||||
buildconf.bat
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
REQUIREMENTS
 | 
			
		||||
 | 
			
		||||
 You need the following software installed:
 | 
			
		||||
 For buildconf (not buildconf.bat) to work, you need the following software
 | 
			
		||||
installed:
 | 
			
		||||
 | 
			
		||||
 o autoconf 2.50 (or later)
 | 
			
		||||
 o automake 1.5 (or later)
 | 
			
		||||
 o libtool  1.4 (or later)
 | 
			
		||||
 o autoconf 2.57  (or later)
 | 
			
		||||
 o automake 1.7   (or later)
 | 
			
		||||
 o libtool  1.4.2 (or later)
 | 
			
		||||
 o GNU m4 (required by autoconf)
 | 
			
		||||
 | 
			
		||||
 o nroff + perl (if you don't have nroff and perl and you for some reason
 | 
			
		||||
   don't want to install them, you can rename the source file
 | 
			
		||||
   src/hugehelp.c.cvs to src/hugehelp.c and avoid having to generate this
 | 
			
		||||
   file. This will of course give you an older version of the file that isn't
 | 
			
		||||
   up-to-date. That file was checked in once and won't be updated very
 | 
			
		||||
   regularly.)
 | 
			
		||||
 o nroff + perl
 | 
			
		||||
 | 
			
		||||
   If you don't have nroff and perl and you for some reason don't want to
 | 
			
		||||
   install them, you can rename the source file src/hugehelp.c.cvs to
 | 
			
		||||
   src/hugehelp.c and avoid having to generate this file. This will of course
 | 
			
		||||
   give you an older version of the file that isn't up-to-date. That file was
 | 
			
		||||
   checked in once and won't be updated very regularly.
 | 
			
		||||
 | 
			
		||||
MAC OS X
 | 
			
		||||
 | 
			
		||||
 For Mac OS X users, Guido Neitzer write down the following step-by-step guide:
 | 
			
		||||
 With Mac OS X 10.2 and the associated Developer Tools, the installed versions
 | 
			
		||||
 of the build tools are adequate.  For Mac OS X 10.1 users, Guido Neitzer
 | 
			
		||||
 wrote the following step-by-step guide:
 | 
			
		||||
 | 
			
		||||
 1. Install fink (http://fink.sourceforge.net)
 | 
			
		||||
 2. Update fink to the newest version (with the installed fink)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								LEGAL
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								LEGAL
									
									
									
									
									
								
							@@ -1,25 +0,0 @@
 | 
			
		||||
 Copyright (C) 1998-2001, Daniel Stenberg, <daniel@haxx.se>, et al.
 | 
			
		||||
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies of this license
 | 
			
		||||
 document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
 In order to be useful for every potential user, the curl and libcurl are
 | 
			
		||||
 dual-licensed under the MPL and the MIT/X-derivate licenses.
 | 
			
		||||
 | 
			
		||||
 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 MPL or the MIT/X-derivate licenses. You may
 | 
			
		||||
 pick one of these licenses. The files MITX.txt and MPL-1.1.txt contain the
 | 
			
		||||
 license texts.
 | 
			
		||||
 | 
			
		||||
 As a courtesy to the open-source and free software community, we ask you to
 | 
			
		||||
 dual-license any modifications that you make as well, under the terms of this
 | 
			
		||||
 document.
 | 
			
		||||
 | 
			
		||||
 Please remember to always keep the licensing information included in
 | 
			
		||||
 individual source files up-to-date, so as to avoid misleading anyone as to
 | 
			
		||||
 the status of these files.
 | 
			
		||||
 | 
			
		||||
 I will use a submission policy according to which I will only enter
 | 
			
		||||
 contributions into the CVS tree if the contributor agrees to both licenses
 | 
			
		||||
 and this dual-license approach.
 | 
			
		||||
							
								
								
									
										27
									
								
								MITX.txt
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								MITX.txt
									
									
									
									
									
								
							@@ -1,27 +0,0 @@
 | 
			
		||||
COPYRIGHT AND PERMISSION NOTICE
 | 
			
		||||
 | 
			
		||||
Copyright (c) 1996 - 2001, Daniel Stenberg, <daniel@haxx.se>.
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, and/or sell copies of the
 | 
			
		||||
Software, and to permit persons to whom the Software is furnished to do so,
 | 
			
		||||
provided that the above copyright notice(s) and this permission notice appear
 | 
			
		||||
in all copies of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
 | 
			
		||||
NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
 | 
			
		||||
LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
 | 
			
		||||
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
			
		||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 | 
			
		||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 | 
			
		||||
Except as contained in this notice, the name of a copyright holder shall not
 | 
			
		||||
be used in advertising or otherwise to promote the sale, use or other dealings
 | 
			
		||||
in this Software without prior written authorization of the copyright holder.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										470
									
								
								MPL-1.1.txt
									
									
									
									
									
								
							
							
						
						
									
										470
									
								
								MPL-1.1.txt
									
									
									
									
									
								
							@@ -1,470 +0,0 @@
 | 
			
		||||
                          MOZILLA PUBLIC LICENSE
 | 
			
		||||
                                Version 1.1
 | 
			
		||||
 | 
			
		||||
                              ---------------
 | 
			
		||||
 | 
			
		||||
1. Definitions.
 | 
			
		||||
 | 
			
		||||
     1.0.1. "Commercial Use" means distribution or otherwise making the
 | 
			
		||||
     Covered Code available to a third party.
 | 
			
		||||
 | 
			
		||||
     1.1. "Contributor" means each entity that creates or contributes to
 | 
			
		||||
     the creation of Modifications.
 | 
			
		||||
 | 
			
		||||
     1.2. "Contributor Version" means the combination of the Original
 | 
			
		||||
     Code, prior Modifications used by a Contributor, and the Modifications
 | 
			
		||||
     made by that particular Contributor.
 | 
			
		||||
 | 
			
		||||
     1.3. "Covered Code" means the Original Code or Modifications or the
 | 
			
		||||
     combination of the Original Code and Modifications, in each case
 | 
			
		||||
     including portions thereof.
 | 
			
		||||
 | 
			
		||||
     1.4. "Electronic Distribution Mechanism" means a mechanism generally
 | 
			
		||||
     accepted in the software development community for the electronic
 | 
			
		||||
     transfer of data.
 | 
			
		||||
 | 
			
		||||
     1.5. "Executable" means Covered Code in any form other than Source
 | 
			
		||||
     Code.
 | 
			
		||||
 | 
			
		||||
     1.6. "Initial Developer" means the individual or entity identified
 | 
			
		||||
     as the Initial Developer in the Source Code notice required by Exhibit
 | 
			
		||||
     A.
 | 
			
		||||
 | 
			
		||||
     1.7. "Larger Work" means a work which combines Covered Code or
 | 
			
		||||
     portions thereof with code not governed by the terms of this License.
 | 
			
		||||
 | 
			
		||||
     1.8. "License" means this document.
 | 
			
		||||
 | 
			
		||||
     1.8.1. "Licensable" means having the right to grant, to the maximum
 | 
			
		||||
     extent possible, whether at the time of the initial grant or
 | 
			
		||||
     subsequently acquired, any and all of the rights conveyed herein.
 | 
			
		||||
 | 
			
		||||
     1.9. "Modifications" means any addition to or deletion from the
 | 
			
		||||
     substance or structure of either the Original Code or any previous
 | 
			
		||||
     Modifications. When Covered Code is released as a series of files, a
 | 
			
		||||
     Modification is:
 | 
			
		||||
          A. Any addition to or deletion from the contents of a file
 | 
			
		||||
          containing Original Code or previous Modifications.
 | 
			
		||||
 | 
			
		||||
          B. Any new file that contains any part of the Original Code or
 | 
			
		||||
          previous Modifications.
 | 
			
		||||
 | 
			
		||||
     1.10. "Original Code" means Source Code of computer software code
 | 
			
		||||
     which is described in the Source Code notice required by Exhibit A as
 | 
			
		||||
     Original Code, and which, at the time of its release under this
 | 
			
		||||
     License is not already Covered Code governed by this License.
 | 
			
		||||
 | 
			
		||||
     1.10.1. "Patent Claims" means any patent claim(s), now owned or
 | 
			
		||||
     hereafter acquired, including without limitation,  method, process,
 | 
			
		||||
     and apparatus claims, in any patent Licensable by grantor.
 | 
			
		||||
 | 
			
		||||
     1.11. "Source Code" means the preferred form of the Covered Code for
 | 
			
		||||
     making modifications to it, including all modules it contains, plus
 | 
			
		||||
     any associated interface definition files, scripts used to control
 | 
			
		||||
     compilation and installation of an Executable, or source code
 | 
			
		||||
     differential comparisons against either the Original Code or another
 | 
			
		||||
     well known, available Covered Code of the Contributor's choice. The
 | 
			
		||||
     Source Code can be in a compressed or archival form, provided the
 | 
			
		||||
     appropriate decompression or de-archiving software is widely available
 | 
			
		||||
     for no charge.
 | 
			
		||||
 | 
			
		||||
     1.12. "You" (or "Your")  means an individual or a legal entity
 | 
			
		||||
     exercising rights under, and complying with all of the terms of, this
 | 
			
		||||
     License or a future version of this License issued under Section 6.1.
 | 
			
		||||
     For legal entities, "You" includes any entity which controls, is
 | 
			
		||||
     controlled by, or is under common control with You. For purposes of
 | 
			
		||||
     this definition, "control" means (a) the power, direct or indirect,
 | 
			
		||||
     to cause the direction or management of such entity, whether by
 | 
			
		||||
     contract or otherwise, or (b) ownership of more than fifty percent
 | 
			
		||||
     (50%) of the outstanding shares or beneficial ownership of such
 | 
			
		||||
     entity.
 | 
			
		||||
 | 
			
		||||
2. Source Code License.
 | 
			
		||||
 | 
			
		||||
     2.1. The Initial Developer Grant.
 | 
			
		||||
     The Initial Developer hereby grants You a world-wide, royalty-free,
 | 
			
		||||
     non-exclusive license, subject to third party intellectual property
 | 
			
		||||
     claims:
 | 
			
		||||
          (a)  under intellectual property rights (other than patent or
 | 
			
		||||
          trademark) Licensable by Initial Developer to use, reproduce,
 | 
			
		||||
          modify, display, perform, sublicense and distribute the Original
 | 
			
		||||
          Code (or portions thereof) with or without Modifications, and/or
 | 
			
		||||
          as part of a Larger Work; and
 | 
			
		||||
 | 
			
		||||
          (b) under Patents Claims infringed by the making, using or
 | 
			
		||||
          selling of Original Code, to make, have made, use, practice,
 | 
			
		||||
          sell, and offer for sale, and/or otherwise dispose of the
 | 
			
		||||
          Original Code (or portions thereof).
 | 
			
		||||
 | 
			
		||||
          (c) the licenses granted in this Section 2.1(a) and (b) are
 | 
			
		||||
          effective on the date Initial Developer first distributes
 | 
			
		||||
          Original Code under the terms of this License.
 | 
			
		||||
 | 
			
		||||
          (d) Notwithstanding Section 2.1(b) above, no patent license is
 | 
			
		||||
          granted: 1) for code that You delete from the Original Code; 2)
 | 
			
		||||
          separate from the Original Code;  or 3) for infringements caused
 | 
			
		||||
          by: i) the modification of the Original Code or ii) the
 | 
			
		||||
          combination of the Original Code with other software or devices.
 | 
			
		||||
 | 
			
		||||
     2.2. Contributor Grant.
 | 
			
		||||
     Subject to third party intellectual property claims, each Contributor
 | 
			
		||||
     hereby grants You a world-wide, royalty-free, non-exclusive license
 | 
			
		||||
 | 
			
		||||
          (a)  under intellectual property rights (other than patent or
 | 
			
		||||
          trademark) Licensable by Contributor, to use, reproduce, modify,
 | 
			
		||||
          display, perform, sublicense and distribute the Modifications
 | 
			
		||||
          created by such Contributor (or portions thereof) either on an
 | 
			
		||||
          unmodified basis, with other Modifications, as Covered Code
 | 
			
		||||
          and/or as part of a Larger Work; and
 | 
			
		||||
 | 
			
		||||
          (b) under Patent Claims infringed by the making, using, or
 | 
			
		||||
          selling of  Modifications made by that Contributor either alone
 | 
			
		||||
          and/or in combination with its Contributor Version (or portions
 | 
			
		||||
          of such combination), to make, use, sell, offer for sale, have
 | 
			
		||||
          made, and/or otherwise dispose of: 1) Modifications made by that
 | 
			
		||||
          Contributor (or portions thereof); and 2) the combination of
 | 
			
		||||
          Modifications made by that Contributor with its Contributor
 | 
			
		||||
          Version (or portions of such combination).
 | 
			
		||||
 | 
			
		||||
          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
 | 
			
		||||
          effective on the date Contributor first makes Commercial Use of
 | 
			
		||||
          the Covered Code.
 | 
			
		||||
 | 
			
		||||
          (d)    Notwithstanding Section 2.2(b) above, no patent license is
 | 
			
		||||
          granted: 1) for any code that Contributor has deleted from the
 | 
			
		||||
          Contributor Version; 2)  separate from the Contributor Version;
 | 
			
		||||
          3)  for infringements caused by: i) third party modifications of
 | 
			
		||||
          Contributor Version or ii)  the combination of Modifications made
 | 
			
		||||
          by that Contributor with other software  (except as part of the
 | 
			
		||||
          Contributor Version) or other devices; or 4) under Patent Claims
 | 
			
		||||
          infringed by Covered Code in the absence of Modifications made by
 | 
			
		||||
          that Contributor.
 | 
			
		||||
 | 
			
		||||
3. Distribution Obligations.
 | 
			
		||||
 | 
			
		||||
     3.1. Application of License.
 | 
			
		||||
     The Modifications which You create or to which You contribute are
 | 
			
		||||
     governed by the terms of this License, including without limitation
 | 
			
		||||
     Section 2.2. The Source Code version of Covered Code may be
 | 
			
		||||
     distributed only under the terms of this License or a future version
 | 
			
		||||
     of this License released under Section 6.1, and You must include a
 | 
			
		||||
     copy of this License with every copy of the Source Code You
 | 
			
		||||
     distribute. You may not offer or impose any terms on any Source Code
 | 
			
		||||
     version that alters or restricts the applicable version of this
 | 
			
		||||
     License or the recipients' rights hereunder. However, You may include
 | 
			
		||||
     an additional document offering the additional rights described in
 | 
			
		||||
     Section 3.5.
 | 
			
		||||
 | 
			
		||||
     3.2. Availability of Source Code.
 | 
			
		||||
     Any Modification which You create or to which You contribute must be
 | 
			
		||||
     made available in Source Code form under the terms of this License
 | 
			
		||||
     either on the same media as an Executable version or via an accepted
 | 
			
		||||
     Electronic Distribution Mechanism to anyone to whom you made an
 | 
			
		||||
     Executable version available; and if made available via Electronic
 | 
			
		||||
     Distribution Mechanism, must remain available for at least twelve (12)
 | 
			
		||||
     months after the date it initially became available, or at least six
 | 
			
		||||
     (6) months after a subsequent version of that particular Modification
 | 
			
		||||
     has been made available to such recipients. You are responsible for
 | 
			
		||||
     ensuring that the Source Code version remains available even if the
 | 
			
		||||
     Electronic Distribution Mechanism is maintained by a third party.
 | 
			
		||||
 | 
			
		||||
     3.3. Description of Modifications.
 | 
			
		||||
     You must cause all Covered Code to which You contribute to contain a
 | 
			
		||||
     file documenting the changes You made to create that Covered Code and
 | 
			
		||||
     the date of any change. You must include a prominent statement that
 | 
			
		||||
     the Modification is derived, directly or indirectly, from Original
 | 
			
		||||
     Code provided by the Initial Developer and including the name of the
 | 
			
		||||
     Initial Developer in (a) the Source Code, and (b) in any notice in an
 | 
			
		||||
     Executable version or related documentation in which You describe the
 | 
			
		||||
     origin or ownership of the Covered Code.
 | 
			
		||||
 | 
			
		||||
     3.4. Intellectual Property Matters
 | 
			
		||||
          (a) Third Party Claims.
 | 
			
		||||
          If Contributor has knowledge that a license under a third party's
 | 
			
		||||
          intellectual property rights is required to exercise the rights
 | 
			
		||||
          granted by such Contributor under Sections 2.1 or 2.2,
 | 
			
		||||
          Contributor must include a text file with the Source Code
 | 
			
		||||
          distribution titled "LEGAL" which describes the claim and the
 | 
			
		||||
          party making the claim in sufficient detail that a recipient will
 | 
			
		||||
          know whom to contact. If Contributor obtains such knowledge after
 | 
			
		||||
          the Modification is made available as described in Section 3.2,
 | 
			
		||||
          Contributor shall promptly modify the LEGAL file in all copies
 | 
			
		||||
          Contributor makes available thereafter and shall take other steps
 | 
			
		||||
          (such as notifying appropriate mailing lists or newsgroups)
 | 
			
		||||
          reasonably calculated to inform those who received the Covered
 | 
			
		||||
          Code that new knowledge has been obtained.
 | 
			
		||||
 | 
			
		||||
          (b) Contributor APIs.
 | 
			
		||||
          If Contributor's Modifications include an application programming
 | 
			
		||||
          interface and Contributor has knowledge of patent licenses which
 | 
			
		||||
          are reasonably necessary to implement that API, Contributor must
 | 
			
		||||
          also include this information in the LEGAL file.
 | 
			
		||||
 | 
			
		||||
               (c)    Representations.
 | 
			
		||||
          Contributor represents that, except as disclosed pursuant to
 | 
			
		||||
          Section 3.4(a) above, Contributor believes that Contributor's
 | 
			
		||||
          Modifications are Contributor's original creation(s) and/or
 | 
			
		||||
          Contributor has sufficient rights to grant the rights conveyed by
 | 
			
		||||
          this License.
 | 
			
		||||
 | 
			
		||||
     3.5. Required Notices.
 | 
			
		||||
     You must duplicate the notice in Exhibit A in each file of the Source
 | 
			
		||||
     Code.  If it is not possible to put such notice in a particular Source
 | 
			
		||||
     Code file due to its structure, then You must include such notice in a
 | 
			
		||||
     location (such as a relevant directory) where a user would be likely
 | 
			
		||||
     to look for such a notice.  If You created one or more Modification(s)
 | 
			
		||||
     You may add your name as a Contributor to the notice described in
 | 
			
		||||
     Exhibit A.  You must also duplicate this License in any documentation
 | 
			
		||||
     for the Source Code where You describe recipients' rights or ownership
 | 
			
		||||
     rights relating to Covered Code.  You may choose to offer, and to
 | 
			
		||||
     charge a fee for, warranty, support, indemnity or liability
 | 
			
		||||
     obligations to one or more recipients of Covered Code. However, You
 | 
			
		||||
     may do so only on Your own behalf, and not on behalf of the Initial
 | 
			
		||||
     Developer or any Contributor. You must make it absolutely clear than
 | 
			
		||||
     any such warranty, support, indemnity or liability obligation is
 | 
			
		||||
     offered by You alone, and You hereby agree to indemnify the Initial
 | 
			
		||||
     Developer and every Contributor for any liability incurred by the
 | 
			
		||||
     Initial Developer or such Contributor as a result of warranty,
 | 
			
		||||
     support, indemnity or liability terms You offer.
 | 
			
		||||
 | 
			
		||||
     3.6. Distribution of Executable Versions.
 | 
			
		||||
     You may distribute Covered Code in Executable form only if the
 | 
			
		||||
     requirements of Section 3.1-3.5 have been met for that Covered Code,
 | 
			
		||||
     and if You include a notice stating that the Source Code version of
 | 
			
		||||
     the Covered Code is available under the terms of this License,
 | 
			
		||||
     including a description of how and where You have fulfilled the
 | 
			
		||||
     obligations of Section 3.2. The notice must be conspicuously included
 | 
			
		||||
     in any notice in an Executable version, related documentation or
 | 
			
		||||
     collateral in which You describe recipients' rights relating to the
 | 
			
		||||
     Covered Code. You may distribute the Executable version of Covered
 | 
			
		||||
     Code or ownership rights under a license of Your choice, which may
 | 
			
		||||
     contain terms different from this License, provided that You are in
 | 
			
		||||
     compliance with the terms of this License and that the license for the
 | 
			
		||||
     Executable version does not attempt to limit or alter the recipient's
 | 
			
		||||
     rights in the Source Code version from the rights set forth in this
 | 
			
		||||
     License. If You distribute the Executable version under a different
 | 
			
		||||
     license You must make it absolutely clear that any terms which differ
 | 
			
		||||
     from this License are offered by You alone, not by the Initial
 | 
			
		||||
     Developer or any Contributor. You hereby agree to indemnify the
 | 
			
		||||
     Initial Developer and every Contributor for any liability incurred by
 | 
			
		||||
     the Initial Developer or such Contributor as a result of any such
 | 
			
		||||
     terms You offer.
 | 
			
		||||
 | 
			
		||||
     3.7. Larger Works.
 | 
			
		||||
     You may create a Larger Work by combining Covered Code with other code
 | 
			
		||||
     not governed by the terms of this License and distribute the Larger
 | 
			
		||||
     Work as a single product. In such a case, You must make sure the
 | 
			
		||||
     requirements of this License are fulfilled for the Covered Code.
 | 
			
		||||
 | 
			
		||||
4. Inability to Comply Due to Statute or Regulation.
 | 
			
		||||
 | 
			
		||||
     If it is impossible for You to comply with any of the terms of this
 | 
			
		||||
     License with respect to some or all of the Covered Code due to
 | 
			
		||||
     statute, judicial order, or regulation then You must: (a) comply with
 | 
			
		||||
     the terms of this License to the maximum extent possible; and (b)
 | 
			
		||||
     describe the limitations and the code they affect. Such description
 | 
			
		||||
     must be included in the LEGAL file described in Section 3.4 and must
 | 
			
		||||
     be included with all distributions of the Source Code. Except to the
 | 
			
		||||
     extent prohibited by statute or regulation, such description must be
 | 
			
		||||
     sufficiently detailed for a recipient of ordinary skill to be able to
 | 
			
		||||
     understand it.
 | 
			
		||||
 | 
			
		||||
5. Application of this License.
 | 
			
		||||
 | 
			
		||||
     This License applies to code to which the Initial Developer has
 | 
			
		||||
     attached the notice in Exhibit A and to related Covered Code.
 | 
			
		||||
 | 
			
		||||
6. Versions of the License.
 | 
			
		||||
 | 
			
		||||
     6.1. New Versions.
 | 
			
		||||
     Netscape Communications Corporation ("Netscape") may publish revised
 | 
			
		||||
     and/or new versions of the License from time to time. Each version
 | 
			
		||||
     will be given a distinguishing version number.
 | 
			
		||||
 | 
			
		||||
     6.2. Effect of New Versions.
 | 
			
		||||
     Once Covered Code has been published under a particular version of the
 | 
			
		||||
     License, You may always continue to use it under the terms of that
 | 
			
		||||
     version. You may also choose to use such Covered Code under the terms
 | 
			
		||||
     of any subsequent version of the License published by Netscape. No one
 | 
			
		||||
     other than Netscape has the right to modify the terms applicable to
 | 
			
		||||
     Covered Code created under this License.
 | 
			
		||||
 | 
			
		||||
     6.3. Derivative Works.
 | 
			
		||||
     If You create or use a modified version of this License (which you may
 | 
			
		||||
     only do in order to apply it to code which is not already Covered Code
 | 
			
		||||
     governed by this License), You must (a) rename Your license so that
 | 
			
		||||
     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
 | 
			
		||||
     "MPL", "NPL" or any confusingly similar phrase do not appear in your
 | 
			
		||||
     license (except to note that your license differs from this License)
 | 
			
		||||
     and (b) otherwise make it clear that Your version of the license
 | 
			
		||||
     contains terms which differ from the Mozilla Public License and
 | 
			
		||||
     Netscape Public License. (Filling in the name of the Initial
 | 
			
		||||
     Developer, Original Code or Contributor in the notice described in
 | 
			
		||||
     Exhibit A shall not of themselves be deemed to be modifications of
 | 
			
		||||
     this License.)
 | 
			
		||||
 | 
			
		||||
7. DISCLAIMER OF WARRANTY.
 | 
			
		||||
 | 
			
		||||
     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
 | 
			
		||||
     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 | 
			
		||||
     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
 | 
			
		||||
     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
 | 
			
		||||
     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
 | 
			
		||||
     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
 | 
			
		||||
     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
 | 
			
		||||
     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
 | 
			
		||||
     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
 | 
			
		||||
     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
 | 
			
		||||
 | 
			
		||||
8. TERMINATION.
 | 
			
		||||
 | 
			
		||||
     8.1.  This License and the rights granted hereunder will terminate
 | 
			
		||||
     automatically if You fail to comply with terms herein and fail to cure
 | 
			
		||||
     such breach within 30 days of becoming aware of the breach. All
 | 
			
		||||
     sublicenses to the Covered Code which are properly granted shall
 | 
			
		||||
     survive any termination of this License. Provisions which, by their
 | 
			
		||||
     nature, must remain in effect beyond the termination of this License
 | 
			
		||||
     shall survive.
 | 
			
		||||
 | 
			
		||||
     8.2.  If You initiate litigation by asserting a patent infringement
 | 
			
		||||
     claim (excluding declatory judgment actions) against Initial Developer
 | 
			
		||||
     or a Contributor (the Initial Developer or Contributor against whom
 | 
			
		||||
     You file such action is referred to as "Participant")  alleging that:
 | 
			
		||||
 | 
			
		||||
     (a)  such Participant's Contributor Version directly or indirectly
 | 
			
		||||
     infringes any patent, then any and all rights granted by such
 | 
			
		||||
     Participant to You under Sections 2.1 and/or 2.2 of this License
 | 
			
		||||
     shall, upon 60 days notice from Participant terminate prospectively,
 | 
			
		||||
     unless if within 60 days after receipt of notice You either: (i)
 | 
			
		||||
     agree in writing to pay Participant a mutually agreeable reasonable
 | 
			
		||||
     royalty for Your past and future use of Modifications made by such
 | 
			
		||||
     Participant, or (ii) withdraw Your litigation claim with respect to
 | 
			
		||||
     the Contributor Version against such Participant.  If within 60 days
 | 
			
		||||
     of notice, a reasonable royalty and payment arrangement are not
 | 
			
		||||
     mutually agreed upon in writing by the parties or the litigation claim
 | 
			
		||||
     is not withdrawn, the rights granted by Participant to You under
 | 
			
		||||
     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
 | 
			
		||||
     the 60 day notice period specified above.
 | 
			
		||||
 | 
			
		||||
     (b)  any software, hardware, or device, other than such Participant's
 | 
			
		||||
     Contributor Version, directly or indirectly infringes any patent, then
 | 
			
		||||
     any rights granted to You by such Participant under Sections 2.1(b)
 | 
			
		||||
     and 2.2(b) are revoked effective as of the date You first made, used,
 | 
			
		||||
     sold, distributed, or had made, Modifications made by that
 | 
			
		||||
     Participant.
 | 
			
		||||
 | 
			
		||||
     8.3.  If You assert a patent infringement claim against Participant
 | 
			
		||||
     alleging that such Participant's Contributor Version directly or
 | 
			
		||||
     indirectly infringes any patent where such claim is resolved (such as
 | 
			
		||||
     by license or settlement) prior to the initiation of patent
 | 
			
		||||
     infringement litigation, then the reasonable value of the licenses
 | 
			
		||||
     granted by such Participant under Sections 2.1 or 2.2 shall be taken
 | 
			
		||||
     into account in determining the amount or value of any payment or
 | 
			
		||||
     license.
 | 
			
		||||
 | 
			
		||||
     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
 | 
			
		||||
     all end user license agreements (excluding distributors and resellers)
 | 
			
		||||
     which have been validly granted by You or any distributor hereunder
 | 
			
		||||
     prior to termination shall survive termination.
 | 
			
		||||
 | 
			
		||||
9. LIMITATION OF LIABILITY.
 | 
			
		||||
 | 
			
		||||
     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
 | 
			
		||||
     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
 | 
			
		||||
     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
 | 
			
		||||
     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
 | 
			
		||||
     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
 | 
			
		||||
     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
 | 
			
		||||
     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
 | 
			
		||||
     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
 | 
			
		||||
     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
 | 
			
		||||
     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
 | 
			
		||||
     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
 | 
			
		||||
     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
 | 
			
		||||
     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
 | 
			
		||||
     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
 | 
			
		||||
 | 
			
		||||
10. U.S. GOVERNMENT END USERS.
 | 
			
		||||
 | 
			
		||||
     The Covered Code is a "commercial item," as that term is defined in
 | 
			
		||||
     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
 | 
			
		||||
     software" and "commercial computer software documentation," as such
 | 
			
		||||
     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
 | 
			
		||||
     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
 | 
			
		||||
     all U.S. Government End Users acquire Covered Code with only those
 | 
			
		||||
     rights set forth herein.
 | 
			
		||||
 | 
			
		||||
11. MISCELLANEOUS.
 | 
			
		||||
 | 
			
		||||
     This License represents the complete agreement concerning subject
 | 
			
		||||
     matter hereof. If any provision of this License is held to be
 | 
			
		||||
     unenforceable, such provision shall be reformed only to the extent
 | 
			
		||||
     necessary to make it enforceable. This License shall be governed by
 | 
			
		||||
     California law provisions (except to the extent applicable law, if
 | 
			
		||||
     any, provides otherwise), excluding its conflict-of-law provisions.
 | 
			
		||||
     With respect to disputes in which at least one party is a citizen of,
 | 
			
		||||
     or an entity chartered or registered to do business in the United
 | 
			
		||||
     States of America, any litigation relating to this License shall be
 | 
			
		||||
     subject to the jurisdiction of the Federal Courts of the Northern
 | 
			
		||||
     District of California, with venue lying in Santa Clara County,
 | 
			
		||||
     California, with the losing party responsible for costs, including
 | 
			
		||||
     without limitation, court costs and reasonable attorneys' fees and
 | 
			
		||||
     expenses. The application of the United Nations Convention on
 | 
			
		||||
     Contracts for the International Sale of Goods is expressly excluded.
 | 
			
		||||
     Any law or regulation which provides that the language of a contract
 | 
			
		||||
     shall be construed against the drafter shall not apply to this
 | 
			
		||||
     License.
 | 
			
		||||
 | 
			
		||||
12. RESPONSIBILITY FOR CLAIMS.
 | 
			
		||||
 | 
			
		||||
     As between Initial Developer and the Contributors, each party is
 | 
			
		||||
     responsible for claims and damages arising, directly or indirectly,
 | 
			
		||||
     out of its utilization of rights under this License and You agree to
 | 
			
		||||
     work with Initial Developer and Contributors to distribute such
 | 
			
		||||
     responsibility on an equitable basis. Nothing herein is intended or
 | 
			
		||||
     shall be deemed to constitute any admission of liability.
 | 
			
		||||
 | 
			
		||||
13. MULTIPLE-LICENSED CODE.
 | 
			
		||||
 | 
			
		||||
     Initial Developer may designate portions of the Covered Code as
 | 
			
		||||
     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
 | 
			
		||||
     Developer permits you to utilize portions of the Covered Code under
 | 
			
		||||
     Your choice of the NPL or the alternative licenses, if any, specified
 | 
			
		||||
     by the Initial Developer in the file described in Exhibit A.
 | 
			
		||||
 | 
			
		||||
EXHIBIT A -Mozilla Public License.
 | 
			
		||||
 | 
			
		||||
     ``The contents of this file are subject to the Mozilla Public License
 | 
			
		||||
     Version 1.1 (the "License"); you may not use this file except in
 | 
			
		||||
     compliance with the License. You may obtain a copy of the License at
 | 
			
		||||
     http://www.mozilla.org/MPL/
 | 
			
		||||
 | 
			
		||||
     Software distributed under the License is distributed on an "AS IS"
 | 
			
		||||
     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 | 
			
		||||
     License for the specific language governing rights and limitations
 | 
			
		||||
     under the License.
 | 
			
		||||
 | 
			
		||||
     The Original Code is ______________________________________.
 | 
			
		||||
 | 
			
		||||
     The Initial Developer of the Original Code is ________________________.
 | 
			
		||||
     Portions created by ______________________ are Copyright (C) ______
 | 
			
		||||
     _______________________. All Rights Reserved.
 | 
			
		||||
 | 
			
		||||
     Contributor(s): ______________________________________.
 | 
			
		||||
 | 
			
		||||
     Alternatively, the contents of this file may be used under the terms
 | 
			
		||||
     of the _____ license (the  "[___] License"), in which case the
 | 
			
		||||
     provisions of [______] License are applicable instead of those
 | 
			
		||||
     above.  If you wish to allow use of your version of this file only
 | 
			
		||||
     under the terms of the [____] License and not to allow others to use
 | 
			
		||||
     your version of this file under the MPL, indicate your decision by
 | 
			
		||||
     deleting  the provisions above and replace  them with the notice and
 | 
			
		||||
     other provisions required by the [___] License.  If you do not delete
 | 
			
		||||
     the provisions above, a recipient may use your version of this file
 | 
			
		||||
     under either the MPL or the [___] License."
 | 
			
		||||
 | 
			
		||||
     [NOTE: The text of this Exhibit A may differ slightly from the text of
 | 
			
		||||
     the notices in the Source Code files of the Original Code. You should
 | 
			
		||||
     use the text of this Exhibit A rather than the text found in the
 | 
			
		||||
     Original Code Source Code for Your Modifications.]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										78
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								Makefile.am
									
									
									
									
									
								
							@@ -1,29 +1,75 @@
 | 
			
		||||
#***************************************************************************
 | 
			
		||||
#                                  _   _ ____  _
 | 
			
		||||
#  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$
 | 
			
		||||
#
 | 
			
		||||
###########################################################################
 | 
			
		||||
 | 
			
		||||
AUTOMAKE_OPTIONS = foreign no-dependencies
 | 
			
		||||
AUTOMAKE_OPTIONS = foreign
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST =						\
 | 
			
		||||
	CHANGES LEGAL maketgz MITX.txt MPL-1.1.txt	\
 | 
			
		||||
	reconf Makefile.dist curl-config.in build_vms.com curl-mode.el \
 | 
			
		||||
	config-vms.h config-win32.h config-riscos.h config-mac.h
 | 
			
		||||
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist curl-config.in \
 | 
			
		||||
 curl-style.el sample.emacs RELEASE-NOTES buildconf buildconf.bat libcurl.pc.in
 | 
			
		||||
 | 
			
		||||
bin_SCRIPTS = curl-config
 | 
			
		||||
 | 
			
		||||
SUBDIRS = docs lib src include tests packages multi
 | 
			
		||||
SUBDIRS = lib src
 | 
			
		||||
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
 | 
			
		||||
 | 
			
		||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
			
		||||
pkgconfig_DATA = libcurl.pc
 | 
			
		||||
 | 
			
		||||
# create a root makefile in the distribution:
 | 
			
		||||
dist-hook:
 | 
			
		||||
	cp $(srcdir)/Makefile.dist $(distdir)/Makefile
 | 
			
		||||
	rm -rf $(top_builddir)/tests/log
 | 
			
		||||
	find $(distdir) -name "*.dist" -exec rm {} \;
 | 
			
		||||
	(distit=`find $(srcdir) -name "*.dist"`; \
 | 
			
		||||
	for file in $$distit; do \
 | 
			
		||||
	  strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
 | 
			
		||||
	  cp $$file $(distdir)$$strip; \
 | 
			
		||||
	done)
 | 
			
		||||
 | 
			
		||||
html:
 | 
			
		||||
	cd docs; make html
 | 
			
		||||
 | 
			
		||||
pdf:
 | 
			
		||||
	cd docs; make pdf
 | 
			
		||||
 | 
			
		||||
check: test
 | 
			
		||||
 | 
			
		||||
if CROSSCOMPILING
 | 
			
		||||
test-full: test
 | 
			
		||||
test-torture: test
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
	@(cd tests; $(MAKE) quiet-test)
 | 
			
		||||
	@echo "NOTICE: we can't run the tests when cross-compiling!"
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
	@(cd tests; $(MAKE) all quiet-test)
 | 
			
		||||
 | 
			
		||||
test-full:
 | 
			
		||||
	@(cd tests; $(MAKE) all full-test)
 | 
			
		||||
 | 
			
		||||
test-torture:
 | 
			
		||||
	@(cd tests; $(MAKE) all torture-test)
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
 | 
			
		||||
@@ -64,7 +110,7 @@ rpm:
 | 
			
		||||
pkgadd:
 | 
			
		||||
	umask 022 ; \
 | 
			
		||||
	make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
 | 
			
		||||
	cat LEGAL MITX.txt MPL-1.1.txt > $(srcdir)/packages/Solaris/copyright ; \
 | 
			
		||||
	cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
 | 
			
		||||
	cd $(srcdir)/packages/Solaris && $(MAKE) package
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
@@ -72,3 +118,13 @@ pkgadd:
 | 
			
		||||
# resulting .tar.bz2 file will end up at packages/Win32/cygwin
 | 
			
		||||
cygwinbin:
 | 
			
		||||
	$(MAKE) -C packages/Win32/cygwin cygwinbin
 | 
			
		||||
 | 
			
		||||
# We extend the standard install with a custom hook:
 | 
			
		||||
install-data-hook:
 | 
			
		||||
	cd include && $(MAKE) install
 | 
			
		||||
	cd docs && $(MAKE) install
 | 
			
		||||
 | 
			
		||||
# We extend the standard uninstall with a custom hook:
 | 
			
		||||
uninstall-hook:
 | 
			
		||||
	cd include && $(MAKE) uninstall
 | 
			
		||||
	cd docs && $(MAKE) uninstall
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										212
									
								
								Makefile.dist
									
									
									
									
									
								
							
							
						
						
									
										212
									
								
								Makefile.dist
									
									
									
									
									
								
							@@ -1,25 +1,27 @@
 | 
			
		||||
#############################################################################
 | 
			
		||||
#***************************************************************************
 | 
			
		||||
#                                  _   _ ____  _
 | 
			
		||||
#  Project                     ___| | | |  _ \| |
 | 
			
		||||
#                             / __| | | | |_) | |
 | 
			
		||||
#                            | (__| |_| |  _ <| |___
 | 
			
		||||
#                             \___|\___/|_| \_\_____|
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2001, Daniel Stenberg, <daniel@haxx.se>, et al.
 | 
			
		||||
# Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
 | 
			
		||||
#
 | 
			
		||||
# In order to be useful for every potential user, curl and libcurl are
 | 
			
		||||
# dual-licensed under the MPL and the MIT/X-derivate licenses.
 | 
			
		||||
# 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 MPL or the MIT/X-derivate
 | 
			
		||||
# licenses. You may pick one of these licenses.
 | 
			
		||||
# 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$
 | 
			
		||||
#############################################################################
 | 
			
		||||
###########################################################################
 | 
			
		||||
 | 
			
		||||
VC=vc6
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	./configure
 | 
			
		||||
@@ -30,28 +32,167 @@ ssl:
 | 
			
		||||
	make
 | 
			
		||||
 | 
			
		||||
borland:
 | 
			
		||||
	cd lib & make -f Makefile.b32
 | 
			
		||||
	cd src & make -f Makefile.b32
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32
 | 
			
		||||
 | 
			
		||||
borland-ssl:
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1
 | 
			
		||||
 | 
			
		||||
borland-ssl-zlib:
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
 | 
			
		||||
borland-clean:
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32 clean
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32 clean
 | 
			
		||||
 | 
			
		||||
watcom:
 | 
			
		||||
	cd lib
 | 
			
		||||
	wmake -f Makefile.Watcom
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	wmake -f Makefile.Watcom
 | 
			
		||||
 | 
			
		||||
watcom-clean:
 | 
			
		||||
	cd lib
 | 
			
		||||
	wmake -f Makefile.Watcom clean
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	wmake -f Makefile.Watcom clean
 | 
			
		||||
 | 
			
		||||
mingw32:
 | 
			
		||||
	cd lib & make -f Makefile.m32
 | 
			
		||||
	cd src & make -f Makefile.m32
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-ssl:
 | 
			
		||||
	cd lib & make -f Makefile.m32 SSL=1
 | 
			
		||||
	cd src & make -f Makefile.m32 SSL=1
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 SSL=1 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 SSL=1 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-ssh2-ssl:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 SSH2=1 SSL=1 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 SSH2=1 SSL=1 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-ssh2-ssl-sspi:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 SSH2=1 SSL=1 SSPI=1 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 SSH2=1 SSL=1 SSPI=1 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-clean:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 clean
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 clean
 | 
			
		||||
 | 
			
		||||
vc-clean:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.$(VC) clean
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake -f Makefile.$(VC) clean
 | 
			
		||||
 | 
			
		||||
vc-all:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.vc6 cfg=release
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake -f Makefile.vc6
 | 
			
		||||
	nmake /f Makefile.$(VC)
 | 
			
		||||
 | 
			
		||||
vc-zlib:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib
 | 
			
		||||
 | 
			
		||||
vc-ssl:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.vc6 cfg=release-ssl
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake -f Makefile.vc6
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl
 | 
			
		||||
 | 
			
		||||
vc-ssl-zlib:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-zlib
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-zlib
 | 
			
		||||
 | 
			
		||||
vc-ssl-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll
 | 
			
		||||
 | 
			
		||||
vc-dll-ssl-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
 | 
			
		||||
 | 
			
		||||
vc-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll
 | 
			
		||||
 | 
			
		||||
vc-dll-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-dll-ssl-dll-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-ssl-dll-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-sspi:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
 | 
			
		||||
 | 
			
		||||
djgpp:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.dj
 | 
			
		||||
	$(MAKE) -C src -f Makefile.dj
 | 
			
		||||
 | 
			
		||||
cygwin:
 | 
			
		||||
	./configure
 | 
			
		||||
@@ -61,6 +202,38 @@ cygwin-ssl:
 | 
			
		||||
	./configure --with-ssl
 | 
			
		||||
	make
 | 
			
		||||
 | 
			
		||||
amiga:
 | 
			
		||||
	cd ./lib && make -f makefile.amiga
 | 
			
		||||
	cd ./src && make -f makefile.amiga
 | 
			
		||||
 | 
			
		||||
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 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-ssh2-ssl-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware WITH_SSH2=1 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware WITH_SSH2=1 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
 | 
			
		||||
netware-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware WITH_ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware WITH_ZLIB=1
 | 
			
		||||
 | 
			
		||||
netware-clean:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware clean
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware clean
 | 
			
		||||
 | 
			
		||||
unix: all
 | 
			
		||||
 | 
			
		||||
unix-ssl: ssl
 | 
			
		||||
@@ -68,3 +241,8 @@ unix-ssl: ssl
 | 
			
		||||
linux: all
 | 
			
		||||
 | 
			
		||||
linux-ssl: ssl
 | 
			
		||||
 | 
			
		||||
vc8:
 | 
			
		||||
	echo "generate VC8 makefiles"
 | 
			
		||||
	sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e 's#/GZ#/RTC1#' -e 's/wsock32.lib/wsock32.lib bufferoverflowu.lib/g' -e 's/VC6/VC8/g' lib/Makefile.vc6 > lib/Makefile.vc8
 | 
			
		||||
	sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e 's#/GZ#/RTC1#' -e 's/wsock32.lib/wsock32.lib bufferoverflowu.lib/g' -e 's/VC6/VC8/g' src/Makefile.vc6 > src/Makefile.vc8
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								README
									
									
									
									
									
								
							@@ -6,42 +6,48 @@
 | 
			
		||||
 | 
			
		||||
README
 | 
			
		||||
 | 
			
		||||
  Curl is a command line tool for transfering data specified with URL
 | 
			
		||||
  syntax. Find out how to use Curl by reading the curl.1 man page or the
 | 
			
		||||
  Curl is a command line tool for transferring data specified with URL
 | 
			
		||||
  syntax. Find out how to use curl by reading the curl.1 man page or the
 | 
			
		||||
  MANUAL document. Find out how to install Curl by reading the INSTALL
 | 
			
		||||
  document.
 | 
			
		||||
 | 
			
		||||
  libcurl is a library that Curl is using to do its job. It is readily
 | 
			
		||||
  libcurl is the library curl is using to do its job. It is readily
 | 
			
		||||
  available to be used by your software. Read the libcurl.3 man page to
 | 
			
		||||
  find out how!
 | 
			
		||||
  learn how!
 | 
			
		||||
 | 
			
		||||
  You find answers to the most frequent questions we get in the FAQ document.
 | 
			
		||||
 | 
			
		||||
  Study the LEGAL file for distribution terms and similar.
 | 
			
		||||
  Study the COPYING file for distribution terms and similar. If you distribute
 | 
			
		||||
  curl binaries or other binaries that involve libcurl, you might enjoy the
 | 
			
		||||
  LICENSE-MIXING document.
 | 
			
		||||
 | 
			
		||||
  Always try the Curl web site for the latest news:
 | 
			
		||||
CONTACT
 | 
			
		||||
 | 
			
		||||
        http://curl.haxx.se
 | 
			
		||||
  If you have problems, questions, ideas or suggestions, please contact us
 | 
			
		||||
  by posting to a suitable mailing list. See http://curl.haxx.se/mail/
 | 
			
		||||
 | 
			
		||||
  The official download mirror sites are:
 | 
			
		||||
  All contributors to the project are listed in the THANKS document.
 | 
			
		||||
 | 
			
		||||
        Sweden    -- ftp://ftp.sunet.se/pub/www/utilities/curl/
 | 
			
		||||
        Sweden    -- http://cool.haxx.se/curl/
 | 
			
		||||
        Germany   -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
 | 
			
		||||
WEB SITE
 | 
			
		||||
 | 
			
		||||
  Visit the curl web site or mirrors for the latest news and downloads:
 | 
			
		||||
 | 
			
		||||
        Sweden       http://curl.haxx.se/
 | 
			
		||||
        Mirrors      http://curlm.haxx.se/
 | 
			
		||||
 | 
			
		||||
CVS
 | 
			
		||||
 | 
			
		||||
  To download the very latest source off the CVS server do this:
 | 
			
		||||
 | 
			
		||||
    cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
 | 
			
		||||
   cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl login
 | 
			
		||||
 | 
			
		||||
  (just press enter when asked for password)
 | 
			
		||||
 | 
			
		||||
    cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co curl 
 | 
			
		||||
   cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl co curl
 | 
			
		||||
 | 
			
		||||
  (you'll get a directory named curl created, filled with the source code)
 | 
			
		||||
 | 
			
		||||
    cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
 | 
			
		||||
        
 | 
			
		||||
  (you're off the hook!)
 | 
			
		||||
NOTICE
 | 
			
		||||
 | 
			
		||||
  Curl contains pieces of source code that is Copyright (c) 1998, 1999
 | 
			
		||||
  Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										84
									
								
								RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
Curl and libcurl 7.16.3
 | 
			
		||||
 | 
			
		||||
 Public curl release number:               99
 | 
			
		||||
 Releases counted from the very beginning: 126
 | 
			
		||||
 Available command line options:           118
 | 
			
		||||
 Available curl_easy_setopt() options:     141
 | 
			
		||||
 Number of public functions in libcurl:    54
 | 
			
		||||
 Amount of public web site mirrors:        38
 | 
			
		||||
 Number of known libcurl bindings:         35
 | 
			
		||||
 Number of contributors:                   554
 | 
			
		||||
 | 
			
		||||
This release includes the following changes:
 | 
			
		||||
 
 | 
			
		||||
 o added curl_multi_socket_action()
 | 
			
		||||
 o deprecated curl_multi_socket()
 | 
			
		||||
 o uses less memory in non-pipelined use cases
 | 
			
		||||
 o CURLOPT_HTTP200ALIASES matched transfers assume HTTP 1.0 compliance
 | 
			
		||||
 o more than one test harness can run at the same time without conflict
 | 
			
		||||
 o SFTP now supports quote commands before a transfer
 | 
			
		||||
 o CURLMOPT_MAXCONNECTS added to curl_multi_setopt()
 | 
			
		||||
 o upload resume works for file:// URLs
 | 
			
		||||
 o asynchronous name resolves now require c-ares 1.4.0 or later
 | 
			
		||||
 o added SOCKS test cases
 | 
			
		||||
 | 
			
		||||
This release includes the following bugfixes:
 | 
			
		||||
 | 
			
		||||
 o if2up too long interface name memory leak
 | 
			
		||||
 o test case 534 started to fail 2007-04-13 due to the existance of a
 | 
			
		||||
   new host on the net with the same silly domain the test was using
 | 
			
		||||
   for a host which was supposed not to exist.
 | 
			
		||||
 o test suite SSL certificate works better with newer stunnel
 | 
			
		||||
 o internal progress meter update frequency back to once per second
 | 
			
		||||
 o avoid some unnecessary calls to function gettimeofday
 | 
			
		||||
 o a double-free in the SSL-layer
 | 
			
		||||
 o GnuTLS free of NULL credentials
 | 
			
		||||
 o NSS-fix for closing down SSL
 | 
			
		||||
 o bad warning from configure when gnutls was selected
 | 
			
		||||
 o compilation on VMS 64-bit mode
 | 
			
		||||
 o SCP/SFTP downloads could hang on the last bytes of a transfer
 | 
			
		||||
 o curl_easy_duphandle() crash
 | 
			
		||||
 o curl -V / curl_version*() works even when GnuTLS is used on a system without
 | 
			
		||||
   a good random source
 | 
			
		||||
 o curl_multi_socket() not "noticing" newly added handles
 | 
			
		||||
 o lack of Content-Length and chunked encoding now requires HTTP 1.1 as well
 | 
			
		||||
   to be treated as without response body
 | 
			
		||||
 o connection cache growth in multi handles
 | 
			
		||||
 o better handling of out of memory conditions
 | 
			
		||||
 o overwriting an uploaded file with sftp now truncates it first
 | 
			
		||||
 o SFTP quote commands chmod, chown, chgrp can now set a value of 0
 | 
			
		||||
 o TFTP connect timouts less than 5 seconds
 | 
			
		||||
 o improved curl -w for TFTP transfers
 | 
			
		||||
 o memory leak when failed OpenSSL certificate CN field checking
 | 
			
		||||
 o memory leak when OpenSSL failed PKCS #12 parsing
 | 
			
		||||
 o FPL-SSL when built with NSS
 | 
			
		||||
 o out-of-boundary write in Curl_select()
 | 
			
		||||
 o -s/--silent can now be used to toggle off the silence again
 | 
			
		||||
 | 
			
		||||
This release includes the following known bugs:
 | 
			
		||||
 | 
			
		||||
 o see docs/KNOWN_BUGS (http://curl.haxx.se/docs/knownbugs.html)
 | 
			
		||||
 | 
			
		||||
Other curl-related news:
 | 
			
		||||
 | 
			
		||||
 o PycURL 7.16.2.1 was released: http://pycurl.sf.net/
 | 
			
		||||
 o TclCurl 7.16.2 was released:
 | 
			
		||||
   http://personal1.iddeo.es/andresgarci/tclcurl/english/
 | 
			
		||||
 | 
			
		||||
New curl mirrors:
 | 
			
		||||
 | 
			
		||||
 o http://curl.spegulo.be is a new mirror in Belgium
 | 
			
		||||
 o http://curl.piotrkosoft.net is a new mirror in Poland
 | 
			
		||||
 o http://curl.smudge-it.net is a new mirror in St Louis, MO, USA
 | 
			
		||||
 o http://curl.askapache.com is a new mirror in Indiana, USA
 | 
			
		||||
 | 
			
		||||
This release would not have looked like this without help, code, reports and
 | 
			
		||||
advice from friends like these:
 | 
			
		||||
 | 
			
		||||
 Song Ma, Dan Fandrich, Yang Tse, Jay Austin, Robert Iakobashvil,
 | 
			
		||||
 James Housley, Daniel Black, Steve Little, Sonia Subramanian, Peter O'Gorman,
 | 
			
		||||
 Frank Hempel, Michael Wallner, Jeff Pohlmeyer, Tobias Rundstr<74>m,
 | 
			
		||||
 Anders Gustafsson, James Bursa, Kristian Gunstone, Feng Tu,
 | 
			
		||||
 Andre Guibert de Bruet, Rob Crittenden
 | 
			
		||||
 | 
			
		||||
        Thanks! (and sorry if I forgot to mention someone)
 | 
			
		||||
							
								
								
									
										5
									
								
								TODO-RELEASE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								TODO-RELEASE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
To be addressed before 7.16.3 (planned release: June 2007)
 | 
			
		||||
=============================
 | 
			
		||||
 | 
			
		||||
93 - 
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										66
									
								
								acconfig.h
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								acconfig.h
									
									
									
									
									
								
							@@ -1,66 +0,0 @@
 | 
			
		||||
/* Name of this package! */
 | 
			
		||||
#undef PACKAGE
 | 
			
		||||
 | 
			
		||||
/* Version number of this archive. */
 | 
			
		||||
#undef VERSION
 | 
			
		||||
 | 
			
		||||
/* Define if you have the getpass function.  */
 | 
			
		||||
#undef HAVE_GETPASS
 | 
			
		||||
 | 
			
		||||
/* Define cpu-machine-OS */
 | 
			
		||||
#undef OS
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyaddr_r() function with 5 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYADDR_R_5
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyaddr_r() function with 7 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYADDR_R_7
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyaddr_r() function with 8 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYADDR_R_8
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyname_r() function with 3 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYNAME_R_3
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyname_r() function with 5 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYNAME_R_5
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyname_r() function with 6 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYNAME_R_6
 | 
			
		||||
 | 
			
		||||
/* Define if you have the inet_ntoa_r function declared. */
 | 
			
		||||
#undef HAVE_INET_NTOA_R_DECL
 | 
			
		||||
 | 
			
		||||
/* Define if you need the _REENTRANT define for some functions */
 | 
			
		||||
#undef NEED_REENTRANT
 | 
			
		||||
 | 
			
		||||
/* Define if you have the Kerberos4 libraries (including -ldes) */
 | 
			
		||||
#undef KRB4
 | 
			
		||||
 | 
			
		||||
/* Define if you want to enable IPv6 support */
 | 
			
		||||
#undef ENABLE_IPV6
 | 
			
		||||
 | 
			
		||||
/* Define this to 'int' if ssize_t is not an available typedefed type */
 | 
			
		||||
#undef ssize_t
 | 
			
		||||
 | 
			
		||||
/* Define this to 'int' if socklen_t is not an available typedefed type */
 | 
			
		||||
#undef socklen_t
 | 
			
		||||
 | 
			
		||||
/* Define this as a suitable file to read random data from */
 | 
			
		||||
#undef RANDOM_FILE
 | 
			
		||||
 | 
			
		||||
/* Define this to your Entropy Gathering Daemon socket pathname */
 | 
			
		||||
#undef EGD_SOCKET
 | 
			
		||||
 | 
			
		||||
/* Define if you have a working OpenSSL installation */
 | 
			
		||||
#undef OPENSSL_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Define the one correct non-blocking socket method below */
 | 
			
		||||
#undef HAVE_FIONBIO
 | 
			
		||||
#undef HAVE_IOCTLSOCKET
 | 
			
		||||
#undef HAVE_IOCTLSOCKET_CASE
 | 
			
		||||
#undef HAVE_O_NONBLOCK
 | 
			
		||||
#undef HAVE_DISABLED_NONBLOCKING
 | 
			
		||||
 | 
			
		||||
/* Define this to 'int' if in_addr_t is not an available typedefed type */
 | 
			
		||||
#undef in_addr_t
 | 
			
		||||
							
								
								
									
										1785
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										1785
									
								
								acinclude.m4
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										23
									
								
								ares/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								ares/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
configure
 | 
			
		||||
autom4te.cache
 | 
			
		||||
Makefile
 | 
			
		||||
adig
 | 
			
		||||
ahost
 | 
			
		||||
config.log
 | 
			
		||||
config.status
 | 
			
		||||
aclocal.m4
 | 
			
		||||
.deps
 | 
			
		||||
Makefile.in
 | 
			
		||||
config.guess
 | 
			
		||||
config.h
 | 
			
		||||
config.h.in
 | 
			
		||||
config.sub
 | 
			
		||||
libtool
 | 
			
		||||
ltmain.sh
 | 
			
		||||
stamp-h1
 | 
			
		||||
*.lo
 | 
			
		||||
.libs
 | 
			
		||||
depcomp
 | 
			
		||||
libcares.la
 | 
			
		||||
missing
 | 
			
		||||
ares_version.h.dist
 | 
			
		||||
							
								
								
									
										28
									
								
								ares/AUTHORS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								ares/AUTHORS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
c-ares is based on ares, and these are the people that have worked on it since
 | 
			
		||||
the fork was made:
 | 
			
		||||
 | 
			
		||||
Daniel Stenberg
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
liren at vivisimo.com
 | 
			
		||||
James Bursa
 | 
			
		||||
Duncan Wilcox
 | 
			
		||||
Dirk Manske
 | 
			
		||||
Dan Fandrich
 | 
			
		||||
Gisle Vanem
 | 
			
		||||
Gunter Knauf
 | 
			
		||||
Henrik Stoerner
 | 
			
		||||
Yang Tse
 | 
			
		||||
Nick Mathewson
 | 
			
		||||
Alexander Lazic
 | 
			
		||||
Andreas Rieke
 | 
			
		||||
Guilherme Balena Versiani
 | 
			
		||||
Brad Spencer
 | 
			
		||||
Ravi Pratap
 | 
			
		||||
William Ahern
 | 
			
		||||
Bram Matthys
 | 
			
		||||
Michael Wallner
 | 
			
		||||
Vlad Dinulescu
 | 
			
		||||
Brad House
 | 
			
		||||
Shmulik Regev
 | 
			
		||||
Ashish Sharma
 | 
			
		||||
Brad Spencer
 | 
			
		||||
							
								
								
									
										534
									
								
								ares/CHANGES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										534
									
								
								ares/CHANGES
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,534 @@
 | 
			
		||||
  Changelog for the c-ares project
 | 
			
		||||
 | 
			
		||||
Version 1.4.0 (June 8, 2007)
 | 
			
		||||
 | 
			
		||||
* June 4 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- James Bursa reported a major memory problem when resolving multi-IP names
 | 
			
		||||
  and I found and fixed the problem. It was added by Ashish Sharma's patch
 | 
			
		||||
  two days ago.
 | 
			
		||||
 | 
			
		||||
  When I then tried to verify multiple entries in /etc/hosts after my fix, I
 | 
			
		||||
  got another segfault and decided this code was not ripe for inclusion and I
 | 
			
		||||
  reverted the patch.
 | 
			
		||||
 | 
			
		||||
* June 2 2007
 | 
			
		||||
 | 
			
		||||
- Brad Spencer found and fixed three flaws in the code, found with the new
 | 
			
		||||
  gcc 4.2.0 warning: -Waddress
 | 
			
		||||
 | 
			
		||||
- Brad House fixed VS2005 compiler warnings due to time_t being 64bit.
 | 
			
		||||
  He also made recent Microsoft compilers use _strdup() instead of strdup().
 | 
			
		||||
 | 
			
		||||
- Brad House's man pages for ares_save_options() and ares_destroy_options()
 | 
			
		||||
  were added.
 | 
			
		||||
 | 
			
		||||
- Ashish Sharma provided a patch for supporting multiple entries in the
 | 
			
		||||
  /etc/hosts file. Patch edited for coding style and functionality by me
 | 
			
		||||
  (Daniel).
 | 
			
		||||
 | 
			
		||||
* May 30 2007
 | 
			
		||||
 | 
			
		||||
- Shmulik Regev brought cryptographically secure transaction IDs:
 | 
			
		||||
 | 
			
		||||
  The c-ares library implementation uses a DNS "Transaction ID" field that is
 | 
			
		||||
  seeded with a pseudo random number (based on gettimeofday) which is
 | 
			
		||||
  incremented (++) between consecutive calls and is therefore rather
 | 
			
		||||
  predictable. In general, predictability of DNS Transaction ID is a well
 | 
			
		||||
  known security problem (e.g.
 | 
			
		||||
  http://bak.spc.org/dms/archive/dns_id_attack.txt) and makes a c-ares based
 | 
			
		||||
  implementation vulnerable to DNS poisoning. Credit goes to Amit Klein
 | 
			
		||||
  (Trusteer) for identifying this problem.
 | 
			
		||||
 | 
			
		||||
  The patch I wrote changes the implementation to use a more secure way of
 | 
			
		||||
  generating unique IDs. It starts by obtaining a key with reasonable entropy
 | 
			
		||||
  which is used with an RC4 stream to generate the cryptographically secure
 | 
			
		||||
  transaction IDs.
 | 
			
		||||
 | 
			
		||||
  Note that the key generation code (in ares_init:randomize_key) has two
 | 
			
		||||
  versions, the Windows specific one uses a cryptographically safe function
 | 
			
		||||
  provided (but undocumented :) by the operating system (described at
 | 
			
		||||
  http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx).  The
 | 
			
		||||
  default implementation is a bit naive and uses the standard 'rand'
 | 
			
		||||
  function. Surely a better way to generate random keys exists for other
 | 
			
		||||
  platforms.
 | 
			
		||||
 | 
			
		||||
  The patch can be tested by using the adig utility and using the '-s' option.
 | 
			
		||||
 | 
			
		||||
- Brad House added ares_save_options() and ares_destroy_options() that can be
 | 
			
		||||
  used to keep options for later re-usal when ares_init_options() is used.
 | 
			
		||||
  
 | 
			
		||||
  Problem: Calling ares_init() for each lookup can be unnecessarily resource
 | 
			
		||||
         intensive.  On windows, it must LoadLibrary() or search the registry
 | 
			
		||||
         on each call to ares_init().  On unix, it must read and parse
 | 
			
		||||
         multiple files to obtain the necessary configuration information.  In
 | 
			
		||||
         a single-threaded environment, it would make sense to only
 | 
			
		||||
         ares_init() once, but in a heavily multi-threaded environment, it is
 | 
			
		||||
         undesirable to ares_init() and ares_destroy() for each thread created
 | 
			
		||||
         and track that.
 | 
			
		||||
 | 
			
		||||
  Solution: Create ares_save_options() and ares_destroy_options() functions to
 | 
			
		||||
         retrieve and free options obtained from an initialized channel.  The
 | 
			
		||||
         options populated can be used to pass back into ares_init_options(),
 | 
			
		||||
         it should populate all needed fields and not retrieve any information
 | 
			
		||||
         from the system.  Probably wise to destroy the cache every minute or
 | 
			
		||||
         so to prevent the data from becoming stale.
 | 
			
		||||
 | 
			
		||||
- Daniel S added ares_process_fd() to allow applications to ask for processing
 | 
			
		||||
  on specific sockets and thus avoiding select() and associated
 | 
			
		||||
  functions/macros.  This function will be used by upcoming libcurl releases
 | 
			
		||||
  for this very reason. It also made me export the ares_socket_t type in the
 | 
			
		||||
  public ares.h header file, since ares_process_fd() uses that type for two of
 | 
			
		||||
  the arguments.
 | 
			
		||||
 | 
			
		||||
* May 25 2007
 | 
			
		||||
 | 
			
		||||
- Ravi Pratap fixed a flaw in the init_by_resolv_conf() function for windows
 | 
			
		||||
  that could cause it to return a bad return code.
 | 
			
		||||
 | 
			
		||||
* April 16 2007
 | 
			
		||||
 | 
			
		||||
- Yang Tse: Provide ares_getopt() command-line parser function as a source
 | 
			
		||||
  code helper function, not belonging to the actual c-ares library.
 | 
			
		||||
 | 
			
		||||
* February 19 2007
 | 
			
		||||
 | 
			
		||||
- Vlad Dinulescu added ares_parse_ns_reply().
 | 
			
		||||
 | 
			
		||||
* February 13 2007
 | 
			
		||||
 | 
			
		||||
- Yang Tse: Fix failure to get the search sequence of /etc/hosts and
 | 
			
		||||
  DNS from /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when
 | 
			
		||||
  /etc/resolv.conf did not exist or was unable to read it.
 | 
			
		||||
 | 
			
		||||
* November 22 2006
 | 
			
		||||
 | 
			
		||||
- Install ares_dns.h too
 | 
			
		||||
 | 
			
		||||
- Michael Wallner fixed this problem: When I set domains in the options
 | 
			
		||||
  struct, and there are domain/search entries in /etc/resolv.conf, the domains
 | 
			
		||||
  of the options struct will be overridden.
 | 
			
		||||
 | 
			
		||||
* November 6 2006
 | 
			
		||||
 | 
			
		||||
- Yang Tse removed a couple of potential zero size memory allocations.
 | 
			
		||||
 | 
			
		||||
- Andreas Rieke fixed the line endings in the areslib.dsp file that I (Daniel)
 | 
			
		||||
  broke in the 1.3.2 release. We should switch to a system where that file is
 | 
			
		||||
  auto-generated. We could rip some code for that from curl...
 | 
			
		||||
 | 
			
		||||
Version 1.3.2 (November 3, 2006)
 | 
			
		||||
 | 
			
		||||
* October 12 2006
 | 
			
		||||
 | 
			
		||||
- Prevent ares_getsock() to overflow if more than 16 sockets are used.
 | 
			
		||||
 | 
			
		||||
* September 11 2006
 | 
			
		||||
 | 
			
		||||
- Guilherme Balena Versiani: I noted a strange BUG in Win32 port
 | 
			
		||||
  (ares_init.c/get_iphlpapi_dns_info() function): when I disable the network
 | 
			
		||||
  by hand or disconnect the network cable in Windows 2000 or Windows XP, my
 | 
			
		||||
  application gets 127.0.0.1 as the only name server. The problem comes from
 | 
			
		||||
  'GetNetworkParams' function, that returns the empty string "" as the only
 | 
			
		||||
  name server in that case. Moreover, the Windows implementation of
 | 
			
		||||
  inet_addr() returns INADDR_LOOPBACK instead of INADDR_NONE.
 | 
			
		||||
 | 
			
		||||
* August 29 2006
 | 
			
		||||
 | 
			
		||||
- Brad Spencer did
 | 
			
		||||
 | 
			
		||||
  o made ares_version.h use extern "C" for c++ compilers
 | 
			
		||||
  o fixed compiler warnings in ares_getnameinfo.c
 | 
			
		||||
  o fixed a buffer position init for TCP reads
 | 
			
		||||
 | 
			
		||||
* August 3 2006
 | 
			
		||||
 | 
			
		||||
- Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and
 | 
			
		||||
  not always zero!
 | 
			
		||||
 | 
			
		||||
Version 1.3.1 (June 24, 2006)
 | 
			
		||||
 | 
			
		||||
* July 23, 2006
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem added getopt() to the ahost program. Currently accepts
 | 
			
		||||
  only [-t {a|aaaa}] to specify address family in ares_gethostbyname().
 | 
			
		||||
 | 
			
		||||
* June 19, 2006
 | 
			
		||||
 | 
			
		||||
- (wahern) Removed "big endian" DNS section and RR data integer parser
 | 
			
		||||
  macros from ares_dns.h, which break c-ares on my Sparc64. Bit-wise
 | 
			
		||||
  operations in C operate on logical values. And in any event the octets are
 | 
			
		||||
  already in big-endian (aka network) byte order so they're being reversed
 | 
			
		||||
  (thus the source of the breakage).
 | 
			
		||||
 | 
			
		||||
* June 18, 2006
 | 
			
		||||
 | 
			
		||||
- William Ahern handles EAGAIN/EWOULDBLOCK errors in most of the I/O calls
 | 
			
		||||
  from area_process.c.
 | 
			
		||||
 | 
			
		||||
  TODO: Handle one last EAGAIN for a UDP socket send(2) in
 | 
			
		||||
  ares__send_query().
 | 
			
		||||
 | 
			
		||||
* May 10, 2006
 | 
			
		||||
 | 
			
		||||
- Bram Matthys brought my attention to a libtool peculiarity where detecting
 | 
			
		||||
  things such as C++ compiler actually is a bad thing and since we don't need
 | 
			
		||||
  that detection I added a work-around, much inspired by a previous patch by
 | 
			
		||||
  Paolo Bonzini. This also shortens the configure script quite a lot.
 | 
			
		||||
 | 
			
		||||
* May 3, 2006
 | 
			
		||||
 | 
			
		||||
- Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes
 | 
			
		||||
  c-ares call a callback on socket state changes. A better way than the
 | 
			
		||||
  ares_getsock() to get full control over the socket state.
 | 
			
		||||
 | 
			
		||||
* 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, 2005)
 | 
			
		||||
 | 
			
		||||
* August 21
 | 
			
		||||
 | 
			
		||||
- Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info()
 | 
			
		||||
  when getting the DNS server etc.
 | 
			
		||||
 | 
			
		||||
* June 19
 | 
			
		||||
 | 
			
		||||
- Added some checks for the addrinfo structure.
 | 
			
		||||
 | 
			
		||||
* June 2
 | 
			
		||||
 | 
			
		||||
- William Ahern:
 | 
			
		||||
 | 
			
		||||
  Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a
 | 
			
		||||
  read event can come back from poll() on a valid SOCK_DGRAM socket but
 | 
			
		||||
  recv(2) will still block. This patch doesn't ignore EAGAIN in
 | 
			
		||||
  read_udp_packets(), though maybe it should. (This patch was edited by Daniel
 | 
			
		||||
  Stenberg and a new configure test was added (imported from curl's configure)
 | 
			
		||||
  to properly detect what non-blocking socket approach to use.)
 | 
			
		||||
 | 
			
		||||
  I'm not quite sure how this was happening, but I've been seeing PTR queries
 | 
			
		||||
  which seem to return empty responses. At least, they were empty when calling
 | 
			
		||||
  ares_expand_name() on the record. Here's a patch which guarantees to
 | 
			
		||||
  NUL-terminate the expanded name. The old behavior failed to NUL-terminate if
 | 
			
		||||
  len was 0, and this was causing strlen() to run past the end of the buffer
 | 
			
		||||
  after calling ares_expand_name() and getting ARES_SUCCESS as the return
 | 
			
		||||
  value. If q is not greater than *s then it's equal and *s is always
 | 
			
		||||
  allocated with at least one byte.
 | 
			
		||||
 | 
			
		||||
* May 16
 | 
			
		||||
 | 
			
		||||
- Added ares_getnameinfo which mimics the getnameinfo API (another feature
 | 
			
		||||
  that could use testing).
 | 
			
		||||
 | 
			
		||||
* May 14
 | 
			
		||||
 | 
			
		||||
- Added an inet_ntop function from BIND for systems that do not have it.
 | 
			
		||||
 | 
			
		||||
* April 9
 | 
			
		||||
 | 
			
		||||
- Made sortlist support IPv6 (this can probably use some testing).
 | 
			
		||||
 | 
			
		||||
- Made sortlist support CIDR matching for IPv4.
 | 
			
		||||
 | 
			
		||||
* April 8
 | 
			
		||||
 | 
			
		||||
- Added preliminary IPv6 support to ares_gethostbyname. Currently, sortlist
 | 
			
		||||
  does not work with IPv6. Also provided an implementation of bitncmp from
 | 
			
		||||
  BIND for systems that do not supply this function. This will be used to add
 | 
			
		||||
  IPv6 support to sortlist.
 | 
			
		||||
 | 
			
		||||
- Made ares_gethostbyaddr support IPv6 by specifying AF_INET6 as the family.
 | 
			
		||||
  The function can lookup IPv6 addresses both from files (/etc/hosts) and
 | 
			
		||||
  DNS lookups.
 | 
			
		||||
 | 
			
		||||
* April 7
 | 
			
		||||
 | 
			
		||||
- Tupone Alfredo fixed includes of arpa/nameser_compat.h to build fine on Mac
 | 
			
		||||
  OS X.
 | 
			
		||||
 | 
			
		||||
* April 5
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio: Provided implementations of inet_net_pton and inet_pton
 | 
			
		||||
  from BIND for systems that do not include these functions.
 | 
			
		||||
 | 
			
		||||
* March 11, 2005
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio added ares_parse_aaaa_reply.c and did various
 | 
			
		||||
  adjustments. The first little steps towards IPv6 support!
 | 
			
		||||
 | 
			
		||||
* November 7
 | 
			
		||||
 | 
			
		||||
- Fixed the VC project and makefile to use ares_cancel and ares_version
 | 
			
		||||
 | 
			
		||||
* October 24
 | 
			
		||||
 | 
			
		||||
- The released ares_version.h from 1.2.1 says 1.2.0 due to a maketgz flaw.
 | 
			
		||||
  This is now fixed.
 | 
			
		||||
 | 
			
		||||
Version 1.2.1 (October 20, 2004)
 | 
			
		||||
 | 
			
		||||
* September 29
 | 
			
		||||
 | 
			
		||||
- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
 | 
			
		||||
  when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
 | 
			
		||||
  other OSes. He made c-ares check for and understand it if present.
 | 
			
		||||
 | 
			
		||||
- Now c-ares will use local host name lookup _before_ DNS resolving by default
 | 
			
		||||
  if nothing else is told.
 | 
			
		||||
 | 
			
		||||
* September 26
 | 
			
		||||
 | 
			
		||||
- Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf
 | 
			
		||||
  file to determine the sequence in which to search /etc/hosts and DNS.  So on
 | 
			
		||||
  systems where this order is defined by /etc/host.conf instead of a "lookup"
 | 
			
		||||
  entry in /etc/resolv.conf, c-ares will always default to looking in DNS
 | 
			
		||||
  first, and /etc/hosts second.
 | 
			
		||||
 | 
			
		||||
  c-ares now looks at
 | 
			
		||||
 | 
			
		||||
  1) resolv.conf (for the "lookup" line);
 | 
			
		||||
  2) nsswitch.fon (for the "hosts:" line);
 | 
			
		||||
  3) host.conf (for the "order" line).
 | 
			
		||||
 | 
			
		||||
  First match wins.
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is
 | 
			
		||||
  located in a static location. It assumed
 | 
			
		||||
  C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact,
 | 
			
		||||
  the location of the HOSTS file can be changed via a registry setting.
 | 
			
		||||
 | 
			
		||||
  There is a key called DatabasePath which specifies the path to the HOSTS
 | 
			
		||||
  file:
 | 
			
		||||
  http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx
 | 
			
		||||
 | 
			
		||||
  The patch will make c-ares correctly consult the registry for the location
 | 
			
		||||
  of this file.
 | 
			
		||||
 | 
			
		||||
* August 29
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem fixed the MSVC build files.
 | 
			
		||||
 | 
			
		||||
* August 20
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem made c-ares build and work with his Watt-32 TCP/IP stack.
 | 
			
		||||
 | 
			
		||||
* August 13
 | 
			
		||||
 | 
			
		||||
- Harshal Pradhan made a minor syntax change in ares_init.c to make it build
 | 
			
		||||
  fine with MSVC 7.1
 | 
			
		||||
 | 
			
		||||
* July 24
 | 
			
		||||
 | 
			
		||||
- Made the lib get built static only if --enable-debug is used.
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem fixed:
 | 
			
		||||
 | 
			
		||||
  Basically in loops like handle_errors(), 'query->next' was assigned a local
 | 
			
		||||
  variable and then query was referenced after the memory was freed by
 | 
			
		||||
  next_server(). I've changed that so next_server() and end_query() returns
 | 
			
		||||
  the next query. So callers should use this ret-value.
 | 
			
		||||
 | 
			
		||||
  The next problem was that 'server->tcp_buffer_pos' had a random value at
 | 
			
		||||
  entry to 1st recv() (luckily causing Winsock to return ENOBUFS).
 | 
			
		||||
 | 
			
		||||
  I've also added a ares_writev() for Windows to streamline the code a bit
 | 
			
		||||
  more.
 | 
			
		||||
 | 
			
		||||
* July 20
 | 
			
		||||
- Fixed a few variable return types for some system calls. Made configure
 | 
			
		||||
  check for ssize_t to make it possible to use that when receiving the send()
 | 
			
		||||
  error code. This is necessary to prevent compiler warnings on some systems.
 | 
			
		||||
 | 
			
		||||
- Made configure create config.h, and all source files now include setup.h that
 | 
			
		||||
  might include the proper config.h (or a handicrafted alternative).
 | 
			
		||||
 | 
			
		||||
- Switched to 'ares_socket_t' type for sockets in ares, since Windows don't
 | 
			
		||||
  use 'int' for that.
 | 
			
		||||
 | 
			
		||||
- automake-ified and libool-ified c-ares. Now it builds libcares as a shared
 | 
			
		||||
  lib on most platforms if wanted. (This bloated the size of the release
 | 
			
		||||
  archive with another 200K!)
 | 
			
		||||
 | 
			
		||||
- Makefile.am now uses Makefile.inc for the c sources, h headers and man
 | 
			
		||||
  pages, to make it easier for other makefiles to use the exact same set of
 | 
			
		||||
  files.
 | 
			
		||||
 | 
			
		||||
- Adjusted 'maketgz' to use the new automake magic when building distribution
 | 
			
		||||
  archives.
 | 
			
		||||
 | 
			
		||||
- Anyone desires HTML and/or PDF versions of the man pages in the release
 | 
			
		||||
  archives?
 | 
			
		||||
 | 
			
		||||
* July 3
 | 
			
		||||
- G<>nter Knauf made c-ares build and run on Novell Netware.
 | 
			
		||||
 | 
			
		||||
* July 1
 | 
			
		||||
- Gisle Vanem provided Makefile.dj to build with djgpp, added a few more djgpp
 | 
			
		||||
  fixes and made ares not use 'errno' to provide further info on Windows.
 | 
			
		||||
 | 
			
		||||
* June 30
 | 
			
		||||
- Gisle Vanem made it build with djgpp and run fine with the Watt-32 stack.
 | 
			
		||||
 | 
			
		||||
* June 10
 | 
			
		||||
- Gisle Vanem's init patch for Windows:
 | 
			
		||||
 | 
			
		||||
  The init_by_resolv_conf() function fetches the DNS-server(s)
 | 
			
		||||
  from a series of registry branches.
 | 
			
		||||
 | 
			
		||||
  This can be wrong in the case where DHCP has assigned nameservers, but the
 | 
			
		||||
  user has overridden these servers with other prefered settings. Then it's
 | 
			
		||||
  wrong to use the DHCPNAMESERVER setting in registry.
 | 
			
		||||
 | 
			
		||||
  In the case of no global DHCP-assigned or fixed servers, but DNS server(s)
 | 
			
		||||
  per adapter, one has to query the adapter branches.  But how can c-ares know
 | 
			
		||||
  which adapter is valid for use? AFAICS it can't. There could be one adapter
 | 
			
		||||
  that is down (e.g. a VPN adapter).
 | 
			
		||||
 | 
			
		||||
  So it's better to leave this to the IP Helper API (iphlapi) available in
 | 
			
		||||
  Win-98/2000 and later. My patch falls-back to the old way if not available.
 | 
			
		||||
 | 
			
		||||
* June 8
 | 
			
		||||
- James Bursa fixed an init issue for RISC OS.
 | 
			
		||||
 | 
			
		||||
* May 11
 | 
			
		||||
- Nico Stappenbelt reported that when processing domain and search lines in
 | 
			
		||||
  the resolv.conf file, the first entry encountered is processed and used as
 | 
			
		||||
  the search list. According to the manual pages for both Linux, Solaris and
 | 
			
		||||
  Tru64, the last entry of either a domain or a search field is used.
 | 
			
		||||
 | 
			
		||||
  This is now adjusted in the code
 | 
			
		||||
 | 
			
		||||
Version 1.2.0 (April 13, 2004)
 | 
			
		||||
 | 
			
		||||
* April 2, 2004
 | 
			
		||||
- Updated various man pages to look nicer when converted to HTML on the web
 | 
			
		||||
  site.
 | 
			
		||||
 | 
			
		||||
* April 1, 2004
 | 
			
		||||
- Dirk Manske provided a new function that is now named ares_cancel(). It is
 | 
			
		||||
  used to cancel/cleanup a resolve/request made using ares functions on the
 | 
			
		||||
  given ares channel. It does not destroy/kill the ares channel itself.
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio cleaned up the formatting in several man pages.
 | 
			
		||||
 | 
			
		||||
* March 30, 2004
 | 
			
		||||
- Dominick Meglio's new ares_expand_string. A helper function when decoding
 | 
			
		||||
  incoming DNS packages.
 | 
			
		||||
 | 
			
		||||
- Daniel Stenberg modified the Makefile.in to use a for loop for the man page
 | 
			
		||||
  installation to improve overview and make it easier to add man pages.
 | 
			
		||||
 | 
			
		||||
Version 1.1.0 (March 11, 2004)
 | 
			
		||||
 | 
			
		||||
* March 9, 2004
 | 
			
		||||
- Gisle Vanem improved build on Windows.
 | 
			
		||||
 | 
			
		||||
* February 25, 2004
 | 
			
		||||
- Dan Fandrich found a flaw in the Feb 22 fix.
 | 
			
		||||
 | 
			
		||||
- Added better configure --enable-debug logic (taken from the curl configure
 | 
			
		||||
  script). Added acinclude.m4 to the tarball.
 | 
			
		||||
 | 
			
		||||
* February 23, 2004
 | 
			
		||||
- Removed ares_free_errmem(), the function, the file and the man page. It was
 | 
			
		||||
  not used and it did nothing.
 | 
			
		||||
 | 
			
		||||
- Fixed a lot of code that wasn't "64bit clean" and thus caused a lot of
 | 
			
		||||
  compiler warnings on picky compilers.
 | 
			
		||||
 | 
			
		||||
* February 22, 2004
 | 
			
		||||
- Dominick Meglio made ares init support multiple name servers in the
 | 
			
		||||
  NameServer key on Windows.
 | 
			
		||||
 | 
			
		||||
* February 16, 2004
 | 
			
		||||
- Modified ares_private.h to include libcurl's memory debug header if
 | 
			
		||||
  CURLDEBUG is set. This makes all the ares-functions supervised properly by
 | 
			
		||||
  the curl test suite. This also forced me to add inclusion of the
 | 
			
		||||
  ares_private.h header in a few more files that are using some kind of
 | 
			
		||||
  memory-related resources.
 | 
			
		||||
 | 
			
		||||
- Made the makefile only build ahost and adig if 'make demos' is used.
 | 
			
		||||
 | 
			
		||||
* February 10, 2004
 | 
			
		||||
- Dirk Manske made ares_version.h installed with 'make install'
 | 
			
		||||
 | 
			
		||||
* February 4, 2004
 | 
			
		||||
- ares_free_errmem() is subject for removal, it is simply present for future
 | 
			
		||||
  purposes, and since we removed the extra parameter in strerror() it won't
 | 
			
		||||
  be used by c-ares!
 | 
			
		||||
- configure --enable-debug now enables picky compiler options if gcc is used
 | 
			
		||||
- fixed several compiler warnings --enable-debug showed and Joerg Mueller-Tolk
 | 
			
		||||
  reported
 | 
			
		||||
 | 
			
		||||
Version 1.0.0 (February 3, 2004)
 | 
			
		||||
 | 
			
		||||
* February 3, 2004
 | 
			
		||||
- now we produce the libcares.a library instead of the previous libares.a
 | 
			
		||||
  since we are no longer compatible
 | 
			
		||||
 | 
			
		||||
* February 2, 2004
 | 
			
		||||
 | 
			
		||||
- ares_strerror() has one argument less. This is the first official
 | 
			
		||||
  modification of the existing provided ares API.
 | 
			
		||||
 | 
			
		||||
* January 29, 2004
 | 
			
		||||
 | 
			
		||||
- Dirk Manske fixed how the socket is set non-blocking.
 | 
			
		||||
 | 
			
		||||
* January 4, 2004
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio made the private gettimeofday() become ares_gettimeofday()
 | 
			
		||||
  instead in order to not pollute the name space and risk colliding with
 | 
			
		||||
  other libraries' versions of this function.
 | 
			
		||||
 | 
			
		||||
* October 24, 2003. Daniel Stenberg
 | 
			
		||||
 | 
			
		||||
  Added ares_version().
 | 
			
		||||
 | 
			
		||||
Version 1.0-pre1 (8 October 2003)
 | 
			
		||||
 | 
			
		||||
- James Bursa made it run on RISC OS
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio made it run fine on NT4
 | 
			
		||||
 | 
			
		||||
- Duncan Wilcox made it work fine on Mac OS X
 | 
			
		||||
 | 
			
		||||
- Daniel Stenberg adjusted the windows port
 | 
			
		||||
 | 
			
		||||
- liren at vivisimo.com made the initial windows port
 | 
			
		||||
 | 
			
		||||
* Imported the sources from ares 1.1.1
 | 
			
		||||
							
								
								
									
										35
									
								
								ares/FILES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								ares/FILES
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
*.c
 | 
			
		||||
*.h
 | 
			
		||||
*.3
 | 
			
		||||
NEWS
 | 
			
		||||
README
 | 
			
		||||
README.cares
 | 
			
		||||
CHANGES
 | 
			
		||||
FILES
 | 
			
		||||
maketgz
 | 
			
		||||
aclocal.m4
 | 
			
		||||
acinclude.m4
 | 
			
		||||
Makefile.in
 | 
			
		||||
Makefile.dj
 | 
			
		||||
Makefile.m32
 | 
			
		||||
Makefile.netware
 | 
			
		||||
Makefile.vc6
 | 
			
		||||
install-sh
 | 
			
		||||
mkinstalldirs
 | 
			
		||||
configure
 | 
			
		||||
configure.ac
 | 
			
		||||
config.guess
 | 
			
		||||
config.sub
 | 
			
		||||
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
 | 
			
		||||
							
								
								
									
										71
									
								
								ares/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								ares/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
AUTOMAKE_OPTIONS = foreign
 | 
			
		||||
 | 
			
		||||
lib_LTLIBRARIES = libcares.la
 | 
			
		||||
 | 
			
		||||
man_MANS = $(MANPAGES)
 | 
			
		||||
 | 
			
		||||
MSVCFILES = vc/adig/adig.dep vc/adig/adig.dsp vc/vc.dsw vc/ahost/ahost.dep \
 | 
			
		||||
 vc/ahost/ahost.dsp vc/areslib/areslib.dep vc/areslib/areslib.dsp	   \
 | 
			
		||||
 vc/areslib/areslib.dsw
 | 
			
		||||
 | 
			
		||||
# adig and ahost are just sample programs and thus not mentioned with the
 | 
			
		||||
# regular sources and headers
 | 
			
		||||
EXTRA_DIST = CHANGES README.cares Makefile.inc adig.c ahost.c $(man_MANS) \
 | 
			
		||||
 $(MSVCFILES) AUTHORS config-win32.h RELEASE-NOTES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
VER=-version-info 1:0:0
 | 
			
		||||
# This flag accepts an argument of the form current[:revision[:age]]. So,
 | 
			
		||||
# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
 | 
			
		||||
# 1.
 | 
			
		||||
#
 | 
			
		||||
# If either revision or age are omitted, they default to 0. Also note that age
 | 
			
		||||
# must be less than or equal to the current interface number.
 | 
			
		||||
#
 | 
			
		||||
# Here are a set of rules to help you update your library version information: 
 | 
			
		||||
#
 | 
			
		||||
# 1.Start with version information of 0:0:0 for each libtool library.
 | 
			
		||||
#
 | 
			
		||||
# 2.Update the version information only immediately before a public release of
 | 
			
		||||
# your software. More frequent updates are unnecessary, and only guarantee
 | 
			
		||||
# that the current interface number gets larger faster.
 | 
			
		||||
#
 | 
			
		||||
# 3.If the library source code has changed at all since the last update, then
 | 
			
		||||
# increment revision (c:r+1:a)
 | 
			
		||||
#
 | 
			
		||||
# 4.If any interfaces have been added, removed, or changed since the last
 | 
			
		||||
# update, increment current, and set revision to 0. (c+1:r=0:a)
 | 
			
		||||
#
 | 
			
		||||
# 5.If any interfaces have been added since the last public release, then
 | 
			
		||||
# increment age. (c:r:a+1)
 | 
			
		||||
#
 | 
			
		||||
# 6.If any interfaces have been removed since the last public release, then
 | 
			
		||||
# set age to 0. (c:r:a=0)
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
if NO_UNDEFINED
 | 
			
		||||
# The -no-undefined flag is crucial for this to build fine on some platforms
 | 
			
		||||
UNDEF = -no-undefined
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
libcares_la_LDFLAGS = $(UNDEF) $(VER)
 | 
			
		||||
 | 
			
		||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
libcares_la_SOURCES = $(CSOURCES) $(HHEADERS)
 | 
			
		||||
 | 
			
		||||
# where to install the c-ares headers
 | 
			
		||||
libcares_ladir = $(includedir)
 | 
			
		||||
# what headers to install on 'make install':
 | 
			
		||||
libcares_la_HEADERS = ares.h ares_version.h ares_dns.h
 | 
			
		||||
 | 
			
		||||
# Make files named *.dist replace the file without .dist extension
 | 
			
		||||
dist-hook:
 | 
			
		||||
	find $(distdir) -name "*.dist" -exec rm {} \;
 | 
			
		||||
	(distit=`find $(srcdir) -name "*.dist"`; \
 | 
			
		||||
	for file in $$distit; do \
 | 
			
		||||
	  strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
 | 
			
		||||
	  cp $$file $(distdir)$$strip; \
 | 
			
		||||
	done)
 | 
			
		||||
							
								
								
									
										71
									
								
								ares/Makefile.dj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								ares/Makefile.dj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
#
 | 
			
		||||
# c-ares Makefile for djgpp/gcc/Watt-32.
 | 
			
		||||
#   By Gisle Vanem <giva@bgnett.no> 2004.
 | 
			
		||||
#
 | 
			
		||||
# $Id$
 | 
			
		||||
 | 
			
		||||
TOPDIR = ..
 | 
			
		||||
 | 
			
		||||
include ../packages/DOS/common.dj
 | 
			
		||||
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DWATT32 -DHAVE_AF_INET6 -DHAVE_PF_INET6 -DHAVE_FIONBIO \
 | 
			
		||||
          -DHAVE_STRUCT_IN6_ADDR -DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID \
 | 
			
		||||
          -DHAVE_SYS_TIME_H -DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
 | 
			
		||||
          -DHAVE_SIGNAL_H -DHAVE_SIG_ATOMIC_T -DRETSIGTYPE='void' -DHAVE_PROCESS_H \
 | 
			
		||||
          -DHAVE_ARPA_NAMESER_H -DNS_INADDRSZ=4 -DHAVE_RECV -DHAVE_SEND \
 | 
			
		||||
          -DSEND_TYPE_ARG1='int'   -DSEND_QUAL_ARG2='const' \
 | 
			
		||||
          -DSEND_TYPE_ARG2='void*' -DSEND_TYPE_ARG3='int' \
 | 
			
		||||
          -DSEND_TYPE_ARG4='int'   -DSEND_TYPE_RETV='int' \
 | 
			
		||||
          -DRECV_TYPE_ARG1='int'   -DRECV_TYPE_ARG2='void*' \
 | 
			
		||||
          -DRECV_TYPE_ARG3='int'   -DRECV_TYPE_ARG4='int' \
 | 
			
		||||
          -DRECV_TYPE_RETV='int'   -DHAVE_STRUCT_TIMEVAL \
 | 
			
		||||
          -Dselect=select_s        -UHAVE_CONFIG_H
 | 
			
		||||
 | 
			
		||||
LDFLAGS = -s
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_DEBUG),1)
 | 
			
		||||
  EX_LIBS  = ../lib/libcurl.a
 | 
			
		||||
  OBJ_HACK = $(OBJECTS)
 | 
			
		||||
else
 | 
			
		||||
  OBJ_HACK = libcares.a
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_SSL),1)
 | 
			
		||||
  EX_LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_ZLIB),1)
 | 
			
		||||
  EX_LIBS += $(ZLIB_ROOT)/libz.a
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_IDNA),1)
 | 
			
		||||
  EX_LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
 | 
			
		||||
 | 
			
		||||
all: $(OBJ_DIR) libcares.a ahost.exe adig.exe
 | 
			
		||||
	@echo Welcome to c-ares.
 | 
			
		||||
 | 
			
		||||
libcares.a: $(OBJECTS)
 | 
			
		||||
	ar rs $@ $?
 | 
			
		||||
 | 
			
		||||
ahost.exe: ahost.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK)
 | 
			
		||||
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
adig.exe: adig.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK)
 | 
			
		||||
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f $(OBJECTS) libcares.a
 | 
			
		||||
 | 
			
		||||
vclean realclean: clean
 | 
			
		||||
	rm -f ahost.exe adig.exe depend.dj
 | 
			
		||||
	- rmdir $(OBJ_DIR)
 | 
			
		||||
 | 
			
		||||
-include depend.dj
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								ares/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								ares/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
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		\
 | 
			
		||||
ares_parse_ns_reply.c
 | 
			
		||||
 | 
			
		||||
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h          \
 | 
			
		||||
           nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h      \
 | 
			
		||||
           setup_once.h 
 | 
			
		||||
 | 
			
		||||
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
 | 
			
		||||
 ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3		    \
 | 
			
		||||
 ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3	    \
 | 
			
		||||
 ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3		    \
 | 
			
		||||
 ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3	    \
 | 
			
		||||
 ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3    \
 | 
			
		||||
 ares_getsock.3 ares_parse_ns_reply.3 \
 | 
			
		||||
 ares_destroy_options.3 ares_save_options.3
 | 
			
		||||
							
								
								
									
										68
									
								
								ares/Makefile.m32
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								ares/Makefile.m32
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
#############################################################
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
## Makefile for building libcares.a with MingW32 (GCC-3.2)
 | 
			
		||||
## Use: make -f Makefile.m32 [demos]
 | 
			
		||||
##
 | 
			
		||||
## Quick hack by Guenter; comments to: /dev/nul
 | 
			
		||||
#
 | 
			
		||||
########################################################
 | 
			
		||||
## Nothing more to do below this line!
 | 
			
		||||
 | 
			
		||||
LIB	= libcares.a
 | 
			
		||||
 | 
			
		||||
CC	= gcc
 | 
			
		||||
LD	= gcc
 | 
			
		||||
RANLIB	= ranlib
 | 
			
		||||
#RM	= rm -f
 | 
			
		||||
 | 
			
		||||
CFLAGS	= -O2 -Wall
 | 
			
		||||
LDFLAGS	= -s
 | 
			
		||||
LIBS	= -lwsock32
 | 
			
		||||
 | 
			
		||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
OBJLIB	:= $(patsubst %.c,%.o,$(strip $(CSOURCES)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$(LIB): $(OBJLIB)
 | 
			
		||||
	ar cru $@ $^
 | 
			
		||||
	$(RANLIB) $@
 | 
			
		||||
 | 
			
		||||
all: $(LIB) demos
 | 
			
		||||
 | 
			
		||||
demos: adig.exe ahost.exe
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	etags *.[ch]
 | 
			
		||||
 | 
			
		||||
%.exe: %.o ares_getopt.o $(LIB)
 | 
			
		||||
	$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
 | 
			
		||||
 | 
			
		||||
$(OBJLIB): ares.h ares_dns.h ares_private.h
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC) $(CFLAGS) -c $<
 | 
			
		||||
 | 
			
		||||
check:
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
	${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
 | 
			
		||||
	${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
 | 
			
		||||
	${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
 | 
			
		||||
	${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
 | 
			
		||||
	${RANLIB} ${DESTDIR}${libdir}/$(LIB)
 | 
			
		||||
	chmod u-w ${DESTDIR}${libdir}/$(LIB)
 | 
			
		||||
	${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
 | 
			
		||||
	${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
 | 
			
		||||
	(for man in $(MANPAGES); do \
 | 
			
		||||
	   ${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
 | 
			
		||||
	done)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	$(RM) ares_getopt.o $(OBJLIB) $(LIB) adig.exe ahost.exe
 | 
			
		||||
 | 
			
		||||
distclean: clean
 | 
			
		||||
	$(RM) config.cache config.log config.status Makefile
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										361
									
								
								ares/Makefile.netware
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										361
									
								
								ares/Makefile.netware
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,361 @@
 | 
			
		||||
#################################################################
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
## Makefile for building libcares (NetWare version - gnu make)
 | 
			
		||||
## Use: make -f Makefile.netware
 | 
			
		||||
##
 | 
			
		||||
## Comments to: Guenter Knauf http://www.gknw.de/phpbb
 | 
			
		||||
#
 | 
			
		||||
#################################################################
 | 
			
		||||
 | 
			
		||||
# Edit the path below to point to the base of your Novell NDK.
 | 
			
		||||
ifndef NDKBASE
 | 
			
		||||
NDKBASE	= c:/novell
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef INSTDIR
 | 
			
		||||
INSTDIR	= ../curl-$(LIBCURL_VERSION_STR)-bin-nw
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Edit the vars below to change NLM target settings.
 | 
			
		||||
TARGETS = adig.nlm ahost.nlm
 | 
			
		||||
LTARGET = libcares.$(LIBEXT)
 | 
			
		||||
VERSION	= $(LIBCARES_VERSION)
 | 
			
		||||
COPYR	= Copyright (C) 1996 - 2007, Daniel Stenberg, <daniel@haxx.se>
 | 
			
		||||
DESCR	= cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
 | 
			
		||||
MTSAFE	= YES
 | 
			
		||||
STACK	= 64000
 | 
			
		||||
SCREEN	= none
 | 
			
		||||
#EXPORTS	=
 | 
			
		||||
# Comment the line below if you dont want to load protected automatically.
 | 
			
		||||
#LDRING	= 3
 | 
			
		||||
 | 
			
		||||
# Edit the var below to point to your lib architecture.
 | 
			
		||||
ifndef LIBARCH
 | 
			
		||||
LIBARCH = LIBC
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# must be equal to DEBUG or NDEBUG
 | 
			
		||||
DB	= NDEBUG
 | 
			
		||||
# DB	= DEBUG
 | 
			
		||||
# DB	= CURLDEBUG
 | 
			
		||||
# Optimization: -O<n> or debugging: -g
 | 
			
		||||
ifeq ($(DB),NDEBUG)
 | 
			
		||||
	OPT	= -O2
 | 
			
		||||
	OBJDIR	= release
 | 
			
		||||
else
 | 
			
		||||
	OPT	= -g
 | 
			
		||||
	OBJDIR	= debug
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Include the version info retrieved from curlver.h
 | 
			
		||||
-include $(OBJDIR)/version.inc
 | 
			
		||||
 | 
			
		||||
# The following line defines your compiler.
 | 
			
		||||
ifdef METROWERKS
 | 
			
		||||
	CC = mwccnlm
 | 
			
		||||
else
 | 
			
		||||
	CC = gcc
 | 
			
		||||
endif
 | 
			
		||||
YACC	= bison -y
 | 
			
		||||
CP	= cp -afv
 | 
			
		||||
# RM	= rm -f
 | 
			
		||||
# if you want to mark the target as MTSAFE you will need a tool for
 | 
			
		||||
# generating the xdc data for the linker; here's a minimal tool:
 | 
			
		||||
# http://www.gknw.com/development/prgtools/mkxdc.zip
 | 
			
		||||
MPKXDC	= mkxdc
 | 
			
		||||
 | 
			
		||||
# Global flags for all compilers
 | 
			
		||||
CFLAGS	= $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
 | 
			
		||||
 | 
			
		||||
ifeq ($(CC),mwccnlm)
 | 
			
		||||
LD	= mwldnlm
 | 
			
		||||
LDFLAGS	= -nostdlib $(PRELUDE) $(OBJEXE) $(<:.def=.o) -o $@ -commandfile
 | 
			
		||||
AR	= mwldnlm
 | 
			
		||||
ARFLAGS	= -nostdlib -type library -o
 | 
			
		||||
LIBEXT	= lib
 | 
			
		||||
#RANLIB	=
 | 
			
		||||
CFLAGS	+= -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
 | 
			
		||||
CFLAGS	+= -relax_pointers
 | 
			
		||||
#CFLAGS	+= -w on
 | 
			
		||||
ifeq ($(LIBARCH),LIBC)
 | 
			
		||||
	PRELUDE = $(SDK_LIBC)/imports/libcpre.o
 | 
			
		||||
	CFLAGS += -align 4
 | 
			
		||||
else
 | 
			
		||||
	PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj"
 | 
			
		||||
#	CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h"
 | 
			
		||||
	CFLAGS += -align 1
 | 
			
		||||
endif
 | 
			
		||||
else
 | 
			
		||||
LD	= nlmconv
 | 
			
		||||
LDFLAGS	= -T
 | 
			
		||||
AR	= ar
 | 
			
		||||
ARFLAGS	= -cq
 | 
			
		||||
LIBEXT	= a
 | 
			
		||||
RANLIB	= ranlib
 | 
			
		||||
CFLAGS	+= -fno-builtin -fpcc-struct-return -fno-strict-aliasing
 | 
			
		||||
CFLAGS	+= -Wall -Wno-format -Wno-uninitialized # -pedantic
 | 
			
		||||
ifeq ($(LIBARCH),LIBC)
 | 
			
		||||
	PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
 | 
			
		||||
else
 | 
			
		||||
	PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
 | 
			
		||||
	CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
NDK_ROOT = $(NDKBASE)/ndk
 | 
			
		||||
SDK_CLIB = $(NDK_ROOT)/nwsdk
 | 
			
		||||
SDK_LIBC = $(NDK_ROOT)/libc
 | 
			
		||||
 | 
			
		||||
ifeq ($(LIBARCH),LIBC)
 | 
			
		||||
	INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks
 | 
			
		||||
	# INCLUDES += -I$(SDK_LIBC)/include/winsock
 | 
			
		||||
	CFLAGS += -D_POSIX_SOURCE
 | 
			
		||||
#	CFLAGS += -D__ANSIC__
 | 
			
		||||
else
 | 
			
		||||
	INCLUDES += -I$(SDK_CLIB)/include/nlm -I$(SDK_CLIB)/include
 | 
			
		||||
	# INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete
 | 
			
		||||
	CFLAGS += -DNETDB_USE_INTERNET
 | 
			
		||||
endif
 | 
			
		||||
CFLAGS	+= -I. $(INCLUDES)
 | 
			
		||||
 | 
			
		||||
ifeq ($(MTSAFE),YES)
 | 
			
		||||
	XDCOPT = -n
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(MTSAFE),NO)
 | 
			
		||||
	XDCOPT = -u
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(findstring linux,$(OSTYPE)),linux)
 | 
			
		||||
DL	= '
 | 
			
		||||
#-include $(NDKBASE)/nlmconv/ncpfs.inc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
OBJLIB	:= $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CSOURCES)))
 | 
			
		||||
OBJEXE	= $(OBJLIB) $(OBJDIR)/ares_getopt.o  
 | 
			
		||||
 | 
			
		||||
.PHONY: lib nlm prebuild dist install clean
 | 
			
		||||
 | 
			
		||||
lib: prebuild $(LTARGET)
 | 
			
		||||
 | 
			
		||||
nlm: prebuild $(TARGETS) 
 | 
			
		||||
 | 
			
		||||
prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h arpa/nameser.h
 | 
			
		||||
 | 
			
		||||
dist: all
 | 
			
		||||
	-$(RM) $(OBJLIB) $(OBJDIR)/*.map $(OBJDIR)/*.ncv
 | 
			
		||||
	-$(RM) $(OBJDIR)/*.def $(OBJDIR)/*.xdc $(OBJDIR)/version.inc
 | 
			
		||||
 | 
			
		||||
install: $(INSTDIR) all
 | 
			
		||||
	@$(CP) *.nlm $(INSTDIR)
 | 
			
		||||
	@$(CP) ../CHANGES $(INSTDIR)
 | 
			
		||||
	@$(CP) ../COPYING $(INSTDIR)
 | 
			
		||||
	@$(CP) ../README $(INSTDIR)
 | 
			
		||||
	@$(CP) ../RELEASE-NOTES $(INSTDIR)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	-$(RM) $(LTARGET) $(TARGETS) config.h
 | 
			
		||||
	-$(RM) -r $(OBJDIR)
 | 
			
		||||
	-$(RM) -r arpa
 | 
			
		||||
 | 
			
		||||
%.$(LIBEXT): $(OBJLIB)
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@-$(RM) $@
 | 
			
		||||
	@$(AR) $(ARFLAGS) $@ $^
 | 
			
		||||
ifdef RANLIB
 | 
			
		||||
	@$(RANLIB) $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
%.nlm: $(OBJDIR)/%.def $(OBJDIR)/%.o $(OBJDIR)/%.xdc $(OBJEXE)
 | 
			
		||||
	@echo Linking $@
 | 
			
		||||
	@-$(RM) $@
 | 
			
		||||
	@$(LD) $(LDFLAGS) $<
 | 
			
		||||
 | 
			
		||||
$(INSTDIR):
 | 
			
		||||
	@mkdir $(INSTDIR)
 | 
			
		||||
 | 
			
		||||
$(OBJDIR):
 | 
			
		||||
	@mkdir $(OBJDIR)
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/%.o: %.c
 | 
			
		||||
#	@echo Compiling $<
 | 
			
		||||
	$(CC) $(CFLAGS) -c $< -o $@
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/version.inc: ares_version.h $(OBJDIR)
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@awk -f ../packages/NetWare/get_ver.awk $< > $@
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/%.xdc: Makefile.netware
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@$(MPKXDC) $(XDCOPT) $@
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/%.def: Makefile.netware
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@echo $(DL)# DEF file for linking with $(LD)$(DL) > $@
 | 
			
		||||
	@echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)# All your changes will be lost!!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#$(DL) >> $@
 | 
			
		||||
	@echo $(DL)copyright "$(COPYR)"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)description "$(DESCR)"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)version $(VERSION)$(DL) >> $@
 | 
			
		||||
ifdef NLMTYPE
 | 
			
		||||
	@echo $(DL)type $(NLMTYPE)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef STACK
 | 
			
		||||
	@echo $(DL)stack $(STACK)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef SCREEN
 | 
			
		||||
	@echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
 | 
			
		||||
else
 | 
			
		||||
	@echo $(DL)screenname "DEFAULT"$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(DB),DEBUG)
 | 
			
		||||
	@echo $(DL)debug$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
	@echo $(DL)threadname "$^"$(DL) >> $@
 | 
			
		||||
ifdef XDCOPT
 | 
			
		||||
	@echo $(DL)xdcdata $(@:.def=.xdc)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LDRING),0)
 | 
			
		||||
	@echo $(DL)flag_on 16$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LDRING),3)
 | 
			
		||||
	@echo $(DL)flag_on 512$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LIBARCH),CLIB)
 | 
			
		||||
	@echo $(DL)start _Prelude$(DL) >> $@
 | 
			
		||||
	@echo $(DL)exit _Stop$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)module clib$(DL) >> $@
 | 
			
		||||
else
 | 
			
		||||
	@echo $(DL)flag_on 64$(DL) >> $@
 | 
			
		||||
	@echo $(DL)pseudopreemption$(DL) >> $@
 | 
			
		||||
	@echo $(DL)start _LibCPrelude$(DL) >> $@
 | 
			
		||||
	@echo $(DL)exit _LibCPostlude$(DL) >> $@
 | 
			
		||||
	@echo $(DL)check _LibCCheckUnload$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)module libc$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef MODULES
 | 
			
		||||
	@echo $(DL)module $(MODULES)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef EXPORTS
 | 
			
		||||
	@echo $(DL)export $(EXPORTS)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef IMPORTS
 | 
			
		||||
	@echo $(DL)import $(IMPORTS)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LD),nlmconv)
 | 
			
		||||
	@echo $(DL)input $(OBJEXE)$(DL) >> $@
 | 
			
		||||
	@echo $(DL)input $(PRELUDE)$(DL) >> $@
 | 
			
		||||
	@echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
config.h: Makefile.netware
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@echo $(DL)/* $@ for NetWare target.$(DL) > $@
 | 
			
		||||
	@echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)** All your changes will be lost!!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)*/$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#ifndef NETWARE$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#endif$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define OS "i586-pc-NetWare"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define VERSION "$(LIBCARES_VERSION_STR)"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_ARPA_NAMESER_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_FIONBIO 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_INET_NTOA 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_INET_PTON 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_RECV 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SEND 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRUCT_ADDRINFO 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_TIMEVAL 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
 | 
			
		||||
ifdef NW_WINSOCK
 | 
			
		||||
	@echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@
 | 
			
		||||
else
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
	@echo $(DL)#ifdef __GNUC__$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#else$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#endif$(DL) >> $@
 | 
			
		||||
ifdef OLD_NOVELLSDK
 | 
			
		||||
	@echo $(DL)#define socklen_t int$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
arpa/nameser.h: nameser.h
 | 
			
		||||
	@echo Fix missing header $@
 | 
			
		||||
	@-mkdir arpa
 | 
			
		||||
	@$(CP) $< arpa
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										233
									
								
								ares/Makefile.vc6
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								ares/Makefile.vc6
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,233 @@
 | 
			
		||||
# $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)\ares_parse_ns_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
 | 
			
		||||
       @echo Welcome to c-ares library and examples
 | 
			
		||||
 | 
			
		||||
$(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_parse_ns_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 $(OBJ_DIR)\ares_getopt.obj cares_imp.lib
 | 
			
		||||
       link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
adig.exe: $(OBJ_DIR) $(OBJ_DIR)\adig.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib
 | 
			
		||||
       link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\ares_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 setup_once.h ares.h ares_private.h \
 | 
			
		||||
  ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h setup_once.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 setup_once.h     \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h setup_once.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 setup_once.h \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h setup_once.h ares.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h setup_once.h nameser.h       \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h setup_once.h     \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h inet_net_pton.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h setup_once.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 setup_once.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 setup_once.h ares.h  \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h setup_once.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 setup_once.h ares.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h setup_once.h ares.h          \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h setup_once.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 setup_once.h ares.h        \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h setup_once.h ares.h        \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h setup_once.h nameser.h     \
 | 
			
		||||
  ares.h ares_dns.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h setup_once.h ares_version.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h setup_once.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 setup_once.h   \
 | 
			
		||||
  nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h setup_once.h nameser.h     \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h setup_once.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            \
 | 
			
		||||
  setup_once.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          \
 | 
			
		||||
  setup_once.h nameser.h ares.h ares_dns.h inet_net_pton.h ares_private.h      \
 | 
			
		||||
  ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_parse_ns_reply.obj: ares_parse_ns_reply.c setup.h              \
 | 
			
		||||
  setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h setup_once.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 setup_once.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 setup_once.h nameser.h           \
 | 
			
		||||
  ares_ipv6.h inet_ntop.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_getopt.obj: ares_getopt.c ares_getopt.h
 | 
			
		||||
							
								
								
									
										21
									
								
								ares/NEWS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								ares/NEWS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
Major changes since:
 | 
			
		||||
* see the CHANGES file
 | 
			
		||||
 | 
			
		||||
Major changes in release 1.1.1:
 | 
			
		||||
* ares should now compile as C++ code (no longer uses reserved word
 | 
			
		||||
  "class").
 | 
			
		||||
* Added SRV support to adig test program.
 | 
			
		||||
* Fixed a few error handling bugs in query processing.
 | 
			
		||||
 | 
			
		||||
Major changes in release 1.1.0:
 | 
			
		||||
* Added ares_free_string() function so that memory can be freed in the
 | 
			
		||||
  same layer as it is allocated, a desirable feature in some
 | 
			
		||||
  environments.
 | 
			
		||||
* A few of the ares_dns.h macros are fixed to use the proper bitwise
 | 
			
		||||
  operator.
 | 
			
		||||
* Fixed a couple of fenceposts fixed in ares_expand_name()'s
 | 
			
		||||
  bounds-checking.
 | 
			
		||||
* In process_timeouts(), extract query->next before calling
 | 
			
		||||
  next_server() and possibly freeing the query structure.
 | 
			
		||||
* Casted arguments to ctype macros casted to unsigned char, since not
 | 
			
		||||
  all char values are valid inputs to those macros according to ANSI.
 | 
			
		||||
							
								
								
									
										46
									
								
								ares/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ares/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
This is c-ares, a forked version of the original ares. The original ares
 | 
			
		||||
README follows below, the c-ares specific details are in README.cares
 | 
			
		||||
 | 
			
		||||
====================================================================
 | 
			
		||||
 | 
			
		||||
This is ares, an asynchronous resolver library.  It is intended for
 | 
			
		||||
applications which need to perform DNS queries without blocking, or
 | 
			
		||||
need to perform multiple DNS queries in parallel.  The primary
 | 
			
		||||
examples of such applications are servers which communicate with
 | 
			
		||||
multiple clients and programs with graphical user interfaces.
 | 
			
		||||
 | 
			
		||||
This library implementation is not especially portable to crufty old
 | 
			
		||||
systems like SunOS 4.  It assumes a compiler which can handle ANSI C
 | 
			
		||||
syntax, a system malloc which properly handles realloc(NULL, foo) and
 | 
			
		||||
free(NULL), and a reasonably up-to-date <arpa/nameser.h>.
 | 
			
		||||
 | 
			
		||||
I have attempted to preserve the externally visible behavior of the
 | 
			
		||||
BIND resolver in nearly all respects.  The API of the library is, of
 | 
			
		||||
course, very different from the synchronous BIND API; instead of
 | 
			
		||||
invoking a function like res_send() and getting a return value back
 | 
			
		||||
indicating the number of bytes in the response, you invoke a function
 | 
			
		||||
like ares_send() and give it a callback function to invoke when the
 | 
			
		||||
response arrives.  You then have to select() on the file descriptors
 | 
			
		||||
indicated by ares_fds(), with a timeout given by ares_timeout().  You
 | 
			
		||||
call ares_process() when select() returns.
 | 
			
		||||
 | 
			
		||||
Some features are missing from the current version of ares, relative
 | 
			
		||||
to the BIND resolver:
 | 
			
		||||
 | 
			
		||||
	* There is no IPV6 support.
 | 
			
		||||
	* There is no hostname verification.
 | 
			
		||||
	* There is no logging of unexpected events.
 | 
			
		||||
	* There is no debugging-oriented logging.
 | 
			
		||||
	* There is no YP support.
 | 
			
		||||
 | 
			
		||||
libares requires an ANSI compiler to compile and use.  To build the
 | 
			
		||||
library, just run "./configure" and "make".  To install it, run "make
 | 
			
		||||
install".  Run "./configure --help" to see a list of options you can
 | 
			
		||||
provide to configure to change how the library builds.  libares has no
 | 
			
		||||
data files, so you can move the include file and library around freely
 | 
			
		||||
without leaving behind any dependencies on old paths.  Building the
 | 
			
		||||
library will also build the "adig" program, a little toy for trying
 | 
			
		||||
out the library.  It doesn't get installed.
 | 
			
		||||
 | 
			
		||||
libares is distributed at athena-dist.mit.edu:pub/ATHENA/ares.  Please
 | 
			
		||||
send bug reports and comments to ghudson@mit.edu.
 | 
			
		||||
							
								
								
									
										25
									
								
								ares/README.cares
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								ares/README.cares
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
c-ares
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
This package is based on ares 1.1.1 (written by Greg Hudson). I decided to
 | 
			
		||||
fork and release a separate project since the ares author didn't want the
 | 
			
		||||
improvements that were vital for our use of it.
 | 
			
		||||
 | 
			
		||||
This package is dubbed 'c-ares' since I (Daniel Stenberg) wanted this for use
 | 
			
		||||
within the curl project (hence the letter C) and it makes a nice pun. Also,
 | 
			
		||||
c-ares is not API compatible with ares: a new name makes that more obvious to
 | 
			
		||||
the public.
 | 
			
		||||
 | 
			
		||||
The full source code is available in the 'c-ares' release archives, and in the
 | 
			
		||||
'ares' subdir of the curl CVS source repostitory.
 | 
			
		||||
 | 
			
		||||
If you find bugs, correct flaws, have questions or have comments in general in
 | 
			
		||||
regard to c-ares (or by all means the original ares too), get in touch with us
 | 
			
		||||
on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares
 | 
			
		||||
 | 
			
		||||
c-ares is of course distributed under the same MIT-style license as the
 | 
			
		||||
original ares.
 | 
			
		||||
 | 
			
		||||
You'll find all c-ares details and news here:
 | 
			
		||||
 | 
			
		||||
        http://daniel.haxx.se/projects/c-ares
 | 
			
		||||
							
								
								
									
										24
									
								
								ares/RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ares/RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
This is what's new and changed in the c-ares 1.4.0 release:
 | 
			
		||||
 | 
			
		||||
 o fixed VS2005 compiler warnings due to time_t being 64bit
 | 
			
		||||
 o introduced cryptographically secure transaction IDs
 | 
			
		||||
 o added ares_save_options()
 | 
			
		||||
 o added ares_destroy_options()
 | 
			
		||||
 o added ares_process_fd()
 | 
			
		||||
 o fixed undefined return value in init_by_resolv_conf() function for windows
 | 
			
		||||
 o added ares_parse_ns_reply()
 | 
			
		||||
 o fix failure to get the search sequence of /etc/hosts and DNS from
 | 
			
		||||
   /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when /etc/resolv.conf
 | 
			
		||||
   did not exist
 | 
			
		||||
 o when domains were sert in the options struct, and there were domain/search
 | 
			
		||||
   entries in /etc/resolv.conf, the domains of the options struct would be
 | 
			
		||||
   overridden
 | 
			
		||||
 o removed a couple of potential zero size memory allocations
 | 
			
		||||
 o fixed the line endings in areslib.dsp
 | 
			
		||||
 | 
			
		||||
Thanks go to these friendly people for their efforts and contributions:
 | 
			
		||||
 | 
			
		||||
 Andreas Rieke, Yang Tse, Michael Wallner, Vlad Dinulescu, Ravi Pratap,
 | 
			
		||||
 Brad House, Shmulik Regev, Brad Spencer
 | 
			
		||||
 | 
			
		||||
Have fun!
 | 
			
		||||
							
								
								
									
										1533
									
								
								ares/acinclude.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1533
									
								
								ares/acinclude.m4
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										642
									
								
								ares/adig.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										642
									
								
								ares/adig.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,642 @@
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id$
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <netdb.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"
 | 
			
		||||
#include "ares_getopt.h"
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#undef WIN32  /* Redefined in MingW headers */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Mac OS X portability check */
 | 
			
		||||
#ifndef T_SRV
 | 
			
		||||
#define T_SRV 33 /* server selection */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct nv {
 | 
			
		||||
  const char *name;
 | 
			
		||||
  int value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const struct nv flags[] = {
 | 
			
		||||
  { "usevc",            ARES_FLAG_USEVC },
 | 
			
		||||
  { "primary",          ARES_FLAG_PRIMARY },
 | 
			
		||||
  { "igntc",            ARES_FLAG_IGNTC },
 | 
			
		||||
  { "norecurse",        ARES_FLAG_NORECURSE },
 | 
			
		||||
  { "stayopen",         ARES_FLAG_STAYOPEN },
 | 
			
		||||
  { "noaliases",        ARES_FLAG_NOALIASES }
 | 
			
		||||
};
 | 
			
		||||
static const int nflags = sizeof(flags) / sizeof(flags[0]);
 | 
			
		||||
 | 
			
		||||
static const struct nv classes[] = {
 | 
			
		||||
  { "IN",       C_IN },
 | 
			
		||||
  { "CHAOS",    C_CHAOS },
 | 
			
		||||
  { "HS",       C_HS },
 | 
			
		||||
  { "ANY",      C_ANY }
 | 
			
		||||
};
 | 
			
		||||
static const int nclasses = sizeof(classes) / sizeof(classes[0]);
 | 
			
		||||
 | 
			
		||||
static const struct nv types[] = {
 | 
			
		||||
  { "A",        T_A },
 | 
			
		||||
  { "NS",       T_NS },
 | 
			
		||||
  { "MD",       T_MD },
 | 
			
		||||
  { "MF",       T_MF },
 | 
			
		||||
  { "CNAME",    T_CNAME },
 | 
			
		||||
  { "SOA",      T_SOA },
 | 
			
		||||
  { "MB",       T_MB },
 | 
			
		||||
  { "MG",       T_MG },
 | 
			
		||||
  { "MR",       T_MR },
 | 
			
		||||
  { "NULL",     T_NULL },
 | 
			
		||||
  { "WKS",      T_WKS },
 | 
			
		||||
  { "PTR",      T_PTR },
 | 
			
		||||
  { "HINFO",    T_HINFO },
 | 
			
		||||
  { "MINFO",    T_MINFO },
 | 
			
		||||
  { "MX",       T_MX },
 | 
			
		||||
  { "TXT",      T_TXT },
 | 
			
		||||
  { "RP",       T_RP },
 | 
			
		||||
  { "AFSDB",    T_AFSDB },
 | 
			
		||||
  { "X25",      T_X25 },
 | 
			
		||||
  { "ISDN",     T_ISDN },
 | 
			
		||||
  { "RT",       T_RT },
 | 
			
		||||
  { "NSAP",     T_NSAP },
 | 
			
		||||
  { "NSAP_PTR", T_NSAP_PTR },
 | 
			
		||||
  { "SIG",      T_SIG },
 | 
			
		||||
  { "KEY",      T_KEY },
 | 
			
		||||
  { "PX",       T_PX },
 | 
			
		||||
  { "GPOS",     T_GPOS },
 | 
			
		||||
  { "AAAA",     T_AAAA },
 | 
			
		||||
  { "LOC",      T_LOC },
 | 
			
		||||
  { "SRV",      T_SRV },
 | 
			
		||||
  { "AXFR",     T_AXFR },
 | 
			
		||||
  { "MAILB",    T_MAILB },
 | 
			
		||||
  { "MAILA",    T_MAILA },
 | 
			
		||||
  { "ANY",      T_ANY }
 | 
			
		||||
};
 | 
			
		||||
static const int ntypes = sizeof(types) / sizeof(types[0]);
 | 
			
		||||
 | 
			
		||||
static const char *opcodes[] = {
 | 
			
		||||
  "QUERY", "IQUERY", "STATUS", "(reserved)", "NOTIFY",
 | 
			
		||||
  "(unknown)", "(unknown)", "(unknown)", "(unknown)",
 | 
			
		||||
  "UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA",
 | 
			
		||||
  "ZONEINIT", "ZONEREF"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char *rcodes[] = {
 | 
			
		||||
  "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED",
 | 
			
		||||
  "(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)",
 | 
			
		||||
  "(unknown)", "(unknown)", "(unknown)", "(unknown)", "NOCHANGE"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void callback(void *arg, int status, unsigned char *abuf, int alen);
 | 
			
		||||
static const unsigned char *display_question(const unsigned char *aptr,
 | 
			
		||||
                                             const unsigned char *abuf,
 | 
			
		||||
                                             int alen);
 | 
			
		||||
static const unsigned char *display_rr(const unsigned char *aptr,
 | 
			
		||||
                                       const unsigned char *abuf, int alen);
 | 
			
		||||
static const char *type_name(int type);
 | 
			
		||||
static const char *class_name(int dnsclass);
 | 
			
		||||
static void usage(void);
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  int c, i, optmask = ARES_OPT_FLAGS, dnsclass = C_IN, type = T_A;
 | 
			
		||||
  int status, nfds, count;
 | 
			
		||||
  struct ares_options options;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
  fd_set read_fds, write_fds;
 | 
			
		||||
  struct timeval *tvp, tv;
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
 | 
			
		||||
  WSADATA wsaData;
 | 
			
		||||
  WSAStartup(wVersionRequested, &wsaData);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  options.flags = ARES_FLAG_NOCHECKRESP;
 | 
			
		||||
  options.servers = NULL;
 | 
			
		||||
  options.nservers = 0;
 | 
			
		||||
  while ((c = ares_getopt(argc, argv, "df:s:c:t:T:U:")) != -1)
 | 
			
		||||
    {
 | 
			
		||||
      switch (c)
 | 
			
		||||
        {
 | 
			
		||||
        case 'd':
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
          dbug_init();
 | 
			
		||||
#endif
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'f':
 | 
			
		||||
          /* Add a flag. */
 | 
			
		||||
          for (i = 0; i < nflags; i++)
 | 
			
		||||
            {
 | 
			
		||||
              if (strcmp(flags[i].name, optarg) == 0)
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          if (i == nflags)
 | 
			
		||||
            usage();
 | 
			
		||||
          options.flags |= flags[i].value;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 's':
 | 
			
		||||
          /* Add a server, and specify servers in the option mask. */
 | 
			
		||||
          hostent = gethostbyname(optarg);
 | 
			
		||||
          if (!hostent || hostent->h_addrtype != AF_INET)
 | 
			
		||||
            {
 | 
			
		||||
              fprintf(stderr, "adig: server %s not found.\n", optarg);
 | 
			
		||||
              return 1;
 | 
			
		||||
            }
 | 
			
		||||
          options.servers = realloc(options.servers, (options.nservers + 1)
 | 
			
		||||
                                    * sizeof(struct in_addr));
 | 
			
		||||
          if (!options.servers)
 | 
			
		||||
            {
 | 
			
		||||
              fprintf(stderr, "Out of memory!\n");
 | 
			
		||||
              return 1;
 | 
			
		||||
            }
 | 
			
		||||
          memcpy(&options.servers[options.nservers], hostent->h_addr,
 | 
			
		||||
                 sizeof(struct in_addr));
 | 
			
		||||
          options.nservers++;
 | 
			
		||||
          optmask |= ARES_OPT_SERVERS;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'c':
 | 
			
		||||
          /* Set the query class. */
 | 
			
		||||
          for (i = 0; i < nclasses; i++)
 | 
			
		||||
            {
 | 
			
		||||
              if (strcasecmp(classes[i].name, optarg) == 0)
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          if (i == nclasses)
 | 
			
		||||
            usage();
 | 
			
		||||
          dnsclass = classes[i].value;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 't':
 | 
			
		||||
          /* Set the query type. */
 | 
			
		||||
          for (i = 0; i < ntypes; i++)
 | 
			
		||||
            {
 | 
			
		||||
              if (strcasecmp(types[i].name, optarg) == 0)
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          if (i == ntypes)
 | 
			
		||||
            usage();
 | 
			
		||||
          type = types[i].value;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'T':
 | 
			
		||||
          /* Set the TCP port number. */
 | 
			
		||||
          if (!ISDIGIT(*optarg))
 | 
			
		||||
            usage();
 | 
			
		||||
          options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
 | 
			
		||||
          optmask |= ARES_OPT_TCP_PORT;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'U':
 | 
			
		||||
          /* Set the UDP port number. */
 | 
			
		||||
          if (!ISDIGIT(*optarg))
 | 
			
		||||
            usage();
 | 
			
		||||
          options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
 | 
			
		||||
          optmask |= ARES_OPT_UDP_PORT;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  argc -= optind;
 | 
			
		||||
  argv += optind;
 | 
			
		||||
  if (argc == 0)
 | 
			
		||||
    usage();
 | 
			
		||||
 | 
			
		||||
  status = ares_init_options(&channel, &options, optmask);
 | 
			
		||||
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      fprintf(stderr, "ares_init_options: %s\n",
 | 
			
		||||
              ares_strerror(status));
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Initiate the queries, one per command-line argument.  If there is
 | 
			
		||||
   * only one query to do, supply NULL as the callback argument;
 | 
			
		||||
   * otherwise, supply the query name as an argument so we can
 | 
			
		||||
   * distinguish responses for the user when printing them out.
 | 
			
		||||
   */
 | 
			
		||||
  if (argc == 1)
 | 
			
		||||
    ares_query(channel, *argv, dnsclass, type, callback, (char *) NULL);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      for (; *argv; argv++)
 | 
			
		||||
        ares_query(channel, *argv, dnsclass, type, callback, *argv);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Wait for all queries to complete. */
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      FD_ZERO(&read_fds);
 | 
			
		||||
      FD_ZERO(&write_fds);
 | 
			
		||||
      nfds = ares_fds(channel, &read_fds, &write_fds);
 | 
			
		||||
      if (nfds == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      tvp = ares_timeout(channel, NULL, &tv);
 | 
			
		||||
      count = select(nfds, &read_fds, &write_fds, NULL, tvp);
 | 
			
		||||
      if (count < 0 && SOCKERRNO != EINVAL)
 | 
			
		||||
        {
 | 
			
		||||
          perror("select");
 | 
			
		||||
          return 1;
 | 
			
		||||
        }
 | 
			
		||||
      ares_process(channel, &read_fds, &write_fds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  ares_destroy(channel);
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WSACleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void callback(void *arg, int status, unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  char *name = (char *) arg;
 | 
			
		||||
  int id, qr, opcode, aa, tc, rd, ra, rcode;
 | 
			
		||||
  unsigned int qdcount, ancount, nscount, arcount, i;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
 | 
			
		||||
  /* Display the query name if given. */
 | 
			
		||||
  if (name)
 | 
			
		||||
    printf("Answer for query %s:\n", name);
 | 
			
		||||
 | 
			
		||||
  /* Display an error message if there was an error, but only stop if
 | 
			
		||||
   * we actually didn't get an answer buffer.
 | 
			
		||||
   */
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      printf("%s\n", ares_strerror(status));
 | 
			
		||||
      if (!abuf)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Won't happen, but check anyway, for safety. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* Parse the answer header. */
 | 
			
		||||
  id = DNS_HEADER_QID(abuf);
 | 
			
		||||
  qr = DNS_HEADER_QR(abuf);
 | 
			
		||||
  opcode = DNS_HEADER_OPCODE(abuf);
 | 
			
		||||
  aa = DNS_HEADER_AA(abuf);
 | 
			
		||||
  tc = DNS_HEADER_TC(abuf);
 | 
			
		||||
  rd = DNS_HEADER_RD(abuf);
 | 
			
		||||
  ra = DNS_HEADER_RA(abuf);
 | 
			
		||||
  rcode = DNS_HEADER_RCODE(abuf);
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  nscount = DNS_HEADER_NSCOUNT(abuf);
 | 
			
		||||
  arcount = DNS_HEADER_ARCOUNT(abuf);
 | 
			
		||||
 | 
			
		||||
  /* Display the answer header. */
 | 
			
		||||
  printf("id: %d\n", id);
 | 
			
		||||
  printf("flags: %s%s%s%s%s\n",
 | 
			
		||||
         qr ? "qr " : "",
 | 
			
		||||
         aa ? "aa " : "",
 | 
			
		||||
         tc ? "tc " : "",
 | 
			
		||||
         rd ? "rd " : "",
 | 
			
		||||
         ra ? "ra " : "");
 | 
			
		||||
  printf("opcode: %s\n", opcodes[opcode]);
 | 
			
		||||
  printf("rcode: %s\n", rcodes[rcode]);
 | 
			
		||||
 | 
			
		||||
  /* Display the questions. */
 | 
			
		||||
  printf("Questions:\n");
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  for (i = 0; i < qdcount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_question(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the answers. */
 | 
			
		||||
  printf("Answers:\n");
 | 
			
		||||
  for (i = 0; i < ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_rr(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the NS records. */
 | 
			
		||||
  printf("NS records:\n");
 | 
			
		||||
  for (i = 0; i < nscount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_rr(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the additional records. */
 | 
			
		||||
  printf("Additional records:\n");
 | 
			
		||||
  for (i = 0; i < arcount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_rr(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const unsigned char *display_question(const unsigned char *aptr,
 | 
			
		||||
                                             const unsigned char *abuf,
 | 
			
		||||
                                             int alen)
 | 
			
		||||
{
 | 
			
		||||
  char *name;
 | 
			
		||||
  int type, dnsclass, status;
 | 
			
		||||
  long len;
 | 
			
		||||
 | 
			
		||||
  /* Parse the question name. */
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &name, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return NULL;
 | 
			
		||||
  aptr += len;
 | 
			
		||||
 | 
			
		||||
  /* Make sure there's enough data after the name for the fixed part
 | 
			
		||||
   * of the question.
 | 
			
		||||
   */
 | 
			
		||||
  if (aptr + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Parse the question type and class. */
 | 
			
		||||
  type = DNS_QUESTION_TYPE(aptr);
 | 
			
		||||
  dnsclass = DNS_QUESTION_CLASS(aptr);
 | 
			
		||||
  aptr += QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Display the question, in a format sort of similar to how we will
 | 
			
		||||
   * display RRs.
 | 
			
		||||
   */
 | 
			
		||||
  printf("\t%-15s.\t", name);
 | 
			
		||||
  if (dnsclass != C_IN)
 | 
			
		||||
    printf("\t%s", class_name(dnsclass));
 | 
			
		||||
  printf("\t%s\n", type_name(type));
 | 
			
		||||
  ares_free_string(name);
 | 
			
		||||
  return aptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const unsigned char *display_rr(const unsigned char *aptr,
 | 
			
		||||
                                       const unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  const unsigned char *p;
 | 
			
		||||
  char *name;
 | 
			
		||||
  int type, dnsclass, ttl, dlen, status;
 | 
			
		||||
  long len;
 | 
			
		||||
  char addr[46];
 | 
			
		||||
 | 
			
		||||
  /* Parse the RR name. */
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &name, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return NULL;
 | 
			
		||||
  aptr += len;
 | 
			
		||||
 | 
			
		||||
  /* Make sure there is enough data after the RR name for the fixed
 | 
			
		||||
   * part of the RR.
 | 
			
		||||
   */
 | 
			
		||||
  if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Parse the fixed part of the RR, and advance to the RR data
 | 
			
		||||
   * field. */
 | 
			
		||||
  type = DNS_RR_TYPE(aptr);
 | 
			
		||||
  dnsclass = DNS_RR_CLASS(aptr);
 | 
			
		||||
  ttl = DNS_RR_TTL(aptr);
 | 
			
		||||
  dlen = DNS_RR_LEN(aptr);
 | 
			
		||||
  aptr += RRFIXEDSZ;
 | 
			
		||||
  if (aptr + dlen > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the RR name, class, and type. */
 | 
			
		||||
  printf("\t%-15s.\t%d", name, ttl);
 | 
			
		||||
  if (dnsclass != C_IN)
 | 
			
		||||
    printf("\t%s", class_name(dnsclass));
 | 
			
		||||
  printf("\t%s", type_name(type));
 | 
			
		||||
  ares_free_string(name);
 | 
			
		||||
 | 
			
		||||
  /* Display the RR data.  Don't touch aptr. */
 | 
			
		||||
  switch (type)
 | 
			
		||||
    {
 | 
			
		||||
    case T_CNAME:
 | 
			
		||||
    case T_MB:
 | 
			
		||||
    case T_MD:
 | 
			
		||||
    case T_MF:
 | 
			
		||||
    case T_MG:
 | 
			
		||||
    case T_MR:
 | 
			
		||||
    case T_NS:
 | 
			
		||||
    case T_PTR:
 | 
			
		||||
      /* For these types, the RR data is just a domain name. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name);
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_HINFO:
 | 
			
		||||
      /* The RR data is two length-counted character strings. */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      len = *p;
 | 
			
		||||
      if (p + len + 1 > aptr + dlen)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%.*s", (int)len, p + 1);
 | 
			
		||||
      p += len + 1;
 | 
			
		||||
      len = *p;
 | 
			
		||||
      if (p + len + 1 > aptr + dlen)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%.*s", (int)len, p + 1);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_MINFO:
 | 
			
		||||
      /* The RR data is two domain names. */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name);
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      p += len;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name);
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_MX:
 | 
			
		||||
      /* The RR data is two bytes giving a preference ordering, and
 | 
			
		||||
       * then a domain name.
 | 
			
		||||
       */
 | 
			
		||||
      if (dlen < 2)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%d", DNS__16BIT(aptr));
 | 
			
		||||
      status = ares_expand_name(aptr + 2, abuf, alen, &name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name);
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_SOA:
 | 
			
		||||
      /* The RR data is two domain names and then five four-byte
 | 
			
		||||
       * numbers giving the serial number and some timeouts.
 | 
			
		||||
       */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.\n", name);
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      p += len;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t%s.\n", name);
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      p += len;
 | 
			
		||||
      if (p + 20 > aptr + dlen)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )",
 | 
			
		||||
             (unsigned long)DNS__32BIT(p), (unsigned long)DNS__32BIT(p+4),
 | 
			
		||||
             (unsigned long)DNS__32BIT(p+8), (unsigned long)DNS__32BIT(p+12),
 | 
			
		||||
             (unsigned long)DNS__32BIT(p+16));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_TXT:
 | 
			
		||||
      /* The RR data is one or more length-counted character
 | 
			
		||||
       * strings. */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      while (p < aptr + dlen)
 | 
			
		||||
        {
 | 
			
		||||
          len = *p;
 | 
			
		||||
          if (p + len + 1 > aptr + dlen)
 | 
			
		||||
            return NULL;
 | 
			
		||||
          printf("\t%.*s", (int)len, p + 1);
 | 
			
		||||
          p += len + 1;
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_A:
 | 
			
		||||
      /* The RR data is a four-byte Internet address. */
 | 
			
		||||
      if (dlen != 4)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      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:
 | 
			
		||||
      /* Not implemented yet */
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_SRV:
 | 
			
		||||
      /* The RR data is three two-byte numbers representing the
 | 
			
		||||
       * priority, weight, and port, followed by a domain name.
 | 
			
		||||
       */
 | 
			
		||||
 | 
			
		||||
      printf("\t%d", DNS__16BIT(aptr));
 | 
			
		||||
      printf(" %d", DNS__16BIT(aptr + 2));
 | 
			
		||||
      printf(" %d", DNS__16BIT(aptr + 4));
 | 
			
		||||
 | 
			
		||||
      status = ares_expand_name(aptr + 6, abuf, alen, &name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name);
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      printf("\t[Unknown RR; cannot parse]");
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  printf("\n");
 | 
			
		||||
 | 
			
		||||
  return aptr + dlen;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *type_name(int type)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < ntypes; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (types[i].value == type)
 | 
			
		||||
        return types[i].name;
 | 
			
		||||
    }
 | 
			
		||||
  return "(unknown)";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *class_name(int dnsclass)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nclasses; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (classes[i].value == dnsclass)
 | 
			
		||||
        return classes[i].name;
 | 
			
		||||
    }
 | 
			
		||||
  return "(unknown)";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage(void)
 | 
			
		||||
{
 | 
			
		||||
  fprintf(stderr, "usage: adig [-f flag] [-s server] [-c class] "
 | 
			
		||||
          "[-t type] [-p port] name ...\n");
 | 
			
		||||
  exit(1);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										179
									
								
								ares/ahost.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								ares/ahost.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,179 @@
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id$
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#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"
 | 
			
		||||
#include "ares_getopt.h"
 | 
			
		||||
 | 
			
		||||
#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);
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  int status, nfds, c, addr_family = AF_INET;
 | 
			
		||||
  fd_set read_fds, write_fds;
 | 
			
		||||
  struct timeval *tvp, tv;
 | 
			
		||||
  struct in_addr addr4;
 | 
			
		||||
  struct in6_addr addr6;
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
 | 
			
		||||
  WSADATA wsaData;
 | 
			
		||||
  WSAStartup(wVersionRequested, &wsaData);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  while ((c = ares_getopt(argc,argv,"dt:h")) != -1)
 | 
			
		||||
    {
 | 
			
		||||
      switch (c)
 | 
			
		||||
        {
 | 
			
		||||
        case 'd':
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
          dbug_init();
 | 
			
		||||
#endif
 | 
			
		||||
          break;
 | 
			
		||||
        case 't':
 | 
			
		||||
          if (!strcasecmp(optarg,"a"))
 | 
			
		||||
            addr_family = AF_INET;
 | 
			
		||||
          else if (!strcasecmp(optarg,"aaaa"))
 | 
			
		||||
            addr_family = AF_INET6;
 | 
			
		||||
          else
 | 
			
		||||
            usage();
 | 
			
		||||
          break;
 | 
			
		||||
        case 'h':
 | 
			
		||||
        default:
 | 
			
		||||
          usage();
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  argc -= optind;
 | 
			
		||||
  argv += optind;
 | 
			
		||||
  if (argc < 1)
 | 
			
		||||
    usage();
 | 
			
		||||
 | 
			
		||||
  status = ares_init(&channel);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      fprintf(stderr, "ares_init: %s\n", ares_strerror(status));
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Initiate the queries, one per command-line argument. */
 | 
			
		||||
  for ( ; *argv; 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_gethostbyname(channel, *argv, addr_family, callback, *argv);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Wait for all queries to complete. */
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      FD_ZERO(&read_fds);
 | 
			
		||||
      FD_ZERO(&write_fds);
 | 
			
		||||
      nfds = ares_fds(channel, &read_fds, &write_fds);
 | 
			
		||||
      if (nfds == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      tvp = ares_timeout(channel, NULL, &tv);
 | 
			
		||||
      select(nfds, &read_fds, &write_fds, NULL, tvp);
 | 
			
		||||
      ares_process(channel, &read_fds, &write_fds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  ares_destroy(channel);
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WSACleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void callback(void *arg, int status, struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  char **p;
 | 
			
		||||
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status));
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  for (p = host->h_addr_list; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      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("");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage(void)
 | 
			
		||||
{
 | 
			
		||||
  fprintf(stderr, "usage: ahost [-t {a|aaaa}] {host|addr} ...\n");
 | 
			
		||||
  exit(1);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										251
									
								
								ares/ares.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								ares/ares.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,251 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ARES__H
 | 
			
		||||
#define ARES__H
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#if defined(_AIX) || defined(NETWARE)
 | 
			
		||||
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
 | 
			
		||||
   libc5-based Linux systems. Only include it on system that are known to
 | 
			
		||||
   require it! */
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(WATT32)
 | 
			
		||||
  #include <netinet/in.h>
 | 
			
		||||
  #include <sys/socket.h>
 | 
			
		||||
  #include <tcp.h>
 | 
			
		||||
#elif defined(WIN32)
 | 
			
		||||
  #include <winsock2.h>
 | 
			
		||||
  #include <windows.h>
 | 
			
		||||
#else
 | 
			
		||||
  #include <netinet/in.h>
 | 
			
		||||
  #include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ARES_SUCCESS            0
 | 
			
		||||
 | 
			
		||||
/* Server error codes (ARES_ENODATA indicates no relevant answer) */
 | 
			
		||||
#define ARES_ENODATA            1
 | 
			
		||||
#define ARES_EFORMERR           2
 | 
			
		||||
#define ARES_ESERVFAIL          3
 | 
			
		||||
#define ARES_ENOTFOUND          4
 | 
			
		||||
#define ARES_ENOTIMP            5
 | 
			
		||||
#define ARES_EREFUSED           6
 | 
			
		||||
 | 
			
		||||
/* Locally generated error codes */
 | 
			
		||||
#define ARES_EBADQUERY          7
 | 
			
		||||
#define ARES_EBADNAME           8
 | 
			
		||||
#define ARES_EBADFAMILY         9
 | 
			
		||||
#define ARES_EBADRESP           10
 | 
			
		||||
#define ARES_ECONNREFUSED       11
 | 
			
		||||
#define ARES_ETIMEOUT           12
 | 
			
		||||
#define ARES_EOF                13
 | 
			
		||||
#define ARES_EFILE              14
 | 
			
		||||
#define ARES_ENOMEM             15
 | 
			
		||||
#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)
 | 
			
		||||
#define ARES_FLAG_IGNTC         (1 << 2)
 | 
			
		||||
#define ARES_FLAG_NORECURSE     (1 << 3)
 | 
			
		||||
#define ARES_FLAG_STAYOPEN      (1 << 4)
 | 
			
		||||
#define ARES_FLAG_NOSEARCH      (1 << 5)
 | 
			
		||||
#define ARES_FLAG_NOALIASES     (1 << 6)
 | 
			
		||||
#define ARES_FLAG_NOCHECKRESP   (1 << 7)
 | 
			
		||||
 | 
			
		||||
/* Option mask values */
 | 
			
		||||
#define ARES_OPT_FLAGS          (1 << 0)
 | 
			
		||||
#define ARES_OPT_TIMEOUT        (1 << 1)
 | 
			
		||||
#define ARES_OPT_TRIES          (1 << 2)
 | 
			
		||||
#define ARES_OPT_NDOTS          (1 << 3)
 | 
			
		||||
#define ARES_OPT_UDP_PORT       (1 << 4)
 | 
			
		||||
#define ARES_OPT_TCP_PORT       (1 << 5)
 | 
			
		||||
#define ARES_OPT_SERVERS        (1 << 6)
 | 
			
		||||
#define ARES_OPT_DOMAINS        (1 << 7)
 | 
			
		||||
#define ARES_OPT_LOOKUPS        (1 << 8)
 | 
			
		||||
#define ARES_OPT_SOCK_STATE_CB  (1 << 9)
 | 
			
		||||
#define ARES_OPT_SORTLIST       (1 << 10)
 | 
			
		||||
 | 
			
		||||
/* 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)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Typedef our socket type
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ares_socket_typedef
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
typedef SOCKET ares_socket_t;
 | 
			
		||||
#define ARES_SOCKET_BAD INVALID_SOCKET
 | 
			
		||||
#else
 | 
			
		||||
typedef int ares_socket_t;
 | 
			
		||||
#define ARES_SOCKET_BAD -1
 | 
			
		||||
#endif
 | 
			
		||||
#define ares_socket_typedef
 | 
			
		||||
#endif /* ares_socket_typedef */
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
typedef void (*ares_sock_state_cb)(void *data,
 | 
			
		||||
                                   SOCKET socket,
 | 
			
		||||
                                   int readable,
 | 
			
		||||
                                   int writable);
 | 
			
		||||
#else
 | 
			
		||||
typedef void (*ares_sock_state_cb)(void *data,
 | 
			
		||||
                                   int socket,
 | 
			
		||||
                                   int readable,
 | 
			
		||||
                                   int writable);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct apattern;
 | 
			
		||||
 | 
			
		||||
struct ares_options {
 | 
			
		||||
  int flags;
 | 
			
		||||
  int timeout;
 | 
			
		||||
  int tries;
 | 
			
		||||
  int ndots;
 | 
			
		||||
  unsigned short udp_port;
 | 
			
		||||
  unsigned short tcp_port;
 | 
			
		||||
  struct in_addr *servers;
 | 
			
		||||
  int nservers;
 | 
			
		||||
  char **domains;
 | 
			
		||||
  int ndomains;
 | 
			
		||||
  char *lookups;
 | 
			
		||||
  ares_sock_state_cb sock_state_cb;
 | 
			
		||||
  void *sock_state_cb_data;
 | 
			
		||||
  struct apattern *sortlist;
 | 
			
		||||
  int nsort;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
                      int optmask);
 | 
			
		||||
int ares_save_options(ares_channel channel, struct ares_options *options, int *optmask);
 | 
			
		||||
void ares_destroy_options(struct ares_options *options);
 | 
			
		||||
void ares_destroy(ares_channel channel);
 | 
			
		||||
void ares_cancel(ares_channel channel);
 | 
			
		||||
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
 | 
			
		||||
               ares_callback callback, void *arg);
 | 
			
		||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                int type, ares_callback callback, void *arg);
 | 
			
		||||
void ares_search(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                 int type, ares_callback callback, void *arg);
 | 
			
		||||
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);
 | 
			
		||||
void ares_process_fd(ares_channel channel, ares_socket_t read_fd,
 | 
			
		||||
                     ares_socket_t write_fd);
 | 
			
		||||
 | 
			
		||||
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
 | 
			
		||||
                 int rd, unsigned char **buf, int *buflen);
 | 
			
		||||
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                     int alen, char **s, long *enclen);
 | 
			
		||||
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                     int alen, unsigned char **s, long *enclen);
 | 
			
		||||
int ares_parse_a_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host);
 | 
			
		||||
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host);
 | 
			
		||||
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
 | 
			
		||||
                         int addrlen, int family, struct hostent **host);
 | 
			
		||||
int ares_parse_ns_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host);
 | 
			
		||||
void ares_free_string(void *str);
 | 
			
		||||
void ares_free_hostent(struct hostent *host);
 | 
			
		||||
const char *ares_strerror(int code);
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* ARES__H */
 | 
			
		||||
							
								
								
									
										61
									
								
								ares/ares__close_sockets.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								ares/ares__close_sockets.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares__close_sockets(ares_channel channel, struct server_state *server)
 | 
			
		||||
{
 | 
			
		||||
  struct send_request *sendreq;
 | 
			
		||||
 | 
			
		||||
  /* Free all pending output buffers. */
 | 
			
		||||
  while (server->qhead)
 | 
			
		||||
    {
 | 
			
		||||
      /* Advance server->qhead; pull out query as we go. */
 | 
			
		||||
      sendreq = server->qhead;
 | 
			
		||||
      server->qhead = sendreq->next;
 | 
			
		||||
      free(sendreq);
 | 
			
		||||
    }
 | 
			
		||||
  server->qtail = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Reset any existing input buffer. */
 | 
			
		||||
  if (server->tcp_buffer)
 | 
			
		||||
    free(server->tcp_buffer);
 | 
			
		||||
  server->tcp_buffer = NULL;
 | 
			
		||||
  server->tcp_lenbuf_pos = 0;
 | 
			
		||||
 | 
			
		||||
  /* Close the TCP and UDP sockets. */
 | 
			
		||||
  if (server->tcp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
    {
 | 
			
		||||
      SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0);
 | 
			
		||||
      closesocket(server->tcp_socket);
 | 
			
		||||
      server->tcp_socket = ARES_SOCKET_BAD;
 | 
			
		||||
    }
 | 
			
		||||
  if (server->udp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
    {
 | 
			
		||||
      SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0);
 | 
			
		||||
      closesocket(server->udp_socket);
 | 
			
		||||
      server->udp_socket = ARES_SOCKET_BAD;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										191
									
								
								ares/ares__get_hostent.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								ares/ares__get_hostent.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,191 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
 | 
			
		||||
int ares__get_hostent(FILE *fp, int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  char *line = NULL, *p, *q, *canonical, **alias;
 | 
			
		||||
  int status, linesize, end_at_hostname, naliases;
 | 
			
		||||
  struct in_addr addr;
 | 
			
		||||
  struct in6_addr addr6;
 | 
			
		||||
  int addrlen = sizeof(struct in_addr);
 | 
			
		||||
  struct hostent *hostent = NULL;
 | 
			
		||||
 | 
			
		||||
  while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* Skip comment lines; terminate line at comment character. */
 | 
			
		||||
      if (*line == '#' || !*line)
 | 
			
		||||
        continue;
 | 
			
		||||
      p = strchr(line, '#');
 | 
			
		||||
      if (p)
 | 
			
		||||
        *p = 0;
 | 
			
		||||
 | 
			
		||||
      /* Get the address part. */
 | 
			
		||||
      p = line;
 | 
			
		||||
      while (*p && !ISSPACE(*p))
 | 
			
		||||
        p++;
 | 
			
		||||
      if (!*p)
 | 
			
		||||
        continue;
 | 
			
		||||
      *p = 0;
 | 
			
		||||
      addr.s_addr = inet_addr(line);
 | 
			
		||||
      if (addr.s_addr == INADDR_NONE)
 | 
			
		||||
       {
 | 
			
		||||
          if (ares_inet_pton(AF_INET6, line, &addr6) > 0)
 | 
			
		||||
            {
 | 
			
		||||
              if (family != AF_INET6)
 | 
			
		||||
                continue;
 | 
			
		||||
              addrlen = sizeof(struct in6_addr);
 | 
			
		||||
            }
 | 
			
		||||
          else
 | 
			
		||||
            continue;
 | 
			
		||||
       }
 | 
			
		||||
      else if (family != AF_INET)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      /* Get the canonical hostname. */
 | 
			
		||||
      p++;
 | 
			
		||||
      while (ISSPACE(*p))
 | 
			
		||||
        p++;
 | 
			
		||||
      if (!*p)
 | 
			
		||||
        continue;
 | 
			
		||||
      q = p;
 | 
			
		||||
      while (*q && !ISSPACE(*q))
 | 
			
		||||
        q++;
 | 
			
		||||
      end_at_hostname = (*q == 0);
 | 
			
		||||
      *q = 0;
 | 
			
		||||
      canonical = p;
 | 
			
		||||
 | 
			
		||||
      naliases = 0;
 | 
			
		||||
      if (!end_at_hostname)
 | 
			
		||||
        {
 | 
			
		||||
          /* Count the aliases. */
 | 
			
		||||
          p = q + 1;
 | 
			
		||||
          while (ISSPACE(*p))
 | 
			
		||||
            p++;
 | 
			
		||||
          while (*p)
 | 
			
		||||
            {
 | 
			
		||||
              while (*p && !ISSPACE(*p))
 | 
			
		||||
                p++;
 | 
			
		||||
              while (ISSPACE(*p))
 | 
			
		||||
                p++;
 | 
			
		||||
              naliases++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      /* Allocate memory for the host structure. */
 | 
			
		||||
      hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
      if (!hostent)
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_aliases = NULL;
 | 
			
		||||
      hostent->h_addr_list = NULL;
 | 
			
		||||
      hostent->h_name = strdup(canonical);
 | 
			
		||||
      if (!hostent->h_name)
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_addr_list = malloc(2 * sizeof(char *));
 | 
			
		||||
      if (!hostent->h_addr_list)
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_addr_list[0] = malloc(addrlen);
 | 
			
		||||
      if (!hostent->h_addr_list[0])
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_aliases = malloc((naliases + 1) * sizeof(char *));
 | 
			
		||||
      if (!hostent->h_aliases)
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      /* Copy in aliases. */
 | 
			
		||||
      naliases = 0;
 | 
			
		||||
      if (!end_at_hostname)
 | 
			
		||||
        {
 | 
			
		||||
          p = canonical + strlen(canonical) + 1;
 | 
			
		||||
          while (ISSPACE(*p))
 | 
			
		||||
            p++;
 | 
			
		||||
          while (*p)
 | 
			
		||||
            {
 | 
			
		||||
              q = p;
 | 
			
		||||
              while (*q && !ISSPACE(*q))
 | 
			
		||||
                q++;
 | 
			
		||||
              hostent->h_aliases[naliases] = malloc(q - p + 1);
 | 
			
		||||
              if (hostent->h_aliases[naliases] == NULL)
 | 
			
		||||
                break;
 | 
			
		||||
              memcpy(hostent->h_aliases[naliases], p, q - p);
 | 
			
		||||
              hostent->h_aliases[naliases][q - p] = 0;
 | 
			
		||||
              p = q;
 | 
			
		||||
              while (ISSPACE(*p))
 | 
			
		||||
                p++;
 | 
			
		||||
              naliases++;
 | 
			
		||||
            }
 | 
			
		||||
          if (*p)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      hostent->h_aliases[naliases] = NULL;
 | 
			
		||||
 | 
			
		||||
      hostent->h_addrtype = family;
 | 
			
		||||
      hostent->h_length = addrlen;
 | 
			
		||||
      if (family == AF_INET)
 | 
			
		||||
        memcpy(hostent->h_addr_list[0], &addr, addrlen);
 | 
			
		||||
      else if (family == AF_INET6)
 | 
			
		||||
        memcpy(hostent->h_addr_list[0], &addr6, addrlen);
 | 
			
		||||
      hostent->h_addr_list[1] = NULL;
 | 
			
		||||
      *host = hostent;
 | 
			
		||||
      free(line);
 | 
			
		||||
      return ARES_SUCCESS;
 | 
			
		||||
    }
 | 
			
		||||
  if(line)
 | 
			
		||||
    free(line);
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* Memory allocation failure; clean up. */
 | 
			
		||||
      if (hostent)
 | 
			
		||||
        {
 | 
			
		||||
          if(hostent->h_name)
 | 
			
		||||
            free((char *) hostent->h_name);
 | 
			
		||||
          if (hostent->h_aliases)
 | 
			
		||||
            {
 | 
			
		||||
              for (alias = hostent->h_aliases; *alias; alias++)
 | 
			
		||||
                free(*alias);
 | 
			
		||||
            }
 | 
			
		||||
          if(hostent->h_aliases)
 | 
			
		||||
            free(hostent->h_aliases);
 | 
			
		||||
          if (hostent->h_addr_list && hostent->h_addr_list[0])
 | 
			
		||||
            free(hostent->h_addr_list[0]);
 | 
			
		||||
          if(hostent->h_addr_list)
 | 
			
		||||
            free(hostent->h_addr_list);
 | 
			
		||||
          free(hostent);
 | 
			
		||||
        }
 | 
			
		||||
      *host = NULL;
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										67
									
								
								ares/ares__read_line.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								ares/ares__read_line.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
/* This is an internal function.  Its contract is to read a line from
 | 
			
		||||
 * a file into a dynamically allocated buffer, zeroing the trailing
 | 
			
		||||
 * newline if there is one.  The calling routine may call
 | 
			
		||||
 * ares__read_line multiple times with the same buf and bufsize
 | 
			
		||||
 * pointers; *buf will be reallocated and *bufsize adjusted as
 | 
			
		||||
 * appropriate.  The initial value of *buf should be NULL.  After the
 | 
			
		||||
 * calling routine is done reading lines, it should free *buf.
 | 
			
		||||
 */
 | 
			
		||||
int ares__read_line(FILE *fp, char **buf, int *bufsize)
 | 
			
		||||
{
 | 
			
		||||
  char *newbuf;
 | 
			
		||||
  size_t offset = 0;
 | 
			
		||||
  size_t len;
 | 
			
		||||
 | 
			
		||||
  if (*buf == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      *buf = malloc(128);
 | 
			
		||||
      if (!*buf)
 | 
			
		||||
        return ARES_ENOMEM;
 | 
			
		||||
      *bufsize = 128;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      if (!fgets(*buf + offset, *bufsize - (int)offset, fp))
 | 
			
		||||
        return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
 | 
			
		||||
      len = offset + strlen(*buf + offset);
 | 
			
		||||
      if ((*buf)[len - 1] == '\n')
 | 
			
		||||
        {
 | 
			
		||||
          (*buf)[len - 1] = 0;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      offset = len;
 | 
			
		||||
 | 
			
		||||
      /* Allocate more space. */
 | 
			
		||||
      newbuf = realloc(*buf, *bufsize * 2);
 | 
			
		||||
      if (!newbuf)
 | 
			
		||||
        return ARES_ENOMEM;
 | 
			
		||||
      *buf = newbuf;
 | 
			
		||||
      *bufsize *= 2;
 | 
			
		||||
    }
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								ares/ares_cancel.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								ares/ares_cancel.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_CANCEL 3 "31 March 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_cancel \- Cancel a resolve
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_cancel(ares_channel \fIchannel\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_cancel\fP function cancels all lookups/requests made on the the
 | 
			
		||||
name service channel identified by \fIchannel\fP.  \fBares_cancel\fP invokes
 | 
			
		||||
the callbacks for each pending query on the channel, passing a status of
 | 
			
		||||
.BR ARES_ETIMEOUT .
 | 
			
		||||
These calls give the callbacks a chance to clean up any state which
 | 
			
		||||
might have been stored in their arguments.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_init (3)
 | 
			
		||||
.BR ares_destroy (3)
 | 
			
		||||
.SH NOTES
 | 
			
		||||
This function was added in c-ares 1.2.0
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dirk Manske
 | 
			
		||||
							
								
								
									
										48
									
								
								ares/ares_cancel.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								ares/ares_cancel.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2004 by Daniel Stenberg et al
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software and its
 | 
			
		||||
 * documentation for any purpose and without fee is hereby granted, provided
 | 
			
		||||
 * that the above copyright notice appear in all copies and that both that
 | 
			
		||||
 * copyright notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in advertising or
 | 
			
		||||
 * publicity pertaining to distribution of the software without specific,
 | 
			
		||||
 * written prior permission.  M.I.T. makes no representations about the
 | 
			
		||||
 * suitability of this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ares_cancel() cancels a ongoing request/resolve that might be going on on
 | 
			
		||||
 * the given channel. It does NOT kill the channel, use ares_destroy() for
 | 
			
		||||
 * that.
 | 
			
		||||
 */
 | 
			
		||||
void ares_cancel(ares_channel channel)
 | 
			
		||||
{
 | 
			
		||||
  struct query *query, *next;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (query = channel->queries; query; query = next)
 | 
			
		||||
  {
 | 
			
		||||
    next = query->next;
 | 
			
		||||
    query->callback(query->arg, ARES_ETIMEOUT, NULL, 0);
 | 
			
		||||
    free(query->tcpbuf);
 | 
			
		||||
    free(query->skip_server);
 | 
			
		||||
    free(query);
 | 
			
		||||
  }
 | 
			
		||||
  channel->queries = NULL;
 | 
			
		||||
  if (!(channel->flags & ARES_FLAG_STAYOPEN))
 | 
			
		||||
  {
 | 
			
		||||
    if (channel->servers)
 | 
			
		||||
    {
 | 
			
		||||
      for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
        ares__close_sockets(channel, &channel->servers[i]);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										44
									
								
								ares/ares_destroy.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								ares/ares_destroy.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_DESTROY 3 "7 December 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_destroy \- Destroy a resolver channel
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_destroy(ares_channel \fIchannel\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_destroy
 | 
			
		||||
function destroys the name service channel identified by
 | 
			
		||||
.IR channel ,
 | 
			
		||||
freeing all memory and closing all sockets used by the channel.
 | 
			
		||||
.B ares_destroy
 | 
			
		||||
invokes the callbacks for each pending query on the channel, passing a
 | 
			
		||||
status of
 | 
			
		||||
.BR ARES_EDESTRUCTION .
 | 
			
		||||
These calls give the callbacks a chance to clean up any state which
 | 
			
		||||
might have been stored in their arguments.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_init (3),
 | 
			
		||||
.BR ares_cancel (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										74
									
								
								ares/ares_destroy.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								ares/ares_destroy.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares_destroy_options(struct ares_options *options)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  free(options->servers);
 | 
			
		||||
  for (i = 0; i < options->ndomains; i++)
 | 
			
		||||
    free(options->domains[i]);
 | 
			
		||||
  free(options->domains);
 | 
			
		||||
  if(options->sortlist)
 | 
			
		||||
    free(options->sortlist);
 | 
			
		||||
  free(options->lookups);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ares_destroy(ares_channel channel)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
  struct query *query;
 | 
			
		||||
 | 
			
		||||
  if (!channel)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (channel->servers) {
 | 
			
		||||
    for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
      ares__close_sockets(channel, &channel->servers[i]);
 | 
			
		||||
    free(channel->servers);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (channel->domains) {
 | 
			
		||||
    for (i = 0; i < channel->ndomains; i++)
 | 
			
		||||
      free(channel->domains[i]);
 | 
			
		||||
    free(channel->domains);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(channel->sortlist)
 | 
			
		||||
    free(channel->sortlist);
 | 
			
		||||
 | 
			
		||||
  if (channel->lookups)
 | 
			
		||||
    free(channel->lookups);
 | 
			
		||||
 | 
			
		||||
  while (channel->queries) {
 | 
			
		||||
    query = channel->queries;
 | 
			
		||||
    channel->queries = query->next;
 | 
			
		||||
    query->callback(query->arg, ARES_EDESTRUCTION, NULL, 0);
 | 
			
		||||
    if (query->tcpbuf)
 | 
			
		||||
      free(query->tcpbuf);
 | 
			
		||||
    if (query->skip_server)
 | 
			
		||||
      free(query->skip_server);
 | 
			
		||||
    free(query);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  free(channel);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								ares/ares_destroy_options.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								ares/ares_destroy_options.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_DESTROY_OPTIONS 3 "1 June 2007"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_destroy_options \- Destroy options initialized with ares_save_options
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_destroy_options(struct ares_options *\fIoptions\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_destroy_options
 | 
			
		||||
function destroys the options struct identified by
 | 
			
		||||
.IR options ,
 | 
			
		||||
freeing all memory allocated by ares_save_options.
 | 
			
		||||
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_save_options (3),
 | 
			
		||||
.BR ares_init_options (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Brad House
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										91
									
								
								ares/ares_dns.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								ares/ares_dns.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ARES__DNS_H
 | 
			
		||||
#define ARES__DNS_H
 | 
			
		||||
 | 
			
		||||
#define DNS__16BIT(p)                   (((p)[0] << 8) | (p)[1])
 | 
			
		||||
#define DNS__32BIT(p)                   (((p)[0] << 24) | ((p)[1] << 16) | \
 | 
			
		||||
                                         ((p)[2] << 8) | (p)[3])
 | 
			
		||||
 | 
			
		||||
#define DNS__SET16BIT(p, v)  (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
 | 
			
		||||
                              ((p)[1] = (unsigned char)((v) & 0xff)))
 | 
			
		||||
#define DNS__SET32BIT(p, v)  (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
 | 
			
		||||
                              ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
 | 
			
		||||
                              ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
 | 
			
		||||
                              ((p)[3] = (unsigned char)((v) & 0xff)))
 | 
			
		||||
 | 
			
		||||
#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)
 | 
			
		||||
#define DNS_HEADER_QR(h)                (((h)[2] >> 7) & 0x1)
 | 
			
		||||
#define DNS_HEADER_OPCODE(h)            (((h)[2] >> 3) & 0xf)
 | 
			
		||||
#define DNS_HEADER_AA(h)                (((h)[2] >> 2) & 0x1)
 | 
			
		||||
#define DNS_HEADER_TC(h)                (((h)[2] >> 1) & 0x1)
 | 
			
		||||
#define DNS_HEADER_RD(h)                ((h)[2] & 0x1)
 | 
			
		||||
#define DNS_HEADER_RA(h)                (((h)[3] >> 7) & 0x1)
 | 
			
		||||
#define DNS_HEADER_Z(h)                 (((h)[3] >> 4) & 0x7)
 | 
			
		||||
#define DNS_HEADER_RCODE(h)             ((h)[3] & 0xf)
 | 
			
		||||
#define DNS_HEADER_QDCOUNT(h)           DNS__16BIT((h) + 4)
 | 
			
		||||
#define DNS_HEADER_ANCOUNT(h)           DNS__16BIT((h) + 6)
 | 
			
		||||
#define DNS_HEADER_NSCOUNT(h)           DNS__16BIT((h) + 8)
 | 
			
		||||
#define DNS_HEADER_ARCOUNT(h)           DNS__16BIT((h) + 10)
 | 
			
		||||
 | 
			
		||||
/* Macros for constructing a DNS header */
 | 
			
		||||
#define DNS_HEADER_SET_QID(h, v)      DNS__SET16BIT(h, v)
 | 
			
		||||
#define DNS_HEADER_SET_QR(h, v)       ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
 | 
			
		||||
#define DNS_HEADER_SET_OPCODE(h, v)   ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
 | 
			
		||||
#define DNS_HEADER_SET_AA(h, v)       ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
 | 
			
		||||
#define DNS_HEADER_SET_TC(h, v)       ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
 | 
			
		||||
#define DNS_HEADER_SET_RD(h, v)       ((h)[2] |= (unsigned char)((v) & 0x1))
 | 
			
		||||
#define DNS_HEADER_SET_RA(h, v)       ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
 | 
			
		||||
#define DNS_HEADER_SET_Z(h, v)        ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
 | 
			
		||||
#define DNS_HEADER_SET_RCODE(h, v)    ((h)[3] |= (unsigned char)((v) & 0xf))
 | 
			
		||||
#define DNS_HEADER_SET_QDCOUNT(h, v)  DNS__SET16BIT((h) + 4, v)
 | 
			
		||||
#define DNS_HEADER_SET_ANCOUNT(h, v)  DNS__SET16BIT((h) + 6, v)
 | 
			
		||||
#define DNS_HEADER_SET_NSCOUNT(h, v)  DNS__SET16BIT((h) + 8, v)
 | 
			
		||||
#define DNS_HEADER_SET_ARCOUNT(h, v)  DNS__SET16BIT((h) + 10, v)
 | 
			
		||||
 | 
			
		||||
/* Macros for parsing the fixed part of a DNS question */
 | 
			
		||||
#define DNS_QUESTION_TYPE(q)            DNS__16BIT(q)
 | 
			
		||||
#define DNS_QUESTION_CLASS(q)           DNS__16BIT((q) + 2)
 | 
			
		||||
 | 
			
		||||
/* Macros for constructing the fixed part of a DNS question */
 | 
			
		||||
#define DNS_QUESTION_SET_TYPE(q, v)     DNS__SET16BIT(q, v)
 | 
			
		||||
#define DNS_QUESTION_SET_CLASS(q, v)    DNS__SET16BIT((q) + 2, v)
 | 
			
		||||
 | 
			
		||||
/* Macros for parsing the fixed part of a DNS resource record */
 | 
			
		||||
#define DNS_RR_TYPE(r)                  DNS__16BIT(r)
 | 
			
		||||
#define DNS_RR_CLASS(r)                 DNS__16BIT((r) + 2)
 | 
			
		||||
#define DNS_RR_TTL(r)                   DNS__32BIT((r) + 4)
 | 
			
		||||
#define DNS_RR_LEN(r)                   DNS__16BIT((r) + 8)
 | 
			
		||||
 | 
			
		||||
/* Macros for constructing the fixed part of a DNS resource record */
 | 
			
		||||
#define DNS_RR_SET_TYPE(r)              DNS__SET16BIT(r, v)
 | 
			
		||||
#define DNS_RR_SET_CLASS(r)             DNS__SET16BIT((r) + 2, v)
 | 
			
		||||
#define DNS_RR_SET_TTL(r)               DNS__SET32BIT((r) + 4, v)
 | 
			
		||||
#define DNS_RR_SET_LEN(r)               DNS__SET16BIT((r) + 8, v)
 | 
			
		||||
 | 
			
		||||
#endif /* ARES__DNS_H */
 | 
			
		||||
							
								
								
									
										64
									
								
								ares/ares_expand_name.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ares/ares_expand_name.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_EXPAND_NAME 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_expand_name \- Expand a DNS-encoded domain name
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_expand_name(const unsigned char *\fIencoded\fP,
 | 
			
		||||
.B      const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP,
 | 
			
		||||
.B 	int *\fIenclen\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_expand_name
 | 
			
		||||
function converts a DNS-encoded domain name to a dot-separated C
 | 
			
		||||
string.  The argument
 | 
			
		||||
.I encoded
 | 
			
		||||
gives the beginning of the encoded domain name, and the arguments
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the containing message buffer (necessary for the processing of
 | 
			
		||||
indirection pointers within the encoded domain name).  The result is
 | 
			
		||||
placed in a NUL-terminated allocated buffer, a pointer to which is
 | 
			
		||||
stored in the variable pointed to by
 | 
			
		||||
.IR s .
 | 
			
		||||
The length of the encoded name is stored in the variable pointed to by
 | 
			
		||||
.I enclen
 | 
			
		||||
so that the caller can advance past the encoded domain name to read
 | 
			
		||||
further data in the message.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_expand_name
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Expansion of the encoded name succeeded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The encoded domain name was malformed and could not be expanded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_mkquery (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										165
									
								
								ares/ares_expand_name.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								ares/ares_expand_name.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,165 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h" /* for the memdebug */
 | 
			
		||||
 | 
			
		||||
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                       int alen);
 | 
			
		||||
 | 
			
		||||
/* Expand an RFC1035-encoded domain name given by encoded.  The
 | 
			
		||||
 * containing message is given by abuf and alen.  The result given by
 | 
			
		||||
 * *s, which is set to a NUL-terminated allocated buffer.  *enclen is
 | 
			
		||||
 * set to the length of the encoded name (not the length of the
 | 
			
		||||
 * expanded name; the goal is to tell the caller how many bytes to
 | 
			
		||||
 * move forward to get past the encoded name).
 | 
			
		||||
 *
 | 
			
		||||
 * In the simple case, an encoded name is a series of labels, each
 | 
			
		||||
 * composed of a one-byte length (limited to values between 0 and 63
 | 
			
		||||
 * inclusive) followed by the label contents.  The name is terminated
 | 
			
		||||
 * by a zero-length label.
 | 
			
		||||
 *
 | 
			
		||||
 * In the more complicated case, a label may be terminated by an
 | 
			
		||||
 * indirection pointer, specified by two bytes with the high bits of
 | 
			
		||||
 * the first byte (corresponding to INDIR_MASK) set to 11.  With the
 | 
			
		||||
 * two high bits of the first byte stripped off, the indirection
 | 
			
		||||
 * pointer gives an offset from the beginning of the containing
 | 
			
		||||
 * message with more labels to decode.  Indirection can happen an
 | 
			
		||||
 * arbitrary number of times, so we have to detect loops.
 | 
			
		||||
 *
 | 
			
		||||
 * Since the expanded name uses '.' as a label separator, we use
 | 
			
		||||
 * backslashes to escape periods or backslashes in the expanded name.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                     int alen, char **s, long *enclen)
 | 
			
		||||
{
 | 
			
		||||
  int len, indir = 0;
 | 
			
		||||
  char *q;
 | 
			
		||||
  const unsigned char *p;
 | 
			
		||||
 | 
			
		||||
  len = name_length(encoded, abuf, alen);
 | 
			
		||||
  if (len == -1)
 | 
			
		||||
    return ARES_EBADNAME;
 | 
			
		||||
 | 
			
		||||
  *s = malloc(len + 1);
 | 
			
		||||
  if (!*s)
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  q = *s;
 | 
			
		||||
 | 
			
		||||
  /* No error-checking necessary; it was all done by name_length(). */
 | 
			
		||||
  p = encoded;
 | 
			
		||||
  while (*p)
 | 
			
		||||
    {
 | 
			
		||||
      if ((*p & INDIR_MASK) == INDIR_MASK)
 | 
			
		||||
        {
 | 
			
		||||
          if (!indir)
 | 
			
		||||
            {
 | 
			
		||||
              *enclen = p + 2 - encoded;
 | 
			
		||||
              indir = 1;
 | 
			
		||||
            }
 | 
			
		||||
          p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1));
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          len = *p;
 | 
			
		||||
          p++;
 | 
			
		||||
          while (len--)
 | 
			
		||||
            {
 | 
			
		||||
              if (*p == '.' || *p == '\\')
 | 
			
		||||
                *q++ = '\\';
 | 
			
		||||
              *q++ = *p;
 | 
			
		||||
              p++;
 | 
			
		||||
            }
 | 
			
		||||
          *q++ = '.';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  if (!indir)
 | 
			
		||||
    *enclen = p + 1 - encoded;
 | 
			
		||||
 | 
			
		||||
  /* Nuke the trailing period if we wrote one. */
 | 
			
		||||
  if (q > *s)
 | 
			
		||||
    *(q - 1) = 0;
 | 
			
		||||
  else
 | 
			
		||||
    *q = 0; /* zero terminate */
 | 
			
		||||
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Return the length of the expansion of an encoded domain name, or
 | 
			
		||||
 * -1 if the encoding is invalid.
 | 
			
		||||
 */
 | 
			
		||||
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                       int alen)
 | 
			
		||||
{
 | 
			
		||||
  int n = 0, offset, indir = 0;
 | 
			
		||||
 | 
			
		||||
  /* Allow the caller to pass us abuf + alen and have us check for it. */
 | 
			
		||||
  if (encoded == abuf + alen)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  while (*encoded)
 | 
			
		||||
    {
 | 
			
		||||
      if ((*encoded & INDIR_MASK) == INDIR_MASK)
 | 
			
		||||
        {
 | 
			
		||||
          /* Check the offset and go there. */
 | 
			
		||||
          if (encoded + 1 >= abuf + alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
          offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1);
 | 
			
		||||
          if (offset >= alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
          encoded = abuf + offset;
 | 
			
		||||
 | 
			
		||||
          /* If we've seen more indirects than the message length,
 | 
			
		||||
           * then there's a loop.
 | 
			
		||||
           */
 | 
			
		||||
          if (++indir > alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          offset = *encoded;
 | 
			
		||||
          if (encoded + offset + 1 >= abuf + alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
          encoded++;
 | 
			
		||||
          while (offset--)
 | 
			
		||||
            {
 | 
			
		||||
              n += (*encoded == '.' || *encoded == '\\') ? 2 : 1;
 | 
			
		||||
              encoded++;
 | 
			
		||||
            }
 | 
			
		||||
          n++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* If there were any labels at all, then the number of dots is one
 | 
			
		||||
   * less than the number of labels, so subtract one.
 | 
			
		||||
   */
 | 
			
		||||
  return (n) ? n - 1 : n;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								ares/ares_expand_string.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ares/ares_expand_string.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_EXPAND_NAME 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_expand_string \- Expand a length encoded string
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_expand_string(const unsigned char *\fIencoded\fP,
 | 
			
		||||
.B      const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP,
 | 
			
		||||
.B 	int *\fIenclen\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_expand_string
 | 
			
		||||
function converts a length encoded string to a NULL terminated C
 | 
			
		||||
string.  The argument
 | 
			
		||||
.I encoded
 | 
			
		||||
gives the beginning of the encoded string, and the arguments
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the containing message buffer (necessary for the processing of
 | 
			
		||||
indirection pointers within the encoded domain name).  The result is
 | 
			
		||||
placed in a NUL-terminated allocated buffer, a pointer to which is
 | 
			
		||||
stored in the variable pointed to by
 | 
			
		||||
.IR s .
 | 
			
		||||
The length of the encoded string is stored in the variable pointed to by
 | 
			
		||||
.I enclen
 | 
			
		||||
so that the caller can advance past the encoded string to read
 | 
			
		||||
further data in the message.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_expand_string
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Expansion of the encoded string succeeded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADSTR
 | 
			
		||||
The encoded string was malformed and could not be expanded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_free_string (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
							
								
								
									
										67
									
								
								ares/ares_expand_string.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								ares/ares_expand_string.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h" /* for the memdebug */
 | 
			
		||||
 | 
			
		||||
/* Simply decodes a length-encoded character string. The first byte of the
 | 
			
		||||
 * input is the length of the string to be returned and the bytes thereafter
 | 
			
		||||
 * are the characters of the string. The returned result will be NULL
 | 
			
		||||
 * terminated.
 | 
			
		||||
 */
 | 
			
		||||
int ares_expand_string(const unsigned char *encoded,
 | 
			
		||||
                       const unsigned char *abuf,
 | 
			
		||||
                       int alen,
 | 
			
		||||
                       unsigned char **s,
 | 
			
		||||
                       long *enclen)
 | 
			
		||||
{
 | 
			
		||||
  unsigned char *q;
 | 
			
		||||
  long len;
 | 
			
		||||
  if (encoded == abuf+alen)
 | 
			
		||||
    return ARES_EBADSTR;
 | 
			
		||||
 | 
			
		||||
  len = *encoded;
 | 
			
		||||
  if (encoded+len+1 > abuf+alen)
 | 
			
		||||
    return ARES_EBADSTR;
 | 
			
		||||
 | 
			
		||||
  encoded++;
 | 
			
		||||
 | 
			
		||||
  *s = malloc(len+1);
 | 
			
		||||
  if (*s == NULL)
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  q = *s;
 | 
			
		||||
  strncpy((char *)q, (char *)encoded, len);
 | 
			
		||||
  q[len] = '\0';
 | 
			
		||||
 | 
			
		||||
  *s = q;
 | 
			
		||||
 | 
			
		||||
  *enclen = len+1;
 | 
			
		||||
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										62
									
								
								ares/ares_fds.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ares/ares_fds.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_FDS 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_fds \- Get file descriptors to select on for name service
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_fds(ares_channel \fIchannel\fP, fd_set *\fIread_fds\fP,
 | 
			
		||||
.B	fd_set *\fIwrite_fds\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_fds
 | 
			
		||||
function retrieves the set of file descriptors which the calling
 | 
			
		||||
application should select on for reading and 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 file descriptor sets pointed to by
 | 
			
		||||
.I read_fds
 | 
			
		||||
and
 | 
			
		||||
.I write_fds
 | 
			
		||||
as appropriate.  File descriptors already set in
 | 
			
		||||
.I read_fds
 | 
			
		||||
and
 | 
			
		||||
.I write_fds
 | 
			
		||||
will remain set; initialization of the file descriptor sets
 | 
			
		||||
(using
 | 
			
		||||
.BR FD_ZERO )
 | 
			
		||||
is the responsibility of the caller.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_fds
 | 
			
		||||
returns one greater than the number of the highest socket set in either
 | 
			
		||||
.I read_fds
 | 
			
		||||
or
 | 
			
		||||
.IR write_fds .
 | 
			
		||||
If no queries are active,
 | 
			
		||||
.B ares_fds
 | 
			
		||||
will return 0.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_timeout (3),
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										57
									
								
								ares/ares_fds.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								ares/ares_fds.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
 | 
			
		||||
{
 | 
			
		||||
  struct server_state *server;
 | 
			
		||||
  ares_socket_t nfds;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  /* 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)
 | 
			
		||||
        {
 | 
			
		||||
          FD_SET(server->udp_socket, read_fds);
 | 
			
		||||
          if (server->udp_socket >= nfds)
 | 
			
		||||
            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;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
  return (int)nfds;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								ares/ares_free_hostent.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ares/ares_free_hostent.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_FREE_HOSTENT 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_free_hostent \- Free host structure allocated by ares functions
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_free_hostent(struct hostent *\fIhost\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.I ares_free_hostent
 | 
			
		||||
function frees a
 | 
			
		||||
.B struct hostent
 | 
			
		||||
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
 | 
			
		||||
\fIares_gethostbyaddr(3)\fP. The ares library will automatically free such
 | 
			
		||||
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
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										40
									
								
								ares/ares_free_hostent.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								ares/ares_free_hostent.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h" /* for memdebug */
 | 
			
		||||
 | 
			
		||||
void ares_free_hostent(struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  char **p;
 | 
			
		||||
 | 
			
		||||
  free((char *)(host->h_name));
 | 
			
		||||
  for (p = host->h_aliases; *p; p++)
 | 
			
		||||
    free(*p);
 | 
			
		||||
  free(host->h_aliases);
 | 
			
		||||
  free(host->h_addr_list[0]); /* no matter if there is one or many entries,
 | 
			
		||||
                                 there is only one malloc for all of them */
 | 
			
		||||
  free(host->h_addr_list);
 | 
			
		||||
  free(host);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								ares/ares_free_string.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ares/ares_free_string.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_FREE_STRING 3 "4 February 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_free_string \- Free strings allocated by ares functions
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_free_string(void *\fIstr\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.I ares_free_string
 | 
			
		||||
function frees a string allocated by an ares function.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_mkquery (3)
 | 
			
		||||
.BR ares_expand_string (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										26
									
								
								ares/ares_free_string.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								ares/ares_free_string.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares_free_string(void *str)
 | 
			
		||||
{
 | 
			
		||||
  free(str);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										97
									
								
								ares/ares_gethostbyaddr.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								ares/ares_gethostbyaddr.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETHOSTBYADDR 3 "24 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_gethostbyaddr \- Initiate a host query by address
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	struct hostent *\fIhostent\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_gethostbyaddr(ares_channel \fIchannel\fP, const void *\fIaddr\fP,
 | 
			
		||||
.B 	int \fIaddrlen\fP, int \fIfamily\fP, ares_host_callback \fIcallback\fP,
 | 
			
		||||
.B 	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_gethostbyaddr
 | 
			
		||||
function initiates a host query by address on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameters
 | 
			
		||||
.I addr
 | 
			
		||||
and
 | 
			
		||||
.I addrlen
 | 
			
		||||
give the address as a series of bytes, and
 | 
			
		||||
.I family
 | 
			
		||||
gives the type of address.  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_gethostbyaddr
 | 
			
		||||
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.
 | 
			
		||||
.PP
 | 
			
		||||
On successful completion of the query, the callback argument
 | 
			
		||||
.I hostent
 | 
			
		||||
points to a
 | 
			
		||||
.B struct hostent
 | 
			
		||||
containing the name of the host returned by the query.  The callback
 | 
			
		||||
need not and should not attempt to free the memory pointed to by
 | 
			
		||||
.IR hostent ;
 | 
			
		||||
the ares library will free it when the callback returns.  If the query
 | 
			
		||||
did not complete successfully,
 | 
			
		||||
.I hostent
 | 
			
		||||
will be
 | 
			
		||||
.BR NULL .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3),
 | 
			
		||||
.BR ares_gethostbyname (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										262
									
								
								ares/ares_gethostbyaddr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										262
									
								
								ares/ares_gethostbyaddr.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,262 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#undef WIN32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct addr_query {
 | 
			
		||||
  /* Arguments passed to ares_gethostbyaddr() */
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  union ares_addr addr;
 | 
			
		||||
  int family;
 | 
			
		||||
  ares_host_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
 | 
			
		||||
  const char *remaining_lookups;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct addr_query *aquery);
 | 
			
		||||
static void addr_callback(void *arg, int status, unsigned char *abuf,
 | 
			
		||||
                          int alen);
 | 
			
		||||
static void end_aquery(struct addr_query *aquery, int status,
 | 
			
		||||
                       struct hostent *host);
 | 
			
		||||
static int file_lookup(union ares_addr *addr, int family, struct hostent **host);
 | 
			
		||||
 | 
			
		||||
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
 | 
			
		||||
                        int family, ares_host_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct addr_query *aquery;
 | 
			
		||||
 | 
			
		||||
  if (family != AF_INET && family != AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOTIMP, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if ((family == AF_INET && addrlen != sizeof(struct in_addr)) ||
 | 
			
		||||
      (family == AF_INET6 && addrlen != sizeof(struct in6_addr)))
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOTIMP, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  aquery = malloc(sizeof(struct addr_query));
 | 
			
		||||
  if (!aquery)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  aquery->channel = channel;
 | 
			
		||||
  if (family == AF_INET)
 | 
			
		||||
    memcpy(&aquery->addr.addr4, addr, sizeof(struct in_addr));
 | 
			
		||||
  else
 | 
			
		||||
    memcpy(&aquery->addr.addr6, addr, sizeof(struct in6_addr));
 | 
			
		||||
  aquery->family = family;
 | 
			
		||||
  aquery->callback = callback;
 | 
			
		||||
  aquery->arg = arg;
 | 
			
		||||
  aquery->remaining_lookups = channel->lookups;
 | 
			
		||||
 | 
			
		||||
  next_lookup(aquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct addr_query *aquery)
 | 
			
		||||
{
 | 
			
		||||
  const char *p;
 | 
			
		||||
  char name[128];
 | 
			
		||||
  int a1, a2, a3, a4, status;
 | 
			
		||||
  struct hostent *host;
 | 
			
		||||
  unsigned long addr;
 | 
			
		||||
 | 
			
		||||
  for (p = aquery->remaining_lookups; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      switch (*p)
 | 
			
		||||
        {
 | 
			
		||||
        case 'b':
 | 
			
		||||
          if (aquery->family == AF_INET)
 | 
			
		||||
            {
 | 
			
		||||
              addr = ntohl(aquery->addr.addr4.s_addr);
 | 
			
		||||
              a1 = (int)((addr >> 24) & 0xff);
 | 
			
		||||
              a2 = (int)((addr >> 16) & 0xff);
 | 
			
		||||
              a3 = (int)((addr >> 8) & 0xff);
 | 
			
		||||
              a4 = (int)(addr & 0xff);
 | 
			
		||||
              sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
 | 
			
		||||
              aquery->remaining_lookups = p + 1;
 | 
			
		||||
              ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
 | 
			
		||||
                         aquery);
 | 
			
		||||
            }
 | 
			
		||||
          else
 | 
			
		||||
            {
 | 
			
		||||
              unsigned char *bytes;
 | 
			
		||||
              bytes = (unsigned char *)&aquery->addr.addr6.s6_addr;
 | 
			
		||||
              sprintf(name, "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
 | 
			
		||||
                      bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4,
 | 
			
		||||
                      bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4,
 | 
			
		||||
                      bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
 | 
			
		||||
                      bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4,
 | 
			
		||||
                      bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4,
 | 
			
		||||
                      bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4,
 | 
			
		||||
                      bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
 | 
			
		||||
                      bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4);
 | 
			
		||||
              aquery->remaining_lookups = p + 1;
 | 
			
		||||
              ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
 | 
			
		||||
                         aquery);
 | 
			
		||||
            }
 | 
			
		||||
          return;
 | 
			
		||||
        case 'f':
 | 
			
		||||
          status = file_lookup(&aquery->addr, aquery->family, &host);
 | 
			
		||||
          if (status != ARES_ENOTFOUND)
 | 
			
		||||
            {
 | 
			
		||||
              end_aquery(aquery, status, host);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  end_aquery(aquery, ARES_ENOTFOUND, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void addr_callback(void *arg, int status, unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct addr_query *aquery = (struct addr_query *) arg;
 | 
			
		||||
  struct hostent *host;
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (aquery->family == AF_INET)
 | 
			
		||||
        status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addr4,
 | 
			
		||||
                                      sizeof(struct in_addr), AF_INET, &host);
 | 
			
		||||
      else
 | 
			
		||||
        status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addr6,
 | 
			
		||||
                                      sizeof(struct in6_addr), AF_INET6, &host);
 | 
			
		||||
      end_aquery(aquery, status, host);
 | 
			
		||||
    }
 | 
			
		||||
  else if (status == ARES_EDESTRUCTION)
 | 
			
		||||
    end_aquery(aquery, status, NULL);
 | 
			
		||||
  else
 | 
			
		||||
    next_lookup(aquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void end_aquery(struct addr_query *aquery, int status,
 | 
			
		||||
                       struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  aquery->callback(aquery->arg, status, host);
 | 
			
		||||
  if (host)
 | 
			
		||||
    ares_free_hostent(host);
 | 
			
		||||
  free(aquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int file_lookup(union ares_addr *addr, int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  FILE *fp;
 | 
			
		||||
  int status;
 | 
			
		||||
  int error;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
  char PATH_HOSTS[MAX_PATH];
 | 
			
		||||
  if (IS_NT()) {
 | 
			
		||||
    char tmp[MAX_PATH];
 | 
			
		||||
    HKEY hkeyHosts;
 | 
			
		||||
 | 
			
		||||
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
 | 
			
		||||
        == ERROR_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      DWORD dwLength = MAX_PATH;
 | 
			
		||||
      RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
 | 
			
		||||
                      &dwLength);
 | 
			
		||||
      ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
 | 
			
		||||
      RegCloseKey(hkeyHosts);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
 | 
			
		||||
 | 
			
		||||
  strcat(PATH_HOSTS, WIN_PATH_HOSTS);
 | 
			
		||||
 | 
			
		||||
#elif defined(WATT32)
 | 
			
		||||
  extern const char *_w32_GetHostsFile (void);
 | 
			
		||||
  const char *PATH_HOSTS = _w32_GetHostsFile();
 | 
			
		||||
 | 
			
		||||
  if (!PATH_HOSTS)
 | 
			
		||||
    return ARES_ENOTFOUND;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  fp = fopen(PATH_HOSTS, "r");
 | 
			
		||||
  if (!fp)
 | 
			
		||||
    {
 | 
			
		||||
      error = ERRNO;
 | 
			
		||||
      switch(error)
 | 
			
		||||
        {
 | 
			
		||||
        case ENOENT:
 | 
			
		||||
        case ESRCH:
 | 
			
		||||
          return ARES_ENOTFOUND;
 | 
			
		||||
        default:
 | 
			
		||||
          DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
 | 
			
		||||
                         error, strerror(error)));
 | 
			
		||||
          DEBUGF(fprintf(stderr, "Error opening file: %s\n",
 | 
			
		||||
                         PATH_HOSTS));
 | 
			
		||||
          *host = NULL;
 | 
			
		||||
          return ARES_EFILE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (family != (*host)->h_addrtype)
 | 
			
		||||
        {
 | 
			
		||||
          ares_free_hostent(*host);
 | 
			
		||||
          continue;
 | 
			
		||||
        }
 | 
			
		||||
      if (family == AF_INET)
 | 
			
		||||
        {
 | 
			
		||||
          if (memcmp((*host)->h_addr, &addr->addr4, sizeof(struct in_addr)) == 0)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      else if (family == AF_INET6)
 | 
			
		||||
        {
 | 
			
		||||
          if (memcmp((*host)->h_addr, &addr->addr6, sizeof(struct in6_addr)) == 0)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      ares_free_hostent(*host);
 | 
			
		||||
    }
 | 
			
		||||
  fclose(fp);
 | 
			
		||||
  if (status == ARES_EOF)
 | 
			
		||||
    status = ARES_ENOTFOUND;
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    *host = NULL;
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										101
									
								
								ares/ares_gethostbyname.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								ares/ares_gethostbyname.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_gethostbyname \- Initiate a host query by name
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	struct hostent *\fIhostent\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_gethostbyname(ares_channel \fIchannel\fP, const char *\fIname\fP,
 | 
			
		||||
.B 	int \fIfamily\fP, ares_host_callback \fIcallback\fP, void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_gethostbyname
 | 
			
		||||
function initiates a host query by name on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the hostname as a NUL-terminated C string, and
 | 
			
		||||
.I family
 | 
			
		||||
gives the desired type of address for the resulting host entry.  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_gethostbyname
 | 
			
		||||
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 find addresses of type
 | 
			
		||||
.IR family .
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The hostname
 | 
			
		||||
.B name
 | 
			
		||||
is composed entirely of numbers and periods, but is not a valid
 | 
			
		||||
representation of an Internet address.
 | 
			
		||||
.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.
 | 
			
		||||
.PP
 | 
			
		||||
On successful completion of the query, the callback argument
 | 
			
		||||
.I hostent
 | 
			
		||||
points to a
 | 
			
		||||
.B struct hostent
 | 
			
		||||
containing the name of the host returned by the query.  The callback
 | 
			
		||||
need not and should not attempt to free the memory pointed to by
 | 
			
		||||
.IR hostent ;
 | 
			
		||||
the ares library will free it when the callback returns.  If the query
 | 
			
		||||
did not complete successfully,
 | 
			
		||||
.I hostent
 | 
			
		||||
will be
 | 
			
		||||
.BR NULL .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3),
 | 
			
		||||
.BR ares_gethostbyaddr (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										419
									
								
								ares/ares_gethostbyname.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										419
									
								
								ares/ares_gethostbyname.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,419 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "bitncmp.h"
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#undef WIN32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct host_query {
 | 
			
		||||
  /* Arguments passed to ares_gethostbyname() */
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  char *name;
 | 
			
		||||
  ares_host_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
  int family;
 | 
			
		||||
  const char *remaining_lookups;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct host_query *hquery);
 | 
			
		||||
static void host_callback(void *arg, int status, unsigned char *abuf,
 | 
			
		||||
                          int alen);
 | 
			
		||||
static void end_hquery(struct host_query *hquery, int status,
 | 
			
		||||
                       struct hostent *host);
 | 
			
		||||
static int fake_hostent(const char *name, int family, ares_host_callback callback,
 | 
			
		||||
                        void *arg);
 | 
			
		||||
static int file_lookup(const char *name, int family, struct hostent **host);
 | 
			
		||||
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort);
 | 
			
		||||
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort);
 | 
			
		||||
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort);
 | 
			
		||||
static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort);
 | 
			
		||||
 | 
			
		||||
void ares_gethostbyname(ares_channel channel, const char *name, int family,
 | 
			
		||||
                        ares_host_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct host_query *hquery;
 | 
			
		||||
 | 
			
		||||
  /* Right now we only know how to look up Internet addresses. */
 | 
			
		||||
  if (family != AF_INET && family != AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOTIMP, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (fake_hostent(name, family, callback, arg))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* Allocate and fill in the host query structure. */
 | 
			
		||||
  hquery = malloc(sizeof(struct host_query));
 | 
			
		||||
  if (!hquery)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  hquery->channel = channel;
 | 
			
		||||
  hquery->name = strdup(name);
 | 
			
		||||
  hquery->family = family;
 | 
			
		||||
  if (!hquery->name)
 | 
			
		||||
    {
 | 
			
		||||
      free(hquery);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  hquery->callback = callback;
 | 
			
		||||
  hquery->arg = arg;
 | 
			
		||||
  hquery->remaining_lookups = channel->lookups;
 | 
			
		||||
 | 
			
		||||
  /* Start performing lookups according to channel->lookups. */
 | 
			
		||||
  next_lookup(hquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct host_query *hquery)
 | 
			
		||||
{
 | 
			
		||||
  int status;
 | 
			
		||||
  const char *p;
 | 
			
		||||
  struct hostent *host;
 | 
			
		||||
 | 
			
		||||
  for (p = hquery->remaining_lookups; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      switch (*p)
 | 
			
		||||
        {
 | 
			
		||||
        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
 | 
			
		||||
            ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
 | 
			
		||||
                        hquery);
 | 
			
		||||
          return;
 | 
			
		||||
 | 
			
		||||
        case 'f':
 | 
			
		||||
          /* Host file lookup */
 | 
			
		||||
          status = file_lookup(hquery->name, hquery->family, &host);
 | 
			
		||||
          if (status != ARES_ENOTFOUND)
 | 
			
		||||
            {
 | 
			
		||||
              end_hquery(hquery, status, host);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  end_hquery(hquery, ARES_ENOTFOUND, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void host_callback(void *arg, int status, unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct host_query *hquery = (struct host_query *) arg;
 | 
			
		||||
  ares_channel channel = hquery->channel;
 | 
			
		||||
  struct hostent *host;
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (hquery->family == AF_INET)
 | 
			
		||||
        {
 | 
			
		||||
          status = ares_parse_a_reply(abuf, alen, &host);
 | 
			
		||||
          if (host && channel->nsort)
 | 
			
		||||
            sort_addresses(host, channel->sortlist, channel->nsort);
 | 
			
		||||
        }
 | 
			
		||||
      else if (hquery->family == AF_INET6)
 | 
			
		||||
        {
 | 
			
		||||
          status = ares_parse_aaaa_reply(abuf, alen, &host);
 | 
			
		||||
          if (host && channel->nsort)
 | 
			
		||||
            sort6_addresses(host, channel->sortlist, channel->nsort);
 | 
			
		||||
        }
 | 
			
		||||
      end_hquery(hquery, status, host);
 | 
			
		||||
    }
 | 
			
		||||
  else if (status == ARES_ENODATA && hquery->family == AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      /* There was no AAAA. Now lookup an A */
 | 
			
		||||
      hquery->family = AF_INET;
 | 
			
		||||
      ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
 | 
			
		||||
                  hquery);
 | 
			
		||||
    }
 | 
			
		||||
  else if (status == ARES_EDESTRUCTION)
 | 
			
		||||
    end_hquery(hquery, status, NULL);
 | 
			
		||||
  else
 | 
			
		||||
    next_lookup(hquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void end_hquery(struct host_query *hquery, int status,
 | 
			
		||||
                       struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  hquery->callback(hquery->arg, status, host);
 | 
			
		||||
  if (host)
 | 
			
		||||
    ares_free_hostent(host);
 | 
			
		||||
  free(hquery->name);
 | 
			
		||||
  free(hquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If the name looks like an IP address, fake up a host entry, end the
 | 
			
		||||
 * query immediately, and return true.  Otherwise return false.
 | 
			
		||||
 */
 | 
			
		||||
static int fake_hostent(const char *name, int family, ares_host_callback callback,
 | 
			
		||||
                        void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct hostent hostent;
 | 
			
		||||
  char *aliases[1] = { NULL };
 | 
			
		||||
  char *addrs[2];
 | 
			
		||||
  int result = 0;
 | 
			
		||||
  struct in_addr in;
 | 
			
		||||
  struct in6_addr in6;
 | 
			
		||||
 | 
			
		||||
  if (family == AF_INET)
 | 
			
		||||
    result = ((in.s_addr = inet_addr(name)) == INADDR_NONE ? 0 : 1);
 | 
			
		||||
  else if (family == AF_INET6)
 | 
			
		||||
    result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1);
 | 
			
		||||
 | 
			
		||||
  if (!result)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (family == AF_INET)
 | 
			
		||||
    {
 | 
			
		||||
      hostent.h_length = sizeof(struct in_addr);
 | 
			
		||||
      addrs[0] = (char *)∈
 | 
			
		||||
    }
 | 
			
		||||
  else if (family == AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      hostent.h_length = sizeof(struct in6_addr);
 | 
			
		||||
      addrs[0] = (char *)&in6;
 | 
			
		||||
    }
 | 
			
		||||
  /* Duplicate the name, to avoid a constness violation. */
 | 
			
		||||
  hostent.h_name = strdup(name);
 | 
			
		||||
  if (!hostent.h_name)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL);
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Fill in the rest of the host structure and terminate the query. */
 | 
			
		||||
  addrs[1] = NULL;
 | 
			
		||||
  hostent.h_aliases = aliases;
 | 
			
		||||
  hostent.h_addrtype = family;
 | 
			
		||||
  hostent.h_addr_list = addrs;
 | 
			
		||||
  callback(arg, ARES_SUCCESS, &hostent);
 | 
			
		||||
 | 
			
		||||
  free((char *)(hostent.h_name));
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int file_lookup(const char *name, int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  FILE *fp;
 | 
			
		||||
  char **alias;
 | 
			
		||||
  int status;
 | 
			
		||||
  int error;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
  char PATH_HOSTS[MAX_PATH];
 | 
			
		||||
  if (IS_NT()) {
 | 
			
		||||
    char tmp[MAX_PATH];
 | 
			
		||||
    HKEY hkeyHosts;
 | 
			
		||||
 | 
			
		||||
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
 | 
			
		||||
        == ERROR_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      DWORD dwLength = MAX_PATH;
 | 
			
		||||
      RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
 | 
			
		||||
                      &dwLength);
 | 
			
		||||
      ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
 | 
			
		||||
      RegCloseKey(hkeyHosts);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
 | 
			
		||||
 | 
			
		||||
  strcat(PATH_HOSTS, WIN_PATH_HOSTS);
 | 
			
		||||
 | 
			
		||||
#elif defined(WATT32)
 | 
			
		||||
  extern const char *_w32_GetHostsFile (void);
 | 
			
		||||
  const char *PATH_HOSTS = _w32_GetHostsFile();
 | 
			
		||||
 | 
			
		||||
  if (!PATH_HOSTS)
 | 
			
		||||
    return ARES_ENOTFOUND;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  fp = fopen(PATH_HOSTS, "r");
 | 
			
		||||
  if (!fp)
 | 
			
		||||
    {
 | 
			
		||||
      error = ERRNO;
 | 
			
		||||
      switch(error)
 | 
			
		||||
        {
 | 
			
		||||
        case ENOENT:
 | 
			
		||||
        case ESRCH:
 | 
			
		||||
          return ARES_ENOTFOUND;
 | 
			
		||||
        default:
 | 
			
		||||
          DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
 | 
			
		||||
                         error, strerror(error)));
 | 
			
		||||
          DEBUGF(fprintf(stderr, "Error opening file: %s\n",
 | 
			
		||||
                         PATH_HOSTS));
 | 
			
		||||
          *host = NULL;
 | 
			
		||||
          return ARES_EFILE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (strcasecmp((*host)->h_name, name) == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      for (alias = (*host)->h_aliases; *alias; alias++)
 | 
			
		||||
        {
 | 
			
		||||
          if (strcasecmp(*alias, name) == 0)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      if (*alias)
 | 
			
		||||
        break;
 | 
			
		||||
      ares_free_hostent(*host);
 | 
			
		||||
    }
 | 
			
		||||
  fclose(fp);
 | 
			
		||||
  if (status == ARES_EOF)
 | 
			
		||||
    status = ARES_ENOTFOUND;
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    *host = NULL;
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort)
 | 
			
		||||
{
 | 
			
		||||
  struct in_addr a1, a2;
 | 
			
		||||
  int i1, i2, ind1, ind2;
 | 
			
		||||
 | 
			
		||||
  /* This is a simple insertion sort, not optimized at all.  i1 walks
 | 
			
		||||
   * through the address list, with the loop invariant that everything
 | 
			
		||||
   * to the left of i1 is sorted.  In the loop body, the value at i1 is moved
 | 
			
		||||
   * back through the list (via i2) until it is in sorted order.
 | 
			
		||||
   */
 | 
			
		||||
  for (i1 = 0; host->h_addr_list[i1]; i1++)
 | 
			
		||||
    {
 | 
			
		||||
      memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
 | 
			
		||||
      ind1 = get_address_index(&a1, sortlist, nsort);
 | 
			
		||||
      for (i2 = i1 - 1; i2 >= 0; i2--)
 | 
			
		||||
        {
 | 
			
		||||
          memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
 | 
			
		||||
          ind2 = get_address_index(&a2, sortlist, nsort);
 | 
			
		||||
          if (ind2 <= ind1)
 | 
			
		||||
            break;
 | 
			
		||||
          memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
 | 
			
		||||
        }
 | 
			
		||||
      memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Find the first entry in sortlist which matches addr.  Return nsort
 | 
			
		||||
 * if none of them match.
 | 
			
		||||
 */
 | 
			
		||||
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nsort; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (sortlist[i].family != AF_INET)
 | 
			
		||||
        continue;
 | 
			
		||||
      if (sortlist[i].type == PATTERN_MASK)
 | 
			
		||||
        {
 | 
			
		||||
          if ((addr->s_addr & sortlist[i].mask.addr.addr4.s_addr)
 | 
			
		||||
              == sortlist[i].addr.addr4.s_addr)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addr.addr4.s_addr,
 | 
			
		||||
                            sortlist[i].mask.bits))
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort)
 | 
			
		||||
{
 | 
			
		||||
  struct in6_addr a1, a2;
 | 
			
		||||
  int i1, i2, ind1, ind2;
 | 
			
		||||
 | 
			
		||||
  /* This is a simple insertion sort, not optimized at all.  i1 walks
 | 
			
		||||
   * through the address list, with the loop invariant that everything
 | 
			
		||||
   * to the left of i1 is sorted.  In the loop body, the value at i1 is moved
 | 
			
		||||
   * back through the list (via i2) until it is in sorted order.
 | 
			
		||||
   */
 | 
			
		||||
  for (i1 = 0; host->h_addr_list[i1]; i1++)
 | 
			
		||||
    {
 | 
			
		||||
      memcpy(&a1, host->h_addr_list[i1], sizeof(struct in6_addr));
 | 
			
		||||
      ind1 = get6_address_index(&a1, sortlist, nsort);
 | 
			
		||||
      for (i2 = i1 - 1; i2 >= 0; i2--)
 | 
			
		||||
        {
 | 
			
		||||
          memcpy(&a2, host->h_addr_list[i2], sizeof(struct in6_addr));
 | 
			
		||||
          ind2 = get6_address_index(&a2, sortlist, nsort);
 | 
			
		||||
          if (ind2 <= ind1)
 | 
			
		||||
            break;
 | 
			
		||||
          memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in6_addr));
 | 
			
		||||
        }
 | 
			
		||||
      memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in6_addr));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Find the first entry in sortlist which matches addr.  Return nsort
 | 
			
		||||
 * if none of them match.
 | 
			
		||||
 */
 | 
			
		||||
static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nsort; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (sortlist[i].family != AF_INET6)
 | 
			
		||||
        continue;
 | 
			
		||||
        if (!ares_bitncmp(&addr->s6_addr, &sortlist[i].addr.addr6.s6_addr, sortlist[i].mask.bits))
 | 
			
		||||
          break;
 | 
			
		||||
    }
 | 
			
		||||
  return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										145
									
								
								ares/ares_getnameinfo.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								ares/ares_getnameinfo.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,145 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 2005 by Dominick Meglio.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETNAMEINFO 3 "16 May 2005"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	char *\fInode\fP, char *\fIservice\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP,
 | 
			
		||||
.B 	socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP,
 | 
			
		||||
.B 	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_getnameinfo
 | 
			
		||||
function is defined for protocol-independent address translation. The function
 | 
			
		||||
is a combination of \fIares_gethostbyaddr(3)\fP and \fIgetservbyport(3)\fP. The function will
 | 
			
		||||
translate the address either by executing a host query on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel 
 | 
			
		||||
or it will attempt to resolve it locally if possible.
 | 
			
		||||
The parameters
 | 
			
		||||
.I sa
 | 
			
		||||
and
 | 
			
		||||
.I len
 | 
			
		||||
give the address as a sockaddr structure, and
 | 
			
		||||
.I flags
 | 
			
		||||
gives the options that the function will use.  Valid flags are listed below:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NOFQDN
 | 
			
		||||
Only the nodename portion of the FQDN is returned for local hosts.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NUMERICHOST
 | 
			
		||||
The numeric form of the hostname is returned rather than the name.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NAMEREQD
 | 
			
		||||
An error is returned if the hostname cannot be found in the DNS.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NUMERICSERV
 | 
			
		||||
The numeric form of the service is returned rather than the name.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_TCP
 | 
			
		||||
The service name is to be looked up for the TCP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_UDP
 | 
			
		||||
The service name is to be looked up for the UDP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_SCTP
 | 
			
		||||
The service name is to be looked up for the SCTP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_DCCP
 | 
			
		||||
The service name is to be looked up for the DCCP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NUMERICSCOPE
 | 
			
		||||
The numeric form of the scope ID is returned rather than the name.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_LOOKUPHOST
 | 
			
		||||
A hostname lookup is being requested.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_LOOKUPSERVICE
 | 
			
		||||
A service name lookup is being requested.
 | 
			
		||||
.PP
 | 
			
		||||
When the query
 | 
			
		||||
is complete or has 
 | 
			
		||||
failed, the ares library will invoke \fIcallback\fP.  Completion or failure of 
 | 
			
		||||
the query may happen immediately, or may happen during a later call to
 | 
			
		||||
\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_getnameinfo
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query succeeded and, if not, how it failed.  It
 | 
			
		||||
may have any of the following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The host lookup completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
The ares library does not know how to look up addresses of type
 | 
			
		||||
.IR family .
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
The address
 | 
			
		||||
.I addr
 | 
			
		||||
was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EDESTRUCTION
 | 
			
		||||
The name service channel
 | 
			
		||||
.I channel
 | 
			
		||||
is being destroyed; the query will not be completed.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADFLAGS
 | 
			
		||||
The
 | 
			
		||||
.I flags
 | 
			
		||||
parameter contains an illegal value.
 | 
			
		||||
.PP
 | 
			
		||||
On successful completion of the query, the callback argument
 | 
			
		||||
.I node
 | 
			
		||||
contains a string representing the hostname (assuming 
 | 
			
		||||
.B ARES_NI_LOOKUPHOST
 | 
			
		||||
was specified). Additionally, 
 | 
			
		||||
.I service
 | 
			
		||||
contains a string representing the service name (assuming
 | 
			
		||||
.B ARES_NI_LOOKUPSERVICE
 | 
			
		||||
was specified).
 | 
			
		||||
If the query did not complete successfully, or one of the values
 | 
			
		||||
was not requested, 
 | 
			
		||||
.I node
 | 
			
		||||
or
 | 
			
		||||
.I service
 | 
			
		||||
will be 
 | 
			
		||||
.BR NULL .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3),
 | 
			
		||||
.BR ares_getaddrinfo (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
.br
 | 
			
		||||
Copyright 2005 by Dominick Meglio.
 | 
			
		||||
							
								
								
									
										390
									
								
								ares/ares_getnameinfo.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										390
									
								
								ares/ares_getnameinfo.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,390 @@
 | 
			
		||||
/* $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"
 | 
			
		||||
 | 
			
		||||
#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((unsigned short)(port & 0xffff),
 | 
			
		||||
                               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((unsigned short)(port & 0xffff),
 | 
			
		||||
                                   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, (char *)(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", (unsigned int)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)
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_IF_INDEXTONAME
 | 
			
		||||
  int is_ll, is_mcll;
 | 
			
		||||
#endif
 | 
			
		||||
  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
 | 
			
		||||
  is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
 | 
			
		||||
  is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr);
 | 
			
		||||
  if ((flags & ARES_NI_NUMERICSCOPE) ||
 | 
			
		||||
      (!is_ll && !is_mcll))
 | 
			
		||||
    {
 | 
			
		||||
       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;
 | 
			
		||||
  int lo1, lo2;
 | 
			
		||||
  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)
 | 
			
		||||
    {
 | 
			
		||||
      lo1 = tolower(*c1);
 | 
			
		||||
      lo2 = tolower(*c2);
 | 
			
		||||
      if (lo1 != lo2)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          c1++;
 | 
			
		||||
          c2++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  if (c2 == c1 && c2 == NULL)
 | 
			
		||||
    return (char *)c1_begin;
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										123
									
								
								ares/ares_getopt.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								ares/ares_getopt.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Original file name getopt.c  Initial import into the c-ares source tree
 | 
			
		||||
 * on 2007-04-11.  Lifted from version 5.2 of the 'Open Mash' project with
 | 
			
		||||
 * the modified BSD license, BSD license without the advertising clause.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id$
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * getopt.c --
 | 
			
		||||
 *
 | 
			
		||||
 *      Standard UNIX getopt function.  Code is from BSD.
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 1987-2001 The Regents of the University of California.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * A. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * B. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * C. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *    contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *    software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
 | 
			
		||||
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
 * POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* #if !defined(lint)
 | 
			
		||||
 * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
 | 
			
		||||
 * #endif
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares_getopt.h"
 | 
			
		||||
 | 
			
		||||
int   opterr = 1,     /* if error message should be printed */
 | 
			
		||||
      optind = 1,     /* index into parent argv vector */
 | 
			
		||||
      optopt,         /* character checked for validity */
 | 
			
		||||
      optreset;       /* reset getopt */
 | 
			
		||||
char  *optarg;        /* argument associated with option */
 | 
			
		||||
 | 
			
		||||
#define  BADCH   (int)'?'
 | 
			
		||||
#define  BADARG  (int)':'
 | 
			
		||||
#define  EMSG    (char *)""
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ares_getopt --
 | 
			
		||||
 *    Parse argc/argv argument vector.
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
ares_getopt(int nargc, char * const nargv[], const char *ostr)
 | 
			
		||||
{
 | 
			
		||||
    static char *place = EMSG;                /* option letter processing */
 | 
			
		||||
    char *oli;                                /* option letter list index */
 | 
			
		||||
 | 
			
		||||
    if (optreset || !*place) {                /* update scanning pointer */
 | 
			
		||||
        optreset = 0;
 | 
			
		||||
        if (optind >= nargc || *(place = nargv[optind]) != '-') {
 | 
			
		||||
            place = EMSG;
 | 
			
		||||
            return (EOF);
 | 
			
		||||
        }
 | 
			
		||||
        if (place[1] && *++place == '-') {    /* found "--" */
 | 
			
		||||
            ++optind;
 | 
			
		||||
            place = EMSG;
 | 
			
		||||
            return (EOF);
 | 
			
		||||
        }
 | 
			
		||||
    }                                         /* option letter okay? */
 | 
			
		||||
    if ((optopt = (int)*place++) == (int)':' ||
 | 
			
		||||
        !(oli = strchr(ostr, optopt))) {
 | 
			
		||||
        /*
 | 
			
		||||
         * if the user didn't specify '-' as an option,
 | 
			
		||||
         * assume it means EOF.
 | 
			
		||||
         */
 | 
			
		||||
        if (optopt == (int)'-')
 | 
			
		||||
            return (EOF);
 | 
			
		||||
        if (!*place)
 | 
			
		||||
            ++optind;
 | 
			
		||||
        if (opterr && *ostr != ':')
 | 
			
		||||
            (void)fprintf(stderr,
 | 
			
		||||
                "%s: illegal option -- %c\n", __FILE__, optopt);
 | 
			
		||||
        return (BADCH);
 | 
			
		||||
    }
 | 
			
		||||
    if (*++oli != ':') {                      /* don't need argument */
 | 
			
		||||
        optarg = NULL;
 | 
			
		||||
        if (!*place)
 | 
			
		||||
            ++optind;
 | 
			
		||||
    }
 | 
			
		||||
    else {                                    /* need an argument */
 | 
			
		||||
        if (*place)                           /* no white space */
 | 
			
		||||
            optarg = place;
 | 
			
		||||
        else if (nargc <= ++optind) {         /* no arg */
 | 
			
		||||
            place = EMSG;
 | 
			
		||||
            if (*ostr == ':')
 | 
			
		||||
                return (BADARG);
 | 
			
		||||
            if (opterr)
 | 
			
		||||
                (void)fprintf(stderr,
 | 
			
		||||
                    "%s: option requires an argument -- %c\n",
 | 
			
		||||
                    __FILE__, optopt);
 | 
			
		||||
            return (BADCH);
 | 
			
		||||
        }
 | 
			
		||||
         else                                 /* white space */
 | 
			
		||||
            optarg = nargv[optind];
 | 
			
		||||
        place = EMSG;
 | 
			
		||||
        ++optind;
 | 
			
		||||
    }
 | 
			
		||||
    return (optopt);                          /* dump back option letter */
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								ares/ares_getopt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ares/ares_getopt.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#ifndef ARES_GETOPT_H
 | 
			
		||||
#define ARES_GETOPT_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1987-2001 The Regents of the University of California.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * A. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * B. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * C. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *    contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *    software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
 | 
			
		||||
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
 * POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int ares_getopt(int nargc, char * const nargv[], const char *ostr);
 | 
			
		||||
 | 
			
		||||
extern char *optarg;
 | 
			
		||||
extern int optind;
 | 
			
		||||
extern int opterr;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* ARES_GETOPT_H */
 | 
			
		||||
							
								
								
									
										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)
 | 
			
		||||
							
								
								
									
										69
									
								
								ares/ares_getsock.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								ares/ares_getsock.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2005 - 2007, 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"
 | 
			
		||||
 | 
			
		||||
#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;
 | 
			
		||||
  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;
 | 
			
		||||
 | 
			
		||||
  for (i = 0;
 | 
			
		||||
       (i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM);
 | 
			
		||||
       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);
 | 
			
		||||
 | 
			
		||||
         if (server->qhead)
 | 
			
		||||
           /* then the tcp socket is also writable! */
 | 
			
		||||
           bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);
 | 
			
		||||
 | 
			
		||||
         sockindex++;
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
  return bitmap;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										179
									
								
								ares/ares_init.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								ares/ares_init.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,179 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_INIT 3 "7 December 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_init, ares_init_options \- Initialize a resolver channel
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_init(ares_channel *\fIchannel\fP)
 | 
			
		||||
.B int ares_init_options(ares_channel *\fIchannel\fP,
 | 
			
		||||
.B 	struct ares_options *\fIoptions\fP, int \fIoptmask\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B cc file.c -lcares
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_init\fP function initializes a communications channel for name
 | 
			
		||||
service lookups.  If it returns successfully, \fBares_init\fP will set the
 | 
			
		||||
variable pointed to by \fIchannel\fP to a handle used to identify the name
 | 
			
		||||
service channel.  The caller should invoke
 | 
			
		||||
.BR ares_destroy (3)
 | 
			
		||||
on the handle when the channel is no longer needed.
 | 
			
		||||
.PP
 | 
			
		||||
The \fBares_init_options\fP function also initializes a name service channel,
 | 
			
		||||
with additional options useful for applications requiring more control over
 | 
			
		||||
name service configuration. The \fIoptmask\fP parameter specifies which fields
 | 
			
		||||
in the structure pointed to by \fIoptions\fP are set, as follows:
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_FLAGS
 | 
			
		||||
.B int \fIflags\fP;
 | 
			
		||||
.br
 | 
			
		||||
Flags controlling the behavior of the resolver.  See below for a
 | 
			
		||||
description of possible flag values.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_TIMEOUT
 | 
			
		||||
.B int \fItimeout\fP;
 | 
			
		||||
.br
 | 
			
		||||
The number of seconds each name server is given to respond to a query
 | 
			
		||||
on the first try.  (After the first try, the timeout algorithm becomes
 | 
			
		||||
more complicated, but scales linearly with the value of
 | 
			
		||||
\fItimeout\fP.)  The default is five seconds.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_TRIES
 | 
			
		||||
.B int \fItries\fP;
 | 
			
		||||
.br
 | 
			
		||||
The number of tries the resolver will try contacting each name server
 | 
			
		||||
before giving up.  The default is four tries.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_NDOTS
 | 
			
		||||
.B int \fIndots\fP;
 | 
			
		||||
.br
 | 
			
		||||
The number of dots which must be present in a domain name for it to be
 | 
			
		||||
queried for "as is" prior to querying for it with the default domain
 | 
			
		||||
extensions appended.  The default value is 1 unless set otherwise by
 | 
			
		||||
resolv.conf or the RES_OPTIONS environment variable.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_PORT
 | 
			
		||||
.B unsigned short \fIport\fP;
 | 
			
		||||
.br
 | 
			
		||||
The port to use for queries (both TCP and UDP), in network byte order.
 | 
			
		||||
The default value is 53 (in network byte order), the standard name
 | 
			
		||||
service port.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_SERVERS
 | 
			
		||||
.B struct in_addr *\fIservers\fP;
 | 
			
		||||
.br
 | 
			
		||||
.B int \fInservers\fP;
 | 
			
		||||
.br
 | 
			
		||||
The list of servers to contact, instead of the servers specified in
 | 
			
		||||
resolv.conf or the local named.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_DOMAINS
 | 
			
		||||
.B char **\fIdomains\fP;
 | 
			
		||||
.br
 | 
			
		||||
.B int \fIndomains\fP;
 | 
			
		||||
.br
 | 
			
		||||
The domains to search, instead of the domains specified in resolv.conf
 | 
			
		||||
or the domain derived from the kernel hostname variable.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_LOOKUPS
 | 
			
		||||
.B char *\fIlookups\fP;
 | 
			
		||||
.br
 | 
			
		||||
The lookups to perform for host queries.  
 | 
			
		||||
.I lookups
 | 
			
		||||
should be set to a string of the characters "b" or "f", where "b"
 | 
			
		||||
indicates a DNS lookup and "f" indicates a lookup in the hosts file.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_SOCK_STATE_CB
 | 
			
		||||
.B void (*\fIsock_state_cb\fP)(void *data, int s, int read, int write);
 | 
			
		||||
.br
 | 
			
		||||
.B void *\fIsock_state_cb_data\fP;
 | 
			
		||||
.br
 | 
			
		||||
A callback function to be invoked when a socket changes state.
 | 
			
		||||
.I s
 | 
			
		||||
will be passed the socket whose state has changed;
 | 
			
		||||
.I read
 | 
			
		||||
will be set to true if the socket should listen for read events, and
 | 
			
		||||
.I write
 | 
			
		||||
will be set to true if the socket should listen for write events.
 | 
			
		||||
The value of
 | 
			
		||||
.I sock_state_cb_data
 | 
			
		||||
will be passed as the
 | 
			
		||||
.I data
 | 
			
		||||
argument.
 | 
			
		||||
.PP
 | 
			
		||||
The
 | 
			
		||||
.I flags
 | 
			
		||||
field should be the bitwise or of some subset of the following values:
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_USEVC
 | 
			
		||||
Always use TCP queries (the "virtual circuit") instead of UDP
 | 
			
		||||
queries.  Normally, TCP is only used if a UDP query yields a truncated
 | 
			
		||||
result.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_PRIMARY
 | 
			
		||||
Only query the first server in the list of servers to query.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_IGNTC
 | 
			
		||||
If a truncated response to a UDP query is received, do not fall back
 | 
			
		||||
to TCP; simply continue on with the truncated response.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NORECURSE
 | 
			
		||||
Do not set the "recursion desired" bit on outgoing queries, so that the name
 | 
			
		||||
server being contacted will not try to fetch the answer from other servers if
 | 
			
		||||
it doesn't know the answer locally. Be aware that ares will not do the
 | 
			
		||||
recursion for you.  Recursion must be handled by the application calling ares
 | 
			
		||||
if \fIARES_FLAG_NORECURSE\fP is set.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_STAYOPEN
 | 
			
		||||
Do not close communciations sockets when the number of active queries
 | 
			
		||||
drops to zero.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NOSEARCH
 | 
			
		||||
Do not use the default search domains; only query hostnames as-is or
 | 
			
		||||
as aliases.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NOALIASES
 | 
			
		||||
Do not honor the HOSTALIASES environment variable, which normally
 | 
			
		||||
specifies a file of hostname translations.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
Do not discard responses with the SERVFAIL, NOTIMP, or REFUSED
 | 
			
		||||
response code or responses whose questions don't match the questions
 | 
			
		||||
in the request.  Primarily useful for writing clients which might be
 | 
			
		||||
used to test or debug name servers.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.I ares_init
 | 
			
		||||
or
 | 
			
		||||
.I ares_init_options
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 14
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Initialization succeeded.
 | 
			
		||||
.TP 14
 | 
			
		||||
.B ARES_EFILE
 | 
			
		||||
A configuration file could not be read.
 | 
			
		||||
.TP 14
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
The process's available memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_destroy (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										1344
									
								
								ares/ares_init.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1344
									
								
								ares/ares_init.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2
									
								
								ares/ares_init_options.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								ares/ares_init_options.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
.so man3/ares_init.3
 | 
			
		||||
.\" $Id$
 | 
			
		||||
							
								
								
									
										81
									
								
								ares/ares_ipv6.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								ares/ares_ipv6.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ARES_IPV6_H
 | 
			
		||||
#define ARES_IPV6_H
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_PF_INET6
 | 
			
		||||
#define PF_INET6 AF_INET6
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRUCT_IN6_ADDR
 | 
			
		||||
struct in6_addr
 | 
			
		||||
{
 | 
			
		||||
  unsigned char s6_addr[16];
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRUCT_SOCKADDR_IN6
 | 
			
		||||
struct sockaddr_in6
 | 
			
		||||
{
 | 
			
		||||
  unsigned short  sin6_family;
 | 
			
		||||
  unsigned short  sin6_port;
 | 
			
		||||
  unsigned long   sin6_flowinfo;
 | 
			
		||||
  struct in6_addr sin6_addr;
 | 
			
		||||
  unsigned int    sin6_scope_id;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRUCT_ADDRINFO
 | 
			
		||||
struct addrinfo 
 | 
			
		||||
{
 | 
			
		||||
  int              ai_flags;
 | 
			
		||||
  int              ai_family;
 | 
			
		||||
  int              ai_socktype;
 | 
			
		||||
  int              ai_protocol;
 | 
			
		||||
  socklen_t        ai_addrlen;   /* Follow rfc3493 struct addrinfo */
 | 
			
		||||
  char            *ai_canonname;
 | 
			
		||||
  struct sockaddr *ai_addr;
 | 
			
		||||
  struct addrinfo *ai_next;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef NS_IN6ADDRSZ
 | 
			
		||||
#if SIZEOF_STRUCT_IN6_ADDR == 0
 | 
			
		||||
/* We cannot have it set to zero, so we pick a fixed value here */
 | 
			
		||||
#define NS_IN6ADDRSZ 16
 | 
			
		||||
#else
 | 
			
		||||
#define NS_IN6ADDRSZ SIZEOF_STRUCT_IN6_ADDR
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef NS_INADDRSZ
 | 
			
		||||
#define NS_INADDRSZ SIZEOF_STRUCT_IN_ADDR
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef NS_INT16SZ
 | 
			
		||||
#define NS_INT16SZ 2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef IF_NAMESIZE
 | 
			
		||||
#ifdef IFNAMSIZ
 | 
			
		||||
#define IF_NAMESIZE IFNAMSIZ
 | 
			
		||||
#else
 | 
			
		||||
#define IF_NAMESIZE 256
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* ARES_IPV6_H */
 | 
			
		||||
							
								
								
									
										76
									
								
								ares/ares_mkquery.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								ares/ares_mkquery.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998, 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_MKQUERY 3 "4 January 2000"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_mkquery \- Compose a single-question DNS query buffer
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
 | 
			
		||||
.B	unsigned short \fIid\fP, int \fIrd\fP, char **\fIbuf\fP,
 | 
			
		||||
.B	int *\fIbuflen\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_mkquery
 | 
			
		||||
function composes a DNS query with a single question.
 | 
			
		||||
The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the query name as a NUL-terminated C string of period-separated
 | 
			
		||||
labels optionally ending with a period; periods and backslashes within
 | 
			
		||||
a label must be escaped with a backlash.  The parameters
 | 
			
		||||
.I dnsclass
 | 
			
		||||
and
 | 
			
		||||
.I type
 | 
			
		||||
give the class and type of the query using the values defined in
 | 
			
		||||
.BR <arpa/nameser.h> .
 | 
			
		||||
The parameter
 | 
			
		||||
.I id
 | 
			
		||||
gives a 16-bit identifier for the query.  The parameter
 | 
			
		||||
.I rd
 | 
			
		||||
should be nonzero if recursion is desired, zero if not.  The query
 | 
			
		||||
will be placed in an allocated buffer, a pointer to which will be
 | 
			
		||||
stored in the variable pointed to by
 | 
			
		||||
.IR buf ,
 | 
			
		||||
and the length of which will be stored in the variable pointed to by
 | 
			
		||||
.IR buflen .
 | 
			
		||||
It is the caller's responsibility to free this buffer using
 | 
			
		||||
\fIares_free_string(3)\fP when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_mkquery
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Construction of the DNS query succeeded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The query name
 | 
			
		||||
.I name
 | 
			
		||||
could not be encoded as a domain name, either because it contained a
 | 
			
		||||
zero-length label or because it contained a label of more than 63
 | 
			
		||||
characters.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_expand_name (3),
 | 
			
		||||
.BR ares_free_string (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998, 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										170
									
								
								ares/ares_mkquery.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								ares/ares_mkquery.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,170 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
/* Header format, from RFC 1035:
 | 
			
		||||
 *                                  1  1  1  1  1  1
 | 
			
		||||
 *    0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                      ID                       |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    QDCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    ANCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    NSCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    ARCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *
 | 
			
		||||
 * AA, TC, RA, and RCODE are only set in responses.  Brief description
 | 
			
		||||
 * of the remaining fields:
 | 
			
		||||
 *      ID      Identifier to match responses with queries
 | 
			
		||||
 *      QR      Query (0) or response (1)
 | 
			
		||||
 *      Opcode  For our purposes, always QUERY
 | 
			
		||||
 *      RD      Recursion desired
 | 
			
		||||
 *      Z       Reserved (zero)
 | 
			
		||||
 *      QDCOUNT Number of queries
 | 
			
		||||
 *      ANCOUNT Number of answers
 | 
			
		||||
 *      NSCOUNT Number of name server records
 | 
			
		||||
 *      ARCOUNT Number of additional records
 | 
			
		||||
 *
 | 
			
		||||
 * Question format, from RFC 1035:
 | 
			
		||||
 *                                  1  1  1  1  1  1
 | 
			
		||||
 *    0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                                               |
 | 
			
		||||
 *  /                     QNAME                     /
 | 
			
		||||
 *  /                                               /
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                     QTYPE                     |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                     QCLASS                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *
 | 
			
		||||
 * The query name is encoded as a series of labels, each represented
 | 
			
		||||
 * as a one-byte length (maximum 63) followed by the text of the
 | 
			
		||||
 * label.  The list is terminated by a label of length zero (which can
 | 
			
		||||
 * be thought of as the root domain).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
 | 
			
		||||
                 int rd, unsigned char **buf, int *buflen)
 | 
			
		||||
{
 | 
			
		||||
  int len;
 | 
			
		||||
  unsigned char *q;
 | 
			
		||||
  const char *p;
 | 
			
		||||
 | 
			
		||||
  /* Compute the length of the encoded name so we can check buflen.
 | 
			
		||||
   * Start counting at 1 for the zero-length label at the end. */
 | 
			
		||||
  len = 1;
 | 
			
		||||
  for (p = name; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      if (*p == '\\' && *(p + 1) != 0)
 | 
			
		||||
        p++;
 | 
			
		||||
      len++;
 | 
			
		||||
    }
 | 
			
		||||
  /* If there are n periods in the name, there are n + 1 labels, and
 | 
			
		||||
   * thus n + 1 length fields, unless the name is empty or ends with a
 | 
			
		||||
   * period.  So add 1 unless name is empty or ends with a period.
 | 
			
		||||
   */
 | 
			
		||||
  if (*name && *(p - 1) != '.')
 | 
			
		||||
    len++;
 | 
			
		||||
 | 
			
		||||
  *buflen = len + HFIXEDSZ + QFIXEDSZ;
 | 
			
		||||
  *buf = malloc(*buflen);
 | 
			
		||||
  if (!*buf)
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
 | 
			
		||||
  /* Set up the header. */
 | 
			
		||||
  q = *buf;
 | 
			
		||||
  memset(q, 0, HFIXEDSZ);
 | 
			
		||||
  DNS_HEADER_SET_QID(q, id);
 | 
			
		||||
  DNS_HEADER_SET_OPCODE(q, QUERY);
 | 
			
		||||
  if (rd) {
 | 
			
		||||
    DNS_HEADER_SET_RD(q, 1);
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    DNS_HEADER_SET_RD(q, 0);
 | 
			
		||||
  }
 | 
			
		||||
  DNS_HEADER_SET_QDCOUNT(q, 1);
 | 
			
		||||
 | 
			
		||||
  /* A name of "." is a screw case for the loop below, so adjust it. */
 | 
			
		||||
  if (strcmp(name, ".") == 0)
 | 
			
		||||
    name++;
 | 
			
		||||
 | 
			
		||||
  /* Start writing out the name after the header. */
 | 
			
		||||
  q += HFIXEDSZ;
 | 
			
		||||
  while (*name)
 | 
			
		||||
    {
 | 
			
		||||
      if (*name == '.')
 | 
			
		||||
        return ARES_EBADNAME;
 | 
			
		||||
 | 
			
		||||
      /* Count the number of bytes in this label. */
 | 
			
		||||
      len = 0;
 | 
			
		||||
      for (p = name; *p && *p != '.'; p++)
 | 
			
		||||
        {
 | 
			
		||||
          if (*p == '\\' && *(p + 1) != 0)
 | 
			
		||||
            p++;
 | 
			
		||||
          len++;
 | 
			
		||||
        }
 | 
			
		||||
      if (len > MAXLABEL)
 | 
			
		||||
        return ARES_EBADNAME;
 | 
			
		||||
 | 
			
		||||
      /* Encode the length and copy the data. */
 | 
			
		||||
      *q++ = (unsigned char)len;
 | 
			
		||||
      for (p = name; *p && *p != '.'; p++)
 | 
			
		||||
        {
 | 
			
		||||
          if (*p == '\\' && *(p + 1) != 0)
 | 
			
		||||
            p++;
 | 
			
		||||
          *q++ = *p;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      /* Go to the next label and repeat, unless we hit the end. */
 | 
			
		||||
      if (!*p)
 | 
			
		||||
        break;
 | 
			
		||||
      name = p + 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Add the zero-length label at the end. */
 | 
			
		||||
  *q++ = 0;
 | 
			
		||||
 | 
			
		||||
  /* Finish off the question with the type and class. */
 | 
			
		||||
  DNS_QUESTION_SET_TYPE(q, type);
 | 
			
		||||
  DNS_QUESTION_SET_CLASS(q, dnsclass);
 | 
			
		||||
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								ares/ares_parse_a_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ares/ares_parse_a_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_A_REPLY 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_a_reply \- Parse a reply to a DNS query of type A into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	struct hostent **\fIhost\fP);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_a_reply
 | 
			
		||||
function parses the response to a query of type A into a
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The result is stored in allocated
 | 
			
		||||
memory and a pointer to it stored into the variable pointed to by
 | 
			
		||||
.IR host .
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_a_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_gethostbyname (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										177
									
								
								ares/ares_parse_a_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								ares/ares_parse_a_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,177 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_a_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len, naddrs;
 | 
			
		||||
  int naliases;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char *hostname, *rr_name, *rr_data, **aliases;
 | 
			
		||||
  struct in_addr *addrs;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  *host = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  if (qdcount != 1)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return status;
 | 
			
		||||
  if (aptr + len + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      return ARES_EBADRESP;
 | 
			
		||||
    }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Allocate addresses and aliases; ancount gives an upper bound for both. */
 | 
			
		||||
  addrs = malloc(ancount * sizeof(struct in_addr));
 | 
			
		||||
  if (!addrs)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  aliases = malloc((ancount + 1) * sizeof(char *));
 | 
			
		||||
  if (!aliases)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      free(addrs);
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  naddrs = 0;
 | 
			
		||||
  naliases = 0;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  for (i = 0; i < (int)ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR up to the data field. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        break;
 | 
			
		||||
      aptr += len;
 | 
			
		||||
      if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      rr_type = DNS_RR_TYPE(aptr);
 | 
			
		||||
      rr_class = DNS_RR_CLASS(aptr);
 | 
			
		||||
      rr_len = DNS_RR_LEN(aptr);
 | 
			
		||||
      aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_A
 | 
			
		||||
          && rr_len == sizeof(struct in_addr)
 | 
			
		||||
          && strcasecmp(rr_name, hostname) == 0)
 | 
			
		||||
        {
 | 
			
		||||
          memcpy(&addrs[naddrs], aptr, sizeof(struct in_addr));
 | 
			
		||||
          naddrs++;
 | 
			
		||||
          status = ARES_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_CNAME)
 | 
			
		||||
        {
 | 
			
		||||
          /* Record the RR name as an alias. */
 | 
			
		||||
          aliases[naliases] = rr_name;
 | 
			
		||||
          naliases++;
 | 
			
		||||
 | 
			
		||||
          /* Decode the RR data and replace the hostname with it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          hostname = rr_data;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        free(rr_name);
 | 
			
		||||
 | 
			
		||||
      aptr += rr_len;
 | 
			
		||||
      if (aptr > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS && naddrs == 0)
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* We got our answer.  Allocate memory to build the host entry. */
 | 
			
		||||
      aliases[naliases] = NULL;
 | 
			
		||||
      hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
      if (hostent)
 | 
			
		||||
        {
 | 
			
		||||
          hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
 | 
			
		||||
          if (hostent->h_addr_list)
 | 
			
		||||
            {
 | 
			
		||||
              /* Fill in the hostent and return successfully. */
 | 
			
		||||
              hostent->h_name = hostname;
 | 
			
		||||
              hostent->h_aliases = aliases;
 | 
			
		||||
              hostent->h_addrtype = AF_INET;
 | 
			
		||||
              hostent->h_length = sizeof(struct in_addr);
 | 
			
		||||
              for (i = 0; i < naddrs; i++)
 | 
			
		||||
                hostent->h_addr_list[i] = (char *) &addrs[i];
 | 
			
		||||
              hostent->h_addr_list[naddrs] = NULL;
 | 
			
		||||
              *host = hostent;
 | 
			
		||||
              return ARES_SUCCESS;
 | 
			
		||||
            }
 | 
			
		||||
          free(hostent);
 | 
			
		||||
        }
 | 
			
		||||
      status = ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  for (i = 0; i < naliases; i++)
 | 
			
		||||
    free(aliases[i]);
 | 
			
		||||
  free(aliases);
 | 
			
		||||
  free(addrs);
 | 
			
		||||
  free(hostname);
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								ares/ares_parse_aaaa_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ares/ares_parse_aaaa_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 2005 by Dominick Meglio.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_AAAA_REPLY 3 "10 March 2005"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_aaaa_reply \- Parse a reply to a DNS query of type AAAA into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	struct hostent **\fIhost\fP);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_aaaa_reply
 | 
			
		||||
function parses the response to a query of type AAAA into a
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The result is stored in allocated
 | 
			
		||||
memory and a pointer to it stored into the variable pointed to by
 | 
			
		||||
.IR host .
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_aaaa_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_gethostbyname (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
.br
 | 
			
		||||
Copyright 2005 by Dominick Meglio.
 | 
			
		||||
							
								
								
									
										180
									
								
								ares/ares_parse_aaaa_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								ares/ares_parse_aaaa_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,180 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 2005 Dominick Meglio
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len, naddrs;
 | 
			
		||||
  int naliases;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char *hostname, *rr_name, *rr_data, **aliases;
 | 
			
		||||
  struct in6_addr *addrs;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  *host = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  if (qdcount != 1)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return status;
 | 
			
		||||
  if (aptr + len + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      return ARES_EBADRESP;
 | 
			
		||||
    }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Allocate addresses and aliases; ancount gives an upper bound for both. */
 | 
			
		||||
  addrs = malloc(ancount * sizeof(struct in6_addr));
 | 
			
		||||
  if (!addrs)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  aliases = malloc((ancount + 1) * sizeof(char *));
 | 
			
		||||
  if (!aliases)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      free(addrs);
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  naddrs = 0;
 | 
			
		||||
  naliases = 0;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  for (i = 0; i < (int)ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR up to the data field. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        break;
 | 
			
		||||
      aptr += len;
 | 
			
		||||
      if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      rr_type = DNS_RR_TYPE(aptr);
 | 
			
		||||
      rr_class = DNS_RR_CLASS(aptr);
 | 
			
		||||
      rr_len = DNS_RR_LEN(aptr);
 | 
			
		||||
      aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_AAAA
 | 
			
		||||
          && rr_len == sizeof(struct in6_addr)
 | 
			
		||||
          && strcasecmp(rr_name, hostname) == 0)
 | 
			
		||||
        {
 | 
			
		||||
          memcpy(&addrs[naddrs], aptr, sizeof(struct in6_addr));
 | 
			
		||||
          naddrs++;
 | 
			
		||||
          status = ARES_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_CNAME)
 | 
			
		||||
        {
 | 
			
		||||
          /* Record the RR name as an alias. */
 | 
			
		||||
          aliases[naliases] = rr_name;
 | 
			
		||||
          naliases++;
 | 
			
		||||
 | 
			
		||||
          /* Decode the RR data and replace the hostname with it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          hostname = rr_data;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        free(rr_name);
 | 
			
		||||
 | 
			
		||||
      aptr += rr_len;
 | 
			
		||||
      if (aptr > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS && naddrs == 0)
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* We got our answer.  Allocate memory to build the host entry. */
 | 
			
		||||
      aliases[naliases] = NULL;
 | 
			
		||||
      hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
      if (hostent)
 | 
			
		||||
        {
 | 
			
		||||
          hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
 | 
			
		||||
          if (hostent->h_addr_list)
 | 
			
		||||
            {
 | 
			
		||||
              /* Fill in the hostent and return successfully. */
 | 
			
		||||
              hostent->h_name = hostname;
 | 
			
		||||
              hostent->h_aliases = aliases;
 | 
			
		||||
              hostent->h_addrtype = AF_INET6;
 | 
			
		||||
              hostent->h_length = sizeof(struct in6_addr);
 | 
			
		||||
              for (i = 0; i < naddrs; i++)
 | 
			
		||||
                hostent->h_addr_list[i] = (char *) &addrs[i];
 | 
			
		||||
              hostent->h_addr_list[naddrs] = NULL;
 | 
			
		||||
              *host = hostent;
 | 
			
		||||
              return ARES_SUCCESS;
 | 
			
		||||
            }
 | 
			
		||||
          free(hostent);
 | 
			
		||||
        }
 | 
			
		||||
      status = ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  for (i = 0; i < naliases; i++)
 | 
			
		||||
    free(aliases[i]);
 | 
			
		||||
  free(aliases);
 | 
			
		||||
  free(addrs);
 | 
			
		||||
  free(hostname);
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								ares/ares_parse_ns_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								ares/ares_parse_ns_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_NS_REPLY 3 "10 February 2007"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_ns_reply \- Parse a reply to a DNS query of type NS into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_ns_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	struct hostent **\fIhost\fP);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_ns_reply
 | 
			
		||||
function parses the response to a query of type NS into a
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The result is stored in allocated
 | 
			
		||||
memory and a pointer to it stored into the variable pointed to by
 | 
			
		||||
.IR host . 
 | 
			
		||||
The nameservers are stored into the 
 | 
			
		||||
.BR aliases 
 | 
			
		||||
field of the 
 | 
			
		||||
.IR host 
 | 
			
		||||
structure. 
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_ns_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_query (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Written by Vlad Dinulescu <vlad.dinulescu@avira.com>, on behalf of AVIRA Gmbh http://www.avira.com
 | 
			
		||||
							
								
								
									
										171
									
								
								ares/ares_parse_ns_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								ares/ares_parse_ns_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,171 @@
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
* Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
* fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
* documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
* software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ares_parse_ns_reply created by Vlad Dinulescu <vlad.dinulescu@avira.com>
 | 
			
		||||
 *      on behalf of AVIRA Gmbh - http://www.avira.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_ns_reply( const unsigned char* abuf, int alen,
 | 
			
		||||
                         struct hostent** host )
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len;
 | 
			
		||||
  int nameservers_num;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char* hostname, *rr_name, *rr_data, **nameservers;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  *host = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if ( alen < HFIXEDSZ )
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT( abuf );
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT( abuf );
 | 
			
		||||
  if ( qdcount != 1 )
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name( aptr, abuf, alen, &hostname, &len );
 | 
			
		||||
  if ( status != ARES_SUCCESS )
 | 
			
		||||
    return status;
 | 
			
		||||
  if ( aptr + len + QFIXEDSZ > abuf + alen )
 | 
			
		||||
  {
 | 
			
		||||
    free( hostname );
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
  }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Allocate nameservers array; ancount gives an upper bound */
 | 
			
		||||
  nameservers = malloc( ( ancount + 1 ) * sizeof( char * ) );
 | 
			
		||||
  if ( !nameservers )
 | 
			
		||||
  {
 | 
			
		||||
    free( hostname );
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
  nameservers_num = 0;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  for ( i = 0; i < ( int ) ancount; i++ )
 | 
			
		||||
  {
 | 
			
		||||
    /* Decode the RR up to the data field. */
 | 
			
		||||
    status = ares_expand_name( aptr, abuf, alen, &rr_name, &len );
 | 
			
		||||
    if ( status != ARES_SUCCESS )
 | 
			
		||||
      break;
 | 
			
		||||
    aptr += len;
 | 
			
		||||
    if ( aptr + RRFIXEDSZ > abuf + alen )
 | 
			
		||||
    {
 | 
			
		||||
      status = ARES_EBADRESP;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    rr_type = DNS_RR_TYPE( aptr );
 | 
			
		||||
    rr_class = DNS_RR_CLASS( aptr );
 | 
			
		||||
    rr_len = DNS_RR_LEN( aptr );
 | 
			
		||||
    aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
    if ( rr_class == C_IN && rr_type == T_NS )
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR data and add it to the nameservers list */
 | 
			
		||||
      status = ares_expand_name( aptr, abuf, alen, &rr_data, &len );
 | 
			
		||||
      if ( status != ARES_SUCCESS )
 | 
			
		||||
      {
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      nameservers[nameservers_num] = malloc(strlen(rr_data)+1);
 | 
			
		||||
 | 
			
		||||
      if (nameservers[nameservers_num]==NULL)
 | 
			
		||||
      {
 | 
			
		||||
        free(rr_name);
 | 
			
		||||
        free(rr_data);
 | 
			
		||||
        status=ARES_ENOMEM;
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      strcpy(nameservers[nameservers_num],rr_data);
 | 
			
		||||
      free(rr_data);
 | 
			
		||||
 | 
			
		||||
      nameservers_num++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    free( rr_name );
 | 
			
		||||
 | 
			
		||||
    aptr += rr_len;
 | 
			
		||||
    if ( aptr > abuf + alen )
 | 
			
		||||
    {
 | 
			
		||||
      status = ARES_EBADRESP;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( status == ARES_SUCCESS && nameservers_num == 0 )
 | 
			
		||||
  {
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  }
 | 
			
		||||
  if ( status == ARES_SUCCESS )
 | 
			
		||||
  {
 | 
			
		||||
    /* We got our answer.  Allocate memory to build the host entry. */
 | 
			
		||||
    nameservers[nameservers_num] = NULL;
 | 
			
		||||
    hostent = malloc( sizeof( struct hostent ) );
 | 
			
		||||
    if ( hostent )
 | 
			
		||||
    {
 | 
			
		||||
      hostent->h_addr_list = malloc( 1 * sizeof( char * ) );
 | 
			
		||||
      if ( hostent->h_addr_list )
 | 
			
		||||
      {
 | 
			
		||||
        /* Fill in the hostent and return successfully. */
 | 
			
		||||
        hostent->h_name = hostname;
 | 
			
		||||
        hostent->h_aliases = nameservers;
 | 
			
		||||
        hostent->h_addrtype = AF_INET;
 | 
			
		||||
        hostent->h_length = sizeof( struct in_addr );
 | 
			
		||||
        hostent->h_addr_list[0] = NULL;
 | 
			
		||||
        *host = hostent;
 | 
			
		||||
        return ARES_SUCCESS;
 | 
			
		||||
      }
 | 
			
		||||
      free( hostent );
 | 
			
		||||
    }
 | 
			
		||||
    status = ARES_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
  for ( i = 0; i < nameservers_num; i++ )
 | 
			
		||||
    free( nameservers[i] );
 | 
			
		||||
  free( nameservers );
 | 
			
		||||
  free( hostname );
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										75
									
								
								ares/ares_parse_ptr_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								ares/ares_parse_ptr_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_PTR_REPLY 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
 | 
			
		||||
.B	struct hostent **\fIhost\fP);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_ptr_reply
 | 
			
		||||
function parses the response to a query of type PTR into a
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The parameters
 | 
			
		||||
.IR addr ,
 | 
			
		||||
.IR addrlen ,
 | 
			
		||||
and
 | 
			
		||||
.I family
 | 
			
		||||
specify which address was queried for; they are not used to verify the
 | 
			
		||||
response, merely used to fill in the address of the
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The resulting
 | 
			
		||||
.B struct hostent
 | 
			
		||||
is stored in allocated memory and a pointer to it stored into the
 | 
			
		||||
variable pointed to by
 | 
			
		||||
.IR host .
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_ptr_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_gethostbyaddr (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										163
									
								
								ares/ares_parse_ptr_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								ares/ares_parse_ptr_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,163 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
 | 
			
		||||
                         int addrlen, int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char *ptrname, *hostname, *rr_name, *rr_data;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  *host = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  if (qdcount != 1)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &ptrname, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return status;
 | 
			
		||||
  if (aptr + len + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      free(ptrname);
 | 
			
		||||
      return ARES_EBADRESP;
 | 
			
		||||
    }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  hostname = NULL;
 | 
			
		||||
  for (i = 0; i < (int)ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR up to the data field. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        break;
 | 
			
		||||
      aptr += len;
 | 
			
		||||
      if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      rr_type = DNS_RR_TYPE(aptr);
 | 
			
		||||
      rr_class = DNS_RR_CLASS(aptr);
 | 
			
		||||
      rr_len = DNS_RR_LEN(aptr);
 | 
			
		||||
      aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_PTR
 | 
			
		||||
          && strcasecmp(rr_name, ptrname) == 0)
 | 
			
		||||
        {
 | 
			
		||||
          /* Decode the RR data and set hostname to it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          if (hostname)
 | 
			
		||||
            free(hostname);
 | 
			
		||||
          hostname = rr_data;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_CNAME)
 | 
			
		||||
        {
 | 
			
		||||
          /* Decode the RR data and replace ptrname with it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          free(ptrname);
 | 
			
		||||
          ptrname = rr_data;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      free(rr_name);
 | 
			
		||||
      aptr += rr_len;
 | 
			
		||||
      if (aptr > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS && !hostname)
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* We got our answer.  Allocate memory to build the host entry. */
 | 
			
		||||
      hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
      if (hostent)
 | 
			
		||||
        {
 | 
			
		||||
          hostent->h_addr_list = malloc(2 * sizeof(char *));
 | 
			
		||||
          if (hostent->h_addr_list)
 | 
			
		||||
            {
 | 
			
		||||
              hostent->h_addr_list[0] = malloc(addrlen);
 | 
			
		||||
              if (hostent->h_addr_list[0])
 | 
			
		||||
                {
 | 
			
		||||
                  hostent->h_aliases = malloc(sizeof (char *));
 | 
			
		||||
                  if (hostent->h_aliases)
 | 
			
		||||
                    {
 | 
			
		||||
                      /* Fill in the hostent and return successfully. */
 | 
			
		||||
                      hostent->h_name = hostname;
 | 
			
		||||
                      hostent->h_aliases[0] = NULL;
 | 
			
		||||
                      hostent->h_addrtype = family;
 | 
			
		||||
                      hostent->h_length = addrlen;
 | 
			
		||||
                      memcpy(hostent->h_addr_list[0], addr, addrlen);
 | 
			
		||||
                      hostent->h_addr_list[1] = NULL;
 | 
			
		||||
                      *host = hostent;
 | 
			
		||||
                      free(ptrname);
 | 
			
		||||
                      return ARES_SUCCESS;
 | 
			
		||||
                    }
 | 
			
		||||
                  free(hostent->h_addr_list[0]);
 | 
			
		||||
                }
 | 
			
		||||
              free(hostent->h_addr_list);
 | 
			
		||||
            }
 | 
			
		||||
          free(hostent);
 | 
			
		||||
        }
 | 
			
		||||
      status = ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  if (hostname)
 | 
			
		||||
    free(hostname);
 | 
			
		||||
  free(ptrname);
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										223
									
								
								ares/ares_private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								ares/ares_private.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,223 @@
 | 
			
		||||
#ifndef __ARES_PRIVATE_H
 | 
			
		||||
#define __ARES_PRIVATE_H
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
/* We define closesocket() here so that we can use this function all over
 | 
			
		||||
   the source code for closing sockets. */
 | 
			
		||||
#define closesocket(x) close(x)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#include <tcp.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#undef  closesocket
 | 
			
		||||
#define closesocket(s)    close_s(s)
 | 
			
		||||
#define writev(s,v,c)     writev_s(s,v,c)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef NETWARE
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_TIMEOUT         5
 | 
			
		||||
#define DEFAULT_TRIES           4
 | 
			
		||||
#ifndef INADDR_NONE
 | 
			
		||||
#define INADDR_NONE 0xffffffff
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
 | 
			
		||||
#define IS_NT()        ((int)GetVersion() > 0)
 | 
			
		||||
#define WIN_NS_9X      "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
 | 
			
		||||
#define WIN_NS_NT_KEY  "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
 | 
			
		||||
#define NAMESERVER     "NameServer"
 | 
			
		||||
#define DHCPNAMESERVER "DhcpNameServer"
 | 
			
		||||
#define DATABASEPATH   "DatabasePath"
 | 
			
		||||
#define WIN_PATH_HOSTS  "\\hosts"
 | 
			
		||||
 | 
			
		||||
#elif defined(WATT32)
 | 
			
		||||
 | 
			
		||||
#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf"
 | 
			
		||||
 | 
			
		||||
#elif defined(NETWARE)
 | 
			
		||||
 | 
			
		||||
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
 | 
			
		||||
#define PATH_HOSTS              "sys:/etc/hosts"
 | 
			
		||||
 | 
			
		||||
#elif defined(__riscos__)
 | 
			
		||||
 | 
			
		||||
#define PATH_HOSTS             "InetDBase:Hosts"
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define PATH_RESOLV_CONF        "/etc/resolv.conf"
 | 
			
		||||
#ifdef ETC_INET
 | 
			
		||||
#define PATH_HOSTS              "/etc/inet/hosts"
 | 
			
		||||
#else
 | 
			
		||||
#define PATH_HOSTS              "/etc/hosts"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ARES_ID_KEY_LEN 31
 | 
			
		||||
 | 
			
		||||
#include "ares_ipv6.h"
 | 
			
		||||
 | 
			
		||||
struct send_request {
 | 
			
		||||
  /* Remaining data to send */
 | 
			
		||||
  const unsigned char *data;
 | 
			
		||||
  size_t len;
 | 
			
		||||
 | 
			
		||||
  /* Next request in queue */
 | 
			
		||||
  struct send_request *next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct server_state {
 | 
			
		||||
  struct in_addr addr;
 | 
			
		||||
  ares_socket_t udp_socket;
 | 
			
		||||
  ares_socket_t tcp_socket;
 | 
			
		||||
 | 
			
		||||
  /* Mini-buffer for reading the length word */
 | 
			
		||||
  unsigned char tcp_lenbuf[2];
 | 
			
		||||
  int tcp_lenbuf_pos;
 | 
			
		||||
  int tcp_length;
 | 
			
		||||
 | 
			
		||||
  /* Buffer for reading actual TCP data */
 | 
			
		||||
  unsigned char *tcp_buffer;
 | 
			
		||||
  int tcp_buffer_pos;
 | 
			
		||||
 | 
			
		||||
  /* TCP output queue */
 | 
			
		||||
  struct send_request *qhead;
 | 
			
		||||
  struct send_request *qtail;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct query {
 | 
			
		||||
  /* Query ID from qbuf, for faster lookup, and current timeout */
 | 
			
		||||
  unsigned short qid;
 | 
			
		||||
  time_t timeout;
 | 
			
		||||
 | 
			
		||||
  /* Query buf with length at beginning, for TCP transmission */
 | 
			
		||||
  unsigned char *tcpbuf;
 | 
			
		||||
  int tcplen;
 | 
			
		||||
 | 
			
		||||
  /* Arguments passed to ares_send() (qbuf points into tcpbuf) */
 | 
			
		||||
  const unsigned char *qbuf;
 | 
			
		||||
  int qlen;
 | 
			
		||||
  ares_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
 | 
			
		||||
  /* Query status */
 | 
			
		||||
  int try;
 | 
			
		||||
  int server;
 | 
			
		||||
  int *skip_server;
 | 
			
		||||
  int using_tcp;
 | 
			
		||||
  int error_status;
 | 
			
		||||
 | 
			
		||||
  /* Next query in chain */
 | 
			
		||||
  struct query *next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* An IP address pattern; matches an IP address X if X & mask == addr */
 | 
			
		||||
#define PATTERN_MASK 0x1
 | 
			
		||||
#define PATTERN_CIDR 0x2
 | 
			
		||||
 | 
			
		||||
union ares_addr {
 | 
			
		||||
  struct in_addr addr4;
 | 
			
		||||
  struct in6_addr addr6;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct apattern {
 | 
			
		||||
  union ares_addr addr;
 | 
			
		||||
  union
 | 
			
		||||
  {
 | 
			
		||||
    union ares_addr addr;
 | 
			
		||||
    unsigned short bits;
 | 
			
		||||
  } mask;
 | 
			
		||||
  int family;
 | 
			
		||||
  unsigned short type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct rc4_key
 | 
			
		||||
{
 | 
			
		||||
  unsigned char state[256];
 | 
			
		||||
  unsigned char x;
 | 
			
		||||
  unsigned char y;
 | 
			
		||||
} rc4_key;
 | 
			
		||||
 | 
			
		||||
struct ares_channeldata {
 | 
			
		||||
  /* Configuration data */
 | 
			
		||||
  int flags;
 | 
			
		||||
  int timeout;
 | 
			
		||||
  int tries;
 | 
			
		||||
  int ndots;
 | 
			
		||||
  int udp_port;
 | 
			
		||||
  int tcp_port;
 | 
			
		||||
  char **domains;
 | 
			
		||||
  int ndomains;
 | 
			
		||||
  struct apattern *sortlist;
 | 
			
		||||
  int nsort;
 | 
			
		||||
  char *lookups;
 | 
			
		||||
 | 
			
		||||
  /* Server addresses and communications state */
 | 
			
		||||
  struct server_state *servers;
 | 
			
		||||
  int nservers;
 | 
			
		||||
 | 
			
		||||
  /* ID to use for next query */
 | 
			
		||||
  unsigned short next_id;
 | 
			
		||||
  /* key to use when generating new ids */
 | 
			
		||||
  rc4_key id_key;
 | 
			
		||||
 | 
			
		||||
  /* Active queries */
 | 
			
		||||
  struct query *queries;
 | 
			
		||||
 | 
			
		||||
  ares_sock_state_cb sock_state_cb;
 | 
			
		||||
  void *sock_state_cb_data;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void ares__rc4(rc4_key* key,unsigned char *buffer_ptr, int buffer_len);
 | 
			
		||||
void ares__send_query(ares_channel channel, struct query *query, time_t now);
 | 
			
		||||
void ares__close_sockets(ares_channel channel, struct server_state *server);
 | 
			
		||||
int ares__get_hostent(FILE *fp, int family, struct hostent **host);
 | 
			
		||||
int ares__read_line(FILE *fp, char **buf, int *bufsize);
 | 
			
		||||
short ares__generate_new_id(rc4_key* key);
 | 
			
		||||
 | 
			
		||||
#define ARES_SWAP_BYTE(a,b) \
 | 
			
		||||
  { unsigned char swapByte = *(a);  *(a) = *(b);  *(b) = swapByte; }
 | 
			
		||||
 | 
			
		||||
#define SOCK_STATE_CALLBACK(c, s, r, w)                                 \
 | 
			
		||||
  do {                                                                  \
 | 
			
		||||
    if ((c)->sock_state_cb)                                             \
 | 
			
		||||
      (c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w));       \
 | 
			
		||||
  } while (0)
 | 
			
		||||
 | 
			
		||||
#ifdef CURLDEBUG
 | 
			
		||||
/* This is low-level hard-hacking memory leak tracking and similar. Using the
 | 
			
		||||
   libcurl lowlevel code from within library is ugly and only works when
 | 
			
		||||
   c-ares is built and linked with a similarly debug-build libcurl, but we do
 | 
			
		||||
   this anyway for convenience. */
 | 
			
		||||
#include "../lib/memdebug.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ARES_PRIVATE_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										81
									
								
								ares/ares_process.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								ares/ares_process.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PROCESS 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_process \- Process events for name resolution
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_process(ares_channel \fIchannel\fP, fd_set *\fIread_fds\fP,
 | 
			
		||||
.B	fd_set *\fIwrite_fds\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_process_fd(ares_channel \fIchannel\fP,
 | 
			
		||||
.B      ares_socket_t \fIread_fd\fP,
 | 
			
		||||
.B	ares_socket_t \fIwrite_fd\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_process(3)\fP function handles input/output events and timeouts
 | 
			
		||||
associated with queries pending on the name service channel identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The file descriptor sets pointed to by \fIread_fds\fP and \fIwrite_fds\fP
 | 
			
		||||
should have file descriptors set in them according to whether the file
 | 
			
		||||
descriptors specified by \fIares_fds(3)\fP are ready for reading and writing.
 | 
			
		||||
(The easiest way to determine this information is to invoke
 | 
			
		||||
.B select
 | 
			
		||||
with a timeout no greater than the timeout given by \fIares_timeout(3)\fP ).
 | 
			
		||||
.PP
 | 
			
		||||
The
 | 
			
		||||
.B ares_process
 | 
			
		||||
function will invoke callbacks for pending queries if they complete
 | 
			
		||||
successfully or fail.
 | 
			
		||||
 | 
			
		||||
\fBares_process_fd(3)\fP works the same way but acts and operates only on the
 | 
			
		||||
specific file descriptors (sockets) you pass in to the function. Use
 | 
			
		||||
ARES_SOCKET_BAD for "no action". This function is of course provided to allow
 | 
			
		||||
users of c-ares to void select() in their applications and within c-ares.
 | 
			
		||||
.SS EXAMPLE
 | 
			
		||||
The following code fragment waits for all pending queries on a channel
 | 
			
		||||
to complete:
 | 
			
		||||
.PP
 | 
			
		||||
.RS
 | 
			
		||||
.nf
 | 
			
		||||
int nfds, count;
 | 
			
		||||
fd_set readers, writers;
 | 
			
		||||
struct timeval tv, *tvp;
 | 
			
		||||
 | 
			
		||||
while (1)
 | 
			
		||||
  {
 | 
			
		||||
    FD_ZERO(&readers);
 | 
			
		||||
    FD_ZERO(&writers);
 | 
			
		||||
    nfds = ares_fds(channel, &readers, &writers);
 | 
			
		||||
    if (nfds == 0)
 | 
			
		||||
      break;
 | 
			
		||||
    tvp = ares_timeout(channel, NULL, &tv);
 | 
			
		||||
    count = select(nfds, &readers, &writers, NULL, tvp);
 | 
			
		||||
    ares_process(channel, &readers, &writers);
 | 
			
		||||
  }
 | 
			
		||||
.fi
 | 
			
		||||
.RE
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_fds (3),
 | 
			
		||||
.BR ares_timeout (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										820
									
								
								ares/ares_process.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										820
									
								
								ares/ares_process.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,820 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#ifdef HAVE_SYS_UIO_H
 | 
			
		||||
#include <sys/uio.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* WIN32 && !WATT32 */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_IOCTL_H
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NETWARE
 | 
			
		||||
#include <sys/filio.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int try_again(int errnum);
 | 
			
		||||
static void write_tcp_data(ares_channel channel, fd_set *write_fds,
 | 
			
		||||
                           ares_socket_t write_fd, time_t now);
 | 
			
		||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds,
 | 
			
		||||
                          ares_socket_t read_fd, time_t now);
 | 
			
		||||
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
 | 
			
		||||
                             ares_socket_t read_fd, time_t now);
 | 
			
		||||
static void process_timeouts(ares_channel channel, time_t now);
 | 
			
		||||
static void process_answer(ares_channel channel, unsigned char *abuf,
 | 
			
		||||
                           int alen, int whichserver, int tcp, time_t now);
 | 
			
		||||
static void handle_error(ares_channel channel, int whichserver, time_t now);
 | 
			
		||||
static struct query *next_server(ares_channel channel, struct query *query, time_t now);
 | 
			
		||||
static int open_tcp_socket(ares_channel channel, struct server_state *server);
 | 
			
		||||
static int open_udp_socket(ares_channel channel, struct server_state *server);
 | 
			
		||||
static int same_questions(const unsigned char *qbuf, int qlen,
 | 
			
		||||
                          const unsigned char *abuf, int alen);
 | 
			
		||||
static struct query *end_query(ares_channel channel, struct query *query, int status,
 | 
			
		||||
                      unsigned char *abuf, int alen);
 | 
			
		||||
 | 
			
		||||
/* Something interesting happened on the wire, or there was a timeout.
 | 
			
		||||
 * See what's up and respond accordingly.
 | 
			
		||||
 */
 | 
			
		||||
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
 | 
			
		||||
{
 | 
			
		||||
  time_t now;
 | 
			
		||||
 | 
			
		||||
  time(&now);
 | 
			
		||||
  write_tcp_data(channel, write_fds, ARES_SOCKET_BAD, now);
 | 
			
		||||
  read_tcp_data(channel, read_fds, ARES_SOCKET_BAD, now);
 | 
			
		||||
  read_udp_packets(channel, read_fds, ARES_SOCKET_BAD, now);
 | 
			
		||||
  process_timeouts(channel, now);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Something interesting happened on the wire, or there was a timeout.
 | 
			
		||||
 * See what's up and respond accordingly.
 | 
			
		||||
 */
 | 
			
		||||
void ares_process_fd(ares_channel channel,
 | 
			
		||||
                     ares_socket_t read_fd, /* use ARES_SOCKET_BAD or valid
 | 
			
		||||
                                               file descriptors */
 | 
			
		||||
                     ares_socket_t write_fd)
 | 
			
		||||
{
 | 
			
		||||
  time_t now;
 | 
			
		||||
 | 
			
		||||
  time(&now);
 | 
			
		||||
  write_tcp_data(channel, NULL, write_fd, now);
 | 
			
		||||
  read_tcp_data(channel, NULL, read_fd, now);
 | 
			
		||||
  read_udp_packets(channel, NULL, read_fd, now);
 | 
			
		||||
  process_timeouts(channel, now);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Return 1 if the specified error number describes a readiness error, or 0
 | 
			
		||||
 * otherwise. This is mostly for HP-UX, which could return EAGAIN or
 | 
			
		||||
 * EWOULDBLOCK. See this man page
 | 
			
		||||
 *
 | 
			
		||||
 * 	http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?manpage=/usr/share/man/man2.Z/send.2
 | 
			
		||||
 */
 | 
			
		||||
static int try_again(int errnum)
 | 
			
		||||
{
 | 
			
		||||
#if !defined EWOULDBLOCK && !defined EAGAIN
 | 
			
		||||
#error "Neither EWOULDBLOCK nor EAGAIN defined"
 | 
			
		||||
#endif
 | 
			
		||||
  switch (errnum)
 | 
			
		||||
    {
 | 
			
		||||
#ifdef EWOULDBLOCK
 | 
			
		||||
    case EWOULDBLOCK:
 | 
			
		||||
      return 1;
 | 
			
		||||
#endif
 | 
			
		||||
#if defined EAGAIN && EAGAIN != EWOULDBLOCK
 | 
			
		||||
    case EAGAIN:
 | 
			
		||||
      return 1;
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If any TCP sockets select true for writing, write out queued data
 | 
			
		||||
 * we have for them.
 | 
			
		||||
 */
 | 
			
		||||
static void write_tcp_data(ares_channel channel,
 | 
			
		||||
                           fd_set *write_fds,
 | 
			
		||||
                           ares_socket_t write_fd,
 | 
			
		||||
                           time_t now)
 | 
			
		||||
{
 | 
			
		||||
  struct server_state *server;
 | 
			
		||||
  struct send_request *sendreq;
 | 
			
		||||
  struct iovec *vec;
 | 
			
		||||
  int i;
 | 
			
		||||
  ssize_t scount;
 | 
			
		||||
  ssize_t wcount;
 | 
			
		||||
  size_t n;
 | 
			
		||||
 | 
			
		||||
  if(!write_fds && (write_fd == ARES_SOCKET_BAD))
 | 
			
		||||
    /* no possible action */
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Make sure server has data to send and is selected in write_fds or
 | 
			
		||||
         write_fd. */
 | 
			
		||||
      server = &channel->servers[i];
 | 
			
		||||
      if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if(write_fds) {
 | 
			
		||||
        if(!FD_ISSET(server->tcp_socket, write_fds))
 | 
			
		||||
          continue;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        if(server->tcp_socket != write_fd)
 | 
			
		||||
          continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Count the number of send queue items. */
 | 
			
		||||
      n = 0;
 | 
			
		||||
      for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
 | 
			
		||||
        n++;
 | 
			
		||||
 | 
			
		||||
      /* Allocate iovecs so we can send all our data at once. */
 | 
			
		||||
      vec = malloc(n * sizeof(struct iovec));
 | 
			
		||||
      if (vec)
 | 
			
		||||
        {
 | 
			
		||||
          /* Fill in the iovecs and send. */
 | 
			
		||||
          n = 0;
 | 
			
		||||
          for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
 | 
			
		||||
            {
 | 
			
		||||
              vec[n].iov_base = (char *) sendreq->data;
 | 
			
		||||
              vec[n].iov_len = sendreq->len;
 | 
			
		||||
              n++;
 | 
			
		||||
            }
 | 
			
		||||
          wcount = (ssize_t)writev(server->tcp_socket, vec, (int)n);
 | 
			
		||||
          free(vec);
 | 
			
		||||
          if (wcount < 0)
 | 
			
		||||
            {
 | 
			
		||||
              if (!try_again(SOCKERRNO))
 | 
			
		||||
                  handle_error(channel, i, now);
 | 
			
		||||
              continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          /* Advance the send queue by as many bytes as we sent. */
 | 
			
		||||
          while (wcount)
 | 
			
		||||
            {
 | 
			
		||||
              sendreq = server->qhead;
 | 
			
		||||
              if ((size_t)wcount >= sendreq->len)
 | 
			
		||||
                {
 | 
			
		||||
                  wcount -= sendreq->len;
 | 
			
		||||
                  server->qhead = sendreq->next;
 | 
			
		||||
                  if (server->qhead == NULL)
 | 
			
		||||
                    {
 | 
			
		||||
                      SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
 | 
			
		||||
                      server->qtail = NULL;
 | 
			
		||||
                    }
 | 
			
		||||
                  free(sendreq);
 | 
			
		||||
                }
 | 
			
		||||
              else
 | 
			
		||||
                {
 | 
			
		||||
                  sendreq->data += wcount;
 | 
			
		||||
                  sendreq->len -= wcount;
 | 
			
		||||
                  break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          /* Can't allocate iovecs; just send the first request. */
 | 
			
		||||
          sendreq = server->qhead;
 | 
			
		||||
 | 
			
		||||
          scount = swrite(server->tcp_socket, sendreq->data, sendreq->len);
 | 
			
		||||
          if (scount < 0)
 | 
			
		||||
            {
 | 
			
		||||
              if (!try_again(SOCKERRNO))
 | 
			
		||||
                  handle_error(channel, i, now);
 | 
			
		||||
              continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          /* Advance the send queue by as many bytes as we sent. */
 | 
			
		||||
          if ((size_t)scount == sendreq->len)
 | 
			
		||||
            {
 | 
			
		||||
              server->qhead = sendreq->next;
 | 
			
		||||
              if (server->qhead == NULL)
 | 
			
		||||
                {
 | 
			
		||||
                  SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
 | 
			
		||||
                  server->qtail = NULL;
 | 
			
		||||
                }
 | 
			
		||||
              free(sendreq);
 | 
			
		||||
            }
 | 
			
		||||
          else
 | 
			
		||||
            {
 | 
			
		||||
              sendreq->data += scount;
 | 
			
		||||
              sendreq->len -= scount;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If any TCP socket selects true for reading, read some data,
 | 
			
		||||
 * allocate a buffer if we finish reading the length word, and process
 | 
			
		||||
 * a packet if we finish reading one.
 | 
			
		||||
 */
 | 
			
		||||
static void read_tcp_data(ares_channel channel, fd_set *read_fds,
 | 
			
		||||
                          ares_socket_t read_fd, time_t now)
 | 
			
		||||
{
 | 
			
		||||
  struct server_state *server;
 | 
			
		||||
  int i;
 | 
			
		||||
  ssize_t count;
 | 
			
		||||
 | 
			
		||||
  if(!read_fds && (read_fd == ARES_SOCKET_BAD))
 | 
			
		||||
    /* no possible action */
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Make sure the server has a socket and is selected in read_fds. */
 | 
			
		||||
      server = &channel->servers[i];
 | 
			
		||||
      if (server->tcp_socket == ARES_SOCKET_BAD)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if(read_fds) {
 | 
			
		||||
        if(!FD_ISSET(server->tcp_socket, read_fds))
 | 
			
		||||
          continue;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        if(server->tcp_socket != read_fd)
 | 
			
		||||
          continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (server->tcp_lenbuf_pos != 2)
 | 
			
		||||
        {
 | 
			
		||||
          /* We haven't yet read a length word, so read that (or
 | 
			
		||||
           * what's left to read of it).
 | 
			
		||||
           */
 | 
			
		||||
          count = sread(server->tcp_socket,
 | 
			
		||||
                        server->tcp_lenbuf + server->tcp_lenbuf_pos,
 | 
			
		||||
                        2 - server->tcp_lenbuf_pos);
 | 
			
		||||
          if (count <= 0)
 | 
			
		||||
            {
 | 
			
		||||
              if (!(count == -1 && try_again(SOCKERRNO)))
 | 
			
		||||
                  handle_error(channel, i, now);
 | 
			
		||||
              continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          server->tcp_lenbuf_pos += (int)count;
 | 
			
		||||
          if (server->tcp_lenbuf_pos == 2)
 | 
			
		||||
            {
 | 
			
		||||
              /* We finished reading the length word.  Decode the
 | 
			
		||||
               * length and allocate a buffer for the data.
 | 
			
		||||
               */
 | 
			
		||||
              server->tcp_length = server->tcp_lenbuf[0] << 8
 | 
			
		||||
                | server->tcp_lenbuf[1];
 | 
			
		||||
              server->tcp_buffer = malloc(server->tcp_length);
 | 
			
		||||
              if (!server->tcp_buffer)
 | 
			
		||||
                handle_error(channel, i, now);
 | 
			
		||||
              server->tcp_buffer_pos = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          /* Read data into the allocated buffer. */
 | 
			
		||||
          count = sread(server->tcp_socket,
 | 
			
		||||
                        server->tcp_buffer + server->tcp_buffer_pos,
 | 
			
		||||
                        server->tcp_length - server->tcp_buffer_pos);
 | 
			
		||||
          if (count <= 0)
 | 
			
		||||
            {
 | 
			
		||||
              if (!(count == -1 && try_again(SOCKERRNO)))
 | 
			
		||||
                  handle_error(channel, i, now);
 | 
			
		||||
              continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          server->tcp_buffer_pos += (int)count;
 | 
			
		||||
          if (server->tcp_buffer_pos == server->tcp_length)
 | 
			
		||||
            {
 | 
			
		||||
              /* We finished reading this answer; process it and
 | 
			
		||||
               * prepare to read another length word.
 | 
			
		||||
               */
 | 
			
		||||
              process_answer(channel, server->tcp_buffer, server->tcp_length,
 | 
			
		||||
                             i, 1, now);
 | 
			
		||||
          if (server->tcp_buffer)
 | 
			
		||||
                        free(server->tcp_buffer);
 | 
			
		||||
              server->tcp_buffer = NULL;
 | 
			
		||||
              server->tcp_lenbuf_pos = 0;
 | 
			
		||||
              server->tcp_buffer_pos = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If any UDP sockets select true for reading, process them. */
 | 
			
		||||
static void read_udp_packets(ares_channel channel, fd_set *read_fds,
 | 
			
		||||
                             ares_socket_t read_fd, time_t now)
 | 
			
		||||
{
 | 
			
		||||
  struct server_state *server;
 | 
			
		||||
  int i;
 | 
			
		||||
  ssize_t count;
 | 
			
		||||
  unsigned char buf[PACKETSZ + 1];
 | 
			
		||||
 | 
			
		||||
  if(!read_fds && (read_fd == ARES_SOCKET_BAD))
 | 
			
		||||
    /* no possible action */
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Make sure the server has a socket and is selected in read_fds. */
 | 
			
		||||
      server = &channel->servers[i];
 | 
			
		||||
 | 
			
		||||
      if (server->udp_socket == ARES_SOCKET_BAD)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if(read_fds) {
 | 
			
		||||
        if(!FD_ISSET(server->udp_socket, read_fds))
 | 
			
		||||
          continue;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        if(server->udp_socket != read_fd)
 | 
			
		||||
          continue;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      count = sread(server->udp_socket, buf, sizeof(buf));
 | 
			
		||||
      if (count == -1 && try_again(SOCKERRNO))
 | 
			
		||||
        continue;
 | 
			
		||||
      else if (count <= 0)
 | 
			
		||||
        handle_error(channel, i, now);
 | 
			
		||||
 | 
			
		||||
      process_answer(channel, buf, (int)count, i, 0, now);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If any queries have timed out, note the timeout and move them on. */
 | 
			
		||||
static void process_timeouts(ares_channel channel, time_t now)
 | 
			
		||||
{
 | 
			
		||||
  struct query *query, *next;
 | 
			
		||||
 | 
			
		||||
  for (query = channel->queries; query; query = next)
 | 
			
		||||
    {
 | 
			
		||||
      next = query->next;
 | 
			
		||||
      if (query->timeout != 0 && now >= query->timeout)
 | 
			
		||||
        {
 | 
			
		||||
          query->error_status = ARES_ETIMEOUT;
 | 
			
		||||
          next = next_server(channel, query, now);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Handle an answer from a server. */
 | 
			
		||||
static void process_answer(ares_channel channel, unsigned char *abuf,
 | 
			
		||||
                           int alen, int whichserver, int tcp, time_t now)
 | 
			
		||||
{
 | 
			
		||||
  int id, tc, rcode;
 | 
			
		||||
  struct query *query;
 | 
			
		||||
 | 
			
		||||
  /* If there's no room in the answer for a header, we can't do much
 | 
			
		||||
   * with it. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* Grab the query ID, truncate bit, and response code from the packet. */
 | 
			
		||||
  id = DNS_HEADER_QID(abuf);
 | 
			
		||||
  tc = DNS_HEADER_TC(abuf);
 | 
			
		||||
  rcode = DNS_HEADER_RCODE(abuf);
 | 
			
		||||
 | 
			
		||||
  /* Find the query corresponding to this packet. */
 | 
			
		||||
  for (query = channel->queries; query; query = query->next)
 | 
			
		||||
    {
 | 
			
		||||
      if (query->qid == id)
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  if (!query)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* If we got a truncated UDP packet and are not ignoring truncation,
 | 
			
		||||
   * don't accept the packet, and switch the query to TCP if we hadn't
 | 
			
		||||
   * done so already.
 | 
			
		||||
   */
 | 
			
		||||
  if ((tc || alen > PACKETSZ) && !tcp && !(channel->flags & ARES_FLAG_IGNTC))
 | 
			
		||||
    {
 | 
			
		||||
      if (!query->using_tcp)
 | 
			
		||||
        {
 | 
			
		||||
          query->using_tcp = 1;
 | 
			
		||||
          ares__send_query(channel, query, now);
 | 
			
		||||
        }
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Limit alen to PACKETSZ if we aren't using TCP (only relevant if we
 | 
			
		||||
   * are ignoring truncation.
 | 
			
		||||
   */
 | 
			
		||||
  if (alen > PACKETSZ && !tcp)
 | 
			
		||||
    alen = PACKETSZ;
 | 
			
		||||
 | 
			
		||||
  /* If we aren't passing through all error packets, discard packets
 | 
			
		||||
   * with SERVFAIL, NOTIMP, or REFUSED response codes.
 | 
			
		||||
   */
 | 
			
		||||
  if (!(channel->flags & ARES_FLAG_NOCHECKRESP))
 | 
			
		||||
    {
 | 
			
		||||
      if (rcode == SERVFAIL || rcode == NOTIMP || rcode == REFUSED)
 | 
			
		||||
        {
 | 
			
		||||
          query->skip_server[whichserver] = 1;
 | 
			
		||||
          if (query->server == whichserver)
 | 
			
		||||
            next_server(channel, query, now);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
      if (!same_questions(query->qbuf, query->qlen, abuf, alen))
 | 
			
		||||
        {
 | 
			
		||||
          if (query->server == whichserver)
 | 
			
		||||
            next_server(channel, query, now);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  end_query(channel, query, ARES_SUCCESS, abuf, alen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void handle_error(ares_channel channel, int whichserver, time_t now)
 | 
			
		||||
{
 | 
			
		||||
  struct query *query, *next;
 | 
			
		||||
 | 
			
		||||
  /* Reset communications with this server. */
 | 
			
		||||
  ares__close_sockets(channel, &channel->servers[whichserver]);
 | 
			
		||||
 | 
			
		||||
  /* Tell all queries talking to this server to move on and not try
 | 
			
		||||
   * this server again.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  for (query = channel->queries; query; query = next)
 | 
			
		||||
    {
 | 
			
		||||
      next = query->next;
 | 
			
		||||
      if (query->server == whichserver)
 | 
			
		||||
        {
 | 
			
		||||
          query->skip_server[whichserver] = 1;
 | 
			
		||||
          next = next_server(channel, query, now);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct query *next_server(ares_channel channel, struct query *query, time_t now)
 | 
			
		||||
{
 | 
			
		||||
  /* Advance to the next server or try. */
 | 
			
		||||
  query->server++;
 | 
			
		||||
  for (; query->try < channel->tries; query->try++)
 | 
			
		||||
    {
 | 
			
		||||
      for (; query->server < channel->nservers; query->server++)
 | 
			
		||||
        {
 | 
			
		||||
          if (!query->skip_server[query->server])
 | 
			
		||||
            {
 | 
			
		||||
              ares__send_query(channel, query, now);
 | 
			
		||||
              return (query->next);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      query->server = 0;
 | 
			
		||||
 | 
			
		||||
      /* Only one try if we're using TCP. */
 | 
			
		||||
      if (query->using_tcp)
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  return end_query(channel, query, query->error_status, NULL, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ares__send_query(ares_channel channel, struct query *query, time_t now)
 | 
			
		||||
{
 | 
			
		||||
  struct send_request *sendreq;
 | 
			
		||||
  struct server_state *server;
 | 
			
		||||
 | 
			
		||||
  server = &channel->servers[query->server];
 | 
			
		||||
  if (query->using_tcp)
 | 
			
		||||
    {
 | 
			
		||||
      /* Make sure the TCP socket for this server is set up and queue
 | 
			
		||||
       * a send request.
 | 
			
		||||
       */
 | 
			
		||||
      if (server->tcp_socket == ARES_SOCKET_BAD)
 | 
			
		||||
        {
 | 
			
		||||
          if (open_tcp_socket(channel, server) == -1)
 | 
			
		||||
            {
 | 
			
		||||
              query->skip_server[query->server] = 1;
 | 
			
		||||
              next_server(channel, query, now);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      sendreq = calloc(sizeof(struct send_request), 1);
 | 
			
		||||
      if (!sendreq)
 | 
			
		||||
        {
 | 
			
		||||
        end_query(channel, query, ARES_ENOMEM, NULL, 0);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
      sendreq->data = query->tcpbuf;
 | 
			
		||||
      sendreq->len = query->tcplen;
 | 
			
		||||
      sendreq->next = NULL;
 | 
			
		||||
      if (server->qtail)
 | 
			
		||||
        server->qtail->next = sendreq;
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 1);
 | 
			
		||||
          server->qhead = sendreq;
 | 
			
		||||
        }
 | 
			
		||||
      server->qtail = sendreq;
 | 
			
		||||
      query->timeout = 0;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (server->udp_socket == ARES_SOCKET_BAD)
 | 
			
		||||
        {
 | 
			
		||||
          if (open_udp_socket(channel, server) == -1)
 | 
			
		||||
            {
 | 
			
		||||
              query->skip_server[query->server] = 1;
 | 
			
		||||
              next_server(channel, query, now);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      if (swrite(server->udp_socket, query->qbuf, query->qlen) == -1)
 | 
			
		||||
        {
 | 
			
		||||
          /* FIXME: Handle EAGAIN here since it likely can happen. */
 | 
			
		||||
          query->skip_server[query->server] = 1;
 | 
			
		||||
          next_server(channel, query, now);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
      query->timeout = now
 | 
			
		||||
          + ((query->try == 0) ? channel->timeout
 | 
			
		||||
             : channel->timeout << query->try / channel->nservers);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 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 (FALSE != 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)
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
  char flags;
 | 
			
		||||
#else
 | 
			
		||||
  /* Windows? */
 | 
			
		||||
  unsigned long flags;
 | 
			
		||||
#endif
 | 
			
		||||
  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)
 | 
			
		||||
{
 | 
			
		||||
  ares_socket_t s;
 | 
			
		||||
  struct sockaddr_in sockin;
 | 
			
		||||
 | 
			
		||||
  /* Acquire a socket. */
 | 
			
		||||
  s = socket(AF_INET, SOCK_STREAM, 0);
 | 
			
		||||
  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;
 | 
			
		||||
  sockin.sin_addr = server->addr;
 | 
			
		||||
  sockin.sin_port = (unsigned short)(channel->tcp_port & 0xffff);
 | 
			
		||||
  if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1) {
 | 
			
		||||
    int err = SOCKERRNO;
 | 
			
		||||
 | 
			
		||||
    if (err != EINPROGRESS && err != EWOULDBLOCK) {
 | 
			
		||||
      closesocket(s);
 | 
			
		||||
      return -1;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SOCK_STATE_CALLBACK(channel, s, 1, 0);
 | 
			
		||||
  server->tcp_buffer_pos = 0;
 | 
			
		||||
  server->tcp_socket = s;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int open_udp_socket(ares_channel channel, struct server_state *server)
 | 
			
		||||
{
 | 
			
		||||
  ares_socket_t s;
 | 
			
		||||
  struct sockaddr_in sockin;
 | 
			
		||||
 | 
			
		||||
  /* Acquire a socket. */
 | 
			
		||||
  s = socket(AF_INET, SOCK_DGRAM, 0);
 | 
			
		||||
  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;
 | 
			
		||||
  sockin.sin_addr = server->addr;
 | 
			
		||||
  sockin.sin_port = (unsigned short)(channel->udp_port & 0xffff);
 | 
			
		||||
  if (connect(s, (struct sockaddr *) &sockin, sizeof(sockin)) == -1)
 | 
			
		||||
    {
 | 
			
		||||
      closesocket(s);
 | 
			
		||||
      return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  SOCK_STATE_CALLBACK(channel, s, 1, 0);
 | 
			
		||||
 | 
			
		||||
  server->udp_socket = s;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int same_questions(const unsigned char *qbuf, int qlen,
 | 
			
		||||
                          const unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct {
 | 
			
		||||
    const unsigned char *p;
 | 
			
		||||
    int qdcount;
 | 
			
		||||
    char *name;
 | 
			
		||||
    long namelen;
 | 
			
		||||
    int type;
 | 
			
		||||
    int dnsclass;
 | 
			
		||||
  } q, a;
 | 
			
		||||
  int i, j;
 | 
			
		||||
 | 
			
		||||
  if (qlen < HFIXEDSZ || alen < HFIXEDSZ)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  /* Extract qdcount from the request and reply buffers and compare them. */
 | 
			
		||||
  q.qdcount = DNS_HEADER_QDCOUNT(qbuf);
 | 
			
		||||
  a.qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  if (q.qdcount != a.qdcount)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  /* For each question in qbuf, find it in abuf. */
 | 
			
		||||
  q.p = qbuf + HFIXEDSZ;
 | 
			
		||||
  for (i = 0; i < q.qdcount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the question in the query. */
 | 
			
		||||
      if (ares_expand_name(q.p, qbuf, qlen, &q.name, &q.namelen)
 | 
			
		||||
          != ARES_SUCCESS)
 | 
			
		||||
        return 0;
 | 
			
		||||
      q.p += q.namelen;
 | 
			
		||||
      if (q.p + QFIXEDSZ > qbuf + qlen)
 | 
			
		||||
        {
 | 
			
		||||
          free(q.name);
 | 
			
		||||
          return 0;
 | 
			
		||||
        }
 | 
			
		||||
      q.type = DNS_QUESTION_TYPE(q.p);
 | 
			
		||||
      q.dnsclass = DNS_QUESTION_CLASS(q.p);
 | 
			
		||||
      q.p += QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
      /* Search for this question in the answer. */
 | 
			
		||||
      a.p = abuf + HFIXEDSZ;
 | 
			
		||||
      for (j = 0; j < a.qdcount; j++)
 | 
			
		||||
        {
 | 
			
		||||
          /* Decode the question in the answer. */
 | 
			
		||||
          if (ares_expand_name(a.p, abuf, alen, &a.name, &a.namelen)
 | 
			
		||||
              != ARES_SUCCESS)
 | 
			
		||||
            {
 | 
			
		||||
              free(q.name);
 | 
			
		||||
              return 0;
 | 
			
		||||
            }
 | 
			
		||||
          a.p += a.namelen;
 | 
			
		||||
          if (a.p + QFIXEDSZ > abuf + alen)
 | 
			
		||||
            {
 | 
			
		||||
              free(q.name);
 | 
			
		||||
              free(a.name);
 | 
			
		||||
              return 0;
 | 
			
		||||
            }
 | 
			
		||||
          a.type = DNS_QUESTION_TYPE(a.p);
 | 
			
		||||
          a.dnsclass = DNS_QUESTION_CLASS(a.p);
 | 
			
		||||
          a.p += QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
          /* Compare the decoded questions. */
 | 
			
		||||
          if (strcasecmp(q.name, a.name) == 0 && q.type == a.type
 | 
			
		||||
              && q.dnsclass == a.dnsclass)
 | 
			
		||||
            {
 | 
			
		||||
              free(a.name);
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          free(a.name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      free(q.name);
 | 
			
		||||
      if (j == a.qdcount)
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct query *end_query (ares_channel channel, struct query *query, int status,
 | 
			
		||||
                      unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct query **q, *next;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  query->callback(query->arg, status, abuf, alen);
 | 
			
		||||
  for (q = &channel->queries; *q; q = &(*q)->next)
 | 
			
		||||
    {
 | 
			
		||||
      if (*q == query)
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  *q = query->next;
 | 
			
		||||
  if (*q)
 | 
			
		||||
    next = (*q)->next;
 | 
			
		||||
  else
 | 
			
		||||
    next = NULL;
 | 
			
		||||
  free(query->tcpbuf);
 | 
			
		||||
  free(query->skip_server);
 | 
			
		||||
  free(query);
 | 
			
		||||
 | 
			
		||||
  /* Simple cleanup policy: if no queries are remaining, close all
 | 
			
		||||
   * network sockets unless STAYOPEN is set.
 | 
			
		||||
   */
 | 
			
		||||
  if (!channel->queries && !(channel->flags & ARES_FLAG_STAYOPEN))
 | 
			
		||||
    {
 | 
			
		||||
      for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
        ares__close_sockets(channel, &channel->servers[i]);
 | 
			
		||||
    }
 | 
			
		||||
  return (next);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										142
									
								
								ares/ares_query.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								ares/ares_query.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_QUERY 3 "24 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_query \- Initiate a single-question DNS query
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	unsigned char *\fIabuf\fP, int \fIalen\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_query(ares_channel \fIchannel\fP, const char *\fIname\fP,
 | 
			
		||||
.B 	int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
 | 
			
		||||
.B	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_query
 | 
			
		||||
function initiates a single-question DNS query on the name service
 | 
			
		||||
channel identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the query name as a NUL-terminated C string of period-separated
 | 
			
		||||
labels optionally ending with a period; periods and backslashes within
 | 
			
		||||
a label must be escaped with a backslash.  The parameters
 | 
			
		||||
.I dnsclass
 | 
			
		||||
and
 | 
			
		||||
.I type
 | 
			
		||||
give the class and type of the query using the values defined in
 | 
			
		||||
.BR <arpa/nameser.h> .
 | 
			
		||||
When the query is complete or has failed, the ares library will invoke
 | 
			
		||||
.IR callback .
 | 
			
		||||
Completion or failure of the query may happen immediately, or may
 | 
			
		||||
happen during a later call to
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
or
 | 
			
		||||
.BR ares_destroy (3).
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_query
 | 
			
		||||
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 query completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The query completed but contains no answers.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EFORMERR
 | 
			
		||||
The query completed but the server claims that the query was
 | 
			
		||||
malformatted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ESERVFAIL
 | 
			
		||||
The query completed but the server claims to have experienced a
 | 
			
		||||
failure.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
The query completed but the queried-for domain name was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
The query completed but the server does not implement the operation
 | 
			
		||||
requested by the query.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EREFUSED
 | 
			
		||||
The query completed but the server refused the query.  (This code can
 | 
			
		||||
only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The query name
 | 
			
		||||
.I name
 | 
			
		||||
could not be encoded as a domain name, either because it contained a
 | 
			
		||||
zero-length label or because it contained a label of more than 63
 | 
			
		||||
characters.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ETIMEOUT
 | 
			
		||||
No name servers responded within the timeout period.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ECONNREFUSED
 | 
			
		||||
No name servers could be contacted.
 | 
			
		||||
.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.
 | 
			
		||||
.PP
 | 
			
		||||
If the query completed (even if there was something wrong with it, as
 | 
			
		||||
indicated by some of the above error codes), the callback argument
 | 
			
		||||
.I abuf
 | 
			
		||||
points to a result buffer of length
 | 
			
		||||
.IR alen .
 | 
			
		||||
If the query did not complete,
 | 
			
		||||
.I abuf
 | 
			
		||||
will be NULL and
 | 
			
		||||
.I alen
 | 
			
		||||
will be 0.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										174
									
								
								ares/ares_query.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								ares/ares_query.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,174 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
struct qquery {
 | 
			
		||||
  ares_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void qcallback(void *arg, int status, unsigned char *abuf, int alen);
 | 
			
		||||
 | 
			
		||||
void ares__rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len)
 | 
			
		||||
{
 | 
			
		||||
  unsigned char x;
 | 
			
		||||
  unsigned char y;
 | 
			
		||||
  unsigned char* state;
 | 
			
		||||
  unsigned char xorIndex;
 | 
			
		||||
  short counter;
 | 
			
		||||
 | 
			
		||||
  x = key->x;
 | 
			
		||||
  y = key->y;
 | 
			
		||||
 | 
			
		||||
  state = &key->state[0];
 | 
			
		||||
  for(counter = 0; counter < buffer_len; counter ++)
 | 
			
		||||
  {
 | 
			
		||||
	x = (x + 1) % 256;
 | 
			
		||||
	y = (state[x] + y) % 256;
 | 
			
		||||
	ARES_SWAP_BYTE(&state[x], &state[y]);
 | 
			
		||||
 | 
			
		||||
	xorIndex = (state[x] + state[y]) % 256;
 | 
			
		||||
 | 
			
		||||
	buffer_ptr[counter] ^= state[xorIndex];
 | 
			
		||||
  }
 | 
			
		||||
  key->x = x;
 | 
			
		||||
  key->y = y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct query* find_query_by_id(ares_channel channel, int id)
 | 
			
		||||
{
 | 
			
		||||
  int qid;
 | 
			
		||||
  struct query* q;
 | 
			
		||||
  DNS_HEADER_SET_QID(((unsigned char*)&qid), id);
 | 
			
		||||
 | 
			
		||||
  /* Find the query corresponding to this packet. */
 | 
			
		||||
  for (q = channel->queries; q; q = q->next)
 | 
			
		||||
  {
 | 
			
		||||
	if (q->qid == qid)
 | 
			
		||||
	  return q;
 | 
			
		||||
  }
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* a unique query id is generated using an rc4 key. Since the id may already
 | 
			
		||||
   be used by a running query (as infrequent as it may be), a lookup is
 | 
			
		||||
   performed per id generation. In practice this search should happen only
 | 
			
		||||
   once per newly generated id
 | 
			
		||||
*/
 | 
			
		||||
static int generate_unique_id(ares_channel channel)
 | 
			
		||||
{
 | 
			
		||||
  int id;
 | 
			
		||||
 | 
			
		||||
  do {
 | 
			
		||||
	id = ares__generate_new_id(&channel->id_key);
 | 
			
		||||
  } while (find_query_by_id(channel,id));
 | 
			
		||||
 | 
			
		||||
  return id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                int type, ares_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct qquery *qquery;
 | 
			
		||||
  unsigned char *qbuf;
 | 
			
		||||
  int qlen, rd, status;
 | 
			
		||||
 | 
			
		||||
  /* Compose the query. */
 | 
			
		||||
  rd = !(channel->flags & ARES_FLAG_NORECURSE);
 | 
			
		||||
  status = ares_mkquery(name, dnsclass, type, channel->next_id, rd, &qbuf,
 | 
			
		||||
                        &qlen);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, status, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  channel->next_id = generate_unique_id(channel);
 | 
			
		||||
 | 
			
		||||
  /* Allocate and fill in the query structure. */
 | 
			
		||||
  qquery = malloc(sizeof(struct qquery));
 | 
			
		||||
  if (!qquery)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(qbuf);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  qquery->callback = callback;
 | 
			
		||||
  qquery->arg = arg;
 | 
			
		||||
 | 
			
		||||
  /* Send it off.  qcallback will be called when we get an answer. */
 | 
			
		||||
  ares_send(channel, qbuf, qlen, qcallback, qquery);
 | 
			
		||||
  ares_free_string(qbuf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void qcallback(void *arg, int status, unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct qquery *qquery = (struct qquery *) arg;
 | 
			
		||||
  unsigned int ancount;
 | 
			
		||||
  int rcode;
 | 
			
		||||
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    qquery->callback(qquery->arg, status, abuf, alen);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Pull the response code and answer count from the packet. */
 | 
			
		||||
      rcode = DNS_HEADER_RCODE(abuf);
 | 
			
		||||
      ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
 | 
			
		||||
      /* Convert errors. */
 | 
			
		||||
      switch (rcode)
 | 
			
		||||
        {
 | 
			
		||||
        case NOERROR:
 | 
			
		||||
          status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA;
 | 
			
		||||
          break;
 | 
			
		||||
        case FORMERR:
 | 
			
		||||
          status = ARES_EFORMERR;
 | 
			
		||||
          break;
 | 
			
		||||
        case SERVFAIL:
 | 
			
		||||
          status = ARES_ESERVFAIL;
 | 
			
		||||
          break;
 | 
			
		||||
        case NXDOMAIN:
 | 
			
		||||
          status = ARES_ENOTFOUND;
 | 
			
		||||
          break;
 | 
			
		||||
        case NOTIMP:
 | 
			
		||||
          status = ARES_ENOTIMP;
 | 
			
		||||
          break;
 | 
			
		||||
        case REFUSED:
 | 
			
		||||
          status = ARES_EREFUSED;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      qquery->callback(qquery->arg, status, abuf, alen);
 | 
			
		||||
    }
 | 
			
		||||
  free(qquery);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								ares/ares_save_options.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								ares/ares_save_options.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_SAVE_OPTIONS 3 "1 June 2007"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_save_options \- Save configuration values obtained from initialized ares_channel
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_save_options(ares_channel \fIchannel\fP, struct ares_options *\fIoptions\fP, int *\fIoptmask\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_save_options
 | 
			
		||||
function saves the channel data identified by
 | 
			
		||||
.IR channel ,
 | 
			
		||||
into the options struct identified by
 | 
			
		||||
.IR options ,
 | 
			
		||||
and saves the mask of options which are set to the integer
 | 
			
		||||
pointer (passed by reference) identified by
 | 
			
		||||
.IR optmask .
 | 
			
		||||
 | 
			
		||||
The resultant options and optmask are then able to be
 | 
			
		||||
passed directly to ares_init_options.  When the options
 | 
			
		||||
are no longer needed, ares_destroy_options should be called
 | 
			
		||||
to free any associated memory.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_destroy_options (3),
 | 
			
		||||
.BR ares_init_options (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Brad House
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										144
									
								
								ares/ares_search.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								ares/ares_search.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,144 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_SEARCH 3 "24 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_search \- Initiate a DNS query with domain search
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	unsigned char *\fIabuf\fP, int \fIalen\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_search(ares_channel \fIchannel\fP, const char *\fIname\fP,
 | 
			
		||||
.B 	int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
 | 
			
		||||
.B	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_search
 | 
			
		||||
function initiates a series of single-question DNS queries on the name
 | 
			
		||||
service channel identified by
 | 
			
		||||
.IR channel ,
 | 
			
		||||
using the channel's search domains as well as a host alias file given
 | 
			
		||||
by the HOSTALIAS environment variable.  The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the alias name or the base of the query name as a NUL-terminated
 | 
			
		||||
C string of period-separated labels; if it ends with a period, the
 | 
			
		||||
channel's search domains will not be used.  Periods and backslashes
 | 
			
		||||
within a label must be escaped with a backslash.  The parameters
 | 
			
		||||
.I dnsclass
 | 
			
		||||
and
 | 
			
		||||
.I type
 | 
			
		||||
give the class and type of the query using the values defined in
 | 
			
		||||
.BR <arpa/nameser.h> .
 | 
			
		||||
When the query sequence is complete or has failed, the ares library
 | 
			
		||||
will invoke
 | 
			
		||||
.IR callback .
 | 
			
		||||
Completion or failure of the query sequence may happen immediately, or
 | 
			
		||||
may happen during a later call to
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
or
 | 
			
		||||
.BR ares_destroy (3).
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_search
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query sequence ended with a successful query
 | 
			
		||||
and, if not, how the query sequence failed.  It may have any of the
 | 
			
		||||
following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
A query completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
No query completed successfully; when the query was tried without a
 | 
			
		||||
search domain appended, a response was returned with no answers.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EFORMERR
 | 
			
		||||
A query completed but the server claimed that the query was
 | 
			
		||||
malformatted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ESERVFAIL
 | 
			
		||||
No query completed successfully; when the query was tried without a
 | 
			
		||||
search domain appended, the server claimed to have experienced a
 | 
			
		||||
failure.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
No query completed successfully; when the query was tried without a
 | 
			
		||||
search domain appended, the server reported that the queried-for
 | 
			
		||||
domain name was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
A query completed but the server does not implement the operation
 | 
			
		||||
requested by the query.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EREFUSED
 | 
			
		||||
A query completed but the server refused the query.  (This code can
 | 
			
		||||
only occur returned if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_TIMEOUT
 | 
			
		||||
No name servers responded to a query within the timeout period.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ECONNREFUSED
 | 
			
		||||
No name servers could be contacted.
 | 
			
		||||
.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.
 | 
			
		||||
.PP
 | 
			
		||||
If a query completed successfully, the callback argument
 | 
			
		||||
.I abuf
 | 
			
		||||
points to a result buffer of length
 | 
			
		||||
.IR alen .
 | 
			
		||||
If the query did not complete successfully,
 | 
			
		||||
.I abuf
 | 
			
		||||
will usually be NULL and
 | 
			
		||||
.I alen
 | 
			
		||||
will usually be 0, but in some cases an unsuccessful query result may
 | 
			
		||||
be placed in
 | 
			
		||||
.IR abuf .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										299
									
								
								ares/ares_search.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										299
									
								
								ares/ares_search.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,299 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
struct search_query {
 | 
			
		||||
  /* Arguments passed to ares_search */
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  char *name;                   /* copied into an allocated buffer */
 | 
			
		||||
  int dnsclass;
 | 
			
		||||
  int type;
 | 
			
		||||
  ares_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
 | 
			
		||||
  int status_as_is;             /* error status from trying as-is */
 | 
			
		||||
  int next_domain;              /* next search domain to try */
 | 
			
		||||
  int trying_as_is;             /* current query is for name as-is */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void search_callback(void *arg, int status, unsigned char *abuf,
 | 
			
		||||
                            int alen);
 | 
			
		||||
static void end_squery(struct search_query *squery, int status,
 | 
			
		||||
                       unsigned char *abuf, int alen);
 | 
			
		||||
static int cat_domain(const char *name, const char *domain, char **s);
 | 
			
		||||
static int single_domain(ares_channel channel, const char *name, char **s);
 | 
			
		||||
 | 
			
		||||
void ares_search(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                 int type, ares_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct search_query *squery;
 | 
			
		||||
  char *s;
 | 
			
		||||
  const char *p;
 | 
			
		||||
  int status, ndots;
 | 
			
		||||
 | 
			
		||||
  /* If name only yields one domain to search, then we don't have
 | 
			
		||||
   * to keep extra state, so just do an ares_query().
 | 
			
		||||
   */
 | 
			
		||||
  status = single_domain(channel, name, &s);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, status, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  if (s)
 | 
			
		||||
    {
 | 
			
		||||
      ares_query(channel, s, dnsclass, type, callback, arg);
 | 
			
		||||
      free(s);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Allocate a search_query structure to hold the state necessary for
 | 
			
		||||
   * doing multiple lookups.
 | 
			
		||||
   */
 | 
			
		||||
  squery = malloc(sizeof(struct search_query));
 | 
			
		||||
  if (!squery)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  squery->channel = channel;
 | 
			
		||||
  squery->name = strdup(name);
 | 
			
		||||
  if (!squery->name)
 | 
			
		||||
    {
 | 
			
		||||
      free(squery);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  squery->dnsclass = dnsclass;
 | 
			
		||||
  squery->type = type;
 | 
			
		||||
  squery->status_as_is = -1;
 | 
			
		||||
  squery->callback = callback;
 | 
			
		||||
  squery->arg = arg;
 | 
			
		||||
 | 
			
		||||
  /* Count the number of dots in name. */
 | 
			
		||||
  ndots = 0;
 | 
			
		||||
  for (p = name; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      if (*p == '.')
 | 
			
		||||
        ndots++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* If ndots is at least the channel ndots threshold (usually 1),
 | 
			
		||||
   * then we try the name as-is first.  Otherwise, we try the name
 | 
			
		||||
   * as-is last.
 | 
			
		||||
   */
 | 
			
		||||
  if (ndots >= channel->ndots)
 | 
			
		||||
    {
 | 
			
		||||
      /* Try the name as-is first. */
 | 
			
		||||
      squery->next_domain = 0;
 | 
			
		||||
      squery->trying_as_is = 1;
 | 
			
		||||
      ares_query(channel, name, dnsclass, type, search_callback, squery);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Try the name as-is last; start with the first search domain. */
 | 
			
		||||
      squery->next_domain = 1;
 | 
			
		||||
      squery->trying_as_is = 0;
 | 
			
		||||
      status = cat_domain(name, channel->domains[0], &s);
 | 
			
		||||
      if (status == ARES_SUCCESS)
 | 
			
		||||
        {
 | 
			
		||||
          ares_query(channel, s, dnsclass, type, search_callback, squery);
 | 
			
		||||
          free(s);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* failed, free the malloc()ed memory */
 | 
			
		||||
        free(squery->name);
 | 
			
		||||
        free(squery);
 | 
			
		||||
        callback(arg, status, NULL, 0);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void search_callback(void *arg, int status, unsigned char *abuf,
 | 
			
		||||
                            int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct search_query *squery = (struct search_query *) arg;
 | 
			
		||||
  ares_channel channel = squery->channel;
 | 
			
		||||
  char *s;
 | 
			
		||||
 | 
			
		||||
  /* Stop searching unless we got a non-fatal error. */
 | 
			
		||||
  if (status != ARES_ENODATA && status != ARES_ESERVFAIL
 | 
			
		||||
      && status != ARES_ENOTFOUND)
 | 
			
		||||
    end_squery(squery, status, abuf, alen);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Save the status if we were trying as-is. */
 | 
			
		||||
      if (squery->trying_as_is)
 | 
			
		||||
        squery->status_as_is = status;
 | 
			
		||||
      if (squery->next_domain < channel->ndomains)
 | 
			
		||||
        {
 | 
			
		||||
          /* Try the next domain. */
 | 
			
		||||
          status = cat_domain(squery->name,
 | 
			
		||||
                              channel->domains[squery->next_domain], &s);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            end_squery(squery, status, NULL, 0);
 | 
			
		||||
          else
 | 
			
		||||
            {
 | 
			
		||||
              squery->trying_as_is = 0;
 | 
			
		||||
              squery->next_domain++;
 | 
			
		||||
              ares_query(channel, s, squery->dnsclass, squery->type,
 | 
			
		||||
                         search_callback, squery);
 | 
			
		||||
              free(s);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      else if (squery->status_as_is == -1)
 | 
			
		||||
        {
 | 
			
		||||
          /* Try the name as-is at the end. */
 | 
			
		||||
          squery->trying_as_is = 1;
 | 
			
		||||
          ares_query(channel, squery->name, squery->dnsclass, squery->type,
 | 
			
		||||
                     search_callback, squery);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        end_squery(squery, squery->status_as_is, NULL, 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void end_squery(struct search_query *squery, int status,
 | 
			
		||||
                       unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  squery->callback(squery->arg, status, abuf, alen);
 | 
			
		||||
  free(squery->name);
 | 
			
		||||
  free(squery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Concatenate two domains. */
 | 
			
		||||
static int cat_domain(const char *name, const char *domain, char **s)
 | 
			
		||||
{
 | 
			
		||||
  size_t nlen = strlen(name);
 | 
			
		||||
  size_t dlen = strlen(domain);
 | 
			
		||||
 | 
			
		||||
  *s = malloc(nlen + 1 + dlen + 1);
 | 
			
		||||
  if (!*s)
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  memcpy(*s, name, nlen);
 | 
			
		||||
  (*s)[nlen] = '.';
 | 
			
		||||
  memcpy(*s + nlen + 1, domain, dlen);
 | 
			
		||||
  (*s)[nlen + 1 + dlen] = 0;
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Determine if this name only yields one query.  If it does, set *s to
 | 
			
		||||
 * the string we should query, in an allocated buffer.  If not, set *s
 | 
			
		||||
 * to NULL.
 | 
			
		||||
 */
 | 
			
		||||
static int single_domain(ares_channel channel, const char *name, char **s)
 | 
			
		||||
{
 | 
			
		||||
  size_t len = strlen(name);
 | 
			
		||||
  const char *hostaliases;
 | 
			
		||||
  FILE *fp;
 | 
			
		||||
  char *line = NULL;
 | 
			
		||||
  int linesize, status;
 | 
			
		||||
  const char *p, *q;
 | 
			
		||||
  int error;
 | 
			
		||||
 | 
			
		||||
  /* If the name contains a trailing dot, then the single query is the name
 | 
			
		||||
   * sans the trailing dot.
 | 
			
		||||
   */
 | 
			
		||||
  if (name[len - 1] == '.')
 | 
			
		||||
    {
 | 
			
		||||
      *s = strdup(name);
 | 
			
		||||
      return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.'))
 | 
			
		||||
    {
 | 
			
		||||
      /* The name might be a host alias. */
 | 
			
		||||
      hostaliases = getenv("HOSTALIASES");
 | 
			
		||||
      if (hostaliases)
 | 
			
		||||
        {
 | 
			
		||||
          fp = fopen(hostaliases, "r");
 | 
			
		||||
          if (fp)
 | 
			
		||||
            {
 | 
			
		||||
              while ((status = ares__read_line(fp, &line, &linesize))
 | 
			
		||||
                     == ARES_SUCCESS)
 | 
			
		||||
                {
 | 
			
		||||
                  if (strncasecmp(line, name, len) != 0 ||
 | 
			
		||||
                      !ISSPACE(line[len]))
 | 
			
		||||
                    continue;
 | 
			
		||||
                  p = line + len;
 | 
			
		||||
                  while (ISSPACE(*p))
 | 
			
		||||
                    p++;
 | 
			
		||||
                  if (*p)
 | 
			
		||||
                    {
 | 
			
		||||
                      q = p + 1;
 | 
			
		||||
                      while (*q && !ISSPACE(*q))
 | 
			
		||||
                        q++;
 | 
			
		||||
                      *s = malloc(q - p + 1);
 | 
			
		||||
                      if (*s)
 | 
			
		||||
                        {
 | 
			
		||||
                          memcpy(*s, p, q - p);
 | 
			
		||||
                          (*s)[q - p] = 0;
 | 
			
		||||
                        }
 | 
			
		||||
                      free(line);
 | 
			
		||||
                      fclose(fp);
 | 
			
		||||
                      return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
              free(line);
 | 
			
		||||
              fclose(fp);
 | 
			
		||||
              if (status != ARES_SUCCESS)
 | 
			
		||||
                return status;
 | 
			
		||||
            }
 | 
			
		||||
          else 
 | 
			
		||||
            {
 | 
			
		||||
              error = ERRNO;
 | 
			
		||||
              switch(error) 
 | 
			
		||||
                {
 | 
			
		||||
                case ENOENT:
 | 
			
		||||
                case ESRCH:
 | 
			
		||||
                  break;
 | 
			
		||||
                default:
 | 
			
		||||
                  DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
 | 
			
		||||
                                 error, strerror(error)));
 | 
			
		||||
                  DEBUGF(fprintf(stderr, "Error opening file: %s\n", 
 | 
			
		||||
                                 hostaliases));
 | 
			
		||||
                  *s = NULL;
 | 
			
		||||
                  return ARES_EFILE;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0)
 | 
			
		||||
    {
 | 
			
		||||
      /* No domain search to do; just try the name as-is. */
 | 
			
		||||
      *s = strdup(name);
 | 
			
		||||
      return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  *s = NULL;
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										116
									
								
								ares/ares_send.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								ares/ares_send.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_SEND 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_send \- Initiate a DNS query
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	unsigned char *\fIabuf\fP, int \fIalen\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
 | 
			
		||||
.B 	int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_send
 | 
			
		||||
function initiates a DNS query on the name service channel identified
 | 
			
		||||
by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameters
 | 
			
		||||
.I qbuf
 | 
			
		||||
and
 | 
			
		||||
.I qlen
 | 
			
		||||
give the DNS query, which should already have been formatted according
 | 
			
		||||
to the DNS protocol.  When the query is complete or has failed, the
 | 
			
		||||
ares library will invoke
 | 
			
		||||
.IR callback .
 | 
			
		||||
Completion or failure of the query may happen immediately, or may
 | 
			
		||||
happen during a later call to
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
or
 | 
			
		||||
.BR ares_destroy (3).
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_send
 | 
			
		||||
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 query completed.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADQUERY
 | 
			
		||||
The query buffer was poorly formed (was not long enough for a DNS
 | 
			
		||||
header or was too long for TCP transmission).
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ETIMEOUT
 | 
			
		||||
No name servers responded within the timeout period.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ECONNREFUSED
 | 
			
		||||
No name servers could be contacted.
 | 
			
		||||
.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.
 | 
			
		||||
.PP
 | 
			
		||||
If the query completed, the callback argument
 | 
			
		||||
.I abuf
 | 
			
		||||
points to a result buffer of length
 | 
			
		||||
.IR alen .
 | 
			
		||||
If the query did not complete,
 | 
			
		||||
.I abuf
 | 
			
		||||
will be NULL and
 | 
			
		||||
.I alen
 | 
			
		||||
will be 0.
 | 
			
		||||
.PP
 | 
			
		||||
Unless the flag
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
was set at channel initialization time,
 | 
			
		||||
.B ares_send
 | 
			
		||||
will normally ignore responses whose questions do not match the
 | 
			
		||||
questions in
 | 
			
		||||
.IR qbuf ,
 | 
			
		||||
as well as responses with reply codes of
 | 
			
		||||
.BR SERVFAIL ,
 | 
			
		||||
.BR NOTIMP ,
 | 
			
		||||
and
 | 
			
		||||
.BR REFUSED .
 | 
			
		||||
Unlike other query functions in the ares library, however,
 | 
			
		||||
.B ares_send
 | 
			
		||||
does not inspect the header of the reply packet to determine the error
 | 
			
		||||
status, so a callback status of
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
does not reflect as much about the response as for other query
 | 
			
		||||
functions.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										107
									
								
								ares/ares_send.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								ares/ares_send.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
#include "nameser.h"
 | 
			
		||||
#else
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
 | 
			
		||||
               ares_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct query *query;
 | 
			
		||||
  int i;
 | 
			
		||||
  time_t now;
 | 
			
		||||
 | 
			
		||||
  /* Verify that the query is at least long enough to hold the header. */
 | 
			
		||||
  if (qlen < HFIXEDSZ || qlen >= (1 << 16))
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_EBADQUERY, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Allocate space for query and allocated fields. */
 | 
			
		||||
  query = malloc(sizeof(struct query));
 | 
			
		||||
  if (!query)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  query->tcpbuf = malloc(qlen + 2);
 | 
			
		||||
  if (!query->tcpbuf)
 | 
			
		||||
    {
 | 
			
		||||
      free(query);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  query->skip_server = malloc(channel->nservers * sizeof(int));
 | 
			
		||||
  if (!query->skip_server)
 | 
			
		||||
    {
 | 
			
		||||
      free(query->tcpbuf);
 | 
			
		||||
      free(query);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Compute the query ID.  Start with no timeout. */
 | 
			
		||||
  query->qid = (unsigned short)DNS_HEADER_QID(qbuf);
 | 
			
		||||
  query->timeout = 0;
 | 
			
		||||
 | 
			
		||||
  /* Form the TCP query buffer by prepending qlen (as two
 | 
			
		||||
   * network-order bytes) to qbuf.
 | 
			
		||||
   */
 | 
			
		||||
  query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff);
 | 
			
		||||
  query->tcpbuf[1] = (unsigned char)(qlen & 0xff);
 | 
			
		||||
  memcpy(query->tcpbuf + 2, qbuf, qlen);
 | 
			
		||||
  query->tcplen = qlen + 2;
 | 
			
		||||
 | 
			
		||||
  /* Fill in query arguments. */
 | 
			
		||||
  query->qbuf = query->tcpbuf + 2;
 | 
			
		||||
  query->qlen = qlen;
 | 
			
		||||
  query->callback = callback;
 | 
			
		||||
  query->arg = arg;
 | 
			
		||||
 | 
			
		||||
  /* Initialize query status. */
 | 
			
		||||
  query->try = 0;
 | 
			
		||||
  query->server = 0;
 | 
			
		||||
  for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
    query->skip_server[i] = 0;
 | 
			
		||||
  query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > PACKETSZ;
 | 
			
		||||
  query->error_status = ARES_ECONNREFUSED;
 | 
			
		||||
 | 
			
		||||
  /* Chain the query into this channel's query list. */
 | 
			
		||||
  query->next = channel->queries;
 | 
			
		||||
  channel->queries = query;
 | 
			
		||||
 | 
			
		||||
  /* Perform the first query action. */
 | 
			
		||||
  time(&now);
 | 
			
		||||
  ares__send_query(channel, query, now);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								ares/ares_strerror.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								ares/ares_strerror.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_STRERROR 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_strerror \- Get the description of an ares library error code
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B const char *ares_strerror(int \fIcode\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_strerror
 | 
			
		||||
function gets the description of the ares library error code
 | 
			
		||||
.IR code ,
 | 
			
		||||
returning the result as a NUL-terminated C string.
 | 
			
		||||
.SH NOTES
 | 
			
		||||
This function is not compatible with ares, it takes a different set of
 | 
			
		||||
arguments.
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										51
									
								
								ares/ares_strerror.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								ares/ares_strerror.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
 | 
			
		||||
const char *ares_strerror(int code)
 | 
			
		||||
{
 | 
			
		||||
  /* Return a string literal from a table. */
 | 
			
		||||
  const char *errtext[] = {
 | 
			
		||||
    "Successful completion",
 | 
			
		||||
    "DNS server returned answer with no data",
 | 
			
		||||
    "DNS server claims query was misformatted",
 | 
			
		||||
    "DNS server returned general failure",
 | 
			
		||||
    "Domain name not found",
 | 
			
		||||
    "DNS server does not implement requested operation",
 | 
			
		||||
    "DNS server refused query",
 | 
			
		||||
    "Misformatted DNS query",
 | 
			
		||||
    "Misformatted domain name",
 | 
			
		||||
    "Unsupported address family",
 | 
			
		||||
    "Misformatted DNS reply",
 | 
			
		||||
    "Could not contact DNS servers",
 | 
			
		||||
    "Timeout while contacting DNS servers",
 | 
			
		||||
    "End of file",
 | 
			
		||||
    "Error reading file",
 | 
			
		||||
    "Out of memory",
 | 
			
		||||
    "Channel is being destroyed",
 | 
			
		||||
    "Misformatted string",
 | 
			
		||||
    "Illegal flags specified",
 | 
			
		||||
    "Given hostname is not numeric",
 | 
			
		||||
    "Illegal hints flags specified"
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  DEBUGASSERT(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)));
 | 
			
		||||
  return errtext[code];
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								ares/ares_timeout.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ares/ares_timeout.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_TIMEOUT 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_fds \- Get file descriptors to select on for name service
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B struct timeval *ares_timeout(ares_channel \fIchannel\fP,
 | 
			
		||||
.B	struct timeval *\fImaxtv\fP, struct timeval *\fItvbuf\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_timeout
 | 
			
		||||
function determines the maximum time for which the caller should wait before
 | 
			
		||||
invoking \fIares_process(3)\fP to process timeouts.  The parameter
 | 
			
		||||
.I maxtv
 | 
			
		||||
specifies a existing maximum timeout, or
 | 
			
		||||
.B NULL
 | 
			
		||||
if the caller does not wish to apply a maximum timeout.  The parameter
 | 
			
		||||
.I tvbuf
 | 
			
		||||
must point to a writable buffer of type
 | 
			
		||||
.BR "struct timeval" .
 | 
			
		||||
It is valid for
 | 
			
		||||
.I maxtv
 | 
			
		||||
and
 | 
			
		||||
.I tvbuf
 | 
			
		||||
to have the same value.
 | 
			
		||||
.PP
 | 
			
		||||
If no queries have timeouts pending sooner than the given maximum
 | 
			
		||||
timeout,
 | 
			
		||||
.B ares_timeout
 | 
			
		||||
returns the value of
 | 
			
		||||
.IR maxtv;
 | 
			
		||||
otherwise
 | 
			
		||||
.B ares_timeout
 | 
			
		||||
stores the appropriate timeout value into the buffer pointed to by
 | 
			
		||||
.I tvbuf
 | 
			
		||||
and returns the value of
 | 
			
		||||
.IR tvbuf .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_fds (3),
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										67
									
								
								ares/ares_timeout.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								ares/ares_timeout.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
 | 
			
		||||
                             struct timeval *tvbuf)
 | 
			
		||||
{
 | 
			
		||||
  struct query *query;
 | 
			
		||||
  time_t now;
 | 
			
		||||
  time_t offset, min_offset; /* these use time_t since some 32 bit systems
 | 
			
		||||
                                still use 64 bit time_t! (like VS2005) */
 | 
			
		||||
 | 
			
		||||
  /* No queries, no timeout (and no fetch of the current time). */
 | 
			
		||||
  if (!channel->queries)
 | 
			
		||||
    return maxtv;
 | 
			
		||||
 | 
			
		||||
  /* Find the minimum timeout for the current set of queries. */
 | 
			
		||||
  time(&now);
 | 
			
		||||
  min_offset = -1;
 | 
			
		||||
  for (query = channel->queries; query; query = query->next)
 | 
			
		||||
    {
 | 
			
		||||
      if (query->timeout == 0)
 | 
			
		||||
        continue;
 | 
			
		||||
      offset = query->timeout - now;
 | 
			
		||||
      if (offset < 0)
 | 
			
		||||
        offset = 0;
 | 
			
		||||
      if (min_offset == -1 || offset < min_offset)
 | 
			
		||||
        min_offset = offset;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* If we found a minimum timeout and it's sooner than the one
 | 
			
		||||
   * specified in maxtv (if any), return it.  Otherwise go with
 | 
			
		||||
   * maxtv.
 | 
			
		||||
   */
 | 
			
		||||
  if (min_offset != -1 && (!maxtv || min_offset <= maxtv->tv_sec))
 | 
			
		||||
    {
 | 
			
		||||
      tvbuf->tv_sec = (long)min_offset;
 | 
			
		||||
      tvbuf->tv_usec = 0;
 | 
			
		||||
      return tvbuf;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    return maxtv;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								ares/ares_version.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ares/ares_version.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 2004 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_VERSION 3 "29 January 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_version \- Get the version number of the library
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B const char *ares_version(int *\fIversion\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_version
 | 
			
		||||
function gets the library version as a string and optionally as an integer
 | 
			
		||||
stored in the
 | 
			
		||||
.IR version ,
 | 
			
		||||
argument. If you pass a NULL, no integer is attempted to be returned.
 | 
			
		||||
 | 
			
		||||
The integer is built up as 24bit number, with 8 separate bits used for major
 | 
			
		||||
number, minor number and patch number. This makes a version string such as
 | 
			
		||||
1.2.3 will be returned as the hexadecimal number 0x010203 (decimal 66051).
 | 
			
		||||
.SH NOTES
 | 
			
		||||
This function is not compatible with ares.
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Daniel Stenberg
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								ares/ares_version.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ares/ares_version.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include "ares_version.h"
 | 
			
		||||
 | 
			
		||||
const char *ares_version(int *version)
 | 
			
		||||
{
 | 
			
		||||
  if(version)
 | 
			
		||||
    *version = ARES_VERSION;
 | 
			
		||||
 | 
			
		||||
  return ARES_VERSION_STR;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								ares/ares_version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								ares/ares_version.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
#ifndef ARES__VERSION_H
 | 
			
		||||
#define ARES__VERSION_H
 | 
			
		||||
 | 
			
		||||
#define ARES_VERSION_MAJOR 1
 | 
			
		||||
#define ARES_VERSION_MINOR 4
 | 
			
		||||
#define ARES_VERSION_PATCH 0
 | 
			
		||||
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
 | 
			
		||||
                       (ARES_VERSION_MINOR<<8)|\
 | 
			
		||||
                       (ARES_VERSION_PATCH))
 | 
			
		||||
#define ARES_VERSION_STR "1.4.0-CVS"
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const char *ares_version(int *version);
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										60
									
								
								ares/bitncmp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								ares/bitncmp.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
 | 
			
		||||
 * Copyright (c) 1996,1999 by Internet Software Consortium.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
 * copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
 | 
			
		||||
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
 * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
 | 
			
		||||
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
			
		||||
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 | 
			
		||||
 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_BITNCMP
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include "bitncmp.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * int
 | 
			
		||||
 * bitncmp(l, r, n)
 | 
			
		||||
 *	compare bit masks l and r, for n bits.
 | 
			
		||||
 * return:
 | 
			
		||||
 *	-1, 1, or 0 in the libc tradition.
 | 
			
		||||
 * note:
 | 
			
		||||
 *	network byte order assumed.  this means 192.5.5.240/28 has
 | 
			
		||||
 *	0x11110000 in its fourth octet.
 | 
			
		||||
 * author:
 | 
			
		||||
 *	Paul Vixie (ISC), June 1996
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
ares_bitncmp(const void *l, const void *r, int n) {
 | 
			
		||||
	unsigned int lb, rb;
 | 
			
		||||
	int x, b;
 | 
			
		||||
 | 
			
		||||
	b = n / 8;
 | 
			
		||||
	x = memcmp(l, r, b);
 | 
			
		||||
	if (x)
 | 
			
		||||
		return (x);
 | 
			
		||||
 | 
			
		||||
	lb = ((const unsigned char *)l)[b];
 | 
			
		||||
	rb = ((const unsigned char *)r)[b];
 | 
			
		||||
	for (b = n % 8; b > 0; b--) {
 | 
			
		||||
		if ((lb & 0x80) != (rb & 0x80)) {
 | 
			
		||||
			if (lb & 0x80)
 | 
			
		||||
				return (1);
 | 
			
		||||
			return (-1);
 | 
			
		||||
		}
 | 
			
		||||
		lb <<= 1;
 | 
			
		||||
		rb <<= 1;
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										26
									
								
								ares/bitncmp.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								ares/bitncmp.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
#ifndef __ARES_BITNCMP_H
 | 
			
		||||
#define __ARES_BITNCMP_H
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_BITNCMP
 | 
			
		||||
int ares_bitncmp(const void *l, const void *r, int n);
 | 
			
		||||
#else
 | 
			
		||||
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ARES_BITNCMP_H */
 | 
			
		||||
							
								
								
									
										7
									
								
								ares/buildconf
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								ares/buildconf
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
${LIBTOOLIZE:-libtoolize} --copy --automake --force
 | 
			
		||||
${ACLOCAL:-aclocal} $ACLOCAL_FLAGS
 | 
			
		||||
${AUTOHEADER:-autoheader}
 | 
			
		||||
${AUTOCONF:-autoconf}
 | 
			
		||||
${AUTOMAKE:-automake} --add-missing
 | 
			
		||||
							
								
								
									
										187
									
								
								ares/config-win32.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								ares/config-win32.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,187 @@
 | 
			
		||||
#ifndef __ARES_CONFIG_WIN32_H
 | 
			
		||||
#define __ARES_CONFIG_WIN32_H
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2004 - 2006 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 <signal.h> header file. */
 | 
			
		||||
#define HAVE_SIGNAL_H 1
 | 
			
		||||
 | 
			
		||||
/* Define if you have the <sys/time.h> header file */
 | 
			
		||||
/* #define HAVE_SYS_TIME_H 1 */
 | 
			
		||||
 | 
			
		||||
/* Define if you have the <time.h> header file.  */
 | 
			
		||||
#define HAVE_TIME_H 1
 | 
			
		||||
 | 
			
		||||
/* Define if you have the <process.h> header file.  */
 | 
			
		||||
#define HAVE_PROCESS_H 1
 | 
			
		||||
 | 
			
		||||
/* 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
 | 
			
		||||
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
/*                        OTHER HEADER INFO                         */
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/* Define if sig_atomic_t is an available typedef. */
 | 
			
		||||
#define HAVE_SIG_ATOMIC_T 1
 | 
			
		||||
 | 
			
		||||
/* Define if you have the ANSI C header files.  */
 | 
			
		||||
#define STDC_HEADERS 1
 | 
			
		||||
 | 
			
		||||
/* Define if you can safely include both <sys/time.h> and <time.h>.  */
 | 
			
		||||
/* #define TIME_WITH_SYS_TIME 1 */
 | 
			
		||||
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
/*                             FUNCTIONS                            */
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/* Define if you have the ioctlsocket function.  */
 | 
			
		||||
#define HAVE_IOCTLSOCKET 1
 | 
			
		||||
 | 
			
		||||
/* Define if you have the recv function. */
 | 
			
		||||
#define HAVE_RECV 1
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 1 for recv. */
 | 
			
		||||
#define RECV_TYPE_ARG1 SOCKET
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 2 for recv. */
 | 
			
		||||
#define RECV_TYPE_ARG2 char *
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 3 for recv. */
 | 
			
		||||
#define RECV_TYPE_ARG3 int
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 4 for recv. */
 | 
			
		||||
#define RECV_TYPE_ARG4 int
 | 
			
		||||
 | 
			
		||||
/* Define to the function return type for recv. */
 | 
			
		||||
#define RECV_TYPE_RETV int
 | 
			
		||||
 | 
			
		||||
/* Define if you have the send function. */
 | 
			
		||||
#define HAVE_SEND 1
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 1 for send. */
 | 
			
		||||
#define SEND_TYPE_ARG1 SOCKET
 | 
			
		||||
 | 
			
		||||
/* Define to the type qualifier of arg 2 for send. */
 | 
			
		||||
#define SEND_QUAL_ARG2 const
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 2 for send. */
 | 
			
		||||
#define SEND_TYPE_ARG2 char *
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 3 for send. */
 | 
			
		||||
#define SEND_TYPE_ARG3 int
 | 
			
		||||
 | 
			
		||||
/* Define to the type of arg 4 for send. */
 | 
			
		||||
#define SEND_TYPE_ARG4 int
 | 
			
		||||
 | 
			
		||||
/* Define to the function return type for send. */
 | 
			
		||||
#define SEND_TYPE_RETV int
 | 
			
		||||
 | 
			
		||||
/* Specifics for the Watt-32 tcp/ip stack */
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
  #define SOCKET              int
 | 
			
		||||
  #define NS_INADDRSZ         4
 | 
			
		||||
  #define HAVE_ARPA_NAMESER_H 1
 | 
			
		||||
  #undef HAVE_WINSOCK_H
 | 
			
		||||
  #undef HAVE_WINSOCK2_H
 | 
			
		||||
  #undef HAVE_WS2TCPIP_H
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
/*                       TYPEDEF REPLACEMENTS                       */
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/* Define this if in_addr_t is not an available 'typedefed' type */
 | 
			
		||||
#define in_addr_t unsigned long
 | 
			
		||||
 | 
			
		||||
/* Define as the return type of signal handlers (int or void).  */
 | 
			
		||||
#define RETSIGTYPE void
 | 
			
		||||
 | 
			
		||||
/* Define ssize_t if it is not an available 'typedefed' type */
 | 
			
		||||
#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || defined(__POCC__)
 | 
			
		||||
#elif defined(_WIN64)
 | 
			
		||||
#define ssize_t __int64
 | 
			
		||||
#else
 | 
			
		||||
#define ssize_t int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Define to 'int' if socklen_t is not an available 'typedefed' type */
 | 
			
		||||
#ifndef HAVE_WS2TCPIP_H
 | 
			
		||||
#define socklen_t int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ---------------------------------------------------------------- */
 | 
			
		||||
/*                          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
 | 
			
		||||
 | 
			
		||||
/* Define this if you have struct timeval */
 | 
			
		||||
#define HAVE_STRUCT_TIMEVAL 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 */
 | 
			
		||||
							
								
								
									
										804
									
								
								ares/configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										804
									
								
								ares/configure.ac
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,804 @@
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
 | 
			
		||||
dnl
 | 
			
		||||
dnl Detect the canonical host and target build environment
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
AC_CANONICAL_HOST
 | 
			
		||||
dnl Get system canonical name
 | 
			
		||||
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
 | 
			
		||||
 | 
			
		||||
AC_AIX
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AC_PROG_INSTALL
 | 
			
		||||
 | 
			
		||||
case $host_os in
 | 
			
		||||
solaris*)
 | 
			
		||||
	AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used])
 | 
			
		||||
	;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
dnl support building of Windows DLLs
 | 
			
		||||
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
 | 
			
		||||
dnl improval in the future!
 | 
			
		||||
dnl
 | 
			
		||||
AC_MSG_CHECKING([whether to enable debug options])
 | 
			
		||||
AC_ARG_ENABLE(debug,
 | 
			
		||||
AC_HELP_STRING([--enable-debug],[Enable pedantic debug options])
 | 
			
		||||
AC_HELP_STRING([--disable-debug],[Disable debug options]),
 | 
			
		||||
[ case "$enableval" in
 | 
			
		||||
  no)
 | 
			
		||||
       AC_MSG_RESULT(no)
 | 
			
		||||
       ;;
 | 
			
		||||
  *)   AC_MSG_RESULT(yes)
 | 
			
		||||
 | 
			
		||||
    dnl when doing the debug stuff, use static library only
 | 
			
		||||
    AC_DISABLE_SHARED
 | 
			
		||||
 | 
			
		||||
    dnl the entire --enable-debug is a hack that lives and runs on top of
 | 
			
		||||
    dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
 | 
			
		||||
    AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
 | 
			
		||||
 | 
			
		||||
    CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
 | 
			
		||||
    CFLAGS="$CFLAGS -g" 
 | 
			
		||||
 | 
			
		||||
    dnl check for how to do large files, needed to get the curl_off_t check
 | 
			
		||||
    dnl done right
 | 
			
		||||
    AC_SYS_LARGEFILE
 | 
			
		||||
 | 
			
		||||
    AC_CHECK_SIZEOF(curl_off_t, ,[
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "$srcdir/../include/curl/curl.h"
 | 
			
		||||
    ])
 | 
			
		||||
 | 
			
		||||
    dnl set compiler "debug" options to become more picky, and remove
 | 
			
		||||
    dnl optimize options from CFLAGS
 | 
			
		||||
    CURL_CC_DEBUG_OPTS
 | 
			
		||||
 | 
			
		||||
       ;;
 | 
			
		||||
  esac ],
 | 
			
		||||
       AC_MSG_RESULT(no)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
dnl skip libtool C++ and Fortran compiler checks
 | 
			
		||||
m4_ifdef([AC_PROG_CXX], [m4_undefine([AC_PROG_CXX])])
 | 
			
		||||
m4_defun([AC_PROG_CXX],[])
 | 
			
		||||
m4_ifdef([AC_PROG_F77], [m4_undefine([AC_PROG_F77])])
 | 
			
		||||
m4_defun([AC_PROG_F77],[])
 | 
			
		||||
 | 
			
		||||
dnl skip libtool C++ and Fortran linker checks
 | 
			
		||||
m4_ifdef([AC_LIBTOOL_CXX], [m4_undefine([AC_LIBTOOL_CXX])])
 | 
			
		||||
m4_defun([AC_LIBTOOL_CXX],[])
 | 
			
		||||
m4_ifdef([AC_LIBTOOL_F77], [m4_undefine([AC_LIBTOOL_F77])])
 | 
			
		||||
m4_defun([AC_LIBTOOL_F77],[])
 | 
			
		||||
 | 
			
		||||
dnl force libtool to build static libraries with PIC on AMD64-linux
 | 
			
		||||
AC_MSG_CHECKING([if arch-OS host is AMD64-linux (to build static libraries with PIC)])
 | 
			
		||||
case $host in
 | 
			
		||||
  x86_64*linux*)
 | 
			
		||||
    AC_MSG_RESULT([yes])
 | 
			
		||||
    with_pic=yes
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    AC_MSG_RESULT([no])
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
dnl libtool setup
 | 
			
		||||
AC_PROG_LIBTOOL
 | 
			
		||||
 | 
			
		||||
AC_MSG_CHECKING([if we need -no-undefined])
 | 
			
		||||
case $host in
 | 
			
		||||
  *-*-cygwin | *-*-mingw* | *-*-pw32*)
 | 
			
		||||
    need_no_undefined=yes
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    need_no_undefined=no
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
AC_MSG_RESULT($need_no_undefined)
 | 
			
		||||
AM_CONDITIONAL(NO_UNDEFINED, test x$need_no_undefined = xyes)
 | 
			
		||||
 | 
			
		||||
dnl **********************************************************************
 | 
			
		||||
dnl check if this is the Intel ICC compiler, and if so make it stricter
 | 
			
		||||
dnl (convert warning 147 into an error) so that it properly can detect the
 | 
			
		||||
dnl gethostbyname_r() version
 | 
			
		||||
dnl **********************************************************************
 | 
			
		||||
CURL_DETECT_ICC([CFLAGS="$CFLAGS -we 147"])
 | 
			
		||||
 | 
			
		||||
dnl **********************************************************************
 | 
			
		||||
dnl Checks for libraries.
 | 
			
		||||
dnl **********************************************************************
 | 
			
		||||
 | 
			
		||||
dnl gethostbyname without lib or in the nsl lib?
 | 
			
		||||
AC_CHECK_FUNC(gethostbyname,
 | 
			
		||||
              [HAVE_GETHOSTBYNAME="1"
 | 
			
		||||
              ],
 | 
			
		||||
              [ AC_CHECK_LIB(nsl, gethostbyname,
 | 
			
		||||
                             [HAVE_GETHOSTBYNAME="1"
 | 
			
		||||
                             LIBS="$LIBS -lnsl"
 | 
			
		||||
                             ])
 | 
			
		||||
              ])
 | 
			
		||||
 | 
			
		||||
if test "$HAVE_GETHOSTBYNAME" != "1"
 | 
			
		||||
then
 | 
			
		||||
  dnl gethostbyname in the socket lib?
 | 
			
		||||
  AC_CHECK_LIB(socket, gethostbyname,
 | 
			
		||||
               [HAVE_GETHOSTBYNAME="1"
 | 
			
		||||
               LIBS="$LIBS -lsocket"
 | 
			
		||||
               ])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl At least one system has been identified to require BOTH nsl and socket
 | 
			
		||||
dnl libs at the same time to link properly.
 | 
			
		||||
if test "$HAVE_GETHOSTBYNAME" != "1"
 | 
			
		||||
then
 | 
			
		||||
  AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs])
 | 
			
		||||
  my_ac_save_LIBS=$LIBS
 | 
			
		||||
  LIBS="-lnsl -lsocket $LIBS"
 | 
			
		||||
  AC_TRY_LINK( ,
 | 
			
		||||
             [gethostbyname();],
 | 
			
		||||
             [ dnl found it!
 | 
			
		||||
             HAVE_GETHOSTBYNAME="1"
 | 
			
		||||
             AC_MSG_RESULT([yes])],
 | 
			
		||||
             [ dnl failed!
 | 
			
		||||
             AC_MSG_RESULT([no])
 | 
			
		||||
             dnl restore LIBS
 | 
			
		||||
             LIBS=$my_ac_save_LIBS]
 | 
			
		||||
             )
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$HAVE_GETHOSTBYNAME" != "1"
 | 
			
		||||
then
 | 
			
		||||
  dnl This is for Msys/Mingw
 | 
			
		||||
  AC_MSG_CHECKING([for gethostbyname in ws2_32])
 | 
			
		||||
  my_ac_save_LIBS=$LIBS
 | 
			
		||||
  LIBS="-lws2_32 $LIBS"
 | 
			
		||||
  AC_TRY_LINK([#include <winsock2.h>],
 | 
			
		||||
               [gethostbyname("www.dummysite.com");],
 | 
			
		||||
               [ dnl worked!
 | 
			
		||||
               ws2="yes"
 | 
			
		||||
               AC_MSG_RESULT([yes])
 | 
			
		||||
               HAVE_GETHOSTBYNAME="1"],
 | 
			
		||||
               [ dnl failed, restore LIBS
 | 
			
		||||
               LIBS=$my_ac_save_LIBS
 | 
			
		||||
               AC_MSG_RESULT(no)]
 | 
			
		||||
             )
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$HAVE_GETHOSTBYNAME" != "1"
 | 
			
		||||
then
 | 
			
		||||
  dnl This is for eCos with a stubbed DNS implementation
 | 
			
		||||
  AC_MSG_CHECKING([for gethostbyname for eCos])
 | 
			
		||||
  AC_TRY_LINK([
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <netdb.h>],
 | 
			
		||||
               [gethostbyname("www.dummysite.com");],
 | 
			
		||||
               [ dnl worked!
 | 
			
		||||
               AC_MSG_RESULT([yes])
 | 
			
		||||
               HAVE_GETHOSTBYNAME="1"],
 | 
			
		||||
               AC_MSG_RESULT(no)
 | 
			
		||||
             )
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$HAVE_GETHOSTBYNAME" != "1"
 | 
			
		||||
then
 | 
			
		||||
  dnl gethostbyname in the net lib - for BeOS
 | 
			
		||||
  AC_CHECK_LIB(net, gethostbyname,
 | 
			
		||||
               [HAVE_GETHOSTBYNAME="1"
 | 
			
		||||
               LIBS="$LIBS -lnet"
 | 
			
		||||
               ])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if test "$HAVE_GETHOSTBYNAME" = "1"; then
 | 
			
		||||
  AC_DEFINE(HAVE_GETHOSTBYNAME, 1, [If you have gethostbyname])
 | 
			
		||||
else
 | 
			
		||||
  AC_MSG_ERROR([couldn't find libraries for gethostbyname()])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl resolve lib?
 | 
			
		||||
AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ])
 | 
			
		||||
 | 
			
		||||
if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then
 | 
			
		||||
  AC_CHECK_LIB(resolve, strcasecmp,
 | 
			
		||||
              [LIBS="-lresolve $LIBS"],
 | 
			
		||||
               ,
 | 
			
		||||
               -lnsl)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl socket lib?
 | 
			
		||||
AC_CHECK_FUNC(connect, , [ AC_CHECK_LIB(socket, connect) ])
 | 
			
		||||
 | 
			
		||||
dnl dl lib?
 | 
			
		||||
AC_CHECK_FUNC(dlclose, , [ AC_CHECK_LIB(dl, dlopen) ])
 | 
			
		||||
 | 
			
		||||
AC_MSG_CHECKING([whether to use libgcc])
 | 
			
		||||
AC_ARG_ENABLE(libgcc,
 | 
			
		||||
AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
 | 
			
		||||
[ case "$enableval" in
 | 
			
		||||
  yes)
 | 
			
		||||
        LIBS="$LIBS -lgcc"
 | 
			
		||||
       AC_MSG_RESULT(yes)
 | 
			
		||||
       ;;
 | 
			
		||||
  *)   AC_MSG_RESULT(no)
 | 
			
		||||
       ;;
 | 
			
		||||
  esac ],
 | 
			
		||||
       AC_MSG_RESULT(no)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl Default is to try the thread-safe versions of a few functions
 | 
			
		||||
OPT_THREAD=on
 | 
			
		||||
 | 
			
		||||
dnl detect AIX 4.3 or later
 | 
			
		||||
AC_MSG_CHECKING([AIX 4.3 or later])
 | 
			
		||||
AC_PREPROC_IFELSE([
 | 
			
		||||
#if defined(_AIX) && defined(_AIX43)
 | 
			
		||||
printf("just fine");
 | 
			
		||||
#else
 | 
			
		||||
#error "this is not AIX 4.3 or later"
 | 
			
		||||
#endif
 | 
			
		||||
],
 | 
			
		||||
 [ AC_MSG_RESULT([yes])
 | 
			
		||||
   RECENTAIX=yes
 | 
			
		||||
   OPT_THREAD=off ],
 | 
			
		||||
 [ AC_MSG_RESULT([no]) ]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(thread,dnl
 | 
			
		||||
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
 | 
			
		||||
AC_HELP_STRING([--enable-thread],[look for thread-safe functions]),
 | 
			
		||||
[ case "$enableval" in
 | 
			
		||||
  no)
 | 
			
		||||
    OPT_THREAD=off
 | 
			
		||||
    AC_MSG_WARN(c-ares will not get built using thread-safe functions)
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    ;;
 | 
			
		||||
  esac
 | 
			
		||||
]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl for recent AIX versions, we skip all the thread-safe checks above since
 | 
			
		||||
dnl they claim a thread-safe libc using the standard API. But there are
 | 
			
		||||
dnl some functions still not thread-safe. Check for these!
 | 
			
		||||
 | 
			
		||||
dnl Let's hope this split URL remains working:
 | 
			
		||||
dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
 | 
			
		||||
dnl genprogc/thread_quick_ref.htm
 | 
			
		||||
 | 
			
		||||
if test "x$RECENTAIX" = "xyes"; then
 | 
			
		||||
 | 
			
		||||
  AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
 | 
			
		||||
 | 
			
		||||
  dnl check if this is the IBM xlc compiler
 | 
			
		||||
  dnl Details thanks to => http://predef.sourceforge.net/
 | 
			
		||||
  AC_MSG_CHECKING([if this is the xlc compiler])
 | 
			
		||||
  AC_EGREP_CPP([^__xlC__], [__xlC__],
 | 
			
		||||
         dnl action if the text is found, this it has not been replaced by the
 | 
			
		||||
         dnl cpp
 | 
			
		||||
         XLC="no"
 | 
			
		||||
         AC_MSG_RESULT([no]),
 | 
			
		||||
         dnl the text was not found, it was replaced by the cpp
 | 
			
		||||
         XLC="yes"
 | 
			
		||||
         AC_MSG_RESULT([yes])
 | 
			
		||||
         CFLAGS="$CFLAGS -qthreaded"
 | 
			
		||||
         dnl AIX xlc has to have strict aliasing turned off. If not,
 | 
			
		||||
         dnl the optimizer assumes that pointers can only point to
 | 
			
		||||
         dnl an object of the same type.
 | 
			
		||||
         CFLAGS="$CFLAGS -qnoansialias"
 | 
			
		||||
       )
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl **********************************************************************
 | 
			
		||||
dnl Back to "normal" configuring
 | 
			
		||||
dnl **********************************************************************
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
CURL_CHECK_HEADER_MALLOC
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
       sys/ioctl.h \
 | 
			
		||||
       netdb.h \
 | 
			
		||||
       netinet/in.h \
 | 
			
		||||
       net/if.h \
 | 
			
		||||
       errno.h \
 | 
			
		||||
       stdbool.h \
 | 
			
		||||
       arpa/nameser.h \
 | 
			
		||||
       arpa/nameser_compat.h \
 | 
			
		||||
       arpa/inet.h,
 | 
			
		||||
dnl to do if not found
 | 
			
		||||
[],
 | 
			
		||||
dnl to do if found
 | 
			
		||||
[],
 | 
			
		||||
dnl default includes
 | 
			
		||||
[
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
dnl We do this default-include simply to make sure that the nameser_compat.h
 | 
			
		||||
dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1
 | 
			
		||||
dnl (and others?) is not designed to allow this.
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#include <arpa/nameser.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
dnl *Sigh* these are needed in order for net/if.h to get properly detected.
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
dnl Checks for typedefs, structures, and compiler characteristics.
 | 
			
		||||
AC_C_CONST
 | 
			
		||||
AC_TYPE_SIZE_T
 | 
			
		||||
AC_HEADER_TIME
 | 
			
		||||
CURL_CHECK_STRUCT_TIMEVAL
 | 
			
		||||
 | 
			
		||||
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 bool type
 | 
			
		||||
AC_CHECK_TYPE([bool],[
 | 
			
		||||
  AC_DEFINE(HAVE_BOOL_T, 1,
 | 
			
		||||
    [Define to 1 if bool is an available type.])
 | 
			
		||||
], ,[
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_STDBOOL_H
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#endif
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
# Check for socklen_t or equivalent
 | 
			
		||||
CURL_CHECK_TYPE_SOCKLEN_T
 | 
			
		||||
 | 
			
		||||
TYPE_IN_ADDR_T
 | 
			
		||||
 | 
			
		||||
TYPE_SOCKADDR_STORAGE
 | 
			
		||||
 | 
			
		||||
TYPE_SIG_ATOMIC_T
 | 
			
		||||
 | 
			
		||||
AC_TYPE_SIGNAL
 | 
			
		||||
 | 
			
		||||
CURL_CHECK_FUNC_RECV
 | 
			
		||||
 | 
			
		||||
CURL_CHECK_FUNC_SEND
 | 
			
		||||
 | 
			
		||||
CURL_CHECK_MSG_NOSIGNAL
 | 
			
		||||
 | 
			
		||||
dnl check for AF_INET6
 | 
			
		||||
CARES_CHECK_CONSTANT(
 | 
			
		||||
  [
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
  ], [PF_INET6], 
 | 
			
		||||
     AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.])
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
dnl check for PF_INET6
 | 
			
		||||
CARES_CHECK_CONSTANT(
 | 
			
		||||
  [
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
  ], [AF_INET6], 
 | 
			
		||||
     AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.])
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl check for the in6_addr structure
 | 
			
		||||
CARES_CHECK_STRUCT(
 | 
			
		||||
  [
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#ifdef HAVE_WS2TCPIP_H
 | 
			
		||||
#include <ws2tcpip.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
  ], [in6_addr], 
 | 
			
		||||
     AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.])
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
dnl check for the sockaddr_in6 structure
 | 
			
		||||
CARES_CHECK_STRUCT(
 | 
			
		||||
  [
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#ifdef HAVE_WS2TCPIP_H
 | 
			
		||||
#include <ws2tcpip.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
  ], [sockaddr_in6], 
 | 
			
		||||
     AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1,
 | 
			
		||||
       [Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id,
 | 
			
		||||
    AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1,
 | 
			
		||||
      [Define to 1 if your struct sockaddr_in6 has sin6_scope_id.])
 | 
			
		||||
   , ,
 | 
			
		||||
  [
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#ifdef HAVE_WS2TCPIP_H
 | 
			
		||||
#include <ws2tcpip.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
  ])
 | 
			
		||||
 | 
			
		||||
dnl check for the addrinfo structure
 | 
			
		||||
AC_CHECK_MEMBER(struct addrinfo.ai_flags,
 | 
			
		||||
     AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1,
 | 
			
		||||
       [Define to 1 if you have struct addrinfo.]),,
 | 
			
		||||
  [
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#ifdef HAVE_WS2TCPIP_H
 | 
			
		||||
#include <ws2tcpip.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
  ]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AC_CHECK_FUNCS( bitncmp \
 | 
			
		||||
                if_indextoname,
 | 
			
		||||
dnl if found
 | 
			
		||||
[],
 | 
			
		||||
dnl if not found, $ac_func is the name we check for
 | 
			
		||||
func="$ac_func"
 | 
			
		||||
AC_MSG_CHECKING([deeper for $func])
 | 
			
		||||
AC_TRY_LINK( [],
 | 
			
		||||
             [ $func ();],
 | 
			
		||||
             AC_MSG_RESULT(yes!)
 | 
			
		||||
             eval "ac_cv_func_$func=yes"
 | 
			
		||||
             def=`echo "HAVE_$func" | tr 'a-z' 'A-Z'`
 | 
			
		||||
             AC_DEFINE_UNQUOTED($def, 1, [If you have $func]),
 | 
			
		||||
             AC_MSG_RESULT(but still no)
 | 
			
		||||
             )
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl check for inet_pton
 | 
			
		||||
AC_CHECK_FUNCS(inet_pton)
 | 
			
		||||
dnl Some systems have it, but not IPv6
 | 
			
		||||
if test "$ac_cv_func_inet_pton" = "yes" ; then
 | 
			
		||||
AC_MSG_CHECKING(if inet_pton supports IPv6)
 | 
			
		||||
AC_TRY_RUN(
 | 
			
		||||
  [
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
int main()
 | 
			
		||||
  {
 | 
			
		||||
    struct in6_addr addr6;
 | 
			
		||||
    if (inet_pton(AF_INET6, "::1", &addr6) < 1)
 | 
			
		||||
      exit(1);
 | 
			
		||||
    else
 | 
			
		||||
      exit(0);
 | 
			
		||||
  }
 | 
			
		||||
  ], [
 | 
			
		||||
       AC_MSG_RESULT(yes)
 | 
			
		||||
       AC_DEFINE_UNQUOTED(HAVE_INET_PTON_IPV6,1,[Define to 1 if inet_pton supports IPv6.])
 | 
			
		||||
     ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
 | 
			
		||||
fi
 | 
			
		||||
dnl Check for inet_net_pton
 | 
			
		||||
AC_CHECK_FUNCS(inet_net_pton)
 | 
			
		||||
dnl Again, some systems have it, but not IPv6
 | 
			
		||||
if test "$ac_cv_func_inet_net_pton" = "yes" ; then
 | 
			
		||||
AC_MSG_CHECKING(if inet_net_pton supports IPv6)
 | 
			
		||||
AC_TRY_RUN(
 | 
			
		||||
  [
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
int main()
 | 
			
		||||
  {
 | 
			
		||||
    struct in6_addr addr6;
 | 
			
		||||
    if (inet_net_pton(AF_INET6, "::1", &addr6, sizeof(addr6)) < 1)
 | 
			
		||||
      exit(1);
 | 
			
		||||
    else
 | 
			
		||||
      exit(0);
 | 
			
		||||
  }
 | 
			
		||||
  ], [
 | 
			
		||||
       AC_MSG_RESULT(yes)
 | 
			
		||||
       AC_DEFINE_UNQUOTED(HAVE_INET_NET_PTON_IPV6,1,[Define to 1 if inet_net_pton supports IPv6.])
 | 
			
		||||
     ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl Check for inet_ntop
 | 
			
		||||
AC_CHECK_FUNCS(inet_ntop)
 | 
			
		||||
dnl Again, some systems have it, but not IPv6
 | 
			
		||||
if test "$ac_cv_func_inet_ntop" = "yes" ; then
 | 
			
		||||
AC_MSG_CHECKING(if inet_ntop supports IPv6)
 | 
			
		||||
AC_TRY_RUN(
 | 
			
		||||
  [
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
int main()
 | 
			
		||||
  {
 | 
			
		||||
    struct in6_addr addr6;
 | 
			
		||||
    char buf[128];
 | 
			
		||||
    if (inet_ntop(AF_INET6, &addr6, buf, 128) == 0 && errno == EAFNOSUPPORT)
 | 
			
		||||
      exit(1);
 | 
			
		||||
    else
 | 
			
		||||
      exit(0);
 | 
			
		||||
  }
 | 
			
		||||
  ], [
 | 
			
		||||
       AC_MSG_RESULT(yes)
 | 
			
		||||
       AC_DEFINE_UNQUOTED(HAVE_INET_NTOP_IPV6,1,
 | 
			
		||||
          [Define to 1 if inet_ntop supports IPv6.])
 | 
			
		||||
     ], AC_MSG_RESULT(no),AC_MSG_RESULT(no))
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_CHECK_SIZEOF(struct in6_addr, ,
 | 
			
		||||
[
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#ifdef HAVE_WS2TCPIP_H
 | 
			
		||||
#include <ws2tcpip.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
AC_CHECK_SIZEOF(struct in_addr, ,
 | 
			
		||||
[
 | 
			
		||||
#undef inline
 | 
			
		||||
#ifdef HAVE_WINDOWS_H
 | 
			
		||||
#ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#endif
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#ifdef HAVE_WINSOCK2_H
 | 
			
		||||
#include <winsock2.h>
 | 
			
		||||
#ifdef HAVE_WS2TCPIP_H
 | 
			
		||||
#include <ws2tcpip.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAVE_SYS_TYPES_H
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl Check if the getnameinfo function is available
 | 
			
		||||
dnl and get the types of five of its arguments.
 | 
			
		||||
CURL_CHECK_FUNC_GETNAMEINFO
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl God bless non-standardized functions! We need to see which getservbyport_r
 | 
			
		||||
dnl 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!])]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
dnl Check for user-specified random device
 | 
			
		||||
AC_ARG_WITH(random,
 | 
			
		||||
AC_HELP_STRING([--with-random=FILE],
 | 
			
		||||
               [read randomness from FILE (default=/dev/urandom)]),
 | 
			
		||||
    [ RANDOM_FILE="$withval" ],
 | 
			
		||||
    [
 | 
			
		||||
        dnl Check for random device
 | 
			
		||||
        AC_CHECK_FILE("/dev/urandom", [ RANDOM_FILE="/dev/urandom"] )
 | 
			
		||||
    ]
 | 
			
		||||
)
 | 
			
		||||
if test -n "$RANDOM_FILE" && test X"$RANDOM_FILE" != Xno ; then
 | 
			
		||||
        AC_SUBST(RANDOM_FILE)
 | 
			
		||||
        AC_DEFINE_UNQUOTED(RANDOM_FILE, "$RANDOM_FILE",
 | 
			
		||||
        [a suitable file/device to read random data from])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_OUTPUT(Makefile)
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user