From 00ac2bf0e2a5d3ce68f46db1df24943421873955 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Tue, 30 Jun 2015 15:26:16 +0000 Subject: [PATCH] Fold in git archive master of mod_h2 (latest commit 11905f474e) from https://github.com/icing/mod_h2 as per software grant. Since this is a git archive of master (for tracking and IP provenance history), it includes files that will likely be removed/renamed/etc... git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1688474 13f79535-47bb-0310-9956-ffa450edef68 --- modules/http2/.gitignore | 35 + modules/http2/AUTHORS | 1 + modules/http2/COPYING | 2 + modules/http2/ChangeLog | 253 ++ modules/http2/DISCUSS | 149 + modules/http2/INSTALL | 375 +++ modules/http2/LICENSE | 202 ++ modules/http2/Makefile.am | 48 + modules/http2/NEWS | 0 modules/http2/README | 1 + modules/http2/README.md | 205 ++ modules/http2/configure.ac | 211 ++ modules/http2/m4/ax_check_compile_flag.m4 | 74 + modules/http2/m4/h2.m4 | 1 + .../http2/mod-h2.xcodeproj/project.pbxproj | 982 +++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/mod-h2.xccheckout | 53 + .../xcschemes/mod_h2 make.xcscheme | 77 + .../xcschemes/xcschememanagement.plist | 22 + modules/http2/mod_h2/.gitignore | 7 + modules/http2/mod_h2/Makefile.am | 94 + modules/http2/mod_h2/h2_alpn.c | 295 ++ modules/http2/mod_h2/h2_alpn.h | 29 + modules/http2/mod_h2/h2_alt_svc.c | 122 + modules/http2/mod_h2/h2_alt_svc.h | 39 + modules/http2/mod_h2/h2_config.c | 384 +++ modules/http2/mod_h2/h2_config.h | 78 + modules/http2/mod_h2/h2_conn.c | 543 ++++ modules/http2/mod_h2/h2_conn.h | 70 + modules/http2/mod_h2/h2_conn_io.c | 285 ++ modules/http2/mod_h2/h2_conn_io.h | 55 + modules/http2/mod_h2/h2_ctx.c | 100 + modules/http2/mod_h2/h2_ctx.h | 74 + modules/http2/mod_h2/h2_from_h1.c | 616 +++++ modules/http2/mod_h2/h2_from_h1.h | 84 + modules/http2/mod_h2/h2_h2.c | 222 ++ modules/http2/mod_h2/h2_h2.h | 59 + modules/http2/mod_h2/h2_io.c | 157 ++ modules/http2/mod_h2/h2_io.h | 127 + modules/http2/mod_h2/h2_io_set.c | 169 ++ modules/http2/mod_h2/h2_io_set.h | 47 + modules/http2/mod_h2/h2_mplx.c | 788 ++++++ modules/http2/mod_h2/h2_mplx.h | 322 +++ modules/http2/mod_h2/h2_private.h | 36 + modules/http2/mod_h2/h2_request.c | 176 ++ modules/http2/mod_h2/h2_request.h | 67 + modules/http2/mod_h2/h2_response.c | 235 ++ modules/http2/mod_h2/h2_response.h | 48 + modules/http2/mod_h2/h2_session.c | 1225 +++++++++ modules/http2/mod_h2/h2_session.h | 137 + modules/http2/mod_h2/h2_stream.c | 297 ++ modules/http2/mod_h2/h2_stream.h | 111 + modules/http2/mod_h2/h2_stream_set.c | 158 ++ modules/http2/mod_h2/h2_stream_set.h | 52 + modules/http2/mod_h2/h2_task.c | 464 ++++ modules/http2/mod_h2/h2_task.h | 181 ++ modules/http2/mod_h2/h2_task_input.c | 216 ++ modules/http2/mod_h2/h2_task_input.h | 46 + modules/http2/mod_h2/h2_task_output.c | 133 + modules/http2/mod_h2/h2_task_output.h | 58 + modules/http2/mod_h2/h2_task_queue.c | 88 + modules/http2/mod_h2/h2_task_queue.h | 148 + modules/http2/mod_h2/h2_to_h1.c | 288 ++ modules/http2/mod_h2/h2_to_h1.h | 83 + modules/http2/mod_h2/h2_upgrade.c | 199 ++ modules/http2/mod_h2/h2_upgrade.h | 24 + modules/http2/mod_h2/h2_util.c | 703 +++++ modules/http2/mod_h2/h2_util.h | 140 + modules/http2/mod_h2/h2_version.h.in | 42 + modules/http2/mod_h2/h2_worker.c | 168 ++ modules/http2/mod_h2/h2_worker.h | 155 ++ modules/http2/mod_h2/h2_workers.c | 344 +++ modules/http2/mod_h2/h2_workers.h | 87 + modules/http2/mod_h2/m4/h2.m4 | 1 + modules/http2/mod_h2/mod_h2.c | 162 ++ modules/http2/mod_h2/mod_h2.h | 28 + modules/http2/sandbox/.gitignore | 2 + modules/http2/sandbox/Makefile.am | 58 + modules/http2/sandbox/httpd/.gitignore | 1 + modules/http2/sandbox/httpd/Makefile | 319 +++ .../http2/sandbox/httpd/get-openssl-latest.sh | 55 + .../http2/sandbox/httpd/mod_ssl-alpn/Makefile | 25 + .../sandbox/httpd/mod_ssl-alpn/Makefile.in | 20 + .../sandbox/httpd/mod_ssl-alpn/NWGNUmakefile | 327 +++ .../http2/sandbox/httpd/mod_ssl-alpn/README | 106 + .../httpd/mod_ssl-alpn/README.dsov.fig | 346 +++ .../sandbox/httpd/mod_ssl-alpn/README.dsov.ps | 1138 ++++++++ .../sandbox/httpd/mod_ssl-alpn/config.m4 | 57 + .../sandbox/httpd/mod_ssl-alpn/mod_ssl.c | 641 +++++ .../sandbox/httpd/mod_ssl-alpn/mod_ssl.dsp | 195 ++ .../sandbox/httpd/mod_ssl-alpn/mod_ssl.h | 108 + .../sandbox/httpd/mod_ssl-alpn/modules.mk | 7 + .../httpd/mod_ssl-alpn/ssl_engine_config.c | 1931 +++++++++++++ .../httpd/mod_ssl-alpn/ssl_engine_init.c | 1774 ++++++++++++ .../httpd/mod_ssl-alpn/ssl_engine_io.c | 2098 ++++++++++++++ .../httpd/mod_ssl-alpn/ssl_engine_kernel.c | 2419 +++++++++++++++++ .../httpd/mod_ssl-alpn/ssl_engine_log.c | 238 ++ .../httpd/mod_ssl-alpn/ssl_engine_mutex.c | 111 + .../httpd/mod_ssl-alpn/ssl_engine_ocsp.c | 300 ++ .../httpd/mod_ssl-alpn/ssl_engine_pphrase.c | 623 +++++ .../httpd/mod_ssl-alpn/ssl_engine_rand.c | 175 ++ .../httpd/mod_ssl-alpn/ssl_engine_vars.c | 1081 ++++++++ .../sandbox/httpd/mod_ssl-alpn/ssl_private.h | 975 +++++++ .../sandbox/httpd/mod_ssl-alpn/ssl_scache.c | 231 ++ .../sandbox/httpd/mod_ssl-alpn/ssl_util.c | 379 +++ .../httpd/mod_ssl-alpn/ssl_util_ocsp.c | 319 +++ .../sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.c | 537 ++++ .../sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.h | 77 + .../httpd/mod_ssl-alpn/ssl_util_stapling.c | 705 +++++ .../sandbox/httpd/packages/pcre-8.36.tar.gz | Bin 0 -> 2009464 bytes .../httpd/patches/httpd-2.4.12-alpn-v5.patch | 605 +++++ .../httpd/patches/httpd-2.4.x-alpn-v4.patch | 535 ++++ .../httpd/patches/httpd-alpn-v4-v5.patch | 148 + .../patches/httpd-npn.unified.diff.patch | 366 +++ .../httpd/patches/openssl-1.0.2-alpn.patch | 64 + .../sandbox/httpd/patches/sni_misdirect.patch | 45 + modules/http2/sandbox/nghttp2/Makefile | 239 ++ modules/http2/sandbox/test/Makefile | 323 +++ modules/http2/sandbox/test/bin/php-wrapper | 11 + modules/http2/sandbox/test/bin/testrun | 79 + modules/http2/sandbox/test/clients/Makefile | 113 + modules/http2/sandbox/test/conf/httpd.conf | 120 + .../test/conf/mods-available/mpm_event.load | 1 + .../test/conf/mods-available/mpm_prefork.load | 1 + .../test/conf/mods-available/mpm_worker.load | 1 + modules/http2/sandbox/test/conf/modules.conf | 99 + .../test/conf/sites/aaa-noh2.example.org.conf | 48 + .../test/conf/sites/test-ser.example.org.conf | 81 + .../test/conf/sites/test.example.org.conf | 91 + .../http2/sandbox/test/conf/ssl/.gitignore | 1 + modules/http2/sandbox/test/conf/ssl/ca.pem | 44 + .../http2/sandbox/test/conf/ssl/cacerts.pem | 36 + .../sandbox/test/conf/ssl/extensions.conf | 5 + .../test/conf/ssl/mod-h2.greenbytes.de.pem | 77 + .../test/conf/ssl/noh2.example.org.x509.input | 9 + .../conf/ssl/test-ser.example.org.x509.input | 9 + .../test/conf/ssl/test.example.org.x509.input | 9 + .../test/htdocs/test.example.org/001.html | 10 + .../test/htdocs/test.example.org/002.jpg | Bin 0 -> 90364 bytes .../test/htdocs/test.example.org/003.html | 11 + .../htdocs/test.example.org/003/003_img.jpg | Bin 0 -> 90364 bytes .../test/htdocs/test.example.org/004.html | 23 + .../test.example.org/004/gophertiles.jpg | Bin 0 -> 742 bytes .../test.example.org/004/gophertiles_002.jpg | Bin 0 -> 945 bytes .../test.example.org/004/gophertiles_003.jpg | Bin 0 -> 697 bytes .../test.example.org/004/gophertiles_004.jpg | Bin 0 -> 725 bytes .../test.example.org/004/gophertiles_005.jpg | Bin 0 -> 837 bytes .../test.example.org/004/gophertiles_006.jpg | Bin 0 -> 770 bytes .../test.example.org/004/gophertiles_007.jpg | Bin 0 -> 747 bytes .../test.example.org/004/gophertiles_008.jpg | Bin 0 -> 694 bytes .../test.example.org/004/gophertiles_009.jpg | Bin 0 -> 704 bytes .../test.example.org/004/gophertiles_010.jpg | Bin 0 -> 994 bytes .../test.example.org/004/gophertiles_011.jpg | Bin 0 -> 979 bytes .../test.example.org/004/gophertiles_012.jpg | Bin 0 -> 895 bytes .../test.example.org/004/gophertiles_013.jpg | Bin 0 -> 958 bytes .../test.example.org/004/gophertiles_014.jpg | Bin 0 -> 894 bytes .../test.example.org/004/gophertiles_015.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_016.jpg | Bin 0 -> 703 bytes .../test.example.org/004/gophertiles_017.jpg | Bin 0 -> 707 bytes .../test.example.org/004/gophertiles_018.jpg | Bin 0 -> 701 bytes .../test.example.org/004/gophertiles_019.jpg | Bin 0 -> 1013 bytes .../test.example.org/004/gophertiles_020.jpg | Bin 0 -> 737 bytes .../test.example.org/004/gophertiles_021.jpg | Bin 0 -> 801 bytes .../test.example.org/004/gophertiles_022.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_023.jpg | Bin 0 -> 905 bytes .../test.example.org/004/gophertiles_024.jpg | Bin 0 -> 980 bytes .../test.example.org/004/gophertiles_025.jpg | Bin 0 -> 708 bytes .../test.example.org/004/gophertiles_026.jpg | Bin 0 -> 694 bytes .../test.example.org/004/gophertiles_027.jpg | Bin 0 -> 697 bytes .../test.example.org/004/gophertiles_028.jpg | Bin 0 -> 795 bytes .../test.example.org/004/gophertiles_029.jpg | Bin 0 -> 978 bytes .../test.example.org/004/gophertiles_030.jpg | Bin 0 -> 707 bytes .../test.example.org/004/gophertiles_031.jpg | Bin 0 -> 1060 bytes .../test.example.org/004/gophertiles_032.jpg | Bin 0 -> 688 bytes .../test.example.org/004/gophertiles_033.jpg | Bin 0 -> 701 bytes .../test.example.org/004/gophertiles_034.jpg | Bin 0 -> 898 bytes .../test.example.org/004/gophertiles_035.jpg | Bin 0 -> 986 bytes .../test.example.org/004/gophertiles_036.jpg | Bin 0 -> 770 bytes .../test.example.org/004/gophertiles_037.jpg | Bin 0 -> 959 bytes .../test.example.org/004/gophertiles_038.jpg | Bin 0 -> 936 bytes .../test.example.org/004/gophertiles_039.jpg | Bin 0 -> 700 bytes .../test.example.org/004/gophertiles_040.jpg | Bin 0 -> 784 bytes .../test.example.org/004/gophertiles_041.jpg | Bin 0 -> 758 bytes .../test.example.org/004/gophertiles_042.jpg | Bin 0 -> 796 bytes .../test.example.org/004/gophertiles_043.jpg | Bin 0 -> 813 bytes .../test.example.org/004/gophertiles_044.jpg | Bin 0 -> 924 bytes .../test.example.org/004/gophertiles_045.jpg | Bin 0 -> 978 bytes .../test.example.org/004/gophertiles_046.jpg | Bin 0 -> 752 bytes .../test.example.org/004/gophertiles_047.jpg | Bin 0 -> 751 bytes .../test.example.org/004/gophertiles_048.jpg | Bin 0 -> 737 bytes .../test.example.org/004/gophertiles_049.jpg | Bin 0 -> 992 bytes .../test.example.org/004/gophertiles_050.jpg | Bin 0 -> 688 bytes .../test.example.org/004/gophertiles_051.jpg | Bin 0 -> 697 bytes .../test.example.org/004/gophertiles_052.jpg | Bin 0 -> 699 bytes .../test.example.org/004/gophertiles_053.jpg | Bin 0 -> 1052 bytes .../test.example.org/004/gophertiles_054.jpg | Bin 0 -> 694 bytes .../test.example.org/004/gophertiles_055.jpg | Bin 0 -> 767 bytes .../test.example.org/004/gophertiles_056.jpg | Bin 0 -> 952 bytes .../test.example.org/004/gophertiles_057.jpg | Bin 0 -> 788 bytes .../test.example.org/004/gophertiles_058.jpg | Bin 0 -> 759 bytes .../test.example.org/004/gophertiles_059.jpg | Bin 0 -> 700 bytes .../test.example.org/004/gophertiles_060.jpg | Bin 0 -> 985 bytes .../test.example.org/004/gophertiles_061.jpg | Bin 0 -> 915 bytes .../test.example.org/004/gophertiles_062.jpg | Bin 0 -> 681 bytes .../test.example.org/004/gophertiles_063.jpg | Bin 0 -> 707 bytes .../test.example.org/004/gophertiles_064.jpg | Bin 0 -> 693 bytes .../test.example.org/004/gophertiles_065.jpg | Bin 0 -> 861 bytes .../test.example.org/004/gophertiles_066.jpg | Bin 0 -> 991 bytes .../test.example.org/004/gophertiles_067.jpg | Bin 0 -> 1056 bytes .../test.example.org/004/gophertiles_068.jpg | Bin 0 -> 697 bytes .../test.example.org/004/gophertiles_069.jpg | Bin 0 -> 1066 bytes .../test.example.org/004/gophertiles_070.jpg | Bin 0 -> 1024 bytes .../test.example.org/004/gophertiles_071.jpg | Bin 0 -> 784 bytes .../test.example.org/004/gophertiles_072.jpg | Bin 0 -> 698 bytes .../test.example.org/004/gophertiles_073.jpg | Bin 0 -> 1004 bytes .../test.example.org/004/gophertiles_074.jpg | Bin 0 -> 969 bytes .../test.example.org/004/gophertiles_075.jpg | Bin 0 -> 915 bytes .../test.example.org/004/gophertiles_076.jpg | Bin 0 -> 784 bytes .../test.example.org/004/gophertiles_077.jpg | Bin 0 -> 697 bytes .../test.example.org/004/gophertiles_078.jpg | Bin 0 -> 692 bytes .../test.example.org/004/gophertiles_079.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_080.jpg | Bin 0 -> 725 bytes .../test.example.org/004/gophertiles_081.jpg | Bin 0 -> 877 bytes .../test.example.org/004/gophertiles_082.jpg | Bin 0 -> 743 bytes .../test.example.org/004/gophertiles_083.jpg | Bin 0 -> 785 bytes .../test.example.org/004/gophertiles_084.jpg | Bin 0 -> 690 bytes .../test.example.org/004/gophertiles_085.jpg | Bin 0 -> 724 bytes .../test.example.org/004/gophertiles_086.jpg | Bin 0 -> 1054 bytes .../test.example.org/004/gophertiles_087.jpg | Bin 0 -> 883 bytes .../test.example.org/004/gophertiles_088.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_089.jpg | Bin 0 -> 693 bytes .../test.example.org/004/gophertiles_090.jpg | Bin 0 -> 947 bytes .../test.example.org/004/gophertiles_091.jpg | Bin 0 -> 959 bytes .../test.example.org/004/gophertiles_092.jpg | Bin 0 -> 736 bytes .../test.example.org/004/gophertiles_093.jpg | Bin 0 -> 806 bytes .../test.example.org/004/gophertiles_094.jpg | Bin 0 -> 820 bytes .../test.example.org/004/gophertiles_095.jpg | Bin 0 -> 918 bytes .../test.example.org/004/gophertiles_096.jpg | Bin 0 -> 689 bytes .../test.example.org/004/gophertiles_097.jpg | Bin 0 -> 796 bytes .../test.example.org/004/gophertiles_098.jpg | Bin 0 -> 686 bytes .../test.example.org/004/gophertiles_099.jpg | Bin 0 -> 698 bytes .../test.example.org/004/gophertiles_100.jpg | Bin 0 -> 686 bytes .../test.example.org/004/gophertiles_101.jpg | Bin 0 -> 686 bytes .../test.example.org/004/gophertiles_102.jpg | Bin 0 -> 682 bytes .../test.example.org/004/gophertiles_103.jpg | Bin 0 -> 703 bytes .../test.example.org/004/gophertiles_104.jpg | Bin 0 -> 698 bytes .../test.example.org/004/gophertiles_105.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_106.jpg | Bin 0 -> 989 bytes .../test.example.org/004/gophertiles_107.jpg | Bin 0 -> 720 bytes .../test.example.org/004/gophertiles_108.jpg | Bin 0 -> 834 bytes .../test.example.org/004/gophertiles_109.jpg | Bin 0 -> 756 bytes .../test.example.org/004/gophertiles_110.jpg | Bin 0 -> 703 bytes .../test.example.org/004/gophertiles_111.jpg | Bin 0 -> 815 bytes .../test.example.org/004/gophertiles_112.jpg | Bin 0 -> 780 bytes .../test.example.org/004/gophertiles_113.jpg | Bin 0 -> 992 bytes .../test.example.org/004/gophertiles_114.jpg | Bin 0 -> 862 bytes .../test.example.org/004/gophertiles_115.jpg | Bin 0 -> 1024 bytes .../test.example.org/004/gophertiles_116.jpg | Bin 0 -> 756 bytes .../test.example.org/004/gophertiles_117.jpg | Bin 0 -> 1012 bytes .../test.example.org/004/gophertiles_118.jpg | Bin 0 -> 905 bytes .../test.example.org/004/gophertiles_119.jpg | Bin 0 -> 808 bytes .../test.example.org/004/gophertiles_120.jpg | Bin 0 -> 814 bytes .../test.example.org/004/gophertiles_121.jpg | Bin 0 -> 832 bytes .../test.example.org/004/gophertiles_122.jpg | Bin 0 -> 704 bytes .../test.example.org/004/gophertiles_123.jpg | Bin 0 -> 741 bytes .../test.example.org/004/gophertiles_124.jpg | Bin 0 -> 694 bytes .../test.example.org/004/gophertiles_125.jpg | Bin 0 -> 950 bytes .../test.example.org/004/gophertiles_126.jpg | Bin 0 -> 770 bytes .../test.example.org/004/gophertiles_127.jpg | Bin 0 -> 749 bytes .../test.example.org/004/gophertiles_128.jpg | Bin 0 -> 942 bytes .../test.example.org/004/gophertiles_129.jpg | Bin 0 -> 997 bytes .../test.example.org/004/gophertiles_130.jpg | Bin 0 -> 708 bytes .../test.example.org/004/gophertiles_131.jpg | Bin 0 -> 821 bytes .../test.example.org/004/gophertiles_132.jpg | Bin 0 -> 849 bytes .../test.example.org/004/gophertiles_133.jpg | Bin 0 -> 715 bytes .../test.example.org/004/gophertiles_134.jpg | Bin 0 -> 794 bytes .../test.example.org/004/gophertiles_135.jpg | Bin 0 -> 869 bytes .../test.example.org/004/gophertiles_136.jpg | Bin 0 -> 1040 bytes .../test.example.org/004/gophertiles_137.jpg | Bin 0 -> 757 bytes .../test.example.org/004/gophertiles_138.jpg | Bin 0 -> 991 bytes .../test.example.org/004/gophertiles_139.jpg | Bin 0 -> 704 bytes .../test.example.org/004/gophertiles_140.jpg | Bin 0 -> 707 bytes .../test.example.org/004/gophertiles_141.jpg | Bin 0 -> 959 bytes .../test.example.org/004/gophertiles_142.jpg | Bin 0 -> 691 bytes .../test.example.org/004/gophertiles_143.jpg | Bin 0 -> 921 bytes .../test.example.org/004/gophertiles_144.jpg | Bin 0 -> 932 bytes .../test.example.org/004/gophertiles_145.jpg | Bin 0 -> 696 bytes .../test.example.org/004/gophertiles_146.jpg | Bin 0 -> 711 bytes .../test.example.org/004/gophertiles_147.jpg | Bin 0 -> 817 bytes .../test.example.org/004/gophertiles_148.jpg | Bin 0 -> 966 bytes .../test.example.org/004/gophertiles_149.jpg | Bin 0 -> 1002 bytes .../test.example.org/004/gophertiles_150.jpg | Bin 0 -> 900 bytes .../test.example.org/004/gophertiles_151.jpg | Bin 0 -> 724 bytes .../test.example.org/004/gophertiles_152.jpg | Bin 0 -> 1043 bytes .../test.example.org/004/gophertiles_153.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_154.jpg | Bin 0 -> 971 bytes .../test.example.org/004/gophertiles_155.jpg | Bin 0 -> 708 bytes .../test.example.org/004/gophertiles_156.jpg | Bin 0 -> 699 bytes .../test.example.org/004/gophertiles_157.jpg | Bin 0 -> 834 bytes .../test.example.org/004/gophertiles_158.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_159.jpg | Bin 0 -> 880 bytes .../test.example.org/004/gophertiles_160.jpg | Bin 0 -> 701 bytes .../test.example.org/004/gophertiles_161.jpg | Bin 0 -> 688 bytes .../test.example.org/004/gophertiles_162.jpg | Bin 0 -> 853 bytes .../test.example.org/004/gophertiles_163.jpg | Bin 0 -> 690 bytes .../test.example.org/004/gophertiles_164.jpg | Bin 0 -> 759 bytes .../test.example.org/004/gophertiles_165.jpg | Bin 0 -> 831 bytes .../test.example.org/004/gophertiles_166.jpg | Bin 0 -> 732 bytes .../test.example.org/004/gophertiles_167.jpg | Bin 0 -> 955 bytes .../test.example.org/004/gophertiles_168.jpg | Bin 0 -> 1043 bytes .../test.example.org/004/gophertiles_169.jpg | Bin 0 -> 969 bytes .../test.example.org/004/gophertiles_170.jpg | Bin 0 -> 701 bytes .../test.example.org/004/gophertiles_171.jpg | Bin 0 -> 755 bytes .../test.example.org/004/gophertiles_172.jpg | Bin 0 -> 924 bytes .../test.example.org/004/gophertiles_173.jpg | Bin 0 -> 958 bytes .../test.example.org/004/gophertiles_174.jpg | Bin 0 -> 998 bytes .../test.example.org/004/gophertiles_175.jpg | Bin 0 -> 702 bytes .../test.example.org/004/gophertiles_176.jpg | Bin 0 -> 760 bytes .../test.example.org/004/gophertiles_177.jpg | Bin 0 -> 732 bytes .../test.example.org/004/gophertiles_178.jpg | Bin 0 -> 929 bytes .../test.example.org/004/gophertiles_179.jpg | Bin 0 -> 712 bytes .../test.example.org/004/gophertiles_180.jpg | Bin 0 -> 1013 bytes .../test/htdocs/test.example.org/005.txt | Bin 0 -> 10000000 bytes .../test/htdocs/test.example.org/006.html | 23 + .../test/htdocs/test.example.org/006/006.css | 21 + .../test/htdocs/test.example.org/006/006.js | 31 + .../test/htdocs/test.example.org/007.html | 21 + .../test/htdocs/test.example.org/007/007.py | 29 + .../test/htdocs/test.example.org/009.py | 21 + .../htdocs/test.example.org/files/empty.txt | 0 .../test/htdocs/test.example.org/funky.png | Bin 0 -> 7526 bytes .../test/htdocs/test.example.org/hello.py | 13 + .../test/htdocs/test.example.org/index.html | 45 + .../test/htdocs/test.example.org/info.php | 3 + .../test/htdocs/test.example.org/necho.py | 42 + .../test/htdocs/test.example.org/sei.png | Bin 0 -> 4310 bytes .../test/htdocs/test.example.org/upload.py | 47 + .../htdocs/test.example.org/xxx-1.0.2a.tar.gz | Bin 0 -> 489 bytes modules/http2/sandbox/test/load-urls-1.txt | 181 ++ modules/http2/sandbox/test/test_alt_host.sh | 46 + modules/http2/sandbox/test/test_common.sh | 249 ++ .../http2/sandbox/test/test_curl_altsvc.sh | 30 + modules/http2/sandbox/test/test_curl_get.sh | 132 + modules/http2/sandbox/test/test_curl_post.sh | 71 + modules/http2/sandbox/test/test_nghttp_get.sh | 279 ++ .../http2/sandbox/test/test_nghttp_post.sh | 75 + modules/http2/setup/Makefile.am | 29 + modules/http2/setup/h2.conf | 1 + modules/http2/setup/h2.load | 1 + modules/http2/setup/install-config.sh | 60 + 350 files changed, 35796 insertions(+) create mode 100644 modules/http2/.gitignore create mode 100644 modules/http2/AUTHORS create mode 100644 modules/http2/COPYING create mode 100644 modules/http2/ChangeLog create mode 100644 modules/http2/DISCUSS create mode 100644 modules/http2/INSTALL create mode 100644 modules/http2/LICENSE create mode 100644 modules/http2/Makefile.am create mode 100644 modules/http2/NEWS create mode 100644 modules/http2/README create mode 100644 modules/http2/README.md create mode 100644 modules/http2/configure.ac create mode 100644 modules/http2/m4/ax_check_compile_flag.m4 create mode 100644 modules/http2/m4/h2.m4 create mode 100644 modules/http2/mod-h2.xcodeproj/project.pbxproj create mode 100644 modules/http2/mod-h2.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 modules/http2/mod-h2.xcodeproj/project.xcworkspace/xcshareddata/mod-h2.xccheckout create mode 100644 modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/mod_h2 make.xcscheme create mode 100644 modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 modules/http2/mod_h2/.gitignore create mode 100644 modules/http2/mod_h2/Makefile.am create mode 100644 modules/http2/mod_h2/h2_alpn.c create mode 100644 modules/http2/mod_h2/h2_alpn.h create mode 100644 modules/http2/mod_h2/h2_alt_svc.c create mode 100644 modules/http2/mod_h2/h2_alt_svc.h create mode 100644 modules/http2/mod_h2/h2_config.c create mode 100644 modules/http2/mod_h2/h2_config.h create mode 100644 modules/http2/mod_h2/h2_conn.c create mode 100644 modules/http2/mod_h2/h2_conn.h create mode 100644 modules/http2/mod_h2/h2_conn_io.c create mode 100644 modules/http2/mod_h2/h2_conn_io.h create mode 100644 modules/http2/mod_h2/h2_ctx.c create mode 100644 modules/http2/mod_h2/h2_ctx.h create mode 100644 modules/http2/mod_h2/h2_from_h1.c create mode 100644 modules/http2/mod_h2/h2_from_h1.h create mode 100644 modules/http2/mod_h2/h2_h2.c create mode 100644 modules/http2/mod_h2/h2_h2.h create mode 100644 modules/http2/mod_h2/h2_io.c create mode 100644 modules/http2/mod_h2/h2_io.h create mode 100644 modules/http2/mod_h2/h2_io_set.c create mode 100644 modules/http2/mod_h2/h2_io_set.h create mode 100644 modules/http2/mod_h2/h2_mplx.c create mode 100644 modules/http2/mod_h2/h2_mplx.h create mode 100644 modules/http2/mod_h2/h2_private.h create mode 100644 modules/http2/mod_h2/h2_request.c create mode 100644 modules/http2/mod_h2/h2_request.h create mode 100644 modules/http2/mod_h2/h2_response.c create mode 100644 modules/http2/mod_h2/h2_response.h create mode 100644 modules/http2/mod_h2/h2_session.c create mode 100644 modules/http2/mod_h2/h2_session.h create mode 100644 modules/http2/mod_h2/h2_stream.c create mode 100644 modules/http2/mod_h2/h2_stream.h create mode 100644 modules/http2/mod_h2/h2_stream_set.c create mode 100644 modules/http2/mod_h2/h2_stream_set.h create mode 100644 modules/http2/mod_h2/h2_task.c create mode 100644 modules/http2/mod_h2/h2_task.h create mode 100644 modules/http2/mod_h2/h2_task_input.c create mode 100644 modules/http2/mod_h2/h2_task_input.h create mode 100644 modules/http2/mod_h2/h2_task_output.c create mode 100644 modules/http2/mod_h2/h2_task_output.h create mode 100644 modules/http2/mod_h2/h2_task_queue.c create mode 100644 modules/http2/mod_h2/h2_task_queue.h create mode 100644 modules/http2/mod_h2/h2_to_h1.c create mode 100644 modules/http2/mod_h2/h2_to_h1.h create mode 100644 modules/http2/mod_h2/h2_upgrade.c create mode 100644 modules/http2/mod_h2/h2_upgrade.h create mode 100644 modules/http2/mod_h2/h2_util.c create mode 100644 modules/http2/mod_h2/h2_util.h create mode 100644 modules/http2/mod_h2/h2_version.h.in create mode 100644 modules/http2/mod_h2/h2_worker.c create mode 100644 modules/http2/mod_h2/h2_worker.h create mode 100644 modules/http2/mod_h2/h2_workers.c create mode 100644 modules/http2/mod_h2/h2_workers.h create mode 100644 modules/http2/mod_h2/m4/h2.m4 create mode 100644 modules/http2/mod_h2/mod_h2.c create mode 100644 modules/http2/mod_h2/mod_h2.h create mode 100644 modules/http2/sandbox/.gitignore create mode 100644 modules/http2/sandbox/Makefile.am create mode 100644 modules/http2/sandbox/httpd/.gitignore create mode 100644 modules/http2/sandbox/httpd/Makefile create mode 100755 modules/http2/sandbox/httpd/get-openssl-latest.sh create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile.in create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/NWGNUmakefile create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/README create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.fig create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.ps create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/config.m4 create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.dsp create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.h create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/modules.mk create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_config.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_init.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_io.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_kernel.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_log.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_mutex.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_ocsp.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_pphrase.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_rand.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_vars.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_private.h create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_scache.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ocsp.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.c create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.h create mode 100644 modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_stapling.c create mode 100644 modules/http2/sandbox/httpd/packages/pcre-8.36.tar.gz create mode 100644 modules/http2/sandbox/httpd/patches/httpd-2.4.12-alpn-v5.patch create mode 100644 modules/http2/sandbox/httpd/patches/httpd-2.4.x-alpn-v4.patch create mode 100644 modules/http2/sandbox/httpd/patches/httpd-alpn-v4-v5.patch create mode 100644 modules/http2/sandbox/httpd/patches/httpd-npn.unified.diff.patch create mode 100644 modules/http2/sandbox/httpd/patches/openssl-1.0.2-alpn.patch create mode 100644 modules/http2/sandbox/httpd/patches/sni_misdirect.patch create mode 100644 modules/http2/sandbox/nghttp2/Makefile create mode 100644 modules/http2/sandbox/test/Makefile create mode 100644 modules/http2/sandbox/test/bin/php-wrapper create mode 100644 modules/http2/sandbox/test/bin/testrun create mode 100644 modules/http2/sandbox/test/clients/Makefile create mode 100644 modules/http2/sandbox/test/conf/httpd.conf create mode 100644 modules/http2/sandbox/test/conf/mods-available/mpm_event.load create mode 100644 modules/http2/sandbox/test/conf/mods-available/mpm_prefork.load create mode 100644 modules/http2/sandbox/test/conf/mods-available/mpm_worker.load create mode 100644 modules/http2/sandbox/test/conf/modules.conf create mode 100644 modules/http2/sandbox/test/conf/sites/aaa-noh2.example.org.conf create mode 100644 modules/http2/sandbox/test/conf/sites/test-ser.example.org.conf create mode 100644 modules/http2/sandbox/test/conf/sites/test.example.org.conf create mode 100644 modules/http2/sandbox/test/conf/ssl/.gitignore create mode 100644 modules/http2/sandbox/test/conf/ssl/ca.pem create mode 100644 modules/http2/sandbox/test/conf/ssl/cacerts.pem create mode 100644 modules/http2/sandbox/test/conf/ssl/extensions.conf create mode 100644 modules/http2/sandbox/test/conf/ssl/mod-h2.greenbytes.de.pem create mode 100644 modules/http2/sandbox/test/conf/ssl/noh2.example.org.x509.input create mode 100644 modules/http2/sandbox/test/conf/ssl/test-ser.example.org.x509.input create mode 100644 modules/http2/sandbox/test/conf/ssl/test.example.org.x509.input create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/001.html create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/002.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/003.html create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/003/003_img.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004.html create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_002.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_003.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_004.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_005.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_006.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_007.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_008.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_009.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_010.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_011.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_012.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_013.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_014.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_015.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_016.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_017.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_018.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_019.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_020.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_021.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_022.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_023.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_024.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_025.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_026.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_027.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_028.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_029.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_030.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_031.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_032.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_033.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_034.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_035.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_036.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_037.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_038.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_039.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_040.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_041.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_042.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_043.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_044.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_045.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_046.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_047.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_048.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_049.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_050.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_051.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_052.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_053.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_054.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_055.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_056.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_057.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_058.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_059.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_060.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_061.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_062.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_063.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_064.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_065.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_066.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_067.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_068.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_069.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_070.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_071.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_072.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_073.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_074.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_075.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_076.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_077.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_078.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_079.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_080.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_081.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_082.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_083.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_084.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_085.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_086.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_087.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_088.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_089.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_090.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_091.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_092.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_093.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_094.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_095.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_096.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_097.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_098.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_099.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_100.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_101.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_102.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_103.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_104.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_105.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_106.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_107.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_108.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_109.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_110.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_111.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_112.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_113.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_114.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_115.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_116.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_117.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_118.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_119.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_120.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_121.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_122.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_123.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_124.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_125.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_126.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_127.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_128.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_129.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_130.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_131.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_132.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_133.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_134.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_135.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_136.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_137.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_138.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_139.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_140.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_141.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_142.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_143.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_144.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_145.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_146.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_147.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_148.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_149.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_150.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_151.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_152.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_153.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_154.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_155.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_156.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_157.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_158.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_159.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_160.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_161.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_162.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_163.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_164.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_165.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_166.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_167.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_168.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_169.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_170.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_171.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_172.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_173.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_174.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_175.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_176.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_177.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_178.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_179.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_180.jpg create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/005.txt create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/006.html create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/006/006.css create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/006/006.js create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/007.html create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/007/007.py create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/009.py create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/files/empty.txt create mode 100755 modules/http2/sandbox/test/htdocs/test.example.org/funky.png create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/hello.py create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/index.html create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/info.php create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/necho.py create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/sei.png create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/upload.py create mode 100644 modules/http2/sandbox/test/htdocs/test.example.org/xxx-1.0.2a.tar.gz create mode 100644 modules/http2/sandbox/test/load-urls-1.txt create mode 100644 modules/http2/sandbox/test/test_alt_host.sh create mode 100644 modules/http2/sandbox/test/test_common.sh create mode 100644 modules/http2/sandbox/test/test_curl_altsvc.sh create mode 100644 modules/http2/sandbox/test/test_curl_get.sh create mode 100644 modules/http2/sandbox/test/test_curl_post.sh create mode 100644 modules/http2/sandbox/test/test_nghttp_get.sh create mode 100644 modules/http2/sandbox/test/test_nghttp_post.sh create mode 100644 modules/http2/setup/Makefile.am create mode 100644 modules/http2/setup/h2.conf create mode 100644 modules/http2/setup/h2.load create mode 100644 modules/http2/setup/install-config.sh diff --git a/modules/http2/.gitignore b/modules/http2/.gitignore new file mode 100644 index 0000000000..ca49620faf --- /dev/null +++ b/modules/http2/.gitignore @@ -0,0 +1,35 @@ +*.xcuserstate +sandbox/httpd/packages/httpd-2.4.x.tar.gz +sandbox/test/conf/sites/mod-h2.greenbytes.de.conf +*.o +*.slo +*.lo +*.la +*.pcap +.libs +.configured +.deps +compile +aclocal.m4 +autom4te.cache +autoscan.log +config.guess +config.log +config.status +config.sub +config.h +config.h.in +config.h.in~ +configure +configure.scan +depcomp +install-sh +libtool +ltmain.sh +missing +stamp-h1 +Makefile.in +Makefile +mod_h2-*.tar.gz +mod_h2/h2_version.h +m4 diff --git a/modules/http2/AUTHORS b/modules/http2/AUTHORS new file mode 100644 index 0000000000..07814ee7c2 --- /dev/null +++ b/modules/http2/AUTHORS @@ -0,0 +1 @@ +Stefan Eissing \ No newline at end of file diff --git a/modules/http2/COPYING b/modules/http2/COPYING new file mode 100644 index 0000000000..cde828996a --- /dev/null +++ b/modules/http2/COPYING @@ -0,0 +1,2 @@ + + Please see the file called LICENSE. diff --git a/modules/http2/ChangeLog b/modules/http2/ChangeLog new file mode 100644 index 0000000000..e7b03edfc2 --- /dev/null +++ b/modules/http2/ChangeLog @@ -0,0 +1,253 @@ +v0.7.3 +-------------------------------------------------------------------------------- + * sandbox update to nghttp2 1.0.4 + * rework of stream scheduling and thread sync + * test suite runs with mpm_prefork on OS X and Ubuntu (feedback welcome) + +v0.7.2 +-------------------------------------------------------------------------------- + * fixes crash with certain modules that (correctly) expected their + pre_connection hooks to work. Solves #28 + * fixes log statements and Makefile to compile sandbox on 32bit linux + +v0.7.1 +-------------------------------------------------------------------------------- + * h2_mplx now uses reference counting to enable a controlled destruction on + session termination. If this fixes all the crashes reported, remains to + be seen. + +v0.7.0 +-------------------------------------------------------------------------------- + * switching to nghttp2 v1.0.*, compilation + linkage with nghttp2 v0.7.* will + not work any more as there have been changes in nghttp2's API. The sandbox + builds against v1.0.2 and also pulls curl 7.43.0 which did the same version + switch. + * keeping support for h2-16/h2-14 ALPN identifiers until a 1.0 release + * varying h2 support (on|off) among virtual hosts on the same port is now + possible and should work correctly. + * improved mod_ssl alpn patch to correctly select the proper virtual host + even if the SSL library invokes SNI after ALPN callbacks. + * Disabled NPN support in sandbox built. The patch for httpd 2.4.x is still + there, but no longer applied. + * KNOWN ISSUE: when using mpm_event, the error + "error scoreboard is full, not at MaxRequestWorkers" + sometimes happens. Under investigation. mpm_worker ist stable and recommended + for now. + + +v0.6.6 +-------------------------------------------------------------------------------- + * adding sni_misdirect.patch for httpd/mod_ssl that changes status code when + TLS connections are reused for other vhosts. + +v0.6.5 +-------------------------------------------------------------------------------- + * httpd scoreboard fixups: scoreboard handles are still updated on the main + connection from all stream request incoming from it, since it is not trivial + to get new handles for h2 workers. Updating of scoreboard status has been + improved, no workers remain on "G"raceful shutdown in load tests any longer. + * some refacoring to isolate tls/alpn/upgrade code + * adding php-wrapper script to distribution, was missing + +v0.6.4 +-------------------------------------------------------------------------------- + * accepting "h2" on Upgrade: headers and allowing also Upgrade to work on TLS + connections that talk HTTP/1.1. + * logging WARNING once when mod_h2 is used in a "prefork" mpm configuration. + There seem to be issues with mod_proxy/rewrite and dankging I/O. + * added test suites for combinations with mod_proxy and mod_rewrite + * added test for request with Host: header where h2 is not enabled + * sandbox now builds local openssl 1.0.2 if 1.0.1 or older are installed + on the system. Prior 1.0.1 was accepted, but NPN support will be disabled + soon. + * added "Known Problems" section in README + * direct mode should also work with TLS connections, untested currently. + +v0.6.3 +-------------------------------------------------------------------------------- + * h2c direct mode is now enabled on http: virtual hosts. It can be disabled + by configuring "H2Direct off" for the base server. This works for clients + with prior knowledge that a http server supports h2c. + +v0.6.2 +-------------------------------------------------------------------------------- + * added "H2Direct (on|off)" as config directive. On a non-TLS host, it enables + direct h2c communication without any Upgrade dance. Useful for testing, for + example with h2load. + * fixed concurrency issue observed on a mpm_event server when closing sessions + +v0.6.1 +-------------------------------------------------------------------------------- + * relaxing task finished sync due to segfaults with mpm_event + * mod_reqtimeout enabled on stream processing again + * merged pr from ecovener, fix for ap_update_vhost_from_headers use + * tinkering with buffering on main connection + +v0.6.0 +-------------------------------------------------------------------------------- + * fiddling around with task/worker assignments to use the global h2_workers + lock less, giving better parallelism + * ./configure --enable-werror enables all sorts of compiler diagnostics, if + the chosen compiler supports them + * merged pull request with compiler warning fixes by LPardue and @samhurst + (Thanks!) + * new config option "H2SerializeHeaders (On|Off)" that determines if request + response headers should be serialized/parsed when converting from HTTP/2 to + httpd's internal HTTP/1 processing or request_recs are manipulated directly. + "Off" is default, "On" gives better compatibility. + * new config options "H2HackMpmEvent (On|Off) that enables a hack to make + internal connection work with the mpm_event module. Has no effect if other + mpm modules have been configured. Defaults to "On"." + * upgrading sandbox to nghttp2 0.7.15 + +v0.5.6 +-------------------------------------------------------------------------------- + * making SSL variables available in subprocess (e.g. CGI) environments if +configured (fixes #19) + +v0.5.5 +-------------------------------------------------------------------------------- + * improved transfer of large resources by 50% by more efficient writes + +v0.5.4 + -------------------------------------------------------------------------------- + * moving request handling and http/1 emulation into worker thread, offloading + main + * some fixes in connection shutdown re race condition with still active workers + * removing reqtimeout filters on stream connections + * taking in latest alpn changes from httpd trunk, made separate npn patch for + those who need to run with openssl 1.0.1 + * fixed handling of transient bucket in stream output data (led to corrupted + responses) + * reworked task join to eliminate race conditions during session shutdown + * info logging is less verbose + +v0.5.2 +-------------------------------------------------------------------------------- + * rewrote the input handling + * forwarding headers in camel case to HTTP/1 request prossing + * merging duplicate headers into single line with proper separators + * eliminated h2_bucket by using apr_bucket_brigades everywhere + * added test cases and fixed chunked input processing + * sandbox now uses curl 7.42.0 + * enhanced alpn patch slightly, compatible to old one, no need to repatch mod_ssl on existing installations + * adding some tests with fcgi, for sandbox testing please install php5-cgi + +v0.5.1 +-------------------------------------------------------------------------------- + * ensuring HOST header is properly set for internal request handling + * updated sandbox to latest nghttp2 release + +v0.5.0 +-------------------------------------------------------------------------------- + * improved resource handling and performance + * fixes lookup of correct server config when several virtual hosts are + available + +v0.4.5 +-------------------------------------------------------------------------------- + * fixed base64 decoding to use correct dialect when upgrading to h2c + +v0.4.4 +-------------------------------------------------------------------------------- + * adds missing file in distribution tar, fixes #11 + * sandbox now uses nghttp2 0.7.11 + +v0.4.3 +-------------------------------------------------------------------------------- + * heavy work on internal data transfers, use of apache bucket brigades for + improved performance and parallelism + * mod_h2 now performs proper flow-control on input. Uploads can no longer + flood memory of the server. + * changed mod_ssl patch to reflect current trunk changes in regard to NPN/ALPN + support. + * patched the trunk ALPN patch to make it do the right thing if no + ALPNPreference is configured + * added DESTDIR support in Makefile as supplied by Hanno Böck. + +v0.4.2 +-------------------------------------------------------------------------------- + * adding more low-level logging to NPN/ALPN negotiation + * added '-Werror' to module compiler flags (thanks @devurandom) + * debugged and tcpdumped around h2c startup handling with curl on certain + platforms. If you experience connection hangers, report pls with 'trace2' + level error log. + +v0.4.1 +-------------------------------------------------------------------------------- + * fixing infinite loop when aborting session with tasks hanging in read + +v0.4.0 +-------------------------------------------------------------------------------- + * h2 + h2-16 will be negiotiated/upgraded. Priority handling is implemented + in nghttp2, however assigning requests to workers has currently not the + necessary information. + * Alt-Svc support based on https://http2.github.io/http2-spec/alt-svc.html#indicator + Configuration directives "H2AltSvc" and "H2AltSvcMaxAge" added. Configurable + per virtual host. + * reduced lock contention and eliminated broadcast signalling on internal + condition variables, improved multi-thread performance + +v0.3.1 +-------------------------------------------------------------------------------- + * defining _GNU_SOURCE to pull in proper features and make APR header files + happy, fixes #7 + +v0.3.0 +-------------------------------------------------------------------------------- + * new directory structure, all sandbox related parts have been moved to + own sandbox dir + * non-sandbox configuration no longer triggers building of sandbox stuff + * cleanup up distribution builds to have smaller and working tar balls + +v0.2.2 +-------------------------------------------------------------------------------- + * optimizations on response reads + * being more apacheeeish, using APR_RINGs for queue handling + * using openssl latest.tar.gz to retrieve latest openssl for sandbox + * fixed crash in large request header handling + * better flushing of stream io resulting in performance improvements + * added sandbox tests for chunked responses of various sizes + * integrated fix (https://github.com/icing/mod_h2/pull/5) from + Jonathan (invader444) to fix chunked encoding when converting http/1 + responses to http2 unchunked data. + +v0.2.1 +-------------------------------------------------------------------------------- + * changed apr_pool usage to have more recycling, 50% performance increase in + loadtest + * added hack to enable mod_h2 to run in mpm_event (experimental) + * changed internal stream/data lookup from O(n/2) to O(log(n)) time + * fixed index in http2 to http1 header conversion leading to segfaults + * update openssl version downloaded for sandbox + * using sha256 for self-signed sandbox certificates + * sandbox certificate no longer announces itself as roo + (last 3 thanks to michael.koeller at greenbytes.de) + +v0.2.0 +-------------------------------------------------------------------------------- + * merged pull request from Tatsuhiro Tsujikawa, removing code for CONTINUATION + frames that are never seen by mod_h2 + * request/response headers are filtered when converting between HTTP/1.1 and + HTTP/2 where they can only do harm (Expect/Connection/etc.) + * added test cases for uploads + * fixed handling of uploads ;-) + * enabled h2c upgrade for "OPTIONS *" requests + * changed h2_stream_set implementation to use sorted apr array + * switched to nghttp2 v0.7.7 in sandbox + +v0.1.1 +-------------------------------------------------------------------------------- + * added cgi test cases (needs python installed) + * fixed typo in configure.ac that did not set the CPP flags correctly (#3) + * fixed handling of chunked encoding in responses + * merged header macro pull request from MATSUMOTO, Ryosuke + +v0.1.0 +-------------------------------------------------------------------------------- + * first alpha release, see README on how to use it and what is all missing + * h2 supported with openssl > 1.0.1 and patched mod_ssl (patch included and used in sandbox) + * h2c supported + * only usable in mpm_worker right now + * configure --enable-sandbox for a local install of everything needed + * tested with httpd 2.4.12 and nghttp2 0.7.5 on Ubuntu 14.04 and OS X 10.10 diff --git a/modules/http2/DISCUSS b/modules/http2/DISCUSS new file mode 100644 index 0000000000..c768252f09 --- /dev/null +++ b/modules/http2/DISCUSS @@ -0,0 +1,149 @@ + +mod_h2 - a http/2 modules for apache httpd +========================================== +The mod_h2 Apache httpd module implements the HTTP2 protocol (h2+h2c) on +top of libnghttp2 for httpd 2.4 servers. For a general description, see +the README, installation issues are detailed in INSTALL. + +This document is for discussion of the module's internals, current issues +and exploration of ideas. + + +THE GOALS +--------- +The goals of this module can be stated as follows: +- make the full htpp2 standard available in Apache httpd +- provide it as a module on top of httpd 2.4.x +- support deployment on standard unix platforms + + +HOW IT WORKS +------------ +The architecture of this module is heavily inspired by Google's mod_spdy: +The incoming, parallel requests (http2 streams) are dispatched to a thread +pool, responses are collected and multiplexed on the original connection. + +The major players in ascii art: + + h2_conn -> h2_session ------> h2_mplx ----> h2_task / h2_worker + (socket) (nghttp2_session) |-> h2_task / h2_worker + |-> h2_task / h2_worker + ... + +h2_session: by using nghttp2 API, is doing the http2 frame work, stream + states, flow control, etc. Sits as connection level filter + on standard httpd connections. Gets active either by ALPN + selection or as HTTP/1.1 Upgrade from a request. + +h2_mplx: is a somewhat specialized bucket_brigate. It multiplexes data + buckets associated with stream IDs in both directions and + has some specials to reset streams or announce response headers. + It also performs flow control on the downlink of streams. + +h2_task: having own conn_rec instance, plus in/out filters at connection + level, is converting http2 streams into http/1.1 requests and + parses back responses to http2 usable headers and data. + + +LIFETIMES +--------- +For each connection that uses HTTP/2, a new h2_session is created. That lives +as long as all objects it creates: h2_stream and h2_task instances. So, when +closing a h2_session, this waits until all associated h2_streams have +been destroyed. h2_streams will only be destroyed when their h2_task is either +removed from the schedule queue or has terminated. + +Insofar, the lifetimes from h2_session/h2_stream have the similar relations as +conn_rec/request_rec with the exception that there can be many simultaneous +h2_streams active per h2_session (and in various worker threads). + + +THREAD HANDLING +--------------- +h2_session is only ever accessed from the thread handling the original +connection. Same for h2_stream instances. The execution of what is necessary +for execution of a h2_stream happens in h2_task. h2_task gets instantiated +in the connection thread, but is the handed to a worker and, apart from +checking its status atomically, not called by any other thread. + +The object that shovels the data packages back and forth and is accessed from +multiple threads is h2_mplx. h2_tasks use it to retrieve their input and feed +it their output. h2_mplx blocks h2_tasks when no input is available or +the amount of output queue has reached a certain maximum. + +There is a nice thread pool in apr-util which even suports priority scheduling. +It would be good to exchange the h2_worker(s) for this pool, except mod_h2 +has the use case that streams can be aborted by the client and the +corresponding task needs to be removed from the schedule without any +blocking wait for a possibly running task to complete. This is not offered +by apr-util. + + +LOCKS / CONDITIONS +------------------ +apr_thread_mutex_t is used for locking. apr_thread_cond_t is used for blocking +and signalling. The number of such objects created grows linear with the +number of parallel main connections, plus the number of worker threads. + +This means it is not influenced by the number of outstanding requests. The +intention for this is to allow, possibly, many outstanding requests per HTTP/2 +connection without consuming unnecessary server resources. + + +MEMORY HANDLING +--------------- +The session pool is a sub pool of the main connection pool, with the twist +that it has its own allocator (apr_allocator_t). That allocator is protected +with a apr_thread_mutex (one instance per session). All further sub-pools share +this allocator. + +Protecting the allocator allows sub pools to live in other threads +concurrently, Necessary for parallel processing of HTTP/2 streams. (As +alternative, using root pool for streams was tested, but resulted in poorer +performance). + +Everything related to a h2_stream (and even the struct itself) is allocated +from a new subpool. This guarantuees that all memory is recycled when the +stream is destroyed. Same holds true for h2_tasks, which get their own +sub pools. + +FILE BUCKET HANDLING +-------------------- +Requests for static resources result most often in a single file bucket being +send as body of the response. This would ideally be placed into eh h2_mplx, +thus finished the h2_task and freeing the h2_worker for other things. + +This is difficult for the following 2 reasons: +1. Finishing the h2_task will free pool and run registered cleanup functions + that closes the file. The file needs to traverse this boundary. Early + attempts at doing this nicely have failed. +2. In load scenarios, we quickly run out of open file handles. With 100 max + parallel stream per connection, the process limits can be reached quite + easily. + +Solving 1) can be done by careful coding and good debugging of what the apache +runtime does here. Solving 2) requires some kind of resource booking scheme +inside the httpd child process, it seems. + +For now, mod_h2 reads files when placing the data into the h2_mplx. That means +that files are completely read before the h2_task is finished and the h2_worker +is available again. This limits the number of open files in buckets to the +number of h2_worker (by order of magnitude - there can be sub requests etc.). + +This works well and stable, but does not allow the transfer speeds of httpd's +optimized HTTP/1 implementtion. + + +DISCUSSION / OPEN QUESTIONS +--------------------------- +- HTTP/2 Padding feature is not implemented. As RFC7540, Ch. 10.7 describes, + using a fixed length padding is counter-productive, same as simple random + schemes. The ideal padding is supposed to be chosen by the application. So + maybe a response note or special header should determine it? +- HTTP/2 Priority handling of streams is implemented in nghttp2, HOWEVER it + has no effect on h2_task scheduling. If there is a backlog of streams for + processing by workers, the stream with the highest priority should be + processed first. This information is currently not available via the nghttp2 + API. + + diff --git a/modules/http2/INSTALL b/modules/http2/INSTALL new file mode 100644 index 0000000000..261a7ce82c --- /dev/null +++ b/modules/http2/INSTALL @@ -0,0 +1,375 @@ + +mod-h2 - a http/2 modules for apache httpd, Installation +======================================================== + +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + +Briefly, the shell command `./configure && make && make install' +should configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + +The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + +It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + +If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + +The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + +1. `cd' to the directory containing the package's source code and type +`./configure' to configure the package for your system. + +Running `configure' might take a while. While running, it prints +some messages telling which features it is checking for. + +2. Type `make' to compile the package. + +3. Optionally, type `make check' to run any self-tests that come with +the package, generally using the just-built uninstalled binaries. + +4. Type `make install' to install the programs and any data files and +documentation. When installing into a prefix owned by root, it is +recommended that the package be configured and built as a regular +user, and only the `make install' phase executed with root +privileges. + +5. Optionally, type `make installcheck' to repeat any self-tests, but +this time using the binaries in their final installed location. +This target does not install anything. Running this target as a +regular user, particularly if the prior `make install' required +root privileges, verifies that the installation completed +correctly. + +6. You can remove the program binaries and object files from the +source code directory by typing `make clean'. To also remove the +files that `configure' created (so you can compile the package for +a different kind of computer), type `make distclean'. There is +also a `make maintainer-clean' target, but that is intended mainly +for the package's developers. If you use it, you may have to get +all sorts of other programs in order to regenerate files that came +with the distribution. + +7. Often, you can also type `make uninstall' to remove the installed +files again. In practice, not all packages have tested that +uninstallation works correctly, even though it is required by the +GNU Coding Standards. + +8. Some packages, particularly those that use Automake, provide `make +distcheck', which can by used by developers to test that all other +targets like `make install' and `make uninstall' work correctly. +This target is generally not run by end users. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + +You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + +./configure CC=c99 CFLAGS=-g LIBS=-lposix + +*Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. + +With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + +./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +CPP="gcc -E" CXXCPP="g++ -E" + +This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + +You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + +In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + +The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + +The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + +The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + +If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + +For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + +On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + +./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + +HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + +On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + +./configure CC="cc" + +and if that doesn't work, try + +./configure CC="cc -nodtk" + +On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + +On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + +./configure --prefix=/boot/common + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + +CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + +OS +KERNEL-OS + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + +If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + +If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + +./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: + +CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it +operates. + +`--help' +`-h' +Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' +Print a summary of the options unique to this package's +`configure', and exit. The `short' variant lists options used +only in the top level, while the `recursive' variant lists options +also present in any nested packages. + +`--version' +`-V' +Print the version of Autoconf used to generate the `configure' +script, and exit. + +`--cache-file=FILE' +Enable the cache: use and save the results of the tests in FILE, +traditionally `config.cache'. FILE defaults to `/dev/null' to +disable caching. + +`--config-cache' +`-C' +Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' +Do not print messages saying which checks are being made. To +suppress all normal output, redirect it to `/dev/null' (any error +messages will still be shown). + +`--srcdir=DIR' +Look for the package's source code in directory DIR. Usually +`configure' can determine that directory automatically. + +`--prefix=DIR' +Use DIR as the installation prefix. *note Installation Names:: +for more details, including other options available for fine-tuning +the installation locations. + +`--no-create' +`-n' +Run the configure checks, but stop before creating any output +files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + + + + diff --git a/modules/http2/LICENSE b/modules/http2/LICENSE new file mode 100644 index 0000000000..46b23188b6 --- /dev/null +++ b/modules/http2/LICENSE @@ -0,0 +1,202 @@ + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/modules/http2/Makefile.am b/modules/http2/Makefile.am new file mode 100644 index 0000000000..5668b35181 --- /dev/null +++ b/modules/http2/Makefile.am @@ -0,0 +1,48 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +SUBDIRS = @BUILD_SUBDIRS@ +DIST_SUBDIRS = mod_h2 sandbox setup + +ACLOCAL_AMFLAGS = -I m4 + + +dist_doc_DATA = README + + +.PHONY: test loadtest start stop restart + +start: + make -C sandbox start + +restart: + make -C sandbox restart + +stop: + make -C sandbox stop + +test: + make -C sandbox test + +loadtest: + make -C sandbox loadtest + +mpm_worker: + make -C sandbox mpm_worker + +mpm_event: + make -C sandbox mpm_event + +mpm_prefork: + make -C sandbox mpm_prefork diff --git a/modules/http2/NEWS b/modules/http2/NEWS new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/http2/README b/modules/http2/README new file mode 100644 index 0000000000..3389200aa3 --- /dev/null +++ b/modules/http2/README @@ -0,0 +1 @@ +See README.md \ No newline at end of file diff --git a/modules/http2/README.md b/modules/http2/README.md new file mode 100644 index 0000000000..b6441c87f5 --- /dev/null +++ b/modules/http2/README.md @@ -0,0 +1,205 @@ + +#mod_h2 - http/2 for Apache httpd + +Copyright (C) 2015 greenbytes GmbH + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. See LICENSE for details. + + +This repository contains a Apache httpd module implementing the HTTP2 +protocol. It uses nghttp2 (https://nghttp2.org) as base engine and connects +it with the Apache infrastructure. + + +##Status +In development. Use at your own risk. See [Known Problems](#known-problems) below for a list +of things you might encounter. + +##Tested Platforms +* OS: Ubuntu 14.04, OS X 10.10 +* Apache httpd 2.4.12 (patch needed) +* Openssl 1.0.1 + 1.0.2 + +If someone wants to test other platforms or contribute adapations in a +github pull request, she is more than welcome. + + +##Features +This module supports the protocols "h2" (HTTP2 over TLS) and "h2c" (HTTP2 over plain +HTTP connections via Upgrade). You can enable it for the whole server or +for specific virtual hosts only. More on this below on "Configuration". + +Specifically, the protocols "h2", "h2-16", "h2-14" and its "h2c" cousins +are announced to clients. Support for "h2-14" and "h2-16" is expected to +disappear silently as these are no standard and are currently being used +for the interop testing phase only. + +##Configuration +The test setup in test/conf/* that gets installed in gen/install for the +local httpd build contains some simple examples of how this module can +be configured. + +There are several configuration commands available when mod_h2 is loaded, +such as: + +* H2Engine (on/off), "on" to enable HTTP/2 protocol handling, default: off +* H2MaxSessionStreams n maximum number of open streams per session, default: 100 +* H2InitialWindowSize n initial window size on client DATA, default: 16k +* H2MaxHeaderListSize n maximum acceptable size of request headers, default: 64k +* H2MinWorkers n minimum number of worker threads per child, default: mpm configured MaxWorkers/2 +* H2MaxWorkers n maximum number of worker threads per child, default: mpm configured thread limit/2 +* H2StreamMaxMemSize n maximum number of bytes buffered in memory for a stream, default: 64k +* H2AltSvc name=host:port Announce an "alternate service" to clients (see https://http2.github.io/http2-spec/alt-svc.html for details), default: empty +* H2AltSvcMaxAge n number of seconds Alt-Svc information is valid, default: will not be sent, specification defaults to 24h +* H2SerializeHeaders (on/off), "off" serialize/parse request+response headers for streams, as if they arrived in HTTP/1 format. When off, certain parts of httpd core filters are disabled/replaced to allow for a more efficient handling. +* H2HackMpmEvent (on/off), "on" performs a hack on internal connection in order to make mpm_event working, has no effect on other mpm modules +* H2Direct (on/off), "on" to enable h2c direct mode on a non-TLS host, default: off + +All these configuration parameters can be set on servers/virtual hosts and +are not available on directory level. Note that Worker configuration is +only relevant on the base apache server and will be read - but ignored - +on any virtual hosts. + + +##Dependencies +1. The module is written in plain C and links to libnghttp2 and the +apache runtime. Currently, only nghttp2 version 0.7.x are supported. nghttp2 v1.0.0 introduced a incompatible API change. mod_h2 will change once there is a curl release working with 1.0.0. That release of mod_h2 will then stop support for nghttp2 0.7.x. Heads up. +1. For "h2" support - the part of HTTP2 that uses TLS - a patched mod_ssl +needs to be present in the server. The patch is available in httpd/patches +and automatically applied in sandbox mode. +1. For ALPN/NPN protocol negotiation (the basic TLS HELLO part) to work, +at least OpenSSL 1.0.1 is needed (OpenSSL 1.0.2 perferred). +1. mod_h2 is tested with the `mpm_worker` module. The `mpm_event` module is supported by a hack at the moment, handle with care. + + +##Installation +mod_h2 is using autoconf/automake for configuration and build handling. If you +have a git checkout, refer to 'Build from git' below. If you have a release +extracted, you need to: +``` +> cd mod_h2-x.x.x +> ./configure +> make +``` + +For general handling of 'configure', see INSTALL. For mod_h2 specifically, +there are two arguments to know: +* `--enable-sandbox` build a complete sandbox installation with own httpd, own libnghttp2 +* `--enable-werror` build with tons of compiler diagnostics enabled +* `--with-apxs=` for a non-sandboxed installation where the apxs (from the apache development environment) is in an unusual location. + +If you run 'configure' without arguments, it assumes a non-sandbox'ed built +where apxs and libnghttp2 are properly installed. + + +###Sandbox Installation: + +The sandbox installation puts everything in ./gen/install: httpd, nghttp2, curl +and other fine things. For testing the module, or just trying it out, this +has the following advantages: +* conflicts with "wrong" versions already installed on your system are avoided +* you can do the installation and test without root privileges +* certain patches can be applied that are necessary for all features to work, see "Dependencies"." + + +##Build from git +Building from git is easy, but please be sure that at least autoconf 2.68 is +used:: +``` +> autoreconf -i +> automake +> autoconf +> ./configure +> make +``` + +##Supported Platforms +mod_h2 has been developed under Ubuntu 14.04 LTS and OS X 10.10. The module +itself depends only on an installed APXS (the Apache runtime platform) and +libnghttp2. As long as both are present, the module itself should build +just fine. + +Ubuntu :Install the prerequisite software. On a 14.04 LTS server, that should be: +``` +> sudo apt-get install git gcc g++ libpcre3-dev libcunit1-dev libev-dev libjansson-dev libjemalloc-dev cython make binutils autoconf automake autotools-dev libtool pkg-config zlib1g-dev libssl-dev libxml2-dev libevent-dev python3.4-dev libevent-openssl-2.0-5 php5-cgi +``` + +OS X: on OS X 10.10, building the project requires a homebrew installation and the following packages installed via brew: +* pkg-config +* for httpd the Makefile will download and install: + * pcre + * apr + apr-util + * openssl + exact versions and download urls in httpd/Makefile +* for nghttp2 the Makefile will download and install: + * zlib + * libev + exact versions and download urls in httpd/Makefile +* for sandbox tests you will need php5-cgi from homebrew + +##Architecture, Limits, Details +See DISCUSS. + + +##Sandbox Testing +The sandbox build contains some test cases. In order to run those, you +need to: +``` +> make +> make install +> make test +``` +The sandbox creates its own httpd and nghttp2 installation in gen/install +and configures httpd to run on ports 12345+12346 (TLS). It also generates +a self-signed certificate for the servers under the name test.example.org +and test-ser.example.org. +You should make entries in /etc/hosts like +``` +127.0.0.1 test.example.org test +127.0.0.1 test-ser.example.org test +``` +for tests to work properly. + +Another issue is testing with browsers like Chrome or Firefox. If you point +them at test.example.org, they will complain about the self-signed certificate, +offer you to connect anyway and, if you choose that, refuse to work. I think +they have a much stricter cert checking for HTTP/2 and the UI needs an update +here. + +I myself configure an additional site into the sandbox server with a real +certificate and test browsers successfully there. But I cannot share this +certificate with the world. If there is a better way to test browser interop, +I am happy to be given pointers. + +#Known Issues +* If you use the "prefork" mpm, there are reported problems with using mod_h2 and mod_prody/mod_rewrite against another server which disappear when using mpm_event or mpm_worker in the otherwise unchanged configuration. +* If you test chrome/firefox against a httpd with mod_h2 and get "ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY", this means that the browser considers the installed SSL certificates as not good enough to use HTTP/2. This will happen with the sandbox installation, as that one has only a self-signed certificate. If you disable mod_h2, chrome/firefox will seem to be working fine again against your server. This is due to the fact that SSL requirements are, for backward compatibility, relaxed when talking HTTP/1. Unfortunately, chrome/firefox do currently not offer a better user experience in indicating what part of the certificate was considered inadequate. For example, certain signing algorithms in combination with expiration dates are no longer accepted. This becomes pretty hard to debug for someone not fluent in TLS and PKI. +* Some modules will not be fully compatible with HTTP/2 connections. mod_logio, for example, will not properly report the accumulated traffic per connection as requests are handled in sub-connecition and that data is never aggregated. + +##TODO +* Thanks to the excellent nghttp2, the module currently supports stream priority +handling, but nghttp2 offers at the moment (v0.7.15) no way to use the prio +information for request scheduling. +* mpm_event: supported by a hack atm. Needs an official patch with an Optional +function +* http trailers are not implemented +* mod_h2 removes reqtimeout input filter for its connection. + + +##Licensing +Please see the file called LICENSE. + + +##Credits +This work has been funded by the GSM Association (http://gsma.com). The module +itself was heavily influenced by mod_spdy, the Google implementation of their +SPDY protocol. And without Tatsuhiro Tsujikawa excellent nghttp2 work, this +would not have been possible. + + +Münster, 20.05.2015, + +Stefan Eissing, greenbytes GmbH diff --git a/modules/http2/configure.ac b/modules/http2/configure.ac new file mode 100644 index 0000000000..39c7b57b2a --- /dev/null +++ b/modules/http2/configure.ac @@ -0,0 +1,211 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +AC_PREREQ([2.69]) +AC_INIT([mod_h2], [0.7.3], [stefan.eissing@greenbytes.de]) + +LT_PREREQ([2.2.6]) +LT_INIT() +dnl See versioning rule: +dnl http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +AC_SUBST(LT_CURRENT, 11) +AC_SUBST(LT_REVISION, 0) +AC_SUBST(LT_AGE, 6) + +major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"` +minor=`echo $PACKAGE_VERSION |cut -d. -f2 | sed -e "s/[^0-9]//g"` +patch=`echo $PACKAGE_VERSION |cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g"` + +PACKAGE_VERSION_NUM=`printf "0x%02x%02x%02x" "$major" "$minor" "$patch"` + +AC_SUBST(PACKAGE_VERSION_NUM) + +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AC_CONFIG_MACRO_DIR([m4]) + +AM_INIT_AUTOMAKE([subdir-objects no-define]) + +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +AC_CONFIG_SRCDIR([mod_h2/h2_config.c]) +AC_CONFIG_HEADERS([mod_h2/config.h]) + +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--enable-werror], + [Turn on compile time warnings])], + [werror=$enableval], [werror=no]) + +AC_ARG_ENABLE([sandbox], [AS_HELP_STRING([--enable-sandbox], + [Build a sandbox installation [default=no]])], + [case "${enableval}" in + yes) build_mode=sandbox ;; + no) build_mode=extern ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-sandbox]) ;; + esac], + [build_mode=extern]) + +AC_ARG_WITH([apxs], [AS_HELP_STRING([--with-apxs], + [Use APXS executable [default=check]])], + [request_apxs=$withval], [request_apxs=check]) + + +# Checks for programs. +AC_PROG_CC +AC_PROG_CC_STDC + +if test "x$werror" != "xno"; then + AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"]) + AX_CHECK_COMPILE_FLAG([-Wextra], [CFLAGS="$CFLAGS -Wextra"]) + AX_CHECK_COMPILE_FLAG([-Werror], [CFLAGS="$CFLAGS -Werror"]) + AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="$CFLAGS -Wmissing-prototypes"]) + AX_CHECK_COMPILE_FLAG([-Wstrict-prototypes], [CFLAGS="$CFLAGS -Wstrict-prototypes"]) + AX_CHECK_COMPILE_FLAG([-Wmissing-declarations], [CFLAGS="$CFLAGS -Wmissing-declarations"]) + AX_CHECK_COMPILE_FLAG([-Wpointer-arith], [CFLAGS="$CFLAGS -Wpointer-arith"]) + # we like to use such things... + #AX_CHECK_COMPILE_FLAG([-Wdeclaration-after-statement], [CFLAGS="$CFLAGS -Wdeclaration-after-statement"]) + AX_CHECK_COMPILE_FLAG([-Wformat-security], [CFLAGS="$CFLAGS -Wformat-security"]) + AX_CHECK_COMPILE_FLAG([-Wwrite-strings], [CFLAGS="$CFLAGS -Wwrite-strings"]) + AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"]) + AX_CHECK_COMPILE_FLAG([-Winline], [CFLAGS="$CFLAGS -Winline"]) + AX_CHECK_COMPILE_FLAG([-Wnested-externs], [CFLAGS="$CFLAGS -Wnested-externs"]) + AX_CHECK_COMPILE_FLAG([-Wfloat-equal], [CFLAGS="$CFLAGS -Wfloat-equal"]) + AX_CHECK_COMPILE_FLAG([-Wundef], [CFLAGS="$CFLAGS -Wundef"]) + AX_CHECK_COMPILE_FLAG([-Wendif-labels], [CFLAGS="$CFLAGS -Wendif-labels"]) + AX_CHECK_COMPILE_FLAG([-Wempty-body], [CFLAGS="$CFLAGS -Wempty-body"]) +# does not make sense with APR as it prefers char* to void* +# AX_CHECK_COMPILE_FLAG([-Wcast-align], [CFLAGS="$CFLAGS -Wcast-align"]) + AX_CHECK_COMPILE_FLAG([-Wclobbered], [CFLAGS="$CFLAGS -Wclobbered"]) + AX_CHECK_COMPILE_FLAG([-Wvla], [CFLAGS="$CFLAGS -Wvla"]) + AX_CHECK_COMPILE_FLAG([-Wpragmas], [CFLAGS="$CFLAGS -Wpragmas"]) + AX_CHECK_COMPILE_FLAG([-Wunreachable-code], [CFLAGS="$CFLAGS -Wunreachable-code"]) + AX_CHECK_COMPILE_FLAG([-Waddress], [CFLAGS="$CFLAGS -Waddress"]) + AX_CHECK_COMPILE_FLAG([-Wattributes], [CFLAGS="$CFLAGS -Wattributes"]) + AX_CHECK_COMPILE_FLAG([-Wdiv-by-zero], [CFLAGS="$CFLAGS -Wdiv-by-zero"]) + AX_CHECK_COMPILE_FLAG([-Wshorten-64-to-32], [CFLAGS="$CFLAGS -Wshorten-64-to-32"]) +fi + + +AC_MSG_NOTICE("configuring for $build_mode build") + +if test x"$build_mode" = "xsandbox"; then + if test x"$request_apxs" != "xcheck"; then + AC_MSG_ERROR([when sandbox mode is enabled, specifying apxs is not allowed]) + fi + + # easy, we know where everything will be + # + export BUILD_SUBDIRS="sandbox mod_h2" + + prefix="$PWD/sandbox/install" + APXS="$prefix/bin/apxs" + LDFLAGS="$LDFLAGS -L${prefix}/lib" + LIBS="$LIBS -lnghttp2" + CPPFLAGS="$CPPFLAGS -I${prefix}/include" + export SYSCONF_DIR="$prefix/conf" + export LIBEXEC_DIR="$prefix/modules" + # On Ubuntu, we have a propblem with APR 1.5.1 and system includes that + # causes compilation to abort since no definition of PATH_MAX can be found. + # In sandbox build, we just define it therefore, as a quick workaround + CPPFLAGS="$CPPFLAGS -DPATH_MAX=4096" + + # we use a new nghttp2 in the sandbox which has these features + NGHTTP2_HAS_DATA_CB=1 + +else + # production, we need to find where the apxs is. which then + # can tell us the various directories we need. + # + if test x"$request_apxs" = "xcheck"; then + AC_PATH_PROG([APXS], [apxs]) + if test "x${APXS}" = "x"; then + AC_MSG_ERROR("no APXS installation found") + fi + else + APXS="$request_apxs" + AC_MSG_NOTICE("using APXS=$APXS as configured") + fi + + export BUILD_SUBDIRS="mod_h2 setup" + + prefix="$($APXS -q prefix)" + LDFLAGS="$LDFLAGS -L$($APXS -q libdir)" + CPPFLAGS="$CPPFLAGS -I$($APXS -q includedir) -I$($APXS -q APR_INCLUDEDIR)" + export SYSCONF_DIR="$($APXS -q sysconfdir)" + export LIBEXEC_DIR="$($APXS -q LIBEXECDIR)" + + # We need nghttp2 to be in our link path, check for it. + # + AC_CHECK_LIB([nghttp2], [nghttp2_session_server_new2], , + [AC_MSG_ERROR("library nghttp2 not found")]) + + AC_CHECK_LIB([nghttp2], [nghttp2_session_callbacks_set_send_data_callback], + [NGHTTP2_HAS_DATA_CB=1], [NGHTTP2_HAS_DATA_CB=0]) + +fi + +# Checks for header files. +AC_CHECK_HEADERS([ \ + assert.h \ + stddef.h \ +]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_INT32_T +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_TYPE_UINT32_T +AC_TYPE_UINT8_T + +# Checks for library functions. +AC_CHECK_FUNCS([memmove memset strcasecmp strchr]) + +AC_CHECK_PROG([A2ENMOD],[a2enmod]) + +# substitution in generated files +AC_SUBST(BUILD_SUBDIRS) +AC_SUBST(SYSCONF_DIR) +AC_SUBST(LIBEXEC_DIR) +AC_SUBST(NGHTTP2_HAS_DATA_CB) + +AC_CONFIG_FILES([ + Makefile + mod_h2/Makefile + mod_h2/h2_version.h + sandbox/Makefile + setup/Makefile +]) + +AC_OUTPUT + +AC_MSG_NOTICE([summary of build options: + + Version: ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE + Host type: ${host} + Build Type: ${build_mode} + Install prefix: ${prefix} + APXS: ${APXS} + C compiler: ${CC} + CFLAGS: ${CFLAGS} + WARNCFLAGS: ${WARNCFLAGS} + LDFLAGS: ${LDFLAGS} + LIBS: ${LIBS} + CPPFLAGS: ${CPPFLAGS} + C preprocessor: ${CPP} + BUILD_SUBDIRS ${BUILD_SUBDIRS} + a2enmod ${A2ENMOD:--} +]) diff --git a/modules/http2/m4/ax_check_compile_flag.m4 b/modules/http2/m4/ax_check_compile_flag.m4 new file mode 100644 index 0000000000..51df0c09a7 --- /dev/null +++ b/modules/http2/m4/ax_check_compile_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 3 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/modules/http2/m4/h2.m4 b/modules/http2/m4/h2.m4 new file mode 100644 index 0000000000..8ba0b2bd4d --- /dev/null +++ b/modules/http2/m4/h2.m4 @@ -0,0 +1 @@ +# just so it is not empty diff --git a/modules/http2/mod-h2.xcodeproj/project.pbxproj b/modules/http2/mod-h2.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..e9668f7aac --- /dev/null +++ b/modules/http2/mod-h2.xcodeproj/project.pbxproj @@ -0,0 +1,982 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXFileReference section */ + B20946CA1B25D4430041992F /* test_alt_host.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = test_alt_host.sh; sourceTree = ""; }; + B20946CC1B2865BB0041992F /* h2_alpn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_alpn.c; sourceTree = ""; }; + B20946CD1B2865BB0041992F /* h2_alpn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_alpn.h; sourceTree = ""; }; + B20946CE1B29D8C30041992F /* sni_misdirect.patch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sni_misdirect.patch; sourceTree = ""; }; + B20E441F1ACC07E8003D21AE /* test_curl_get.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = test_curl_get.sh; sourceTree = ""; }; + B20E44201ACC088E003D21AE /* test_curl_post.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = test_curl_post.sh; sourceTree = ""; }; + B21BFCF91B023B840031EBCD /* h2_task_queue.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_task_queue.c; sourceTree = ""; }; + B21BFCFA1B023B840031EBCD /* h2_task_queue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_task_queue.h; sourceTree = ""; }; + B225490C1A6EAC37004BDEC9 /* mod_h2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mod_h2.c; sourceTree = ""; }; + B225490D1A6EAE9F004BDEC9 /* h2_config.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_config.c; sourceTree = ""; }; + B225490E1A6EAE9F004BDEC9 /* h2_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_config.h; sourceTree = ""; }; + B225491E1A6FB8DF004BDEC9 /* h2_h2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_h2.c; sourceTree = ""; }; + B225491F1A6FB8DF004BDEC9 /* h2_h2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_h2.h; sourceTree = ""; }; + B22549331A6FBEF1004BDEC9 /* h2_ctx.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_ctx.c; sourceTree = ""; }; + B22549341A6FBEF1004BDEC9 /* h2_ctx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_ctx.h; sourceTree = ""; }; + B22549361A6FCCAA004BDEC9 /* mod_h2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mod_h2.h; sourceTree = ""; }; + B22549371A6FCE13004BDEC9 /* h2_private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_private.h; sourceTree = ""; }; + B22549381A710329004BDEC9 /* h2_session.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_session.c; sourceTree = ""; }; + B22549391A710329004BDEC9 /* h2_session.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_session.h; sourceTree = ""; }; + B225493A1A711985004BDEC9 /* h2_conn_io.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_conn_io.c; sourceTree = ""; }; + B225493B1A711985004BDEC9 /* h2_conn_io.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_conn_io.h; sourceTree = ""; }; + B225493C1A713D18004BDEC9 /* h2_util.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_util.c; sourceTree = ""; }; + B225493D1A713D18004BDEC9 /* h2_util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_util.h; sourceTree = ""; }; + B227966E1AEE93B000376B40 /* httpd-npn.unified.diff.patch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "httpd-npn.unified.diff.patch"; sourceTree = ""; }; + B22D25281AA89A0B0041D8E5 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + B24CB1221AC94D6A0057413B /* h2_alt_svc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_alt_svc.c; sourceTree = ""; }; + B24CB1231AC94D6A0057413B /* h2_alt_svc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_alt_svc.h; sourceTree = ""; }; + B24CB1241AC96BFE0057413B /* test_curl_altsvc.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = test_curl_altsvc.sh; sourceTree = ""; }; + B2546D881A7F71F80033A875 /* h2_task.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_task.c; sourceTree = ""; }; + B2546D891A7F71F80033A875 /* h2_task.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_task.h; sourceTree = ""; }; + B2546D8E1A7FA7D70033A875 /* h2_task_output.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_task_output.c; sourceTree = ""; }; + B2546D8F1A7FA7D70033A875 /* h2_task_output.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_task_output.h; sourceTree = ""; }; + B2546D971A7FC2A60033A875 /* h2_from_h1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_from_h1.c; sourceTree = ""; }; + B2546D981A7FC2A60033A875 /* h2_from_h1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_from_h1.h; sourceTree = ""; }; + B2546D991A81079D0033A875 /* h2_stream_set.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_stream_set.c; sourceTree = ""; }; + B2546D9A1A81079D0033A875 /* h2_stream_set.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_stream_set.h; sourceTree = ""; }; + B256C4BA1ADD5FF10042C760 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + B271425E1AB9DD59004EF82E /* h2_io_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_io_set.c; sourceTree = ""; }; + B271425F1AB9DD59004EF82E /* h2_io_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_io_set.h; sourceTree = ""; }; + B27142601AB9DD76004EF82E /* h2_io.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_io.c; sourceTree = ""; }; + B27142611AB9DD76004EF82E /* h2_io.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_io.h; sourceTree = ""; }; + B272F2311B1E13D8007A20A5 /* httpd-2.4.x-alpn-v4.patch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "httpd-2.4.x-alpn-v4.patch"; sourceTree = ""; }; + B27BBD2D1A6575C200C58A41 /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; + B27D32E81A9487B4003DBAF4 /* h2_mplx.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_mplx.c; sourceTree = ""; }; + B27D32E91A9487B4003DBAF4 /* h2_mplx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_mplx.h; sourceTree = ""; }; + B284ACC91A7B9DF900C35863 /* h2_task_input.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_task_input.c; sourceTree = ""; }; + B284ACCA1A7B9DF900C35863 /* h2_task_input.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_task_input.h; sourceTree = ""; }; + B2A6EF171A9B598B005DFC5B /* h2_request.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_request.c; sourceTree = ""; }; + B2A6EF181A9B598B005DFC5B /* h2_request.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_request.h; sourceTree = ""; }; + B2A6EF281A9C79A6005DFC5B /* h2_upgrade.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_upgrade.c; sourceTree = ""; }; + B2A6EF291A9C79A6005DFC5B /* h2_upgrade.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_upgrade.h; sourceTree = ""; }; + B2A6EF2A1A9E3A93005DFC5B /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INSTALL; sourceTree = ""; }; + B2A6EF2C1A9F2452005DFC5B /* DISCUSS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DISCUSS; sourceTree = ""; }; + B2AABE611AC5A9B400A90B72 /* h2_version.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = h2_version.h.in; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.c; }; + B2B170B31B2EC73400EDC007 /* test.example.org.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.example.org.conf; sourceTree = ""; }; + B2B170B41B2F02C100EDC007 /* testrun */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = testrun; sourceTree = ""; }; + B2B170B61B303B0C00EDC007 /* noh2.example.org.x509.input */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = noh2.example.org.x509.input; sourceTree = ""; }; + B2B170B81B316FB100EDC007 /* aaa-noh2.example.org.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "aaa-noh2.example.org.conf"; sourceTree = ""; }; + B2B170B91B31BF7000EDC007 /* httpd-2.4.12-alpn-v5.patch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "httpd-2.4.12-alpn-v5.patch"; sourceTree = ""; }; + B2C16D251A779C55000B2297 /* h2_stream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_stream.c; sourceTree = ""; }; + B2C16D261A779C55000B2297 /* h2_stream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_stream.h; sourceTree = ""; }; + B2C631081B383EA800127D1E /* test-ser.example.org.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "test-ser.example.org.conf"; sourceTree = ""; }; + B2C6310C1B393CA100127D1E /* httpd-alpn-v4-v5.patch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "httpd-alpn-v4-v5.patch"; sourceTree = ""; }; + B2C63B0E1B39421B00127D1E /* openssl-1.0.2-alpn.patch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "openssl-1.0.2-alpn.patch"; sourceTree = ""; }; + B2C63B101B3BF78C00127D1E /* mpm_worker.load */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mpm_worker.load; sourceTree = ""; }; + B2C63B121B3BF7CC00127D1E /* mpm_event.load */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mpm_event.load; sourceTree = ""; }; + B2C63B131B3BF7CC00127D1E /* mpm_prefork.load */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mpm_prefork.load; sourceTree = ""; }; + B2CB610E1A88BB9F00D270A6 /* h2_conn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_conn.c; sourceTree = ""; }; + B2CB610F1A88BB9F00D270A6 /* h2_conn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_conn.h; sourceTree = ""; }; + B2CB61101A8A0FB400D270A6 /* h2_response.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_response.c; sourceTree = ""; }; + B2CB61111A8A0FB400D270A6 /* h2_response.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_response.h; sourceTree = ""; }; + B2CB61141A8B698A00D270A6 /* h2_worker.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_worker.c; sourceTree = ""; }; + B2CB61151A8B698A00D270A6 /* h2_worker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_worker.h; sourceTree = ""; }; + B2CB61161A8B699E00D270A6 /* h2_workers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_workers.c; sourceTree = ""; }; + B2CB61171A8B699E00D270A6 /* h2_workers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_workers.h; sourceTree = ""; }; + B2E5D5081AADAD28001FD280 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + B2E5D7841AAEEF8C001FD280 /* configure.ac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = configure.ac; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.sh; }; + B2E5D7851AAF1D87001FD280 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + B2E5D7861AAF1F4D001FD280 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; + B2E5D7871AAF1F4D001FD280 /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ChangeLog; sourceTree = ""; }; + B2E5D7881AAF1F4D001FD280 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + B2E5D7891AAF1F4D001FD280 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NEWS; sourceTree = ""; }; + B2E6DF771AC2E55800D557D8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + B2E6DF781AC2E6A700D557D8 /* install-config.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "install-config.sh"; sourceTree = ""; }; + B2E6DF7B1AC2EF6E00D557D8 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + B2E6DF7C1AC2EF6E00D557D8 /* get-openssl-latest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "get-openssl-latest.sh"; sourceTree = ""; }; + B2E6DF7D1AC2EF6E00D557D8 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + B2E6DF9E1AC2EF6E00D557D8 /* pcre-8.36.tar.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = "pcre-8.36.tar.gz"; sourceTree = ""; }; + B2E6DFA31AC2EF6E00D557D8 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + B2E6FDF81AC2EFA200D557D8 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + B2E6FDFA1AC2EFA200D557D8 /* httpd.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = httpd.conf; sourceTree = ""; }; + B2E6FDFB1AC2EFA200D557D8 /* modules.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = modules.conf; sourceTree = ""; }; + B2E6FDFD1AC2EFA200D557D8 /* mod-h2.greenbytes.de.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mod-h2.greenbytes.de.conf"; sourceTree = ""; }; + B2E6FE001AC2EFA200D557D8 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + B2E6FE011AC2EFA200D557D8 /* ca.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.pem; sourceTree = ""; }; + B2E6FE021AC2EFA200D557D8 /* extensions.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = extensions.conf; sourceTree = ""; }; + B2E6FE031AC2EFA200D557D8 /* mod-h2.greenbytes.de.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mod-h2.greenbytes.de.key"; sourceTree = ""; }; + B2E6FE041AC2EFA200D557D8 /* mod-h2.greenbytes.de.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mod-h2.greenbytes.de.pem"; sourceTree = ""; }; + B2E6FE051AC2EFA200D557D8 /* test.example.org.x509.input */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.example.org.x509.input; sourceTree = ""; }; + B2E6FE091AC2EFA200D557D8 /* 001.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 001.html; sourceTree = ""; }; + B2E6FE0A1AC2EFA200D557D8 /* 002.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 002.jpg; sourceTree = ""; }; + B2E6FE0C1AC2EFA200D557D8 /* 003_img.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 003_img.jpg; sourceTree = ""; }; + B2E6FE0D1AC2EFA200D557D8 /* 003.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 003.html; sourceTree = ""; }; + B2E6FE0F1AC2EFA200D557D8 /* gophertiles.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles.jpg; sourceTree = ""; }; + B2E6FE101AC2EFA200D557D8 /* gophertiles_002.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_002.jpg; sourceTree = ""; }; + B2E6FE111AC2EFA200D557D8 /* gophertiles_003.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_003.jpg; sourceTree = ""; }; + B2E6FE121AC2EFA200D557D8 /* gophertiles_004.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_004.jpg; sourceTree = ""; }; + B2E6FE131AC2EFA200D557D8 /* gophertiles_005.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_005.jpg; sourceTree = ""; }; + B2E6FE141AC2EFA200D557D8 /* gophertiles_006.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_006.jpg; sourceTree = ""; }; + B2E6FE151AC2EFA200D557D8 /* gophertiles_007.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_007.jpg; sourceTree = ""; }; + B2E6FE161AC2EFA200D557D8 /* gophertiles_008.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_008.jpg; sourceTree = ""; }; + B2E6FE171AC2EFA200D557D8 /* gophertiles_009.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_009.jpg; sourceTree = ""; }; + B2E6FE181AC2EFA200D557D8 /* gophertiles_010.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_010.jpg; sourceTree = ""; }; + B2E6FE191AC2EFA200D557D8 /* gophertiles_011.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_011.jpg; sourceTree = ""; }; + B2E6FE1A1AC2EFA200D557D8 /* gophertiles_012.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_012.jpg; sourceTree = ""; }; + B2E6FE1B1AC2EFA200D557D8 /* gophertiles_013.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_013.jpg; sourceTree = ""; }; + B2E6FE1C1AC2EFA200D557D8 /* gophertiles_014.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_014.jpg; sourceTree = ""; }; + B2E6FE1D1AC2EFA200D557D8 /* gophertiles_015.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_015.jpg; sourceTree = ""; }; + B2E6FE1E1AC2EFA200D557D8 /* gophertiles_016.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_016.jpg; sourceTree = ""; }; + B2E6FE1F1AC2EFA200D557D8 /* gophertiles_017.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_017.jpg; sourceTree = ""; }; + B2E6FE201AC2EFA200D557D8 /* gophertiles_018.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_018.jpg; sourceTree = ""; }; + B2E6FE211AC2EFA200D557D8 /* gophertiles_019.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_019.jpg; sourceTree = ""; }; + B2E6FE221AC2EFA200D557D8 /* gophertiles_020.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_020.jpg; sourceTree = ""; }; + B2E6FE231AC2EFA200D557D8 /* gophertiles_021.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_021.jpg; sourceTree = ""; }; + B2E6FE241AC2EFA200D557D8 /* gophertiles_022.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_022.jpg; sourceTree = ""; }; + B2E6FE251AC2EFA200D557D8 /* gophertiles_023.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_023.jpg; sourceTree = ""; }; + B2E6FE261AC2EFA200D557D8 /* gophertiles_024.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_024.jpg; sourceTree = ""; }; + B2E6FE271AC2EFA200D557D8 /* gophertiles_025.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_025.jpg; sourceTree = ""; }; + B2E6FE281AC2EFA200D557D8 /* gophertiles_026.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_026.jpg; sourceTree = ""; }; + B2E6FE291AC2EFA200D557D8 /* gophertiles_027.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_027.jpg; sourceTree = ""; }; + B2E6FE2A1AC2EFA200D557D8 /* gophertiles_028.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_028.jpg; sourceTree = ""; }; + B2E6FE2B1AC2EFA200D557D8 /* gophertiles_029.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_029.jpg; sourceTree = ""; }; + B2E6FE2C1AC2EFA200D557D8 /* gophertiles_030.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_030.jpg; sourceTree = ""; }; + B2E6FE2D1AC2EFA200D557D8 /* gophertiles_031.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_031.jpg; sourceTree = ""; }; + B2E6FE2E1AC2EFA200D557D8 /* gophertiles_032.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_032.jpg; sourceTree = ""; }; + B2E6FE2F1AC2EFA200D557D8 /* gophertiles_033.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_033.jpg; sourceTree = ""; }; + B2E6FE301AC2EFA200D557D8 /* gophertiles_034.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_034.jpg; sourceTree = ""; }; + B2E6FE311AC2EFA200D557D8 /* gophertiles_035.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_035.jpg; sourceTree = ""; }; + B2E6FE321AC2EFA200D557D8 /* gophertiles_036.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_036.jpg; sourceTree = ""; }; + B2E6FE331AC2EFA200D557D8 /* gophertiles_037.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_037.jpg; sourceTree = ""; }; + B2E6FE341AC2EFA200D557D8 /* gophertiles_038.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_038.jpg; sourceTree = ""; }; + B2E6FE351AC2EFA200D557D8 /* gophertiles_039.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_039.jpg; sourceTree = ""; }; + B2E6FE361AC2EFA200D557D8 /* gophertiles_040.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_040.jpg; sourceTree = ""; }; + B2E6FE371AC2EFA200D557D8 /* gophertiles_041.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_041.jpg; sourceTree = ""; }; + B2E6FE381AC2EFA200D557D8 /* gophertiles_042.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_042.jpg; sourceTree = ""; }; + B2E6FE391AC2EFA200D557D8 /* gophertiles_043.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_043.jpg; sourceTree = ""; }; + B2E6FE3A1AC2EFA200D557D8 /* gophertiles_044.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_044.jpg; sourceTree = ""; }; + B2E6FE3B1AC2EFA200D557D8 /* gophertiles_045.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_045.jpg; sourceTree = ""; }; + B2E6FE3C1AC2EFA200D557D8 /* gophertiles_046.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_046.jpg; sourceTree = ""; }; + B2E6FE3D1AC2EFA200D557D8 /* gophertiles_047.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_047.jpg; sourceTree = ""; }; + B2E6FE3E1AC2EFA200D557D8 /* gophertiles_048.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_048.jpg; sourceTree = ""; }; + B2E6FE3F1AC2EFA200D557D8 /* gophertiles_049.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_049.jpg; sourceTree = ""; }; + B2E6FE401AC2EFA200D557D8 /* gophertiles_050.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_050.jpg; sourceTree = ""; }; + B2E6FE411AC2EFA200D557D8 /* gophertiles_051.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_051.jpg; sourceTree = ""; }; + B2E6FE421AC2EFA200D557D8 /* gophertiles_052.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_052.jpg; sourceTree = ""; }; + B2E6FE431AC2EFA200D557D8 /* gophertiles_053.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_053.jpg; sourceTree = ""; }; + B2E6FE441AC2EFA200D557D8 /* gophertiles_054.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_054.jpg; sourceTree = ""; }; + B2E6FE451AC2EFA200D557D8 /* gophertiles_055.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_055.jpg; sourceTree = ""; }; + B2E6FE461AC2EFA200D557D8 /* gophertiles_056.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_056.jpg; sourceTree = ""; }; + B2E6FE471AC2EFA200D557D8 /* gophertiles_057.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_057.jpg; sourceTree = ""; }; + B2E6FE481AC2EFA200D557D8 /* gophertiles_058.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_058.jpg; sourceTree = ""; }; + B2E6FE491AC2EFA200D557D8 /* gophertiles_059.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_059.jpg; sourceTree = ""; }; + B2E6FE4A1AC2EFA200D557D8 /* gophertiles_060.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_060.jpg; sourceTree = ""; }; + B2E6FE4B1AC2EFA200D557D8 /* gophertiles_061.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_061.jpg; sourceTree = ""; }; + B2E6FE4C1AC2EFA200D557D8 /* gophertiles_062.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_062.jpg; sourceTree = ""; }; + B2E6FE4D1AC2EFA200D557D8 /* gophertiles_063.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_063.jpg; sourceTree = ""; }; + B2E6FE4E1AC2EFA200D557D8 /* gophertiles_064.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_064.jpg; sourceTree = ""; }; + B2E6FE4F1AC2EFA200D557D8 /* gophertiles_065.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_065.jpg; sourceTree = ""; }; + B2E6FE501AC2EFA200D557D8 /* gophertiles_066.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_066.jpg; sourceTree = ""; }; + B2E6FE511AC2EFA200D557D8 /* gophertiles_067.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_067.jpg; sourceTree = ""; }; + B2E6FE521AC2EFA200D557D8 /* gophertiles_068.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_068.jpg; sourceTree = ""; }; + B2E6FE531AC2EFA200D557D8 /* gophertiles_069.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_069.jpg; sourceTree = ""; }; + B2E6FE541AC2EFA200D557D8 /* gophertiles_070.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_070.jpg; sourceTree = ""; }; + B2E6FE551AC2EFA200D557D8 /* gophertiles_071.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_071.jpg; sourceTree = ""; }; + B2E6FE561AC2EFA200D557D8 /* gophertiles_072.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_072.jpg; sourceTree = ""; }; + B2E6FE571AC2EFA200D557D8 /* gophertiles_073.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_073.jpg; sourceTree = ""; }; + B2E6FE581AC2EFA200D557D8 /* gophertiles_074.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_074.jpg; sourceTree = ""; }; + B2E6FE591AC2EFA200D557D8 /* gophertiles_075.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_075.jpg; sourceTree = ""; }; + B2E6FE5A1AC2EFA200D557D8 /* gophertiles_076.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_076.jpg; sourceTree = ""; }; + B2E6FE5B1AC2EFA200D557D8 /* gophertiles_077.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_077.jpg; sourceTree = ""; }; + B2E6FE5C1AC2EFA200D557D8 /* gophertiles_078.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_078.jpg; sourceTree = ""; }; + B2E6FE5D1AC2EFA200D557D8 /* gophertiles_079.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_079.jpg; sourceTree = ""; }; + B2E6FE5E1AC2EFA200D557D8 /* gophertiles_080.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_080.jpg; sourceTree = ""; }; + B2E6FE5F1AC2EFA200D557D8 /* gophertiles_081.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_081.jpg; sourceTree = ""; }; + B2E6FE601AC2EFA200D557D8 /* gophertiles_082.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_082.jpg; sourceTree = ""; }; + B2E6FE611AC2EFA200D557D8 /* gophertiles_083.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_083.jpg; sourceTree = ""; }; + B2E6FE621AC2EFA200D557D8 /* gophertiles_084.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_084.jpg; sourceTree = ""; }; + B2E6FE631AC2EFA200D557D8 /* gophertiles_085.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_085.jpg; sourceTree = ""; }; + B2E6FE641AC2EFA200D557D8 /* gophertiles_086.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_086.jpg; sourceTree = ""; }; + B2E6FE651AC2EFA200D557D8 /* gophertiles_087.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_087.jpg; sourceTree = ""; }; + B2E6FE661AC2EFA200D557D8 /* gophertiles_088.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_088.jpg; sourceTree = ""; }; + B2E6FE671AC2EFA200D557D8 /* gophertiles_089.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_089.jpg; sourceTree = ""; }; + B2E6FE681AC2EFA200D557D8 /* gophertiles_090.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_090.jpg; sourceTree = ""; }; + B2E6FE691AC2EFA200D557D8 /* gophertiles_091.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_091.jpg; sourceTree = ""; }; + B2E6FE6A1AC2EFA200D557D8 /* gophertiles_092.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_092.jpg; sourceTree = ""; }; + B2E6FE6B1AC2EFA200D557D8 /* gophertiles_093.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_093.jpg; sourceTree = ""; }; + B2E6FE6C1AC2EFA200D557D8 /* gophertiles_094.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_094.jpg; sourceTree = ""; }; + B2E6FE6D1AC2EFA200D557D8 /* gophertiles_095.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_095.jpg; sourceTree = ""; }; + B2E6FE6E1AC2EFA200D557D8 /* gophertiles_096.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_096.jpg; sourceTree = ""; }; + B2E6FE6F1AC2EFA200D557D8 /* gophertiles_097.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_097.jpg; sourceTree = ""; }; + B2E6FE701AC2EFA200D557D8 /* gophertiles_098.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_098.jpg; sourceTree = ""; }; + B2E6FE711AC2EFA200D557D8 /* gophertiles_099.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_099.jpg; sourceTree = ""; }; + B2E6FE721AC2EFA200D557D8 /* gophertiles_100.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_100.jpg; sourceTree = ""; }; + B2E6FE731AC2EFA200D557D8 /* gophertiles_101.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_101.jpg; sourceTree = ""; }; + B2E6FE741AC2EFA200D557D8 /* gophertiles_102.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_102.jpg; sourceTree = ""; }; + B2E6FE751AC2EFA200D557D8 /* gophertiles_103.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_103.jpg; sourceTree = ""; }; + B2E6FE761AC2EFA200D557D8 /* gophertiles_104.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_104.jpg; sourceTree = ""; }; + B2E6FE771AC2EFA200D557D8 /* gophertiles_105.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_105.jpg; sourceTree = ""; }; + B2E6FE781AC2EFA200D557D8 /* gophertiles_106.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_106.jpg; sourceTree = ""; }; + B2E6FE791AC2EFA200D557D8 /* gophertiles_107.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_107.jpg; sourceTree = ""; }; + B2E6FE7A1AC2EFA200D557D8 /* gophertiles_108.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_108.jpg; sourceTree = ""; }; + B2E6FE7B1AC2EFA200D557D8 /* gophertiles_109.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_109.jpg; sourceTree = ""; }; + B2E6FE7C1AC2EFA200D557D8 /* gophertiles_110.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_110.jpg; sourceTree = ""; }; + B2E6FE7D1AC2EFA200D557D8 /* gophertiles_111.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_111.jpg; sourceTree = ""; }; + B2E6FE7E1AC2EFA200D557D8 /* gophertiles_112.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_112.jpg; sourceTree = ""; }; + B2E6FE7F1AC2EFA200D557D8 /* gophertiles_113.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_113.jpg; sourceTree = ""; }; + B2E6FE801AC2EFA200D557D8 /* gophertiles_114.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_114.jpg; sourceTree = ""; }; + B2E6FE811AC2EFA200D557D8 /* gophertiles_115.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_115.jpg; sourceTree = ""; }; + B2E6FE821AC2EFA200D557D8 /* gophertiles_116.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_116.jpg; sourceTree = ""; }; + B2E6FE831AC2EFA200D557D8 /* gophertiles_117.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_117.jpg; sourceTree = ""; }; + B2E6FE841AC2EFA200D557D8 /* gophertiles_118.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_118.jpg; sourceTree = ""; }; + B2E6FE851AC2EFA200D557D8 /* gophertiles_119.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_119.jpg; sourceTree = ""; }; + B2E6FE861AC2EFA200D557D8 /* gophertiles_120.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_120.jpg; sourceTree = ""; }; + B2E6FE871AC2EFA200D557D8 /* gophertiles_121.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_121.jpg; sourceTree = ""; }; + B2E6FE881AC2EFA200D557D8 /* gophertiles_122.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_122.jpg; sourceTree = ""; }; + B2E6FE891AC2EFA200D557D8 /* gophertiles_123.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_123.jpg; sourceTree = ""; }; + B2E6FE8A1AC2EFA200D557D8 /* gophertiles_124.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_124.jpg; sourceTree = ""; }; + B2E6FE8B1AC2EFA200D557D8 /* gophertiles_125.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_125.jpg; sourceTree = ""; }; + B2E6FE8C1AC2EFA200D557D8 /* gophertiles_126.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_126.jpg; sourceTree = ""; }; + B2E6FE8D1AC2EFA200D557D8 /* gophertiles_127.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_127.jpg; sourceTree = ""; }; + B2E6FE8E1AC2EFA200D557D8 /* gophertiles_128.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_128.jpg; sourceTree = ""; }; + B2E6FE8F1AC2EFA200D557D8 /* gophertiles_129.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_129.jpg; sourceTree = ""; }; + B2E6FE901AC2EFA200D557D8 /* gophertiles_130.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_130.jpg; sourceTree = ""; }; + B2E6FE911AC2EFA200D557D8 /* gophertiles_131.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_131.jpg; sourceTree = ""; }; + B2E6FE921AC2EFA200D557D8 /* gophertiles_132.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_132.jpg; sourceTree = ""; }; + B2E6FE931AC2EFA200D557D8 /* gophertiles_133.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_133.jpg; sourceTree = ""; }; + B2E6FE941AC2EFA200D557D8 /* gophertiles_134.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_134.jpg; sourceTree = ""; }; + B2E6FE951AC2EFA200D557D8 /* gophertiles_135.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_135.jpg; sourceTree = ""; }; + B2E6FE961AC2EFA200D557D8 /* gophertiles_136.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_136.jpg; sourceTree = ""; }; + B2E6FE971AC2EFA200D557D8 /* gophertiles_137.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_137.jpg; sourceTree = ""; }; + B2E6FE981AC2EFA200D557D8 /* gophertiles_138.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_138.jpg; sourceTree = ""; }; + B2E6FE991AC2EFA200D557D8 /* gophertiles_139.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_139.jpg; sourceTree = ""; }; + B2E6FE9A1AC2EFA200D557D8 /* gophertiles_140.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_140.jpg; sourceTree = ""; }; + B2E6FE9B1AC2EFA200D557D8 /* gophertiles_141.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_141.jpg; sourceTree = ""; }; + B2E6FE9C1AC2EFA200D557D8 /* gophertiles_142.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_142.jpg; sourceTree = ""; }; + B2E6FE9D1AC2EFA200D557D8 /* gophertiles_143.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_143.jpg; sourceTree = ""; }; + B2E6FE9E1AC2EFA200D557D8 /* gophertiles_144.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_144.jpg; sourceTree = ""; }; + B2E6FE9F1AC2EFA200D557D8 /* gophertiles_145.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_145.jpg; sourceTree = ""; }; + B2E6FEA01AC2EFA200D557D8 /* gophertiles_146.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_146.jpg; sourceTree = ""; }; + B2E6FEA11AC2EFA200D557D8 /* gophertiles_147.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_147.jpg; sourceTree = ""; }; + B2E6FEA21AC2EFA200D557D8 /* gophertiles_148.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_148.jpg; sourceTree = ""; }; + B2E6FEA31AC2EFA200D557D8 /* gophertiles_149.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_149.jpg; sourceTree = ""; }; + B2E6FEA41AC2EFA200D557D8 /* gophertiles_150.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_150.jpg; sourceTree = ""; }; + B2E6FEA51AC2EFA200D557D8 /* gophertiles_151.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_151.jpg; sourceTree = ""; }; + B2E6FEA61AC2EFA200D557D8 /* gophertiles_152.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_152.jpg; sourceTree = ""; }; + B2E6FEA71AC2EFA200D557D8 /* gophertiles_153.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_153.jpg; sourceTree = ""; }; + B2E6FEA81AC2EFA200D557D8 /* gophertiles_154.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_154.jpg; sourceTree = ""; }; + B2E6FEA91AC2EFA200D557D8 /* gophertiles_155.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_155.jpg; sourceTree = ""; }; + B2E6FEAA1AC2EFA200D557D8 /* gophertiles_156.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_156.jpg; sourceTree = ""; }; + B2E6FEAB1AC2EFA200D557D8 /* gophertiles_157.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_157.jpg; sourceTree = ""; }; + B2E6FEAC1AC2EFA200D557D8 /* gophertiles_158.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_158.jpg; sourceTree = ""; }; + B2E6FEAD1AC2EFA200D557D8 /* gophertiles_159.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_159.jpg; sourceTree = ""; }; + B2E6FEAE1AC2EFA200D557D8 /* gophertiles_160.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_160.jpg; sourceTree = ""; }; + B2E6FEAF1AC2EFA200D557D8 /* gophertiles_161.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_161.jpg; sourceTree = ""; }; + B2E6FEB01AC2EFA200D557D8 /* gophertiles_162.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_162.jpg; sourceTree = ""; }; + B2E6FEB11AC2EFA200D557D8 /* gophertiles_163.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_163.jpg; sourceTree = ""; }; + B2E6FEB21AC2EFA200D557D8 /* gophertiles_164.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_164.jpg; sourceTree = ""; }; + B2E6FEB31AC2EFA200D557D8 /* gophertiles_165.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_165.jpg; sourceTree = ""; }; + B2E6FEB41AC2EFA200D557D8 /* gophertiles_166.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_166.jpg; sourceTree = ""; }; + B2E6FEB51AC2EFA300D557D8 /* gophertiles_167.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_167.jpg; sourceTree = ""; }; + B2E6FEB61AC2EFA300D557D8 /* gophertiles_168.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_168.jpg; sourceTree = ""; }; + B2E6FEB71AC2EFA300D557D8 /* gophertiles_169.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_169.jpg; sourceTree = ""; }; + B2E6FEB81AC2EFA300D557D8 /* gophertiles_170.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_170.jpg; sourceTree = ""; }; + B2E6FEB91AC2EFA300D557D8 /* gophertiles_171.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_171.jpg; sourceTree = ""; }; + B2E6FEBA1AC2EFA300D557D8 /* gophertiles_172.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_172.jpg; sourceTree = ""; }; + B2E6FEBB1AC2EFA300D557D8 /* gophertiles_173.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_173.jpg; sourceTree = ""; }; + B2E6FEBC1AC2EFA300D557D8 /* gophertiles_174.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_174.jpg; sourceTree = ""; }; + B2E6FEBD1AC2EFA300D557D8 /* gophertiles_175.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_175.jpg; sourceTree = ""; }; + B2E6FEBE1AC2EFA300D557D8 /* gophertiles_176.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_176.jpg; sourceTree = ""; }; + B2E6FEBF1AC2EFA300D557D8 /* gophertiles_177.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_177.jpg; sourceTree = ""; }; + B2E6FEC01AC2EFA300D557D8 /* gophertiles_178.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_178.jpg; sourceTree = ""; }; + B2E6FEC11AC2EFA300D557D8 /* gophertiles_179.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_179.jpg; sourceTree = ""; }; + B2E6FEC21AC2EFA300D557D8 /* gophertiles_180.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = gophertiles_180.jpg; sourceTree = ""; }; + B2E6FEC31AC2EFA300D557D8 /* 004.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 004.html; sourceTree = ""; }; + B2E6FEC41AC2EFA300D557D8 /* 005.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 005.txt; sourceTree = ""; }; + B2E6FEC61AC2EFA300D557D8 /* 006.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = 006.css; sourceTree = ""; }; + B2E6FEC71AC2EFA300D557D8 /* 006.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = 006.js; sourceTree = ""; }; + B2E6FEC81AC2EFA300D557D8 /* 006.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 006.html; sourceTree = ""; }; + B2E6FECA1AC2EFA300D557D8 /* 007.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = 007.py; sourceTree = ""; }; + B2E6FECB1AC2EFA300D557D8 /* 007.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 007.html; sourceTree = ""; }; + B2E6FECF1AC2EFA300D557D8 /* 009.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = 009.py; sourceTree = ""; }; + B2E6FED11AC2EFA300D557D8 /* empty.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = empty.txt; sourceTree = ""; }; + B2E6FED21AC2EFA300D557D8 /* hello.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = hello.py; sourceTree = ""; }; + B2E6FED31AC2EFA300D557D8 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + B2E6FED41AC2EFA300D557D8 /* necho.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = necho.py; sourceTree = ""; }; + B2E6FED51AC2EFA300D557D8 /* upload.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = upload.py; sourceTree = ""; }; + B2E6FED61AC2EFA300D557D8 /* xxx-1.0.2a.tar.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = "xxx-1.0.2a.tar.gz"; sourceTree = ""; }; + B2E6FED71AC2EFA300D557D8 /* load-urls-1.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "load-urls-1.txt"; sourceTree = ""; }; + B2E6FED81AC2EFA300D557D8 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + B2E6FED91AC2EFA300D557D8 /* test_nghttp_get.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = test_nghttp_get.sh; sourceTree = ""; }; + B2E6FEDA1AC2EFA300D557D8 /* test_nghttp_post.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = test_nghttp_post.sh; sourceTree = ""; }; + B2E6FEDB1AC2EFA300D557D8 /* test_common.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = test_common.sh; sourceTree = ""; }; + B2E6FEDC1AC2F01F00D557D8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + B2E6FEDD1AC2F20400D557D8 /* h2.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = h2.conf; sourceTree = ""; }; + B2E6FEDE1AC2F20400D557D8 /* h2.load */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = h2.load; sourceTree = ""; }; + B2E708C81AE64AC00009EDAF /* php-wrapper */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "php-wrapper"; sourceTree = ""; }; + B2E708C91AE64B470009EDAF /* info.php */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.php; path = info.php; sourceTree = ""; }; + B2FE998E1AA7496B00A5CE5A /* h2_to_h1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h2_to_h1.c; sourceTree = ""; }; + B2FE998F1AA7496B00A5CE5A /* h2_to_h1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h2_to_h1.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + B225490A1A6EAAA3004BDEC9 /* mod_h2 */ = { + isa = PBXGroup; + children = ( + B20946CC1B2865BB0041992F /* h2_alpn.c */, + B20946CD1B2865BB0041992F /* h2_alpn.h */, + B24CB1221AC94D6A0057413B /* h2_alt_svc.c */, + B24CB1231AC94D6A0057413B /* h2_alt_svc.h */, + B225490D1A6EAE9F004BDEC9 /* h2_config.c */, + B225490E1A6EAE9F004BDEC9 /* h2_config.h */, + B225493A1A711985004BDEC9 /* h2_conn_io.c */, + B225493B1A711985004BDEC9 /* h2_conn_io.h */, + B2CB610E1A88BB9F00D270A6 /* h2_conn.c */, + B2CB610F1A88BB9F00D270A6 /* h2_conn.h */, + B22549331A6FBEF1004BDEC9 /* h2_ctx.c */, + B22549341A6FBEF1004BDEC9 /* h2_ctx.h */, + B2546D971A7FC2A60033A875 /* h2_from_h1.c */, + B2546D981A7FC2A60033A875 /* h2_from_h1.h */, + B225491E1A6FB8DF004BDEC9 /* h2_h2.c */, + B225491F1A6FB8DF004BDEC9 /* h2_h2.h */, + B271425E1AB9DD59004EF82E /* h2_io_set.c */, + B271425F1AB9DD59004EF82E /* h2_io_set.h */, + B27142601AB9DD76004EF82E /* h2_io.c */, + B27142611AB9DD76004EF82E /* h2_io.h */, + B27D32E81A9487B4003DBAF4 /* h2_mplx.c */, + B27D32E91A9487B4003DBAF4 /* h2_mplx.h */, + B22549371A6FCE13004BDEC9 /* h2_private.h */, + B2A6EF171A9B598B005DFC5B /* h2_request.c */, + B2A6EF181A9B598B005DFC5B /* h2_request.h */, + B2CB61101A8A0FB400D270A6 /* h2_response.c */, + B2CB61111A8A0FB400D270A6 /* h2_response.h */, + B22549381A710329004BDEC9 /* h2_session.c */, + B22549391A710329004BDEC9 /* h2_session.h */, + B2546D991A81079D0033A875 /* h2_stream_set.c */, + B2546D9A1A81079D0033A875 /* h2_stream_set.h */, + B2C16D251A779C55000B2297 /* h2_stream.c */, + B2C16D261A779C55000B2297 /* h2_stream.h */, + B284ACC91A7B9DF900C35863 /* h2_task_input.c */, + B284ACCA1A7B9DF900C35863 /* h2_task_input.h */, + B2546D8E1A7FA7D70033A875 /* h2_task_output.c */, + B2546D8F1A7FA7D70033A875 /* h2_task_output.h */, + B21BFCF91B023B840031EBCD /* h2_task_queue.c */, + B21BFCFA1B023B840031EBCD /* h2_task_queue.h */, + B2546D881A7F71F80033A875 /* h2_task.c */, + B2546D891A7F71F80033A875 /* h2_task.h */, + B2FE998E1AA7496B00A5CE5A /* h2_to_h1.c */, + B2FE998F1AA7496B00A5CE5A /* h2_to_h1.h */, + B2A6EF281A9C79A6005DFC5B /* h2_upgrade.c */, + B2A6EF291A9C79A6005DFC5B /* h2_upgrade.h */, + B225493C1A713D18004BDEC9 /* h2_util.c */, + B225493D1A713D18004BDEC9 /* h2_util.h */, + B2AABE611AC5A9B400A90B72 /* h2_version.h.in */, + B2CB61141A8B698A00D270A6 /* h2_worker.c */, + B2CB61151A8B698A00D270A6 /* h2_worker.h */, + B2CB61161A8B699E00D270A6 /* h2_workers.c */, + B2CB61171A8B699E00D270A6 /* h2_workers.h */, + B2E5D5081AADAD28001FD280 /* Makefile.am */, + B225490C1A6EAC37004BDEC9 /* mod_h2.c */, + B22549361A6FCCAA004BDEC9 /* mod_h2.h */, + ); + path = mod_h2; + sourceTree = ""; + }; + B27BBD1F1A65757700C58A41 = { + isa = PBXGroup; + children = ( + B2E5D7861AAF1F4D001FD280 /* AUTHORS */, + B2E5D7871AAF1F4D001FD280 /* ChangeLog */, + B2E5D7841AAEEF8C001FD280 /* configure.ac */, + B2E5D7881AAF1F4D001FD280 /* COPYING */, + B2A6EF2C1A9F2452005DFC5B /* DISCUSS */, + B2A6EF2A1A9E3A93005DFC5B /* INSTALL */, + B22D25281AA89A0B0041D8E5 /* LICENSE */, + B2E5D7851AAF1D87001FD280 /* Makefile.am */, + B225490A1A6EAAA3004BDEC9 /* mod_h2 */, + B2E5D7891AAF1F4D001FD280 /* NEWS */, + B27BBD2D1A6575C200C58A41 /* README */, + B256C4BA1ADD5FF10042C760 /* README.md */, + B2E6DF791AC2EF6E00D557D8 /* sandbox */, + B2E6DF761AC2E55700D557D8 /* setup */, + ); + sourceTree = ""; + }; + B2C63B0F1B3BF76B00127D1E /* mods-available */ = { + isa = PBXGroup; + children = ( + B2C63B121B3BF7CC00127D1E /* mpm_event.load */, + B2C63B131B3BF7CC00127D1E /* mpm_prefork.load */, + B2C63B101B3BF78C00127D1E /* mpm_worker.load */, + ); + path = "mods-available"; + sourceTree = ""; + }; + B2E6DF761AC2E55700D557D8 /* setup */ = { + isa = PBXGroup; + children = ( + B2E6FEDD1AC2F20400D557D8 /* h2.conf */, + B2E6FEDE1AC2F20400D557D8 /* h2.load */, + B2E6DF771AC2E55800D557D8 /* Makefile.am */, + B2E6DF781AC2E6A700D557D8 /* install-config.sh */, + ); + path = setup; + sourceTree = ""; + }; + B2E6DF791AC2EF6E00D557D8 /* sandbox */ = { + isa = PBXGroup; + children = ( + B2E6DF7A1AC2EF6E00D557D8 /* httpd */, + B2E6FEDC1AC2F01F00D557D8 /* Makefile.am */, + B2E6DFA21AC2EF6E00D557D8 /* nghttp2 */, + B2E6DFA61AC2EF6E00D557D8 /* test */, + ); + path = sandbox; + sourceTree = ""; + }; + B2E6DF7A1AC2EF6E00D557D8 /* httpd */ = { + isa = PBXGroup; + children = ( + B2E6DF7B1AC2EF6E00D557D8 /* .gitignore */, + B2E6DF7C1AC2EF6E00D557D8 /* get-openssl-latest.sh */, + B2E6DF7D1AC2EF6E00D557D8 /* Makefile */, + B2E6DF9C1AC2EF6E00D557D8 /* packages */, + B2E6DF9F1AC2EF6E00D557D8 /* patches */, + ); + path = httpd; + sourceTree = ""; + }; + B2E6DF9C1AC2EF6E00D557D8 /* packages */ = { + isa = PBXGroup; + children = ( + B2E6DF9E1AC2EF6E00D557D8 /* pcre-8.36.tar.gz */, + ); + path = packages; + sourceTree = ""; + }; + B2E6DF9F1AC2EF6E00D557D8 /* patches */ = { + isa = PBXGroup; + children = ( + B2B170B91B31BF7000EDC007 /* httpd-2.4.12-alpn-v5.patch */, + B272F2311B1E13D8007A20A5 /* httpd-2.4.x-alpn-v4.patch */, + B2C6310C1B393CA100127D1E /* httpd-alpn-v4-v5.patch */, + B227966E1AEE93B000376B40 /* httpd-npn.unified.diff.patch */, + B2C63B0E1B39421B00127D1E /* openssl-1.0.2-alpn.patch */, + B20946CE1B29D8C30041992F /* sni_misdirect.patch */, + ); + path = patches; + sourceTree = ""; + }; + B2E6DFA21AC2EF6E00D557D8 /* nghttp2 */ = { + isa = PBXGroup; + children = ( + B2E6DFA31AC2EF6E00D557D8 /* Makefile */, + B2E6DFA41AC2EF6E00D557D8 /* patches */, + ); + path = nghttp2; + sourceTree = ""; + }; + B2E6DFA41AC2EF6E00D557D8 /* patches */ = { + isa = PBXGroup; + children = ( + ); + path = patches; + sourceTree = ""; + }; + B2E6DFA61AC2EF6E00D557D8 /* test */ = { + isa = PBXGroup; + children = ( + B2E708C71AE64AC00009EDAF /* bin */, + B2E6DFA71AC2EF6E00D557D8 /* clients */, + B2E6FDF91AC2EFA200D557D8 /* conf */, + B2E6FE071AC2EFA200D557D8 /* htdocs */, + B2E6FED71AC2EFA300D557D8 /* load-urls-1.txt */, + B2E6FED81AC2EFA300D557D8 /* Makefile */, + B2E6FEDB1AC2EFA300D557D8 /* test_common.sh */, + B24CB1241AC96BFE0057413B /* test_curl_altsvc.sh */, + B20E441F1ACC07E8003D21AE /* test_curl_get.sh */, + B20E44201ACC088E003D21AE /* test_curl_post.sh */, + B2E6FED91AC2EFA300D557D8 /* test_nghttp_get.sh */, + B2E6FEDA1AC2EFA300D557D8 /* test_nghttp_post.sh */, + B20946CA1B25D4430041992F /* test_alt_host.sh */, + ); + path = test; + sourceTree = ""; + }; + B2E6DFA71AC2EF6E00D557D8 /* clients */ = { + isa = PBXGroup; + children = ( + B2E6FDF81AC2EFA200D557D8 /* Makefile */, + ); + path = clients; + sourceTree = ""; + }; + B2E6FDF91AC2EFA200D557D8 /* conf */ = { + isa = PBXGroup; + children = ( + B2E6FDFA1AC2EFA200D557D8 /* httpd.conf */, + B2C63B0F1B3BF76B00127D1E /* mods-available */, + B2E6FDFB1AC2EFA200D557D8 /* modules.conf */, + B2E6FDFC1AC2EFA200D557D8 /* sites */, + B2E6FDFF1AC2EFA200D557D8 /* ssl */, + ); + path = conf; + sourceTree = ""; + }; + B2E6FDFC1AC2EFA200D557D8 /* sites */ = { + isa = PBXGroup; + children = ( + B2B170B81B316FB100EDC007 /* aaa-noh2.example.org.conf */, + B2B170B31B2EC73400EDC007 /* test.example.org.conf */, + B2E6FDFD1AC2EFA200D557D8 /* mod-h2.greenbytes.de.conf */, + B2C631081B383EA800127D1E /* test-ser.example.org.conf */, + ); + path = sites; + sourceTree = ""; + }; + B2E6FDFF1AC2EFA200D557D8 /* ssl */ = { + isa = PBXGroup; + children = ( + B2E6FE001AC2EFA200D557D8 /* .gitignore */, + B2E6FE011AC2EFA200D557D8 /* ca.pem */, + B2E6FE021AC2EFA200D557D8 /* extensions.conf */, + B2E6FE031AC2EFA200D557D8 /* mod-h2.greenbytes.de.key */, + B2E6FE041AC2EFA200D557D8 /* mod-h2.greenbytes.de.pem */, + B2E6FE051AC2EFA200D557D8 /* test.example.org.x509.input */, + B2B170B61B303B0C00EDC007 /* noh2.example.org.x509.input */, + ); + path = ssl; + sourceTree = ""; + }; + B2E6FE071AC2EFA200D557D8 /* htdocs */ = { + isa = PBXGroup; + children = ( + B2E6FE081AC2EFA200D557D8 /* test.example.org */, + ); + path = htdocs; + sourceTree = ""; + }; + B2E6FE081AC2EFA200D557D8 /* test.example.org */ = { + isa = PBXGroup; + children = ( + B2E6FE091AC2EFA200D557D8 /* 001.html */, + B2E6FE0A1AC2EFA200D557D8 /* 002.jpg */, + B2E6FE0B1AC2EFA200D557D8 /* 003 */, + B2E6FE0D1AC2EFA200D557D8 /* 003.html */, + B2E6FE0E1AC2EFA200D557D8 /* 004 */, + B2E6FEC31AC2EFA300D557D8 /* 004.html */, + B2E6FEC41AC2EFA300D557D8 /* 005.txt */, + B2E6FEC51AC2EFA300D557D8 /* 006 */, + B2E6FEC81AC2EFA300D557D8 /* 006.html */, + B2E6FEC91AC2EFA300D557D8 /* 007 */, + B2E6FECB1AC2EFA300D557D8 /* 007.html */, + B2E6FECF1AC2EFA300D557D8 /* 009.py */, + B2E6FED01AC2EFA300D557D8 /* files */, + B2E6FED21AC2EFA300D557D8 /* hello.py */, + B2E6FED31AC2EFA300D557D8 /* index.html */, + B2E708C91AE64B470009EDAF /* info.php */, + B2E6FED41AC2EFA300D557D8 /* necho.py */, + B2E6FED51AC2EFA300D557D8 /* upload.py */, + B2E6FED61AC2EFA300D557D8 /* xxx-1.0.2a.tar.gz */, + ); + path = test.example.org; + sourceTree = ""; + }; + B2E6FE0B1AC2EFA200D557D8 /* 003 */ = { + isa = PBXGroup; + children = ( + B2E6FE0C1AC2EFA200D557D8 /* 003_img.jpg */, + ); + path = 003; + sourceTree = ""; + }; + B2E6FE0E1AC2EFA200D557D8 /* 004 */ = { + isa = PBXGroup; + children = ( + B2E6FE0F1AC2EFA200D557D8 /* gophertiles.jpg */, + B2E6FE101AC2EFA200D557D8 /* gophertiles_002.jpg */, + B2E6FE111AC2EFA200D557D8 /* gophertiles_003.jpg */, + B2E6FE121AC2EFA200D557D8 /* gophertiles_004.jpg */, + B2E6FE131AC2EFA200D557D8 /* gophertiles_005.jpg */, + B2E6FE141AC2EFA200D557D8 /* gophertiles_006.jpg */, + B2E6FE151AC2EFA200D557D8 /* gophertiles_007.jpg */, + B2E6FE161AC2EFA200D557D8 /* gophertiles_008.jpg */, + B2E6FE171AC2EFA200D557D8 /* gophertiles_009.jpg */, + B2E6FE181AC2EFA200D557D8 /* gophertiles_010.jpg */, + B2E6FE191AC2EFA200D557D8 /* gophertiles_011.jpg */, + B2E6FE1A1AC2EFA200D557D8 /* gophertiles_012.jpg */, + B2E6FE1B1AC2EFA200D557D8 /* gophertiles_013.jpg */, + B2E6FE1C1AC2EFA200D557D8 /* gophertiles_014.jpg */, + B2E6FE1D1AC2EFA200D557D8 /* gophertiles_015.jpg */, + B2E6FE1E1AC2EFA200D557D8 /* gophertiles_016.jpg */, + B2E6FE1F1AC2EFA200D557D8 /* gophertiles_017.jpg */, + B2E6FE201AC2EFA200D557D8 /* gophertiles_018.jpg */, + B2E6FE211AC2EFA200D557D8 /* gophertiles_019.jpg */, + B2E6FE221AC2EFA200D557D8 /* gophertiles_020.jpg */, + B2E6FE231AC2EFA200D557D8 /* gophertiles_021.jpg */, + B2E6FE241AC2EFA200D557D8 /* gophertiles_022.jpg */, + B2E6FE251AC2EFA200D557D8 /* gophertiles_023.jpg */, + B2E6FE261AC2EFA200D557D8 /* gophertiles_024.jpg */, + B2E6FE271AC2EFA200D557D8 /* gophertiles_025.jpg */, + B2E6FE281AC2EFA200D557D8 /* gophertiles_026.jpg */, + B2E6FE291AC2EFA200D557D8 /* gophertiles_027.jpg */, + B2E6FE2A1AC2EFA200D557D8 /* gophertiles_028.jpg */, + B2E6FE2B1AC2EFA200D557D8 /* gophertiles_029.jpg */, + B2E6FE2C1AC2EFA200D557D8 /* gophertiles_030.jpg */, + B2E6FE2D1AC2EFA200D557D8 /* gophertiles_031.jpg */, + B2E6FE2E1AC2EFA200D557D8 /* gophertiles_032.jpg */, + B2E6FE2F1AC2EFA200D557D8 /* gophertiles_033.jpg */, + B2E6FE301AC2EFA200D557D8 /* gophertiles_034.jpg */, + B2E6FE311AC2EFA200D557D8 /* gophertiles_035.jpg */, + B2E6FE321AC2EFA200D557D8 /* gophertiles_036.jpg */, + B2E6FE331AC2EFA200D557D8 /* gophertiles_037.jpg */, + B2E6FE341AC2EFA200D557D8 /* gophertiles_038.jpg */, + B2E6FE351AC2EFA200D557D8 /* gophertiles_039.jpg */, + B2E6FE361AC2EFA200D557D8 /* gophertiles_040.jpg */, + B2E6FE371AC2EFA200D557D8 /* gophertiles_041.jpg */, + B2E6FE381AC2EFA200D557D8 /* gophertiles_042.jpg */, + B2E6FE391AC2EFA200D557D8 /* gophertiles_043.jpg */, + B2E6FE3A1AC2EFA200D557D8 /* gophertiles_044.jpg */, + B2E6FE3B1AC2EFA200D557D8 /* gophertiles_045.jpg */, + B2E6FE3C1AC2EFA200D557D8 /* gophertiles_046.jpg */, + B2E6FE3D1AC2EFA200D557D8 /* gophertiles_047.jpg */, + B2E6FE3E1AC2EFA200D557D8 /* gophertiles_048.jpg */, + B2E6FE3F1AC2EFA200D557D8 /* gophertiles_049.jpg */, + B2E6FE401AC2EFA200D557D8 /* gophertiles_050.jpg */, + B2E6FE411AC2EFA200D557D8 /* gophertiles_051.jpg */, + B2E6FE421AC2EFA200D557D8 /* gophertiles_052.jpg */, + B2E6FE431AC2EFA200D557D8 /* gophertiles_053.jpg */, + B2E6FE441AC2EFA200D557D8 /* gophertiles_054.jpg */, + B2E6FE451AC2EFA200D557D8 /* gophertiles_055.jpg */, + B2E6FE461AC2EFA200D557D8 /* gophertiles_056.jpg */, + B2E6FE471AC2EFA200D557D8 /* gophertiles_057.jpg */, + B2E6FE481AC2EFA200D557D8 /* gophertiles_058.jpg */, + B2E6FE491AC2EFA200D557D8 /* gophertiles_059.jpg */, + B2E6FE4A1AC2EFA200D557D8 /* gophertiles_060.jpg */, + B2E6FE4B1AC2EFA200D557D8 /* gophertiles_061.jpg */, + B2E6FE4C1AC2EFA200D557D8 /* gophertiles_062.jpg */, + B2E6FE4D1AC2EFA200D557D8 /* gophertiles_063.jpg */, + B2E6FE4E1AC2EFA200D557D8 /* gophertiles_064.jpg */, + B2E6FE4F1AC2EFA200D557D8 /* gophertiles_065.jpg */, + B2E6FE501AC2EFA200D557D8 /* gophertiles_066.jpg */, + B2E6FE511AC2EFA200D557D8 /* gophertiles_067.jpg */, + B2E6FE521AC2EFA200D557D8 /* gophertiles_068.jpg */, + B2E6FE531AC2EFA200D557D8 /* gophertiles_069.jpg */, + B2E6FE541AC2EFA200D557D8 /* gophertiles_070.jpg */, + B2E6FE551AC2EFA200D557D8 /* gophertiles_071.jpg */, + B2E6FE561AC2EFA200D557D8 /* gophertiles_072.jpg */, + B2E6FE571AC2EFA200D557D8 /* gophertiles_073.jpg */, + B2E6FE581AC2EFA200D557D8 /* gophertiles_074.jpg */, + B2E6FE591AC2EFA200D557D8 /* gophertiles_075.jpg */, + B2E6FE5A1AC2EFA200D557D8 /* gophertiles_076.jpg */, + B2E6FE5B1AC2EFA200D557D8 /* gophertiles_077.jpg */, + B2E6FE5C1AC2EFA200D557D8 /* gophertiles_078.jpg */, + B2E6FE5D1AC2EFA200D557D8 /* gophertiles_079.jpg */, + B2E6FE5E1AC2EFA200D557D8 /* gophertiles_080.jpg */, + B2E6FE5F1AC2EFA200D557D8 /* gophertiles_081.jpg */, + B2E6FE601AC2EFA200D557D8 /* gophertiles_082.jpg */, + B2E6FE611AC2EFA200D557D8 /* gophertiles_083.jpg */, + B2E6FE621AC2EFA200D557D8 /* gophertiles_084.jpg */, + B2E6FE631AC2EFA200D557D8 /* gophertiles_085.jpg */, + B2E6FE641AC2EFA200D557D8 /* gophertiles_086.jpg */, + B2E6FE651AC2EFA200D557D8 /* gophertiles_087.jpg */, + B2E6FE661AC2EFA200D557D8 /* gophertiles_088.jpg */, + B2E6FE671AC2EFA200D557D8 /* gophertiles_089.jpg */, + B2E6FE681AC2EFA200D557D8 /* gophertiles_090.jpg */, + B2E6FE691AC2EFA200D557D8 /* gophertiles_091.jpg */, + B2E6FE6A1AC2EFA200D557D8 /* gophertiles_092.jpg */, + B2E6FE6B1AC2EFA200D557D8 /* gophertiles_093.jpg */, + B2E6FE6C1AC2EFA200D557D8 /* gophertiles_094.jpg */, + B2E6FE6D1AC2EFA200D557D8 /* gophertiles_095.jpg */, + B2E6FE6E1AC2EFA200D557D8 /* gophertiles_096.jpg */, + B2E6FE6F1AC2EFA200D557D8 /* gophertiles_097.jpg */, + B2E6FE701AC2EFA200D557D8 /* gophertiles_098.jpg */, + B2E6FE711AC2EFA200D557D8 /* gophertiles_099.jpg */, + B2E6FE721AC2EFA200D557D8 /* gophertiles_100.jpg */, + B2E6FE731AC2EFA200D557D8 /* gophertiles_101.jpg */, + B2E6FE741AC2EFA200D557D8 /* gophertiles_102.jpg */, + B2E6FE751AC2EFA200D557D8 /* gophertiles_103.jpg */, + B2E6FE761AC2EFA200D557D8 /* gophertiles_104.jpg */, + B2E6FE771AC2EFA200D557D8 /* gophertiles_105.jpg */, + B2E6FE781AC2EFA200D557D8 /* gophertiles_106.jpg */, + B2E6FE791AC2EFA200D557D8 /* gophertiles_107.jpg */, + B2E6FE7A1AC2EFA200D557D8 /* gophertiles_108.jpg */, + B2E6FE7B1AC2EFA200D557D8 /* gophertiles_109.jpg */, + B2E6FE7C1AC2EFA200D557D8 /* gophertiles_110.jpg */, + B2E6FE7D1AC2EFA200D557D8 /* gophertiles_111.jpg */, + B2E6FE7E1AC2EFA200D557D8 /* gophertiles_112.jpg */, + B2E6FE7F1AC2EFA200D557D8 /* gophertiles_113.jpg */, + B2E6FE801AC2EFA200D557D8 /* gophertiles_114.jpg */, + B2E6FE811AC2EFA200D557D8 /* gophertiles_115.jpg */, + B2E6FE821AC2EFA200D557D8 /* gophertiles_116.jpg */, + B2E6FE831AC2EFA200D557D8 /* gophertiles_117.jpg */, + B2E6FE841AC2EFA200D557D8 /* gophertiles_118.jpg */, + B2E6FE851AC2EFA200D557D8 /* gophertiles_119.jpg */, + B2E6FE861AC2EFA200D557D8 /* gophertiles_120.jpg */, + B2E6FE871AC2EFA200D557D8 /* gophertiles_121.jpg */, + B2E6FE881AC2EFA200D557D8 /* gophertiles_122.jpg */, + B2E6FE891AC2EFA200D557D8 /* gophertiles_123.jpg */, + B2E6FE8A1AC2EFA200D557D8 /* gophertiles_124.jpg */, + B2E6FE8B1AC2EFA200D557D8 /* gophertiles_125.jpg */, + B2E6FE8C1AC2EFA200D557D8 /* gophertiles_126.jpg */, + B2E6FE8D1AC2EFA200D557D8 /* gophertiles_127.jpg */, + B2E6FE8E1AC2EFA200D557D8 /* gophertiles_128.jpg */, + B2E6FE8F1AC2EFA200D557D8 /* gophertiles_129.jpg */, + B2E6FE901AC2EFA200D557D8 /* gophertiles_130.jpg */, + B2E6FE911AC2EFA200D557D8 /* gophertiles_131.jpg */, + B2E6FE921AC2EFA200D557D8 /* gophertiles_132.jpg */, + B2E6FE931AC2EFA200D557D8 /* gophertiles_133.jpg */, + B2E6FE941AC2EFA200D557D8 /* gophertiles_134.jpg */, + B2E6FE951AC2EFA200D557D8 /* gophertiles_135.jpg */, + B2E6FE961AC2EFA200D557D8 /* gophertiles_136.jpg */, + B2E6FE971AC2EFA200D557D8 /* gophertiles_137.jpg */, + B2E6FE981AC2EFA200D557D8 /* gophertiles_138.jpg */, + B2E6FE991AC2EFA200D557D8 /* gophertiles_139.jpg */, + B2E6FE9A1AC2EFA200D557D8 /* gophertiles_140.jpg */, + B2E6FE9B1AC2EFA200D557D8 /* gophertiles_141.jpg */, + B2E6FE9C1AC2EFA200D557D8 /* gophertiles_142.jpg */, + B2E6FE9D1AC2EFA200D557D8 /* gophertiles_143.jpg */, + B2E6FE9E1AC2EFA200D557D8 /* gophertiles_144.jpg */, + B2E6FE9F1AC2EFA200D557D8 /* gophertiles_145.jpg */, + B2E6FEA01AC2EFA200D557D8 /* gophertiles_146.jpg */, + B2E6FEA11AC2EFA200D557D8 /* gophertiles_147.jpg */, + B2E6FEA21AC2EFA200D557D8 /* gophertiles_148.jpg */, + B2E6FEA31AC2EFA200D557D8 /* gophertiles_149.jpg */, + B2E6FEA41AC2EFA200D557D8 /* gophertiles_150.jpg */, + B2E6FEA51AC2EFA200D557D8 /* gophertiles_151.jpg */, + B2E6FEA61AC2EFA200D557D8 /* gophertiles_152.jpg */, + B2E6FEA71AC2EFA200D557D8 /* gophertiles_153.jpg */, + B2E6FEA81AC2EFA200D557D8 /* gophertiles_154.jpg */, + B2E6FEA91AC2EFA200D557D8 /* gophertiles_155.jpg */, + B2E6FEAA1AC2EFA200D557D8 /* gophertiles_156.jpg */, + B2E6FEAB1AC2EFA200D557D8 /* gophertiles_157.jpg */, + B2E6FEAC1AC2EFA200D557D8 /* gophertiles_158.jpg */, + B2E6FEAD1AC2EFA200D557D8 /* gophertiles_159.jpg */, + B2E6FEAE1AC2EFA200D557D8 /* gophertiles_160.jpg */, + B2E6FEAF1AC2EFA200D557D8 /* gophertiles_161.jpg */, + B2E6FEB01AC2EFA200D557D8 /* gophertiles_162.jpg */, + B2E6FEB11AC2EFA200D557D8 /* gophertiles_163.jpg */, + B2E6FEB21AC2EFA200D557D8 /* gophertiles_164.jpg */, + B2E6FEB31AC2EFA200D557D8 /* gophertiles_165.jpg */, + B2E6FEB41AC2EFA200D557D8 /* gophertiles_166.jpg */, + B2E6FEB51AC2EFA300D557D8 /* gophertiles_167.jpg */, + B2E6FEB61AC2EFA300D557D8 /* gophertiles_168.jpg */, + B2E6FEB71AC2EFA300D557D8 /* gophertiles_169.jpg */, + B2E6FEB81AC2EFA300D557D8 /* gophertiles_170.jpg */, + B2E6FEB91AC2EFA300D557D8 /* gophertiles_171.jpg */, + B2E6FEBA1AC2EFA300D557D8 /* gophertiles_172.jpg */, + B2E6FEBB1AC2EFA300D557D8 /* gophertiles_173.jpg */, + B2E6FEBC1AC2EFA300D557D8 /* gophertiles_174.jpg */, + B2E6FEBD1AC2EFA300D557D8 /* gophertiles_175.jpg */, + B2E6FEBE1AC2EFA300D557D8 /* gophertiles_176.jpg */, + B2E6FEBF1AC2EFA300D557D8 /* gophertiles_177.jpg */, + B2E6FEC01AC2EFA300D557D8 /* gophertiles_178.jpg */, + B2E6FEC11AC2EFA300D557D8 /* gophertiles_179.jpg */, + B2E6FEC21AC2EFA300D557D8 /* gophertiles_180.jpg */, + ); + path = 004; + sourceTree = ""; + }; + B2E6FEC51AC2EFA300D557D8 /* 006 */ = { + isa = PBXGroup; + children = ( + B2E6FEC61AC2EFA300D557D8 /* 006.css */, + B2E6FEC71AC2EFA300D557D8 /* 006.js */, + ); + path = 006; + sourceTree = ""; + }; + B2E6FEC91AC2EFA300D557D8 /* 007 */ = { + isa = PBXGroup; + children = ( + B2E6FECA1AC2EFA300D557D8 /* 007.py */, + ); + path = 007; + sourceTree = ""; + }; + B2E6FED01AC2EFA300D557D8 /* files */ = { + isa = PBXGroup; + children = ( + B2E6FED11AC2EFA300D557D8 /* empty.txt */, + ); + path = files; + sourceTree = ""; + }; + B2E708C71AE64AC00009EDAF /* bin */ = { + isa = PBXGroup; + children = ( + B2E708C81AE64AC00009EDAF /* php-wrapper */, + B2B170B41B2F02C100EDC007 /* testrun */, + ); + path = bin; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXLegacyTarget section */ + B2546D8A1A7F76FA0033A875 /* mod_h2 make */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "$(ACTION) APXS=../gen/install/bin/apxs"; + buildConfigurationList = B2546D8B1A7F76FA0033A875 /* Build configuration list for PBXLegacyTarget "mod_h2 make" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/make; + buildWorkingDirectory = "/Users/sei/projects/mod-h2/mod_h2"; + dependencies = ( + ); + name = "mod_h2 make"; + passBuildSettingsInEnvironment = 1; + productName = "mod_h2 make"; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXProject section */ + B27BBD201A65757700C58A41 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0600; + TargetAttributes = { + B2546D8A1A7F76FA0033A875 = { + CreatedOnToolsVersion = 6.0; + }; + }; + }; + buildConfigurationList = B27BBD231A65757700C58A41 /* Build configuration list for PBXProject "mod-h2" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = B27BBD1F1A65757700C58A41; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B2546D8A1A7F76FA0033A875 /* mod_h2 make */, + ); + }; +/* End PBXProject section */ + +/* Begin XCBuildConfiguration section */ + B2546D8C1A7F76FA0033A875 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + B2546D8D1A7F76FA0033A875 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + B27BBD241A65757700C58A41 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BuildMake = ""; + MACOSX_DEPLOYMENT_TARGET = 10.9; + }; + name = Debug; + }; + B27BBD251A65757700C58A41 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BuildMake = ""; + MACOSX_DEPLOYMENT_TARGET = 10.9; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + B2546D8B1A7F76FA0033A875 /* Build configuration list for PBXLegacyTarget "mod_h2 make" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B2546D8C1A7F76FA0033A875 /* Debug */, + B2546D8D1A7F76FA0033A875 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B27BBD231A65757700C58A41 /* Build configuration list for PBXProject "mod-h2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B27BBD241A65757700C58A41 /* Debug */, + B27BBD251A65757700C58A41 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = B27BBD201A65757700C58A41 /* Project object */; +} diff --git a/modules/http2/mod-h2.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/modules/http2/mod-h2.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..1e3d739190 --- /dev/null +++ b/modules/http2/mod-h2.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/modules/http2/mod-h2.xcodeproj/project.xcworkspace/xcshareddata/mod-h2.xccheckout b/modules/http2/mod-h2.xcodeproj/project.xcworkspace/xcshareddata/mod-h2.xccheckout new file mode 100644 index 0000000000..d722efd16b --- /dev/null +++ b/modules/http2/mod-h2.xcodeproj/project.xcworkspace/xcshareddata/mod-h2.xccheckout @@ -0,0 +1,53 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 0BBB75AC-83C1-4A66-A178-3C70F4067182 + IDESourceControlProjectName + mod-h2 + IDESourceControlProjectOriginsDictionary + + 7A6D7B037166029D8EB565F124690A553EB43BAF + https://www.greenbytes.de/projects/mod-h2/mod-h2.git + ED37D202B9691A75DA1E927834B45B38A4B3B6A5 + github.com:tatsuhiro-t/nghttp2.git + + IDESourceControlProjectPath + mod-h2/mod-h2.xcodeproj + IDESourceControlProjectRelativeInstallPathDictionary + + 7A6D7B037166029D8EB565F124690A553EB43BAF + ../../.. + ED37D202B9691A75DA1E927834B45B38A4B3B6A5 + ../../../nghttp2/gen/nghttp2-master + + IDESourceControlProjectURL + https://www.greenbytes.de/projects/mod-h2/mod-h2.git + IDESourceControlProjectVersion + 111 + IDESourceControlProjectWCCIdentifier + 7A6D7B037166029D8EB565F124690A553EB43BAF + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 7A6D7B037166029D8EB565F124690A553EB43BAF + IDESourceControlWCCName + mod-h2 + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + ED37D202B9691A75DA1E927834B45B38A4B3B6A5 + IDESourceControlWCCName + nghttp2-master + + + + diff --git a/modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/mod_h2 make.xcscheme b/modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/mod_h2 make.xcscheme new file mode 100644 index 0000000000..4df58720c1 --- /dev/null +++ b/modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/mod_h2 make.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/xcschememanagement.plist b/modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000000..9b913c088b --- /dev/null +++ b/modules/http2/mod-h2.xcodeproj/xcuserdata/sei.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + mod_h2 make.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + B2546D8A1A7F76FA0033A875 + + primary + + + + + diff --git a/modules/http2/mod_h2/.gitignore b/modules/http2/mod_h2/.gitignore new file mode 100644 index 0000000000..2cc059ac1b --- /dev/null +++ b/modules/http2/mod_h2/.gitignore @@ -0,0 +1,7 @@ +*.o +*.slo +*.lo +*.la +.libs +Makefile.in +Makefile diff --git a/modules/http2/mod_h2/Makefile.am b/modules/http2/mod_h2/Makefile.am new file mode 100644 index 0000000000..16a7ec5314 --- /dev/null +++ b/modules/http2/mod_h2/Makefile.am @@ -0,0 +1,94 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +SUBDIRS = + +ACLOCAL_AMFLAGS = -I m4 + +lib_LTLIBRARIES = mod_h2.la + +mod_h2_la_CPPFLAGS = -std=c99 -D_GNU_SOURCE -Werror +mod_h2_la_LDFLAGS = -module + +OBJECTS = \ + h2_alpn.c \ + h2_alt_svc.c \ + h2_config.c \ + h2_conn.c \ + h2_conn_io.c \ + h2_ctx.c \ + h2_from_h1.c \ + h2_h2.c \ + h2_io.c \ + h2_io_set.c \ + h2_mplx.c \ + h2_request.c \ + h2_response.c \ + h2_session.c \ + h2_stream.c \ + h2_stream_set.c \ + h2_task.c \ + h2_task_input.c \ + h2_task_output.c \ + h2_task_queue.c \ + h2_to_h1.c \ + h2_upgrade.c \ + h2_util.c \ + h2_worker.c \ + h2_workers.c \ + mod_h2.c + +HFILES = \ + h2_alpn.h \ + h2_alt_svc.h \ + h2_config.h \ + h2_conn.h \ + h2_conn_io.h \ + h2_ctx.h \ + h2_from_h1.h \ + h2_h2.h \ + h2_io.h \ + h2_io_set.h \ + h2_mplx.h \ + h2_private.h \ + h2_request.h \ + h2_response.h \ + h2_session.h \ + h2_stream.h \ + h2_stream_set.h \ + h2_task.h \ + h2_task_input.h \ + h2_task_output.h \ + h2_task_queue.h \ + h2_to_h1.h \ + h2_upgrade.h \ + h2_util.h \ + h2_version.h \ + h2_worker.h \ + h2_workers.h \ + mod_h2.h + + +mod_h2_la_SOURCES = $(HFILES) $(OBJECTS) + +all: mod_h2.la + +install-libLTLIBRARIES: + @: # override + +install-exec-local: mod_h2.la + $(MKDIR_P) $(DESTDIR)/@LIBEXEC_DIR@ + $(APXS) -i -S LIBEXECDIR=$(DESTDIR)/@LIBEXEC_DIR@ -n h2 mod_h2.la + + diff --git a/modules/http2/mod_h2/h2_alpn.c b/modules/http2/mod_h2/h2_alpn.c new file mode 100644 index 0000000000..1b3e28614b --- /dev/null +++ b/modules/http2/mod_h2/h2_alpn.c @@ -0,0 +1,295 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "h2_private.h" + +#include "h2_config.h" +#include "h2_ctx.h" +#include "h2_conn.h" +#include "h2_h2.h" +#include "h2_alpn.h" + +/******************************************************************************* + * SSL var lookup + */ +APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup, + (apr_pool_t *, server_rec *, + conn_rec *, request_rec *, + char *)); +static char *(*opt_ssl_var_lookup)(apr_pool_t *, server_rec *, + conn_rec *, request_rec *, + char *); + +/******************************************************************************* + * NPN callbacks and registry, deprecated + */ +typedef int (*ssl_npn_advertise_protos)(conn_rec *connection, + apr_array_header_t *protos); + +typedef int (*ssl_npn_proto_negotiated)(conn_rec *connection, + const char *proto_name, apr_size_t proto_name_len); + +APR_DECLARE_OPTIONAL_FN(int, modssl_register_npn, + (conn_rec *conn, + ssl_npn_advertise_protos advertisefn, + ssl_npn_proto_negotiated negotiatedfn)); + +static int (*opt_ssl_register_npn)(conn_rec*, + ssl_npn_advertise_protos, + ssl_npn_proto_negotiated); + +/******************************************************************************* + * ALPN callbacks and registry + */ +typedef int (*ssl_alpn_propose_protos)(conn_rec *connection, + apr_array_header_t *client_protos, apr_array_header_t *protos); + +typedef int (*ssl_alpn_proto_negotiated)(conn_rec *connection, + const char *proto_name, apr_size_t proto_name_len); + +APR_DECLARE_OPTIONAL_FN(int, modssl_register_alpn, + (conn_rec *conn, + ssl_alpn_propose_protos proposefn, + ssl_alpn_proto_negotiated negotiatedfn)); + +static int (*opt_ssl_register_alpn)(conn_rec*, + ssl_alpn_propose_protos, + ssl_alpn_proto_negotiated); + +/******************************************************************************* + * Hooks for processing incoming connections: + * - pre_conn_after_tls registers for ALPN handling + */ +static int h2_alpn_pre_conn(conn_rec* c, void *arg); + +/******************************************************************************* + * Once per lifetime init, retrieve optional functions + */ +apr_status_t h2_alpn_init(apr_pool_t *pool, server_rec *s) +{ + (void)pool; + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "h2_alpn init"); + opt_ssl_register_npn = APR_RETRIEVE_OPTIONAL_FN(modssl_register_npn); + opt_ssl_register_alpn = APR_RETRIEVE_OPTIONAL_FN(modssl_register_alpn); + opt_ssl_var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup); + + if (!opt_ssl_register_alpn && !opt_ssl_register_npn) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, + "mod_ssl does not offer ALPN or NPN registration"); + } + return APR_SUCCESS; +} + +/******************************************************************************* + * Register various hooks + */ +static const char *const mod_ssl[] = { "mod_ssl.c", NULL}; +static const char *const mod_core[] = { "core.c", NULL}; + +static void check_sni_host(conn_rec *c) +{ + /* If we have not done so already, ask the connection for the + * hostname send to us via SNI. This information is later used + * to retrieve the correct server settings for this connection. + */ + h2_ctx *ctx = h2_ctx_get(c); + if (opt_ssl_var_lookup && !ctx->hostname) { + const char *p = opt_ssl_var_lookup(c->pool, c->base_server, c, + NULL, (char*)"SSL_TLS_SNI"); + if (p && *p) { + ctx->hostname = apr_pstrdup(c->pool, p); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "h2_h2, connection, SNI %s", + ctx->hostname? ctx->hostname : "NULL"); + } + } +} + +void h2_alpn_register_hooks(void) +{ + /* This hook runs on new connection after mod_ssl, but before the core + * httpd. Its purpose is to register, if TLS is used, the ALPN callbacks + * that enable us to chose "h2" as next procotol if the client supports it. + */ + ap_hook_pre_connection(h2_alpn_pre_conn, + mod_ssl, mod_core, APR_HOOK_LAST); + +} + +static int h2_util_array_index(apr_array_header_t *array, const char *s) +{ + for (int i = 0; i < array->nelts; i++) { + const char *p = APR_ARRAY_IDX(array, i, const char*); + if (!strcmp(p, s)) { + return i; + } + } + return -1; +} + +static int h2_npn_advertise(conn_rec *c, apr_array_header_t *protos) +{ + h2_config *cfg; + + check_sni_host(c); + cfg = h2_config_get(c); + if (!h2_config_geti(cfg, H2_CONF_ENABLED)) { + return DECLINED; + } + + for (apr_size_t i = 0; i < h2_alpn_protos_len; ++i) { + const char *proto = h2_alpn_protos[i]; + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, + "NPN proposing %s from client selection", proto); + APR_ARRAY_PUSH(protos, const char*) = proto; + } + return OK; +} + +static int h2_negotiated(conn_rec *c, const char *via, + const char *proto_name, + apr_size_t proto_name_len) +{ + h2_ctx *ctx = h2_ctx_get(c); + + if (h2_ctx_is_task(ctx) ) { + return DECLINED; + } + + if (h2_ctx_pnego_is_done(ctx)) { + /* called twice? refraing from overriding existing selection. + * NPN is fading... + */ + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, + "protocol negotiated via %s called, but already set", + via); + return DECLINED; + } + + if (APLOGctrace1(c)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, + "protocol negotiated via %s is %s", via, + apr_pstrndup(c->pool, proto_name, proto_name_len)); + } + + for (apr_size_t i = 0; i < h2_alpn_protos_len; ++i) { + const char *proto = h2_alpn_protos[i]; + if (proto_name_len == strlen(proto) + && strncmp(proto, proto_name, proto_name_len) == 0) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, + "protocol set via %s to %s", via, proto); + h2_ctx_pnego_set_done(ctx, proto); + break; + } + } + return OK; +} + +static int h2_npn_negotiated(conn_rec *c, + const char *proto_name, + apr_size_t proto_name_len) +{ + return h2_negotiated(c, "NPN", proto_name, proto_name_len); +} + +static int h2_alpn_propose(conn_rec *c, + apr_array_header_t *client_protos, + apr_array_header_t *protos) +{ + h2_config *cfg; + + check_sni_host(c); + cfg = h2_config_get(c); + if (!h2_config_geti(cfg, H2_CONF_ENABLED)) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, + "ALPN propose, h2 disabled for config %s", cfg->name); + return DECLINED; + } + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, + "ALPN propose for config %s", cfg->name); + /* */ + for (apr_size_t i = 0; i < h2_alpn_protos_len; ++i) { + const char *proto = h2_alpn_protos[i]; + if (h2_util_array_index(client_protos, proto) >= 0) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, + "ALPN proposing %s", proto); + APR_ARRAY_PUSH(protos, const char*) = proto; + return OK; /* propose only one, the first match from our list */ + } + } + return OK; +} + +static int h2_alpn_negotiated(conn_rec *c, + const char *proto_name, + apr_size_t proto_name_len) +{ + return h2_negotiated(c, "ALPN", proto_name, proto_name_len); +} + + + +int h2_alpn_pre_conn(conn_rec* c, void *arg) +{ + (void)arg; + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "h2_h2, pre_connection, start"); + + h2_ctx *ctx = h2_ctx_get(c); + if (h2_ctx_is_task(ctx)) { + /* our stream pseudo connection */ + return DECLINED; + } + + if (h2_h2_is_tls(c)) { + /* Brand new TLS connection: Does mod_ssl offer ALPN/NPN support? + * If so, register at all present, clients may use either/or. + */ + if (opt_ssl_register_alpn == NULL && opt_ssl_register_npn == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, + "h2_h2, pre_connection, no ALPN/NPN " + "support in mod_ssl"); + return DECLINED; + } + + if (opt_ssl_register_alpn) { + opt_ssl_register_alpn(c, h2_alpn_propose, h2_alpn_negotiated); + } + if (opt_ssl_register_npn) { + opt_ssl_register_npn(c, h2_npn_advertise, h2_npn_negotiated); + } + + h2_ctx_pnego_set_started(ctx); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "h2_alpn, pre_connection, ALPN callback registered"); + } + + return DECLINED; +} + diff --git a/modules/http2/mod_h2/h2_alpn.h b/modules/http2/mod_h2/h2_alpn.h new file mode 100644 index 0000000000..ab6c8d418e --- /dev/null +++ b/modules/http2/mod_h2/h2_alpn.h @@ -0,0 +1,29 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_alpn__ +#define __mod_h2__h2_alpn__ + +/* + * One time, post config intialization. + */ +apr_status_t h2_alpn_init(apr_pool_t *pool, server_rec *s); + +/* Register apache hooks for ALPN protocol + */ +void h2_alpn_register_hooks(void); + + +#endif /* defined(__mod_h2__h2_h2__) */ diff --git a/modules/http2/mod_h2/h2_alt_svc.c b/modules/http2/mod_h2/h2_alt_svc.c new file mode 100644 index 0000000000..37f7692d29 --- /dev/null +++ b/modules/http2/mod_h2/h2_alt_svc.c @@ -0,0 +1,122 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_alt_svc.h" +#include "h2_ctx.h" +#include "h2_config.h" +#include "h2_h2.h" +#include "h2_util.h" + +static int h2_alt_svc_request_handler(request_rec *r); + +void h2_alt_svc_register_hooks(void) +{ + ap_hook_handler(h2_alt_svc_request_handler, NULL, NULL, APR_HOOK_LAST); +} + +/** + * Parse an Alt-Svc specifier as described in "HTTP Alternative Services" + * (https://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-04) + * with the following changes: + * - do not percent encode token values + * - do not use quotation marks + */ +h2_alt_svc *h2_alt_svc_parse(const char *s, apr_pool_t *pool) { + const char *sep = strchr(s, '='); + if (sep) { + const char *alpn = apr_pstrndup(pool, s, sep - s); + const char *host = NULL; + int port = 0; + s = sep + 1; + sep = strchr(s, ':'); /* mandatory : */ + if (sep) { + if (sep != s) { /* optional host */ + host = apr_pstrndup(pool, s, sep - s); + } + s = sep + 1; + if (*s) { /* must be a port number */ + port = (int)apr_atoi64(s); + if (port > 0 && port < (0x1 << 16)) { + h2_alt_svc *as = apr_pcalloc(pool, sizeof(*as)); + as->alpn = alpn; + as->host = host; + as->port = port; + return as; + } + } + } + } + return NULL; +} + +#define h2_alt_svc_IDX(list, i) ((h2_alt_svc**)(list)->elts)[i] + +static int h2_alt_svc_request_handler(request_rec *r) +{ + h2_ctx *ctx = h2_ctx_rget(r); + + if (h2_ctx_is_active(ctx) || h2_ctx_is_task(ctx)) { + return DECLINED; + } + + h2_config *cfg = h2_config_rget(r); + if (r->hostname && cfg && cfg->alt_svcs && cfg->alt_svcs->nelts > 0) { + const char *alt_svc_used = apr_table_get(r->headers_in, "Alt-Svc-Used"); + if (!alt_svc_used /*|| (alt_svc_used[0] == '0')*/) { + /* We have alt-svcs defined and client is not already using + * one, announce the services that were configured and match. + * The security of this connection determines if we allow + * other host names or ports only. + */ + const char *alt_svc = ""; + const char *svc_ma = ""; + int secure = h2_h2_is_tls(r->connection); + int ma = h2_config_geti(cfg, H2_CONF_ALT_SVC_MAX_AGE); + if (ma >= 0) { + svc_ma = apr_psprintf(r->pool, "; ma=%d", ma); + } + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + "h2_alt_svc: announce %s for %s:%d", + (secure? "secure" : "insecure"), + r->hostname, (int)r->server->port); + for (int i = 0; i < cfg->alt_svcs->nelts; ++i) { + h2_alt_svc *as = h2_alt_svc_IDX(cfg->alt_svcs, i); + const char *ahost = as->host; + if (ahost && !apr_strnatcasecmp(ahost, r->hostname)) { + ahost = NULL; + } + if (secure || !ahost) { + alt_svc = apr_psprintf(r->pool, "%s%s%s=\"%s:%d\"%s", + alt_svc, + (*alt_svc? ", " : ""), as->alpn, + ahost? ahost : "", as->port, + svc_ma); + } + } + if (*alt_svc) { + apr_table_set(r->headers_out, "Alt-Svc", alt_svc); + } + } + } + + return DECLINED; +} + diff --git a/modules/http2/mod_h2/h2_alt_svc.h b/modules/http2/mod_h2/h2_alt_svc.h new file mode 100644 index 0000000000..51f89d00b8 --- /dev/null +++ b/modules/http2/mod_h2/h2_alt_svc.h @@ -0,0 +1,39 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_alt_svc__ +#define __mod_h2__h2_alt_svc__ + +typedef struct h2_alt_svc h2_alt_svc; + +struct h2_alt_svc { + const char *alpn; + const char *host; + int port; +}; + +void h2_alt_svc_register_hooks(void); + +/** + * Parse an Alt-Svc specifier as described in "HTTP Alternative Services" + * (https://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-04) + * with the following changes: + * - do not percent encode token values + * - do not use quotation marks + */ +h2_alt_svc *h2_alt_svc_parse(const char *s, apr_pool_t *pool); + + +#endif /* defined(__mod_h2__h2_alt_svc__) */ diff --git a/modules/http2/mod_h2/h2_config.c b/modules/http2/mod_h2/h2_config.c new file mode 100644 index 0000000000..01b6fb98cd --- /dev/null +++ b/modules/http2/mod_h2/h2_config.c @@ -0,0 +1,384 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include + +#include + +#include "h2_alt_svc.h" +#include "h2_ctx.h" +#include "h2_conn.h" +#include "h2_config.h" +#include "h2_private.h" + +#define DEF_VAL (-1) + +#define H2_CONFIG_GET(a, b, n) \ + (((a)->n == DEF_VAL)? (b) : (a))->n + +static h2_config defconf = { + "default", + 0, /* enabled */ + 100, /* max_streams */ + 16 * 1024, /* max_hl_size */ + 64 * 1024, /* window_size */ + -1, /* min workers */ + -1, /* max workers */ + 10 * 60, /* max workers idle secs */ + 64 * 1024, /* stream max mem size */ + NULL, /* no alt-svcs */ + -1, /* alt-svc max age */ + 0, /* serialize headers */ + 1, /* hack mpm event */ + 1, /* h2 direct mode */ +}; + +static void *h2_config_create(apr_pool_t *pool, + const char *prefix, const char *x) +{ + h2_config *conf = (h2_config *)apr_pcalloc(pool, sizeof(h2_config)); + + const char *s = x? x : "unknown"; + char *name = (char *)apr_pcalloc(pool, strlen(prefix) + strlen(s) + 20); + strcpy(name, prefix); + strcat(name, "["); + strcat(name, s); + strcat(name, "]"); + + conf->name = name; + conf->h2_enabled = DEF_VAL; + conf->h2_max_streams = DEF_VAL; + conf->h2_max_hl_size = DEF_VAL; + conf->h2_window_size = DEF_VAL; + conf->min_workers = DEF_VAL; + conf->max_workers = DEF_VAL; + conf->max_worker_idle_secs = DEF_VAL; + conf->stream_max_mem_size = DEF_VAL; + conf->alt_svc_max_age = DEF_VAL; + conf->serialize_headers = DEF_VAL; + conf->hack_mpm_event = DEF_VAL; + conf->h2_direct = DEF_VAL; + return conf; +} + +void *h2_config_create_svr(apr_pool_t *pool, server_rec *s) +{ + return h2_config_create(pool, "srv", s->defn_name); +} + +void *h2_config_create_dir(apr_pool_t *pool, char *x) +{ + return h2_config_create(pool, "dir", x); +} + +void *h2_config_merge(apr_pool_t *pool, void *basev, void *addv) +{ + h2_config *base = (h2_config *)basev; + h2_config *add = (h2_config *)addv; + h2_config *n = (h2_config *)apr_pcalloc(pool, sizeof(h2_config)); + + char *name = (char *)apr_pcalloc(pool, + 20 + strlen(add->name) + strlen(base->name)); + strcpy(name, "merged["); + strcat(name, add->name); + strcat(name, ", "); + strcat(name, base->name); + strcat(name, "]"); + n->name = name; + + n->h2_enabled = H2_CONFIG_GET(add, base, h2_enabled); + n->h2_max_streams = H2_CONFIG_GET(add, base, h2_max_streams); + n->h2_max_hl_size = H2_CONFIG_GET(add, base, h2_max_hl_size); + n->h2_window_size = H2_CONFIG_GET(add, base, h2_window_size); + n->min_workers = H2_CONFIG_GET(add, base, min_workers); + n->max_workers = H2_CONFIG_GET(add, base, max_workers); + n->max_worker_idle_secs = H2_CONFIG_GET(add, base, max_worker_idle_secs); + n->stream_max_mem_size = H2_CONFIG_GET(add, base, stream_max_mem_size); + n->alt_svcs = add->alt_svcs? add->alt_svcs : base->alt_svcs; + n->alt_svc_max_age = H2_CONFIG_GET(add, base, alt_svc_max_age); + n->serialize_headers = H2_CONFIG_GET(add, base, serialize_headers); + n->hack_mpm_event = H2_CONFIG_GET(add, base, hack_mpm_event); + n->h2_direct = H2_CONFIG_GET(add, base, h2_direct); + + return n; +} + +int h2_config_geti(h2_config *conf, h2_config_var_t var) +{ + switch(var) { + case H2_CONF_ENABLED: + return H2_CONFIG_GET(conf, &defconf, h2_enabled); + case H2_CONF_MAX_STREAMS: + return H2_CONFIG_GET(conf, &defconf, h2_max_streams); + case H2_CONF_MAX_HL_SIZE: + return H2_CONFIG_GET(conf, &defconf, h2_max_hl_size); + case H2_CONF_WIN_SIZE: + return H2_CONFIG_GET(conf, &defconf, h2_window_size); + case H2_CONF_MIN_WORKERS: + return H2_CONFIG_GET(conf, &defconf, min_workers); + case H2_CONF_MAX_WORKERS: + return H2_CONFIG_GET(conf, &defconf, max_workers); + case H2_CONF_MAX_WORKER_IDLE_SECS: + return H2_CONFIG_GET(conf, &defconf, max_worker_idle_secs); + case H2_CONF_STREAM_MAX_MEM: + return H2_CONFIG_GET(conf, &defconf, stream_max_mem_size); + case H2_CONF_ALT_SVC_MAX_AGE: + return H2_CONFIG_GET(conf, &defconf, alt_svc_max_age); + case H2_CONF_SER_HEADERS: + return H2_CONFIG_GET(conf, &defconf, serialize_headers); + case H2_CONF_HACK_MPM_EVENT: + return H2_CONFIG_GET(conf, &defconf, hack_mpm_event); + case H2_CONF_DIRECT: + return H2_CONFIG_GET(conf, &defconf, h2_direct); + default: + return DEF_VAL; + } +} + +h2_config *h2_config_sget(server_rec *s) +{ + h2_config *cfg = (h2_config *)ap_get_module_config(s->module_config, + &h2_module); + AP_DEBUG_ASSERT(cfg); + return cfg; +} + + +static const char *h2_conf_set_engine(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + if (!strcasecmp(value, "On")) { + cfg->h2_enabled = 1; + return NULL; + } + else if (!strcasecmp(value, "Off")) { + cfg->h2_enabled = 0; + return NULL; + } + + (void)arg; + return "value must be On or Off"; +} + +static const char *h2_conf_set_max_streams(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->h2_max_streams = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_window_size(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->h2_window_size = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_max_hl_size(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->h2_max_hl_size = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_min_workers(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->min_workers = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_max_workers(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->max_workers = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_max_worker_idle_secs(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->max_worker_idle_secs = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_stream_max_mem_size(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + + + cfg->stream_max_mem_size = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_add_alt_svc(cmd_parms *parms, + void *arg, const char *value) +{ + if (value && strlen(value)) { + h2_config *cfg = h2_config_sget(parms->server); + h2_alt_svc *as = h2_alt_svc_parse(value, parms->pool); + if (!as) { + return "unable to parse alt-svc specifier"; + } + if (!cfg->alt_svcs) { + cfg->alt_svcs = apr_array_make(parms->pool, 5, sizeof(h2_alt_svc*)); + } + APR_ARRAY_PUSH(cfg->alt_svcs, h2_alt_svc*) = as; + } + (void)arg; + return NULL; +} + +static const char *h2_conf_set_alt_svc_max_age(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->alt_svc_max_age = (int)apr_atoi64(value); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_serialize_headers(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->serialize_headers = !apr_strnatcasecmp(value, "On"); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_hack_mpm_event(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->hack_mpm_event = !apr_strnatcasecmp(value, "On"); + (void)arg; + return NULL; +} + +static const char *h2_conf_set_direct(cmd_parms *parms, + void *arg, const char *value) +{ + h2_config *cfg = h2_config_sget(parms->server); + cfg->h2_direct = !apr_strnatcasecmp(value, "On"); + (void)arg; + return NULL; +} + +#pragma GCC diagnostic ignored "-Wmissing-braces" +const command_rec h2_cmds[] = { + AP_INIT_TAKE1("H2Engine", h2_conf_set_engine, NULL, + RSRC_CONF, "on to enable HTTP/2 protocol handling"), + AP_INIT_TAKE1("H2MaxSessionStreams", h2_conf_set_max_streams, NULL, + RSRC_CONF, "maximum number of open streams per session"), + AP_INIT_TAKE1("H2InitialWindowSize", h2_conf_set_window_size, NULL, + RSRC_CONF, "initial window size on client DATA"), + AP_INIT_TAKE1("H2MaxHeaderListSize", h2_conf_set_max_hl_size, NULL, + RSRC_CONF, "maximum acceptable size of request headers"), + AP_INIT_TAKE1("H2MinWorkers", h2_conf_set_min_workers, NULL, + RSRC_CONF, "minimum number of worker threads per child"), + AP_INIT_TAKE1("H2MaxWorkers", h2_conf_set_max_workers, NULL, + RSRC_CONF, "maximum number of worker threads per child"), + AP_INIT_TAKE1("H2MaxWorkerIdleSeconds", h2_conf_set_max_worker_idle_secs, NULL, + RSRC_CONF, "maximum number of idle seconds before a worker shuts down"), + AP_INIT_TAKE1("H2StreamMaxMemSize", h2_conf_set_stream_max_mem_size, NULL, + RSRC_CONF, "maximum number of bytes buffered in memory for a stream"), + AP_INIT_TAKE1("H2AltSvc", h2_add_alt_svc, NULL, + RSRC_CONF, "adds an Alt-Svc for this server"), + AP_INIT_TAKE1("H2AltSvcMaxAge", h2_conf_set_alt_svc_max_age, NULL, + RSRC_CONF, "set the maximum age (in seconds) that client can rely on alt-svc information"), + AP_INIT_TAKE1("H2SerializeHeaders", h2_conf_set_serialize_headers, NULL, + RSRC_CONF, "on to enable header serialization for compatibility"), + AP_INIT_TAKE1("H2HackMpmEvent", h2_conf_set_hack_mpm_event, NULL, + RSRC_CONF, "on to enable a hack that makes mpm_event working with mod_h2"), + AP_INIT_TAKE1("H2Direct", h2_conf_set_direct, NULL, + RSRC_CONF, "on to enable direct HTTP/2 mode on non-TLS"), + { NULL, NULL, NULL, 0, 0, NULL } +}; + + +h2_config *h2_config_rget(request_rec *r) +{ + h2_config *cfg = (h2_config *)ap_get_module_config(r->per_dir_config, + &h2_module); + return cfg? cfg : h2_config_sget(r->server); +} + +h2_config *h2_config_get(conn_rec *c) +{ + h2_ctx *ctx = h2_ctx_get(c); + if (ctx->config) { + return ctx->config; + } + if (!ctx->server && ctx->hostname) { + /* We have a host agreed upon via TLS SNI, but no request yet. + * The sni host was accepted and therefore does match a server record + * (vhost) for it. But we need to know which one. + * Normally, it is enough to be set on the initial request on a + * connection, but we need it earlier. Simulate a request and call + * the vhost matching stuff. + */ + apr_uri_t uri; + memset(&uri, 0, sizeof(uri)); + uri.scheme = (char*)"https"; + uri.hostinfo = (char*)ctx->hostname; + uri.hostname = (char*)ctx->hostname; + uri.port_str = (char*)""; + uri.port = c->local_addr->port; + uri.path = (char*)"/"; + + request_rec r; + memset(&r, 0, sizeof(r)); + r.uri = (char*)"/"; + r.connection = c; + r.pool = c->pool; + r.hostname = ctx->hostname; + r.headers_in = apr_table_make(c->pool, 1); + r.parsed_uri = uri; + r.status = HTTP_OK; + r.server = r.connection->base_server; + ap_update_vhost_from_headers(&r); + ctx->server = r.server; + } + + if (ctx->server) { + ctx->config = h2_config_sget(ctx->server); + return ctx->config; + } + + return h2_config_sget(c->base_server); +} + diff --git a/modules/http2/mod_h2/h2_config.h b/modules/http2/mod_h2/h2_config.h new file mode 100644 index 0000000000..a379475f5c --- /dev/null +++ b/modules/http2/mod_h2/h2_config.h @@ -0,0 +1,78 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_config_h__ +#define __mod_h2__h2_config_h__ + +#undef PACKAGE_VERSION +#undef PACKAGE_TARNAME +#undef PACKAGE_STRING +#undef PACKAGE_NAME +#undef PACKAGE_BUGREPORT +#include "config.h" + +typedef enum { + H2_CONF_ENABLED, + H2_CONF_MAX_STREAMS, + H2_CONF_MAX_HL_SIZE, + H2_CONF_WIN_SIZE, + H2_CONF_MIN_WORKERS, + H2_CONF_MAX_WORKERS, + H2_CONF_MAX_WORKER_IDLE_SECS, + H2_CONF_STREAM_MAX_MEM, + H2_CONF_ALT_SVCS, + H2_CONF_ALT_SVC_MAX_AGE, + H2_CONF_SER_HEADERS, + H2_CONF_HACK_MPM_EVENT, + H2_CONF_DIRECT, +} h2_config_var_t; + +/* Apache httpd module configuration for h2. */ +typedef struct h2_config { + const char *name; + int h2_enabled; /* if mod_h2 is active at all here */ + int h2_max_streams; /* max concurrent # streams (http2) */ + int h2_max_hl_size; /* max header list size (http2) */ + int h2_window_size; /* stream window size (http2) */ + int min_workers; /* min # of worker threads/child */ + int max_workers; /* max # of worker threads/child */ + int max_worker_idle_secs; /* max # of idle seconds for worker */ + int stream_max_mem_size; /* max # bytes held in memory/stream */ + apr_array_header_t *alt_svcs; /* h2_alt_svc specs for this server */ + int alt_svc_max_age; /* seconds clients can rely on alt-svc info*/ + int serialize_headers; /* Use serialized HTTP/1.1 headers for + processing, better compatibility */ + int hack_mpm_event; /* If mpm_event is detected, perform a hack + on stream connections to make it work */ + int h2_direct; /* if mod_h2 is active on non-TLS directly */ +} h2_config; + + +void *h2_config_create_dir(apr_pool_t *pool, char *x); +void *h2_config_create_svr(apr_pool_t *pool, server_rec *s); +void *h2_config_merge(apr_pool_t *pool, void *basev, void *addv); + +apr_status_t h2_config_apply_header(h2_config *config, request_rec *r); + +extern const command_rec h2_cmds[]; + +h2_config *h2_config_get(conn_rec *c); +h2_config *h2_config_sget(server_rec *s); +h2_config *h2_config_rget(request_rec *r); + +int h2_config_geti(h2_config *conf, h2_config_var_t var); + +#endif /* __mod_h2__h2_config_h__ */ + diff --git a/modules/http2/mod_h2/h2_conn.c b/modules/http2/mod_h2/h2_conn.c new file mode 100644 index 0000000000..3639d7eef6 --- /dev/null +++ b/modules/http2/mod_h2/h2_conn.c @@ -0,0 +1,543 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_config.h" +#include "h2_ctx.h" +#include "h2_mplx.h" +#include "h2_session.h" +#include "h2_stream.h" +#include "h2_stream_set.h" +#include "h2_task.h" +#include "h2_worker.h" +#include "h2_workers.h" +#include "h2_conn.h" + +static struct h2_workers *workers; + +static apr_status_t h2_session_process(h2_session *session); + +static h2_mpm_type_t mpm_type = H2_MPM_UNKNOWN; +static module *mpm_module; +static module *ssl_module; +static int checked; + +static void check_modules() +{ + if (!checked) { + for (int i = 0; ap_loaded_modules[i]; ++i) { + module *m = ap_loaded_modules[i]; + if (!strcmp("event.c", m->name)) { + mpm_type = H2_MPM_EVENT; + mpm_module = m; + } + else if (!strcmp("worker.c", m->name)) { + mpm_type = H2_MPM_WORKER; + mpm_module = m; + } + else if (!strcmp("prefork.c", m->name)) { + mpm_type = H2_MPM_PREFORK; + mpm_module = m; + } + else if (!strcmp("mod_ssl.c", m->name)) { + ssl_module = m; + } + } + checked = 1; + } +} + +apr_status_t h2_conn_child_init(apr_pool_t *pool, server_rec *s) +{ + h2_config *config = h2_config_sget(s); + apr_status_t status = APR_SUCCESS; + int minw = h2_config_geti(config, H2_CONF_MIN_WORKERS); + int maxw = h2_config_geti(config, H2_CONF_MAX_WORKERS); + + int max_threads_per_child = 0; + ap_mpm_query(AP_MPMQ_MAX_THREADS, &max_threads_per_child); + int threads_limit = 0; + ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &threads_limit); + + if (minw <= 0) { + minw = max_threads_per_child; + } + if (maxw <= 0) { + maxw = threads_limit; + if (maxw < minw) { + maxw = minw; + } + } + + for (int i = 0; ap_loaded_modules[i]; ++i) { + module *m = ap_loaded_modules[i]; + if (!strcmp("event.c", m->name)) { + mpm_type = H2_MPM_EVENT; + mpm_module = m; + } + else if (!strcmp("worker.c", m->name)) { + mpm_type = H2_MPM_WORKER; + mpm_module = m; + } + else if (!strcmp("prefork.c", m->name)) { + mpm_type = H2_MPM_PREFORK; + mpm_module = m; + /* prefork reports 1 thread per child, also as max */ + if (maxw == 1) { + maxw = 8; /* number of cores maybe? */ + } + } + else if (!strcmp("mod_ssl.c", m->name)) { + ssl_module = m; + } + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, + "h2_workers: min=%d max=%d, mthrpchild=%d, thr_limit=%d", + minw, maxw, max_threads_per_child, threads_limit); + + workers = h2_workers_create(s, pool, minw, maxw); + int idle_secs = h2_config_geti(config, H2_CONF_MAX_WORKER_IDLE_SECS); + h2_workers_set_max_idle_secs(workers, idle_secs); + + return status; +} + +h2_mpm_type_t h2_conn_mpm_type(void) { + check_modules(); + return mpm_type; +} + +module *h2_conn_mpm_module(void) { + check_modules(); + return mpm_module; +} + +apr_status_t h2_conn_rprocess(request_rec *r) +{ + h2_config *config = h2_config_rget(r); + + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "h2_conn_process start"); + if (!workers) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "workers not initialized"); + return APR_EGENERAL; + } + + h2_session *session = h2_session_rcreate(r, config, workers); + if (!session) { + return APR_EGENERAL; + } + + return h2_session_process(session); +} + +apr_status_t h2_conn_main(conn_rec *c) +{ + h2_config *config = h2_config_get(c); + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, "h2_conn_main start"); + if (!workers) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, "workers not initialized"); + return APR_EGENERAL; + } + + h2_session *session = h2_session_create(c, config, workers); + if (!session) { + return APR_EGENERAL; + } + + return h2_session_process(session); +} + +apr_status_t h2_session_process(h2_session *session) +{ + apr_status_t status = APR_SUCCESS; + int rv = 0; + + /* Start talking to the client. Apart from protocol meta data, + * we mainly will see new http/2 streams opened by the client, which + * basically are http requests we need to dispatch. + * + * There will be bursts of new streams, to be served concurrently, + * followed by long pauses of no activity. + * + * Since the purpose of http/2 is to allow siumultaneous streams, we + * need to dispatch the handling of each stream into a separate worker + * thread, keeping this thread open for sending responses back as + * soon as they arrive. + * At the same time, we need to continue reading new frames from + * our client, which may be meta (WINDOWS_UPDATEs, PING, SETTINGS) or + * new streams. + * + * As long as we have streams open in this session, we cannot really rest + * since there are two conditions to wait on: 1. new data from the client, + * 2. new data from the open streams to send back. + * + * Only when we have no more streams open, can we do a blocking read + * on our connection. + * + * TODO: implement graceful GO_AWAY after configurable idle time + */ + + ap_update_child_status_from_conn(session->c->sbh, SERVER_BUSY_READ, + session->c); + + if (APLOGctrace2(session->c)) { + ap_filter_t *filter = session->c->input_filters; + while (filter) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c, + "h2_conn(%ld), has connection filter %s", + session->id, filter->frec->name); + filter = filter->next; + } + } + + status = h2_session_start(session, &rv); + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, session->c, + "h2_session(%ld): starting on %s:%d", session->id, + session->c->base_server->defn_name, + session->c->local_addr->port); + if (status != APR_SUCCESS) { + h2_session_abort(session, status, rv); + h2_session_destroy(session); + return status; + } + + apr_interval_time_t wait_micros = 0; + static const int MAX_WAIT_MICROS = 200 * 1000; + + while (!h2_session_is_done(session)) { + int have_written = 0; + int have_read = 0; + + status = h2_session_write(session, wait_micros); + if (status == APR_SUCCESS) { + have_written = 1; + wait_micros = 0; + } + else if (status == APR_EAGAIN) { + /* nop */ + } + else if (status == APR_TIMEUP) { + wait_micros *= 2; + if (wait_micros > MAX_WAIT_MICROS) { + wait_micros = MAX_WAIT_MICROS; + } + } + else { + ap_log_cerror( APLOG_MARK, APLOG_DEBUG, status, session->c, + "h2_session(%ld): writing, terminating", + session->id); + h2_session_abort(session, status, 0); + break; + } + + /* We would like to do blocking reads as often as possible as they + * are more efficient in regard to server resources. + * We can do them under the following circumstances: + * - we have no open streams and therefore have nothing to write + * - we have just started the session and are waiting for the first + * two frames to come in. There will always be at least 2 frames as + * * h2 will send SETTINGS and SETTINGS-ACK + * * h2c will count the header settings as one frame and we + * submit our settings and need the ACK. + */ + int got_streams = !h2_stream_set_is_empty(session->streams); + status = h2_session_read(session, + (!got_streams + || session->frames_received <= 1)? + APR_BLOCK_READ : APR_NONBLOCK_READ); + switch (status) { + case APR_SUCCESS: + /* successful read, reset our idle timers */ + have_read = 1; + wait_micros = 0; + break; + case APR_EAGAIN: + break; + case APR_EBADF: + case APR_EOF: + case APR_ECONNABORTED: + case ECONNRESET: + ap_log_cerror( APLOG_MARK, APLOG_DEBUG, status, session->c, + "h2_session(%ld): reading", + session->id); + h2_session_abort(session, status, 0); + break; + default: + ap_log_cerror( APLOG_MARK, APLOG_WARNING, status, session->c, + "h2_session(%ld): error reading, terminating", + session->id); + h2_session_abort(session, status, 0); + break; + } + + if (!have_read && !have_written) { + /* Nothing to read or write, we may have sessions, but + * the have no data yet ready to be delivered. Slowly + * back off to give others a chance to do their work. + */ + if (wait_micros == 0) { + wait_micros = 10; + } + } + } + + ap_log_cerror( APLOG_MARK, APLOG_DEBUG, status, session->c, + "h2_session(%ld): done", session->id); + + ap_update_child_status_from_conn(session->c->sbh, SERVER_CLOSING, + session->c); + + h2_session_close(session); + h2_session_destroy(session); + + return DONE; +} + + +static void fix_event_conn(conn_rec *c, conn_rec *master); + +conn_rec *h2_conn_create(conn_rec *master, apr_pool_t *pool) +{ + apr_socket_t *socket; + + AP_DEBUG_ASSERT(master); + + /* CAVEAT: it seems necessary to setup the conn_rec in the master + * connection thread. Other attempts crashed. + * HOWEVER: we setup the connection using the pools and other items + * from the master connection, since we do not want to allocate + * lots of resources here. + * Lets allocated pools and everything else when we actually start + * working on this new connection. + */ + /* Not sure about the scoreboard handle. Reusing the one from the main + * connection could make sense, is not really correct, but we cannot + * easily create new handles for our worker threads either. + * TODO + */ + socket = ap_get_module_config(master->conn_config, &core_module); + conn_rec *c = ap_run_create_connection(pool, master->base_server, + socket, + master->id^((long)pool), + master->sbh, + master->bucket_alloc); + if (c == NULL) { + ap_log_perror(APLOG_MARK, APLOG_ERR, APR_ENOMEM, pool, + "h2_task: creating conn"); + return NULL; + } + return c; +} + +apr_status_t h2_conn_prep(h2_task_env *env, conn_rec *master, h2_worker *worker) +{ + h2_config *cfg = h2_config_get(master); + + ap_log_perror(APLOG_MARK, APLOG_TRACE3, 0, env->pool, + "h2_conn(%ld): created from master", master->id); + + /* Ok, we are just about to start processing the connection and + * the worker is calling us to setup all necessary resources. + * We can borrow some from the worker itself and some we do as + * sub-resources from it, so that we get a nice reuse of + * pools. + */ + env->c.pool = env->pool; + env->c.bucket_alloc = h2_worker_get_bucket_alloc(worker); + env->c.current_thread = h2_worker_get_thread(worker); + + env->c.conn_config = ap_create_conn_config(env->pool); + env->c.notes = apr_table_make(env->pool, 5); + + ap_set_module_config(env->c.conn_config, &core_module, + h2_worker_get_socket(worker)); + + if (ssl_module) { + /* See #19, there is a range of SSL variables to be gotten from + * the main connection that should be available in request handlers + */ + void *sslcfg = ap_get_module_config(master->conn_config, ssl_module); + if (sslcfg) { + ap_set_module_config(env->c.conn_config, ssl_module, sslcfg); + } + } + + /* This works for mpm_worker so far. Other mpm modules have + * different needs, unfortunately. The most interesting one + * being mpm_event... + */ + switch (h2_conn_mpm_type()) { + case H2_MPM_WORKER: + /* all fine */ + break; + case H2_MPM_EVENT: + if (h2_config_geti(cfg, H2_CONF_HACK_MPM_EVENT)) { + fix_event_conn(&env->c, master); + } + break; + default: + /* fingers crossed */ + break; + } + + return APR_SUCCESS; +} + +apr_status_t h2_conn_setup(struct h2_task_env *env, struct h2_worker *worker) +{ + return h2_conn_prep(env, env->mplx->c, worker); +} + +apr_status_t h2_conn_init(struct h2_task_env *env, struct h2_worker *worker) +{ + conn_rec *master = env->mplx->c; + h2_config *cfg = h2_config_get(master); + + apr_socket_t *socket = ap_get_module_config(master->conn_config, + &core_module); + conn_rec *c = ap_run_create_connection(env->pool, master->base_server, + socket, + master->id^((long)env->pool), + master->sbh, + master->bucket_alloc); + if (c == NULL) { + ap_log_perror(APLOG_MARK, APLOG_ERR, APR_ENOMEM, env->pool, + "h2_task: creating conn"); + return APR_ENOMEM; + } + + env->c = *c; + env->c.bucket_alloc = h2_worker_get_bucket_alloc(worker); + env->c.current_thread = h2_worker_get_thread(worker); + + ap_set_module_config(env->c.conn_config, &core_module, socket); + if (ssl_module) { + /* See #19, there is a range of SSL variables to be gotten from + * the main connection that should be available in request handlers + */ + void *sslcfg = ap_get_module_config(master->conn_config, ssl_module); + if (sslcfg) { + ap_set_module_config(env->c.conn_config, ssl_module, sslcfg); + } + } + + /* This works for mpm_worker so far. Other mpm modules have + * different needs, unfortunately. The most interesting one + * being mpm_event... + */ + switch (h2_conn_mpm_type()) { + case H2_MPM_WORKER: + /* all fine */ + break; + case H2_MPM_EVENT: + if (h2_config_geti(cfg, H2_CONF_HACK_MPM_EVENT)) { + fix_event_conn(&env->c, master); + } + break; + default: + /* fingers crossed */ + break; + } + + return APR_SUCCESS; +} + +apr_status_t h2_conn_post(conn_rec *c, h2_worker *worker) +{ + (void)worker; + + /* be sure no one messes with this any more */ + memset(c, 0, sizeof(*c)); + return APR_SUCCESS; +} + +apr_status_t h2_conn_process(conn_rec *c, apr_socket_t *socket) +{ + AP_DEBUG_ASSERT(c); + + c->clogging_input_filters = 1; + ap_process_connection(c, socket); + + return APR_SUCCESS; +} + +/* This is an internal mpm event.c struct which is disguised + * as a conn_state_t so that mpm_event can have special connection + * state information without changing the struct seen on the outside. + * + * For our task connections we need to create a new beast of this type + * and fill it with enough meaningful things that mpm_event reads and + * starts processing out task request. + */ +typedef struct event_conn_state_t event_conn_state_t; +struct event_conn_state_t { + /** APR_RING of expiration timeouts */ + APR_RING_ENTRY(event_conn_state_t) timeout_list; + /** the expiration time of the next keepalive timeout */ + apr_time_t expiration_time; + /** connection record this struct refers to */ + conn_rec *c; + /** request record (if any) this struct refers to */ + request_rec *r; + /** is the current conn_rec suspended? (disassociated with + * a particular MPM thread; for suspend_/resume_connection + * hooks) + */ + int suspended; + /** memory pool to allocate from */ + apr_pool_t *p; + /** bucket allocator */ + apr_bucket_alloc_t *bucket_alloc; + /** poll file descriptor information */ + apr_pollfd_t pfd; + /** public parts of the connection state */ + conn_state_t pub; +}; +APR_RING_HEAD(timeout_head_t, event_conn_state_t); + +static void fix_event_conn(conn_rec *c, conn_rec *master) +{ + event_conn_state_t *master_cs = ap_get_module_config(master->conn_config, + h2_conn_mpm_module()); + event_conn_state_t *cs = apr_pcalloc(c->pool, sizeof(event_conn_state_t)); + cs->bucket_alloc = apr_bucket_alloc_create(c->pool); + + ap_set_module_config(c->conn_config, h2_conn_mpm_module(), cs); + + cs->c = c; + cs->r = NULL; + cs->p = master_cs->p; + cs->pfd = master_cs->pfd; + cs->pub = master_cs->pub; + cs->pub.state = CONN_STATE_READ_REQUEST_LINE; + + c->cs = &(cs->pub); +} + diff --git a/modules/http2/mod_h2/h2_conn.h b/modules/http2/mod_h2/h2_conn.h new file mode 100644 index 0000000000..795e1d6a97 --- /dev/null +++ b/modules/http2/mod_h2/h2_conn.h @@ -0,0 +1,70 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_conn__ +#define __mod_h2__h2_conn__ + +struct h2_task; +struct h2_task_env; +struct h2_worker; + +/* Process the connection that is now starting the HTTP/2 + * conversation. Return when the HTTP/2 session is done + * and the connection will close. + */ +apr_status_t h2_conn_main(conn_rec *c); + +/* Process the request that has been upgraded to a HTTP/2 + * conversation. Return when the HTTP/2 session is done + * and the connection will close. + */ +apr_status_t h2_conn_rprocess(request_rec *r); + +/* Initialize this child process for h2 connection work, + * to be called once during child init before multi processing + * starts. + */ +apr_status_t h2_conn_child_init(apr_pool_t *pool, server_rec *s); + + +typedef enum { + H2_MPM_UNKNOWN, + H2_MPM_WORKER, + H2_MPM_EVENT, + H2_MPM_PREFORK, +} h2_mpm_type_t; + +h2_mpm_type_t h2_conn_mpm_type(); +module *h2_conn_mpm_module(); + +/* Returns the type of MPM module detected */ +h2_mpm_type_t h2_conn_mpm_type(void); + +/* Gives the detected module itself or NULL if unknown */ +module *h2_conn_mpm_module(void); + + +conn_rec *h2_conn_create(conn_rec *master, apr_pool_t *stream_pool); + +apr_status_t h2_conn_init(struct h2_task_env *env, struct h2_worker *worker); + +apr_status_t h2_conn_setup(struct h2_task_env *env, struct h2_worker *worker); +apr_status_t h2_conn_prep(struct h2_task_env *env, conn_rec *master, + struct h2_worker *worker); +apr_status_t h2_conn_post(conn_rec *c, struct h2_worker *worker); + +apr_status_t h2_conn_process(conn_rec *c, apr_socket_t *socket); + +#endif /* defined(__mod_h2__h2_conn__) */ diff --git a/modules/http2/mod_h2/h2_conn_io.c b/modules/http2/mod_h2/h2_conn_io.c new file mode 100644 index 0000000000..f29bbe379b --- /dev/null +++ b/modules/http2/mod_h2/h2_conn_io.c @@ -0,0 +1,285 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_conn_io.h" +#include "h2_h2.h" +#include "h2_util.h" + +/* If we write directly to our brigade or use a char buffer to collect + * out data. + */ + +#define H2_CONN_IO_BUF_SIZE (64 * 1024) +#define H2_CONN_IO_SSL_WRITE_SIZE (16 * 1024) + + +apr_status_t h2_conn_io_init(h2_conn_io *io, conn_rec *c) +{ + io->connection = c; + io->input = apr_brigade_create(c->pool, c->bucket_alloc); + io->output = apr_brigade_create(c->pool, c->bucket_alloc); + io->buffer_output = h2_h2_is_tls(c); + io->buflen = 0; + + if (io->buffer_output) { + io->bufsize = H2_CONN_IO_BUF_SIZE; + io->buffer = apr_pcalloc(c->pool, io->bufsize); + } + else { + io->bufsize = 0; + } + + return APR_SUCCESS; +} + +void h2_conn_io_destroy(h2_conn_io *io) +{ + io->input = NULL; + io->output = NULL; +} + +static apr_status_t h2_conn_io_bucket_read(h2_conn_io *io, + apr_read_type_e block, + h2_conn_io_on_read_cb on_read_cb, + void *puser, int *pdone) +{ + apr_status_t status = APR_SUCCESS; + apr_size_t readlen = 0; + *pdone = 0; + + while (status == APR_SUCCESS && !*pdone + && !APR_BRIGADE_EMPTY(io->input)) { + + apr_bucket* bucket = APR_BRIGADE_FIRST(io->input); + if (APR_BUCKET_IS_METADATA(bucket)) { + /* we do nothing regarding any meta here */ + } + else { + const char *bucket_data = NULL; + apr_size_t bucket_length = 0; + status = apr_bucket_read(bucket, &bucket_data, + &bucket_length, block); + + if (status == APR_SUCCESS && bucket_length > 0) { + if (APLOGctrace2(io->connection)) { + char buffer[32]; + h2_util_hex_dump(buffer, sizeof(buffer)/sizeof(buffer[0]), + bucket_data, bucket_length); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, io->connection, + "h2_conn_io(%ld): read %d bytes: %s", + io->connection->id, (int)bucket_length, buffer); + } + + if (bucket_length > 0) { + apr_size_t consumed = 0; + status = on_read_cb(bucket_data, bucket_length, + &consumed, pdone, puser); + if (status == APR_SUCCESS && bucket_length > consumed) { + /* We have data left in the bucket. Split it. */ + status = apr_bucket_split(bucket, consumed); + } + readlen += consumed; + } + } + } + apr_bucket_delete(bucket); + } + if (readlen == 0 && status == APR_SUCCESS && block == APR_NONBLOCK_READ) { + return APR_EAGAIN; + } + return status; +} + +apr_status_t h2_conn_io_read(h2_conn_io *io, + apr_read_type_e block, + h2_conn_io_on_read_cb on_read_cb, + void *puser) +{ + apr_status_t status; + int done = 0; + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, io->connection, + "h2_conn_io: try read, block=%d", block); + + if (!APR_BRIGADE_EMPTY(io->input)) { + /* Seems something is left from a previous read, lets + * satisfy our caller with the data we already have. */ + status = h2_conn_io_bucket_read(io, block, on_read_cb, puser, &done); + if (status != APR_SUCCESS || done) { + return status; + } + apr_brigade_cleanup(io->input); + } + + /* We only do a blocking read when we have no streams to process. So, + * in httpd scoreboard lingo, we are in a KEEPALIVE connection state. + * When reading non-blocking, we do have streams to process and update + * child with NULL request. That way, any current request information + * in the scoreboard is preserved. + */ + if (block == APR_BLOCK_READ) { + ap_update_child_status_from_conn(io->connection->sbh, + SERVER_BUSY_KEEPALIVE, + io->connection); + } + else { + ap_update_child_status(io->connection->sbh, SERVER_BUSY_READ, NULL); + } + + status = ap_get_brigade(io->connection->input_filters, + io->input, AP_MODE_READBYTES, + block, 16 * 4096); + switch (status) { + case APR_SUCCESS: + return h2_conn_io_bucket_read(io, block, on_read_cb, puser, &done); + case APR_EOF: + case APR_EAGAIN: + break; + default: + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, io->connection, + "h2_conn_io: error reading"); + break; + } + return status; +} + +static apr_status_t flush_out(apr_bucket_brigade *bb, void *ctx) +{ + h2_conn_io *io = (h2_conn_io*)ctx; + + ap_update_child_status(io->connection->sbh, SERVER_BUSY_WRITE, NULL); + + apr_status_t status = ap_pass_brigade(io->connection->output_filters, bb); + apr_brigade_cleanup(bb); + return status; +} + +static apr_status_t bucketeer_buffer(h2_conn_io *io) { + const char *data = io->buffer; + apr_size_t remaining = io->buflen; + int bcount = (int)(remaining / H2_CONN_IO_SSL_WRITE_SIZE); + apr_bucket *b; + + for (int i = 0; i < bcount; ++i) { + b = apr_bucket_transient_create(data, H2_CONN_IO_SSL_WRITE_SIZE, + io->output->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(io->output, b); + data += H2_CONN_IO_SSL_WRITE_SIZE; + remaining -= H2_CONN_IO_SSL_WRITE_SIZE; + } + + if (remaining > 0) { + b = apr_bucket_transient_create(data, remaining, + io->output->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(io->output, b); + } + return APR_SUCCESS; +} + +apr_status_t h2_conn_io_write(h2_conn_io *io, + const char *buf, size_t length) +{ + apr_status_t status = APR_SUCCESS; + io->unflushed = 1; + + if (io->buffer_output) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, io->connection, + "h2_conn_io: buffering %ld bytes", (long)length); + while (length > 0 && (status == APR_SUCCESS)) { + apr_size_t avail = io->bufsize - io->buflen; + if (avail <= 0) { + bucketeer_buffer(io); + status = flush_out(io->output, io); + io->buflen = 0; + } + else if (length > avail) { + memcpy(io->buffer + io->buflen, buf, avail); + io->buflen += avail; + length -= avail; + buf += avail; + } + else { + memcpy(io->buffer + io->buflen, buf, length); + io->buflen += length; + length = 0; + break; + } + } + + } + else { + status = apr_brigade_write(io->output, flush_out, io, buf, length); + if (status == APR_SUCCESS + || APR_STATUS_IS_ECONNABORTED(status) + || APR_STATUS_IS_EPIPE(status)) { + /* These are all fine and no reason for concern. Everything else + * is interesting. */ + status = APR_SUCCESS; + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, io->connection, + "h2_conn_io: write error"); + } + } + + return status; +} + + +apr_status_t h2_conn_io_flush(h2_conn_io *io) +{ + if (io->unflushed) { + if (io->buflen > 0) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, io->connection, + "h2_conn_io: flush, flushing %ld bytes", (long)io->buflen); + apr_bucket *b = apr_bucket_transient_create(io->buffer, io->buflen, + io->output->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(io->output, b); + io->buflen = 0; + } + /* Append flush. + */ + APR_BRIGADE_INSERT_TAIL(io->output, + apr_bucket_flush_create(io->output->bucket_alloc)); + + /* Send it out through installed filters (TLS) to the client */ + apr_status_t status = flush_out(io->output, io); + + if (status == APR_SUCCESS + || APR_STATUS_IS_ECONNABORTED(status) + || APR_STATUS_IS_EPIPE(status)) { + /* These are all fine and no reason for concern. Everything else + * is interesting. */ + io->unflushed = 0; + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, io->connection, + "h2_conn_io: flush error"); + } + + return status; + } + return APR_SUCCESS; +} + diff --git a/modules/http2/mod_h2/h2_conn_io.h b/modules/http2/mod_h2/h2_conn_io.h new file mode 100644 index 0000000000..ed2ab4c8f6 --- /dev/null +++ b/modules/http2/mod_h2/h2_conn_io.h @@ -0,0 +1,55 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_conn_io__ +#define __mod_h2__h2_conn_io__ + +/* h2_io is the basic handler of a httpd connection. It keeps two brigades, + * one for input, one for output and works with the installed connection + * filters. + * The read is done via a callback function, so that input can be processed + * directly without copying. + */ +typedef struct { + conn_rec *connection; + apr_bucket_brigade *input; + apr_bucket_brigade *output; + int buffer_output; + + char *buffer; + apr_size_t buflen; + apr_size_t bufsize; + int unflushed; +} h2_conn_io; + +apr_status_t h2_conn_io_init(h2_conn_io *io, conn_rec *c); +void h2_conn_io_destroy(h2_conn_io *io); + +typedef apr_status_t (*h2_conn_io_on_read_cb)(const char *data, apr_size_t len, + apr_size_t *readlen, int *done, + void *puser); + +apr_status_t h2_conn_io_read(h2_conn_io *io, + apr_read_type_e block, + h2_conn_io_on_read_cb on_read_cb, + void *puser); + +apr_status_t h2_conn_io_write(h2_conn_io *io, + const char *buf, + size_t length); + +apr_status_t h2_conn_io_flush(h2_conn_io *io); + +#endif /* defined(__mod_h2__h2_conn_io__) */ diff --git a/modules/http2/mod_h2/h2_ctx.c b/modules/http2/mod_h2/h2_ctx.c new file mode 100644 index 0000000000..f813d533df --- /dev/null +++ b/modules/http2/mod_h2/h2_ctx.c @@ -0,0 +1,100 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include + +#include "h2_private.h" +#include "h2_task.h" +#include "h2_ctx.h" +#include "h2_private.h" + +static h2_ctx *h2_ctx_create(conn_rec *c) +{ + h2_ctx *ctx = apr_pcalloc(c->pool, sizeof(h2_ctx)); + AP_DEBUG_ASSERT(ctx); + ctx->pnego_state = H2_PNEGO_NONE; + ap_set_module_config(c->conn_config, &h2_module, ctx); + return ctx; +} + +h2_ctx *h2_ctx_create_for(conn_rec *c, h2_task_env *env) +{ + h2_ctx *ctx = h2_ctx_create(c); + if (ctx) { + ctx->task_env = env; + } + return ctx; +} + +h2_ctx *h2_ctx_get(conn_rec *c) +{ + h2_ctx *ctx = (h2_ctx*)ap_get_module_config(c->conn_config, &h2_module); + if (ctx == NULL) { + ctx = h2_ctx_create(c); + } + return ctx; +} + +h2_ctx *h2_ctx_rget(request_rec *r) +{ + return h2_ctx_get(r->connection); +} + +const char *h2_ctx_pnego_get(h2_ctx *ctx) +{ + return ctx? ctx->protocol : NULL; +} + +void h2_ctx_pnego_set_started(h2_ctx *ctx) +{ + ctx->pnego_state = H2_PNEGO_STARTED; +} + +h2_ctx *h2_ctx_pnego_set_done(h2_ctx *ctx, const char *proto) +{ + ctx->protocol = proto; + ctx->pnego_state = H2_PNEGO_DONE; + ctx->is_h2 = (proto != NULL); + return ctx; +} + +int h2_ctx_is_task(h2_ctx *ctx) +{ + return ctx && !!ctx->task_env; +} + +int h2_ctx_pnego_is_ongoing(h2_ctx *ctx) +{ + return ctx && (ctx->pnego_state == H2_PNEGO_STARTED); +} + +int h2_ctx_pnego_is_done(h2_ctx *ctx) +{ + return ctx && (ctx->pnego_state == H2_PNEGO_DONE); +} + +int h2_ctx_is_active(h2_ctx *ctx) +{ + return ctx && ctx->is_h2; +} + +struct h2_task_env *h2_ctx_get_task(h2_ctx *ctx) +{ + return ctx->task_env; +} diff --git a/modules/http2/mod_h2/h2_ctx.h b/modules/http2/mod_h2/h2_ctx.h new file mode 100644 index 0000000000..fc10159708 --- /dev/null +++ b/modules/http2/mod_h2/h2_ctx.h @@ -0,0 +1,74 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_ctx__ +#define __mod_h2__h2_ctx__ + +struct h2_task_env; +struct h2_config; + +typedef enum { + H2_PNEGO_NONE, + H2_PNEGO_STARTED, + H2_PNEGO_DONE, +} h2_pnego_state_t; + +/** + * The h2 module context associated with a connection. + * + * It keeps track of the different types of connections: + * - those from clients that use HTTP/2 protocol + * - those from clients that do not use HTTP/2 + * - those created by ourself to perform work on HTTP/2 streams + */ +typedef struct h2_ctx { + int is_h2; /* h2 engine is used */ + h2_pnego_state_t pnego_state; /* protocol negotiation state */ + const char *protocol; /* the protocol negotiated */ + struct h2_task_env *task_env; /* the h2_task environment or NULL */ + const char *hostname; /* hostname negotiated via SNI, optional */ + server_rec *server; /* httpd server config selected. */ + struct h2_config *config; /* effective config in this context */ +} h2_ctx; + +h2_ctx *h2_ctx_get(conn_rec *c); +h2_ctx *h2_ctx_rget(request_rec *r); +h2_ctx *h2_ctx_create_for(conn_rec *c, struct h2_task_env *env); + + +void h2_ctx_pnego_set_started(h2_ctx *ctx); +h2_ctx *h2_ctx_pnego_set_done(h2_ctx *ctx, const char *proto); +/** + * Returns != 0 iff protocol negitiation did happen, not matter + * what the outcome was. + */ +int h2_ctx_pnego_is_done(h2_ctx *ctx); +/** + * Returns != 0 iff protocol negotiation has started but is not + * done yet. + */ +int h2_ctx_pnego_is_ongoing(h2_ctx *ctx); + +/** + * Get the h2 protocol negotiated for this connection, or NULL. + */ +const char *h2_ctx_pnego_get(h2_ctx *ctx); + +int h2_ctx_is_task(h2_ctx *ctx); +int h2_ctx_is_active(h2_ctx *ctx); + +struct h2_task_env *h2_ctx_get_task(h2_ctx *ctx); + +#endif /* defined(__mod_h2__h2_ctx__) */ diff --git a/modules/http2/mod_h2/h2_from_h1.c b/modules/http2/mod_h2/h2_from_h1.c new file mode 100644 index 0000000000..cbfa44de05 --- /dev/null +++ b/modules/http2/mod_h2/h2_from_h1.c @@ -0,0 +1,616 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_response.h" +#include "h2_from_h1.h" +#include "h2_task.h" +#include "h2_task_output.h" +#include "h2_util.h" + + +static void set_state(h2_from_h1 *from_h1, h2_from_h1_state_t state); + +h2_from_h1 *h2_from_h1_create(int stream_id, apr_pool_t *pool) +{ + h2_from_h1 *from_h1 = apr_pcalloc(pool, sizeof(h2_from_h1)); + if (from_h1) { + from_h1->stream_id = stream_id; + from_h1->pool = pool; + from_h1->state = H2_RESP_ST_STATUS_LINE; + from_h1->hlines = apr_array_make(pool, 10, sizeof(char *)); + } + return from_h1; +} + +apr_status_t h2_from_h1_destroy(h2_from_h1 *from_h1) +{ + if (from_h1->response) { + h2_response_destroy(from_h1->response); + from_h1->response = NULL; + } + from_h1->bb = NULL; + return APR_SUCCESS; +} + +h2_from_h1_state_t h2_from_h1_get_state(h2_from_h1 *from_h1) +{ + return from_h1->state; +} + +static void set_state(h2_from_h1 *from_h1, h2_from_h1_state_t state) +{ + if (from_h1->state != state) { + from_h1->state = state; + } +} + +h2_response *h2_from_h1_get_response(h2_from_h1 *from_h1) +{ + return from_h1->response; +} + +static apr_status_t make_h2_headers(h2_from_h1 *from_h1, request_rec *r) +{ + from_h1->response = h2_response_create(from_h1->stream_id, + from_h1->status, from_h1->hlines, + from_h1->pool); + if (from_h1->response == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_EINVAL, r->connection, + "h2_from_h1(%d): unable to create resp_head", + from_h1->stream_id); + return APR_EINVAL; + } + from_h1->content_length = from_h1->response->content_length; + from_h1->chunked = r->chunked; + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, r->connection, + "h2_from_h1(%d): converted headers, content-length: %d" + ", chunked=%d", + from_h1->stream_id, (int)from_h1->content_length, + (int)from_h1->chunked); + + set_state(from_h1, ((from_h1->chunked || from_h1->content_length > 0)? + H2_RESP_ST_BODY : H2_RESP_ST_DONE)); + /* We are ready to be sent to the client */ + return APR_SUCCESS; +} + +static apr_status_t parse_header(h2_from_h1 *from_h1, ap_filter_t* f, + char *line) { + (void)f; + + if (line[0] == ' ' || line[0] == '\t') { + /* continuation line from the header before this */ + while (line[0] == ' ' || line[0] == '\t') { + ++line; + } + + char **plast = apr_array_pop(from_h1->hlines); + if (plast == NULL) { + /* not well formed */ + return APR_EINVAL; + } + APR_ARRAY_PUSH(from_h1->hlines, const char*) = apr_psprintf(from_h1->pool, "%s %s", *plast, line); + } + else { + /* new header line */ + APR_ARRAY_PUSH(from_h1->hlines, const char*) = apr_pstrdup(from_h1->pool, line); + } + return APR_SUCCESS; +} + +static apr_status_t get_line(h2_from_h1 *from_h1, apr_bucket_brigade *bb, + ap_filter_t* f, char *line, apr_size_t len) +{ + if (!from_h1->bb) { + from_h1->bb = apr_brigade_create(from_h1->pool, f->c->bucket_alloc); + } + else { + apr_brigade_cleanup(from_h1->bb); + } + apr_status_t status = apr_brigade_split_line(from_h1->bb, bb, + APR_BLOCK_READ, + HUGE_STRING_LEN); + if (status == APR_SUCCESS) { + --len; + status = apr_brigade_flatten(from_h1->bb, line, &len); + if (status == APR_SUCCESS) { + /* we assume a non-0 containing line and remove + * trailing crlf. */ + line[len] = '\0'; + if (len >= 2 && !strcmp(H2_CRLF, line + len - 2)) { + len -= 2; + line[len] = '\0'; + } + + apr_brigade_cleanup(from_h1->bb); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_from_h1(%d): read line: %s", + from_h1->stream_id, line); + } + } + return status; +} + +apr_status_t h2_from_h1_read_response(h2_from_h1 *from_h1, ap_filter_t* f, + apr_bucket_brigade* bb) +{ + apr_status_t status = APR_SUCCESS; + char line[HUGE_STRING_LEN]; + + if ((from_h1->state == H2_RESP_ST_BODY) + || (from_h1->state == H2_RESP_ST_DONE)) { + if (from_h1->chunked) { + /* The httpd core HTTP_HEADER filter has or will install the + * "CHUNK" output transcode filter, which appears further down + * the filter chain. We do not want it for HTTP/2. + * Once we successfully deinstalled it, this filter has no + * further function and we remove it. + */ + status = ap_remove_output_filter_byhandle(f->r->output_filters, + "CHUNK"); + if (status == APR_SUCCESS) { + ap_remove_output_filter(f); + } + } + + return ap_pass_brigade(f->next, bb); + } + + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_from_h1(%d): read_response", from_h1->stream_id); + + while (!APR_BRIGADE_EMPTY(bb) && status == APR_SUCCESS) { + + switch (from_h1->state) { + + case H2_RESP_ST_STATUS_LINE: + case H2_RESP_ST_HEADERS: + status = get_line(from_h1, bb, f, line, sizeof(line)); + if (status != APR_SUCCESS) { + return status; + } + if (from_h1->state == H2_RESP_ST_STATUS_LINE) { + /* instead of parsing, just take it directly */ + from_h1->status = apr_psprintf(from_h1->pool, + "%d", f->r->status); + from_h1->state = H2_RESP_ST_HEADERS; + } + else if (line[0] == '\0') { + /* end of headers, create the h2_response and + * pass the rest of the brigade down the filter + * chain. + */ + status = make_h2_headers(from_h1, f->r); + if (from_h1->bb) { + apr_brigade_destroy(from_h1->bb); + from_h1->bb = NULL; + } + if (!APR_BRIGADE_EMPTY(bb)) { + return ap_pass_brigade(f->next, bb); + } + } + else { + status = parse_header(from_h1, f, line); + } + break; + + default: + return ap_pass_brigade(f->next, bb); + } + + } + + return status; +} + +/* This routine is called by apr_table_do and merges all instances of + * the passed field values into a single array that will be further + * processed by some later routine. Originally intended to help split + * and recombine multiple Vary fields, though it is generic to any field + * consisting of comma/space-separated tokens. + */ +static int uniq_field_values(void *d, const char *key, const char *val) +{ + apr_array_header_t *values; + char *start; + char *e; + char **strpp; + int i; + + (void)key; + values = (apr_array_header_t *)d; + + e = apr_pstrdup(values->pool, val); + + do { + /* Find a non-empty fieldname */ + + while (*e == ',' || apr_isspace(*e)) { + ++e; + } + if (*e == '\0') { + break; + } + start = e; + while (*e != '\0' && *e != ',' && !apr_isspace(*e)) { + ++e; + } + if (*e != '\0') { + *e++ = '\0'; + } + + /* Now add it to values if it isn't already represented. + * Could be replaced by a ap_array_strcasecmp() if we had one. + */ + for (i = 0, strpp = (char **) values->elts; i < values->nelts; + ++i, ++strpp) { + if (*strpp && strcasecmp(*strpp, start) == 0) { + break; + } + } + if (i == values->nelts) { /* if not found */ + *(char **)apr_array_push(values) = start; + } + } while (*e != '\0'); + + return 1; +} + +/* + * Since some clients choke violently on multiple Vary fields, or + * Vary fields with duplicate tokens, combine any multiples and remove + * any duplicates. + */ +static void fix_vary(request_rec *r) +{ + apr_array_header_t *varies; + + varies = apr_array_make(r->pool, 5, sizeof(char *)); + + /* Extract all Vary fields from the headers_out, separate each into + * its comma-separated fieldname values, and then add them to varies + * if not already present in the array. + */ + apr_table_do((int (*)(void *, const char *, const char *))uniq_field_values, + (void *) varies, r->headers_out, "Vary", NULL); + + /* If we found any, replace old Vary fields with unique-ified value */ + + if (varies->nelts > 0) { + apr_table_setn(r->headers_out, "Vary", + apr_array_pstrcat(r->pool, varies, ',')); + } +} + +/* Confirm that the status line is well-formed and matches r->status. + * If they don't match, a filter may have negated the status line set by a + * handler. + * Zap r->status_line if bad. + */ +static apr_status_t validate_status_line(request_rec *r) +{ + char *end; + + if (r->status_line) { + apr_size_t len = strlen(r->status_line); + if (len < 3 + || apr_strtoi64(r->status_line, &end, 10) != r->status + || (end - 3) != r->status_line + || (len >= 4 && ! apr_isspace(r->status_line[3]))) { + r->status_line = NULL; + return APR_EGENERAL; + } + /* Since we passed the above check, we know that length three + * is equivalent to only a 3 digit numeric http status. + * RFC2616 mandates a trailing space, let's add it. + */ + if (len == 3) { + r->status_line = apr_pstrcat(r->pool, r->status_line, " ", NULL); + return APR_EGENERAL; + } + return APR_SUCCESS; + } + return APR_EGENERAL; +} + +static void set_basic_http_header(request_rec *r, apr_table_t *headers) +{ + char *date = NULL; + const char *proxy_date = NULL; + const char *server = NULL; + const char *us = ap_get_server_banner(); + + /* + * keep the set-by-proxy server and date headers, otherwise + * generate a new server header / date header + */ + if (r->proxyreq != PROXYREQ_NONE) { + proxy_date = apr_table_get(r->headers_out, "Date"); + if (!proxy_date) { + /* + * proxy_date needs to be const. So use date for the creation of + * our own Date header and pass it over to proxy_date later to + * avoid a compiler warning. + */ + date = apr_palloc(r->pool, APR_RFC822_DATE_LEN); + ap_recent_rfc822_date(date, r->request_time); + } + server = apr_table_get(r->headers_out, "Server"); + } + else { + date = apr_palloc(r->pool, APR_RFC822_DATE_LEN); + ap_recent_rfc822_date(date, r->request_time); + } + + apr_table_setn(headers, "Date", proxy_date ? proxy_date : date ); + apr_table_unset(r->headers_out, "Date"); + + if (!server && *us) { + server = us; + } + if (server) { + apr_table_setn(headers, "Server", server); + apr_table_unset(r->headers_out, "Server"); + } +} + +static int copy_header(void *ctx, const char *name, const char *value) +{ + apr_table_t *headers = ctx; + + apr_table_addn(headers, name, value); + return 1; +} + +static h2_response *create_response(h2_from_h1 *from_h1, request_rec *r) +{ + apr_status_t status = APR_SUCCESS; + const char *clheader; + const char *ctype; + /* + * Now that we are ready to send a response, we need to combine the two + * header field tables into a single table. If we don't do this, our + * later attempts to set or unset a given fieldname might be bypassed. + */ + if (!apr_is_empty_table(r->err_headers_out)) { + r->headers_out = apr_table_overlay(r->pool, r->err_headers_out, + r->headers_out); + } + + /* + * Remove the 'Vary' header field if the client can't handle it. + * Since this will have nasty effects on HTTP/1.1 caches, force + * the response into HTTP/1.0 mode. + */ + if (apr_table_get(r->subprocess_env, "force-no-vary") != NULL) { + apr_table_unset(r->headers_out, "Vary"); + r->proto_num = HTTP_VERSION(1,0); + apr_table_setn(r->subprocess_env, "force-response-1.0", "1"); + } + else { + fix_vary(r); + } + + /* + * Now remove any ETag response header field if earlier processing + * says so (such as a 'FileETag None' directive). + */ + if (apr_table_get(r->notes, "no-etag") != NULL) { + apr_table_unset(r->headers_out, "ETag"); + } + + /* determine the protocol and whether we should use keepalives. */ + status = validate_status_line(r); + if (!r->status_line) { + r->status_line = ap_get_status_line(r->status); + } + else if (status != APR_SUCCESS) { + /* Status line is OK but our own reason phrase + * would be preferred if defined + */ + const char *tmp = ap_get_status_line(r->status); + if (!strncmp(tmp, r->status_line, 3)) { + r->status_line = tmp; + } + } + + if (r->chunked) { + apr_table_unset(r->headers_out, "Content-Length"); + } + + ctype = ap_make_content_type(r, r->content_type); + if (ctype) { + apr_table_setn(r->headers_out, "Content-Type", ctype); + } + + if (r->content_encoding) { + apr_table_setn(r->headers_out, "Content-Encoding", + r->content_encoding); + } + + if (!apr_is_empty_array(r->content_languages)) { + int i; + char *token; + char **languages = (char **)(r->content_languages->elts); + const char *field = apr_table_get(r->headers_out, "Content-Language"); + + while (field && (token = ap_get_list_item(r->pool, &field)) != NULL) { + for (i = 0; i < r->content_languages->nelts; ++i) { + if (!strcasecmp(token, languages[i])) + break; + } + if (i == r->content_languages->nelts) { + *((char **) apr_array_push(r->content_languages)) = token; + } + } + + field = apr_array_pstrcat(r->pool, r->content_languages, ','); + apr_table_setn(r->headers_out, "Content-Language", field); + } + + /* + * Control cachability for non-cachable responses if not already set by + * some other part of the server configuration. + */ + if (r->no_cache && !apr_table_get(r->headers_out, "Expires")) { + char *date = apr_palloc(r->pool, APR_RFC822_DATE_LEN); + ap_recent_rfc822_date(date, r->request_time); + apr_table_addn(r->headers_out, "Expires", date); + } + + /* This is a hack, but I can't find anyway around it. The idea is that + * we don't want to send out 0 Content-Lengths if it is a head request. + * This happens when modules try to outsmart the server, and return + * if they see a HEAD request. Apache 1.3 handlers were supposed to + * just return in that situation, and the core handled the HEAD. In + * 2.0, if a handler returns, then the core sends an EOS bucket down + * the filter stack, and the content-length filter computes a C-L of + * zero and that gets put in the headers, and we end up sending a + * zero C-L to the client. We can't just remove the C-L filter, + * because well behaved 2.0 handlers will send their data down the stack, + * and we will compute a real C-L for the head request. RBB + */ + if (r->header_only + && (clheader = apr_table_get(r->headers_out, "Content-Length")) + && !strcmp(clheader, "0")) { + apr_table_unset(r->headers_out, "Content-Length"); + } + + apr_table_t *headers = apr_table_make(r->pool, 10); + + set_basic_http_header(r, headers); + if (r->status == HTTP_NOT_MODIFIED) { + apr_table_do((int (*)(void *, const char *, const char *)) copy_header, + (void *) headers, r->headers_out, + "ETag", + "Content-Location", + "Expires", + "Cache-Control", + "Vary", + "Warning", + "WWW-Authenticate", + "Proxy-Authenticate", + "Set-Cookie", + "Set-Cookie2", + NULL); + } + else { + apr_table_do((int (*)(void *, const char *, const char *)) copy_header, + (void *) headers, r->headers_out, NULL); + } + + return h2_response_rcreate(from_h1->stream_id, r, headers, r->pool); +} + +apr_status_t h2_response_output_filter(ap_filter_t *f, apr_bucket_brigade *bb) +{ + h2_task_env *env = f->ctx; + h2_from_h1 *from_h1 = env->output? env->output->from_h1 : NULL; + request_rec *r = f->r; + apr_bucket *b; + ap_bucket_error *eb = NULL; + + AP_DEBUG_ASSERT(from_h1 != NULL); + + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_from_h1(%d): output_filter called", from_h1->stream_id); + + if (r->header_only && env->output && from_h1->response) { + /* throw away any data after we have compiled the response */ + apr_brigade_cleanup(bb); + return OK; + } + + for (b = APR_BRIGADE_FIRST(bb); + b != APR_BRIGADE_SENTINEL(bb); + b = APR_BUCKET_NEXT(b)) + { + if (AP_BUCKET_IS_ERROR(b) && !eb) { + eb = b->data; + continue; + } + /* + * If we see an EOC bucket it is a signal that we should get out + * of the way doing nothing. + */ + if (AP_BUCKET_IS_EOC(b)) { + ap_remove_output_filter(f); + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, f->c, + "h2_from_h1(%d): eoc bucket passed", + from_h1->stream_id); + return ap_pass_brigade(f->next, bb); + } + } + + if (eb) { + int st = eb->status; + apr_brigade_cleanup(bb); + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, f->c, + "h2_from_h1(%d): err bucket status=%d", + from_h1->stream_id, st); + ap_die(st, r); + return AP_FILTER_ERROR; + } + + from_h1->response = create_response(from_h1, r); + if (from_h1->response == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, f->c, + "h2_from_h1(%d): unable to create response", + from_h1->stream_id); + return APR_ENOMEM; + } + + if (r->header_only) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_from_h1(%d): header_only, cleanup output brigade", + from_h1->stream_id); + apr_brigade_cleanup(bb); + return OK; + } + + r->sent_bodyct = 1; /* Whatever follows is real body stuff... */ + + ap_remove_output_filter(f); + if (APLOGctrace1(f->c)) { + apr_off_t len = 0; + apr_brigade_length(bb, 0, &len); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_from_h1(%d): removed header filter, passing brigade " + "len=%ld", from_h1->stream_id, (long)len); + } + return ap_pass_brigade(f->next, bb); +} + +void h2_from_h1_die(h2_from_h1 *from_h1, int status, request_rec *r) +{ + r->status = status; + from_h1->response = create_response(from_h1, r); +} diff --git a/modules/http2/mod_h2/h2_from_h1.h b/modules/http2/mod_h2/h2_from_h1.h new file mode 100644 index 0000000000..a8446fbc76 --- /dev/null +++ b/modules/http2/mod_h2/h2_from_h1.h @@ -0,0 +1,84 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_from_h1__ +#define __mod_h2__h2_from_h1__ + +/** + * h2_from_h1 parses a HTTP/1.1 response into + * - response status + * - a list of header values + * - a series of bytes that represent the response body alone, without + * any meta data, such as inserted by chunked transfer encoding. + * + * All data is allocated from the stream memory pool. + * + * Again, see comments in h2_request: ideally we would take the headers + * and status from the httpd structures instead of parsing them here, but + * we need to have all handlers and filters involved in request/response + * processing, so this seems to be the way for now. + */ + +typedef enum { + H2_RESP_ST_STATUS_LINE, /* parsing http/1 status line */ + H2_RESP_ST_HEADERS, /* parsing http/1 response headers */ + H2_RESP_ST_BODY, /* transferring response body */ + H2_RESP_ST_DONE /* complete response converted */ +} h2_from_h1_state_t; + +struct h2_response; + +typedef struct h2_from_h1 h2_from_h1; + +struct h2_from_h1 { + int stream_id; + h2_from_h1_state_t state; + apr_pool_t *pool; + apr_bucket_brigade *bb; + + apr_size_t content_length; + int chunked; + + const char *status; + apr_array_header_t *hlines; + + struct h2_response *response; +}; + + +typedef void h2_from_h1_state_change_cb(struct h2_from_h1 *resp, + h2_from_h1_state_t prevstate, + void *cb_ctx); + +h2_from_h1 *h2_from_h1_create(int stream_id, apr_pool_t *pool); + +apr_status_t h2_from_h1_destroy(h2_from_h1 *response); + +void h2_from_h1_set_state_change_cb(h2_from_h1 *from_h1, + h2_from_h1_state_change_cb *callback, + void *cb_ctx); + +apr_status_t h2_from_h1_read_response(h2_from_h1 *from_h1, + ap_filter_t* f, apr_bucket_brigade* bb); + +struct h2_response *h2_from_h1_get_response(h2_from_h1 *from_h1); + +void h2_from_h1_die(h2_from_h1 *from_h1, int status, request_rec *r); + +h2_from_h1_state_t h2_from_h1_get_state(h2_from_h1 *from_h1); + +apr_status_t h2_response_output_filter(ap_filter_t *f, apr_bucket_brigade *bb); + +#endif /* defined(__mod_h2__h2_from_h1__) */ diff --git a/modules/http2/mod_h2/h2_h2.c b/modules/http2/mod_h2/h2_h2.c new file mode 100644 index 0000000000..ba3460a1ea --- /dev/null +++ b/modules/http2/mod_h2/h2_h2.c @@ -0,0 +1,222 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "h2_private.h" + +#include "h2_stream.h" +#include "h2_task.h" +#include "h2_config.h" +#include "h2_ctx.h" +#include "h2_conn.h" +#include "h2_alpn.h" +#include "h2_h2.h" + +const char *h2_alpn_protos[] = { + "h2", "h2-16", "h2-14" +}; +apr_size_t h2_alpn_protos_len = (sizeof(h2_alpn_protos) + / sizeof(h2_alpn_protos[0])); + +const char *h2_upgrade_protos[] = { + "h2c", "h2c-16", "h2c-14", +}; +apr_size_t h2_upgrade_protos_len = (sizeof(h2_upgrade_protos) + / sizeof(h2_upgrade_protos[0])); + +const char *H2_MAGIC_TOKEN = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"; + +/******************************************************************************* + * The optional mod_ssl functions we need. + */ +APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec*)); +APR_DECLARE_OPTIONAL_FN(int, ssl_is_https, (conn_rec*)); + +static int (*opt_ssl_engine_disable)(conn_rec*); +static int (*opt_ssl_is_https)(conn_rec*); +/******************************************************************************* + * Hooks for processing incoming connections: + * - pre_conn_before_tls switches SSL off for stream connections + * - process_conn take over connection in case of h2 + */ +static int h2_h2_process_conn(conn_rec* c); +static int h2_h2_remove_timeout(conn_rec* c); +static int h2_h2_post_read_req(request_rec *r); + + +/******************************************************************************* + * Once per lifetime init, retrieve optional functions + */ +apr_status_t h2_h2_init(apr_pool_t *pool, server_rec *s) +{ + (void)pool; + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "h2_h2, child_init"); + opt_ssl_engine_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable); + opt_ssl_is_https = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https); + + if (!opt_ssl_is_https) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, + "mod_ssl does not seem to be enabled"); + } + + return APR_SUCCESS; +} + +int h2_h2_is_tls(conn_rec *c) +{ + return opt_ssl_is_https && opt_ssl_is_https(c); +} + +int h2_tls_disable(conn_rec *c) +{ + if (opt_ssl_engine_disable) { + return opt_ssl_engine_disable(c); + } + return 0; +} + +/******************************************************************************* + * Register various hooks + */ +static const char *const mod_reqtimeout[] = { "reqtimeout.c", NULL}; + +void h2_h2_register_hooks(void) +{ + /* When the connection processing actually starts, we might to + * take over, if h2* was selected by ALPN on a TLS connection. + */ + ap_hook_process_connection(h2_h2_process_conn, + NULL, NULL, APR_HOOK_FIRST); + /* Perform connection cleanup before the actual processing happens. + */ + ap_hook_process_connection(h2_h2_remove_timeout, + mod_reqtimeout, NULL, APR_HOOK_LAST); + + ap_hook_post_read_request(h2_h2_post_read_req, NULL, NULL, APR_HOOK_MIDDLE); +} + +int h2_h2_remove_timeout(conn_rec* c) +{ + h2_ctx *ctx = h2_ctx_get(c); + + if (h2_ctx_is_task(ctx)) { + /* cleanup on task connections */ + /* we once removed the reqtimeout filter on task connections, + * but timeouts here might have been a side effect of other things. + * Ideally mod_reqtimeout would do its work on task connections + * as it basically is a HTTP/1.1 request/response and it's made + * for that. + * So, let the filter stay for now and see if we ever encounter + * unexpected timeouts on tasks again. + */ + //ap_remove_input_filter_byhandle(c->input_filters, "reqtimeout"); + } + else if (h2_ctx_is_active(ctx)) { + /* cleanup on master h2 connections */ + ap_remove_input_filter_byhandle(c->input_filters, "reqtimeout"); + } + + return DECLINED; +} + +int h2_h2_process_conn(conn_rec* c) +{ + h2_ctx *ctx = h2_ctx_get(c); + h2_config *cfg = h2_config_get(c); + apr_bucket_brigade* temp; + + if (h2_ctx_is_task(ctx)) { + /* out stream pseudo connection */ + return DECLINED; + } + + /* Protocol negoation, if started, may need some speculative reading + * to get triggered. + */ + if (h2_ctx_pnego_is_ongoing(ctx)) { + temp = apr_brigade_create(c->pool, c->bucket_alloc); + ap_get_brigade(c->input_filters, temp, + AP_MODE_SPECULATIVE, APR_BLOCK_READ, 1); + apr_brigade_destroy(temp); + } + + /* If we still do not know the protocol and H2Direct is enabled, check + * if we receive the magic PRIamble. A client sending this on connection + * start should know what it is doing. + */ + if (!h2_ctx_pnego_is_done(ctx) && h2_config_geti(cfg, H2_CONF_DIRECT)) { + apr_status_t status; + temp = apr_brigade_create(c->pool, c->bucket_alloc); + status = ap_get_brigade(c->input_filters, temp, + AP_MODE_SPECULATIVE, APR_BLOCK_READ, 24); + if (status == APR_SUCCESS) { + char *s = NULL; + apr_size_t slen; + + apr_brigade_pflatten(temp, &s, &slen, c->pool); + if ((slen == 24) && !memcmp(H2_MAGIC_TOKEN, s, 24)) { + h2_ctx_pnego_set_done(ctx, "h2"); + } + } + apr_brigade_destroy(temp); + } + + /* If "h2" was selected as protocol (by whatever mechanism), take over + * the connection. + */ + if (h2_ctx_is_active(ctx)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "h2_h2, connection, h2 active"); + + return h2_conn_main(c); + } + + return DECLINED; +} + +static int h2_h2_post_read_req(request_rec *r) +{ + h2_ctx *ctx = h2_ctx_rget(r); + struct h2_task_env *env = h2_ctx_get_task(ctx); + if (env) { + /* h2_task connection for a stream, not for h2c */ + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + "adding h1_to_h2_resp output filter"); + if (env->serialize_headers) { + ap_add_output_filter("H1_TO_H2_RESP", env, r, r->connection); + } + else { + /* replace the core http filter that formats response headers + * in HTTP/1 with our own that collects status and headers */ + ap_remove_output_filter_byhandle(r->output_filters, "HTTP_HEADER"); + ap_add_output_filter("H2_RESPONSE", env, r, r->connection); + } + } + return DECLINED; +} + + diff --git a/modules/http2/mod_h2/h2_h2.h b/modules/http2/mod_h2/h2_h2.h new file mode 100644 index 0000000000..2640a8caf9 --- /dev/null +++ b/modules/http2/mod_h2/h2_h2.h @@ -0,0 +1,59 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_h2__ +#define __mod_h2__h2_h2__ + +/** + * List of ALPN protocol identifiers that we support in ALPN/NPN + * negotiations. + */ +extern const char *h2_alpn_protos[]; +extern apr_size_t h2_alpn_protos_len; + +/** + * List of ALPN protocol identifiers that we suport in HTTP/1 Upgrade: + * negotiations. + */ +extern const char *h2_upgrade_protos[]; +extern apr_size_t h2_upgrade_protos_len; + +/** + * The magic PRIamble of RFC 7540 that is always sent when starting + * a h2 communication. + */ +extern const char *H2_MAGIC_TOKEN; + +/* + * One time, post config intialization. + */ +apr_status_t h2_h2_init(apr_pool_t *pool, server_rec *s); + +/* Is the connection a TLS connection? + */ +int h2_h2_is_tls(conn_rec *c); + +/* Disable SSL for this connection, can only be invoked in a pre- + * connection hook before mod_ssl. + * @return != 0 iff disable worked + */ +int h2_tls_disable(conn_rec *c); + +/* Register apache hooks for h2 protocol + */ +void h2_h2_register_hooks(void); + + +#endif /* defined(__mod_h2__h2_h2__) */ diff --git a/modules/http2/mod_h2/h2_io.c b/modules/http2/mod_h2/h2_io.c new file mode 100644 index 0000000000..b44e384ee5 --- /dev/null +++ b/modules/http2/mod_h2/h2_io.c @@ -0,0 +1,157 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_io.h" +#include "h2_response.h" +#include "h2_util.h" + +h2_io *h2_io_create(int id, apr_pool_t *pool, apr_bucket_alloc_t *bucket_alloc) +{ + h2_io *io = apr_pcalloc(pool, sizeof(*io)); + if (io) { + io->id = id; + io->bbin = NULL; + io->bbout = apr_brigade_create(pool, bucket_alloc); + io->response = apr_pcalloc(pool, sizeof(h2_response)); + } + return io; +} + +static void h2_io_cleanup(h2_io *io) +{ + if (io->response) { + h2_response_cleanup(io->response); + } +} + +void h2_io_destroy(h2_io *io) +{ + h2_io_cleanup(io); +} + +int h2_io_in_has_eos_for(h2_io *io) +{ + return io->eos_in || (io->bbin && h2_util_has_eos(io->bbin, 0)); +} + +int h2_io_out_has_data(h2_io *io) +{ + return h2_util_bb_has_data_or_eos(io->bbout); +} + +apr_size_t h2_io_out_length(h2_io *io) +{ + if (io->bbout) { + apr_off_t len = 0; + apr_brigade_length(io->bbout, 0, &len); + return (len > 0)? len : 0; + } + return 0; +} + +apr_status_t h2_io_in_read(h2_io *io, apr_bucket_brigade *bb, + apr_size_t maxlen) +{ + apr_off_t start_len = 0; + + if (!io->bbin || APR_BRIGADE_EMPTY(io->bbin)) { + return io->eos_in? APR_EOF : APR_EAGAIN; + } + + apr_brigade_length(bb, 1, &start_len); + apr_bucket *last = APR_BRIGADE_LAST(bb); + apr_status_t status = h2_util_move(bb, io->bbin, maxlen, 0, + NULL, "h2_io_in_read"); + if (status == APR_SUCCESS) { + apr_bucket *nlast = APR_BRIGADE_LAST(bb); + apr_off_t end_len = 0; + apr_brigade_length(bb, 1, &end_len); + if (last == nlast) { + return APR_EAGAIN; + } + io->input_consumed += (end_len - start_len); + } + return status; +} + +apr_status_t h2_io_in_write(h2_io *io, apr_bucket_brigade *bb) +{ + if (io->eos_in) { + return APR_EOF; + } + io->eos_in = h2_util_has_eos(bb, 0); + if (!APR_BRIGADE_EMPTY(bb)) { + if (!io->bbin) { + io->bbin = apr_brigade_create(io->bbout->p, + io->bbout->bucket_alloc); + } + return h2_util_move(io->bbin, bb, 0, 0, NULL, "h2_io_in_write"); + } + return APR_SUCCESS; +} + +apr_status_t h2_io_in_close(h2_io *io) +{ + if (io->bbin) { + APR_BRIGADE_INSERT_TAIL(io->bbin, + apr_bucket_eos_create(io->bbin->bucket_alloc)); + } + io->eos_in = 1; + return APR_SUCCESS; +} + +apr_status_t h2_io_out_read(h2_io *io, char *buffer, + apr_size_t *plen, int *peos) +{ + if (buffer == NULL) { + /* just checking length available */ + return h2_util_bb_avail(io->bbout, plen, peos); + } + + return h2_util_bb_read(io->bbout, buffer, plen, peos); +} + +apr_status_t h2_io_out_readx(h2_io *io, + h2_io_data_cb *cb, void *ctx, + apr_size_t *plen, int *peos) +{ + if (cb == NULL) { + /* just checking length available */ + return h2_util_bb_avail(io->bbout, plen, peos); + } + return h2_util_bb_readx(io->bbout, cb, ctx, plen, peos); +} + +apr_status_t h2_io_out_write(h2_io *io, apr_bucket_brigade *bb, + apr_size_t maxlen) +{ + return h2_util_move(io->bbout, bb, maxlen, 0, NULL, "h2_io_out_write"); +} + + +apr_status_t h2_io_out_close(h2_io *io) +{ + APR_BRIGADE_INSERT_TAIL(io->bbout, + apr_bucket_eos_create(io->bbout->bucket_alloc)); + return APR_SUCCESS; +} diff --git a/modules/http2/mod_h2/h2_io.h b/modules/http2/mod_h2/h2_io.h new file mode 100644 index 0000000000..119cd8a2b6 --- /dev/null +++ b/modules/http2/mod_h2/h2_io.h @@ -0,0 +1,127 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_io__ +#define __mod_h2__h2_io__ + +struct h2_response; +struct apr_thread_cond_t; +struct h2_task; + + +typedef apr_status_t h2_io_data_cb(void *ctx, + const char *data, apr_size_t len); + + +typedef struct h2_io h2_io; + +struct h2_io { + int id; /* stream identifier */ + apr_bucket_brigade *bbin; /* input data for stream */ + int eos_in; + int task_done; + + apr_size_t input_consumed; /* how many bytes have been read */ + struct apr_thread_cond_t *input_arrived; /* block on reading */ + + apr_bucket_brigade *bbout; /* output data from stream */ + struct apr_thread_cond_t *output_drained; /* block on writing */ + + struct h2_response *response;/* submittable response created */ +}; + +/******************************************************************************* + * Object lifecycle and information. + ******************************************************************************/ + +/** + * Creates a new h2_io for the given stream id. + */ +h2_io *h2_io_create(int id, apr_pool_t *pool, apr_bucket_alloc_t *bucket_alloc); + +/** + * Frees any resources hold by the h2_io instance. + */ +void h2_io_destroy(h2_io *io); + +/** + * The input data is completely queued. Blocked reads will return immediately + * and give either data or EOF. + */ +int h2_io_in_has_eos_for(h2_io *io); +/** + * Output data is available. + */ +int h2_io_out_has_data(h2_io *io); + +/******************************************************************************* + * Input handling of streams. + ******************************************************************************/ +/** + * Reads the next bucket from the input. Returns APR_EAGAIN if none + * is currently available, APR_EOF if end of input has been reached. + */ +apr_status_t h2_io_in_read(h2_io *io, apr_bucket_brigade *bb, + apr_size_t maxlen); + +/** + * Appends given bucket to the input. + */ +apr_status_t h2_io_in_write(h2_io *io, apr_bucket_brigade *bb); + +/** + * Closes the input. After existing data has been read, APR_EOF will + * be returned. + */ +apr_status_t h2_io_in_close(h2_io *io); + +/******************************************************************************* + * Output handling of streams. + ******************************************************************************/ + +/** + * Read a bucket from the output head. Return APR_EAGAIN if non is available, + * APR_EOF if none available and output has been closed. + * May be called with buffer == NULL in order to find out how much data + * is available. + * @param io the h2_io to read output from + * @param buffer the buffer to copy the data to, may be NULL + * @param plen the requested max len, set to amount of data on return + * @param peos != 0 iff the end of stream has been reached + */ +apr_status_t h2_io_out_read(h2_io *io, char *buffer, + apr_size_t *plen, int *peos); + +apr_status_t h2_io_out_readx(h2_io *io, + h2_io_data_cb *cb, void *ctx, + apr_size_t *plen, int *peos); + +apr_status_t h2_io_out_write(h2_io *io, apr_bucket_brigade *bb, + apr_size_t maxlen); + +/** + * Closes the input. After existing data has been read, APR_EOF will + * be returned. + */ +apr_status_t h2_io_out_close(h2_io *io); + +/** + * Gives the overall length of the data that is currently queued for + * output. + */ +apr_size_t h2_io_out_length(h2_io *io); + + +#endif /* defined(__mod_h2__h2_io__) */ diff --git a/modules/http2/mod_h2/h2_io_set.c b/modules/http2/mod_h2/h2_io_set.c new file mode 100644 index 0000000000..d87574caa3 --- /dev/null +++ b/modules/http2/mod_h2/h2_io_set.c @@ -0,0 +1,169 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_io.h" +#include "h2_io_set.h" + +#define h2_io_IDX(list, i) ((h2_io**)(list)->elts)[i] + +struct h2_io_set { + apr_array_header_t *list; +}; + +h2_io_set *h2_io_set_create(apr_pool_t *pool) +{ + h2_io_set *sp = apr_pcalloc(pool, sizeof(h2_io_set)); + if (sp) { + sp->list = apr_array_make(pool, 100, sizeof(h2_io*)); + if (!sp->list) { + return NULL; + } + } + return sp; +} + +void h2_io_set_destroy(h2_io_set *sp) +{ + for (int i = 0; i < sp->list->nelts; ++i) { + h2_io *io = h2_io_IDX(sp->list, i); + h2_io_destroy(io); + } + sp->list->nelts = 0; +} + +static int h2_stream_id_cmp(const void *s1, const void *s2) +{ + h2_io **pio1 = (h2_io **)s1; + h2_io **pio2 = (h2_io **)s2; + return (*pio1)->id - (*pio2)->id; +} + +h2_io *h2_io_set_get(h2_io_set *sp, int stream_id) +{ + /* we keep the array sorted by id, so lookup can be done + * by bsearch. + */ + h2_io key = { stream_id, NULL, 0, 0, 0, NULL, NULL, NULL, NULL }; + h2_io *pkey = &key; + h2_io **ps = bsearch(&pkey, sp->list->elts, sp->list->nelts, + sp->list->elt_size, h2_stream_id_cmp); + return ps? *ps : NULL; +} + +h2_io *h2_io_set_get_highest_prio(h2_io_set *set) +{ + h2_io *highest = NULL; + for (int i = 0; i < set->list->nelts; ++i) { + h2_io *io = h2_io_IDX(set->list, i); + if (!highest /*|| io-prio even higher */ ) { + highest = io; + } + } + return highest; +} + +static void h2_io_set_sort(h2_io_set *sp) +{ + qsort(sp->list->elts, sp->list->nelts, sp->list->elt_size, + h2_stream_id_cmp); +} + +apr_status_t h2_io_set_add(h2_io_set *sp, h2_io *io) +{ + h2_io *existing = h2_io_set_get(sp, io->id); + if (!existing) { + APR_ARRAY_PUSH(sp->list, h2_io*) = io; + /* Normally, streams get added in ascending order if id. We + * keep the array sorted, so we just need to check of the newly + * appended stream has a lower id than the last one. if not, + * sorting is not necessary. + */ + int last = sp->list->nelts - 1; + if (last > 0 + && (h2_io_IDX(sp->list, last)->id + < h2_io_IDX(sp->list, last-1)->id)) { + h2_io_set_sort(sp); + } + } + return APR_SUCCESS; +} + +h2_io *h2_io_set_remove(h2_io_set *sp, h2_io *io) +{ + for (int i = 0; i < sp->list->nelts; ++i) { + h2_io *e = h2_io_IDX(sp->list, i); + if (e == io) { + --sp->list->nelts; + int n = sp->list->nelts - i; + if (n > 0) { + /* Close the hole in the array by moving the upper + * parts down one step. + */ + h2_io **selts = (h2_io**)sp->list->elts; + memmove(selts+i, selts+i+1, n * sizeof(h2_io*)); + } + return e; + } + } + return NULL; +} + +void h2_io_set_destroy_all(h2_io_set *sp) +{ + for (int i = 0; i < sp->list->nelts; ++i) { + h2_io *io = h2_io_IDX(sp->list, i); + h2_io_destroy(io); + } + sp->list->nelts = 0; +} + +void h2_io_set_remove_all(h2_io_set *sp) +{ + sp->list->nelts = 0; +} + +int h2_io_set_is_empty(h2_io_set *sp) +{ + AP_DEBUG_ASSERT(sp); + return sp->list->nelts == 0; +} + +void h2_io_set_iter(h2_io_set *sp, + h2_io_set_iter_fn *iter, void *ctx) +{ + for (int i = 0; i < sp->list->nelts; ++i) { + h2_io *s = h2_io_IDX(sp->list, i); + if (!iter(ctx, s)) { + break; + } + } +} + +apr_size_t h2_io_set_size(h2_io_set *sp) +{ + return sp->list->nelts; +} + diff --git a/modules/http2/mod_h2/h2_io_set.h b/modules/http2/mod_h2/h2_io_set.h new file mode 100644 index 0000000000..a9c6546c70 --- /dev/null +++ b/modules/http2/mod_h2/h2_io_set.h @@ -0,0 +1,47 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_io_set__ +#define __mod_h2__h2_io_set__ + +struct h2_io; + +/** + * A set of h2_io instances. Allows lookup by stream id + * and other criteria. + */ +typedef struct h2_io_set h2_io_set; + +h2_io_set *h2_io_set_create(apr_pool_t *pool); + +void h2_io_set_destroy(h2_io_set *set); + +apr_status_t h2_io_set_add(h2_io_set *set, struct h2_io *io); +h2_io *h2_io_set_get(h2_io_set *set, int stream_id); +h2_io *h2_io_set_get_highest_prio(h2_io_set *set); +h2_io *h2_io_set_remove(h2_io_set *set, struct h2_io *io); + +void h2_io_set_remove_all(h2_io_set *set); +void h2_io_set_destroy_all(h2_io_set *set); +int h2_io_set_is_empty(h2_io_set *set); +apr_size_t h2_io_set_size(h2_io_set *set); + + +typedef int h2_io_set_iter_fn(void *ctx, struct h2_io *io); + +void h2_io_set_iter(h2_io_set *set, + h2_io_set_iter_fn *iter, void *ctx); + +#endif /* defined(__mod_h2__h2_io_set__) */ diff --git a/modules/http2/mod_h2/h2_mplx.c b/modules/http2/mod_h2/h2_mplx.c new file mode 100644 index 0000000000..be477e1c78 --- /dev/null +++ b/modules/http2/mod_h2/h2_mplx.c @@ -0,0 +1,788 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "h2_private.h" +#include "h2_config.h" +#include "h2_conn.h" +#include "h2_io.h" +#include "h2_io_set.h" +#include "h2_response.h" +#include "h2_mplx.h" +#include "h2_stream.h" +#include "h2_stream_set.h" +#include "h2_task.h" +#include "h2_task_input.h" +#include "h2_task_output.h" +#include "h2_task_queue.h" +#include "h2_workers.h" + + +static int is_aborted(h2_mplx *m, apr_status_t *pstatus) { + AP_DEBUG_ASSERT(m); + if (m->aborted) { + *pstatus = APR_ECONNABORTED; + return 1; + } + return 0; +} + +static void have_out_data_for(h2_mplx *m, int stream_id); + +static void h2_mplx_destroy(h2_mplx *m) +{ + AP_DEBUG_ASSERT(m); + m->aborted = 1; + if (m->q) { + h2_tq_destroy(m->q); + m->q = NULL; + } + if (m->ready_ios) { + h2_io_set_destroy(m->ready_ios); + m->ready_ios = NULL; + } + if (m->stream_ios) { + h2_io_set_destroy(m->stream_ios); + m->stream_ios = NULL; + } + + if (m->lock) { + apr_thread_mutex_destroy(m->lock); + m->lock = NULL; + } + + if (m->pool) { + apr_pool_destroy(m->pool); + } +} + +/** + * A h2_mplx needs to be thread-safe *and* if will be called by + * the h2_session thread *and* the h2_worker threads. Therefore: + * - calls are protected by a mutex lock, m->lock + * - the pool needs its own allocator, since apr_allocator_t are + * not re-entrant. The separate allocator works without a + * separate lock since we already protect h2_mplx itself. + * Since HTTP/2 connections can be expected to live longer than + * their HTTP/1 cousins, the separate allocator seems to work better + * than protecting a shared h2_session one with an own lock. + */ +h2_mplx *h2_mplx_create(conn_rec *c, apr_pool_t *parent, h2_workers *workers) +{ + apr_status_t status = APR_SUCCESS; + h2_config *conf = h2_config_get(c); + AP_DEBUG_ASSERT(conf); + + apr_allocator_t *allocator = NULL; + status = apr_allocator_create(&allocator); + if (status != APR_SUCCESS) { + return NULL; + } + + h2_mplx *m = apr_pcalloc(parent, sizeof(h2_mplx)); + if (m) { + m->id = c->id; + APR_RING_ELEM_INIT(m, link); + apr_atomic_set32(&m->refs, 1); + m->c = c; + apr_pool_create_ex(&m->pool, parent, NULL, allocator); + if (!m->pool) { + return NULL; + } + apr_allocator_owner_set(allocator, m->pool); + + status = apr_thread_mutex_create(&m->lock, APR_THREAD_MUTEX_DEFAULT, + m->pool); + if (status != APR_SUCCESS) { + h2_mplx_destroy(m); + return NULL; + } + + m->bucket_alloc = apr_bucket_alloc_create(m->pool); + + m->q = h2_tq_create(m->id, m->pool); + m->stream_ios = h2_io_set_create(m->pool); + m->ready_ios = h2_io_set_create(m->pool); + m->closed = h2_stream_set_create(m->pool); + m->stream_max_mem = h2_config_geti(conf, H2_CONF_STREAM_MAX_MEM); + m->workers = workers; + } + return m; +} + +#define REF_COUNT_ATOMIC 1 + +static void reference(h2_mplx *m) +{ + apr_atomic_inc32(&m->refs); +} + +static void release(h2_mplx *m) +{ + if (!apr_atomic_dec32(&m->refs)) { + if (m->join_wait) { + apr_thread_cond_signal(m->join_wait); + } + } +} + +void h2_mplx_reference(h2_mplx *m) +{ + if (REF_COUNT_ATOMIC) { + reference(m); + } + else { + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + reference(m); + apr_thread_mutex_unlock(m->lock); + } + } +} +void h2_mplx_release(h2_mplx *m) +{ + if (REF_COUNT_ATOMIC) { + release(m); + } + else { + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + release(m); + apr_thread_mutex_unlock(m->lock); + } + } +} + +static void workers_register(h2_mplx *m) { + /* Initially, there was ref count increase for this as well, but + * this is not needed, even harmful. + * h2_workers is only a hub for all the h2_worker instances. + * At the end-of-life of this h2_mplx, we always unregister at + * the workers. The thing to manage are all the h2_worker instances + * out there. Those may hold a reference to this h2_mplx and we cannot + * call them to unregister. + * + * Therefore: ref counting for h2_workers in not needed, ref counting + * for h2_worker using this is critical. + */ + h2_workers_register(m->workers, m); +} + +static void workers_unregister(h2_mplx *m) { + h2_workers_unregister(m->workers, m); +} + +apr_status_t h2_mplx_release_and_join(h2_mplx *m, apr_thread_cond_t *wait) +{ + workers_unregister(m); + + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + int attempts = 0; + + release(m); + while (apr_atomic_read32(&m->refs) > 0) { + m->join_wait = wait; + ap_log_cerror(APLOG_MARK, (attempts? APLOG_INFO : APLOG_DEBUG), + 0, m->c, + "h2_mplx(%ld): release_join, refs=%d, waiting...", + m->id, m->refs); + apr_thread_cond_timedwait(wait, m->lock, apr_time_from_sec(10)); + if (++attempts >= 6) { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, m->c, + "h2_mplx(%ld): join attempts exhausted, refs=%d", + m->id, m->refs); + break; + } + } + if (m->join_wait) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, m->c, + "h2_mplx(%ld): release_join -> destroy", m->id); + } + m->join_wait = NULL; + apr_thread_mutex_unlock(m->lock); + h2_mplx_destroy(m); + } + return status; +} + +void h2_mplx_abort(h2_mplx *m) +{ + AP_DEBUG_ASSERT(m); + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + m->aborted = 1; + h2_io_set_destroy_all(m->stream_ios); + apr_thread_mutex_unlock(m->lock); + } + workers_unregister(m); +} + + +h2_stream *h2_mplx_open_io(h2_mplx *m, int stream_id) +{ + h2_stream *stream = NULL; + + if (m->aborted) { + return NULL; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + apr_pool_t *stream_pool = m->spare_pool; + + if (!stream_pool) { + apr_pool_create(&stream_pool, m->pool); + } + else { + m->spare_pool = NULL; + } + + stream = h2_stream_create(stream_id, stream_pool, m); + stream->state = H2_STREAM_ST_OPEN; + + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (!io) { + io = h2_io_create(stream_id, stream_pool, m->bucket_alloc); + h2_io_set_add(m->stream_ios, io); + } + status = io? APR_SUCCESS : APR_ENOMEM; + apr_thread_mutex_unlock(m->lock); + } + return stream; +} + +static void stream_destroy(h2_mplx *m, h2_stream *stream, h2_io *io) +{ + apr_pool_t *pool = h2_stream_detach_pool(stream); + if (pool) { + apr_pool_clear(pool); + if (m->spare_pool) { + apr_pool_destroy(m->spare_pool); + } + m->spare_pool = pool; + } + h2_stream_destroy(stream); + if (io) { + h2_io_set_remove(m->stream_ios, io); + h2_io_destroy(io); + } +} + +apr_status_t h2_mplx_cleanup_stream(h2_mplx *m, h2_stream *stream) +{ + AP_DEBUG_ASSERT(m); + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream->id); + if (!io || io->task_done) { + /* No more io or task already done -> cleanup immediately */ + stream_destroy(m, stream, io); + } + else { + /* Add stream to closed set for cleanup when task is done */ + h2_stream_set_add(m->closed, stream); + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +void h2_mplx_task_done(h2_mplx *m, int stream_id) +{ + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_stream *stream = h2_stream_set_get(m->closed, stream_id); + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c, + "h2_mplx(%ld): task(%d) done", m->id, stream_id); + if (stream) { + /* stream was already closed by main connection and is in + * zombie state. Now that the task is done with it, we + * can free its resources. */ + h2_stream_set_remove(m->closed, stream); + stream_destroy(m, stream, io); + } + else if (io) { + /* main connection has not finished stream. Mark task as done + * so that eventual cleanup can start immediately. */ + io->task_done = 1; + } + apr_thread_mutex_unlock(m->lock); + } +} + +apr_status_t h2_mplx_in_read(h2_mplx *m, apr_read_type_e block, + int stream_id, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + io->input_arrived = iowait; + status = h2_io_in_read(io, bb, 0); + while (status == APR_EAGAIN + && !is_aborted(m, &status) + && block == APR_BLOCK_READ) { + apr_thread_cond_wait(io->input_arrived, m->lock); + status = h2_io_in_read(io, bb, 0); + } + io->input_arrived = NULL; + } + else { + status = APR_EOF; + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +apr_status_t h2_mplx_in_write(h2_mplx *m, int stream_id, + apr_bucket_brigade *bb) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + status = h2_io_in_write(io, bb); + if (io->input_arrived) { + apr_thread_cond_signal(io->input_arrived); + } + } + else { + status = APR_EOF; + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +apr_status_t h2_mplx_in_close(h2_mplx *m, int stream_id) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + status = h2_io_in_close(io); + if (io->input_arrived) { + apr_thread_cond_signal(io->input_arrived); + } + } + else { + status = APR_ECONNABORTED; + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +typedef struct { + h2_mplx_consumed_cb *cb; + void *cb_ctx; + int streams_updated; +} update_ctx; + +static int update_window(void *ctx, h2_io *io) +{ + if (io->input_consumed) { + update_ctx *uctx = (update_ctx*)ctx; + uctx->cb(uctx->cb_ctx, io->id, io->input_consumed); + io->input_consumed = 0; + ++uctx->streams_updated; + } + return 1; +} + +apr_status_t h2_mplx_in_update_windows(h2_mplx *m, + h2_mplx_consumed_cb *cb, void *cb_ctx) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + update_ctx ctx = { cb, cb_ctx, 0 }; + status = APR_EAGAIN; + h2_io_set_iter(m->stream_ios, update_window, &ctx); + + if (ctx.streams_updated) { + status = APR_SUCCESS; + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +apr_status_t h2_mplx_out_read(h2_mplx *m, int stream_id, + char *buffer, apr_size_t *plen, int *peos) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + status = h2_io_out_read(io, buffer, plen, peos); + if (status == APR_SUCCESS && io->output_drained) { + apr_thread_cond_signal(io->output_drained); + } + } + else { + status = APR_ECONNABORTED; + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +apr_status_t h2_mplx_out_readx(h2_mplx *m, int stream_id, + h2_io_data_cb *cb, void *ctx, + apr_size_t *plen, int *peos) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + status = h2_io_out_readx(io, cb, ctx, plen, peos); + if (status == APR_SUCCESS && io->output_drained) { + apr_thread_cond_signal(io->output_drained); + } + } + else { + status = APR_ECONNABORTED; + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +h2_stream *h2_mplx_next_submit(h2_mplx *m, h2_stream_set *streams) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return NULL; + } + h2_stream *stream = NULL; + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get_highest_prio(m->ready_ios); + if (io) { + h2_response *response = io->response; + h2_io_set_remove(m->ready_ios, io); + + stream = h2_stream_set_get(streams, response->stream_id); + if (stream) { + h2_stream_set_response(stream, response, io->bbout); + if (io->output_drained) { + apr_thread_cond_signal(io->output_drained); + } + } + else { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, APR_NOTFOUND, m->c, + "h2_mplx(%ld): stream for response %d", + m->id, response->stream_id); + } + } + apr_thread_mutex_unlock(m->lock); + } + return stream; +} + +static apr_status_t out_write(h2_mplx *m, h2_io *io, + ap_filter_t* f, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait) +{ + apr_status_t status = APR_SUCCESS; + /* We check the memory footprint queued for this stream_id + * and block if it exceeds our configured limit. + * We will not split buckets to enforce the limit to the last + * byte. After all, the bucket is already in memory. + */ + while (!APR_BRIGADE_EMPTY(bb) + && (status == APR_SUCCESS) + && !is_aborted(m, &status)) { + + status = h2_io_out_write(io, bb, m->stream_max_mem); + + /* Wait for data to drain until there is room again */ + while (!APR_BRIGADE_EMPTY(bb) + && iowait + && status == APR_SUCCESS + && (m->stream_max_mem <= h2_io_out_length(io)) + && !is_aborted(m, &status)) { + io->output_drained = iowait; + if (f) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, f->c, + "h2_mplx(%ld-%d): waiting for out drain", + m->id, io->id); + } + apr_thread_cond_wait(io->output_drained, m->lock); + io->output_drained = NULL; + } + } + apr_brigade_cleanup(bb); + return status; +} + +static apr_status_t out_open(h2_mplx *m, int stream_id, h2_response *response, + ap_filter_t* f, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait) +{ + apr_status_t status = APR_SUCCESS; + + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + if (f) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, f->c, + "h2_mplx(%ld-%d): open response: %s", + m->id, stream_id, response->headers->status); + } + + h2_response_copy(io->response, response); + h2_io_set_add(m->ready_ios, io); + if (bb) { + status = out_write(m, io, f, bb, iowait); + } + have_out_data_for(m, stream_id); + } + else { + status = APR_ECONNABORTED; + } + return status; +} + +apr_status_t h2_mplx_out_open(h2_mplx *m, int stream_id, h2_response *response, + ap_filter_t* f, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + status = out_open(m, stream_id, response, f, bb, iowait); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + + +apr_status_t h2_mplx_out_write(h2_mplx *m, int stream_id, + ap_filter_t* f, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + if (!m->aborted) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + status = out_write(m, io, f, bb, iowait); + have_out_data_for(m, stream_id); + if (m->aborted) { + return APR_ECONNABORTED; + } + } + else { + status = APR_ECONNABORTED; + } + } + + if (m->lock) { + apr_thread_mutex_unlock(m->lock); + } + } + return status; +} + +apr_status_t h2_mplx_out_close(h2_mplx *m, int stream_id) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + if (!m->aborted) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + if (!io->response->headers) { + /* In case a close comes before a response was created, + * insert an error one so that our streams can properly + * reset. + */ + h2_response *r = h2_response_create(stream_id, + "500", NULL, m->pool); + status = out_open(m, stream_id, r, NULL, NULL, NULL); + } + status = h2_io_out_close(io); + have_out_data_for(m, stream_id); + if (m->aborted) { + /* if we were the last output, the whole session might + * have gone down in the meantime. + */ + return APR_SUCCESS; + } + } + else { + status = APR_ECONNABORTED; + } + } + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +int h2_mplx_in_has_eos_for(h2_mplx *m, int stream_id) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return 0; + } + int has_eos = 0; + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + has_eos = h2_io_in_has_eos_for(io); + } + apr_thread_mutex_unlock(m->lock); + } + return has_eos; +} + +int h2_mplx_out_has_data_for(h2_mplx *m, int stream_id) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return 0; + } + int has_data = 0; + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + h2_io *io = h2_io_set_get(m->stream_ios, stream_id); + if (io) { + has_data = h2_io_out_has_data(io); + } + apr_thread_mutex_unlock(m->lock); + } + return has_data; +} + +apr_status_t h2_mplx_out_trywait(h2_mplx *m, apr_interval_time_t timeout, + apr_thread_cond_t *iowait) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + m->added_output = iowait; + status = apr_thread_cond_timedwait(m->added_output, m->lock, timeout); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c, + "h2_mplx(%ld): trywait on data for %f ms)", + m->id, timeout/1000.0); + m->added_output = NULL; + apr_thread_mutex_unlock(m->lock); + } + return status; +} + +static void have_out_data_for(h2_mplx *m, int stream_id) +{ + (void)stream_id; + AP_DEBUG_ASSERT(m); + if (m->added_output) { + apr_thread_cond_signal(m->added_output); + } +} + +apr_status_t h2_mplx_do_task(h2_mplx *m, struct h2_task *task) +{ + AP_DEBUG_ASSERT(m); + if (m->aborted) { + return APR_ECONNABORTED; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + /* TODO: needs to sort queue by priority */ + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c, + "h2_mplx: do task(%s)", task->id); + h2_tq_append(m->q, task); + apr_thread_mutex_unlock(m->lock); + } + workers_register(m); + return status; +} + +h2_task *h2_mplx_pop_task(h2_mplx *m, int *has_more) +{ + h2_task *task = NULL; + AP_DEBUG_ASSERT(m); + if (m->aborted) { + *has_more = 0; + return NULL; + } + apr_status_t status = apr_thread_mutex_lock(m->lock); + if (APR_SUCCESS == status) { + task = h2_tq_pop_first(m->q); + if (task) { + h2_task_set_started(task); + } + *has_more = !h2_tq_empty(m->q); + apr_thread_mutex_unlock(m->lock); + } + return task; +} + diff --git a/modules/http2/mod_h2/h2_mplx.h b/modules/http2/mod_h2/h2_mplx.h new file mode 100644 index 0000000000..35c41a6be8 --- /dev/null +++ b/modules/http2/mod_h2/h2_mplx.h @@ -0,0 +1,322 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_mplx__ +#define __mod_h2__h2_mplx__ + +/** + * The stream multiplexer. It pushes buckets from the connection + * thread to the stream task threads and vice versa. It's thread-safe + * to use. + * + * There is one h2_mplx instance for each h2_session, which sits on top + * of a particular httpd conn_rec. Input goes from the connection to + * the stream tasks. Output goes from the stream tasks to the connection, + * e.g. the client. + * + * For each stream, there can be at most "H2StreamMaxMemSize" output bytes + * queued in the multiplexer. If a task thread tries to write more + * data, it is blocked until space becomes available. + * + * Writing input is never blocked. In order to use flow control on the input, + * the mplx can be polled for input data consumption. + */ + +struct apr_pool_t; +struct apr_thread_mutex_t; +struct apr_thread_cond_t; +struct h2_config; +struct h2_response; +struct h2_task; +struct h2_stream; +struct h2_io_set; +struct apr_thread_cond_t; +struct h2_workers; +struct h2_stream_set; +struct h2_task_queue; + +#include "h2_io.h" + +typedef struct h2_mplx h2_mplx; + +struct h2_mplx { + long id; + APR_RING_ENTRY(h2_mplx) link; + volatile apr_uint32_t refs; + conn_rec *c; + apr_pool_t *pool; + apr_bucket_alloc_t *bucket_alloc; + + struct h2_task_queue *q; + struct h2_io_set *stream_ios; + struct h2_io_set *ready_ios; + + apr_thread_mutex_t *lock; + struct apr_thread_cond_t *added_output; + struct apr_thread_cond_t *join_wait; + + int aborted; + apr_size_t stream_max_mem; + + apr_pool_t *spare_pool; /* spare pool, ready for next stream */ + struct h2_stream_set *closed; /* streams closed, but task ongoing */ + struct h2_workers *workers; +}; + +/******************************************************************************* + * Object lifecycle and information. + ******************************************************************************/ + +/** + * Create the multiplexer for the given HTTP2 session. + * Implicitly has reference count 1. + */ +h2_mplx *h2_mplx_create(conn_rec *c, apr_pool_t *master, + struct h2_workers *workers); + +/** + * Increase the reference counter of this mplx. + */ +void h2_mplx_reference(h2_mplx *m); + +/** + * Decreases the reference counter of this mplx. + */ +void h2_mplx_release(h2_mplx *m); +/** + * Decreases the reference counter of this mplx and waits for it + * to reached 0, destroy the mplx afterwards. + * This is to be called from the thread that created the mplx in + * the first place. + * @param m the mplx to be released and destroyed + * @param wait condition var to wait on for ref counter == 0 + */ +apr_status_t h2_mplx_release_and_join(h2_mplx *m, struct apr_thread_cond_t *wait); + +/** + * Aborts the multiplexer. It will answer all future invocation with + * APR_ECONNABORTED, leading to early termination of ongoing tasks. + */ +void h2_mplx_abort(h2_mplx *mplx); + +void h2_mplx_task_done(h2_mplx *m, int stream_id); + +/******************************************************************************* + * IO lifetime of streams. + ******************************************************************************/ +/** + * Prepares the multiplexer to handle in-/output on the given stream id. + */ +struct h2_stream *h2_mplx_open_io(h2_mplx *mplx, int stream_id); + +/** + * Ends cleanup of a stream in sync with execution thread. + */ +apr_status_t h2_mplx_cleanup_stream(h2_mplx *m, struct h2_stream *stream); + +/* Return != 0 iff the multiplexer has data for the given stream. + */ +int h2_mplx_out_has_data_for(h2_mplx *m, int stream_id); + +/** + * Waits on output data from any stream in this session to become available. + * Returns APR_TIMEUP if no data arrived in the given time. + */ +apr_status_t h2_mplx_out_trywait(h2_mplx *m, apr_interval_time_t timeout, + struct apr_thread_cond_t *iowait); + +/******************************************************************************* + * Stream processing. + ******************************************************************************/ + +/** + * Perform the task on the given stream. + */ +apr_status_t h2_mplx_do_task(h2_mplx *mplx, struct h2_task *task); + +struct h2_task *h2_mplx_pop_task(h2_mplx *mplx, int *has_more); + +/******************************************************************************* + * Input handling of streams. + ******************************************************************************/ + +/** + * Reads a buckets for the given stream_id. Will return ARP_EAGAIN when + * called with APR_NONBLOCK_READ and no data present. Will return APR_EOF + * when the end of the stream input has been reached. + * The condition passed in will be used for blocking/signalling and will + * be protected by the mplx's own mutex. + */ +apr_status_t h2_mplx_in_read(h2_mplx *m, apr_read_type_e block, + int stream_id, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait); + +/** + * Appends data to the input of the given stream. Storage of input data is + * not subject to flow control. + */ +apr_status_t h2_mplx_in_write(h2_mplx *mplx, int stream_id, + apr_bucket_brigade *bb); + +/** + * Closes the input for the given stream_id. + */ +apr_status_t h2_mplx_in_close(h2_mplx *m, int stream_id); + +/** + * Returns != 0 iff the input for the given stream has been closed. There + * could still be data queued, but it can be read without blocking. + */ +int h2_mplx_in_has_eos_for(h2_mplx *m, int stream_id); + +/** + * Callback invoked for every stream that had input data read since + * the last invocation. + */ +typedef void h2_mplx_consumed_cb(void *ctx, int stream_id, apr_size_t consumed); + +/** + * Invoke the callback for all streams that had bytes read since the last + * call to this function. If no stream had input data consumed, the callback + * is not invoked. + * Returns APR_SUCCESS when an update happened, APR_EAGAIN if no update + * happened. + */ +apr_status_t h2_mplx_in_update_windows(h2_mplx *m, + h2_mplx_consumed_cb *cb, void *ctx); + +/******************************************************************************* + * Output handling of streams. + ******************************************************************************/ + +/** + * Get a stream whose response is ready for submit. Will set response and + * any out data available in stream. + * @param m the mplxer to get a response from + * @param bb the brigade to place any existing repsonse body data into + */ +struct h2_stream *h2_mplx_next_submit(h2_mplx *m, + struct h2_stream_set *streams); + +/** + * Reads output data from the given stream. Will never block, but + * return APR_EAGAIN until data arrives or the stream is closed. + */ +apr_status_t h2_mplx_out_read(h2_mplx *mplx, int stream_id, + char *buffer, apr_size_t *plen, int *peos); + +apr_status_t h2_mplx_out_readx(h2_mplx *mplx, int stream_id, + h2_io_data_cb *cb, void *ctx, + apr_size_t *plen, int *peos); + +/** + * Opens the output for the given stream with the specified response. + */ +apr_status_t h2_mplx_out_open(h2_mplx *mplx, int stream_id, + struct h2_response *response, + ap_filter_t* filter, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait); + +/** + * Append the brigade to the stream output. Might block if amount + * of bytes buffered reaches configured max. + * @param stream_id the stream identifier + * @param filter the apache filter context of the data + * @param bb the bucket brigade to append + * @param iowait a conditional used for block/signalling in h2_mplx + */ +apr_status_t h2_mplx_out_write(h2_mplx *mplx, int stream_id, + ap_filter_t* filter, apr_bucket_brigade *bb, + struct apr_thread_cond_t *iowait); + +/** + * Closes the output stream. Readers of this stream will get all pending + * data and then only APR_EOF as result. + */ +apr_status_t h2_mplx_out_close(h2_mplx *m, int stream_id); + +/******************************************************************************* + * h2_mplx list Manipulation. + ******************************************************************************/ + +/** + * The magic pointer value that indicates the head of a h2_mplx list + * @param b The mplx list + * @return The magic pointer value + */ +#define H2_MPLX_LIST_SENTINEL(b) APR_RING_SENTINEL((b), h2_mplx, link) + +/** + * Determine if the mplx list is empty + * @param b The list to check + * @return true or false + */ +#define H2_MPLX_LIST_EMPTY(b) APR_RING_EMPTY((b), h2_mplx, link) + +/** + * Return the first mplx in a list + * @param b The list to query + * @return The first mplx in the list + */ +#define H2_MPLX_LIST_FIRST(b) APR_RING_FIRST(b) + +/** + * Return the last mplx in a list + * @param b The list to query + * @return The last mplx int he list + */ +#define H2_MPLX_LIST_LAST(b) APR_RING_LAST(b) + +/** + * Insert a single mplx at the front of a list + * @param b The list to add to + * @param e The mplx to insert + */ +#define H2_MPLX_LIST_INSERT_HEAD(b, e) do { \ +h2_mplx *ap__b = (e); \ +APR_RING_INSERT_HEAD((b), ap__b, h2_mplx, link); \ +} while (0) + +/** + * Insert a single mplx at the end of a list + * @param b The list to add to + * @param e The mplx to insert + */ +#define H2_MPLX_LIST_INSERT_TAIL(b, e) do { \ +h2_mplx *ap__b = (e); \ +APR_RING_INSERT_TAIL((b), ap__b, h2_mplx, link); \ +} while (0) + +/** + * Get the next mplx in the list + * @param e The current mplx + * @return The next mplx + */ +#define H2_MPLX_NEXT(e) APR_RING_NEXT((e), link) +/** + * Get the previous mplx in the list + * @param e The current mplx + * @return The previous mplx + */ +#define H2_MPLX_PREV(e) APR_RING_PREV((e), link) + +/** + * Remove a mplx from its list + * @param e The mplx to remove + */ +#define H2_MPLX_REMOVE(e) APR_RING_REMOVE((e), link) + + +#endif /* defined(__mod_h2__h2_mplx__) */ diff --git a/modules/http2/mod_h2/h2_private.h b/modules/http2/mod_h2/h2_private.h new file mode 100644 index 0000000000..6931278401 --- /dev/null +++ b/modules/http2/mod_h2/h2_private.h @@ -0,0 +1,36 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef mod_h2_h2_private_h +#define mod_h2_h2_private_h + +#include + +extern module AP_MODULE_DECLARE_DATA h2_module; + +APLOG_USE_MODULE(h2); + + +#define H2_HEADER_METHOD ":method" +#define H2_HEADER_METHOD_LEN 7 +#define H2_HEADER_SCHEME ":scheme" +#define H2_HEADER_SCHEME_LEN 7 +#define H2_HEADER_AUTH ":authority" +#define H2_HEADER_AUTH_LEN 10 +#define H2_HEADER_PATH ":path" +#define H2_HEADER_PATH_LEN 5 +#define H2_CRLF "\r\n" + +#endif diff --git a/modules/http2/mod_h2/h2_request.c b/modules/http2/mod_h2/h2_request.c new file mode 100644 index 0000000000..62744c09cf --- /dev/null +++ b/modules/http2/mod_h2/h2_request.c @@ -0,0 +1,176 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_mplx.h" +#include "h2_to_h1.h" +#include "h2_request.h" +#include "h2_task.h" +#include "h2_util.h" + + +h2_request *h2_request_create(int id, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc) +{ + h2_request *req = apr_pcalloc(pool, sizeof(h2_request)); + if (req) { + req->id = id; + req->pool = pool; + req->bucket_alloc = bucket_alloc; + } + return req; +} + +void h2_request_destroy(h2_request *req) +{ + if (req->to_h1) { + h2_to_h1_destroy(req->to_h1); + req->to_h1 = NULL; + } +} + +static apr_status_t insert_request_line(h2_request *req, h2_mplx *m); + +apr_status_t h2_request_rwrite(h2_request *req, request_rec *r, h2_mplx *m) +{ + req->method = r->method; + req->path = r->uri; + req->authority = r->hostname; + if (!strchr(req->authority, ':') && r->parsed_uri.port_str) { + req->authority = apr_psprintf(req->pool, "%s:%s", req->authority, + r->parsed_uri.port_str); + } + req->scheme = NULL; + + + apr_status_t status = insert_request_line(req, m); + if (status == APR_SUCCESS) { + status = h2_to_h1_add_headers(req->to_h1, r->headers_in); + } + + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, + "h2_request(%d): written request %s %s, host=%s", + req->id, req->method, req->path, req->authority); + + return status; +} + +apr_status_t h2_request_write_header(h2_request *req, + const char *name, size_t nlen, + const char *value, size_t vlen, + h2_mplx *m) +{ + apr_status_t status = APR_SUCCESS; + + if (nlen <= 0) { + return status; + } + + if (name[0] == ':') { + /* pseudo header, see ch. 8.1.2.3, always should come first */ + if (req->to_h1) { + ap_log_perror(APLOG_MARK, APLOG_ERR, 0, req->pool, + "h2_request(%d): pseudo header after request start", + req->id); + return APR_EGENERAL; + } + + if (H2_HEADER_METHOD_LEN == nlen + && !strncmp(H2_HEADER_METHOD, name, nlen)) { + req->method = apr_pstrndup(req->pool, value, vlen); + } + else if (H2_HEADER_SCHEME_LEN == nlen + && !strncmp(H2_HEADER_SCHEME, name, nlen)) { + req->scheme = apr_pstrndup(req->pool, value, vlen); + } + else if (H2_HEADER_PATH_LEN == nlen + && !strncmp(H2_HEADER_PATH, name, nlen)) { + req->path = apr_pstrndup(req->pool, value, vlen); + } + else if (H2_HEADER_AUTH_LEN == nlen + && !strncmp(H2_HEADER_AUTH, name, nlen)) { + req->authority = apr_pstrndup(req->pool, value, vlen); + } + else { + char buffer[32]; + memset(buffer, 0, 32); + strncpy(buffer, name, (nlen > 31)? 31 : nlen); + ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, req->pool, + "h2_request(%d): ignoring unknown pseudo header %s", + req->id, buffer); + } + } + else { + /* non-pseudo header, append to work bucket of stream */ + if (!req->to_h1) { + status = insert_request_line(req, m); + if (status != APR_SUCCESS) { + return status; + } + } + + if (status == APR_SUCCESS) { + status = h2_to_h1_add_header(req->to_h1, + name, nlen, value, vlen); + } + } + + return status; +} + +apr_status_t h2_request_write_data(h2_request *req, + const char *data, size_t len) +{ + return h2_to_h1_add_data(req->to_h1, data, len); +} + +apr_status_t h2_request_end_headers(h2_request *req, struct h2_mplx *m, + h2_task *task, int eos) +{ + if (!req->to_h1) { + apr_status_t status = insert_request_line(req, m); + if (status != APR_SUCCESS) { + return status; + } + } + return h2_to_h1_end_headers(req->to_h1, task, eos); +} + +apr_status_t h2_request_close(h2_request *req) +{ + return h2_to_h1_close(req->to_h1); +} + +static apr_status_t insert_request_line(h2_request *req, h2_mplx *m) +{ + req->to_h1 = h2_to_h1_create(req->id, req->pool, req->bucket_alloc, + req->method, req->path, req->authority, m); + return req->to_h1? APR_SUCCESS : APR_ENOMEM; +} + +apr_status_t h2_request_flush(h2_request *req) +{ + return h2_to_h1_flush(req->to_h1); +} + diff --git a/modules/http2/mod_h2/h2_request.h b/modules/http2/mod_h2/h2_request.h new file mode 100644 index 0000000000..dac8c6fdaa --- /dev/null +++ b/modules/http2/mod_h2/h2_request.h @@ -0,0 +1,67 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_request__ +#define __mod_h2__h2_request__ + +/* h2_request is the transformer of HTTP2 streams into HTTP/1.1 internal + * format that will be fed to various httpd input filters to finally + * become a request_rec to be handled by soemone. + * + * Ideally, we would make a request_rec without serializing the headers + * we have only to make someone else parse them back. + */ +struct h2_to_h1; +struct h2_mplx; +struct h2_task; + +typedef struct h2_request h2_request; + +struct h2_request { + int id; /* http2 stream id */ + apr_pool_t *pool; + apr_bucket_alloc_t *bucket_alloc; + struct h2_to_h1 *to_h1; /* Converter to HTTP/1.1 format*/ + + /* pseudo header values, see ch. 8.1.2.3 */ + const char *method; + const char *path; + const char *authority; + const char *scheme; +}; + +h2_request *h2_request_create(int id, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc); +void h2_request_destroy(h2_request *req); + +apr_status_t h2_request_flush(h2_request *req); + +apr_status_t h2_request_write_header(h2_request *req, + const char *name, size_t nlen, + const char *value, size_t vlen, + struct h2_mplx *m); + +apr_status_t h2_request_write_data(h2_request *request, + const char *data, size_t len); + +apr_status_t h2_request_end_headers(h2_request *req, struct h2_mplx *m, + struct h2_task *task, int eos); + +apr_status_t h2_request_close(h2_request *req); + +apr_status_t h2_request_rwrite(h2_request *req, request_rec *r, + struct h2_mplx *m); + +#endif /* defined(__mod_h2__h2_request__) */ diff --git a/modules/http2/mod_h2/h2_response.c b/modules/http2/mod_h2/h2_response.c new file mode 100644 index 0000000000..837b03fc74 --- /dev/null +++ b/modules/http2/mod_h2/h2_response.c @@ -0,0 +1,235 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include + +#include +#include +#include + +#include + +#include "h2_private.h" +#include "h2_util.h" +#include "h2_response.h" + +static void convert_header(h2_response *response, apr_table_t *headers, + const char *http_status, request_rec *r); +static int ignore_header(const char *name) +{ + return (H2_HD_MATCH_LIT_CS("connection", name) + || H2_HD_MATCH_LIT_CS("proxy-connection", name) + || H2_HD_MATCH_LIT_CS("upgrade", name) + || H2_HD_MATCH_LIT_CS("keep-alive", name) + || H2_HD_MATCH_LIT_CS("transfer-encoding", name)); +} + +h2_response *h2_response_create(int stream_id, + const char *http_status, + apr_array_header_t *hlines, + apr_pool_t *pool) +{ + apr_table_t *header; + h2_response *response = apr_pcalloc(pool, sizeof(h2_response)); + if (response == NULL) { + return NULL; + } + + response->stream_id = stream_id; + response->content_length = -1; + + if (hlines) { + header = apr_table_make(pool, hlines->nelts); + for (int i = 0; i < hlines->nelts; ++i) { + char *hline = ((char **)hlines->elts)[i]; + char *sep = strchr(hline, ':'); + if (!sep) { + ap_log_perror(APLOG_MARK, APLOG_WARNING, APR_EINVAL, pool, + "h2_response(%d): invalid header[%d] '%s'", + response->stream_id, i, (char*)hline); + /* not valid format, abort */ + return NULL; + } + (*sep++) = '\0'; + while (*sep == ' ' || *sep == '\t') { + ++sep; + } + if (ignore_header(hline)) { + /* never forward, ch. 8.1.2.2 */ + } + else { + apr_table_merge(header, hline, sep); + if (*sep && H2_HD_MATCH_LIT_CS("content-length", hline)) { + char *end; + response->content_length = apr_strtoi64(sep, &end, 10); + if (sep == end) { + ap_log_perror(APLOG_MARK, APLOG_WARNING, APR_EINVAL, + pool, "h2_response(%d): content-length" + " value not parsed: %s", + response->stream_id, sep); + response->content_length = -1; + } + } + } + } + } + else { + header = apr_table_make(pool, 0); + } + + convert_header(response, header, http_status, NULL); + return response->headers? response : NULL; +} + +h2_response *h2_response_rcreate(int stream_id, request_rec *r, + apr_table_t *header, apr_pool_t *pool) +{ + h2_response *response = apr_pcalloc(pool, sizeof(h2_response)); + if (response == NULL) { + return NULL; + } + + response->stream_id = stream_id; + response->content_length = -1; + convert_header(response, header, apr_psprintf(pool, "%d", r->status), r); + + return response->headers? response : NULL; +} + +void h2_response_cleanup(h2_response *response) +{ + if (response->headers) { + if (--response->headers->refs == 0) { + free(response->headers); + } + response->headers = NULL; + } +} + +void h2_response_destroy(h2_response *response) +{ + h2_response_cleanup(response); +} + +void h2_response_copy(h2_response *to, h2_response *from) +{ + h2_response_cleanup(to); + *to = *from; + if (from->headers) { + ++from->headers->refs; + } +} + +typedef struct { + nghttp2_nv *nv; + size_t nvlen; + size_t nvstrlen; + size_t offset; + char *strbuf; + h2_response *response; + int debug; + request_rec *r; +} nvctx_t; + +static int count_headers(void *ctx, const char *key, const char *value) +{ + if (!ignore_header(key)) { + nvctx_t *nvctx = (nvctx_t*)ctx; + nvctx->nvlen++; + nvctx->nvstrlen += strlen(key) + strlen(value) + 2; + } + return 1; +} + +#define NV_ADD_LIT_CS(nv, k, v) addnv_lit_cs(nv, k, sizeof(k) - 1, v, strlen(v)) +#define NV_ADD_CS_CS(nv, k, v) addnv_cs_cs(nv, k, strlen(k), v, strlen(v)) +#define NV_BUF_ADD(nv, s, len) memcpy(nv->strbuf, s, len); \ +s = nv->strbuf; \ +nv->strbuf += len + 1 + +static void addnv_cs_cs(nvctx_t *ctx, const char *key, size_t key_len, + const char *value, size_t val_len) +{ + nghttp2_nv *nv = &ctx->nv[ctx->offset]; + + NV_BUF_ADD(ctx, key, key_len); + NV_BUF_ADD(ctx, value, val_len); + + nv->name = (uint8_t*)key; + nv->namelen = key_len; + nv->value = (uint8_t*)value; + nv->valuelen = val_len; + + ctx->offset++; +} + +static void addnv_lit_cs(nvctx_t *ctx, const char *key, size_t key_len, + const char *value, size_t val_len) +{ + nghttp2_nv *nv = &ctx->nv[ctx->offset]; + + NV_BUF_ADD(ctx, value, val_len); + + nv->name = (uint8_t*)key; + nv->namelen = key_len; + nv->value = (uint8_t*)value; + nv->valuelen = val_len; + + ctx->offset++; +} + +static int add_header(void *ctx, const char *key, const char *value) +{ + if (!ignore_header(key)) { + nvctx_t *nvctx = (nvctx_t*)ctx; + if (nvctx->debug) { + ap_log_rerror(APLOG_MARK, APLOG_WARNING, APR_EINVAL, + nvctx->r, "h2_response(%d) header -> %s: %s", + nvctx->response->stream_id, key, value); + } + NV_ADD_CS_CS(ctx, key, value); + } + return 1; +} + +static void convert_header(h2_response *response, apr_table_t *headers, + const char *status, request_rec *r) +{ + nvctx_t ctx = { NULL, 1, strlen(status) + 1, 0, NULL, + response, r? APLOGrdebug(r) : 0, r }; + + apr_table_do(count_headers, &ctx, headers, NULL); + + size_t n = (sizeof(h2_headers) + + (ctx.nvlen * sizeof(nghttp2_nv)) + ctx.nvstrlen); + h2_headers *h = calloc(1, n); + if (h) { + ctx.nv = (nghttp2_nv*)(h + 1); + ctx.strbuf = (char*)&ctx.nv[ctx.nvlen]; + + NV_ADD_LIT_CS(&ctx, ":status", status); + apr_table_do(add_header, &ctx, headers, NULL); + + h->nv = ctx.nv; + h->nvlen = ctx.nvlen; + h->status = (const char *)ctx.nv[0].value; + h->refs = 1; + response->headers = h; + } +} + diff --git a/modules/http2/mod_h2/h2_response.h b/modules/http2/mod_h2/h2_response.h new file mode 100644 index 0000000000..d6174f5b68 --- /dev/null +++ b/modules/http2/mod_h2/h2_response.h @@ -0,0 +1,48 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_response__ +#define __mod_h2__h2_response__ + +/* h2_response is just the data belonging the the head of a HTTP response, + * suitable prepared to be fed to nghttp2 for response submit. + */ +typedef struct h2_headers { + nghttp2_nv *nv; + apr_size_t nvlen; + const char *status; + volatile int refs; +} h2_headers; + +typedef struct h2_response { + int stream_id; + apr_off_t content_length; + h2_headers *headers; +} h2_response; + +h2_response *h2_response_create(int stream_id, + const char *http_status, + apr_array_header_t *hlines, + apr_pool_t *pool); + +h2_response *h2_response_rcreate(int stream_id, request_rec *r, + apr_table_t *header, apr_pool_t *pool); + +void h2_response_cleanup(h2_response *response); +void h2_response_destroy(h2_response *response); + +void h2_response_copy(h2_response *to, h2_response *from); + +#endif /* defined(__mod_h2__h2_response__) */ diff --git a/modules/http2/mod_h2/h2_session.c b/modules/http2/mod_h2/h2_session.c new file mode 100644 index 0000000000..06f8503b77 --- /dev/null +++ b/modules/http2/mod_h2/h2_session.c @@ -0,0 +1,1225 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_config.h" +#include "h2_h2.h" +#include "h2_mplx.h" +#include "h2_response.h" +#include "h2_stream.h" +#include "h2_stream_set.h" +#include "h2_from_h1.h" +#include "h2_task.h" +#include "h2_session.h" +#include "h2_util.h" +#include "h2_version.h" +#include "h2_workers.h" + +static int frame_print(const nghttp2_frame *frame, char *buffer, size_t maxlen); + +static int h2_session_status_from_apr_status(apr_status_t rv) +{ + switch (rv) { + case APR_SUCCESS: + return NGHTTP2_NO_ERROR; + case APR_EAGAIN: + case APR_TIMEUP: + return NGHTTP2_ERR_WOULDBLOCK; + case APR_EOF: + return NGHTTP2_ERR_EOF; + default: + return NGHTTP2_ERR_PROTO; + } +} + +static int stream_open(h2_session *session, int stream_id) +{ + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + h2_stream * stream = h2_mplx_open_io(session->mplx, stream_id); + if (stream) { + h2_stream_set_add(session->streams, stream); + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_session: stream(%ld-%d): opened", + session->id, stream_id); + + return 0; + } + + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_ENOMEM, session->c, + "h2_session: stream(%ld-%d): unable to create", + session->id, stream_id); + return NGHTTP2_ERR_INVALID_STREAM_ID; +} + +static apr_status_t stream_end_headers(h2_session *session, + h2_stream *stream, int eos) +{ + (void)session; + return h2_stream_write_eoh(stream, eos); +} + +static apr_status_t send_data(h2_session *session, const char *data, + apr_size_t length); + +/* + * Callback when nghttp2 wants to send bytes back to the client. + */ +static ssize_t send_cb(nghttp2_session *ngh2, + const uint8_t *data, size_t length, + int flags, void *userp) +{ + h2_session *session = (h2_session *)userp; + apr_status_t status = send_data(session, (const char *)data, length); + (void)ngh2; (void)flags; + + if (status == APR_SUCCESS) { + return length; + } + if (status == APR_EAGAIN || status == APR_TIMEUP) { + return NGHTTP2_ERR_WOULDBLOCK; + } + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, session->c, + "h2_session: send error"); + return h2_session_status_from_apr_status(status); +} + +static int on_invalid_frame_recv_cb(nghttp2_session *ngh2, + const nghttp2_frame *frame, + nghttp2_error error, void *userp) +{ + h2_session *session = (h2_session *)userp; + (void)ngh2; + + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + if (APLOGctrace2(session->c)) { + char buffer[256]; + + frame_print(frame, buffer, sizeof(buffer)/sizeof(buffer[0])); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c, + "h2_session: callback on_invalid_frame_recv error=%d %s", + (int)error, buffer); + } + return 0; +} + +static int on_data_chunk_recv_cb(nghttp2_session *ngh2, uint8_t flags, + int32_t stream_id, + const uint8_t *data, size_t len, void *userp) +{ + int rv; + h2_session *session = (h2_session *)userp; + (void)flags; + + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + h2_stream * stream = h2_stream_set_get(session->streams, stream_id); + if (!stream) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, session->c, + "h2_session: stream(%ld-%d): on_data_chunk for unknown stream", + session->id, (int)stream_id); + rv = nghttp2_submit_rst_stream(ngh2, NGHTTP2_FLAG_NONE, stream_id, + NGHTTP2_INTERNAL_ERROR); + if (nghttp2_is_fatal(rv)) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return 0; + } + + apr_status_t status = h2_stream_write_data(stream, (const char *)data, len); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, session->c, + "h2_stream(%ld-%d): written DATA, length %d", + session->id, stream_id, (int)len); + if (status != APR_SUCCESS) { + rv = nghttp2_submit_rst_stream(ngh2, NGHTTP2_FLAG_NONE, stream_id, + NGHTTP2_INTERNAL_ERROR); + if (nghttp2_is_fatal(rv)) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + } + return 0; +} + +static int before_frame_send_cb(nghttp2_session *ngh2, + const nghttp2_frame *frame, + void *userp) +{ + h2_session *session = (h2_session *)userp; + (void)ngh2; + + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + if (APLOGctrace2(session->c)) { + char buffer[256]; + frame_print(frame, buffer, sizeof(buffer)/sizeof(buffer[0])); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_session(%ld): before_frame_send %s", + session->id, buffer); + } + return 0; +} + +static int on_frame_send_cb(nghttp2_session *ngh2, + const nghttp2_frame *frame, + void *userp) +{ + h2_session *session = (h2_session *)userp; + (void)ngh2; (void)frame; + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c, + "h2_session(%ld): on_frame_send", session->id); + return 0; +} + +static int on_frame_not_send_cb(nghttp2_session *ngh2, + const nghttp2_frame *frame, + int lib_error_code, void *userp) +{ + h2_session *session = (h2_session *)userp; + (void)ngh2; + + if (APLOGctrace2(session->c)) { + char buffer[256]; + + frame_print(frame, buffer, sizeof(buffer)/sizeof(buffer[0])); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_session: callback on_frame_not_send error=%d %s", + lib_error_code, buffer); + } + return 0; +} + +static apr_status_t stream_destroy(h2_session *session, h2_stream *stream) +{ + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_stream(%ld-%d): closing", session->id, (int)stream->id); + h2_stream_set_remove(session->streams, stream); + return h2_mplx_cleanup_stream(session->mplx, stream); +} + +static int on_stream_close_cb(nghttp2_session *ngh2, int32_t stream_id, + uint32_t error_code, void *userp) +{ + h2_session *session = (h2_session *)userp; + (void)ngh2; + + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + h2_stream *stream = h2_stream_set_get(session->streams, stream_id); + if (stream) { + stream_destroy(session, stream); + } + + if (error_code) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_stream(%ld-%d): close error %d", + session->id, (int)stream_id, error_code); + } + + return 0; +} + +static int on_begin_headers_cb(nghttp2_session *ngh2, + const nghttp2_frame *frame, void *userp) +{ + (void)ngh2; + /* This starts a new stream. */ + int rv = stream_open((h2_session *)userp, frame->hd.stream_id); + if (rv != NGHTTP2_ERR_CALLBACK_FAILURE) { + /* on_header_cb or on_frame_recv_cb will dectect that stream + does not exist and submit RST_STREAM. */ + return 0; + } + return NGHTTP2_ERR_CALLBACK_FAILURE; +} + +static int on_header_cb(nghttp2_session *ngh2, const nghttp2_frame *frame, + const uint8_t *name, size_t namelen, + const uint8_t *value, size_t valuelen, + uint8_t flags, + void *userp) +{ + h2_session *session = (h2_session *)userp; + (void)ngh2; (void)flags; + + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + h2_stream * stream = h2_stream_set_get(session->streams, + frame->hd.stream_id); + if (!stream) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, session->c, + "h2_session: stream(%ld-%d): on_header for unknown stream", + session->id, (int)frame->hd.stream_id); + return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; + } + + apr_status_t status = h2_stream_write_header(stream, + (const char *)name, namelen, + (const char *)value, valuelen); + if (status != APR_SUCCESS) { + return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; + } + return 0; +} + +/** + * nghttp2 session has received a complete frame. Most, it uses + * for processing of internal state. HEADER and DATA frames however + * we need to handle ourself. + */ +static int on_frame_recv_cb(nghttp2_session *ng2s, + const nghttp2_frame *frame, + void *userp) +{ + int rv; + h2_session *session = (h2_session *)userp; + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + apr_status_t status = APR_SUCCESS; + + ++session->frames_received; + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, session->c, + "h2_session(%ld): on_frame_rcv #%ld, type=%d", session->id, + (long)session->frames_received, frame->hd.type); + switch (frame->hd.type) { + case NGHTTP2_HEADERS: { + h2_stream * stream = h2_stream_set_get(session->streams, + frame->hd.stream_id); + if (stream == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, session->c, + "h2_session: stream(%ld-%d): HEADERS frame " + "for unknown stream", session->id, + (int)frame->hd.stream_id); + rv = nghttp2_submit_rst_stream(ng2s, NGHTTP2_FLAG_NONE, + frame->hd.stream_id, + NGHTTP2_INTERNAL_ERROR); + if (nghttp2_is_fatal(rv)) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return 0; + } + + int eos = (frame->hd.flags & NGHTTP2_FLAG_END_STREAM); + status = stream_end_headers(session, stream, eos); + + break; + } + case NGHTTP2_DATA: { + h2_stream * stream = h2_stream_set_get(session->streams, + frame->hd.stream_id); + if (stream == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, session->c, + "h2_session: stream(%ld-%d): DATA frame " + "for unknown stream", session->id, + (int)frame->hd.stream_id); + rv = nghttp2_submit_rst_stream(ng2s, NGHTTP2_FLAG_NONE, + frame->hd.stream_id, + NGHTTP2_INTERNAL_ERROR); + if (nghttp2_is_fatal(rv)) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return 0; + } + break; + } + case NGHTTP2_PRIORITY: { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, session->c, + "h2_session: stream(%ld-%d): PRIORITY frame " + " weight=%d, dependsOn=%d, exclusive=%d", + session->id, (int)frame->hd.stream_id, + frame->priority.pri_spec.weight, + frame->priority.pri_spec.stream_id, + frame->priority.pri_spec.exclusive); + break; + } + default: + if (APLOGctrace2(session->c)) { + char buffer[256]; + + frame_print(frame, buffer, + sizeof(buffer)/sizeof(buffer[0])); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c, + "h2_session: on_frame_rcv %s", buffer); + } + break; + } + + /* only DATA and HEADERS frame can bear END_STREAM flag. Other + frame types may have other flag which has the same value, so we + have to check the frame type first. */ + if ((frame->hd.type == NGHTTP2_DATA || frame->hd.type == NGHTTP2_HEADERS) && + frame->hd.flags & NGHTTP2_FLAG_END_STREAM) { + h2_stream * stream = h2_stream_set_get(session->streams, + frame->hd.stream_id); + if (stream != NULL) { + status = h2_stream_write_eos(stream); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, session->c, + "h2_stream(%ld-%d): input closed", + session->id, (int)frame->hd.stream_id); + } + } + + if (status != APR_SUCCESS) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, session->c, + "h2_session: stream(%ld-%d): error handling frame", + session->id, (int)frame->hd.stream_id); + rv = nghttp2_submit_rst_stream(ng2s, NGHTTP2_FLAG_NONE, + frame->hd.stream_id, + NGHTTP2_INTERNAL_ERROR); + if (nghttp2_is_fatal(rv)) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return 0; + } + + return 0; +} + +static apr_status_t send_data(h2_session *session, const char *data, + apr_size_t length) +{ + return h2_conn_io_write(&session->io, data, length); +} + +#if NGHTTP2_HAS_DATA_CB + +static apr_status_t pass_data(void *ctx, + const char *data, apr_size_t length) +{ + return send_data((h2_session*)ctx, data, length); +} + +int on_send_data_cb(nghttp2_session *ngh2, + nghttp2_frame *frame, + const uint8_t *framehd, + size_t length, + nghttp2_data_source *source, + void *userp) +{ + apr_status_t status = APR_SUCCESS; + h2_session *session = (h2_session *)userp; + int stream_id = (int)frame->hd.stream_id; + const unsigned char padlen = frame->data.padlen; + apr_size_t frame_len = 9 + (padlen? 1 : 0) + length + padlen; + apr_size_t data_len = length; + apr_size_t avail, chunk_len; + int rv = 0; + int eos; + h2_stream *stream; + + if (session->aborted) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + stream = h2_stream_set_get(session->streams, stream_id); + if (!stream) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_NOTFOUND, session->c, + "h2_stream(%ld-%d): send_data", + session->id, (int)stream_id); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + status = send_data(session, (const char *)framehd, 9); + if (status == APR_SUCCESS) { + if (padlen) { + status = send_data(session, (const char *)&padlen, 1); + } + + if (status == APR_SUCCESS) { + apr_size_t len = length; + int eos = 0; + status = h2_stream_readx(stream, pass_data, session, + &len, &eos); + if (status == APR_SUCCESS && len != length) { + status = APR_EINVAL; + } + } + + if (status == APR_SUCCESS && padlen) { + if (padlen) { + char pad[256]; + memset(pad, 0, padlen); + status = send_data(session, pad, padlen); + } + } + } + + if (status == APR_SUCCESS) { + return 0; + } + else if (status != APR_EOF) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, session->c, + "h2_stream(%ld-%d): failed send_data_cb", + session->id, (int)stream_id); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + return h2_session_status_from_apr_status(status); +} + +#endif + + +#define NGH2_SET_CALLBACK(callbacks, name, fn)\ +nghttp2_session_callbacks_set_##name##_callback(callbacks, fn) + +static apr_status_t init_callbacks(conn_rec *c, nghttp2_session_callbacks **pcb) +{ + int rv = nghttp2_session_callbacks_new(pcb); + if (rv != 0) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, + "nghttp2_session_callbacks_new: %s", + nghttp2_strerror(rv)); + return APR_EGENERAL; + } + + NGH2_SET_CALLBACK(*pcb, send, send_cb); + NGH2_SET_CALLBACK(*pcb, on_frame_recv, on_frame_recv_cb); + NGH2_SET_CALLBACK(*pcb, on_invalid_frame_recv, on_invalid_frame_recv_cb); + NGH2_SET_CALLBACK(*pcb, on_data_chunk_recv, on_data_chunk_recv_cb); + NGH2_SET_CALLBACK(*pcb, before_frame_send, before_frame_send_cb); + NGH2_SET_CALLBACK(*pcb, on_frame_send, on_frame_send_cb); + NGH2_SET_CALLBACK(*pcb, on_frame_not_send, on_frame_not_send_cb); + NGH2_SET_CALLBACK(*pcb, on_stream_close, on_stream_close_cb); + NGH2_SET_CALLBACK(*pcb, on_begin_headers, on_begin_headers_cb); + NGH2_SET_CALLBACK(*pcb, on_header, on_header_cb); +#if NGHTTP2_HAS_DATA_CB + NGH2_SET_CALLBACK(*pcb, send_data, on_send_data_cb); +#endif + + return APR_SUCCESS; +} + +static h2_session *h2_session_create_int(conn_rec *c, + request_rec *r, + h2_config *config, + h2_workers *workers) +{ + nghttp2_session_callbacks *callbacks = NULL; + nghttp2_option *options = NULL; + + apr_pool_t *pool = NULL; + apr_status_t status = apr_pool_create(&pool, r? r->pool : c->pool); + if (status != APR_SUCCESS) { + return NULL; + } + + h2_session *session = apr_pcalloc(pool, sizeof(h2_session)); + if (session) { + session->id = c->id; + session->c = c; + session->r = r; + + session->max_stream_count = h2_config_geti(config, H2_CONF_MAX_STREAMS); + session->max_stream_mem = h2_config_geti(config, H2_CONF_STREAM_MAX_MEM); + + session->pool = pool; + + status = apr_thread_cond_create(&session->iowait, session->pool); + if (status != APR_SUCCESS) { + return NULL; + } + + session->streams = h2_stream_set_create(session->pool); + + session->workers = workers; + session->mplx = h2_mplx_create(c, session->pool, workers); + + h2_conn_io_init(&session->io, c); + session->bbtmp = apr_brigade_create(session->pool, c->bucket_alloc); + + status = init_callbacks(c, &callbacks); + if (status != APR_SUCCESS) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, c, + "nghttp2: error in init_callbacks"); + h2_session_destroy(session); + return NULL; + } + + int rv = nghttp2_option_new(&options); + if (rv != 0) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, c, + "nghttp2_option_new: %s", nghttp2_strerror(rv)); + h2_session_destroy(session); + return NULL; + } + + nghttp2_option_set_peer_max_concurrent_streams(options, + (uint32_t)session->max_stream_count); + + /* We need to handle window updates ourself, otherwise we + * get flooded by nghttp2. */ + nghttp2_option_set_no_auto_window_update(options, 1); + + rv = nghttp2_session_server_new2(&session->ngh2, callbacks, + session, options); + nghttp2_session_callbacks_del(callbacks); + nghttp2_option_del(options); + + if (rv != 0) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, c, + "nghttp2_session_server_new: %s", + nghttp2_strerror(rv)); + h2_session_destroy(session); + return NULL; + } + + } + return session; +} + +h2_session *h2_session_create(conn_rec *c, h2_config *config, + h2_workers *workers) +{ + return h2_session_create_int(c, NULL, config, workers); +} + +h2_session *h2_session_rcreate(request_rec *r, h2_config *config, + h2_workers *workers) +{ + return h2_session_create_int(r->connection, r, config, workers); +} + +void h2_session_destroy(h2_session *session) +{ + AP_DEBUG_ASSERT(session); + if (session->mplx) { + h2_mplx_release_and_join(session->mplx, session->iowait); + session->mplx = NULL; + } + if (session->streams) { + if (h2_stream_set_size(session->streams)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c, + "h2_session(%ld): destroy, %d streams open", + session->id, (int)h2_stream_set_size(session->streams)); + } + h2_stream_set_destroy(session->streams); + session->streams = NULL; + } + if (session->ngh2) { + nghttp2_session_del(session->ngh2); + session->ngh2 = NULL; + } + h2_conn_io_destroy(&session->io); + + if (session->iowait) { + apr_thread_cond_destroy(session->iowait); + session->iowait = NULL; + } + + if (session->pool) { + apr_pool_destroy(session->pool); + } +} + +apr_status_t h2_session_goaway(h2_session *session, apr_status_t reason) +{ + AP_DEBUG_ASSERT(session); + apr_status_t status = APR_SUCCESS; + if (session->aborted) { + return APR_EINVAL; + } + + int rv = 0; + if (reason == APR_SUCCESS) { + rv = nghttp2_submit_shutdown_notice(session->ngh2); + } + else { + int err = 0; + int last_id = nghttp2_session_get_last_proc_stream_id(session->ngh2); + rv = nghttp2_submit_goaway(session->ngh2, last_id, + NGHTTP2_FLAG_NONE, err, NULL, 0); + } + if (rv != 0) { + status = APR_EGENERAL; + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, session->c, + "session(%ld): submit goaway: %s", + session->id, nghttp2_strerror(rv)); + } + return status; +} + +static apr_status_t h2_session_abort_int(h2_session *session, int reason) +{ + AP_DEBUG_ASSERT(session); + if (!session->aborted) { + session->aborted = 1; + if (session->ngh2) { + if (reason) { + ap_log_cerror(APLOG_MARK, (reason == NGHTTP2_ERR_EOF)? + APLOG_DEBUG : APLOG_INFO, 0, session->c, + "session(%ld): aborting session, reason=%d %s", + session->id, reason, nghttp2_strerror(reason)); + } + nghttp2_session_terminate_session(session->ngh2, reason); + nghttp2_submit_goaway(session->ngh2, 0, 0, reason, NULL, 0); + nghttp2_session_send(session->ngh2); + h2_conn_io_flush(&session->io); + } + h2_mplx_abort(session->mplx); + } + return APR_SUCCESS; +} + +apr_status_t h2_session_abort(h2_session *session, apr_status_t reason, int rv) +{ + AP_DEBUG_ASSERT(session); + if (rv == 0) { + rv = NGHTTP2_ERR_PROTO; + switch (reason) { + case APR_ENOMEM: + rv = NGHTTP2_ERR_NOMEM; + break; + case APR_EOF: + rv = 0; + break; + case APR_EBADF: + case APR_ECONNABORTED: + rv = NGHTTP2_ERR_EOF; + break; + default: + break; + } + } + return h2_session_abort_int(session, rv); +} + +apr_status_t h2_session_start(h2_session *session, int *rv) +{ + AP_DEBUG_ASSERT(session); + /* Start the conversation by submitting our SETTINGS frame */ + apr_status_t status = APR_SUCCESS; + *rv = 0; + h2_config *config = h2_config_get(session->c); + if (session->r) { + /* better for vhost matching */ + config = h2_config_rget(session->r); + + /* 'h2c' mode: we should have a 'HTTP2-Settings' header with + * base64 encoded client settings. */ + const char *s = apr_table_get(session->r->headers_in, "HTTP2-Settings"); + if (!s) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EINVAL, session->r, + "HTTP2-Settings header missing in request"); + return APR_EINVAL; + } + unsigned char *cs = NULL; + apr_size_t dlen = h2_util_base64url_decode(&cs, s, session->pool); + + if (APLOGrdebug(session->r)) { + char buffer[128]; + h2_util_hex_dump(buffer, 128, (char*)cs, dlen); + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, session->r, + "upgrading h2c session with HTTP2-Settings: %s -> %s (%d)", + s, buffer, (int)dlen); + } + + *rv = nghttp2_session_upgrade(session->ngh2, (uint8_t*)cs, dlen, NULL); + if (*rv != 0) { + status = APR_EINVAL; + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, session->r, + "nghttp2_session_upgrade: %s", nghttp2_strerror(*rv)); + return status; + } + + /* Now we need to auto-open stream 1 for the request we got. */ + *rv = stream_open(session, 1); + if (*rv != 0) { + status = APR_EGENERAL; + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, session->r, + "open stream 1: %s", nghttp2_strerror(*rv)); + return status; + } + + h2_stream * stream = h2_stream_set_get(session->streams, 1); + if (stream == NULL) { + status = APR_EGENERAL; + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, session->r, + "lookup of stream 1"); + return status; + } + + status = h2_stream_rwrite(stream, session->r); + if (status != APR_SUCCESS) { + return status; + } + status = stream_end_headers(session, stream, 1); + if (status != APR_SUCCESS) { + return status; + } + } + + nghttp2_settings_entry settings[] = { + { NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE, + h2_config_geti(config, H2_CONF_MAX_HL_SIZE) }, + { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, + h2_config_geti(config, H2_CONF_WIN_SIZE) }, + {NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, + (uint32_t)session->max_stream_count }, + }; + *rv = nghttp2_submit_settings(session->ngh2, NGHTTP2_FLAG_NONE, + settings, + sizeof(settings)/sizeof(settings[0])); + if (*rv != 0) { + status = APR_EGENERAL; + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, session->c, + "nghttp2_submit_settings: %s", nghttp2_strerror(*rv)); + } + + return status; +} + +static int h2_session_want_write(h2_session *session) +{ + return nghttp2_session_want_write(session->ngh2); +} + +typedef struct { + h2_session *session; + int resume_count; +} resume_ctx; + +static int resume_on_data(void *ctx, h2_stream *stream) { + resume_ctx *rctx = (resume_ctx*)ctx; + h2_session *session = rctx->session; + AP_DEBUG_ASSERT(session); + AP_DEBUG_ASSERT(stream); + + if (h2_stream_is_suspended(stream)) { + if (h2_mplx_out_has_data_for(stream->m, stream->id)) { + h2_stream_set_suspended(stream, 0); + ++rctx->resume_count; + + int rv = nghttp2_session_resume_data(session->ngh2, stream->id); + ap_log_cerror(APLOG_MARK, nghttp2_is_fatal(rv)? + APLOG_ERR : APLOG_DEBUG, 0, session->c, + "h2_stream(%ld-%d): resuming stream %s", + session->id, stream->id, nghttp2_strerror(rv)); + } + } + return 1; +} + +static int h2_session_resume_streams_with_data(h2_session *session) { + AP_DEBUG_ASSERT(session); + if (!h2_stream_set_is_empty(session->streams) + && session->mplx && !session->aborted) { + resume_ctx ctx = { session, 0 }; + /* Resume all streams where we have data in the out queue and + * which had been suspended before. */ + h2_stream_set_iter(session->streams, resume_on_data, &ctx); + return ctx.resume_count; + } + return 0; +} + +static void update_window(void *ctx, int stream_id, apr_size_t bytes_read) +{ + h2_session *session = (h2_session*)ctx; + nghttp2_session_consume(session->ngh2, stream_id, bytes_read); +} + +static apr_status_t h2_session_update_windows(h2_session *session) +{ + return h2_mplx_in_update_windows(session->mplx, update_window, session); +} + +apr_status_t h2_session_write(h2_session *session, apr_interval_time_t timeout) +{ + apr_status_t status = APR_EAGAIN; + h2_stream *stream = NULL; + int flush_output = 0; + + AP_DEBUG_ASSERT(session); + + /* Check that any pending window updates are sent. */ + status = h2_session_update_windows(session); + if (status == APR_SUCCESS) { + flush_output = 1; + } + else if (status != APR_EAGAIN) { + return status; + } + + if (h2_session_want_write(session)) { + status = APR_SUCCESS; + int rv = nghttp2_session_send(session->ngh2); + if (rv != 0) { + ap_log_cerror( APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_session: send: %s", nghttp2_strerror(rv)); + if (nghttp2_is_fatal(rv)) { + h2_session_abort_int(session, rv); + status = APR_ECONNABORTED; + } + } + flush_output = 1; + } + + /* If we have responses ready, submit them now. */ + while ((stream = h2_mplx_next_submit(session->mplx, + session->streams)) != NULL) { + status = h2_session_handle_response(session, stream); + flush_output = 1; + } + + if (h2_session_resume_streams_with_data(session) > 0) { + flush_output = 1; + } + + if (!flush_output && timeout > 0 && !h2_session_want_write(session)) { + status = h2_mplx_out_trywait(session->mplx, timeout, session->iowait); + + if (status != APR_TIMEUP + && h2_session_resume_streams_with_data(session) > 0) { + flush_output = 1; + } + else { + /* nothing happened to ongoing streams, do some house-keeping */ + } + } + + if (h2_session_want_write(session)) { + status = APR_SUCCESS; + int rv = nghttp2_session_send(session->ngh2); + if (rv != 0) { + ap_log_cerror( APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_session: send2: %s", nghttp2_strerror(rv)); + if (nghttp2_is_fatal(rv)) { + h2_session_abort_int(session, rv); + status = APR_ECONNABORTED; + } + } + flush_output = 1; + } + + if (flush_output) { + h2_conn_io_flush(&session->io); + } + + return status; +} + +h2_stream *h2_session_get_stream(h2_session *session, int stream_id) +{ + AP_DEBUG_ASSERT(session); + return h2_stream_set_get(session->streams, stream_id); +} + +/* h2_io_on_read_cb implementation that offers the data read + * directly to the session for consumption. + */ +static apr_status_t session_receive(const char *data, apr_size_t len, + apr_size_t *readlen, int *done, + void *puser) +{ + h2_session *session = (h2_session *)puser; + AP_DEBUG_ASSERT(session); + if (len > 0) { + ssize_t n = nghttp2_session_mem_recv(session->ngh2, + (const uint8_t *)data, len); + if (n < 0) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_EGENERAL, + session->c, + "h2_session: nghttp2_session_mem_recv error %d", + (int)n); + if (nghttp2_is_fatal((int)n)) { + *done = 1; + h2_session_abort_int(session, (int)n); + return APR_EGENERAL; + } + } + else { + *readlen = n; + } + } + return APR_SUCCESS; +} + +apr_status_t h2_session_read(h2_session *session, apr_read_type_e block) +{ + AP_DEBUG_ASSERT(session); + return h2_conn_io_read(&session->io, block, session_receive, session); +} + +apr_status_t h2_session_close(h2_session *session) +{ + AP_DEBUG_ASSERT(session); + return h2_conn_io_flush(&session->io); +} + +/* The session wants to send more DATA for the given stream. + */ +static ssize_t stream_data_cb(nghttp2_session *ng2s, + int32_t stream_id, + uint8_t *buf, + size_t length, + uint32_t *data_flags, + nghttp2_data_source *source, + void *puser) +{ + h2_session *session = (h2_session *)puser; + AP_DEBUG_ASSERT(session); + (void)ng2s;(void)source; + + h2_stream *stream = h2_stream_set_get(session->streams, stream_id); + if (!stream) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_NOTFOUND, session->c, + "h2_stream(%ld-%d): data requested but stream not found", + session->id, (int)stream_id); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + AP_DEBUG_ASSERT(!h2_stream_is_suspended(stream)); + apr_size_t nread = length; + int eos = 0; + +#if NGHTTP2_HAS_DATA_CB + apr_status_t status = h2_stream_prep_read(stream, &nread, &eos); + if (nread) { + *data_flags |= NGHTTP2_DATA_FLAG_NO_COPY; + } +#else + /* Try to pop data buckets from our queue for this stream + * until we see EOS or the buffer is full. + */ + apr_status_t status = h2_stream_read(stream, (char*)buf, &nread, &eos); +#endif + + switch (status) { + case APR_SUCCESS: + break; + + case APR_EAGAIN: + /* If there is no data available, our session will automatically + * suspend this stream and not ask for more data until we resume + * it. Remember at our h2_stream that we need to do this. + */ + nread = 0; + h2_stream_set_suspended(stream, 1); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_stream(%ld-%d): suspending stream", + session->id, (int)stream_id); + return NGHTTP2_ERR_DEFERRED; + + case APR_EOF: + nread = 0; + eos = 1; + break; + + default: + nread = 0; + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, session->c, + "h2_stream(%ld-%d): reading data", + session->id, (int)stream_id); + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + if (eos) { + *data_flags |= NGHTTP2_DATA_FLAG_EOF; + } + + return (ssize_t)nread; +} + +typedef struct { + nghttp2_nv *nv; + size_t nvlen; + size_t offset; +} nvctx_t; + +static int submit_response(h2_session *session, h2_response *response) +{ + nghttp2_data_provider provider = { + (nghttp2_data_source) response->stream_id, + (nghttp2_data_source_read_callback) stream_data_cb + }; + + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, session->c, + "h2_stream(%ld-%d): submitting response %s", + session->id, response->stream_id, response->headers->status); + + int rv = nghttp2_submit_response(session->ngh2, response->stream_id, + response->headers->nv, + response->headers->nvlen, &provider); + + if (rv != 0) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, session->c, + "h2_stream(%ld-%d): submit_response: %s", + session->id, response->stream_id, nghttp2_strerror(rv)); + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c, + "h2_stream(%ld-%d): submitted response %s, rv=%d", + session->id, response->stream_id, + response->headers->status, rv); + } + return rv; +} + +/* Start submitting the response to a stream request. This is possible + * once we have all the response headers. The response body will be + * read by the session using the callback we supply. + */ +apr_status_t h2_session_handle_response(h2_session *session, h2_stream *stream) +{ + AP_DEBUG_ASSERT(session); + AP_DEBUG_ASSERT(stream); + AP_DEBUG_ASSERT(stream->response); + + apr_status_t status = APR_SUCCESS; + int rv = 0; + if (stream->response->headers) { + rv = submit_response(session, stream->response); + } + else { + rv = nghttp2_submit_rst_stream(session->ngh2, NGHTTP2_FLAG_NONE, + stream->id, NGHTTP2_PROTOCOL_ERROR); + } + + if (nghttp2_is_fatal(rv)) { + status = APR_EGENERAL; + h2_session_abort_int(session, rv); + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, session->c, + "submit_response: %s", nghttp2_strerror(rv)); + } + return status; +} + +int h2_session_is_done(h2_session *session) +{ + AP_DEBUG_ASSERT(session); + return (session->aborted + || !session->ngh2 + || (!nghttp2_session_want_read(session->ngh2) + && !nghttp2_session_want_write(session->ngh2))); +} + +static int log_stream(void *ctx, h2_stream *stream) +{ + h2_session *session = (h2_session *)ctx; + AP_DEBUG_ASSERT(session); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, session->c, + "h2_stream(%ld-%d): in set, suspended=%d, aborted=%d, " + "has_data=%d", + session->id, stream->id, stream->suspended, stream->aborted, + h2_mplx_out_has_data_for(session->mplx, stream->id)); + return 1; +} + +void h2_session_log_stats(h2_session *session) +{ + AP_DEBUG_ASSERT(session); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, session->c, + "h2_session(%ld): %d open streams", + session->id, (int)h2_stream_set_size(session->streams)); + h2_stream_set_iter(session->streams, log_stream, session); +} + +static int frame_print(const nghttp2_frame *frame, char *buffer, size_t maxlen) +{ + char scratch[128]; + size_t s_len = sizeof(scratch)/sizeof(scratch[0]); + + switch (frame->hd.type) { + case NGHTTP2_DATA: { + return apr_snprintf(buffer, maxlen, + "DATA[length=%d, flags=%d, stream=%d, padlen=%d]", + (int)frame->hd.length, frame->hd.flags, + frame->hd.stream_id, (int)frame->data.padlen); + } + case NGHTTP2_HEADERS: { + return apr_snprintf(buffer, maxlen, + "HEADERS[length=%d, hend=%d, stream=%d, eos=%d]", + (int)frame->hd.length, + !!(frame->hd.flags & NGHTTP2_FLAG_END_HEADERS), + frame->hd.stream_id, + !!(frame->hd.flags & NGHTTP2_FLAG_END_STREAM)); + } + case NGHTTP2_PRIORITY: { + return apr_snprintf(buffer, maxlen, + "PRIORITY[length=%d, flags=%d, stream=%d]", + (int)frame->hd.length, + frame->hd.flags, frame->hd.stream_id); + } + case NGHTTP2_RST_STREAM: { + return apr_snprintf(buffer, maxlen, + "RST_STREAM[length=%d, flags=%d, stream=%d]", + (int)frame->hd.length, + frame->hd.flags, frame->hd.stream_id); + } + case NGHTTP2_SETTINGS: { + if (frame->hd.flags & NGHTTP2_FLAG_ACK) { + return apr_snprintf(buffer, maxlen, + "SETTINGS[ack=1, stream=%d]", + frame->hd.stream_id); + } + return apr_snprintf(buffer, maxlen, + "SETTINGS[length=%d, stream=%d]", + (int)frame->hd.length, frame->hd.stream_id); + } + case NGHTTP2_PUSH_PROMISE: { + return apr_snprintf(buffer, maxlen, + "PUSH_PROMISE[length=%d, hend=%d, stream=%d]", + (int)frame->hd.length, + !!(frame->hd.flags & NGHTTP2_FLAG_END_HEADERS), + frame->hd.stream_id); + } + case NGHTTP2_PING: { + return apr_snprintf(buffer, maxlen, + "PING[length=%d, ack=%d, stream=%d]", + (int)frame->hd.length, + frame->hd.flags&NGHTTP2_FLAG_ACK, + frame->hd.stream_id); + } + case NGHTTP2_GOAWAY: { + size_t len = (frame->goaway.opaque_data_len < s_len)? + frame->goaway.opaque_data_len : s_len-1; + memcpy(scratch, frame->goaway.opaque_data, len); + scratch[len+1] = '\0'; + return apr_snprintf(buffer, maxlen, "GOAWAY[error=%d, reason='%s']", + frame->goaway.error_code, scratch); + } + case NGHTTP2_WINDOW_UPDATE: { + return apr_snprintf(buffer, maxlen, + "WINDOW_UPDATE[length=%d, stream=%d]", + (int)frame->hd.length, frame->hd.stream_id); + } + default: + return apr_snprintf(buffer, maxlen, + "FRAME[type=%d, length=%d, flags=%d, stream=%d]", + frame->hd.type, (int)frame->hd.length, + frame->hd.flags, frame->hd.stream_id); + } +} + diff --git a/modules/http2/mod_h2/h2_session.h b/modules/http2/mod_h2/h2_session.h new file mode 100644 index 0000000000..77dd440a55 --- /dev/null +++ b/modules/http2/mod_h2/h2_session.h @@ -0,0 +1,137 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_session__ +#define __mod_h2__h2_session__ + +#include "h2_conn_io.h" + +/** + * A HTTP/2 connection, a session with a specific client. + * + * h2_session sits on top of a httpd conn_rec* instance and takes complete + * control of the connection data. It receives protocol frames from the + * client. For new HTTP/2 streams it creates h2_task(s) that are sent + * via callback to a dispatcher (see h2_conn.c). + * h2_session keeps h2_io's for each ongoing stream which buffer the + * payload for that stream. + * + * New incoming HEADER frames are converted into a h2_stream+h2_task instance + * that both represent a HTTP/2 stream, but may have separate lifetimes. This + * allows h2_task to be scheduled in other threads without semaphores + * all over the place. It allows task memory to be freed independant of + * session lifetime and sessions may close down while tasks are still running. + * + * + */ + +struct apr_thread_mutext_t; +struct apr_thread_cond_t; +struct h2_config; +struct h2_mplx; +struct h2_response; +struct h2_session; +struct h2_stream; +struct h2_task; +struct h2_workers; + +struct nghttp2_session; + +typedef struct h2_session h2_session; + +struct h2_session { + long id; /* identifier of this session, unique + * inside a httpd process */ + conn_rec *c; /* the connection this session serves */ + request_rec *r; /* the request that started this in case + * of 'h2c', NULL otherwise */ + int aborted; /* this session is being aborted */ + apr_size_t frames_received; /* number of http/2 frames received */ + apr_size_t max_stream_count; /* max number of open streams */ + apr_size_t max_stream_mem; /* max buffer memory for a single stream */ + + apr_pool_t *pool; /* pool to use in session handling */ + apr_bucket_brigade *bbtmp; /* brigade for keeping temporary data */ + struct apr_thread_cond_t *iowait; /* our cond when trywaiting for data */ + + h2_conn_io io; /* io on httpd conn filters */ + struct h2_mplx *mplx; /* multiplexer for stream data */ + + struct h2_stream_set *streams; /* streams handled by this session */ + + struct nghttp2_session *ngh2; /* the nghttp2 session (internal use) */ + struct h2_workers *workers; /* for executing stream tasks */ +}; + + +/* Create a new h2_session for the given connection (mode 'h2'). + * The session will apply the configured parameter. + */ +h2_session *h2_session_create(conn_rec *c, struct h2_config *cfg, + struct h2_workers *workers); + +/* Create a new h2_session for the given request (mode 'h2c'). + * The session will apply the configured parameter. + */ +h2_session *h2_session_rcreate(request_rec *r, struct h2_config *cfg, + struct h2_workers *workers); + +/* Destroy the session and all object it still contains. This will not + * destroy h2_task instances that not finished yet. */ +void h2_session_destroy(h2_session *session); + +/* Called once at start of session. Performs initial client thingies. */ +apr_status_t h2_session_start(h2_session *session, int *rv); + +/* Return != 0 iff session is finished and connection can be closed. + */ +int h2_session_is_done(h2_session *session); + +/* Called when the session will shutdown after all open streams + * are handled. New streams will no longer be accepted. + * Call with reason APR_SUCCESS to initiate a graceful shutdown. */ +apr_status_t h2_session_goaway(h2_session *session, apr_status_t reason); + +/* Called when an error occured and the session needs to shut down. + * Status indicates the reason of the error. */ +apr_status_t h2_session_abort(h2_session *session, apr_status_t reason, int rv); + +/* Called before a session gets destroyed, might flush output etc. */ +apr_status_t h2_session_close(h2_session *session); + +/* Read more data from the client connection. Used normally with blocking + * APR_NONBLOCK_READ, which will return APR_EAGAIN when no data is available. + * Use with APR_BLOCK_READ only when certain that no data needs to be written + * while waiting. */ +apr_status_t h2_session_read(h2_session *session, apr_read_type_e block); + +/* Write data out to the client, if there is any. Otherwise, wait for + * a maximum of timeout micro-seconds and return to the caller. If timeout + * occurred, APR_TIMEUP will be returned. + */ +apr_status_t h2_session_write(h2_session *session, + apr_interval_time_t timeout); + +/* Start submitting the response to a stream request. This is possible + * once we have all the response headers. */ +apr_status_t h2_session_handle_response(h2_session *session, + struct h2_stream *stream); + +/* Get the h2_stream for the given stream idenrtifier. */ +struct h2_stream *h2_session_get_stream(h2_session *session, int stream_id); + +void h2_session_log_stats(h2_session *session); + +#endif /* defined(__mod_h2__h2_session__) */ diff --git a/modules/http2/mod_h2/h2_stream.c b/modules/http2/mod_h2/h2_stream.c new file mode 100644 index 0000000000..29add7bfe5 --- /dev/null +++ b/modules/http2/mod_h2/h2_stream.c @@ -0,0 +1,297 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#define APR_POOL_DEBUG 7 + +#include +#include +#include +#include + +#include + +#include "h2_private.h" +#include "h2_conn.h" +#include "h2_mplx.h" +#include "h2_request.h" +#include "h2_response.h" +#include "h2_stream.h" +#include "h2_task.h" +#include "h2_ctx.h" +#include "h2_task_input.h" +#include "h2_task.h" +#include "h2_util.h" + + +static void set_state(h2_stream *stream, h2_stream_state_t state) +{ + AP_DEBUG_ASSERT(stream); + if (stream->state != state) { + stream->state = state; + } +} + +h2_stream *h2_stream_create(int id, apr_pool_t *pool, struct h2_mplx *m) +{ + h2_stream *stream = apr_pcalloc(pool, sizeof(h2_stream)); + if (stream != NULL) { + stream->id = id; + stream->state = H2_STREAM_ST_IDLE; + stream->pool = pool; + stream->m = m; + stream->request = h2_request_create(id, pool, m->c->bucket_alloc); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, m->c, + "h2_stream(%ld-%d): created", m->id, stream->id); + } + return stream; +} + +void h2_stream_cleanup(h2_stream *stream) +{ + if (stream->request) { + h2_request_destroy(stream->request); + stream->request = NULL; + } +} + +apr_status_t h2_stream_destroy(h2_stream *stream) +{ + AP_DEBUG_ASSERT(stream); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, stream->m->c, + "h2_stream(%ld-%d): destroy", stream->m->id, stream->id); + h2_stream_cleanup(stream); + + if (stream->task) { + h2_task_destroy(stream->task); + stream->task = NULL; + } + if (stream->pool) { + apr_pool_destroy(stream->pool); + } + return APR_SUCCESS; +} + +void h2_stream_attach_pool(h2_stream *stream, apr_pool_t *pool) +{ + stream->pool = pool; +} + +apr_pool_t *h2_stream_detach_pool(h2_stream *stream) +{ + apr_pool_t *pool = stream->pool; + stream->pool = NULL; + return pool; +} + +void h2_stream_abort(h2_stream *stream) +{ + AP_DEBUG_ASSERT(stream); + stream->aborted = 1; +} + +apr_status_t h2_stream_set_response(h2_stream *stream, h2_response *response, + apr_bucket_brigade *bb) +{ + stream->response = response; + if (bb && !APR_BRIGADE_EMPTY(bb)) { + if (!stream->bbout) { + stream->bbout = apr_brigade_create(stream->pool, + stream->m->c->bucket_alloc); + } + return h2_util_move(stream->bbout, bb, 16 * 1024, 1, NULL, + "h2_stream_set_response"); + } + return APR_SUCCESS; +} + +static int set_closed(h2_stream *stream) +{ + switch (stream->state) { + case H2_STREAM_ST_CLOSED_INPUT: + case H2_STREAM_ST_CLOSED: + return 0; /* ignore, idempotent */ + case H2_STREAM_ST_CLOSED_OUTPUT: + /* both closed now */ + set_state(stream, H2_STREAM_ST_CLOSED); + break; + default: + /* everything else we jump to here */ + set_state(stream, H2_STREAM_ST_CLOSED_INPUT); + break; + } + return 1; +} + +apr_status_t h2_stream_rwrite(h2_stream *stream, request_rec *r) +{ + AP_DEBUG_ASSERT(stream); + set_state(stream, H2_STREAM_ST_OPEN); + apr_status_t status = h2_request_rwrite(stream->request, r, stream->m); + return status; +} + +apr_status_t h2_stream_write_eoh(h2_stream *stream, int eos) +{ + AP_DEBUG_ASSERT(stream); + /* Seeing the end-of-headers, we have everything we need to + * start processing it. + */ + conn_rec *c = h2_conn_create(stream->m->c, stream->pool); + if (c == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_ENOMEM, stream->m->c, + "h2_stream(%ld-%d): create connection", + stream->m->id, stream->id); + return APR_ENOMEM; + } + stream->task = h2_task_create(stream->m->id, stream->id, + stream->pool, stream->m, c); + + apr_status_t status = h2_request_end_headers(stream->request, + stream->m, stream->task, eos); + if (status == APR_SUCCESS) { + status = h2_mplx_do_task(stream->m, stream->task); + } + if (eos) { + status = h2_stream_write_eos(stream); + } + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, stream->m->c, + "h2_stream(%ld-%d): end header, task %s %s (%s)", + stream->m->id, stream->id, + stream->request->method, stream->request->path, + stream->request->authority); + + return status; +} + +apr_status_t h2_stream_write_eos(h2_stream *stream) +{ + AP_DEBUG_ASSERT(stream); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, stream->m->c, + "h2_stream(%ld-%d): closing input", + stream->m->id, stream->id); + if (set_closed(stream)) { + return h2_request_close(stream->request); + } + return APR_SUCCESS; +} + +apr_status_t h2_stream_write_header(h2_stream *stream, + const char *name, size_t nlen, + const char *value, size_t vlen) +{ + AP_DEBUG_ASSERT(stream); + switch (stream->state) { + case H2_STREAM_ST_IDLE: + set_state(stream, H2_STREAM_ST_OPEN); + break; + case H2_STREAM_ST_OPEN: + break; + default: + return APR_EINVAL; + } + return h2_request_write_header(stream->request, name, nlen, + value, vlen, stream->m); +} + +apr_status_t h2_stream_write_data(h2_stream *stream, + const char *data, size_t len) +{ + AP_DEBUG_ASSERT(stream); + AP_DEBUG_ASSERT(stream); + switch (stream->state) { + case H2_STREAM_ST_OPEN: + break; + default: + return APR_EINVAL; + } + return h2_request_write_data(stream->request, data, len); +} + +apr_status_t h2_stream_prep_read(h2_stream *stream, + apr_size_t *plen, int *peos) +{ + apr_status_t status = APR_SUCCESS; + const char *src; + + if (stream->bbout && !APR_BRIGADE_EMPTY(stream->bbout)) { + src = "stream"; + status = h2_util_bb_avail(stream->bbout, plen, peos); + if (status == APR_SUCCESS && !*peos && !*plen) { + apr_brigade_cleanup(stream->bbout); + return h2_stream_prep_read(stream, plen, peos); + } + } + else { + src = "mplx"; + status = h2_mplx_out_readx(stream->m, stream->id, + NULL, NULL, plen, peos); + } + if (status == APR_SUCCESS && !*peos && !*plen) { + status = APR_EAGAIN; + } + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, stream->m->c, + "h2_stream(%ld-%d): prep_read %s, len=%ld eos=%d", + stream->m->id, stream->id, + src, (long)*plen, *peos); + return status; +} + +apr_status_t h2_stream_readx(h2_stream *stream, + h2_io_data_cb *cb, void *ctx, + apr_size_t *plen, int *peos) +{ + if (stream->bbout && !APR_BRIGADE_EMPTY(stream->bbout)) { + return h2_util_bb_readx(stream->bbout, cb, ctx, plen, peos); + } + return h2_mplx_out_readx(stream->m, stream->id, + cb, ctx, plen, peos); +} + + +apr_status_t h2_stream_read(h2_stream *stream, char *buffer, + apr_size_t *plen, int *peos) +{ + apr_status_t status = APR_SUCCESS; + const char *src; + if (stream->bbout && !APR_BRIGADE_EMPTY(stream->bbout)) { + src = "stream"; + status = h2_util_bb_read(stream->bbout, buffer, plen, peos); + } + else { + src = "mplx"; + status = h2_mplx_out_read(stream->m, stream->id, buffer, plen, peos); + } + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, stream->m->c, + "h2_stream(%ld-%d): read %s, len=%ld eos=%d", + stream->m->id, stream->id, + src, (long)*plen, *peos); + return status; +} + +void h2_stream_set_suspended(h2_stream *stream, int suspended) +{ + AP_DEBUG_ASSERT(stream); + stream->suspended = !!suspended; +} + +int h2_stream_is_suspended(h2_stream *stream) +{ + AP_DEBUG_ASSERT(stream); + return stream->suspended; +} + diff --git a/modules/http2/mod_h2/h2_stream.h b/modules/http2/mod_h2/h2_stream.h new file mode 100644 index 0000000000..9df2886834 --- /dev/null +++ b/modules/http2/mod_h2/h2_stream.h @@ -0,0 +1,111 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_stream__ +#define __mod_h2__h2_stream__ + +/** + * A HTTP/2 stream, e.g. a client request+response in HTTP/1.1 terms. + * + * Ok, not quite, but close enough, since we do not implement server + * pushes yet. + * + * A stream always belongs to a h2_session, the one managing the + * connection to the client. The h2_session writes to the h2_stream, + * adding HEADERS and DATA and finally an EOS. When headers are done, + * h2_stream can create a h2_task that can be scheduled to fullfill the + * request. + * + * This response headers are added directly to the h2_mplx of the session, + * but the response DATA can be read via h2_stream. Reading data will + * never block but return APR_EAGAIN when there currently is no data (and + * no eos) in the multiplexer for this stream. + */ +#include "h2_io.h" + +typedef enum { + H2_STREAM_ST_IDLE, + H2_STREAM_ST_OPEN, + H2_STREAM_ST_RESV_LOCAL, + H2_STREAM_ST_RESV_REMOTE, + H2_STREAM_ST_CLOSED_INPUT, + H2_STREAM_ST_CLOSED_OUTPUT, + H2_STREAM_ST_CLOSED, +} h2_stream_state_t; + +struct h2_mplx; +struct h2_request; +struct h2_response; +struct h2_task; + +typedef struct h2_stream h2_stream; + +struct h2_stream { + int id; /* http2 stream id */ + h2_stream_state_t state; /* http/2 state of this stream */ + struct h2_mplx *m; /* the multiplexer to work with */ + + int aborted; /* was aborted */ + int suspended; /* DATA sending has been suspended */ + + apr_pool_t *pool; /* the memory pool for this stream */ + struct h2_request *request; /* the request made in this stream */ + + struct h2_task *task; /* task created for this stream */ + struct h2_response *response; /* the response, once ready */ + apr_bucket_brigade *bbout; /* output DATA */ +}; + + +h2_stream *h2_stream_create(int id, apr_pool_t *pool, struct h2_mplx *m); + +apr_status_t h2_stream_destroy(h2_stream *stream); +void h2_stream_cleanup(h2_stream *stream); + +apr_pool_t *h2_stream_detach_pool(h2_stream *stream); +void h2_stream_attach_pool(h2_stream *stream, apr_pool_t *pool); + +void h2_stream_abort(h2_stream *stream); + +apr_status_t h2_stream_rwrite(h2_stream *stream, request_rec *r); + +apr_status_t h2_stream_write_eos(h2_stream *stream); + +apr_status_t h2_stream_write_header(h2_stream *stream, + const char *name, size_t nlen, + const char *value, size_t vlen); + +apr_status_t h2_stream_write_eoh(h2_stream *stream, int eos); + +apr_status_t h2_stream_write_data(h2_stream *stream, + const char *data, size_t len); + +apr_status_t h2_stream_set_response(h2_stream *stream, + struct h2_response *response, + apr_bucket_brigade *bb); + +apr_status_t h2_stream_read(h2_stream *stream, char *buffer, + apr_size_t *plen, int *peos); + +apr_status_t h2_stream_prep_read(h2_stream *stream, + apr_size_t *plen, int *peos); + +apr_status_t h2_stream_readx(h2_stream *stream, h2_io_data_cb *cb, + void *ctx, apr_size_t *plen, int *peos); + +void h2_stream_set_suspended(h2_stream *stream, int suspended); +int h2_stream_is_suspended(h2_stream *stream); + +#endif /* defined(__mod_h2__h2_stream__) */ diff --git a/modules/http2/mod_h2/h2_stream_set.c b/modules/http2/mod_h2/h2_stream_set.c new file mode 100644 index 0000000000..bf7fd62251 --- /dev/null +++ b/modules/http2/mod_h2/h2_stream_set.c @@ -0,0 +1,158 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_session.h" +#include "h2_stream.h" +#include "h2_task.h" +#include "h2_stream_set.h" + +#define H2_STREAM_IDX(list, i) ((h2_stream**)(list)->elts)[i] + +struct h2_stream_set { + apr_array_header_t *list; +}; + +h2_stream_set *h2_stream_set_create(apr_pool_t *pool) +{ + h2_stream_set *sp = apr_pcalloc(pool, sizeof(h2_stream_set)); + if (sp) { + sp->list = apr_array_make(pool, 100, sizeof(h2_stream*)); + if (!sp->list) { + return NULL; + } + } + return sp; +} + +void h2_stream_set_destroy(h2_stream_set *sp) +{ + (void)sp; +} + +static int h2_stream_id_cmp(const void *s1, const void *s2) +{ + h2_stream **pstream1 = (h2_stream **)s1; + h2_stream **pstream2 = (h2_stream **)s2; + return (*pstream1)->id - (*pstream2)->id; +} + +h2_stream *h2_stream_set_get(h2_stream_set *sp, int stream_id) +{ + /* we keep the array sorted by id, so lookup can be done + * by bsearch. + */ + h2_stream key; + memset(&key, 0, sizeof(key)); + key.id = stream_id; + h2_stream *pkey = &key; + h2_stream **ps = bsearch(&pkey, sp->list->elts, sp->list->nelts, + sp->list->elt_size, h2_stream_id_cmp); + return ps? *ps : NULL; +} + +static void h2_stream_set_sort(h2_stream_set *sp) +{ + qsort(sp->list->elts, sp->list->nelts, sp->list->elt_size, + h2_stream_id_cmp); +} + +apr_status_t h2_stream_set_add(h2_stream_set *sp, h2_stream *stream) +{ + h2_stream *existing = h2_stream_set_get(sp, stream->id); + if (!existing) { + APR_ARRAY_PUSH(sp->list, h2_stream*) = stream; + /* Normally, streams get added in ascending order if id. We + * keep the array sorted, so we just need to check of the newly + * appended stream has a lower id than the last one. if not, + * sorting is not necessary. + */ + int last = sp->list->nelts - 1; + if (last > 0 + && (H2_STREAM_IDX(sp->list, last)->id + < H2_STREAM_IDX(sp->list, last-1)->id)) { + h2_stream_set_sort(sp); + } + } + return APR_SUCCESS; +} + +h2_stream *h2_stream_set_remove(h2_stream_set *sp, h2_stream *stream) +{ + for (int i = 0; i < sp->list->nelts; ++i) { + h2_stream *s = H2_STREAM_IDX(sp->list, i); + if (s == stream) { + --sp->list->nelts; + int n = sp->list->nelts - i; + if (n > 0) { + /* Close the hole in the array by moving the upper + * parts down one step. + */ + h2_stream **selts = (h2_stream**)sp->list->elts; + memmove(selts+i, selts+i+1, n * sizeof(h2_stream*)); + } + return s; + } + } + return NULL; +} + +void h2_stream_set_remove_all(h2_stream_set *sp) +{ + sp->list->nelts = 0; +} + +int h2_stream_set_is_empty(h2_stream_set *sp) +{ + AP_DEBUG_ASSERT(sp); + return sp->list->nelts == 0; +} + +h2_stream *h2_stream_set_find(h2_stream_set *sp, + h2_stream_set_match_fn match, void *ctx) +{ + h2_stream *s = NULL; + for (int i = 0; !s && i < sp->list->nelts; ++i) { + s = match(ctx, H2_STREAM_IDX(sp->list, i)); + } + return s; +} + +void h2_stream_set_iter(h2_stream_set *sp, + h2_stream_set_iter_fn *iter, void *ctx) +{ + for (int i = 0; i < sp->list->nelts; ++i) { + h2_stream *s = H2_STREAM_IDX(sp->list, i); + if (!iter(ctx, s)) { + break; + } + } +} + +apr_size_t h2_stream_set_size(h2_stream_set *sp) +{ + return sp->list->nelts; +} + diff --git a/modules/http2/mod_h2/h2_stream_set.h b/modules/http2/mod_h2/h2_stream_set.h new file mode 100644 index 0000000000..5607583455 --- /dev/null +++ b/modules/http2/mod_h2/h2_stream_set.h @@ -0,0 +1,52 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_stream_set__ +#define __mod_h2__h2_stream_set__ + +/** + * A set of h2_stream instances. Allows lookup by stream id + * and other criteria. + */ + +typedef h2_stream *h2_stream_set_match_fn(void *ctx, h2_stream *stream); +typedef int h2_stream_set_iter_fn(void *ctx, h2_stream *stream); + +typedef struct h2_stream_set h2_stream_set; + + +h2_stream_set *h2_stream_set_create(apr_pool_t *pool); + +void h2_stream_set_destroy(h2_stream_set *sp); + +apr_status_t h2_stream_set_add(h2_stream_set *sp, h2_stream *stream); + +h2_stream *h2_stream_set_get(h2_stream_set *sp, int stream_id); + +h2_stream *h2_stream_set_remove(h2_stream_set *sp,h2_stream *stream); + +void h2_stream_set_remove_all(h2_stream_set *sp); + +int h2_stream_set_is_empty(h2_stream_set *sp); + +apr_size_t h2_stream_set_size(h2_stream_set *sp); + +h2_stream *h2_stream_set_find(h2_stream_set *sp, + h2_stream_set_match_fn *match, void *ctx); + +void h2_stream_set_iter(h2_stream_set *sp, + h2_stream_set_iter_fn *iter, void *ctx); + +#endif /* defined(__mod_h2__h2_stream_set__) */ diff --git a/modules/http2/mod_h2/h2_task.c b/modules/http2/mod_h2/h2_task.c new file mode 100644 index 0000000000..bdae25ac22 --- /dev/null +++ b/modules/http2/mod_h2/h2_task.c @@ -0,0 +1,464 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_conn.h" +#include "h2_config.h" +#include "h2_from_h1.h" +#include "h2_h2.h" +#include "h2_mplx.h" +#include "h2_session.h" +#include "h2_stream.h" +#include "h2_task_input.h" +#include "h2_task_output.h" +#include "h2_task.h" +#include "h2_ctx.h" +#include "h2_worker.h" + + +static apr_status_t h2_filter_stream_input(ap_filter_t* filter, + apr_bucket_brigade* brigade, + ap_input_mode_t mode, + apr_read_type_e block, + apr_off_t readbytes) { + h2_task_env *env = filter->ctx; + AP_DEBUG_ASSERT(task); + if (!env->input) { + return APR_ECONNABORTED; + } + return h2_task_input_read(env->input, filter, brigade, + mode, block, readbytes); +} + +static apr_status_t h2_filter_stream_output(ap_filter_t* filter, + apr_bucket_brigade* brigade) { + h2_task_env *env = filter->ctx; + AP_DEBUG_ASSERT(task); + if (!env->output) { + return APR_ECONNABORTED; + } + return h2_task_output_write(env->output, filter, brigade); +} + +static apr_status_t h2_filter_read_response(ap_filter_t* f, + apr_bucket_brigade* bb) { + h2_task_env *env = f->ctx; + AP_DEBUG_ASSERT(task); + if (!env->output || !env->output->from_h1) { + return APR_ECONNABORTED; + } + return h2_from_h1_read_response(env->output->from_h1, f, bb); +} + +/******************************************************************************* + * Register various hooks + */ +static const char *const mod_ssl[] = { "mod_ssl.c", NULL}; +static int h2_task_pre_conn(conn_rec* c, void *arg); +static int h2_task_process_conn(conn_rec* c); + +void h2_task_register_hooks(void) +{ + /* This hook runs on new connections before mod_ssl has a say. + * Its purpose is to prevent mod_ssl from touching our pseudo-connections + * for streams. + */ + ap_hook_pre_connection(h2_task_pre_conn, + NULL, mod_ssl, APR_HOOK_FIRST); + /* When the connection processing actually starts, we might to + * take over, if the connection is for a task. + */ + ap_hook_process_connection(h2_task_process_conn, + NULL, NULL, APR_HOOK_FIRST); + + ap_register_output_filter("H2_RESPONSE", h2_response_output_filter, + NULL, AP_FTYPE_PROTOCOL); + ap_register_input_filter("H2_TO_H1", h2_filter_stream_input, + NULL, AP_FTYPE_NETWORK); + ap_register_output_filter("H1_TO_H2", h2_filter_stream_output, + NULL, AP_FTYPE_NETWORK); + ap_register_output_filter("H1_TO_H2_RESP", h2_filter_read_response, + NULL, AP_FTYPE_PROTOCOL); +} + +static int h2_task_pre_conn(conn_rec* c, void *arg) +{ + (void)arg; + + h2_ctx *ctx = h2_ctx_get(c); + if (h2_ctx_is_task(ctx)) { + h2_task_env *env = h2_ctx_get_task(ctx); + + /* This connection is a pseudo-connection used for a h2_task. + * Since we read/write directly from it ourselves, we need + * to disable a possible ssl connection filter. + */ + h2_tls_disable(c); + + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "h2_h2, pre_connection, found stream task"); + + /* Add our own, network level in- and output filters. + */ + ap_add_input_filter("H2_TO_H1", env, NULL, c); + ap_add_output_filter("H1_TO_H2", env, NULL, c); + } + return OK; +} + +static int h2_task_process_conn(conn_rec* c) +{ + h2_ctx *ctx = h2_ctx_get(c); + + if (h2_ctx_is_task(ctx)) { + if (!ctx->task_env->serialize_headers) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "h2_h2, processing request directly"); + h2_task_process_request(ctx->task_env); + return DONE; + } + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "h2_task(%s), serialized handling", ctx->task_env->id); + } + return DECLINED; +} + + +h2_task *h2_task_create(long session_id, + int stream_id, + apr_pool_t *stream_pool, + h2_mplx *mplx, conn_rec *c) +{ + h2_task *task = apr_pcalloc(stream_pool, sizeof(h2_task)); + if (task == NULL) { + ap_log_perror(APLOG_MARK, APLOG_ERR, APR_ENOMEM, stream_pool, + "h2_task(%ld-%d): create stream task", + session_id, stream_id); + h2_mplx_out_close(mplx, stream_id); + return NULL; + } + + APR_RING_ELEM_INIT(task, link); + + task->id = apr_psprintf(stream_pool, "%ld-%d", session_id, stream_id); + task->stream_id = stream_id; + task->mplx = mplx; + + task->c = c; + + ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, stream_pool, + "h2_task(%s): created", task->id); + return task; +} + +void h2_task_set_request(h2_task *task, + const char *method, const char *path, + const char *authority, apr_table_t *headers, int eos) +{ + task->method = method; + task->path = path; + task->authority = authority; + task->headers = headers; + task->input_eos = eos; +} + +apr_status_t h2_task_destroy(h2_task *task) +{ + (void)task; + return APR_SUCCESS; +} + +apr_status_t h2_task_do(h2_task *task, h2_worker *worker) +{ + apr_status_t status = APR_SUCCESS; + h2_config *cfg = h2_config_get(task->mplx->c); + h2_task_env env; + + AP_DEBUG_ASSERT(task); + + memset(&env, 0, sizeof(env)); + + env.id = task->id; + env.stream_id = task->stream_id; + env.mplx = task->mplx; + task->mplx = NULL; + + env.input_eos = task->input_eos; + env.serialize_headers = !!h2_config_geti(cfg, H2_CONF_SER_HEADERS); + + /* Create a subpool from the worker one to be used for all things + * with life-time of this task_env execution. + */ + apr_pool_create(&env.pool, h2_worker_get_pool(worker)); + + /* Link the env to the worker which provides useful things such + * as mutex, a socket etc. */ + env.io = h2_worker_get_cond(worker); + + /* Clone fields, so that lifetimes become (more) independent. */ + env.method = apr_pstrdup(env.pool, task->method); + env.path = apr_pstrdup(env.pool, task->path); + env.authority = apr_pstrdup(env.pool, task->authority); + env.headers = apr_table_clone(env.pool, task->headers); + + /* Setup the pseudo connection to use our own pool and bucket_alloc */ + if (task->c) { + env.c = *task->c; + task->c = NULL; + status = h2_conn_setup(&env, worker); + } + else { + status = h2_conn_init(&env, worker); + } + + /* save in connection that this one is a pseudo connection, prevents + * other hooks from messing with it. */ + h2_ctx_create_for(&env.c, &env); + + if (status == APR_SUCCESS) { + env.input = h2_task_input_create(&env, env.pool, + env.c.bucket_alloc); + env.output = h2_task_output_create(&env, env.pool, + env.c.bucket_alloc); + status = h2_conn_process(&env.c, h2_worker_get_socket(worker)); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, &env.c, + "h2_task(%s): processing done", env.id); + } + else { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, status, &env.c, + "h2_task(%s): error setting up h2_task_env", env.id); + } + + if (env.input) { + h2_task_input_destroy(env.input); + env.input = NULL; + } + + if (env.output) { + h2_task_output_close(env.output); + h2_task_output_destroy(env.output); + env.output = NULL; + } + + h2_task_set_finished(task); + if (env.io) { + apr_thread_cond_signal(env.io); + } + + if (env.pool) { + apr_pool_destroy(env.pool); + env.pool = NULL; + } + + if (env.c.id) { + h2_conn_post(&env.c, worker); + } + + h2_mplx_task_done(env.mplx, env.stream_id); + + return status; +} + +int h2_task_has_started(h2_task *task) +{ + AP_DEBUG_ASSERT(task); + return apr_atomic_read32(&task->has_started); +} + +void h2_task_set_started(h2_task *task) +{ + AP_DEBUG_ASSERT(task); + apr_atomic_set32(&task->has_started, 1); +} + +int h2_task_has_finished(h2_task *task) +{ + return apr_atomic_read32(&task->has_finished); +} + +void h2_task_set_finished(h2_task *task) +{ + apr_atomic_set32(&task->has_finished, 1); +} + +void h2_task_die(h2_task_env *env, int status, request_rec *r) +{ + (void)env; + ap_die(status, r); +} + +static request_rec *h2_task_create_request(h2_task_env *env) +{ + conn_rec *conn = &env->c; + request_rec *r; + apr_pool_t *p; + int access_status = HTTP_OK; + + apr_pool_create(&p, conn->pool); + apr_pool_tag(p, "request"); + r = apr_pcalloc(p, sizeof(request_rec)); + AP_READ_REQUEST_ENTRY((intptr_t)r, (uintptr_t)conn); + r->pool = p; + r->connection = conn; + r->server = conn->base_server; + + r->user = NULL; + r->ap_auth_type = NULL; + + r->allowed_methods = ap_make_method_list(p, 2); + + r->headers_in = apr_table_copy(r->pool, env->headers); + r->trailers_in = apr_table_make(r->pool, 5); + r->subprocess_env = apr_table_make(r->pool, 25); + r->headers_out = apr_table_make(r->pool, 12); + r->err_headers_out = apr_table_make(r->pool, 5); + r->trailers_out = apr_table_make(r->pool, 5); + r->notes = apr_table_make(r->pool, 5); + + r->request_config = ap_create_request_config(r->pool); + /* Must be set before we run create request hook */ + + r->proto_output_filters = conn->output_filters; + r->output_filters = r->proto_output_filters; + r->proto_input_filters = conn->input_filters; + r->input_filters = r->proto_input_filters; + ap_run_create_request(r); + r->per_dir_config = r->server->lookup_defaults; + + r->sent_bodyct = 0; /* bytect isn't for body */ + + r->read_length = 0; + r->read_body = REQUEST_NO_BODY; + + r->status = HTTP_OK; /* Until further notice */ + r->header_only = 0; + r->the_request = NULL; + + /* Begin by presuming any module can make its own path_info assumptions, + * until some module interjects and changes the value. + */ + r->used_path_info = AP_REQ_DEFAULT_PATH_INFO; + + r->useragent_addr = conn->client_addr; + r->useragent_ip = conn->client_ip; + + ap_run_pre_read_request(r, conn); + + /* Time to populate r with the data we have. */ + r->request_time = apr_time_now(); + r->the_request = apr_psprintf(r->pool, "%s %s HTTP/1.1", + env->method, env->path); + r->method = env->method; + /* Provide quick information about the request method as soon as known */ + r->method_number = ap_method_number_of(r->method); + if (r->method_number == M_GET && r->method[0] == 'H') { + r->header_only = 1; + } + + ap_parse_uri(r, env->path); + r->protocol = (char*)"HTTP/1.1"; + r->proto_num = HTTP_VERSION(1, 1); + + r->hostname = env->authority; + + /* update what we think the virtual host is based on the headers we've + * now read. may update status. + */ + ap_update_vhost_from_headers(r); + + /* we may have switched to another server */ + r->per_dir_config = r->server->lookup_defaults; + + /* + * Add the HTTP_IN filter here to ensure that ap_discard_request_body + * called by ap_die and by ap_send_error_response works correctly on + * status codes that do not cause the connection to be dropped and + * in situations where the connection should be kept alive. + */ + ap_add_input_filter_handle(ap_http_input_filter_handle, + NULL, r, r->connection); + + if (access_status != HTTP_OK + || (access_status = ap_run_post_read_request(r))) { + /* Request check post hooks failed. An example of this would be a + * request for a vhost where h2 is disabled --> 421. + */ + h2_task_die(env, access_status, r); + ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); + ap_run_log_transaction(r); + r = NULL; + goto traceout; + } + + AP_READ_REQUEST_SUCCESS((uintptr_t)r, (char *)r->method, + (char *)r->uri, (char *)r->server->defn_name, + r->status); + return r; +traceout: + AP_READ_REQUEST_FAILURE((uintptr_t)r); + return r; +} + + +apr_status_t h2_task_process_request(h2_task_env *env) +{ + conn_rec *c = &env->c; + request_rec *r; + conn_state_t *cs = c->cs; + + r = h2_task_create_request(env); + if (r && (r->status == HTTP_OK)) { + ap_update_child_status(c->sbh, SERVER_BUSY_READ, r); + + if (cs) + cs->state = CONN_STATE_HANDLER; + ap_process_request(r); + /* After the call to ap_process_request, the + * request pool will have been deleted. We set + * r=NULL here to ensure that any dereference + * of r that might be added later in this function + * will result in a segfault immediately instead + * of nondeterministic failures later. + */ + r = NULL; + } + ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, NULL); + c->sbh = NULL; + + return APR_SUCCESS; +} + + + + diff --git a/modules/http2/mod_h2/h2_task.h b/modules/http2/mod_h2/h2_task.h new file mode 100644 index 0000000000..4130a02377 --- /dev/null +++ b/modules/http2/mod_h2/h2_task.h @@ -0,0 +1,181 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_task__ +#define __mod_h2__h2_task__ + +/** + * A h2_task fakes a HTTP/1.1 request from the data in a HTTP/2 stream + * (HEADER+CONT.+DATA) the module recieves. + * + * In order to answer a HTTP/2 stream, we want all Apache httpd infrastructure + * to be involved as usual, as if this stream can as a separate HTTP/1.1 + * request. The basic trickery to do so was derived from google's mod_spdy + * source. Basically, we fake a new conn_rec object, even with its own + * socket and give it to ap_process_connection(). + * + * Since h2_task instances are executed in separate threads, we may have + * different lifetimes than our h2_stream or h2_session instances. Basically, + * we would like to be as standalone as possible. + * + * Finally, to keep certain connection level filters, such as ourselves and + * especially mod_ssl ones, from messing with our data, we need a filter + * of our own to disble those. + */ + +struct apr_thread_cond_t; +struct h2_conn; +struct h2_mplx; +struct h2_task; +struct h2_resp_head; +struct h2_worker; + +typedef struct h2_task h2_task; + +struct h2_task { + /** Links to the rest of the tasks */ + APR_RING_ENTRY(h2_task) link; + + const char *id; + int stream_id; + struct h2_mplx *mplx; + + volatile apr_uint32_t has_started; + volatile apr_uint32_t has_finished; + + const char *method; + const char *path; + const char *authority; + apr_table_t *headers; + int input_eos; + + struct conn_rec *c; +}; + +typedef struct h2_task_env h2_task_env; + +struct h2_task_env { + const char *id; + int stream_id; + struct h2_mplx *mplx; + + apr_pool_t *pool; /* pool for task lifetime things */ + apr_bucket_alloc_t *bucket_alloc; + + const char *method; + const char *path; + const char *authority; + apr_table_t *headers; + int input_eos; + + int serialize_headers; + + struct conn_rec c; + struct h2_task_input *input; + struct h2_task_output *output; + + struct apr_thread_cond_t *io; /* used to wait for events on */ +}; + +/** + * The magic pointer value that indicates the head of a h2_task list + * @param b The task list + * @return The magic pointer value + */ +#define H2_TASK_LIST_SENTINEL(b) APR_RING_SENTINEL((b), h2_task, link) + +/** + * Determine if the task list is empty + * @param b The list to check + * @return true or false + */ +#define H2_TASK_LIST_EMPTY(b) APR_RING_EMPTY((b), h2_task, link) + +/** + * Return the first task in a list + * @param b The list to query + * @return The first task in the list + */ +#define H2_TASK_LIST_FIRST(b) APR_RING_FIRST(b) + +/** + * Return the last task in a list + * @param b The list to query + * @return The last task int he list + */ +#define H2_TASK_LIST_LAST(b) APR_RING_LAST(b) + +/** + * Insert a single task at the front of a list + * @param b The list to add to + * @param e The task to insert + */ +#define H2_TASK_LIST_INSERT_HEAD(b, e) do { \ + h2_task *ap__b = (e); \ + APR_RING_INSERT_HEAD((b), ap__b, h2_task, link); \ +} while (0) + +/** + * Insert a single task at the end of a list + * @param b The list to add to + * @param e The task to insert + */ +#define H2_TASK_LIST_INSERT_TAIL(b, e) do { \ + h2_task *ap__b = (e); \ + APR_RING_INSERT_TAIL((b), ap__b, h2_task, link); \ +} while (0) + +/** + * Get the next task in the list + * @param e The current task + * @return The next task + */ +#define H2_TASK_NEXT(e) APR_RING_NEXT((e), link) +/** + * Get the previous task in the list + * @param e The current task + * @return The previous task + */ +#define H2_TASK_PREV(e) APR_RING_PREV((e), link) + +/** + * Remove a task from its list + * @param e The task to remove + */ +#define H2_TASK_REMOVE(e) APR_RING_REMOVE((e), link) + + +h2_task *h2_task_create(long session_id, int stream_id, + apr_pool_t *pool, struct h2_mplx *mplx, + conn_rec *c); + +apr_status_t h2_task_destroy(h2_task *task); + +void h2_task_set_request(h2_task *task, const char *method, const char *path, + const char *authority, apr_table_t *headers, int eos); + + +apr_status_t h2_task_do(h2_task *task, struct h2_worker *worker); +apr_status_t h2_task_process_request(h2_task_env *env); + +int h2_task_has_started(h2_task *task); +void h2_task_set_started(h2_task *task); +int h2_task_has_finished(h2_task *task); +void h2_task_set_finished(h2_task *task); + +void h2_task_register_hooks(void); +void h2_task_die(h2_task_env *env, int status, request_rec *r); + +#endif /* defined(__mod_h2__h2_task__) */ diff --git a/modules/http2/mod_h2/h2_task_input.c b/modules/http2/mod_h2/h2_task_input.c new file mode 100644 index 0000000000..54a46dcccf --- /dev/null +++ b/modules/http2/mod_h2/h2_task_input.c @@ -0,0 +1,216 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_conn.h" +#include "h2_mplx.h" +#include "h2_session.h" +#include "h2_stream.h" +#include "h2_task_input.h" +#include "h2_task.h" +#include "h2_util.h" + + +static int is_aborted(ap_filter_t *f) +{ + return (f->c->aborted); +} + +static int ser_header(void *ctx, const char *name, const char *value) +{ + h2_task_input *input = (h2_task_input*)ctx; + apr_brigade_printf(input->bb, NULL, NULL, "%s: %s\r\n", name, value); + return 1; +} + +h2_task_input *h2_task_input_create(h2_task_env *env, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc) +{ + h2_task_input *input = apr_pcalloc(pool, sizeof(h2_task_input)); + if (input) { + input->env = env; + input->bb = NULL; + + if (env->serialize_headers) { + input->bb = apr_brigade_create(pool, bucket_alloc); + apr_brigade_printf(input->bb, NULL, NULL, "%s %s HTTP/1.1\r\n", + env->method, env->path); + apr_table_do(ser_header, input, env->headers, NULL); + apr_brigade_puts(input->bb, NULL, NULL, "\r\n"); + if (input->env->input_eos) { + APR_BRIGADE_INSERT_TAIL(input->bb, apr_bucket_eos_create(bucket_alloc)); + } + } + else if (!input->env->input_eos) { + input->bb = apr_brigade_create(pool, bucket_alloc); + } + else { + /* We do not serialize and have eos already, no need to + * create a bucket brigade. */ + } + + if (APLOGcdebug(&env->c)) { + char buffer[1024]; + apr_size_t len = sizeof(buffer)-1; + if (input->bb) { + apr_brigade_flatten(input->bb, buffer, &len); + } + buffer[len] = 0; + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, &env->c, + "h2_task_input(%s): request is: %s", + env->id, buffer); + } + } + return input; +} + +void h2_task_input_destroy(h2_task_input *input) +{ + input->bb = NULL; +} + +apr_status_t h2_task_input_read(h2_task_input *input, + ap_filter_t* f, + apr_bucket_brigade* bb, + ap_input_mode_t mode, + apr_read_type_e block, + apr_off_t readbytes) +{ + apr_status_t status = APR_SUCCESS; + apr_off_t bblen = 0; + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, f->c, + "h2_task_input(%s): read, block=%d, mode=%d, readbytes=%ld", + input->env->id, block, mode, (long)readbytes); + + if (is_aborted(f)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_task_input(%s): is aborted", + input->env->id); + return APR_ECONNABORTED; + } + + if (mode == AP_MODE_INIT) { + return APR_SUCCESS; + } + + if (input->bb) { + status = apr_brigade_length(input->bb, 1, &bblen); + if (status != APR_SUCCESS) { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, status, f->c, + "h2_task_input(%s): brigade length fail", + input->env->id); + return status; + } + } + + if ((bblen == 0) && input->env->input_eos) { + return APR_EOF; + } + + while ((bblen == 0) || (mode == AP_MODE_READBYTES && bblen < readbytes)) { + /* Get more data for our stream from mplx. + */ + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, f->c, + "h2_task_input(%s): get more data from mplx, block=%d, " + "readbytes=%ld, queued=%ld", + input->env->id, block, + (long)readbytes, (long)bblen); + + /* Although we sometimes get called with APR_NONBLOCK_READs, + we seem to fill our buffer blocking. Otherwise we get EAGAIN, + return that to our caller and everyone throws up their hands, + never calling us again. */ + status = h2_mplx_in_read(input->env->mplx, APR_BLOCK_READ, + input->env->stream_id, input->bb, + input->env->io); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, f->c, + "h2_task_input(%s): mplx in read returned", + input->env->id); + if (status != APR_SUCCESS) { + return status; + } + status = apr_brigade_length(input->bb, 1, &bblen); + if (status != APR_SUCCESS) { + return status; + } + if ((bblen == 0) && (block == APR_NONBLOCK_READ)) { + return h2_util_has_eos(input->bb, 0)? APR_EOF : APR_EAGAIN; + } + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, f->c, + "h2_task_input(%s): mplx in read, %ld bytes in brigade", + input->env->id, (long)bblen); + } + + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, f->c, + "h2_task_input(%s): read, mode=%d, block=%d, " + "readbytes=%ld, queued=%ld", + input->env->id, mode, block, + (long)readbytes, (long)bblen); + + if (!APR_BRIGADE_EMPTY(input->bb)) { + if (mode == AP_MODE_EXHAUSTIVE) { + /* return all we have */ + return h2_util_move(bb, input->bb, readbytes, 0, + NULL, "task_input_read(exhaustive)"); + } + else if (mode == AP_MODE_READBYTES) { + return h2_util_move(bb, input->bb, readbytes, 0, + NULL, "task_input_read(readbytes)"); + } + else if (mode == AP_MODE_SPECULATIVE) { + /* return not more than was asked for */ + return h2_util_copy(bb, input->bb, readbytes, + "task_input_read(speculative)"); + } + else if (mode == AP_MODE_GETLINE) { + /* we are reading a single LF line, e.g. the HTTP headers */ + status = apr_brigade_split_line(bb, input->bb, block, + HUGE_STRING_LEN); + if (APLOGctrace1(f->c)) { + char buffer[1024]; + apr_size_t len = sizeof(buffer)-1; + apr_brigade_flatten(bb, buffer, &len); + buffer[len] = 0; + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, f->c, + "h2_task_input(%s): getline: %s", + input->env->id, buffer); + } + return status; + } + else { + /* Hmm, well. There is mode AP_MODE_EATCRLF, but we chose not + * to support it. Seems to work. */ + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_ENOTIMPL, f->c, + "h2_task_input, unsupported READ mode %d", + mode); + return APR_ENOTIMPL; + } + } + + if (is_aborted(f)) { + return APR_ECONNABORTED; + } + + return (block == APR_NONBLOCK_READ)? APR_EAGAIN : APR_EOF; +} + diff --git a/modules/http2/mod_h2/h2_task_input.h b/modules/http2/mod_h2/h2_task_input.h new file mode 100644 index 0000000000..32adc1770d --- /dev/null +++ b/modules/http2/mod_h2/h2_task_input.h @@ -0,0 +1,46 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_task_input__ +#define __mod_h2__h2_task_input__ + +/* h2_task_input places the HEADER+DATA, formatted in HTTP/1.1, into + * a bucket brigade. The brigade is setup as the input brigade for our + * pseudo httpd conn_rec that is handling a specific h2_task. + */ +struct apr_thread_cond_t; +struct h2_mplx; +struct h2_task_env; + +typedef struct h2_task_input h2_task_input; +struct h2_task_input { + struct h2_task_env *env; + apr_bucket_brigade *bb; +}; + + +h2_task_input *h2_task_input_create(struct h2_task_env *env, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc); + +void h2_task_input_destroy(h2_task_input *input); + +apr_status_t h2_task_input_read(h2_task_input *input, + ap_filter_t* filter, + apr_bucket_brigade* brigade, + ap_input_mode_t mode, + apr_read_type_e block, + apr_off_t readbytes); + +#endif /* defined(__mod_h2__h2_task_input__) */ diff --git a/modules/http2/mod_h2/h2_task_output.c b/modules/http2/mod_h2/h2_task_output.c new file mode 100644 index 0000000000..b944d8ccb1 --- /dev/null +++ b/modules/http2/mod_h2/h2_task_output.c @@ -0,0 +1,133 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_conn.h" +#include "h2_mplx.h" +#include "h2_session.h" +#include "h2_stream.h" +#include "h2_from_h1.h" +#include "h2_response.h" +#include "h2_task_output.h" +#include "h2_task.h" +#include "h2_util.h" + + +h2_task_output *h2_task_output_create(h2_task_env *env, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc) +{ + (void)bucket_alloc; + h2_task_output *output = apr_pcalloc(pool, sizeof(h2_task_output)); + if (output) { + output->env = env; + output->state = H2_TASK_OUT_INIT; + output->from_h1 = h2_from_h1_create(env->stream_id, pool); + if (!output->from_h1) { + return NULL; + } + } + return output; +} + +void h2_task_output_destroy(h2_task_output *output) +{ + if (output->from_h1) { + h2_from_h1_destroy(output->from_h1); + output->from_h1 = NULL; + } +} + +static apr_status_t open_if_needed(h2_task_output *output, ap_filter_t *f, + apr_bucket_brigade *bb) +{ + if (output->state == H2_TASK_OUT_INIT) { + output->state = H2_TASK_OUT_STARTED; + h2_response *response = h2_from_h1_get_response(output->from_h1); + if (!response) { + if (f) { + /* This happens currently when ap_die(status, r) is invoked + * by a read request filter. + */ + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, f->c, + "h2_task_output(%s): write without response " + "for %s %s %s", + output->env->id, output->env->method, + output->env->authority, output->env->path); + f->c->aborted = 1; + } + if (output->env->io) { + apr_thread_cond_broadcast(output->env->io); + } + return APR_ECONNABORTED; + } + + return h2_mplx_out_open(output->env->mplx, output->env->stream_id, + response, f, bb, output->env->io); + } + return APR_EOF; +} + +void h2_task_output_close(h2_task_output *output) +{ + open_if_needed(output, NULL, NULL); + if (output->state != H2_TASK_OUT_DONE) { + h2_mplx_out_close(output->env->mplx, output->env->stream_id); + output->state = H2_TASK_OUT_DONE; + } +} + +int h2_task_output_has_started(h2_task_output *output) +{ + return output->state >= H2_TASK_OUT_STARTED; +} + +/* Bring the data from the brigade (which represents the result of the + * request_rec out filter chain) into the h2_mplx for further sending + * on the master connection. + */ +apr_status_t h2_task_output_write(h2_task_output *output, + ap_filter_t* f, apr_bucket_brigade* bb) +{ + if (APR_BRIGADE_EMPTY(bb)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_task_output(%s): empty write", output->env->id); + return APR_SUCCESS; + } + + apr_status_t status = open_if_needed(output, f, bb); + if (status != APR_EOF) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, status, f->c, + "h2_task_output(%s): opened and passed brigade", + output->env->id); + return status; + } + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, f->c, + "h2_task_output(%s): write brigade", output->env->id); + return h2_mplx_out_write(output->env->mplx, output->env->stream_id, + f, bb, output->env->io); +} + +void h2_task_output_die(h2_task_output *output, int status, request_rec *r) +{ + h2_from_h1_die(output->from_h1, status, r); +} diff --git a/modules/http2/mod_h2/h2_task_output.h b/modules/http2/mod_h2/h2_task_output.h new file mode 100644 index 0000000000..3bb4575dff --- /dev/null +++ b/modules/http2/mod_h2/h2_task_output.h @@ -0,0 +1,58 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_task_output__ +#define __mod_h2__h2_task_output__ + +/* h2_task_output reads a HTTP/1 response from the brigade and applies + * them to a h2_output_converter. The brigade is setup as the output brigade + * for our pseudo httpd conn_rec that is handling a specific h2_task. + * + */ +struct apr_thread_cond_t; +struct h2_mplx; +struct h2_task_env; +struct h2_from_h1; + +typedef enum { + H2_TASK_OUT_INIT, + H2_TASK_OUT_STARTED, + H2_TASK_OUT_DONE, +} h2_task_output_state_t; + +typedef struct h2_task_output h2_task_output; + +struct h2_task_output { + struct h2_task_env *env; + h2_task_output_state_t state; + struct h2_from_h1 *from_h1; +}; + +h2_task_output *h2_task_output_create(struct h2_task_env *env, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc); + +void h2_task_output_destroy(h2_task_output *output); + +apr_status_t h2_task_output_write(h2_task_output *output, + ap_filter_t* filter, + apr_bucket_brigade* brigade); + +void h2_task_output_close(h2_task_output *output); + +int h2_task_output_has_started(h2_task_output *output); + +void h2_task_output_die(h2_task_output *output, int status, request_rec *r); + +#endif /* defined(__mod_h2__h2_task_output__) */ diff --git a/modules/http2/mod_h2/h2_task_queue.c b/modules/http2/mod_h2/h2_task_queue.c new file mode 100644 index 0000000000..a81cc100fb --- /dev/null +++ b/modules/http2/mod_h2/h2_task_queue.c @@ -0,0 +1,88 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include +#include + +#include "h2_task.h" +#include "h2_task_queue.h" + + +h2_task_queue *h2_tq_create(long id, apr_pool_t *pool) +{ + h2_task_queue *q = apr_pcalloc(pool, sizeof(h2_task_queue)); + if (q) { + q->id = id; + APR_RING_ELEM_INIT(q, link); + APR_RING_INIT(&q->tasks, h2_task, link); + } + return q; +} + +void h2_tq_destroy(h2_task_queue *q) +{ + while (!H2_TASK_LIST_EMPTY(&q->tasks)) { + h2_task *task = H2_TASK_LIST_FIRST(&q->tasks); + H2_TASK_REMOVE(task); + } +} + +static int in_list(h2_task_queue *q, h2_task *task) +{ + h2_task *e; + for (e = H2_TASK_LIST_FIRST(&q->tasks); + e != H2_TASK_LIST_SENTINEL(&q->tasks); + e = H2_TASK_NEXT(e)) { + if (e == task) { + return 1; + } + } + return 0; +} + +int h2_tq_empty(h2_task_queue *q) +{ + return H2_TASK_LIST_EMPTY(&q->tasks); +} + +void h2_tq_append(h2_task_queue *q, struct h2_task *task) +{ + H2_TASK_LIST_INSERT_TAIL(&q->tasks, task); +} + +apr_status_t h2_tq_remove(h2_task_queue *q, struct h2_task *task) +{ + if (in_list(q, task)) { + H2_TASK_REMOVE(task); + return APR_SUCCESS; + } + return APR_NOTFOUND; +} + +h2_task *h2_tq_pop_first(h2_task_queue *q) +{ + if (!H2_TASK_LIST_EMPTY(&q->tasks)) { + h2_task *task = H2_TASK_LIST_FIRST(&q->tasks); + H2_TASK_REMOVE(task); + return task; + } + return NULL; +} + + + diff --git a/modules/http2/mod_h2/h2_task_queue.h b/modules/http2/mod_h2/h2_task_queue.h new file mode 100644 index 0000000000..d93d74ac50 --- /dev/null +++ b/modules/http2/mod_h2/h2_task_queue.h @@ -0,0 +1,148 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_task_queue__ +#define __mod_h2__h2_task_queue__ + +struct h2_task; + +/** + * A simple ring of rings that keeps a list of h2_tasks and can + * be ringed itself, using the APR RING macros. + */ +typedef struct h2_task_queue h2_task_queue; + +struct h2_task_queue { + APR_RING_ENTRY(h2_task_queue) link; + APR_RING_HEAD(h2_tasks, h2_task) tasks; + long id; +}; + +/** + * Allocate a new queue from the pool and initialize. + * @param id the identifier of the queue + * @param pool the memory pool + */ +h2_task_queue *h2_tq_create(long id, apr_pool_t *pool); + +/** + * Release all queue tasks. + * @param q the queue to destroy + */ +void h2_tq_destroy(h2_task_queue *q); + +/** + * Return != 0 iff there are no tasks in the queue. + * @param q the queue to check + */ +int h2_tq_empty(h2_task_queue *q); + +/** + * Append the task to the end of the queue. + * @param q the queue to append the task to + * @param task the task to append + */ +void h2_tq_append(h2_task_queue *q, struct h2_task *task); + +/** + * Remove a task from the queue. Return APR_SUCCESS if the task + * was indeed queued, APR_NOTFOUND otherwise. + * @param q the queue to remove from + * @param task the task to remove + */ +apr_status_t h2_tq_remove(h2_task_queue *q, struct h2_task *task); + +/** + * Get the first task from the queue or NULL if the queue is empty. The + * task will be removed. + * @param q the queue to pop the first task from + */ +h2_task *h2_tq_pop_first(h2_task_queue *q); + +/******************************************************************************* + * Queue Manipulation. + ******************************************************************************/ + +/** + * The magic pointer value that indicates the head of a h2_task_queue list + * @param b The queue list + * @return The magic pointer value + */ +#define H2_TQ_LIST_SENTINEL(b) APR_RING_SENTINEL((b), h2_task_queue, link) + +/** + * Determine if the queue list is empty + * @param b The list to check + * @return true or false + */ +#define H2_TQ_LIST_EMPTY(b) APR_RING_EMPTY((b), h2_task_queue, link) + +/** + * Return the first queue in a list + * @param b The list to query + * @return The first queue in the list + */ +#define H2_TQ_LIST_FIRST(b) APR_RING_FIRST(b) + +/** + * Return the last queue in a list + * @param b The list to query + * @return The last queue int he list + */ +#define H2_TQ_LIST_LAST(b) APR_RING_LAST(b) + +/** + * Insert a single queue at the front of a list + * @param b The list to add to + * @param e The queue to insert + */ +#define H2_TQ_LIST_INSERT_HEAD(b, e) do { \ +h2_task_queue *ap__b = (e); \ +APR_RING_INSERT_HEAD((b), ap__b, h2_task_queue, link); \ +} while (0) + +/** + * Insert a single queue at the end of a list + * @param b The list to add to + * @param e The queue to insert + */ +#define H2_TQ_LIST_INSERT_TAIL(b, e) do { \ +h2_task_queue *ap__b = (e); \ +APR_RING_INSERT_TAIL((b), ap__b, h2_task_queue, link); \ +} while (0) + +/** + * Get the next queue in the list + * @param e The current queue + * @return The next queue + */ +#define H2_TQ_NEXT(e) APR_RING_NEXT((e), link) +/** + * Get the previous queue in the list + * @param e The current queue + * @return The previous queue + */ +#define H2_TQ_PREV(e) APR_RING_PREV((e), link) + +/** + * Remove a queue from its list + * @param e The queue to remove + */ +#define H2_TQ_REMOVE(e) APR_RING_REMOVE((e), link) + + +#define H2_TQ_EMPTY(e) H2_TASK_LIST_EMPTY(&(e)->tasks) + +#endif /* defined(__mod_h2__h2_task_queue__) */ diff --git a/modules/http2/mod_h2/h2_to_h1.c b/modules/http2/mod_h2/h2_to_h1.c new file mode 100644 index 0000000000..f8ac54c34c --- /dev/null +++ b/modules/http2/mod_h2/h2_to_h1.c @@ -0,0 +1,288 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include + +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_mplx.h" +#include "h2_response.h" +#include "h2_task.h" +#include "h2_to_h1.h" +#include "h2_util.h" + + +h2_to_h1 *h2_to_h1_create(int stream_id, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc, + const char *method, const char *path, + const char *authority, struct h2_mplx *m) +{ + if (!method) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, m->c, + "h2_to_h1: header start but :method missing"); + return NULL; + } + if (!path) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, m->c, + "h2_to_h1: header start but :path missing"); + return NULL; + } + + h2_to_h1 *to_h1 = apr_pcalloc(pool, sizeof(h2_to_h1)); + if (to_h1) { + to_h1->stream_id = stream_id; + to_h1->pool = pool; + to_h1->method = method; + to_h1->path = path; + to_h1->authority = authority; + to_h1->m = m; + to_h1->headers = apr_table_make(to_h1->pool, 10); + to_h1->bb = apr_brigade_create(pool, bucket_alloc); + to_h1->chunked = 0; /* until we see a content-type and no length */ + to_h1->content_len = -1; + } + return to_h1; +} + +void h2_to_h1_destroy(h2_to_h1 *to_h1) +{ + to_h1->bb = NULL; +} + +apr_status_t h2_to_h1_add_header(h2_to_h1 *to_h1, + const char *name, size_t nlen, + const char *value, size_t vlen) +{ + if (H2_HD_MATCH_LIT("transfer-encoding", name, nlen)) { + if (!apr_strnatcasecmp("chunked", value)) { + /* This should never arrive here in a HTTP/2 request */ + ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_BADARG, to_h1->m->c, + "h2_to_h1: 'transfer-encoding: chunked' received"); + return APR_BADARG; + } + } + else if (H2_HD_MATCH_LIT("content-length", name, nlen)) { + char *end; + to_h1->content_len = apr_strtoi64(value, &end, 10); + if (value == end) { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, APR_EINVAL, to_h1->m->c, + "h2_request(%d): content-length value not parsed: %s", + to_h1->stream_id, value); + return APR_EINVAL; + } + to_h1->remain_len = to_h1->content_len; + to_h1->chunked = 0; + } + else if (H2_HD_MATCH_LIT("content-type", name, nlen)) { + /* If we see a content-type and have no length (yet), + * we need to chunk. */ + to_h1->chunked = (to_h1->content_len == -1); + } + else if ((to_h1->seen_host && H2_HD_MATCH_LIT("host", name, nlen)) + || H2_HD_MATCH_LIT("expect", name, nlen) + || H2_HD_MATCH_LIT("upgrade", name, nlen) + || H2_HD_MATCH_LIT("connection", name, nlen) + || H2_HD_MATCH_LIT("proxy-connection", name, nlen) + || H2_HD_MATCH_LIT("keep-alive", name, nlen) + || H2_HD_MATCH_LIT("http2-settings", name, nlen)) { + // ignore these. + return APR_SUCCESS; + } + else if (H2_HD_MATCH_LIT("cookie", name, nlen)) { + const char *existing = apr_table_get(to_h1->headers, "cookie"); + if (existing) { + /* Cookie headers come separately in HTTP/2, but need + * to be merged by "; " (instead of default ", ") + */ + char *hvalue = apr_pstrndup(to_h1->pool, value, vlen); + char *nval = apr_psprintf(to_h1->pool, "%s; %s", existing, hvalue); + apr_table_setn(to_h1->headers, "Cookie", nval); + return APR_SUCCESS; + } + } + else if (H2_HD_MATCH_LIT("host", name, nlen)) { + to_h1->seen_host = 1; + } + + char *hname = apr_pstrndup(to_h1->pool, name, nlen); + char *hvalue = apr_pstrndup(to_h1->pool, value, vlen); + h2_util_camel_case_header(hname, nlen); + apr_table_mergen(to_h1->headers, hname, hvalue); + + return APR_SUCCESS; +} + +static int set_header(void *ctx, const char *key, const char *value) +{ + h2_to_h1 *to_h1 = (h2_to_h1*)ctx; + h2_to_h1_add_header(to_h1, key, strlen(key), value, strlen(value)); + return 1; +} + +apr_status_t h2_to_h1_add_headers(h2_to_h1 *to_h1, apr_table_t *headers) +{ + apr_table_do(set_header, to_h1, headers, NULL); + return APR_SUCCESS; +} + +apr_status_t h2_to_h1_end_headers(h2_to_h1 *to_h1, h2_task *task, int eos) +{ + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, to_h1->m->c, + "h2_to_h1(%ld-%d): end headers", + to_h1->m->id, to_h1->stream_id); + + if (to_h1->eoh) { + return APR_EINVAL; + } + + if (!to_h1->seen_host) { + /* Need to add a "Host" header if not already there to + * make virtual hosts work correctly. */ + if (!to_h1->authority) { + return APR_BADARG; + } + apr_table_set(to_h1->headers, "Host", to_h1->authority); + } + + if (eos && to_h1->chunked) { + /* We had chunking figured out, but the EOS is already there. + * unmark chunking and set a definitive content-length. + */ + to_h1->chunked = 0; + apr_table_setn(to_h1->headers, "Content-Length", "0"); + } + else if (to_h1->chunked) { + /* We have not seen a content-length. We therefore must + * pass any request content in chunked form. + */ + apr_table_mergen(to_h1->headers, "Transfer-Encoding", "chunked"); + } + + h2_task_set_request(task, to_h1->method, to_h1->path, + to_h1->authority, to_h1->headers, eos); + to_h1->eoh = 1; + + if (eos) { + apr_status_t status = h2_to_h1_close(to_h1); + if (status != APR_SUCCESS) { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, status, to_h1->m->c, + "h2_to_h1(%ld-%d): end headers, eos=%d", + to_h1->m->id, to_h1->stream_id, eos); + } + return status; + } + return APR_SUCCESS; +} + +static apr_status_t flush(apr_bucket_brigade *bb, void *ctx) +{ + (void)bb; + return h2_to_h1_flush((h2_to_h1*)ctx); +} + +static apr_status_t h2_to_h1_add_data_raw(h2_to_h1 *to_h1, + const char *data, size_t len) +{ + apr_status_t status = APR_SUCCESS; + + if (to_h1->eos || !to_h1->eoh) { + return APR_EINVAL; + } + + status = apr_brigade_write(to_h1->bb, flush, to_h1, data, len); + if (status == APR_SUCCESS) { + status = h2_to_h1_flush(to_h1); + } + return status; +} + + +apr_status_t h2_to_h1_add_data(h2_to_h1 *to_h1, + const char *data, size_t len) +{ + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, to_h1->m->c, + "h2_to_h1(%ld-%d): add %ld data bytes", + to_h1->m->id, to_h1->stream_id, (long)len); + + if (to_h1->chunked) { + /* if input may have a body and we have not seen any + * content-length header, we need to chunk the input data. + */ + apr_status_t status = apr_brigade_printf(to_h1->bb, NULL, NULL, + "%lx\r\n", (unsigned long)len); + if (status == APR_SUCCESS) { + status = h2_to_h1_add_data_raw(to_h1, data, len); + if (status == APR_SUCCESS) { + status = apr_brigade_puts(to_h1->bb, NULL, NULL, "\r\n"); + } + } + return status; + } + else { + to_h1->remain_len -= len; + if (to_h1->remain_len < 0) { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, to_h1->m->c, + "h2_to_h1(%ld-%d): got %ld more content bytes than announced " + "in content-length header: %ld", + to_h1->m->id, to_h1->stream_id, + (long)to_h1->content_len, -(long)to_h1->remain_len); + } + return h2_to_h1_add_data_raw(to_h1, data, len); + } +} + +apr_status_t h2_to_h1_flush(h2_to_h1 *to_h1) +{ + apr_status_t status = APR_SUCCESS; + if (!APR_BRIGADE_EMPTY(to_h1->bb)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, to_h1->m->c, + "h2_to_h1(%ld-%d): flush request bytes", + to_h1->m->id, to_h1->stream_id); + + status = h2_mplx_in_write(to_h1->m, to_h1->stream_id, to_h1->bb); + if (status != APR_SUCCESS) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, status, to_h1->m->c, + "h2_request(%d): pushing request data", + to_h1->stream_id); + } + } + return status; +} + +apr_status_t h2_to_h1_close(h2_to_h1 *to_h1) +{ + apr_status_t status = APR_SUCCESS; + if (!to_h1->eos) { + if (to_h1->chunked) { + status = h2_to_h1_add_data_raw(to_h1, "0\r\n\r\n", 5); + } + to_h1->eos = 1; + status = h2_to_h1_flush(to_h1); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, to_h1->m->c, + "h2_to_h1(%d): close", to_h1->stream_id); + + status = h2_mplx_in_close(to_h1->m, to_h1->stream_id); + } + return status; +} + + diff --git a/modules/http2/mod_h2/h2_to_h1.h b/modules/http2/mod_h2/h2_to_h1.h new file mode 100644 index 0000000000..275448f61f --- /dev/null +++ b/modules/http2/mod_h2/h2_to_h1.h @@ -0,0 +1,83 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_to_h1__ +#define __mod_h2__h2_to_h1__ + +struct h2_mplx; +struct h2_task; +typedef struct h2_to_h1 h2_to_h1; + +struct h2_to_h1 { + int stream_id; + apr_pool_t *pool; + h2_mplx *m; + + const char *method; + const char *path; + const char *authority; + + int chunked; + int eoh; + int eos; + int flushed; + int seen_host; + + apr_off_t content_len; + apr_off_t remain_len; + apr_table_t *headers; + apr_bucket_brigade *bb; +}; + +/* Create a converter from a HTTP/2 request to a serialzation in + * HTTP/1.1 format. The serialized data will be written onto the + * given h2_mplx instance. + */ +h2_to_h1 *h2_to_h1_create(int stream_id, apr_pool_t *pool, + apr_bucket_alloc_t *bucket_alloc, + const char *method, const char *path, + const char *authority, struct h2_mplx *m); + +/* Destroy the converter and free resources. */ +void h2_to_h1_destroy(h2_to_h1 *to_h1); + +/* Add a header to the serialization. Only valid to call after start + * and before end_headers. + */ +apr_status_t h2_to_h1_add_header(h2_to_h1 *to_h1, + const char *name, size_t nlen, + const char *value, size_t vlen); + +apr_status_t h2_to_h1_add_headers(h2_to_h1 *to_h1, apr_table_t *headers); + +/** End the request headers. + */ +apr_status_t h2_to_h1_end_headers(h2_to_h1 *to_h1, + struct h2_task *task, int eos); + +/* Add request body data. + */ +apr_status_t h2_to_h1_add_data(h2_to_h1 *to_h1, + const char *data, size_t len); + +/* Flush the converted data onto the h2_mplx instance. + */ +apr_status_t h2_to_h1_flush(h2_to_h1 *to_h1); + +/* Close the request, flushed automatically. + */ +apr_status_t h2_to_h1_close(h2_to_h1 *to_h1); + +#endif /* defined(__mod_h2__h2_to_h1__) */ diff --git a/modules/http2/mod_h2/h2_upgrade.c b/modules/http2/mod_h2/h2_upgrade.c new file mode 100644 index 0000000000..88d94cb4b7 --- /dev/null +++ b/modules/http2/mod_h2/h2_upgrade.c @@ -0,0 +1,199 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "h2_private.h" +#include "h2_conn.h" +#include "h2_config.h" +#include "h2_ctx.h" +#include "h2_h2.h" +#include "h2_upgrade.h" +#include "h2_util.h" + +static int h2_upgrade_request_handler(request_rec *r); +static const char *h2_get_upgrade_proto(request_rec *r); +static int h2_upgrade_to(request_rec *r, const char *proto); +static int h2_upgrade_options(request_rec *r); + +void h2_upgrade_register_hooks(void) +{ + ap_hook_handler(h2_upgrade_request_handler, NULL, NULL, APR_HOOK_FIRST - 1); + ap_hook_map_to_storage(h2_upgrade_options, NULL, NULL, APR_HOOK_FIRST); +} + +static int h2_upgrade_options(request_rec *r) +{ + if ((r->method_number == M_OPTIONS) && r->uri && (r->uri[0] == '*') && + (r->uri[1] == '\0')) { + ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, + "h2c: request OPTIONS * seen"); + return h2_upgrade_request_handler(r); + } + return DECLINED; +} + +static int h2_upgrade_request_handler(request_rec *r) +{ + h2_ctx *ctx = h2_ctx_rget(r); + h2_config *cfg = h2_config_rget(r); + int enabled_for_request = h2_config_geti(cfg, H2_CONF_ENABLED); + + if (h2_ctx_is_task(ctx) || h2_ctx_is_active(ctx)) { + /* talking h2 already, either task for main conn */ + if (!enabled_for_request) { + /* we have a request for a server (vhost) where h2 is + * not enabled. This happened over a connection on which + * we talk h2. + * Tell the client, she should open a new connection to that + * vhost to get fresh protocol negotiations. + */ + r->status = 421; + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, r->status, r, + "421-ing h2 request to host %s", r->hostname); + return DONE; + } + return DECLINED; + } + + /* not talking h2 (yet) */ + if (enabled_for_request) { + /* Check for the start of an h2c Upgrade dance. */ + const char *proto = h2_get_upgrade_proto(r); + if (proto) { + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + "seeing %s upgrade invitation", proto); + /* We do not handle upgradeable requests with a body. + * The reason being that we would need to read the body in full + * before we ca use HTTP2 frames on the wire. + * + * This seems to be consensus among server implemntations and + * clients are advised to use an "OPTIONS *" before a POST. + */ + const char *clen = apr_table_get(r->headers_in, "Content-Length"); + if (clen && strcmp(clen, "0")) { + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + "upgrade with content-length: %s, declined", clen); + return DECLINED; + } + return h2_upgrade_to(r, proto); + } + } + + return DECLINED; +} + +static const char *h2_get_upgrade_proto(request_rec *r) +{ + const char *proto, *conn; + const char *upgrade = apr_table_get(r->headers_in, "Upgrade"); + + if (upgrade && *upgrade) { + + conn = apr_table_get(r->headers_in, "Connection"); + if (h2_util_contains_token(r->pool, conn, "Upgrade") + && apr_table_get(r->headers_in, "HTTP2-Settings")) { + + /* HTTP/1 Upgrade: is just another mechanism to switch + * protocols on a connection, same as ALPN or NPN. + * Security desirability aside, the bit protocol spoken + * afterwards is the same. Why require different identifier? + * + * We allow the same tokens as in ALPN negotiation, plus the + * special 'c' variants that RFC 7540 defines. We just do not + * care about the transport here. + */ + proto = h2_util_first_token_match(r->pool, upgrade, + h2_alpn_protos, + h2_alpn_protos_len); + if (!proto) { + proto = h2_util_first_token_match(r->pool, upgrade, + h2_upgrade_protos, + h2_upgrade_protos_len); + } + + if (proto) { + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + "suiteable upgrade detected: %s %s, " + "Upgrade: %s", r->method, r->uri, upgrade); + return proto; + } + } + } + + return NULL; +} + +static int h2_upgrade_to(request_rec *r, const char *proto) +{ + conn_rec *c = r->connection; + h2_ctx *ctx = h2_ctx_rget(r); + + h2_ctx_pnego_set_done(ctx, proto); + + /* Let the client know what we are upgrading to. */ + apr_table_clear(r->headers_out); + apr_table_setn(r->headers_out, "Upgrade", proto); + apr_table_setn(r->headers_out, "Connection", "Upgrade"); + + r->status = HTTP_SWITCHING_PROTOCOLS; + r->status_line = ap_get_status_line(r->status); + ap_send_interim_response(r, 1); + + /* Make sure the core filter that parses http1 requests does + * not mess with our http2 frames. */ + if (APLOGrtrace2(r)) { + ap_filter_t *filter = r->input_filters; + while (filter) { + ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, + "h2_conn(%ld), has request filter %s", + r->connection->id, filter->frec->name); + filter = filter->next; + } + } + ap_remove_input_filter_byhandle(r->input_filters, "http_in"); + ap_remove_input_filter_byhandle(r->input_filters, "reqtimeout"); + + /* Ok, start an h2_conn on this one. */ + apr_status_t status = h2_conn_rprocess(r); + if (status != DONE) { + /* Nothing really to do about this. */ + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, + "session proessed, unexpected status"); + } + + /* make sure httpd closes the connection after this */ + c->keepalive = AP_CONN_CLOSE; + ap_lingering_close(c); + + if (c->sbh) { + ap_update_child_status_from_conn(c->sbh, SERVER_CLOSING, c); + } + + return DONE; +} + diff --git a/modules/http2/mod_h2/h2_upgrade.h b/modules/http2/mod_h2/h2_upgrade.h new file mode 100644 index 0000000000..ee2dbaa9f5 --- /dev/null +++ b/modules/http2/mod_h2/h2_upgrade.h @@ -0,0 +1,24 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_upgrade__ +#define __mod_h2__h2_upgrade__ + +/* Specific function to HTTP/1 connection Upgradeds. + */ +void h2_upgrade_register_hooks(void); + + +#endif /* defined(__mod_h2__h2_upgrade__) */ diff --git a/modules/http2/mod_h2/h2_util.c b/modules/http2/mod_h2/h2_util.c new file mode 100644 index 0000000000..1b08165878 --- /dev/null +++ b/modules/http2/mod_h2/h2_util.c @@ -0,0 +1,703 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include +#include +#include + +#include + +#include "h2_private.h" +#include "h2_util.h" + +size_t h2_util_hex_dump(char *buffer, size_t maxlen, + const char *data, size_t datalen) +{ + size_t offset = 0; + size_t maxoffset = (maxlen-4); + size_t i; + for (i = 0; i < datalen && offset < maxoffset; ++i) { + const char *sep = (i && i % 16 == 0)? "\n" : " "; + int n = apr_snprintf(buffer+offset, maxoffset-offset, + "%2x%s", ((unsigned int)data[i]&0xff), sep); + offset += n; + } + strcpy(buffer+offset, (i= 'A' && *p <= 'Z') { + *p += 'a' - 'A'; + } + } + return s; +} + +void h2_util_camel_case_header(char *s, size_t len) +{ + size_t start = 1; + for (size_t i = 0; i < len; ++i) { + if (start) { + if (s[i] >= 'a' && s[i] <= 'z') { + s[i] -= 'a' - 'A'; + } + + start = 0; + } + else if (s[i] == '-') { + start = 1; + } + } +} + +static const int BASE64URL_TABLE[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1 +}; + +apr_size_t h2_util_base64url_decode(unsigned char **decoded, const char *encoded, + apr_pool_t *pool) +{ + const unsigned char *e = (const unsigned char *)encoded; + const unsigned char *p = e; + int n; + + while (*p && BASE64URL_TABLE[ *p ] == -1) { + ++p; + } + apr_size_t len = p - e; + apr_size_t mlen = (len/4)*4; + *decoded = apr_pcalloc(pool, len+1); + + apr_size_t i = 0; + unsigned char *d = *decoded; + for (; i < mlen; i += 4) { + n = ((BASE64URL_TABLE[ e[i+0] ] << 18) + + (BASE64URL_TABLE[ e[i+1] ] << 12) + + (BASE64URL_TABLE[ e[i+2] ] << 6) + + BASE64URL_TABLE[ e[i+3] ]); + *d++ = n >> 16; + *d++ = n >> 8 & 0xffu; + *d++ = n & 0xffu; + } + apr_size_t remain = len - mlen; + switch (remain) { + case 2: + n = ((BASE64URL_TABLE[ e[mlen+0] ] << 18) + + (BASE64URL_TABLE[ e[mlen+1] ] << 12)); + *d++ = n >> 16; + break; + case 3: + n = ((BASE64URL_TABLE[ e[mlen+0] ] << 18) + + (BASE64URL_TABLE[ e[mlen+1] ] << 12) + + (BASE64URL_TABLE[ e[mlen+2] ] << 6)); + *d++ = n >> 16; + *d++ = n >> 8 & 0xffu; + break; + default: /* do nothing */ + break; + } + return len; +} + +int h2_util_contains_token(apr_pool_t *pool, const char *s, const char *token) +{ + if (s) { + if (!apr_strnatcasecmp(s, token)) { /* the simple life */ + return 1; + } + + for (char *c = ap_get_token(pool, &s, 0); c && *c; + c = *s? ap_get_token(pool, &s, 0) : NULL) { + if (!apr_strnatcasecmp(c, token)) { /* seeing the token? */ + return 1; + } + while (*s++ == ';') { /* skip parameters */ + ap_get_token(pool, &s, 0); + } + if (*s++ != ',') { /* need comma separation */ + return 0; + } + } + } + return 0; +} + +const char *h2_util_first_token_match(apr_pool_t *pool, const char *s, + const char *tokens[], apr_size_t len) +{ + if (s && *s) { + for (char *c = ap_get_token(pool, &s, 0); c && *c; + c = *s? ap_get_token(pool, &s, 0) : NULL) { + for (apr_size_t i = 0; i < len; ++i) { + if (!apr_strnatcasecmp(c, tokens[i])) { + return tokens[i]; + } + } + while (*s++ == ';') { /* skip parameters */ + ap_get_token(pool, &s, 0); + } + if (*s++ != ',') { /* need comma separation */ + return 0; + } + } + } + return NULL; +} + +/* DEEP_COPY==0 crashes under load. I think the setaside is fine, + * however buckets moved to another thread will still be + * free'd against the old bucket_alloc. *And* if the old + * pool gets destroyed too early, the bucket disappears while + * still needed. + */ +static const int DEEP_COPY = 1; +static const int FILE_MOVE = 0; + +static apr_status_t last_not_included(apr_bucket_brigade *bb, + apr_size_t maxlen, int count_virtual, + apr_bucket **pend) +{ + apr_bucket *b; + apr_status_t status = APR_SUCCESS; + + if (maxlen > 0) { + /* Find the bucket, up to which we reach maxlen/mem bytes */ + for (b = APR_BRIGADE_FIRST(bb); + (b != APR_BRIGADE_SENTINEL(bb)); + b = APR_BUCKET_NEXT(b)) { + + if (APR_BUCKET_IS_METADATA(b)) { + /* included */ + } + else { + if (maxlen == 0) { + *pend = b; + return status; + } + + if (b->length == ((apr_size_t)-1)) { + const char *ign; + apr_size_t ilen; + status = apr_bucket_read(b, &ign, &ilen, APR_BLOCK_READ); + if (status != APR_SUCCESS) { + return status; + } + } + + if (!count_virtual && FILE_MOVE && APR_BUCKET_IS_FILE(b)) { + /* this has no memory footprint really unless + * it is read, disregard it in length count, + * unless we count the virtual buckets */ + } + else if (maxlen < b->length) { + apr_bucket_split(b, maxlen); + maxlen = 0; + } + else { + maxlen -= b->length; + } + } + } + } + *pend = APR_BRIGADE_SENTINEL(bb); + return status; +} + +#define LOG_LEVEL APLOG_TRACE2 + +apr_status_t h2_util_move(apr_bucket_brigade *to, apr_bucket_brigade *from, + apr_size_t maxlen, int count_virtual, + apr_file_t **pfile, const char *msg) +{ + apr_status_t status = APR_SUCCESS; + + AP_DEBUG_ASSERT(to); + AP_DEBUG_ASSERT(from); + int same_alloc = (to->bucket_alloc == from->bucket_alloc); + + if (!APR_BRIGADE_EMPTY(from)) { + apr_bucket *b, *end; + + status = last_not_included(from, maxlen, + (count_virtual || !FILE_MOVE), &end); + if (status != APR_SUCCESS) { + return status; + } + + while (!APR_BRIGADE_EMPTY(from) && status == APR_SUCCESS) { + b = APR_BRIGADE_FIRST(from); + if (b == end) { + break; + } + + if (same_alloc || (b->list == to->bucket_alloc)) { + /* both brigades use the same bucket_alloc and auto-cleanups + * have the same life time. It's therefore safe to just move + * directly. */ + APR_BUCKET_REMOVE(b); + APR_BRIGADE_INSERT_TAIL(to, b); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_move: %s, passed bucket(same bucket_alloc) " + "%ld-%ld, type=%s", + msg, (long)b->start, (long)b->length, + APR_BUCKET_IS_METADATA(b)? + (APR_BUCKET_IS_EOS(b)? "EOS": + (APR_BUCKET_IS_FLUSH(b)? "FLUSH" : "META")) : + (APR_BUCKET_IS_FILE(b)? "FILE" : "DATA")); + } + else if (DEEP_COPY) { + /* we have not managed the magic of passing buckets from + * one thread to another. Any attempts result in + * cleanup of pools scrambling memory. + */ + if (APR_BUCKET_IS_METADATA(b)) { + if (APR_BUCKET_IS_EOS(b)) { + APR_BRIGADE_INSERT_TAIL(to, apr_bucket_eos_create(to->bucket_alloc)); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_move: %s, copied EOS bucket", msg); + } + else if (APR_BUCKET_IS_FLUSH(b)) { + APR_BRIGADE_INSERT_TAIL(to, apr_bucket_flush_create(to->bucket_alloc)); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_move: %s, copied FLUSH bucket", msg); + } + else { + /* ignore */ + } + } + else if (pfile && FILE_MOVE && APR_BUCKET_IS_FILE(b)) { + /* We do not want to read files when passing buckets, if + * we can avoid it. However, what we've come up so far + * is not working corrently, resulting either in crashes or + * too many open file descriptors. + */ + apr_bucket_file *f = (apr_bucket_file *)b->data; + apr_file_t *fd = f->fd; + int setaside = (f->readpool != to->p); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_move: %s, moving FILE bucket %ld-%ld " + "from=%lx(p=%lx) to=%lx(p=%lx), setaside=%d", + msg, (long)b->start, (long)b->length, + (long)from, (long)from->p, + (long)to, (long)to->p, setaside); + if (setaside) { + status = apr_file_setaside(&fd, fd, to->p); + *pfile = fd; + if (status != APR_SUCCESS) { + ap_log_perror(APLOG_MARK, APLOG_ERR, status, to->p, + "h2_util: %s, setaside FILE", msg); + return status; + } + } + apr_brigade_insert_file(to, fd, b->start, b->length, + to->p); + } + else { + const char *data; + apr_size_t len; + status = apr_bucket_read(b, &data, &len, APR_BLOCK_READ); + if (status == APR_SUCCESS && len > 0) { + status = apr_brigade_write(to, NULL, NULL, data, len); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_move: %s, copied bucket %ld-%ld " + "from=%lx(p=%lx) to=%lx(p=%lx)", + msg, (long)b->start, (long)b->length, + (long)from, (long)from->p, + (long)to, (long)to->p); + } + } + apr_bucket_delete(b); + } + else { + apr_bucket_setaside(b, to->p); + APR_BUCKET_REMOVE(b); + APR_BRIGADE_INSERT_TAIL(to, b); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_move: %s, passed setaside bucket %ld-%ld " + "from=%lx(p=%lx) to=%lx(p=%lx)", + msg, (long)b->start, (long)b->length, + (long)from, (long)from->p, + (long)to, (long)to->p); + } + } + } + + return status; +} + +apr_status_t h2_util_pass(apr_bucket_brigade *to, apr_bucket_brigade *from, + apr_size_t maxlen, int count_virtual, + const char *msg) +{ + apr_status_t status = APR_SUCCESS; + + AP_DEBUG_ASSERT(to); + AP_DEBUG_ASSERT(from); + + if (!APR_BRIGADE_EMPTY(from)) { + apr_bucket *b, *end; + + status = last_not_included(from, maxlen, count_virtual, &end); + if (status != APR_SUCCESS) { + return status; + } + + while (!APR_BRIGADE_EMPTY(from) && status == APR_SUCCESS) { + b = APR_BRIGADE_FIRST(from); + if (b == end) { + break; + } + + APR_BUCKET_REMOVE(b); + if (APR_BUCKET_IS_METADATA(b)) { + if (!APR_BUCKET_IS_EOS(b) && !APR_BUCKET_IS_FLUSH(b)) { + apr_bucket_delete(b); + continue; + } + } + else if (b->length == 0) { + apr_bucket_delete(b); + continue; + } + + APR_BRIGADE_INSERT_TAIL(to, b); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_pass: %s, passed bucket %ld-%ld, type=%s", + msg, (long)b->start, (long)b->length, + APR_BUCKET_IS_METADATA(b)? + (APR_BUCKET_IS_EOS(b)? "EOS": + (APR_BUCKET_IS_FLUSH(b)? "FLUSH" : "META")) : + (APR_BUCKET_IS_FILE(b)? "FILE" : "DATA")); + } + } + + return status; +} + +apr_status_t h2_util_copy(apr_bucket_brigade *to, apr_bucket_brigade *from, + apr_size_t maxlen, const char *msg) +{ + apr_status_t status = APR_SUCCESS; + + AP_DEBUG_ASSERT(to); + AP_DEBUG_ASSERT(from); + int same_alloc = (to->bucket_alloc == from->bucket_alloc); + + if (!APR_BRIGADE_EMPTY(from)) { + apr_bucket *b, *end, *cpy; + + status = last_not_included(from, maxlen, 1, &end); + if (status != APR_SUCCESS) { + return status; + } + + for (b = APR_BRIGADE_FIRST(from); + b != APR_BRIGADE_SENTINEL(from) && b != end; + b = APR_BUCKET_NEXT(b)) + { + if (same_alloc) { + status = apr_bucket_copy(b, &cpy); + if (status != APR_SUCCESS) { + break; + } + APR_BRIGADE_INSERT_TAIL(to, cpy); + } + else { + if (APR_BUCKET_IS_METADATA(b)) { + if (APR_BUCKET_IS_EOS(b)) { + APR_BRIGADE_INSERT_TAIL(to, apr_bucket_eos_create(to->bucket_alloc)); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_copy: %s, copied EOS bucket", msg); + } + else if (APR_BUCKET_IS_FLUSH(b)) { + APR_BRIGADE_INSERT_TAIL(to, apr_bucket_flush_create(to->bucket_alloc)); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_copy: %s, copied FLUSH bucket", msg); + } + else { + /* ignore */ + } + } + else { + const char *data; + apr_size_t len; + status = apr_bucket_read(b, &data, &len, APR_BLOCK_READ); + if (status == APR_SUCCESS && len > 0) { + status = apr_brigade_write(to, NULL, NULL, data, len); + ap_log_perror(APLOG_MARK, LOG_LEVEL, 0, to->p, + "h2_util_copy: %s, copied bucket %ld-%ld " + "from=%lx(p=%lx) to=%lx(p=%lx)", + msg, (long)b->start, (long)b->length, + (long)from, (long)from->p, + (long)to, (long)to->p); + } + } + } + } + } + return status; +} + +int h2_util_has_flush_or_eos(apr_bucket_brigade *bb) { + apr_bucket *b; + for (b = APR_BRIGADE_FIRST(bb); + b != APR_BRIGADE_SENTINEL(bb); + b = APR_BUCKET_NEXT(b)) + { + if (APR_BUCKET_IS_EOS(b) || APR_BUCKET_IS_FLUSH(b)) { + return 1; + } + } + return 0; +} + +int h2_util_has_eos(apr_bucket_brigade *bb, apr_size_t len) +{ + apr_bucket *b, *end; + + apr_status_t status = last_not_included(bb, len, 1, &end); + if (status != APR_SUCCESS) { + return status; + } + + for (b = APR_BRIGADE_FIRST(bb); + b != APR_BRIGADE_SENTINEL(bb) && b != end; + b = APR_BUCKET_NEXT(b)) + { + if (APR_BUCKET_IS_EOS(b)) { + return 1; + } + } + return 0; +} + +int h2_util_bb_has_data(apr_bucket_brigade *bb) +{ + apr_bucket *b; + for (b = APR_BRIGADE_FIRST(bb); + b != APR_BRIGADE_SENTINEL(bb); + b = APR_BUCKET_NEXT(b)) + { + if (!APR_BUCKET_IS_METADATA(b)) { + return 1; + } + } + return 0; +} + +int h2_util_bb_has_data_or_eos(apr_bucket_brigade *bb) +{ + apr_bucket *b; + for (b = APR_BRIGADE_FIRST(bb); + b != APR_BRIGADE_SENTINEL(bb); + b = APR_BUCKET_NEXT(b)) + { + if (APR_BUCKET_IS_METADATA(b)) { + if (APR_BUCKET_IS_EOS(b)) { + return 1; + } + } + else { + return 1; + } + } + return 0; +} + +apr_status_t h2_util_bb_avail(apr_bucket_brigade *bb, + apr_size_t *plen, int *peos) +{ + apr_status_t status; + /* test read to determine available length */ + apr_off_t blen = 0; + status = apr_brigade_length(bb, 0, &blen); + if (blen < (apr_off_t)*plen) { + *plen = blen; + } + *peos = h2_util_has_eos(bb, *plen); + return status; +} + +apr_status_t h2_util_bb_read(apr_bucket_brigade *bb, char *buffer, + apr_size_t *plen, int *peos) +{ + apr_status_t status = APR_SUCCESS; + apr_size_t avail = *plen; + apr_size_t written = 0; + + /* Copy data in our brigade into the buffer until it is filled or + * we encounter an EOS. + */ + *peos = 0; + while ((status == APR_SUCCESS) && !APR_BRIGADE_EMPTY(bb)) { + + apr_bucket *b = APR_BRIGADE_FIRST(bb); + if (APR_BUCKET_IS_METADATA(b)) { + if (APR_BUCKET_IS_EOS(b)) { + *peos = 1; + } + else { + /* ignore */ + } + } + else if (avail <= 0) { + break; + } + else { + const char *data; + apr_size_t data_len; + + if (b->length != ((apr_size_t)-1) && b->length > avail) { + apr_bucket_split(b, avail); + } + status = apr_bucket_read(b, &data, &data_len, + APR_NONBLOCK_READ); + if (status == APR_SUCCESS && data_len > 0) { + if (data_len > avail) { + apr_bucket_split(b, avail); + data_len = avail; + } + memcpy(buffer, data, data_len); + avail -= data_len; + buffer += data_len; + written += data_len; + } + } + apr_bucket_delete(b); + } + + *plen = written; + if (status == APR_SUCCESS && !*peos && !*plen) { + return APR_EAGAIN; + } + return status; +} + +apr_status_t h2_util_bb_readx(apr_bucket_brigade *bb, + h2_util_pass_cb *cb, void *ctx, + apr_size_t *plen, int *peos) +{ + apr_status_t status = APR_SUCCESS; + apr_size_t avail = *plen; + apr_size_t written = 0; + apr_bucket *next, *b = APR_BRIGADE_FIRST(bb); + int consume = (cb != NULL); + + /* Pass data in our brigade through the callback until the length + * is satisfied or we encounter an EOS. + */ + *peos = 0; + for (b = APR_BRIGADE_FIRST(bb); + (status == APR_SUCCESS) && (b != APR_BRIGADE_SENTINEL(bb)); + b = next) { + + if (APR_BUCKET_IS_METADATA(b)) { + if (APR_BUCKET_IS_EOS(b)) { + *peos = 1; + } + else { + /* ignore */ + } + } + else if (avail <= 0) { + break; + } + else { + const char *data = NULL; + apr_size_t data_len; + + if (b->length != ((apr_size_t)-1)) { + status = apr_bucket_read(b, &data, &data_len, + APR_NONBLOCK_READ); + } + else { + data_len = b->length; + } + + if (data_len > avail) { + apr_bucket_split(b, avail); + data_len = avail; + } + + if (consume) { + if (!data) { + status = apr_bucket_read(b, &data, &data_len, + APR_NONBLOCK_READ); + } + if (status == APR_SUCCESS) { + status = cb(ctx, data, data_len); + } + } + else { + data_len = b->length; + } + avail -= data_len; + written += data_len; + } + + next = APR_BUCKET_NEXT(b); + if (consume) { + apr_bucket_delete(b); + } + } + + *plen = written; + if (status == APR_SUCCESS && !*peos && !*plen) { + return APR_EAGAIN; + } + return status; +} + diff --git a/modules/http2/mod_h2/h2_util.h b/modules/http2/mod_h2/h2_util.h new file mode 100644 index 0000000000..a1438cca4f --- /dev/null +++ b/modules/http2/mod_h2/h2_util.h @@ -0,0 +1,140 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_util__ +#define __mod_h2__h2_util__ + +struct nghttp2_frame; + +size_t h2_util_hex_dump(char *buffer, size_t maxlen, + const char *data, size_t datalen); + +size_t h2_util_header_print(char *buffer, size_t maxlen, + const char *name, size_t namelen, + const char *value, size_t valuelen); + +char *h2_strlwr(char *s); + +void h2_util_camel_case_header(char *s, size_t len); + +/** + * Return != 0 iff the string s contains the token, as specified in + * HTTP header syntax, rfc7230. + */ +int h2_util_contains_token(apr_pool_t *pool, const char *s, const char *token); + +const char *h2_util_first_token_match(apr_pool_t *pool, const char *s, + const char *tokens[], apr_size_t len); + +/** + * I always wanted to write my own base64url decoder...not. See + * https://tools.ietf.org/html/rfc4648#section-5 for description. + */ +apr_size_t h2_util_base64url_decode(unsigned char **decoded, + const char *encoded, + apr_pool_t *pool); + +#define H2_HD_MATCH_LIT(l, name, nlen) \ + ((nlen == sizeof(l) - 1) && !apr_strnatcasecmp(l, name)) + +#define H2_HD_MATCH_LIT_CS(l, name) \ + ((strlen(name) == sizeof(l) - 1) && !apr_strnatcasecmp(l, name)) + +#define H2_CREATE_NV_LIT_CS(nv, NAME, VALUE) nv->name = (uint8_t *)NAME; \ + nv->namelen = sizeof(NAME) - 1; \ + nv->value = (uint8_t *)VALUE; \ + nv->valuelen = strlen(VALUE) + +#define H2_CREATE_NV_CS_LIT(nv, NAME, VALUE) nv->name = (uint8_t *)NAME; \ + nv->namelen = strlen(NAME); \ + nv->value = (uint8_t *)VALUE; \ + nv->valuelen = sizeof(VALUE) - 1 + +#define H2_CREATE_NV_CS_CS(nv, NAME, VALUE) nv->name = (uint8_t *)NAME; \ + nv->namelen = strlen(NAME); \ + nv->value = (uint8_t *)VALUE; \ + nv->valuelen = strlen(VALUE) + +/** + * Moves data from one brigade into another. If maxlen > 0, it only + * moves up to maxlen bytes into the target brigade, making bucket splits + * if needed. + * @param to the brigade to move the data to + * @param from the brigade to get the data from + * @param maxlen of bytes to move, 0 for all + * @param count_virtual if virtual buckets like FILE do count against maxlen + * @param msg message for use in logging + */ +apr_status_t h2_util_move(apr_bucket_brigade *to, apr_bucket_brigade *from, + apr_size_t maxlen, int count_virtual, + apr_file_t **pfile, const char *msg); + +/** + * Copies buckets from one brigade into another. If maxlen > 0, it only + * copies up to maxlen bytes into the target brigade, making bucket splits + * if needed. + * @param to the brigade to copy the data to + * @param from the brigade to get the data from + * @param maxlen of bytes to copy, 0 for all + * @param msg message for use in logging + */ +apr_status_t h2_util_copy(apr_bucket_brigade *to, apr_bucket_brigade *from, + apr_size_t maxlen, const char *msg); + +/** + * Pass the buckets from one brigade into another, without any setaside. + * Only recommended if both brigades use the same bucket alloc or if + * you really know what you are doing. + * @param to the brigade to pass the buckets to + * @param from the brigade to get the buckets from + * @param maxlen of bucket bytes to copy, 0 for all + * @param count_virtual if virtual buckets like FILE do count against maxlen + * @param msg message for use in logging + */ +apr_status_t h2_util_pass(apr_bucket_brigade *to, apr_bucket_brigade *from, + apr_size_t maxlen, int count_virtual, + const char *msg); + +/** + * Return != 0 iff there is a FLUSH or EOS bucket in the brigade. + * @param bb the brigade to check on + * @return != 0 iff brigade holds FLUSH or EOS bucket (or both) + */ +int h2_util_has_flush_or_eos(apr_bucket_brigade *bb); +int h2_util_has_eos(apr_bucket_brigade *bb, apr_size_t len); +int h2_util_bb_has_data(apr_bucket_brigade *bb); +int h2_util_bb_has_data_or_eos(apr_bucket_brigade *bb); + +/** + * Check how many bytes of the desired amount are available and if the + * end of stream is reached by that amount. + * @param bb the brigade to check + * @param plen the desired length and, on return, the available length + * @param on return, if eos has been reached + */ +apr_status_t h2_util_bb_avail(apr_bucket_brigade *bb, + apr_size_t *plen, int *peos); + +apr_status_t h2_util_bb_read(apr_bucket_brigade *bb, char *buffer, + apr_size_t *plen, int *peos); + +typedef apr_status_t h2_util_pass_cb(void *ctx, + const char *data, apr_size_t len); + +apr_status_t h2_util_bb_readx(apr_bucket_brigade *bb, + h2_util_pass_cb *cb, void *ctx, + apr_size_t *plen, int *peos); + +#endif /* defined(__mod_h2__h2_util__) */ diff --git a/modules/http2/mod_h2/h2_version.h.in b/modules/http2/mod_h2/h2_version.h.in new file mode 100644 index 0000000000..049a13f36a --- /dev/null +++ b/modules/http2/mod_h2/h2_version.h.in @@ -0,0 +1,42 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +* +* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef mod_h2_h2_version_h +#define mod_h2_h2_version_h + +/** + * @macro + * Version number of the h2 module as c string + */ +#define MOD_H2_VERSION "@PACKAGE_VERSION@" + +/** + * @macro + * Numerical representation of the version number of the h2 module + * release. This is a 24 bit number with 8 bits for major number, 8 bits + * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203. + */ +#define MOD_H2_VERSION_NUM @PACKAGE_VERSION_NUM@ + + +/** + * @macro + * != 0 iff the nghttp2 library supports data callbacks. + * Disabled for now since it lowers performance. + */ +#define NGHTTP2_HAS_DATA_CBXXX @NGHTTP2_HAS_DATA_CB@ +#define NGHTTP2_HAS_DATA_CB 0 + +#endif /* mod_h2_h2_version_h */ diff --git a/modules/http2/mod_h2/h2_worker.c b/modules/http2/mod_h2/h2_worker.c new file mode 100644 index 0000000000..2e2a1d4ed7 --- /dev/null +++ b/modules/http2/mod_h2/h2_worker.c @@ -0,0 +1,168 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#include +#include +#include + +#include "h2_private.h" +#include "h2_mplx.h" +#include "h2_task.h" +#include "h2_worker.h" + +static void *execute(apr_thread_t *thread, void *wctx) +{ + h2_worker *worker = (h2_worker *)wctx; + apr_status_t status = APR_SUCCESS; + h2_mplx *m; + (void)thread; + + /* Furthermore, other code might want to see the socket for + * this connection. Allocate one without further function... + */ + status = apr_socket_create(&worker->socket, + APR_INET, SOCK_STREAM, + APR_PROTO_TCP, worker->pool); + if (status != APR_SUCCESS) { + ap_log_perror(APLOG_MARK, APLOG_ERR, status, worker->pool, + "h2_worker(%d): alloc socket", worker->id); + worker->worker_done(worker, worker->ctx); + return NULL; + } + + worker->task = NULL; + m = NULL; + while (!worker->aborted) { + status = worker->get_next(worker, &m, &worker->task, worker->ctx); + + if (worker->task) { + h2_task_do(worker->task, worker); + worker->task = NULL; + apr_thread_cond_signal(h2_worker_get_cond(worker)); + } + } + + status = worker->get_next(worker, &m, NULL, worker->ctx); + m = NULL; + + if (worker->socket) { + apr_socket_close(worker->socket); + worker->socket = NULL; + } + + worker->worker_done(worker, worker->ctx); + return NULL; +} + +h2_worker *h2_worker_create(int id, + apr_pool_t *parent_pool, + apr_threadattr_t *attr, + h2_worker_mplx_next_fn *get_next, + h2_worker_done_fn *worker_done, + void *ctx) +{ + apr_allocator_t *allocator = NULL; + apr_pool_t *pool = NULL; + + apr_status_t status = apr_allocator_create(&allocator); + if (status != APR_SUCCESS) { + return NULL; + } + + status = apr_pool_create_ex(&pool, parent_pool, NULL, allocator); + if (status != APR_SUCCESS) { + return NULL; + } + apr_allocator_owner_set(allocator, pool); + + h2_worker *w = apr_pcalloc(pool, sizeof(h2_worker)); + if (w) { + APR_RING_ELEM_INIT(w, link); + + w->id = id; + w->pool = pool; + w->bucket_alloc = apr_bucket_alloc_create(pool); + + w->get_next = get_next; + w->worker_done = worker_done; + w->ctx = ctx; + + status = apr_thread_cond_create(&w->io, w->pool); + if (status != APR_SUCCESS) { + return NULL; + } + + apr_thread_create(&w->thread, attr, execute, w, pool); + } + return w; +} + +apr_status_t h2_worker_destroy(h2_worker *worker) +{ + if (worker->io) { + apr_thread_cond_destroy(worker->io); + worker->io = NULL; + } + if (worker->pool) { + apr_pool_destroy(worker->pool); + /* worker is gone */ + } + return APR_SUCCESS; +} + +int h2_worker_get_id(h2_worker *worker) +{ + return worker->id; +} + +void h2_worker_abort(h2_worker *worker) +{ + worker->aborted = 1; +} + +int h2_worker_is_aborted(h2_worker *worker) +{ + return worker->aborted; +} + +apr_thread_t *h2_worker_get_thread(h2_worker *worker) +{ + return worker->thread; +} + +apr_thread_cond_t *h2_worker_get_cond(h2_worker *worker) +{ + return worker->io; +} + +apr_socket_t *h2_worker_get_socket(h2_worker *worker) +{ + return worker->socket; +} + +apr_pool_t *h2_worker_get_pool(h2_worker *worker) +{ + return worker->pool; +} + +apr_bucket_alloc_t *h2_worker_get_bucket_alloc(h2_worker *worker) +{ + return worker->bucket_alloc; +} + diff --git a/modules/http2/mod_h2/h2_worker.h b/modules/http2/mod_h2/h2_worker.h new file mode 100644 index 0000000000..9c69e6b57a --- /dev/null +++ b/modules/http2/mod_h2/h2_worker.h @@ -0,0 +1,155 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_worker__ +#define __mod_h2__h2_worker__ + +struct apr_thread_cond_t; +struct h2_mplx; +struct h2_task; + +/* h2_worker is a basically a apr_thread_t that reads fromt he h2_workers + * task queue and runs h2_tasks it is given. + */ +typedef struct h2_worker h2_worker; + +/* Invoked when the worker wants a new task to process. Will block + * until a h2_mplx becomes available or the worker itself + * gets aborted (idle timeout, for example). */ +typedef apr_status_t h2_worker_mplx_next_fn(h2_worker *worker, + struct h2_mplx **pm, + struct h2_task **ptask, + void *ctx); + +/* Invoked just before the worker thread exits. */ +typedef void h2_worker_done_fn(h2_worker *worker, void *ctx); + + +struct h2_worker { + /** Links to the rest of the workers */ + APR_RING_ENTRY(h2_worker) link; + + int id; + apr_thread_t *thread; + apr_pool_t *pool; + apr_bucket_alloc_t *bucket_alloc; + struct apr_thread_cond_t *io; + apr_socket_t *socket; + + h2_worker_mplx_next_fn *get_next; + h2_worker_done_fn *worker_done; + void *ctx; + + int aborted; + struct h2_task *task; +}; + +/** + * The magic pointer value that indicates the head of a h2_worker list + * @param b The worker list + * @return The magic pointer value + */ +#define H2_WORKER_LIST_SENTINEL(b) APR_RING_SENTINEL((b), h2_worker, link) + +/** + * Determine if the worker list is empty + * @param b The list to check + * @return true or false + */ +#define H2_WORKER_LIST_EMPTY(b) APR_RING_EMPTY((b), h2_worker, link) + +/** + * Return the first worker in a list + * @param b The list to query + * @return The first worker in the list + */ +#define H2_WORKER_LIST_FIRST(b) APR_RING_FIRST(b) + +/** + * Return the last worker in a list + * @param b The list to query + * @return The last worker int he list + */ +#define H2_WORKER_LIST_LAST(b) APR_RING_LAST(b) + +/** + * Insert a single worker at the front of a list + * @param b The list to add to + * @param e The worker to insert + */ +#define H2_WORKER_LIST_INSERT_HEAD(b, e) do { \ + h2_worker *ap__b = (e); \ + APR_RING_INSERT_HEAD((b), ap__b, h2_worker, link); \ + } while (0) + +/** + * Insert a single worker at the end of a list + * @param b The list to add to + * @param e The worker to insert + */ +#define H2_WORKER_LIST_INSERT_TAIL(b, e) do { \ + h2_worker *ap__b = (e); \ + APR_RING_INSERT_TAIL((b), ap__b, h2_worker, link); \ + } while (0) + +/** + * Get the next worker in the list + * @param e The current worker + * @return The next worker + */ +#define H2_WORKER_NEXT(e) APR_RING_NEXT((e), link) +/** + * Get the previous worker in the list + * @param e The current worker + * @return The previous worker + */ +#define H2_WORKER_PREV(e) APR_RING_PREV((e), link) + +/** + * Remove a worker from its list + * @param e The worker to remove + */ +#define H2_WORKER_REMOVE(e) APR_RING_REMOVE((e), link) + + +/* Create a new worker with given id, pool and attributes, callbacks + * callback parameter. + */ +h2_worker *h2_worker_create(int id, + apr_pool_t *pool, + apr_threadattr_t *attr, + h2_worker_mplx_next_fn *get_next, + h2_worker_done_fn *worker_done, + void *ctx); + +apr_status_t h2_worker_destroy(h2_worker *worker); + +void h2_worker_abort(h2_worker *worker); + +int h2_worker_get_id(h2_worker *worker); + +int h2_worker_is_aborted(h2_worker *worker); + +apr_pool_t *h2_worker_get_pool(h2_worker *worker); + +apr_bucket_alloc_t *h2_worker_get_bucket_alloc(h2_worker *worker); + +apr_socket_t *h2_worker_get_socket(h2_worker *worker); + +apr_thread_t *h2_worker_get_thread(h2_worker *worker); + +struct apr_thread_cond_t *h2_worker_get_cond(h2_worker *worker); + +#endif /* defined(__mod_h2__h2_worker__) */ diff --git a/modules/http2/mod_h2/h2_workers.c b/modules/http2/mod_h2/h2_workers.c new file mode 100644 index 0000000000..94c3ccde59 --- /dev/null +++ b/modules/http2/mod_h2/h2_workers.c @@ -0,0 +1,344 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include +#include +#include + +#include "h2_private.h" +#include "h2_mplx.h" +#include "h2_task.h" +#include "h2_task_queue.h" +#include "h2_worker.h" +#include "h2_workers.h" + +static int in_list(h2_workers *workers, h2_mplx *m) +{ + h2_mplx *e; + for (e = H2_MPLX_LIST_FIRST(&workers->mplxs); + e != H2_MPLX_LIST_SENTINEL(&workers->mplxs); + e = H2_MPLX_NEXT(e)) { + if (e == m) { + return 1; + } + } + return 0; +} + + +static apr_status_t get_mplx_next(h2_worker *worker, h2_mplx **pm, + h2_task **ptask, void *ctx) +{ + apr_status_t status; + h2_mplx *m = NULL; + h2_task *task = NULL; + apr_time_t max_wait, start_wait; + int has_more = 0; + h2_workers *workers = (h2_workers *)ctx; + + if (*pm && ptask != NULL) { + /* We have a h2_mplx instance and the worker wants the next task. + * Try to get one from the given mplx. */ + *ptask = h2_mplx_pop_task(*pm, &has_more); + if (*ptask) { + return APR_SUCCESS; + } + } + + if (*pm) { + /* Got a mplx handed in, but did not get or want a task from it. + * Release it, as the workers reference will be wiped. + */ + h2_mplx_release(*pm); + *pm = NULL; + } + + if (!ptask) { + /* of the worker does not want a next task, we're done. + */ + return APR_SUCCESS; + } + + max_wait = apr_time_from_sec(apr_atomic_read32(&workers->max_idle_secs)); + start_wait = apr_time_now(); + + status = apr_thread_mutex_lock(workers->lock); + if (status == APR_SUCCESS) { + ++workers->idle_worker_count; + + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, workers->s, + "h2_worker(%d): looking for work", h2_worker_get_id(worker)); + + while (!task && !h2_worker_is_aborted(worker) && !workers->aborted) { + + /* Get the next h2_mplx to process that has a task to hand out. + * If it does, place it at the end of the queu and return the + * task to the worker. + * If it (currently) has no tasks, remove it so that it needs + * to register again for scheduling. + * If we run out of h2_mplx in the queue, we need to wait for + * new mplx to arrive. Depending on how many workers do exist, + * we do a timed wait or block indefinitely. + */ + m = NULL; + while (!task && !H2_MPLX_LIST_EMPTY(&workers->mplxs)) { + m = H2_MPLX_LIST_FIRST(&workers->mplxs); + H2_MPLX_REMOVE(m); + + task = h2_mplx_pop_task(m, &has_more); + if (task) { + if (has_more) { + H2_MPLX_LIST_INSERT_TAIL(&workers->mplxs, m); + } + else { + has_more = !H2_MPLX_LIST_EMPTY(&workers->mplxs); + } + break; + } + } + + if (!task) { + /* Need to wait for either a new mplx to arrive. + */ + if (workers->worker_count > workers->min_size) { + apr_time_t now = apr_time_now(); + if (now >= (start_wait + max_wait)) { + /* waited long enough without getting a task. */ + status = APR_TIMEUP; + } + else { + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, workers->s, + "h2_worker(%d): waiting signal, " + "worker_count=%d", worker->id, + (int)workers->worker_count); + status = apr_thread_cond_timedwait(workers->mplx_added, + workers->lock, max_wait); + } + + if (status == APR_TIMEUP) { + /* waited long enough */ + if (workers->worker_count > workers->min_size) { + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, + workers->s, + "h2_workers: aborting idle worker"); + h2_worker_abort(worker); + break; + } + } + } + else { + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, workers->s, + "h2_worker(%d): waiting signal (eternal), " + "worker_count=%d", worker->id, + (int)workers->worker_count); + apr_thread_cond_wait(workers->mplx_added, workers->lock); + } + } + } + + /* Here, we either have gotten task and mplx for the worker or + * needed to give up with more than enough workers. + */ + if (task) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, workers->s, + "h2_worker(%d): start task(%s)", + h2_worker_get_id(worker), task->id); + /* Since we hand out a reference to the worker, we increase + * its ref count. + */ + h2_mplx_reference(m); + *pm = m; + *ptask = task; + + if (has_more && workers->idle_worker_count > 1) { + apr_thread_cond_signal(workers->mplx_added); + } + status = APR_SUCCESS; + } + else { + status = APR_EOF; + } + + --workers->idle_worker_count; + apr_thread_mutex_unlock(workers->lock); + } + + return status; +} + +static void worker_done(h2_worker *worker, void *ctx) +{ + h2_workers *workers = (h2_workers *)ctx; + apr_status_t status = apr_thread_mutex_lock(workers->lock); + if (status == APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, workers->s, + "h2_worker(%d): done", h2_worker_get_id(worker)); + H2_WORKER_REMOVE(worker); + --workers->worker_count; + h2_worker_destroy(worker); + + apr_thread_mutex_unlock(workers->lock); + } +} + + +static apr_status_t add_worker(h2_workers *workers) +{ + h2_worker *w = h2_worker_create(workers->next_worker_id++, + workers->pool, workers->thread_attr, + get_mplx_next, worker_done, workers); + if (!w) { + return APR_ENOMEM; + } + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, workers->s, + "h2_workers: adding worker(%d)", h2_worker_get_id(w)); + ++workers->worker_count; + H2_WORKER_LIST_INSERT_TAIL(&workers->workers, w); + return APR_SUCCESS; +} + +static apr_status_t h2_workers_start(h2_workers *workers) { + apr_status_t status = apr_thread_mutex_lock(workers->lock); + if (status == APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, workers->s, + "h2_workers: starting"); + + while (workers->worker_count < workers->min_size + && status == APR_SUCCESS) { + status = add_worker(workers); + } + apr_thread_mutex_unlock(workers->lock); + } + return status; +} + +h2_workers *h2_workers_create(server_rec *s, apr_pool_t *pool, + int min_size, int max_size) +{ + AP_DEBUG_ASSERT(s); + AP_DEBUG_ASSERT(pool); + apr_status_t status = APR_SUCCESS; + + h2_workers *workers = apr_pcalloc(pool, sizeof(h2_workers)); + if (workers) { + workers->s = s; + workers->pool = pool; + workers->min_size = min_size; + workers->max_size = max_size; + apr_atomic_set32(&workers->max_idle_secs, 10); + + apr_threadattr_create(&workers->thread_attr, workers->pool); + + APR_RING_INIT(&workers->workers, h2_worker, link); + APR_RING_INIT(&workers->mplxs, h2_mplx, link); + + status = apr_thread_mutex_create(&workers->lock, + APR_THREAD_MUTEX_DEFAULT, + workers->pool); + if (status == APR_SUCCESS) { + status = apr_thread_cond_create(&workers->mplx_added, workers->pool); + } + + if (status == APR_SUCCESS) { + status = h2_workers_start(workers); + } + + if (status != APR_SUCCESS) { + h2_workers_destroy(workers); + workers = NULL; + } + } + return workers; +} + +void h2_workers_destroy(h2_workers *workers) +{ + if (workers->mplx_added) { + apr_thread_cond_destroy(workers->mplx_added); + workers->mplx_added = NULL; + } + if (workers->lock) { + apr_thread_mutex_destroy(workers->lock); + workers->lock = NULL; + } + while (!H2_MPLX_LIST_EMPTY(&workers->mplxs)) { + h2_mplx *m = H2_MPLX_LIST_FIRST(&workers->mplxs); + H2_MPLX_REMOVE(m); + } + while (!H2_WORKER_LIST_EMPTY(&workers->workers)) { + h2_worker *w = H2_WORKER_LIST_FIRST(&workers->workers); + H2_WORKER_REMOVE(w); + } +} + +apr_status_t h2_workers_register(h2_workers *workers, struct h2_mplx *m) +{ + apr_status_t status = apr_thread_mutex_lock(workers->lock); + if (status == APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, status, workers->s, + "h2_workers: register mplx(%ld)", m->id); + if (in_list(workers, m)) { + status = APR_EAGAIN; + } + else { + H2_MPLX_LIST_INSERT_TAIL(&workers->mplxs, m); + status = APR_SUCCESS; + } + + if (workers->idle_worker_count > 0) { + apr_thread_cond_signal(workers->mplx_added); + } + else if (workers->worker_count < workers->max_size) { + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, workers->s, + "h2_workers: got %d worker, adding 1", + workers->worker_count); + add_worker(workers); + } + + apr_thread_mutex_unlock(workers->lock); + } + return status; +} + +apr_status_t h2_workers_unregister(h2_workers *workers, struct h2_mplx *m) +{ + apr_status_t status = apr_thread_mutex_lock(workers->lock); + if (status == APR_SUCCESS) { + status = APR_EAGAIN; + if (in_list(workers, m)) { + H2_MPLX_REMOVE(m); + status = APR_SUCCESS; + } + apr_thread_mutex_unlock(workers->lock); + } + return status; +} + +void h2_workers_set_max_idle_secs(h2_workers *workers, int idle_secs) +{ + if (idle_secs <= 0) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, workers->s, + "h2_workers: max_worker_idle_sec value of %d" + " is not valid, ignored.", idle_secs); + return; + } + apr_atomic_set32(&workers->max_idle_secs, idle_secs); +} + diff --git a/modules/http2/mod_h2/h2_workers.h b/modules/http2/mod_h2/h2_workers.h new file mode 100644 index 0000000000..50fd6b8ad5 --- /dev/null +++ b/modules/http2/mod_h2/h2_workers.h @@ -0,0 +1,87 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __mod_h2__h2_workers__ +#define __mod_h2__h2_workers__ + +/* Thread pool specific to executing h2_tasks. Has a minimum and maximum + * number of workers it creates. Starts with minimum workers and adds + * some on load, reduces the number again when idle. + * + */ +struct apr_thread_mutex_t; +struct apr_thread_cond_t; +struct h2_mplx; +struct h2_task; +struct h2_task_queue; + +typedef struct h2_workers h2_workers; + +struct h2_workers { + server_rec *s; + apr_pool_t *pool; + int aborted; + + int next_worker_id; + int min_size; + int max_size; + + apr_threadattr_t *thread_attr; + + APR_RING_HEAD(h2_worker_list, h2_worker) workers; + APR_RING_HEAD(h2_mplx_list, h2_mplx) mplxs; + + int worker_count; + volatile apr_uint32_t max_idle_secs; + volatile apr_uint32_t idle_worker_count; + + struct apr_thread_mutex_t *lock; + struct apr_thread_cond_t *mplx_added; +}; + + +/* Create a worker pool with the given minimum and maximum number of + * threads. + */ +h2_workers *h2_workers_create(server_rec *s, apr_pool_t *pool, + int min_size, int max_size); + +/* Destroy the worker pool and all its threads. + */ +void h2_workers_destroy(h2_workers *workers); + +/** + * Registers a h2_mplx for task scheduling. If this h2_mplx runs + * out of tasks, it will be automatically be unregistered. Should + * new tasks arrive, it needs to be registered again. + */ +apr_status_t h2_workers_register(h2_workers *workers, + struct h2_mplx *m); + +/** + * Remove a h2_mplx from the worker registry. + */ +apr_status_t h2_workers_unregister(h2_workers *workers, + struct h2_mplx *m); + +/** + * Set the amount of seconds a h2_worker should wait for new tasks + * before shutting down (if there are more than the minimum number of + * workers). + */ +void h2_workers_set_max_idle_secs(h2_workers *workers, int idle_secs); + +#endif /* defined(__mod_h2__h2_workers__) */ diff --git a/modules/http2/mod_h2/m4/h2.m4 b/modules/http2/mod_h2/m4/h2.m4 new file mode 100644 index 0000000000..8ba0b2bd4d --- /dev/null +++ b/modules/http2/mod_h2/m4/h2.m4 @@ -0,0 +1 @@ +# just so it is not empty diff --git a/modules/http2/mod_h2/mod_h2.c b/modules/http2/mod_h2/mod_h2.c new file mode 100644 index 0000000000..2e5f9223c3 --- /dev/null +++ b/modules/http2/mod_h2/mod_h2.c @@ -0,0 +1,162 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include +#include + +#include "mod_h2.h" + +#include +#include "h2_stream.h" +#include "h2_alt_svc.h" +#include "h2_conn.h" +#include "h2_task.h" +#include "h2_session.h" +#include "h2_config.h" +#include "h2_ctx.h" +#include "h2_h2.h" +#include "h2_alpn.h" +#include "h2_upgrade.h" +#include "h2_version.h" + + +static void h2_hooks(apr_pool_t *pool); + +AP_DECLARE_MODULE(h2) = { + STANDARD20_MODULE_STUFF, + NULL, + NULL, + h2_config_create_svr, /* func to create per server config */ + h2_config_merge, /* func to merge per server config */ + h2_cmds, /* command handlers */ + h2_hooks +}; + +/* The module initialization. Called once as apache hook, before any multi + * processing (threaded or not) happens. It is typically at least called twice, + * see + * http://wiki.apache.org/httpd/ModuleLife + * Since the first run is just a "practise" run, we want to initialize for real + * only on the second try. This defeats the purpose of the first dry run a bit, + * since apache wants to verify that a new configuration actually will work. + * So if we have trouble with the configuration, this will only be detected + * when the server has already switched. + * On the other hand, when we initialize lib nghttp2, all possible crazy things + * might happen and this might even eat threads. So, better init on the real + * invocation, for now at least. + */ +static int h2_post_config(apr_pool_t *p, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *s) +{ + void *data = NULL; + const char *mod_h2_init_key = "mod_h2_init_counter"; + nghttp2_info *ngh2; + apr_status_t status; + (void)plog;(void)ptemp; + + apr_pool_userdata_get(&data, mod_h2_init_key, s->process->pool); + if ( data == NULL ) { + ap_log_error( APLOG_MARK, APLOG_DEBUG, 0, s, + "initializing post config dry run"); + apr_pool_userdata_set((const void *)1, mod_h2_init_key, + apr_pool_cleanup_null, s->process->pool); + return APR_SUCCESS; + } + + ngh2 = nghttp2_version(0); + ap_log_error( APLOG_MARK, APLOG_INFO, 0, s, + "mod_h2 (v%s, nghttp2 %s), initializing...", + MOD_H2_VERSION, ngh2? ngh2->version_str : "unknown"); + + switch (h2_conn_mpm_type()) { + case H2_MPM_EVENT: + case H2_MPM_WORKER: + /* all fine, we know these ones */ + break; + case H2_MPM_PREFORK: + ap_log_error( APLOG_MARK, APLOG_WARNING, 0, s, + "This httpd uses mpm_prefork for multiprocessing. " + "Please take notice that mod_h2 always with run " + "requests in a multi-threaded environment. If you " + "use prefork for single-thread connection handling, " + " mod_h2 might pose problems."); + break; + case H2_MPM_UNKNOWN: + /* ??? */ + ap_log_error( APLOG_MARK, APLOG_ERR, 0, s, + "post_config: mpm type unknown"); + break; + } + + status = h2_h2_init(p, s); + if (status == APR_SUCCESS) { + status = h2_alpn_init(p, s); + } + + return status; +} + +/* Runs once per created child process. Perform any process + * related initionalization here. + */ +static void h2_child_init(apr_pool_t *pool, server_rec *s) +{ + /* Set up our connection processing */ + apr_status_t status = h2_conn_child_init(pool, s); + if (status != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_ERR, status, s, + "initializing connection handling"); + } +} + +const char *h2_get_protocol(conn_rec *c) +{ + return h2_ctx_pnego_get(h2_ctx_get(c)); +} + +/* Install this module into the apache2 infrastructure. + */ +static void h2_hooks(apr_pool_t *pool) +{ + ap_log_perror(APLOG_MARK, APLOG_INFO, 0, pool, "installing hooks"); + + static const char *const mod_ssl[] = { "mod_ssl.c", NULL}; + + /* Run once after configuration is set, but before mpm children initialize. + */ + ap_hook_post_config(h2_post_config, mod_ssl, NULL, APR_HOOK_MIDDLE); + + /* Run once after a child process has been created. + */ + ap_hook_child_init(h2_child_init, NULL, NULL, APR_HOOK_MIDDLE); + + h2_h2_register_hooks(); + h2_alpn_register_hooks(); + h2_upgrade_register_hooks(); + h2_task_register_hooks(); + + h2_alt_svc_register_hooks(); + + /* We offer a function to other modules that lets them retrieve + * the h2 protocol used on a connection (if any). + */ + APR_REGISTER_OPTIONAL_FN(h2_get_protocol); +} + + diff --git a/modules/http2/mod_h2/mod_h2.h b/modules/http2/mod_h2/mod_h2.h new file mode 100644 index 0000000000..d27c8b2c25 --- /dev/null +++ b/modules/http2/mod_h2/mod_h2.h @@ -0,0 +1,28 @@ +/* Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef mod_h2_mod_h2_h +#define mod_h2_mod_h2_h + +const char *h2_get_protocol(conn_rec *c); + + +/** + * An optional function which returns the h2 protocol used on the given + * connection and NULL if no h2* protocol is active on it. + */ +APR_DECLARE_OPTIONAL_FN(const char *, h2_get_protocol, (conn_rec*)); + +#endif diff --git a/modules/http2/sandbox/.gitignore b/modules/http2/sandbox/.gitignore new file mode 100644 index 0000000000..17129848e9 --- /dev/null +++ b/modules/http2/sandbox/.gitignore @@ -0,0 +1,2 @@ +install +gen diff --git a/modules/http2/sandbox/Makefile.am b/modules/http2/sandbox/Makefile.am new file mode 100644 index 0000000000..698eabe932 --- /dev/null +++ b/modules/http2/sandbox/Makefile.am @@ -0,0 +1,58 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +SUBDIRS = httpd nghttp2 test +DIST_SUBDIRS = httpd nghttp2 test + +INSTALL_DIR = install + +EXTRA_DIST = \ + httpd/Makefile \ + httpd/*.sh \ + httpd/patches/* \ + httpd/packages/* \ + nghttp2/Makefile \ + test/Makefile \ + test/*.sh \ + test/*.txt \ + test/htdocs \ + test/conf \ + test/clients/Makefile + + +.PHONY: test loadtest start stop restart + +start: + make -C test start + +restart: + make -C test restart + +stop: + make -C test stop + +test: + make -C test test + +loadtest: + make -C test loadtest + +mpm_worker: + make -C test mpm_worker + +mpm_event: + make -C test mpm_event + +mpm_prefork: + make -C test mpm_prefork diff --git a/modules/http2/sandbox/httpd/.gitignore b/modules/http2/sandbox/httpd/.gitignore new file mode 100644 index 0000000000..4f62b849d5 --- /dev/null +++ b/modules/http2/sandbox/httpd/.gitignore @@ -0,0 +1 @@ +gen diff --git a/modules/http2/sandbox/httpd/Makefile b/modules/http2/sandbox/httpd/Makefile new file mode 100644 index 0000000000..45cc119484 --- /dev/null +++ b/modules/http2/sandbox/httpd/Makefile @@ -0,0 +1,319 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +OS = $(shell uname -s) +MACHINE = $(shell uname -m) + + +APR_VERSION = 1.5.2 +APR_DIR = apr-$(APR_VERSION) +APR_TAR = $(APR_DIR).tar.gz +APR_URL = http://archive.apache.org/dist/apr/$(APR_TAR) + +APR-UTIL_VERSION = 1.5.4 +APR-UTIL_DIR = apr-util-$(APR-UTIL_VERSION) +APR-UTIL_TAR = $(APR-UTIL_DIR).tar.gz +APR-UTIL_URL = http://archive.apache.org/dist/apr/$(APR-UTIL_TAR) + +HTTPD_VERSION = 2.4.12 +HTTPD_DIR = httpd-$(HTTPD_VERSION) +HTTPD_TAR = httpd-$(HTTPD_VERSION).tar.gz +HTTPD_URL = https://archive.apache.org/dist/httpd/$(HTTPD_TAR) + +HTTPD_CONF = --enable-mpms-shared=all --with-included-apr +HTTPD_DEPS = $(GEN)/$(HTTPD_DIR)/.apr-extracted + +PCRE_VERSION = 8.36 +PCRE_DIR = pcre-$(PCRE_VERSION) +PCRE_TAR = $(PCRE_DIR).tar.gz +PCRE_URL = http://sourceforge.net/projects/pcre/files/pcre/$(PCRE_VERSION)/$(PCRE_TAR) + +OPENSSL_BASE = http://www.openssl.org +OPENSSL_DIR = openssl-latest +OPENSSL_TAR = $(OPENSSL_DIR).tar.gz +OPENSSL_URL = $(OPENSSL_BASE)/source/latest.tar.gz +OPENSSL_CONF_CMD = ./config +OPENSSL_CONF = shared -fPIC + +FCGI_VERSION = 2.3.9 +FCGI_DIR = mod_fcgid-$(FCGI_VERSION) +FCGI_TAR = $(FCGI_DIR).tar.gz +FCGI_URL = https://archive.apache.org/dist/httpd/mod_fcgid/$(FCGI_TAR) + +GEN = gen +INST_DIR = ../install +BLD_PREFIX = $(shell dirname $$PWD)/install + +CURL_OPTS = --progress-bar + +# For OS X, we drag our own PCRE lib in as the one installed is not +# recognized by the httpd configure (and pbly rightly so). +# On other OS, we expect a proper pcre installation +# +ifeq ($(OS),Darwin) + # we need our own apr + apr-util + HTTPD_CONF += --with-crypto + # we need our own pcre + HTTPD_DEPS += $(INST_DIR)/.pcre-installed + HTTPD_CONF += --with-pcre=$(BLD_PREFIX) +endif + +OPENSSL_VERSION = $(shell openssl version -v | sed -e 's/OpenSSL *//g' -e 's/[a-z]* .*//g') + +ifeq ($(OPENSSL_VERSION), $(filter $(OPENSSL_VERSION),0.9.7 0.9.8 1.0.0 1.0.1)) + # Very old openssl without alpn support installed, need a newer one + HTTPD_DEPS += $(INST_DIR)/.openssl-installed + HTTPD_CONF += --enable-ssl --with-ssl=$(BLD_PREFIX) + ifeq ($(OS),Darwin) + OPENSSL_CONF_CMD = ./Configure + OPENSSL_CONF = darwin64-x86_64-cc + HTTPD_CONF += --enable-ssl-staticlib-deps + endif +endif + +HTTP_PORT = 12345 +HTTPS_PORT = 12346 + +all: install + +distdir: + +dirs: + @mkdir -p $(GEN)/build + +clean: + @rm -rf $(GEN)/$(PCRE_DIR) $(GEN)/$(OPENSSL_DIR) $(GEN)/$(HTTPD_DIR) \ + $(GEN)/build $(INST_DIR)/.httpd-installed + +distclean: + @rm -rf $(GEN) + +install: \ + $(INST_DIR)/.httpd-installed \ + $(INST_DIR)/.modules-installed + +setup: $(INST_DIR)/.httpd-setup + +copy-mod_ssl: + @cp mod_ssl-alpn/*.[ch] $(GEN)/$(HTTPD_DIR)/modules/ssl + @rm -f $(GEN)/$(HTTPD_DIR)/.httpd-built + +################################################################################ +# Install the local httpd +# +$(INST_DIR)/.httpd-installed: $(GEN)/$(HTTPD_DIR)/.httpd-built + @mkdir -p $(INST_DIR) + @echo -n installing httpd locally... + @cd $(GEN)/$(HTTPD_DIR)/ && make install + @echo done. + @touch $(INST_DIR)/.httpd-installed + + +################################################################################ +# Build the local, patched httpd +# +$(GEN)/$(HTTPD_DIR)/.httpd-built: \ + $(GEN)/$(HTTPD_DIR)/.httpd-configured + @echo -n building httpd... + @cd $(GEN)/$(HTTPD_DIR)/ && make + @echo done. + @touch $(GEN)/$(HTTPD_DIR)/.httpd-built + +################################################################################ +# Configure the local httpd sources +# +$(GEN)/$(HTTPD_DIR)/configure: + cd $(GEN)/$(HTTPD_DIR)/ && ./buildconf + +$(GEN)/$(HTTPD_DIR)/.httpd-configured: \ + $(HTTPD_DEPS) \ + $(GEN)/$(HTTPD_DIR)/configure \ + $(GEN)/$(HTTPD_DIR)/.httpd-patched + @echo -n configuring httpd... + cd $(GEN)/$(HTTPD_DIR)/ && \ + ./configure --prefix=$(BLD_PREFIX) $(HTTPD_CONF) + @echo done. + @touch $(GEN)/$(HTTPD_DIR)/.httpd-configured + +################################################################################ +# Patch the local httpd sources +# +$(GEN)/$(HTTPD_DIR)/.httpd-patched: \ + $(GEN)/$(HTTPD_DIR)/.httpd-extracted + @echo applying patches... + @cd gen/$(HTTPD_DIR) && patch -p0 < ../../patches/httpd-2.4.12-alpn-v5.patch + @cd gen/$(HTTPD_DIR) && patch -p0 < ../../patches/sni_misdirect.patch + @echo httpd patched. + @touch $(GEN)/$(HTTPD_DIR)/.httpd-patched +#@cd gen/$(HTTPD_DIR) && patch -p0 < ../../patches/alpn-2.4.x.unified.diff.patch + +################################################################################ +# Extract apache source tree +# +$(GEN)/$(HTTPD_DIR)/.httpd-extracted: \ + $(GEN)/$(HTTPD_TAR) + @rm -rf $(GEN)/$(HTTPD_DIR) + @echo -n extracting httpd packages... + @cd $(GEN) && tar xfz $(HTTPD_TAR) + @echo done. + @touch $(GEN)/$(HTTPD_DIR)/.httpd-extracted + +################################################################################ +# Extract apr + apr-util into apache source tree (if needed) +# +$(GEN)/$(HTTPD_DIR)/.apr-extracted: \ + $(GEN)/$(HTTPD_DIR)/.httpd-extracted \ + $(GEN)/$(APR_TAR) $(GEN)/$(APR-UTIL_TAR) + @rm -rf $(GEN)/$(HTTPD_DIR)/srclib/apr $(GEN)/$(HTTPD_DIR)/srclib/apr-util + @echo -n extracting apr packages... + @cd gen/$(HTTPD_DIR)/srclib; tar xfz ../../$(APR_TAR) && mv $(APR_DIR) apr + @cd gen/$(HTTPD_DIR)/srclib; tar xfz ../../$(APR-UTIL_TAR) && mv $(APR-UTIL_DIR) apr-util + @echo done. + @touch $(GEN)/$(HTTPD_DIR)/.apr-extracted + +################################################################################ +# Retrieve apache sources (and apr + apr-util if needed) +# +$(GEN)/$(HTTPD_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) $(HTTPD_URL) > $(GEN)/$(HTTPD_TAR) + +$(GEN)/$(APR_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) $(APR_URL) > $(GEN)/$(APR_TAR) + +$(GEN)/$(APR-UTIL_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) $(APR-UTIL_URL) > $(GEN)/$(APR-UTIL_TAR) + +################################################################################ +# Build + install additional modules +# +$(INST_DIR)/.modules-installed: \ + $(INST_DIR)/.httpd-installed \ + $(INST_DIR)/.mod_fcgid-installed + @touch $(INST_DIR)/.modules-installed + +################################################################################ +# Build + install mod_fcgid +# +$(INST_DIR)/.mod_fcgid-installed: \ + $(INST_DIR)/.httpd-installed \ + $(GEN)/$(FCGI_DIR)/.mod_fcgid-built + @echo -n installing mod_fcgid locally... + @cd $(GEN)/$(FCGI_DIR) && make install + @echo done. + @touch $(INST_DIR)/.mod_fcgid-installed + +$(GEN)/$(FCGI_DIR)/.mod_fcgid-built: \ + $(GEN)/$(FCGI_DIR)/.mod_fcgid-configured + @echo -n building mod_fcgid... + @cd $(GEN)/$(FCGI_DIR) && make + @echo done. + @touch $(GEN)/$(FCGI_DIR)/.mod_fcgid-built + + +$(GEN)/$(FCGI_DIR)/.mod_fcgid-configured: \ + $(GEN)/$(FCGI_DIR)/.mod_fcgid-extracted + @echo -n configuring mod_fcgid... + @cd $(GEN)/$(FCGI_DIR) && APXS=../../$(INST_DIR)/bin/apxs ./configure.apxs + @echo done. + @touch $(GEN)/$(FCGI_DIR)/.mod_fcgid-configured + +$(GEN)/$(FCGI_DIR)/.mod_fcgid-extracted: \ + $(GEN)/$(FCGI_TAR) + @rm -rf $(GEN)/$(FCGI_DIR) + @echo -n downloading and extracting mod_fcgid... + @cd gen; tar xfz $(FCGI_TAR) + @echo done. + @touch $(GEN)/$(FCGI_DIR)/.mod_fcgid-extracted + +$(GEN)/$(FCGI_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) $(FCGI_URL) > $(GEN)/$(FCGI_TAR) + + +################################################################################ +# Build + install a local opensll library (if needed) +# +$(INST_DIR)/.openssl-installed: \ + $(GEN)/$(OPENSSL_DIR)/.built + @mkdir -p $(INST_DIR) + @echo -n installing openssl locally, may take some time... + @cd $(GEN)/$(OPENSSL_DIR) && make install_sw >> ../build.log + @echo done. + @touch $(INST_DIR)/.openssl-installed + +$(GEN)/$(OPENSSL_DIR)/.built: \ + $(GEN)/$(OPENSSL_DIR)/.configured + @echo -n building openssl locally... + @cd $(GEN)/$(OPENSSL_DIR) && make + @echo done. + @touch $(GEN)/$(OPENSSL_DIR)/.built + +$(GEN)/$(OPENSSL_DIR)/.configured: \ + $(GEN)/$(OPENSSL_DIR)/.patched + @echo -n configuring openssl... + cd $(GEN)/$(OPENSSL_DIR) && $(OPENSSL_CONF_CMD) --openssldir=$(BLD_PREFIX) $(OPENSSL_CONF) + @echo done. + @touch $(GEN)/$(OPENSSL_DIR)/.configured + +$(GEN)/$(OPENSSL_DIR)/.patched: \ + $(GEN)/$(OPENSSL_DIR)/.extracted + @echo applying patches... + # experimental patch to solve SNI+ALPN callback ordering in openssl + # not vital with latest httpd-alpn patch. We leave this out of our sandbox + # to have it running against an unpatched ssl for better test coverage. + #@cd gen/$(OPENSSL_DIR) && patch -p1 < ../../patches/openssl-1.0.2-alpn.patch + @echo openssl patched. + @touch $(GEN)/$(OPENSSL_DIR)/.patched + +$(GEN)/$(OPENSSL_DIR)/.extracted: + @echo -n downloading and extracting openssl... + @mkdir -p $(GEN) + @bash get-openssl-latest.sh $(OPENSSL_URL) $(GEN)/$(OPENSSL_DIR) + @echo done. + @touch $(GEN)/$(OPENSSL_DIR)/.extracted + +################################################################################ +# Build + install a local pcre library (if needed) +# +$(INST_DIR)/.pcre-installed: \ + $(GEN)/$(PCRE_DIR)/.pcre-built + @mkdir -p $(INST_DIR) + @echo -n installing pcre locally... + @cd $(GEN)/$(PCRE_DIR) && make install >> ../build.log + @echo done. + @touch $(INST_DIR)/.pcre-installed + +$(GEN)/$(PCRE_DIR)/.pcre-built: \ + $(GEN)/$(PCRE_DIR)/.pcre-configured + @echo -n building pcre locally... + @cd $(GEN)/$(PCRE_DIR) && make >> ../build.log + @echo done. + @touch $(GEN)/$(PCRE_DIR)/.pcre-built + +$(GEN)/$(PCRE_DIR)/.pcre-configured: $(GEN)/$(PCRE_TAR) + @rm -rf $(GEN)/$(PCRE_DIR) + @cd $(GEN) && tar xfz $(PCRE_TAR) + @echo -n configuring pcre... + @cd $(GEN)/$(PCRE_DIR) && ./configure --prefix=$(BLD_PREFIX) >> ../build.log + @echo done. + @touch $(GEN)/$(PCRE_DIR)/.pcre-configured + +$(GEN)/$(PCRE_TAR): packages/$(PCRE_TAR) + @mkdir -p $(GEN) + @cp packages/$(PCRE_TAR) $(GEN) diff --git a/modules/http2/sandbox/httpd/get-openssl-latest.sh b/modules/http2/sandbox/httpd/get-openssl-latest.sh new file mode 100755 index 0000000000..558575f327 --- /dev/null +++ b/modules/http2/sandbox/httpd/get-openssl-latest.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +# get-openssl-latest.sh +# mod-h2 +# +# Created by Stefan Eissing on 24.03.15. +# Inspects the given URL for redirects and downloads tar file +# to real name. Symlinks given tar name to real name + +URL=$1 +DESTDIR=$2 + +usage() { + echo "$@" + echo "usage: $(basename $0) url dir" + echo " download and extract latest openssl url to given directory," + echo " using real version name and symlinks" + exit 2 +} + +fail() { + echo "$@" + exit 1 +} + +[ -z "$URL" ] && usage "url parameter missing" +[ -z "$DESTDIR" ] && usage "dir parameter missing" + +GEN=$(dirname "$DESTDIR") +[ -d "$GEN" ] || fail "destination dir $GEN does not exist" + +curl -s -D "$GEN"/xxx-header $URL > "$GEN"/xxx-content || fail "error downloading $URL" +REAL_URL=$( fgrep -i location: < "$GEN"/xxx-header | sed s',.*: ,,' | tr -d '\r\n' ) + +case "$REAL_URL" in + */var/www/*) + # currently openssl returns the wrong path - yet the correct tar name + REAL_TAR=$(basename $REAL_URL) + REAL_URL=$(dirname $URL)/$REAL_TAR + ;; + *) + REAL_TAR=$(basename $REAL_URL) + ;; +esac + +echo "downloading latest openssl from $REAL_URL" + +REAL_DIR=$(basename $REAL_TAR .tar.gz) +rm -f "$GEN/$REAL_TAR" "$DESTDIR" "$GEN"/xxx-header "$GEN"/xxx-content + +curl -'#' "$REAL_URL" > "$GEN/$REAL_TAR" || fail "error downloading $REAL_URL" +(cd "$GEN" && tar xfz "$REAL_TAR") || fail "error extracting $GEN/$REAL_TAR" +[ -d "$GEN/$REAL_DIR" ] || fail "expected directory $GEN/$REAL_DIR" +(cd $GEN && ln -s "$REAL_DIR" $(basename $DESTDIR)) + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile b/modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile new file mode 100644 index 0000000000..6ba1efd688 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile @@ -0,0 +1,25 @@ +top_srcdir = /Users/sei/projects/mod-h2/httpd/gen/httpd-2.4.10 +top_builddir = /Users/sei/projects/mod-h2/httpd/gen/httpd-2.4.10 +srcdir = /Users/sei/projects/mod-h2/httpd/gen/httpd-2.4.10/modules/ssl +builddir = /Users/sei/projects/mod-h2/httpd/gen/httpd-2.4.10/modules/ssl +VPATH = /Users/sei/projects/mod-h2/httpd/gen/httpd-2.4.10/modules/ssl +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# standard stuff +# + +include $(top_srcdir)/build/special.mk diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile.in b/modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile.in new file mode 100644 index 0000000000..4395bc3ac7 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/Makefile.in @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# standard stuff +# + +include $(top_srcdir)/build/special.mk diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/NWGNUmakefile b/modules/http2/sandbox/httpd/mod_ssl-alpn/NWGNUmakefile new file mode 100644 index 0000000000..933180f14a --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/NWGNUmakefile @@ -0,0 +1,327 @@ +# +# This Makefile requires the environment var OSSLSDK +# pointing to the base directory of your OpenSSL SDK. +# If you want to use the Novell NTLS SDK instead then +# define NTLSSDK pointing to the base directory of the +# SDK, and also set USE_NTLS=1 +# + +# +# Declare the sub-directories to be built here +# + +SUBDIRS = \ + $(EOLIST) + +# +# Get the 'head' of the build environment. This includes default targets and +# paths to tools +# + +include $(AP_WORK)/build/NWGNUhead.inc + +# +# build this level's files +# +# Make sure all needed macro's are defined +# + +ifeq "$(USE_NTLS)" "1" +SSL_INC = $(NTLSSDK)/inc +SSL_LIB = $(NTLSSDK)/imp +SSL_BIN = $(NTLSSDK)/bin +SSL_APP = $(NTLSSDK)/apps +ifneq "$(wildcard $(SSL_INC)/openssl/opensslv.h)" "$(SSL_INC)/openssl/opensslv.h" +$(error '$(NTLSSDK)' does NOT point to a valid NTLS SDK!) +endif +else +SSL_INC = $(OSSLSDK)/outinc_nw_libc +SSL_LIB = $(OSSLSDK)/out_nw_libc +SSL_BIN = $(OSSLSDK)/out_nw_libc +SSL_APP = $(OSSLSDK)/apps +ifneq "$(wildcard $(SSL_INC)/openssl/opensslv.h)" "$(SSL_INC)/openssl/opensslv.h" +$(error '$(OSSLSDK)' does NOT point to a valid OpenSSL SDK!) +endif +endif + +# +# These directories will be at the beginning of the include list, followed by +# INCDIRS +# +XINCDIRS += \ + $(SSL_INC) \ + $(APR)/include \ + $(APRUTIL)/include \ + $(AP_WORK)/include \ + $(AP_WORK)/modules/cache \ + $(AP_WORK)/modules/generators \ + $(AP_WORK)/server/mpm/NetWare \ + $(NWOS) \ + $(EOLIST) + +# +# These flags will come after CFLAGS +# +XCFLAGS += \ + $(EOLIST) + +# +# These defines will come after DEFINES +# +XDEFINES += \ + -DHAVE_OPENSSL \ + $(EOLIST) + +# +# These flags will be added to the link.opt file +# +XLFLAGS += \ + -l $(SSL_LIB) \ + $(EOLIST) + +# +# These values will be appended to the correct variables based on the value of +# RELEASE +# +ifeq "$(RELEASE)" "debug" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "noopt" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "release" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +# +# These are used by the link target if an NLM is being generated +# This is used by the link 'name' directive to name the nlm. If left blank +# TARGET_nlm (see below) will be used. +# +NLM_NAME = mod_ssl + +# +# This is used by the link '-desc ' directive. +# If left blank, NLM_NAME will be used. +# +ifeq "$(USE_NTLS)" "1" +NLM_DESCRIPTION = Apache $(VERSION_STR) SSL module (NTLS) +else +NLM_DESCRIPTION = Apache $(VERSION_STR) SSL module (OpenSSL) +endif + +# +# This is used by the '-threadname' directive. If left blank, +# NLM_NAME Thread will be used. +# +NLM_THREAD_NAME = $(NLM_NAME) + +# +# If this is specified, it will override VERSION value in +# $(AP_WORK)/build/NWGNUenvironment.inc +# +NLM_VERSION = + +# +# If this is specified, it will override the default of 64K +# +NLM_STACK_SIZE = 8192 + + +# +# If this is specified it will be used by the link '-entry' directive +# +NLM_ENTRY_SYM = + +# +# If this is specified it will be used by the link '-exit' directive +# +NLM_EXIT_SYM = + +# +# If this is specified it will be used by the link '-check' directive +# +NLM_CHECK_SYM = + +# +# If this is specified it will be used by the link '-flags' directive +# +NLM_FLAGS = + +# +# If this is specified it will be linked in with the XDCData option in the def +# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled +# by setting APACHE_UNIPROC in the environment +# +XDCDATA = + +# +# Declare all target files (you must add your files here) +# + +# +# If there is an NLM target, put it here +# +TARGET_nlm = \ + $(OBJDIR)/$(NLM_NAME).nlm \ + $(EOLIST) + +# +# If there is an LIB target, put it here +# +TARGET_lib = \ + $(EOLIST) + +# +# These are the OBJ files needed to create the NLM target above. +# Paths must all use the '/' character +# +FILES_nlm_objs := $(patsubst %.c,$(OBJDIR)/%.o,$(wildcard *.c)) + + +# +# These are the LIB files needed to create the NLM target above. +# These will be added as a library command in the link.opt file. +# +FILES_nlm_libs = \ + $(PRELUDE) \ + $(EOLIST) + +ifneq "$(USE_NTLS)" "1" +FILES_nlm_libs += \ + $(SSL_LIB)/crypto.lib \ + $(SSL_LIB)/ssl.lib \ + $(EOLIST) +endif + +# +# These are the modules that the above NLM target depends on to load. +# These will be added as a module command in the link.opt file. +# +FILES_nlm_modules = \ + Apache2 \ + Libc \ + $(EOLIST) + +ifeq "$(USE_NTLS)" "1" +FILES_nlm_modules += ntls \ + $(EOLIST) +endif + +# +# If the nlm has a msg file, put it's path here +# +FILE_nlm_msg = + +# +# If the nlm has a hlp file put it's path here +# +FILE_nlm_hlp = + +# +# If this is specified, it will override $(NWOS)\copyright.txt. +# +FILE_nlm_copyright = + +# +# Any additional imports go here +# +FILES_nlm_Ximports = \ + @libc.imp \ + @aprlib.imp \ + @httpd.imp \ + $(EOLIST) + +# Don't link with Winsock if standard sockets are being used +ifneq "$(USE_STDSOCKETS)" "1" +FILES_nlm_Ximports += @ws2nlm.imp \ + $(EOLIST) +endif + +ifeq "$(USE_NTLS)" "1" +FILES_nlm_Ximports += @ntls.imp \ + $(EOLIST) +else +FILES_nlm_Ximports += \ + GetProcessSwitchCount \ + RunningProcess \ + GetSuperHighResolutionTimer \ + $(EOLIST) +endif + +# +# Any symbols exported to here +# +FILES_nlm_exports = \ + ssl_module \ + $(EOLIST) + +# +# These are the OBJ files needed to create the LIB target above. +# Paths must all use the '/' character +# +FILES_lib_objs = \ + $(EOLIST) + +# +# implement targets and dependancies (leave this section alone) +# + +libs :: $(OBJDIR) $(TARGET_lib) + +nlms :: libs $(TARGET_nlm) + +# +# Updated this target to create necessary directories and copy files to the +# correct place. (See $(AP_WORK)/build/NWGNUhead.inc for examples) +# +install :: nlms FORCE + $(call COPY,$(OBJDIR)/*.nlm, $(INSTALLBASE)/modules/) + $(call COPY,$(SSL_BIN)/openssl.nlm, $(INSTALLBASE)/bin/) + $(call COPY,$(SSL_APP)/openssl.cnf, $(INSTALLBASE)/bin/) + +# +# Any specialized rules here +# +vpath %.c $(AP_WORK)/modules/arch/netware + +# +# Include the 'tail' makefile that has targets that depend on variables defined +# in this makefile +# + +include $(APBUILD)/NWGNUtail.inc + + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/README b/modules/http2/sandbox/httpd/mod_ssl-alpn/README new file mode 100644 index 0000000000..c46377f27c --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/README @@ -0,0 +1,106 @@ +SYNOPSIS + + This Apache module provides strong cryptography for the Apache 2 webserver + via the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS + v1) protocols by the help of the SSL/TLS implementation library OpenSSL which + is based on SSLeay from Eric A. Young and Tim J. Hudson. + + The mod_ssl package was created in April 1998 by Ralf S. Engelschall + and was originally derived from software developed by Ben Laurie for + use in the Apache-SSL HTTP server project. The mod_ssl implementation + for Apache 1.3 continues to be supported by the modssl project + . + +SOURCES + + See the top-level LAYOUT file for file descriptions. + + The source files are written in clean ANSI C and pass the ``gcc -O -g + -ggdb3 -Wall -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes + -Wmissing-declarations -Wnested-externs -Winline'' compiler test + (assuming `gcc' is GCC 2.95.2 or newer) without any complains. When + you make changes or additions make sure the source still passes this + compiler test. + +FUNCTIONS + + Inside the source code you will be confronted with the following types of + functions which can be identified by their prefixes: + + ap_xxxx() ............... Apache API function + ssl_xxxx() .............. mod_ssl function + SSL_xxxx() .............. OpenSSL function (SSL library) + OpenSSL_xxxx() .......... OpenSSL function (SSL library) + X509_xxxx() ............. OpenSSL function (Crypto library) + PEM_xxxx() .............. OpenSSL function (Crypto library) + EVP_xxxx() .............. OpenSSL function (Crypto library) + RSA_xxxx() .............. OpenSSL function (Crypto library) + +DATA STRUCTURES + + Inside the source code you will be confronted with the following + data structures: + + server_rec .............. Apache (Virtual) Server + conn_rec ................ Apache Connection + request_rec ............. Apache Request + SSLModConfig ............ mod_ssl (Global) Module Configuration + SSLSrvConfig ............ mod_ssl (Virtual) Server Configuration + SSLDirConfig ............ mod_ssl Directory Configuration + SSLConnConfig ........... mod_ssl Connection Configuration + SSLFilterRec ............ mod_ssl Filter Context + SSL_CTX ................. OpenSSL Context + SSL_METHOD .............. OpenSSL Protocol Method + SSL_CIPHER .............. OpenSSL Cipher + SSL_SESSION ............. OpenSSL Session + SSL ..................... OpenSSL Connection + BIO ..................... OpenSSL Connection Buffer + + For an overview how these are related and chained together have a look at the + page in README.dsov.{fig,ps}. It contains overview diagrams for those data + structures. It's designed for DIN A4 paper size, but you can easily generate + a smaller version inside XFig by specifing a magnification on the Export + panel. + +INCOMPATIBILITIES + + The following intentional incompatibilities exist between mod_ssl 2.x + from Apache 1.3 and this mod_ssl version for Apache 2: + + o The complete EAPI-based SSL_VENDOR stuff was removed. + o The complete EAPI-based SSL_COMPAT stuff was removed. + o The variable MOD_SSL is no longer provided automatically + +MAJOR CHANGES + + For a complete history of changes for Apache 2 mod_ssl, see the + CHANGES file in the top-level directory. The following + is a condensed summary of the major changes were made between + mod_ssl 2.x from Apache 1.3 and this mod_ssl version for Apache 2: + + o The DBM based session cache is now based on APR's DBM API only. + o The shared memory based session cache is now based on APR's APIs. + o SSL I/O is now implemented in terms of filters rather than BUFF + o Eliminated ap_global_ctx. Storing Persistant information in + process_rec->pool->user_data. The ssl_pphrase_Handle_CB() and + ssl_config_global_* () functions have an extra parameter now - + "server_rec *" - which is used to retrieve the SSLModConfigRec. + o Properly support restarts, allowing mod_ssl to be added to a server + that is already running and to change server certs/keys on restart + o Various performance enhancements + o proxy support is no longer an "extension", much of the mod_ssl core + was re-written (ssl_engine_{init,kernel,config}.c) to be generic so + it could be re-used in proxy mode. + - the optional function ssl_proxy_enable is provide for mod_proxy + to enable proxy support + - proxy support now requires 'SSLProxyEngine on' to be configured + - proxy now supports SSLProxyCARevocation{Path,File} in addition to + the original SSLProxy* directives + o per-directory SSLCACertificate{File,Path} is now thread-safe but + requires SSL_set_cert_store patch to OpenSSL + o the ssl_engine_{ds,ext}.c source files are obsolete and no longer + exist + +TODO + + See the top-level STATUS file for current efforts and goals. diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.fig b/modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.fig new file mode 100644 index 0000000000..d8d03db247 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.fig @@ -0,0 +1,346 @@ +#FIG 3.2 +Landscape +Center +Metric +Letter +100.00 +Single +-2 +1200 2 +0 32 #616561 +0 33 #b6b2b6 +0 34 #f7f3f7 +0 35 #cfcfcf +0 36 #ffffff +6 6345 2835 7155 3150 +6 6345 2970 7110 3150 +4 0 0 200 0 20 8 0.0000 4 120 585 6345 3105 "ssl_module")\001 +-6 +4 0 0 200 0 20 8 0.0000 4 120 660 6345 2970 ap_ctx_get(...,\001 +-6 +6 10800 2610 12240 3060 +4 0 0 200 0 20 8 0.0000 4 120 1170 10800 2745 ap_get_module_config(...\001 +4 0 0 200 0 20 8 0.0000 4 120 795 10800 2880 ->per_dir_config,\001 +4 0 0 200 0 20 8 0.0000 4 120 585 10800 3015 &ssl_module)\001 +-6 +6 7920 4770 9135 4995 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 9135 4995 7920 4995 7920 4770 9135 4770 9135 4995 +4 0 0 100 0 18 12 0.0000 4 180 1065 8010 4950 request_rec\001 +-6 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6975 3330 7425 2520 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7200 4230 9450 2520 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7875 4905 7200 5220 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6750 5130 6750 4545 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6705 5445 7155 6120 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7875 4815 7200 4590 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 9585 2565 11475 4230 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 10170 5130 11835 4545 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 7920 6075 9855 5400 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 9990 5445 10935 5625 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 10215 5310 10935 5310 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 11925 4590 11925 5085 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 9810 5490 9810 6840 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 9945 5445 10935 6030 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 8865 4725 10800 2565 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 675 6075 5850 6075 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 675 6525 675 6075 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 5850 6075 5850 6525 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 900 5625 5625 5625 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 1125 5175 5400 5175 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 1350 4725 5175 4725 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 1575 4275 4950 4275 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 1800 3825 4725 3825 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 2025 3375 4500 3375 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 2250 2925 4275 2925 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 2475 2475 4050 2475 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 2700 2025 3825 2025 +2 1 0 3 0 34 200 0 20 0.000 0 0 -1 0 0 2 + 2925 1575 3600 1575 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 900 6075 900 5625 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1125 6525 1125 5175 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1350 5175 1350 4725 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1575 4725 1575 4275 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 1800 6525 1800 3825 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2025 3825 2025 3375 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2250 3375 2250 2925 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2475 2925 2475 2475 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 5625 5625 5625 6075 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 5400 5175 5400 6525 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 5175 4725 5175 5175 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 4950 4275 4950 4725 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 4725 3825 4725 6525 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 4500 3375 4500 3825 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 4275 2925 4275 3375 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 4050 2475 4050 2925 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2700 6525 2700 2025 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 3825 2025 3825 6525 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 0 1.00 60.00 120.00 + 3600 1575 3600 2025 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 2925 2025 2925 1575 +2 1 0 4 0 0 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 4.00 60.00 120.00 + 540 6525 6300 6525 +2 3 0 1 7 7 800 0 20 0.000 0 0 -1 0 0 9 + 675 6525 5850 6525 5850 6075 5625 6075 5625 5625 900 5625 + 900 6075 675 6075 675 6525 +2 3 0 1 34 34 700 0 20 0.000 0 0 -1 0 0 13 + 1125 6525 5355 6525 5400 5175 5175 5175 5175 4725 4950 4725 + 4950 4275 1575 4275 1575 4725 1350 4725 1350 5175 1125 5175 + 1125 6525 +2 3 0 1 35 35 500 0 20 0.000 0 0 -1 0 0 17 + 1800 6525 4725 6525 4725 3825 4500 3825 4500 3375 4275 3375 + 4275 2925 4050 2925 4050 2475 2475 2475 2475 2925 2250 2925 + 2250 3375 2025 3375 2025 3825 1800 3825 1800 6525 +2 3 0 1 33 33 400 0 20 0.000 0 0 -1 0 0 9 + 2700 6525 3825 6525 3825 2025 3600 2025 3600 1575 2925 1575 + 2925 2025 2700 2025 2700 6525 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2 + 2 0 1.00 60.00 120.00 + 2 0 1.00 60.00 120.00 + 2700 6750 3825 6750 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2 + 2 0 1.00 60.00 120.00 + 2 0 1.00 60.00 120.00 + 1125 7200 5400 7200 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2 + 2 0 1.00 60.00 120.00 + 2 0 1.00 60.00 120.00 + 1800 6975 4725 6975 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 1 2 + 2 0 1.00 60.00 120.00 + 2 0 1.00 60.00 120.00 + 675 7425 5850 7425 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 675 6570 675 7650 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 1125 6570 1125 7650 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 1800 6570 1800 7650 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 2700 6570 2700 7650 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 3825 6570 3825 7650 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 4725 6570 4725 7650 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 5400 6570 5400 7650 +2 1 2 1 0 34 200 0 20 3.000 0 1 -1 0 0 2 + 5850 6570 5850 7650 +2 4 0 2 0 7 100 0 -1 0.000 0 0 20 0 0 5 + 12600 8550 450 8550 450 225 12600 225 12600 8550 +2 4 0 1 0 34 200 0 20 0.000 0 0 20 0 0 5 + 12600 1350 450 1350 450 225 12600 225 12600 1350 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 10170 2475 8775 2475 8775 2250 10170 2250 10170 2475 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 11925 2475 10575 2475 10575 2250 11925 2250 11925 2475 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 12375 4500 11430 4500 11430 4275 12375 4275 12375 4500 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 12375 5400 10980 5400 10980 5175 12375 5175 12375 5400 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 10170 5400 9675 5400 9675 5175 10170 5175 10170 5400 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 7875 6300 7200 6300 7200 6075 7875 6075 7875 6300 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 8190 2475 6750 2475 6750 2250 8190 2250 8190 2475 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 7605 3600 6300 3600 6300 3375 7605 3375 7605 3600 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 7335 4500 6300 4500 6300 4275 7335 4275 7335 4500 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 7200 5400 6300 5400 6300 5175 7200 5175 7200 5400 +2 1 0 6 7 7 600 0 -1 0.000 0 0 -1 0 0 2 + 9450 4500 6075 1935 +2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2 + 9450 4500 12465 2205 +2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2 + 9450 4500 9450 7785 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 9630 5310 7245 5310 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 11385 4365 7380 4365 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 12240 5805 10980 5805 10980 5580 12240 5580 12240 5805 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 12375 6210 10980 6210 10980 5985 12375 5985 12375 6210 +2 1 0 1 0 34 200 0 20 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 11205 6885 9900 5445 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 12285 7155 10530 7155 10530 6930 12285 6930 12285 7155 +2 4 0 1 35 35 200 0 20 0.000 0 0 4 0 0 5 + 10170 7155 9630 7155 9630 6930 10170 6930 10170 7155 +2 1 0 6 7 7 600 0 -1 0.000 0 0 4 0 0 2 + 12510 6435 9450 6435 +2 1 0 1 0 34 300 0 20 0.000 0 0 7 1 0 4 + 1 1 1.00 60.00 120.00 + 12375 4455 12510 4635 12510 6210 11970 6885 +2 1 2 1 0 34 200 0 20 1.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 9850 5143 9175 4918 +3 1 0 1 34 34 800 0 20 0.000 0 0 0 41 + 7380 1710 6390 2115 5535 2115 6075 3015 5670 3465 6165 3915 + 5715 4410 6030 5040 6030 5310 6480 5715 6390 6255 6975 6300 + 7065 6975 7965 6750 8100 7560 8955 7290 9360 7740 9720 7560 + 10755 8145 12060 8280 12375 7650 12420 7200 12510 7065 12330 6660 + 12510 6390 12420 5940 12375 5400 12510 5220 12510 4725 12600 4275 + 12375 3645 12105 3240 12150 2745 12375 2700 12330 1980 11790 1575 + 11250 1935 10125 1485 8955 2070 7785 1620 7695 1575 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 + 1.000 +4 0 0 100 0 0 12 0.0000 4 180 1440 10575 675 Ralf S. Engelschall\001 +4 0 0 100 0 18 20 0.0000 4 270 3840 4275 675 Apache+mod_ssl+OpenSSL\001 +4 0 0 100 0 0 10 0.0000 4 135 1320 10575 855 rse@engelschall.com\001 +4 0 0 100 0 0 10 0.0000 4 135 1410 10575 1035 www.engelschall.com\001 +4 0 0 100 0 0 12 0.0000 4 135 870 900 675 Version 1.3\001 +4 0 0 100 0 0 12 0.0000 4 180 1035 900 855 12-Apr-1999\001 +4 0 0 200 0 20 8 0.0000 4 60 390 6210 4680 ->server\001 +4 0 0 200 0 20 8 0.0000 4 120 855 8280 6120 ap_ctx_get(...,"ssl")\001 +4 0 0 200 0 20 8 0.0000 4 120 1170 7740 2700 ap_get_module_config(...\001 +4 0 0 200 0 20 8 0.0000 4 120 810 7740 2835 ->module_config,\001 +4 0 0 200 0 20 8 0.0000 4 120 585 7740 2970 &ssl_module)\001 +4 0 0 100 0 18 20 0.0000 4 270 1200 9000 8100 Chaining\001 +4 0 0 100 0 18 20 0.0000 4 210 1095 2745 8100 Lifetime\001 +4 0 0 100 0 18 12 0.0000 4 180 1215 810 6255 ap_global_ctx\001 +4 0 0 100 0 18 12 0.0000 4 180 1305 990 5805 SSLModConfig\001 +4 0 0 100 0 18 12 0.0000 4 180 840 4050 4455 SSL_CTX\001 +4 0 0 100 0 18 12 0.0000 4 150 975 4455 5355 server_rec\001 +4 0 0 100 0 18 12 0.0000 4 180 1260 3870 4905 SSLSrvConfig\001 +4 0 0 100 0 18 12 0.0000 4 135 480 1845 4005 BUFF\001 +4 0 0 100 0 18 12 0.0000 4 150 810 2070 3555 conn_rec\001 +4 0 0 100 0 18 12 0.0000 4 135 345 2295 3105 BIO\001 +4 0 0 100 0 18 12 0.0000 4 135 375 2565 2655 SSL\001 +4 0 0 100 0 18 12 0.0000 4 180 1185 3645 1620 SSLDirConfig\001 +4 0 0 100 0 18 12 0.0000 4 180 1065 3915 2070 request_rec\001 +4 0 0 200 0 0 8 0.0000 4 120 1440 900 7560 Startup, Runtime, Shutdown\001 +4 0 0 200 0 0 8 0.0000 4 105 975 1350 7335 Configuration Time\001 +4 0 0 200 0 0 8 0.0000 4 90 1050 2025 7110 Connection Duration\001 +4 0 0 200 0 0 8 0.0000 4 120 885 2835 6885 Request Duration\001 +4 0 0 200 0 18 20 0.0000 4 195 90 6345 6795 t\001 +4 0 0 200 0 20 8 0.0000 4 90 345 7110 5985 ->client\001 +4 0 0 100 0 18 12 0.0000 4 180 1305 6795 2430 SSLModConfig\001 +4 0 0 100 0 18 12 0.0000 4 180 1260 8865 2430 SSLSrvConfig\001 +4 0 0 100 0 18 12 0.0000 4 180 1215 6345 3555 ap_global_ctx\001 +4 0 0 100 0 18 12 0.0000 4 150 975 6345 4455 server_rec\001 +4 0 0 100 0 18 12 0.0000 4 150 810 6345 5355 conn_rec\001 +4 0 0 100 0 18 12 0.0000 4 135 375 9720 5355 SSL\001 +4 0 0 100 0 18 12 0.0000 4 180 1185 10665 2430 SSLDirConfig\001 +4 0 0 100 0 18 12 0.0000 4 135 480 7290 6255 BUFF\001 +4 0 0 100 0 18 12 0.0000 4 180 1305 11025 5355 SSL_METHOD\001 +4 0 0 100 0 18 12 0.0000 4 180 840 11475 4455 SSL_CTX\001 +4 0 0 100 0 18 24 0.0000 4 285 4365 3915 1080 Data Structure Overview\001 +4 0 0 200 0 20 8 0.0000 4 90 615 7065 5085 ->connection\001 +4 0 0 200 0 20 8 0.0000 4 60 390 7065 4770 ->server\001 +4 0 0 200 0 20 8 0.0000 4 120 960 8010 5445 SSL_get_app_data()\001 +4 0 0 200 0 20 8 0.0000 4 120 510 10530 4050 ->pSSLCtx\001 +4 0 0 200 0 20 8 0.0000 4 120 1215 7875 4275 SSL_CTX_get_app_data()\001 +4 0 0 200 0 20 8 0.0000 4 120 1155 10305 5535 SSL_get_current_cipher()\001 +4 0 0 100 0 18 12 0.0000 4 180 1170 11025 5760 SSL_CIPHER\001 +4 0 0 100 0 18 12 0.0000 4 180 1350 10980 6165 SSL_SESSION\001 +4 0 0 200 0 20 8 0.0000 4 120 840 10440 5940 SSL_get_session()\001 +4 0 0 100 0 18 12 0.0000 4 180 1665 10575 7110 X509_STORE_CTX\001 +4 0 0 100 0 18 12 0.0000 4 135 345 9720 7110 BIO\001 +4 0 0 200 0 20 8 0.0000 4 120 840 9540 7335 SSL_get_{r,w}bio()\001 +4 0 0 100 0 18 20 0.0000 4 270 1170 8730 3465 mod_ssl\001 +4 0 0 100 0 18 20 0.0000 4 270 1050 8145 6750 Apache\001 +4 0 0 200 0 20 8 0.0000 4 120 945 10125 4680 SSL_get_SSL_CTX()\001 +4 0 0 200 0 20 8 0.0000 4 120 1170 10350 5175 SSL_get_SSL_METHOD()\001 +4 0 0 200 0 20 8 0.0000 4 90 465 11745 4770 ->method\001 +4 0 0 200 0 20 8 0.0000 4 120 1665 9945 6480 X509_STORE_CTX_get_app_data()\001 +4 0 0 200 0 20 8 0.0000 4 120 1215 10980 6705 SSL_CTX_get_cert_store()\001 +4 0 0 200 0 20 8 0.0000 4 120 1020 8280 5130 SSL_get_app_data2()\001 +4 0 0 100 0 18 20 0.0000 4 270 1290 10710 7605 OpenSSL\001 +4 0 0 100 0 18 12 0.0000 4 180 720 10710 7785 [Crypto]\001 +4 0 0 100 0 18 20 0.0000 4 270 1290 10935 3645 OpenSSL\001 +4 0 0 100 0 18 12 0.0000 4 180 495 10935 3825 [SSL]\001 diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.ps b/modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.ps new file mode 100644 index 0000000000..def19dbecf --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/README.dsov.ps @@ -0,0 +1,1138 @@ +%!PS-Adobe-2.0 +%%Title: README.dsov.ps +%%Creator: fig2dev Version 3.2 Patchlevel 1 +%%CreationDate: Mon Apr 12 17:09:11 1999 +%%For: rse@en1.engelschall.com (Ralf S. Engelschall) +%%Orientation: Landscape +%%BoundingBox: 59 37 553 755 +%%Pages: 1 +%%BeginSetup +%%IncludeFeature: *PageSize Letter +%%EndSetup +%%Magnification: 0.9340 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def +/col32 {0.380 0.396 0.380 srgb} bind def +/col33 {0.714 0.698 0.714 srgb} bind def +/col34 {0.969 0.953 0.969 srgb} bind def +/col35 {0.812 0.812 0.812 srgb} bind def +/col36 {1.000 1.000 1.000 srgb} bind def + +end +save +48.0 12.0 translate + 90 rotate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/reencdict 12 dict def /ReEncode { reencdict begin +/newcodesandnames exch def /newfontname exch def /basefontname exch def +/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def +basefontdict { exch dup /FID ne { dup /Encoding eq +{ exch dup length array copy newfont 3 1 roll put } +{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall +newfont /FontName newfontname put newcodesandnames aload pop +128 1 255 { newfont /Encoding get exch /.notdef put } for +newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat +newfontname newfont definefont pop end } def +/isovec [ +8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde +8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis +8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron +8#220 /dotlessi 8#230 /oe 8#231 /OE +8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling +8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis +8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot +8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus +8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph +8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine +8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf +8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute +8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring +8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute +8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute +8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve +8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply +8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex +8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave +8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring +8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute +8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute +8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve +8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide +8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex +8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def +/Times-Roman /Times-Roman-iso isovec ReEncode +/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode +/Helvetica-Narrow /Helvetica-Narrow-iso isovec ReEncode +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit +n -1000 9572 m -1000 -1000 l 13622 -1000 l 13622 9572 l cp clip + 0.05883 0.05883 sc +%%Page: 1 1 +% Polyline +7.500 slw +n 6413 2048 m 6380 2054 l 6348 2061 l 6315 2067 l 6283 2073 l 6250 2079 l + 6217 2084 l 6185 2090 l 6152 2095 l 6120 2101 l 6088 2107 l + 6057 2113 l 6027 2120 l 5998 2126 l 5970 2134 l 5943 2141 l + 5918 2149 l 5894 2158 l 5873 2167 l 5853 2177 l 5835 2187 l + 5819 2198 l 5805 2210 l 5793 2222 l 5782 2235 l 5774 2250 l + 5768 2265 l 5763 2281 l 5760 2299 l 5759 2318 l 5759 2339 l + 5761 2360 l 5764 2383 l 5768 2408 l 5774 2433 l 5780 2460 l + 5788 2488 l 5797 2516 l 5806 2546 l 5815 2575 l 5825 2606 l + 5836 2636 l 5846 2666 l 5856 2696 l 5866 2726 l 5875 2755 l + 5884 2784 l 5892 2812 l 5899 2839 l 5905 2866 l 5910 2891 l + 5915 2916 l 5918 2940 l 5919 2968 l 5920 2995 l 5919 3022 l + 5916 3048 l 5912 3075 l 5908 3101 l 5902 3127 l 5895 3153 l + 5887 3179 l 5880 3205 l 5871 3230 l 5863 3254 l 5855 3278 l + 5848 3302 l 5841 3324 l 5834 3346 l 5829 3367 l 5824 3388 l + 5821 3408 l 5819 3427 l 5819 3446 l 5820 3465 l 5823 3484 l + 5827 3503 l 5833 3522 l 5840 3542 l 5848 3562 l 5858 3582 l + 5868 3603 l 5880 3625 l 5891 3647 l 5904 3669 l 5916 3691 l + 5929 3713 l 5941 3736 l 5953 3758 l 5964 3779 l 5974 3801 l + 5983 3822 l 5991 3843 l 5997 3863 l 6002 3883 l 6006 3903 l + 6008 3923 l 6008 3942 l 6006 3962 l 6003 3983 l 5998 4004 l + 5992 4025 l 5985 4048 l 5977 4070 l 5968 4094 l 5958 4118 l + 5947 4142 l 5936 4167 l 5925 4192 l 5913 4216 l 5902 4241 l + 5892 4266 l 5882 4291 l 5872 4315 l 5864 4339 l 5857 4362 l + 5851 4386 l 5846 4409 l 5843 4433 l 5840 4456 l 5840 4480 l + 5840 4505 l 5842 4530 l 5845 4556 l 5849 4582 l 5854 4609 l + 5860 4636 l 5867 4664 l 5875 4692 l 5883 4720 l 5892 4747 l + 5901 4774 l 5910 4801 l 5920 4827 l 5929 4852 l 5938 4875 l + 5947 4898 l 5955 4920 l 5963 4941 l 5971 4961 l 5978 4980 l + 5985 5002 l 5992 5024 l 5999 5046 l 6005 5067 l 6010 5088 l + 6016 5109 l 6022 5129 l 6027 5150 l 6033 5170 l 6039 5190 l + 6045 5209 l 6052 5228 l 6059 5246 l 6067 5264 l 6075 5281 l + 6084 5298 l 6094 5315 l 6105 5333 l 6115 5347 l 6125 5361 l + 6137 5376 l 6149 5392 l 6162 5408 l 6176 5425 l 6191 5443 l + 6206 5461 l 6221 5480 l 6237 5499 l 6253 5519 l 6269 5539 l + 6284 5559 l 6299 5579 l 6313 5599 l 6327 5619 l 6340 5639 l + 6352 5659 l 6363 5679 l 6373 5698 l 6382 5718 l 6390 5738 l + 6398 5759 l 6404 5782 l 6410 5805 l 6415 5828 l 6420 5852 l + 6424 5877 l 6428 5902 l 6431 5927 l 6435 5952 l 6438 5977 l + 6442 6001 l 6446 6025 l 6450 6048 l 6455 6069 l 6461 6090 l + 6467 6109 l 6474 6127 l 6483 6143 l 6492 6159 l 6503 6173 l + 6515 6185 l 6528 6197 l 6543 6209 l 6560 6220 l 6578 6230 l + 6598 6240 l 6619 6250 l 6641 6260 l 6663 6270 l 6687 6281 l + 6710 6291 l 6733 6302 l 6757 6312 l 6779 6324 l 6801 6335 l + 6821 6348 l 6841 6361 l 6859 6374 l 6876 6389 l 6893 6405 l + 6906 6421 l 6919 6437 l 6932 6455 l 6944 6475 l 6955 6495 l + 6967 6516 l 6979 6538 l 6991 6561 l 7003 6584 l 7015 6608 l + 7027 6631 l 7040 6654 l 7053 6677 l 7067 6699 l 7081 6720 l + 7096 6739 l 7111 6758 l 7127 6774 l 7144 6789 l 7161 6803 l + 7180 6815 l 7200 6825 l 7220 6833 l 7240 6840 l 7263 6845 l + 7286 6850 l 7311 6854 l 7338 6857 l 7365 6859 l 7394 6861 l + 7424 6862 l 7454 6864 l 7485 6865 l 7516 6866 l 7547 6867 l + 7578 6868 l 7609 6870 l 7639 6872 l 7668 6875 l 7696 6879 l + 7723 6883 l 7748 6889 l 7773 6895 l 7795 6903 l 7817 6912 l + 7838 6923 l 7857 6934 l 7875 6948 l 7892 6963 l 7909 6980 l + 7926 6998 l 7941 7017 l 7957 7038 l 7972 7060 l 7987 7083 l + 8002 7106 l 8017 7130 l 8031 7154 l 8046 7178 l 8061 7202 l + 8075 7225 l 8090 7247 l 8105 7269 l 8120 7289 l 8135 7308 l + 8151 7326 l 8167 7342 l 8184 7356 l 8202 7369 l 8220 7380 l + 8239 7390 l 8260 7397 l 8282 7404 l 8305 7409 l 8330 7413 l + 8356 7416 l 8383 7418 l 8412 7420 l 8441 7420 l 8471 7419 l + 8502 7418 l 8534 7417 l 8565 7415 l 8597 7413 l 8629 7411 l + 8660 7409 l 8690 7407 l 8720 7405 l 8749 7404 l 8777 7404 l + 8804 7404 l 8830 7405 l 8856 7407 l 8880 7410 l 8906 7414 l + 8931 7420 l 8956 7427 l 8981 7435 l 9005 7444 l 9029 7455 l + 9053 7466 l 9077 7478 l 9100 7491 l 9123 7504 l 9146 7517 l + 9168 7531 l 9190 7544 l 9210 7557 l 9230 7570 l 9250 7582 l + 9268 7593 l 9286 7604 l 9304 7613 l 9320 7621 l 9336 7629 l + 9353 7635 l 9370 7641 l 9388 7645 l 9406 7648 l 9425 7650 l + 9444 7652 l 9464 7653 l 9485 7653 l 9508 7653 l 9531 7653 l + 9555 7653 l 9579 7653 l 9605 7654 l 9631 7655 l 9658 7656 l + 9685 7659 l 9713 7662 l 9742 7666 l 9771 7672 l 9801 7679 l + 9833 7688 l 9853 7694 l 9874 7700 l 9895 7708 l 9918 7716 l + 9941 7725 l 9966 7734 l 9991 7745 l 10017 7755 l 10045 7767 l + 10073 7779 l 10102 7791 l 10132 7804 l 10163 7818 l 10194 7831 l + 10227 7845 l 10259 7860 l 10293 7874 l 10326 7889 l 10360 7903 l + 10394 7918 l 10429 7932 l 10463 7947 l 10497 7961 l 10531 7974 l + 10565 7988 l 10599 8001 l 10633 8013 l 10667 8025 l 10700 8037 l + 10733 8049 l 10767 8059 l 10800 8070 l 10834 8080 l 10868 8090 l + 10902 8099 l 10937 8108 l 10973 8117 l 11009 8125 l 11045 8133 l + 11083 8141 l 11120 8148 l 11158 8155 l 11197 8161 l 11236 8167 l + 11275 8172 l 11313 8177 l 11352 8181 l 11391 8184 l 11429 8187 l + 11467 8190 l 11504 8191 l 11540 8192 l 11576 8192 l 11610 8192 l + 11644 8191 l 11676 8189 l 11707 8187 l 11738 8184 l 11767 8180 l + 11794 8176 l 11821 8171 l 11847 8165 l 11871 8159 l 11895 8153 l + 11923 8143 l 11950 8133 l 11976 8122 l 12001 8109 l 12025 8096 l + 12048 8081 l 12071 8065 l 12092 8048 l 12113 8031 l 12133 8012 l + 12153 7992 l 12171 7972 l 12188 7951 l 12205 7930 l 12220 7909 l + 12235 7887 l 12248 7865 l 12260 7843 l 12272 7822 l 12282 7800 l + 12292 7779 l 12301 7759 l 12309 7739 l 12316 7719 l 12323 7699 l + 12330 7680 l 12338 7655 l 12345 7631 l 12352 7607 l 12359 7582 l + 12365 7558 l 12371 7533 l 12377 7508 l 12382 7484 l 12388 7460 l + 12392 7436 l 12397 7414 l 12401 7391 l 12405 7370 l 12409 7350 l + 12412 7331 l 12415 7313 l 12418 7297 l 12421 7281 l 12424 7266 l + 12428 7253 l 12432 7234 l 12437 7216 l 12442 7199 l 12446 7183 l + 12451 7166 l 12456 7150 l 12460 7134 l 12463 7117 l 12466 7101 l + 12468 7086 l 12469 7070 l 12469 7054 l 12467 7037 l 12465 7020 l + 12462 7006 l 12459 6991 l 12455 6975 l 12450 6958 l 12445 6940 l + 12440 6921 l 12434 6901 l 12428 6880 l 12422 6859 l 12416 6838 l + 12411 6817 l 12406 6796 l 12401 6776 l 12397 6756 l 12394 6736 l + 12392 6718 l 12390 6700 l 12390 6683 l 12390 6665 l 12392 6649 l + 12394 6631 l 12397 6614 l 12401 6597 l 12406 6579 l 12411 6561 l + 12416 6542 l 12422 6524 l 12428 6505 l 12434 6487 l 12440 6468 l + 12445 6450 l 12450 6432 l 12455 6414 l 12459 6396 l 12462 6378 l + 12465 6360 l 12467 6343 l 12468 6326 l 12469 6308 l 12469 6289 l + 12468 6269 l 12468 6249 l 12466 6227 l 12464 6205 l 12462 6182 l + 12460 6159 l 12457 6135 l 12454 6111 l 12451 6087 l 12447 6063 l + 12444 6040 l 12441 6016 l 12437 5993 l 12434 5970 l 12431 5948 l + 12428 5925 l 12424 5902 l 12421 5879 l 12419 5855 l 12416 5831 l + 12413 5806 l 12411 5781 l 12408 5755 l 12406 5729 l 12404 5702 l + 12403 5676 l 12401 5651 l 12400 5625 l 12400 5601 l 12399 5578 l + 12399 5555 l 12400 5534 l 12401 5514 l 12402 5495 l 12403 5477 l + 12405 5460 l 12408 5440 l 12411 5421 l 12416 5402 l 12420 5384 l + 12426 5365 l 12431 5347 l 12437 5329 l 12444 5311 l 12450 5293 l + 12456 5275 l 12462 5258 l 12468 5240 l 12474 5222 l 12479 5205 l + 12483 5186 l 12488 5168 l 12490 5152 l 12493 5135 l 12496 5117 l + 12498 5099 l 12500 5079 l 12502 5058 l 12504 5036 l 12506 5014 l + 12507 4990 l 12509 4966 l 12510 4942 l 12512 4918 l 12513 4893 l + 12515 4869 l 12516 4845 l 12518 4822 l 12520 4799 l 12521 4776 l + 12523 4754 l 12525 4733 l 12527 4713 l 12529 4693 l 12531 4673 l + 12534 4653 l 12536 4632 l 12539 4610 l 12541 4588 l 12543 4566 l + 12546 4543 l 12548 4520 l 12550 4497 l 12552 4473 l 12553 4450 l + 12554 4426 l 12555 4403 l 12555 4380 l 12555 4357 l 12555 4334 l + 12554 4312 l 12552 4290 l 12550 4267 l 12548 4245 l 12545 4224 l + 12541 4203 l 12537 4181 l 12533 4159 l 12528 4136 l 12523 4112 l + 12517 4088 l 12510 4064 l 12503 4038 l 12496 4013 l 12488 3987 l + 12479 3961 l 12471 3935 l 12462 3909 l 12452 3884 l 12443 3859 l + 12434 3835 l 12424 3811 l 12415 3788 l 12405 3766 l 12396 3744 l + 12386 3723 l 12377 3702 l 12368 3683 l 12357 3661 l 12347 3640 l + 12336 3619 l 12325 3598 l 12314 3576 l 12303 3555 l 12291 3533 l + 12280 3511 l 12269 3489 l 12257 3467 l 12246 3446 l 12235 3424 l + 12225 3402 l 12215 3381 l 12206 3360 l 12197 3340 l 12189 3320 l + 12181 3301 l 12174 3281 l 12168 3262 l 12162 3244 l 12158 3225 l + 12153 3204 l 12149 3183 l 12145 3162 l 12142 3139 l 12140 3117 l + 12138 3094 l 12137 3071 l 12137 3047 l 12138 3024 l 12139 3001 l + 12141 2978 l 12143 2956 l 12146 2935 l 12150 2915 l 12154 2896 l + 12158 2879 l 12163 2862 l 12168 2847 l 12174 2833 l 12180 2820 l + 12188 2805 l 12197 2792 l 12206 2779 l 12216 2766 l 12227 2754 l + 12238 2742 l 12249 2730 l 12260 2717 l 12272 2704 l 12282 2691 l + 12292 2676 l 12302 2661 l 12310 2645 l 12318 2627 l 12324 2608 l + 12330 2588 l 12334 2571 l 12336 2553 l 12339 2534 l 12341 2513 l + 12342 2491 l 12343 2467 l 12343 2442 l 12342 2416 l 12340 2389 l + 12338 2360 l 12335 2332 l 12331 2303 l 12326 2273 l 12320 2244 l + 12314 2215 l 12307 2187 l 12299 2159 l 12290 2132 l 12280 2106 l + 12270 2081 l 12259 2056 l 12248 2033 l 12236 2011 l 12224 1990 l + 12210 1970 l 12196 1949 l 12181 1929 l 12164 1910 l 12147 1890 l + 12129 1871 l 12110 1853 l 12090 1835 l 12070 1818 l 12049 1802 l + 12027 1787 l 12005 1773 l 11983 1761 l 11961 1749 l 11939 1739 l + 11917 1730 l 11895 1722 l 11874 1716 l 11852 1710 l 11831 1707 l + 11811 1704 l 11790 1703 l 11769 1702 l 11748 1703 l 11727 1705 l + 11706 1708 l 11683 1711 l 11660 1716 l 11636 1721 l 11612 1727 l + 11587 1733 l 11560 1740 l 11534 1747 l 11506 1754 l 11479 1761 l + 11450 1768 l 11422 1774 l 11393 1780 l 11364 1786 l 11334 1791 l + 11305 1795 l 11275 1798 l 11245 1800 l 11215 1801 l 11184 1801 l + 11153 1800 l 11128 1798 l 11104 1796 l 11078 1793 l 11052 1790 l + 11025 1785 l 10997 1781 l 10968 1776 l 10939 1770 l 10908 1764 l + 10877 1758 l 10844 1751 l 10811 1744 l 10778 1737 l 10743 1730 l + 10708 1722 l 10673 1715 l 10637 1708 l 10601 1701 l 10565 1695 l + 10530 1688 l 10494 1682 l 10458 1677 l 10422 1672 l 10387 1668 l + 10352 1664 l 10318 1661 l 10284 1658 l 10250 1657 l 10216 1656 l + 10183 1655 l 10150 1656 l 10118 1658 l 10087 1660 l 10055 1663 l + 10024 1666 l 9992 1671 l 9960 1676 l 9927 1682 l 9894 1688 l + 9861 1695 l 9827 1703 l 9792 1711 l 9757 1720 l 9721 1729 l + 9685 1738 l 9649 1748 l 9613 1757 l 9576 1767 l 9539 1778 l + 9502 1788 l 9465 1798 l 9429 1807 l 9392 1817 l 9356 1826 l + 9320 1835 l 9285 1844 l 9250 1852 l 9216 1860 l 9182 1867 l + 9148 1873 l 9115 1879 l 9082 1884 l 9050 1889 l 9018 1892 l + 8987 1895 l 8955 1898 l 8919 1899 l 8883 1900 l 8847 1899 l + 8811 1898 l 8774 1896 l 8737 1893 l 8699 1889 l 8661 1884 l + 8623 1878 l 8585 1872 l 8546 1865 l 8508 1857 l 8470 1849 l + 8432 1840 l 8395 1830 l 8358 1821 l 8322 1811 l 8287 1801 l + 8254 1790 l 8221 1780 l 8189 1770 l 8159 1760 l 8130 1750 l + 8102 1740 l 8076 1730 l 8051 1721 l 8028 1712 l 8006 1703 l + 7985 1695 l 7965 1688 l 7931 1674 l 7899 1662 l 7871 1650 l + 7844 1640 l 7820 1631 l 7798 1623 l 7778 1617 l 7760 1611 l + 7743 1607 l 7728 1603 l 7715 1601 l 7702 1600 l 7691 1600 l + 7680 1601 l 7669 1603 l 7658 1605 l 7648 1607 l 7638 1610 l + 7627 1613 l 7615 1617 l 7601 1621 l 7587 1626 l 7571 1632 l + 7554 1638 l 7536 1645 l 7517 1653 l 7496 1661 l 7474 1670 l + 7452 1679 l 7428 1689 l 7403 1699 l 7378 1709 l 7352 1720 l + 7325 1731 l 7297 1743 l 7268 1755 l 7247 1763 l 7226 1772 l + 7204 1781 l 7182 1790 l 7158 1800 l 7133 1810 l 7108 1820 l + 7081 1831 l 7053 1842 l 7025 1853 l 6996 1864 l 6966 1875 l + 6935 1886 l 6904 1898 l 6873 1909 l 6841 1921 l 6809 1932 l + 6776 1943 l 6744 1954 l 6712 1964 l 6680 1974 l 6649 1984 l + 6618 1994 l 6587 2003 l 6557 2011 l 6527 2019 l 6498 2027 l + 6469 2034 l 6441 2041 l cp gs col34 1.00 shd ef gr gs col34 s gr +% Polyline +n 675 6525 m 5850 6525 l 5850 6075 l 5625 6075 l 5625 5625 l 900 5625 l + 900 6075 l 675 6075 l cp gs col7 1.00 shd ef gr gs col7 s gr +% Polyline +n 1125 6525 m 5355 6525 l 5400 5175 l 5175 5175 l 5175 4725 l 4950 4725 l + 4950 4275 l 1575 4275 l 1575 4725 l 1350 4725 l 1350 5175 l + 1125 5175 l cp gs col34 1.00 shd ef gr gs col34 s gr +% Polyline +75.000 slw +n 9450 4500 m 12465 2205 l gs col7 s gr +% Polyline +n 9450 4500 m 9450 7785 l gs col7 s gr +% Polyline +n 9450 4500 m 6075 1935 l gs col7 s gr +% Polyline +n 12510 6435 m 9450 6435 l gs col7 s gr +% Polyline +7.500 slw +n 1800 6525 m 4725 6525 l 4725 3825 l 4500 3825 l 4500 3375 l 4275 3375 l + 4275 2925 l 4050 2925 l 4050 2475 l 2475 2475 l 2475 2925 l + 2250 2925 l 2250 3375 l 2025 3375 l 2025 3825 l 1800 3825 l + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 2700 6525 m 3825 6525 l 3825 2025 l 3600 2025 l 3600 1575 l 2925 1575 l + 2925 2025 l 2700 2025 l cp gs col33 1.00 shd ef gr gs col33 s gr +% Polyline +gs clippath +12068 6810 m 11970 6885 l 12022 6773 l 11937 6878 l 11984 6915 l cp +clip +n 12375 4455 m 12510 4635 l 12510 6210 l 11970 6885 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 12068 6810 m 11970 6885 l 12022 6773 l 12045 6791 l 12068 6810 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +7113 6004 m 7155 6120 l 7063 6037 l 7138 6149 l 7188 6116 l cp +clip +n 6705 5445 m 7155 6120 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 7113 6004 m 7155 6120 l 7063 6037 l 7088 6020 l 7113 6004 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +7304 4656 m 7200 4590 l 7323 4599 l 7195 4557 l 7176 4614 l cp +clip +n 7875 4815 m 7200 4590 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 7304 4656 m 7200 4590 l 7323 4599 l 7314 4628 l 7304 4656 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +11405 4128 m 11475 4230 l 11365 4173 l 11466 4262 l 11506 4217 l cp +clip +n 9585 2565 m 11475 4230 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 11405 4128 m 11475 4230 l 11365 4173 l 11385 4151 l 11405 4128 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +11712 4556 m 11835 4545 l 11732 4613 l 11859 4568 l 11839 4512 l cp +clip +n 10170 5130 m 11835 4545 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 11712 4556 m 11835 4545 l 11732 4613 l 11722 4585 l 11712 4556 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +9732 5411 m 9855 5400 l 9752 5468 l 9879 5423 l 9859 5367 l cp +clip +n 7920 6075 m 9855 5400 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 9732 5411 m 9855 5400 l 9752 5468 l 9742 5440 l 9732 5411 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +10823 5573 m 10935 5625 l 10812 5632 l 10944 5657 l 10955 5598 l cp +clip +n 9990 5445 m 10935 5625 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 10823 5573 m 10935 5625 l 10812 5632 l 10817 5603 l 10823 5573 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +10815 5280 m 10935 5310 l 10815 5340 l 10950 5340 l 10950 5280 l cp +clip +n 10215 5310 m 10935 5310 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 10815 5280 m 10935 5310 l 10815 5340 l 10815 5310 l 10815 5280 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +11955 4965 m 11925 5085 l 11895 4965 l 11895 5100 l 11955 5100 l cp +clip +n 11925 4590 m 11925 5085 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 11955 4965 m 11925 5085 l 11895 4965 l 11925 4965 l 11955 4965 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +9840 6720 m 9810 6840 l 9780 6720 l 9780 6855 l 9840 6855 l cp +clip +n 9810 5490 m 9810 6840 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 9840 6720 m 9810 6840 l 9780 6720 l 9810 6720 l 9840 6720 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +10847 5943 m 10935 6030 l 10816 5995 l 10933 6063 l 10963 6012 l cp +clip +n 9945 5445 m 10935 6030 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 10847 5943 m 10935 6030 l 10816 5995 l 10832 5969 l 10847 5943 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +10698 2634 m 10800 2565 l 10742 2674 l 10832 2574 l 10788 2534 l cp +clip +n 8865 4725 m 10800 2565 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 10698 2634 m 10800 2565 l 10742 2674 l 10720 2654 l 10698 2634 l cp gs 0.00 setgray ef gr col0 s +% Polyline +30.000 slw +n 675 6075 m 5850 6075 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +7.500 slw + [15 15] 15 sd +gs clippath +645 6195 m 675 6075 l 705 6195 l 705 6060 l 645 6060 l cp +clip +n 675 6525 m 675 6075 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 645 6195 m 675 6075 l 705 6195 l 675 6195 l 645 6195 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +5880 6405 m 5850 6525 l 5820 6405 l 5820 6540 l 5880 6540 l cp +clip +n 5850 6075 m 5850 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 5880 6405 m 5850 6525 l 5820 6405 l 5850 6405 l 5880 6405 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +30.000 slw +n 900 5625 m 5625 5625 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 1125 5175 m 5400 5175 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 1350 4725 m 5175 4725 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 1575 4275 m 4950 4275 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 1800 3825 m 4725 3825 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 2025 3375 m 4500 3375 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 2250 2925 m 4275 2925 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 2475 2475 m 4050 2475 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 2700 2025 m 3825 2025 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 2925 1575 m 3600 1575 l gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +7.500 slw + [15 15] 15 sd +gs clippath +870 5745 m 900 5625 l 930 5745 l 930 5610 l 870 5610 l cp +clip +n 900 6075 m 900 5625 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 870 5745 m 900 5625 l 930 5745 l 900 5745 l 870 5745 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +1095 5295 m 1125 5175 l 1155 5295 l 1155 5160 l 1095 5160 l cp +clip +n 1125 6525 m 1125 5175 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 1095 5295 m 1125 5175 l 1155 5295 l 1125 5295 l 1095 5295 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +1320 4845 m 1350 4725 l 1380 4845 l 1380 4710 l 1320 4710 l cp +clip +n 1350 5175 m 1350 4725 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 1320 4845 m 1350 4725 l 1380 4845 l 1350 4845 l 1320 4845 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +1545 4395 m 1575 4275 l 1605 4395 l 1605 4260 l 1545 4260 l cp +clip +n 1575 4725 m 1575 4275 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 1545 4395 m 1575 4275 l 1605 4395 l 1575 4395 l 1545 4395 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +1770 3945 m 1800 3825 l 1830 3945 l 1830 3810 l 1770 3810 l cp +clip +n 1800 6525 m 1800 3825 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 1770 3945 m 1800 3825 l 1830 3945 l 1800 3945 l 1770 3945 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +1995 3495 m 2025 3375 l 2055 3495 l 2055 3360 l 1995 3360 l cp +clip +n 2025 3825 m 2025 3375 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 1995 3495 m 2025 3375 l 2055 3495 l 2025 3495 l 1995 3495 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +2220 3045 m 2250 2925 l 2280 3045 l 2280 2910 l 2220 2910 l cp +clip +n 2250 3375 m 2250 2925 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 2220 3045 m 2250 2925 l 2280 3045 l 2250 3045 l 2220 3045 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +2445 2595 m 2475 2475 l 2505 2595 l 2505 2460 l 2445 2460 l cp +clip +n 2475 2925 m 2475 2475 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 2445 2595 m 2475 2475 l 2505 2595 l 2475 2595 l 2445 2595 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +5655 5955 m 5625 6075 l 5595 5955 l 5595 6090 l 5655 6090 l cp +clip +n 5625 5625 m 5625 6075 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 5655 5955 m 5625 6075 l 5595 5955 l 5625 5955 l 5655 5955 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +5430 6405 m 5400 6525 l 5370 6405 l 5370 6540 l 5430 6540 l cp +clip +n 5400 5175 m 5400 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 5430 6405 m 5400 6525 l 5370 6405 l 5400 6405 l 5430 6405 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +5205 5055 m 5175 5175 l 5145 5055 l 5145 5190 l 5205 5190 l cp +clip +n 5175 4725 m 5175 5175 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 5205 5055 m 5175 5175 l 5145 5055 l 5175 5055 l 5205 5055 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +4980 4605 m 4950 4725 l 4920 4605 l 4920 4740 l 4980 4740 l cp +clip +n 4950 4275 m 4950 4725 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 4980 4605 m 4950 4725 l 4920 4605 l 4950 4605 l 4980 4605 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +4755 6405 m 4725 6525 l 4695 6405 l 4695 6540 l 4755 6540 l cp +clip +n 4725 3825 m 4725 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 4755 6405 m 4725 6525 l 4695 6405 l 4725 6405 l 4755 6405 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +4530 3705 m 4500 3825 l 4470 3705 l 4470 3840 l 4530 3840 l cp +clip +n 4500 3375 m 4500 3825 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 4530 3705 m 4500 3825 l 4470 3705 l 4500 3705 l 4530 3705 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +4305 3255 m 4275 3375 l 4245 3255 l 4245 3390 l 4305 3390 l cp +clip +n 4275 2925 m 4275 3375 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 4305 3255 m 4275 3375 l 4245 3255 l 4275 3255 l 4305 3255 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +4080 2805 m 4050 2925 l 4020 2805 l 4020 2940 l 4080 2940 l cp +clip +n 4050 2475 m 4050 2925 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 4080 2805 m 4050 2925 l 4020 2805 l 4050 2805 l 4080 2805 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +2670 2145 m 2700 2025 l 2730 2145 l 2730 2010 l 2670 2010 l cp +clip +n 2700 6525 m 2700 2025 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 2670 2145 m 2700 2025 l 2730 2145 l 2700 2145 l 2670 2145 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +3855 6405 m 3825 6525 l 3795 6405 l 3795 6540 l 3855 6540 l cp +clip +n 3825 2025 m 3825 6525 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 3855 6405 m 3825 6525 l 3795 6405 l 3825 6405 l 3855 6405 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +3630 1905 m 3600 2025 l 3570 1905 l 3570 2040 l 3630 2040 l cp +clip +n 3600 1575 m 3600 2025 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 3630 1905 m 3600 2025 l 3570 1905 l 3600 1905 l 3630 1905 l cp gs col7 1.00 shd ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +2895 1695 m 2925 1575 l 2955 1695 l 2955 1560 l 2895 1560 l cp +clip +n 2925 2025 m 2925 1575 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 2895 1695 m 2925 1575 l 2955 1695 l 2925 1695 l 2895 1695 l cp gs 0.00 setgray ef gr col0 s +% Polyline +45.000 slw +gs clippath +6087 6495 m 6207 6525 l 6087 6555 l 6360 6555 l 6360 6495 l cp +clip +n 540 6525 m 6300 6525 l gs 0.00 setgray ef gr gs col0 s gr gr + +% arrowhead +n 6087 6495 m 6207 6525 l 6087 6555 l 6087 6525 l 6087 6495 l cp gs 0.00 setgray ef gr col0 s +% Polyline +7.500 slw +gs clippath +3681 6720 m 3825 6750 l 3681 6780 l 3840 6780 l 3840 6720 l cp +2844 6780 m 2700 6750 l 2844 6720 l 2685 6720 l 2685 6780 l cp +clip +n 2700 6750 m 3825 6750 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 2844 6780 m 2700 6750 l 2844 6720 l 2820 6750 l 2844 6780 l cp gs col7 1.00 shd ef gr col0 s +% arrowhead +n 3681 6720 m 3825 6750 l 3681 6780 l 3705 6750 l 3681 6720 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +5256 7170 m 5400 7200 l 5256 7230 l 5415 7230 l 5415 7170 l cp +1269 7230 m 1125 7200 l 1269 7170 l 1110 7170 l 1110 7230 l cp +clip +n 1125 7200 m 5400 7200 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 1269 7230 m 1125 7200 l 1269 7170 l 1245 7200 l 1269 7230 l cp gs col7 1.00 shd ef gr col0 s +% arrowhead +n 5256 7170 m 5400 7200 l 5256 7230 l 5280 7200 l 5256 7170 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +4581 6945 m 4725 6975 l 4581 7005 l 4740 7005 l 4740 6945 l cp +1944 7005 m 1800 6975 l 1944 6945 l 1785 6945 l 1785 7005 l cp +clip +n 1800 6975 m 4725 6975 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 1944 7005 m 1800 6975 l 1944 6945 l 1920 6975 l 1944 7005 l cp gs col7 1.00 shd ef gr col0 s +% arrowhead +n 4581 6945 m 4725 6975 l 4581 7005 l 4605 6975 l 4581 6945 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +gs clippath +5706 7395 m 5850 7425 l 5706 7455 l 5865 7455 l 5865 7395 l cp +819 7455 m 675 7425 l 819 7395 l 660 7395 l 660 7455 l cp +clip +n 675 7425 m 5850 7425 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 819 7455 m 675 7425 l 819 7395 l 795 7425 l 819 7455 l cp gs col7 1.00 shd ef gr col0 s +% arrowhead +n 5706 7395 m 5850 7425 l 5706 7455 l 5730 7425 l 5706 7395 l cp gs col7 1.00 shd ef gr col0 s +% Polyline +1 slc + [15 45] 45 sd +n 675 6570 m 675 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 45] 45 sd +n 1125 6570 m 1125 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 45] 45 sd +n 1800 6570 m 1800 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 45] 45 sd +n 2700 6570 m 2700 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 45] 45 sd +n 3825 6570 m 3825 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 45] 45 sd +n 4725 6570 m 4725 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 45] 45 sd +n 5400 6570 m 5400 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline + [15 45] 45 sd +n 5850 6570 m 5850 7650 l gs col34 1.00 shd ef gr gs col0 s gr [] 0 sd +% Polyline +0 slc +n 750 225 m 450 225 450 1050 300 arcto 4 {pop} repeat + 450 1350 12300 1350 300 arcto 4 {pop} repeat + 12600 1350 12600 525 300 arcto 4 {pop} repeat + 12600 225 750 225 300 arcto 4 {pop} repeat + cp gs col34 1.00 shd ef gr gs col0 s gr +% Polyline +n 8835 2250 m 8775 2250 8775 2415 60 arcto 4 {pop} repeat + 8775 2475 10110 2475 60 arcto 4 {pop} repeat + 10170 2475 10170 2310 60 arcto 4 {pop} repeat + 10170 2250 8835 2250 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 10635 2250 m 10575 2250 10575 2415 60 arcto 4 {pop} repeat + 10575 2475 11865 2475 60 arcto 4 {pop} repeat + 11925 2475 11925 2310 60 arcto 4 {pop} repeat + 11925 2250 10635 2250 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 11490 4275 m 11430 4275 11430 4440 60 arcto 4 {pop} repeat + 11430 4500 12315 4500 60 arcto 4 {pop} repeat + 12375 4500 12375 4335 60 arcto 4 {pop} repeat + 12375 4275 11490 4275 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 11040 5175 m 10980 5175 10980 5340 60 arcto 4 {pop} repeat + 10980 5400 12315 5400 60 arcto 4 {pop} repeat + 12375 5400 12375 5235 60 arcto 4 {pop} repeat + 12375 5175 11040 5175 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 9735 5175 m 9675 5175 9675 5340 60 arcto 4 {pop} repeat + 9675 5400 10110 5400 60 arcto 4 {pop} repeat + 10170 5400 10170 5235 60 arcto 4 {pop} repeat + 10170 5175 9735 5175 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 7260 6075 m 7200 6075 7200 6240 60 arcto 4 {pop} repeat + 7200 6300 7815 6300 60 arcto 4 {pop} repeat + 7875 6300 7875 6135 60 arcto 4 {pop} repeat + 7875 6075 7260 6075 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 6810 2250 m 6750 2250 6750 2415 60 arcto 4 {pop} repeat + 6750 2475 8130 2475 60 arcto 4 {pop} repeat + 8190 2475 8190 2310 60 arcto 4 {pop} repeat + 8190 2250 6810 2250 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 6360 3375 m 6300 3375 6300 3540 60 arcto 4 {pop} repeat + 6300 3600 7545 3600 60 arcto 4 {pop} repeat + 7605 3600 7605 3435 60 arcto 4 {pop} repeat + 7605 3375 6360 3375 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 6360 4275 m 6300 4275 6300 4440 60 arcto 4 {pop} repeat + 6300 4500 7275 4500 60 arcto 4 {pop} repeat + 7335 4500 7335 4335 60 arcto 4 {pop} repeat + 7335 4275 6360 4275 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 6360 5175 m 6300 5175 6300 5340 60 arcto 4 {pop} repeat + 6300 5400 7140 5400 60 arcto 4 {pop} repeat + 7200 5400 7200 5235 60 arcto 4 {pop} repeat + 7200 5175 6360 5175 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +gs clippath +7365 5340 m 7245 5310 l 7365 5280 l 7230 5280 l 7230 5340 l cp +clip +n 9630 5310 m 7245 5310 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 7365 5340 m 7245 5310 l 7365 5280 l 7365 5310 l 7365 5340 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +7500 4395 m 7380 4365 l 7500 4335 l 7365 4335 l 7365 4395 l cp +clip +n 11385 4365 m 7380 4365 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 7500 4395 m 7380 4365 l 7500 4335 l 7500 4365 l 7500 4395 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 11040 5580 m 10980 5580 10980 5745 60 arcto 4 {pop} repeat + 10980 5805 12180 5805 60 arcto 4 {pop} repeat + 12240 5805 12240 5640 60 arcto 4 {pop} repeat + 12240 5580 11040 5580 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 11040 5985 m 10980 5985 10980 6150 60 arcto 4 {pop} repeat + 10980 6210 12315 6210 60 arcto 4 {pop} repeat + 12375 6210 12375 6045 60 arcto 4 {pop} repeat + 12375 5985 11040 5985 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +gs clippath +9958 5554 m 9900 5445 l 10003 5514 l 9912 5414 l 9868 5454 l cp +clip +n 11205 6885 m 9900 5445 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 9958 5554 m 9900 5445 l 10003 5514 l 9981 5534 l 9958 5554 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 10590 6930 m 10530 6930 10530 7095 60 arcto 4 {pop} repeat + 10530 7155 12225 7155 60 arcto 4 {pop} repeat + 12285 7155 12285 6990 60 arcto 4 {pop} repeat + 12285 6930 10590 6930 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +n 9690 6930 m 9630 6930 9630 7095 60 arcto 4 {pop} repeat + 9630 7155 10110 7155 60 arcto 4 {pop} repeat + 10170 7155 10170 6990 60 arcto 4 {pop} repeat + 10170 6930 9690 6930 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +/Times-Roman-iso ff 120.00 scf sf +900 7560 m +gs 1 -1 sc (Startup, Runtime, Shutdown) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +6345 2970 m +gs 1 -1 sc (ap_ctx_get\(...,) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10800 2745 m +gs 1 -1 sc (ap_get_module_config\(...) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10800 2880 m +gs 1 -1 sc (->per_dir_config,) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10800 3015 m +gs 1 -1 sc (&ssl_module\)) col0 sh gr +% Polyline +n 7980 4770 m 7920 4770 7920 4935 60 arcto 4 {pop} repeat + 7920 4995 9075 4995 60 arcto 4 {pop} repeat + 9135 4995 9135 4830 60 arcto 4 {pop} repeat + 9135 4770 7980 4770 60 arcto 4 {pop} repeat + cp gs col35 1.00 shd ef gr gs col35 s gr +% Polyline +gs clippath +7340 2610 m 7425 2520 l 7393 2639 l 7459 2521 l 7406 2492 l cp +clip +n 6975 3330 m 7425 2520 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 7340 2610 m 7425 2520 l 7393 2639 l 7367 2625 l 7340 2610 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +9336 2569 m 9450 2520 l 9373 2616 l 9480 2535 l 9444 2487 l cp +clip +n 7200 4230 m 9450 2520 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 9336 2569 m 9450 2520 l 9373 2616 l 9354 2593 l 9336 2569 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +7321 5196 m 7200 5220 l 7296 5142 l 7174 5199 l 7199 5254 l cp +clip +n 7875 4905 m 7200 5220 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 7321 5196 m 7200 5220 l 7296 5142 l 7309 5169 l 7321 5196 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6720 4665 m 6750 4545 l 6780 4665 l 6780 4530 l 6720 4530 l cp +clip +n 6750 5130 m 6750 4545 l gs col34 1.00 shd ef gr gs col0 s gr gr + +% arrowhead +n 6720 4665 m 6750 4545 l 6780 4665 l 6750 4665 l 6720 4665 l cp gs 0.00 setgray ef gr col0 s +% Polyline + [15 15] 15 sd +gs clippath +9279 4984 m 9175 4918 l 9298 4927 l 9170 4885 l 9151 4942 l cp +clip +n 9850 5143 m 9175 4918 l gs col34 1.00 shd ef gr gs col0 s gr gr + [] 0 sd +% arrowhead +n 9279 4984 m 9175 4918 l 9298 4927 l 9289 4956 l 9279 4984 l cp gs 0.00 setgray ef gr col0 s +/Helvetica-Narrow-iso ff 120.00 scf sf +6210 4680 m +gs 1 -1 sc (->server) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +8280 6120 m +gs 1 -1 sc (ap_ctx_get\(...,"ssl"\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +7740 2700 m +gs 1 -1 sc (ap_get_module_config\(...) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +7740 2835 m +gs 1 -1 sc (->module_config,) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +7740 2970 m +gs 1 -1 sc (&ssl_module\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +6345 3105 m +gs 1 -1 sc ("ssl_module"\)) col0 sh gr +/Times-Roman-iso ff 120.00 scf sf +1350 7335 m +gs 1 -1 sc (Configuration Time) col0 sh gr +/Times-Roman-iso ff 120.00 scf sf +2025 7110 m +gs 1 -1 sc (Connection Duration) col0 sh gr +/Times-Roman-iso ff 120.00 scf sf +2835 6885 m +gs 1 -1 sc (Request Duration) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +6345 6795 m +gs 1 -1 sc (t) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +7110 5985 m +gs 1 -1 sc (->client) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +7065 5085 m +gs 1 -1 sc (->connection) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +7065 4770 m +gs 1 -1 sc (->server) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +8010 5445 m +gs 1 -1 sc (SSL_get_app_data\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10530 4050 m +gs 1 -1 sc (->pSSLCtx) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +7875 4275 m +gs 1 -1 sc (SSL_CTX_get_app_data\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10305 5535 m +gs 1 -1 sc (SSL_get_current_cipher\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10440 5940 m +gs 1 -1 sc (SSL_get_session\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +9540 7335 m +gs 1 -1 sc (SSL_get_{r,w}bio\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10125 4680 m +gs 1 -1 sc (SSL_get_SSL_CTX\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10350 5175 m +gs 1 -1 sc (SSL_get_SSL_METHOD\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +11745 4770 m +gs 1 -1 sc (->method) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +9945 6480 m +gs 1 -1 sc (X509_STORE_CTX_get_app_data\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +10980 6705 m +gs 1 -1 sc (SSL_CTX_get_cert_store\(\)) col0 sh gr +/Helvetica-Narrow-iso ff 120.00 scf sf +8280 5130 m +gs 1 -1 sc (SSL_get_app_data2\(\)) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +3645 1620 m +gs 1 -1 sc (SSLDirConfig) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +10935 3645 m +gs 1 -1 sc (OpenSSL) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +10935 3825 m +gs 1 -1 sc ([SSL]) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +11025 5760 m +gs 1 -1 sc (SSL_CIPHER) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +10980 6165 m +gs 1 -1 sc (SSL_SESSION) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +10710 7605 m +gs 1 -1 sc (OpenSSL) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +10575 7110 m +gs 1 -1 sc (X509_STORE_CTX) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +6795 2430 m +gs 1 -1 sc (SSLModConfig) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +8865 2430 m +gs 1 -1 sc (SSLSrvConfig) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +6345 3555 m +gs 1 -1 sc (ap_global_ctx) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +6345 4455 m +gs 1 -1 sc (server_rec) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +6345 5355 m +gs 1 -1 sc (conn_rec) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +9720 5355 m +gs 1 -1 sc (SSL) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +10665 2430 m +gs 1 -1 sc (SSLDirConfig) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +7290 6255 m +gs 1 -1 sc (BUFF) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +11025 5355 m +gs 1 -1 sc (SSL_METHOD) col0 sh gr +% Polyline +15.000 slw +n 750 225 m 450 225 450 8250 300 arcto 4 {pop} repeat + 450 8550 12300 8550 300 arcto 4 {pop} repeat + 12600 8550 12600 525 300 arcto 4 {pop} repeat + 12600 225 750 225 300 arcto 4 {pop} repeat + cp gs col0 s gr +/Helvetica-Bold-iso ff 180.00 scf sf +11475 4455 m +gs 1 -1 sc (SSL_CTX) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +8010 4950 m +gs 1 -1 sc (request_rec) col0 sh gr +/Times-Roman-iso ff 180.00 scf sf +10575 675 m +gs 1 -1 sc (Ralf S. Engelschall) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +4275 675 m +gs 1 -1 sc (Apache+mod_ssl+OpenSSL) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +10575 855 m +gs 1 -1 sc (rse@engelschall.com) col0 sh gr +/Times-Roman-iso ff 150.00 scf sf +10575 1035 m +gs 1 -1 sc (www.engelschall.com) col0 sh gr +/Times-Roman-iso ff 180.00 scf sf +900 675 m +gs 1 -1 sc (Version 1.3) col0 sh gr +/Times-Roman-iso ff 180.00 scf sf +900 855 m +gs 1 -1 sc (12-Apr-1999) col0 sh gr +/Helvetica-Bold-iso ff 360.00 scf sf +3915 1080 m +gs 1 -1 sc (Data Structure Overview) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +9720 7110 m +gs 1 -1 sc (BIO) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +10710 7785 m +gs 1 -1 sc ([Crypto]) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +8730 3465 m +gs 1 -1 sc (mod_ssl) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +8145 6750 m +gs 1 -1 sc (Apache) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +9000 8100 m +gs 1 -1 sc (Chaining) col0 sh gr +/Helvetica-Bold-iso ff 300.00 scf sf +2745 8100 m +gs 1 -1 sc (Lifetime) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +810 6255 m +gs 1 -1 sc (ap_global_ctx) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +990 5805 m +gs 1 -1 sc (SSLModConfig) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +4050 4455 m +gs 1 -1 sc (SSL_CTX) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +4455 5355 m +gs 1 -1 sc (server_rec) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +3870 4905 m +gs 1 -1 sc (SSLSrvConfig) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +1845 4005 m +gs 1 -1 sc (BUFF) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +2070 3555 m +gs 1 -1 sc (conn_rec) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +2295 3105 m +gs 1 -1 sc (BIO) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +2565 2655 m +gs 1 -1 sc (SSL) col0 sh gr +/Helvetica-Bold-iso ff 180.00 scf sf +3915 2070 m +gs 1 -1 sc (request_rec) col0 sh gr +$F2psEnd +rs +showpage diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/config.m4 b/modules/http2/sandbox/httpd/mod_ssl-alpn/config.m4 new file mode 100644 index 0000000000..45eeb43d9d --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/config.m4 @@ -0,0 +1,57 @@ +dnl Licensed to the Apache Software Foundation (ASF) under one or more +dnl contributor license agreements. See the NOTICE file distributed with +dnl this work for additional information regarding copyright ownership. +dnl The ASF licenses this file to You under the Apache License, Version 2.0 +dnl (the "License"); you may not use this file except in compliance with +dnl the License. You may obtain a copy of the License at +dnl +dnl http://www.apache.org/licenses/LICENSE-2.0 +dnl +dnl Unless required by applicable law or agreed to in writing, software +dnl distributed under the License is distributed on an "AS IS" BASIS, +dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +dnl See the License for the specific language governing permissions and +dnl limitations under the License. + +dnl # start of module specific part +APACHE_MODPATH_INIT(ssl) + +dnl # list of module object files +ssl_objs="dnl +mod_ssl.lo dnl +ssl_engine_config.lo dnl +ssl_engine_init.lo dnl +ssl_engine_io.lo dnl +ssl_engine_kernel.lo dnl +ssl_engine_log.lo dnl +ssl_engine_mutex.lo dnl +ssl_engine_pphrase.lo dnl +ssl_engine_rand.lo dnl +ssl_engine_vars.lo dnl +ssl_scache.lo dnl +ssl_util_stapling.lo dnl +ssl_util.lo dnl +ssl_util_ssl.lo dnl +ssl_engine_ocsp.lo dnl +ssl_util_ocsp.lo dnl +" +dnl # hook module into the Autoconf mechanism (--enable-ssl option) +APACHE_MODULE(ssl, [SSL/TLS support (mod_ssl)], $ssl_objs, , most, [ + APACHE_CHECK_OPENSSL + if test "$ac_cv_openssl" = "yes" ; then + if test "x$enable_ssl" = "xshared"; then + # The only symbol which needs to be exported is the module + # structure, so ask libtool to hide everything else: + APR_ADDTO(MOD_SSL_LDADD, [-export-symbols-regex ssl_module]) + fi + else + enable_ssl=no + fi +]) + +# Ensure that other modules can pick up mod_ssl.h +APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current]) + +dnl # end of module specific part +APACHE_MODPATH_FINISH + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.c new file mode 100644 index 0000000000..2c465f69bd --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.c @@ -0,0 +1,641 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * mod_ssl.c + * Apache API interface structures + */ + +#include "ssl_private.h" +#include "mod_ssl.h" +#include "util_md5.h" +#include "util_mutex.h" +#include "ap_provider.h" + +#include + +/* + * the table of configuration directives we provide + */ + +#define SSL_CMD_ALL(name, args, desc) \ + AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \ + NULL, RSRC_CONF|OR_AUTHCFG, desc), + +#define SSL_CMD_SRV(name, args, desc) \ + AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \ + NULL, RSRC_CONF, desc), + +#define SSL_CMD_DIR(name, type, args, desc) \ + AP_INIT_##args("SSL"#name, ssl_cmd_SSL##name, \ + NULL, OR_##type, desc), + +#define AP_END_CMD { NULL } + +static const command_rec ssl_config_cmds[] = { + /* + * Global (main-server) context configuration directives + */ + SSL_CMD_SRV(PassPhraseDialog, TAKE1, + "SSL dialog mechanism for the pass phrase query " + "('builtin', '|/path/to/pipe_program', " + "or 'exec:/path/to/cgi_program')") + SSL_CMD_SRV(SessionCache, TAKE1, + "SSL Session Cache storage " + "('none', 'nonenotnull', 'dbm:/path/to/file')") +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT) + SSL_CMD_SRV(CryptoDevice, TAKE1, + "SSL external Crypto Device usage " + "('builtin', '...')") +#endif + SSL_CMD_SRV(RandomSeed, TAKE23, + "SSL Pseudo Random Number Generator (PRNG) seeding source " + "('startup|connect builtin|file:/path|exec:/path [bytes]')") + + /* + * Per-server context configuration directives + */ + SSL_CMD_SRV(Engine, TAKE1, + "SSL switch for the protocol engine " + "('on', 'off')") + SSL_CMD_SRV(FIPS, FLAG, + "Enable FIPS-140 mode " + "(`on', `off')") + SSL_CMD_ALL(CipherSuite, TAKE1, + "Colon-delimited list of permitted SSL Ciphers " + "('XXX:...:XXX' - see manual)") + SSL_CMD_SRV(CertificateFile, TAKE1, + "SSL Server Certificate file " + "('/path/to/file' - PEM or DER encoded)") + SSL_CMD_SRV(CertificateKeyFile, TAKE1, + "SSL Server Private Key file " + "('/path/to/file' - PEM or DER encoded)") + SSL_CMD_SRV(CertificateChainFile, TAKE1, + "SSL Server CA Certificate Chain file " + "('/path/to/file' - PEM encoded)") +#ifdef HAVE_TLS_SESSION_TICKETS + SSL_CMD_SRV(SessionTicketKeyFile, TAKE1, + "TLS session ticket encryption/decryption key file (RFC 5077) " + "('/path/to/file' - file with 48 bytes of random data)") +#endif + SSL_CMD_ALL(CACertificatePath, TAKE1, + "SSL CA Certificate path " + "('/path/to/dir' - contains PEM encoded files)") + SSL_CMD_ALL(CACertificateFile, TAKE1, + "SSL CA Certificate file " + "('/path/to/file' - PEM encoded)") + SSL_CMD_SRV(CADNRequestPath, TAKE1, + "SSL CA Distinguished Name path " + "('/path/to/dir' - symlink hashes to PEM of acceptable CA names to request)") + SSL_CMD_SRV(CADNRequestFile, TAKE1, + "SSL CA Distinguished Name file " + "('/path/to/file' - PEM encoded to derive acceptable CA names to request)") + SSL_CMD_SRV(CARevocationPath, TAKE1, + "SSL CA Certificate Revocation List (CRL) path " + "('/path/to/dir' - contains PEM encoded files)") + SSL_CMD_SRV(CARevocationFile, TAKE1, + "SSL CA Certificate Revocation List (CRL) file " + "('/path/to/file' - PEM encoded)") + SSL_CMD_SRV(CARevocationCheck, TAKE1, + "SSL CA Certificate Revocation List (CRL) checking mode") + SSL_CMD_ALL(VerifyClient, TAKE1, + "SSL Client verify type " + "('none', 'optional', 'require', 'optional_no_ca')") + SSL_CMD_ALL(VerifyDepth, TAKE1, + "SSL Client verify depth " + "('N' - number of intermediate certificates)") + SSL_CMD_SRV(SessionCacheTimeout, TAKE1, + "SSL Session Cache object lifetime " + "('N' - number of seconds)") +#ifdef HAVE_TLSV1_X +#define SSL_PROTOCOLS "SSLv3|TLSv1|TLSv1.1|TLSv1.2" +#else +#define SSL_PROTOCOLS "SSLv3|TLSv1" +#endif + SSL_CMD_SRV(Protocol, RAW_ARGS, + "Enable or disable various SSL protocols " + "('[+-][" SSL_PROTOCOLS "] ...' - see manual)") + SSL_CMD_SRV(HonorCipherOrder, FLAG, + "Use the server's cipher ordering preference") + SSL_CMD_SRV(Compression, FLAG, + "Enable SSL level compression " + "(`on', `off')") + SSL_CMD_SRV(InsecureRenegotiation, FLAG, + "Enable support for insecure renegotiation") + SSL_CMD_ALL(UserName, TAKE1, + "Set user name to SSL variable value") + SSL_CMD_SRV(StrictSNIVHostCheck, FLAG, + "Strict SNI virtual host checking") + +#ifdef HAVE_SRP + SSL_CMD_SRV(SRPVerifierFile, TAKE1, + "SRP verifier file " + "('/path/to/file' - created by srptool)") + SSL_CMD_SRV(SRPUnknownUserSeed, TAKE1, + "SRP seed for unknown users (to avoid leaking a user's existence) " + "('some secret text')") +#endif + + /* + * Proxy configuration for remote SSL connections + */ + SSL_CMD_SRV(ProxyEngine, FLAG, + "SSL switch for the proxy protocol engine " + "('on', 'off')") + SSL_CMD_SRV(ProxyProtocol, RAW_ARGS, + "SSL Proxy: enable or disable SSL protocol flavors " + "('[+-][" SSL_PROTOCOLS "] ...' - see manual)") + SSL_CMD_SRV(ProxyCipherSuite, TAKE1, + "SSL Proxy: colon-delimited list of permitted SSL ciphers " + "('XXX:...:XXX' - see manual)") + SSL_CMD_SRV(ProxyVerify, TAKE1, + "SSL Proxy: whether to verify the remote certificate " + "('on' or 'off')") + SSL_CMD_SRV(ProxyVerifyDepth, TAKE1, + "SSL Proxy: maximum certificate verification depth " + "('N' - number of intermediate certificates)") + SSL_CMD_SRV(ProxyCACertificateFile, TAKE1, + "SSL Proxy: file containing server certificates " + "('/path/to/file' - PEM encoded certificates)") + SSL_CMD_SRV(ProxyCACertificatePath, TAKE1, + "SSL Proxy: directory containing server certificates " + "('/path/to/dir' - contains PEM encoded certificates)") + SSL_CMD_SRV(ProxyCARevocationPath, TAKE1, + "SSL Proxy: CA Certificate Revocation List (CRL) path " + "('/path/to/dir' - contains PEM encoded files)") + SSL_CMD_SRV(ProxyCARevocationFile, TAKE1, + "SSL Proxy: CA Certificate Revocation List (CRL) file " + "('/path/to/file' - PEM encoded)") + SSL_CMD_SRV(ProxyCARevocationCheck, TAKE1, + "SSL Proxy: CA Certificate Revocation List (CRL) checking mode") + SSL_CMD_SRV(ProxyMachineCertificateFile, TAKE1, + "SSL Proxy: file containing client certificates " + "('/path/to/file' - PEM encoded certificates)") + SSL_CMD_SRV(ProxyMachineCertificatePath, TAKE1, + "SSL Proxy: directory containing client certificates " + "('/path/to/dir' - contains PEM encoded certificates)") + SSL_CMD_SRV(ProxyMachineCertificateChainFile, TAKE1, + "SSL Proxy: file containing issuing certificates " + "of the client certificate " + "(`/path/to/file' - PEM encoded certificates)") + SSL_CMD_SRV(ProxyCheckPeerExpire, FLAG, + "SSL Proxy: check the peer certificate's expiration date") + SSL_CMD_SRV(ProxyCheckPeerCN, FLAG, + "SSL Proxy: check the peer certificate's CN") + SSL_CMD_SRV(ProxyCheckPeerName, FLAG, + "SSL Proxy: check the peer certificate's name " + "(must be present in subjectAltName extension or CN") + + /* + * Per-directory context configuration directives + */ + SSL_CMD_DIR(Options, OPTIONS, RAW_ARGS, + "Set one or more options to configure the SSL engine" + "('[+-]option[=value] ...' - see manual)") + SSL_CMD_DIR(RequireSSL, AUTHCFG, NO_ARGS, + "Require the SSL protocol for the per-directory context " + "(no arguments)") + SSL_CMD_DIR(Require, AUTHCFG, RAW_ARGS, + "Require a boolean expression to evaluate to true for granting access" + "(arbitrary complex boolean expression - see manual)") + SSL_CMD_DIR(RenegBufferSize, AUTHCFG, TAKE1, + "Configure the amount of memory that will be used for buffering the " + "request body if a per-location SSL renegotiation is required due to " + "changed access control requirements") + + SSL_CMD_SRV(OCSPEnable, FLAG, + "Enable use of OCSP to verify certificate revocation ('on', 'off')") + SSL_CMD_SRV(OCSPDefaultResponder, TAKE1, + "URL of the default OCSP Responder") + SSL_CMD_SRV(OCSPOverrideResponder, FLAG, + "Force use of the default responder URL ('on', 'off')") + SSL_CMD_SRV(OCSPResponseTimeSkew, TAKE1, + "Maximum time difference in OCSP responses") + SSL_CMD_SRV(OCSPResponseMaxAge, TAKE1, + "Maximum age of OCSP responses") + SSL_CMD_SRV(OCSPResponderTimeout, TAKE1, + "OCSP responder query timeout") + SSL_CMD_SRV(OCSPUseRequestNonce, FLAG, + "Whether OCSP queries use a nonce or not ('on', 'off')") + +#ifdef HAVE_OCSP_STAPLING + /* + * OCSP Stapling options + */ + SSL_CMD_SRV(StaplingCache, TAKE1, + "SSL Stapling Response Cache storage " + "(`dbm:/path/to/file')") + SSL_CMD_SRV(UseStapling, FLAG, + "SSL switch for the OCSP Stapling protocol " "(`on', `off')") + SSL_CMD_SRV(StaplingResponseTimeSkew, TAKE1, + "SSL stapling option for maximum time difference in OCSP responses") + SSL_CMD_SRV(StaplingResponderTimeout, TAKE1, + "SSL stapling option for OCSP responder timeout") + SSL_CMD_SRV(StaplingResponseMaxAge, TAKE1, + "SSL stapling option for maximum age of OCSP responses") + SSL_CMD_SRV(StaplingStandardCacheTimeout, TAKE1, + "SSL stapling option for normal OCSP Response Cache Lifetime") + SSL_CMD_SRV(StaplingReturnResponderErrors, FLAG, + "SSL stapling switch to return Status Errors Back to Client" + "(`on', `off')") + SSL_CMD_SRV(StaplingFakeTryLater, FLAG, + "SSL stapling switch to send tryLater response to client on error " + "(`on', `off')") + SSL_CMD_SRV(StaplingErrorCacheTimeout, TAKE1, + "SSL stapling option for OCSP Response Error Cache Lifetime") + SSL_CMD_SRV(StaplingForceURL, TAKE1, + "SSL stapling option to Force the OCSP Stapling URL") +#endif + +#ifdef HAVE_SSL_CONF_CMD + SSL_CMD_SRV(OpenSSLConfCmd, TAKE2, + "OpenSSL configuration command") +#endif + +#if defined(HAVE_ALPN_NPN) || defined(HAVE_TLS_NPN) + SSL_CMD_SRV(AlpnPreference, ITERATE, + "Preference in Application-Layer Protocol Negotiation (ALPN), " + "protocols are chosed in the specified order") +#endif + + /* Deprecated directives. */ + AP_INIT_RAW_ARGS("SSLLog", ap_set_deprecated, NULL, OR_ALL, + "SSLLog directive is no longer supported - use ErrorLog."), + AP_INIT_RAW_ARGS("SSLLogLevel", ap_set_deprecated, NULL, OR_ALL, + "SSLLogLevel directive is no longer supported - use LogLevel."), + + AP_END_CMD +}; + +/* + * the various processing hooks + */ +static apr_status_t ssl_cleanup_pre_config(void *data) +{ + /* + * Try to kill the internals of the SSL library. + */ + /* Corresponds to OPENSSL_load_builtin_modules(): + * XXX: borrowed from apps.h, but why not CONF_modules_free() + * which also invokes CONF_modules_finish()? + */ + CONF_modules_unload(1); + /* Corresponds to SSL_library_init: */ + EVP_cleanup(); +#if HAVE_ENGINE_LOAD_BUILTIN_ENGINES + ENGINE_cleanup(); +#endif + ERR_remove_state(0); + + /* Don't call ERR_free_strings here; ERR_load_*_strings only + * actually load the error strings once per process due to static + * variable abuse in OpenSSL. */ + + /* Also don't call CRYPTO_cleanup_all_ex_data here; any registered + * ex_data indices may have been cached in static variables in + * OpenSSL; removing them may cause havoc. Notably, with OpenSSL + * versions >= 0.9.8f, COMP_CTX cleanups would not be run, which + * could result in a per-connection memory leak (!). */ + + /* + * TODO: determine somewhere we can safely shove out diagnostics + * (when enabled) at this late stage in the game: + * CRYPTO_mem_leaks_fp(stderr); + */ + return APR_SUCCESS; +} + +static int ssl_hook_pre_config(apr_pool_t *pconf, + apr_pool_t *plog, + apr_pool_t *ptemp) +{ + /* We must register the library in full, to ensure our configuration + * code can successfully test the SSL environment. + */ + CRYPTO_malloc_init(); + ERR_load_crypto_strings(); + SSL_load_error_strings(); + SSL_library_init(); +#if HAVE_ENGINE_LOAD_BUILTIN_ENGINES + ENGINE_load_builtin_engines(); +#endif + OpenSSL_add_all_algorithms(); + OPENSSL_load_builtin_modules(); + + /* + * Let us cleanup the ssl library when the module is unloaded + */ + apr_pool_cleanup_register(pconf, NULL, ssl_cleanup_pre_config, + apr_pool_cleanup_null); + + /* Register us to handle mod_log_config %c/%x variables */ + ssl_var_log_config_register(pconf); + + /* Register to handle mod_status status page generation */ + ssl_scache_status_register(pconf); + + /* Register mutex type names so they can be configured with Mutex */ + ap_mutex_register(pconf, SSL_CACHE_MUTEX_TYPE, NULL, APR_LOCK_DEFAULT, 0); +#ifdef HAVE_OCSP_STAPLING + ap_mutex_register(pconf, SSL_STAPLING_MUTEX_TYPE, NULL, APR_LOCK_DEFAULT, 0); +#endif + + return OK; +} + +static SSLConnRec *ssl_init_connection_ctx(conn_rec *c) +{ + SSLConnRec *sslconn = myConnConfig(c); + + if (sslconn) { + return sslconn; + } + + sslconn = apr_pcalloc(c->pool, sizeof(*sslconn)); + + sslconn->server = c->base_server; + sslconn->verify_depth = UNSET; + + myConnConfigSet(c, sslconn); + + return sslconn; +} + +int ssl_proxy_enable(conn_rec *c) +{ + SSLSrvConfigRec *sc; + + SSLConnRec *sslconn = ssl_init_connection_ctx(c); + sc = mySrvConfig(sslconn->server); + + if (!sc->proxy_enabled) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01961) + "SSL Proxy requested for %s but not enabled " + "[Hint: SSLProxyEngine]", sc->vhost_id); + + return 0; + } + + sslconn->is_proxy = 1; + sslconn->disabled = 0; + + return 1; +} + +int ssl_engine_disable(conn_rec *c) +{ + SSLSrvConfigRec *sc; + + SSLConnRec *sslconn = myConnConfig(c); + + if (sslconn) { + sc = mySrvConfig(sslconn->server); + } + else { + sc = mySrvConfig(c->base_server); + } + if (sc->enabled == SSL_ENABLED_FALSE) { + return 0; + } + + sslconn = ssl_init_connection_ctx(c); + + sslconn->disabled = 1; + + return 1; +} + +static int modssl_register_alpn(conn_rec *c, + ssl_alpn_propose_protos advertisefn, + ssl_alpn_proto_negotiated negotiatedfn) +{ +#if defined(HAVE_ALPN_NPN) || defined(HAVE_TLS_NPN) + SSLConnRec *sslconn = myConnConfig(c); + + if (!sslconn) { + return DECLINED; + } + + if (!sslconn->alpn_proposefns) { + sslconn->alpn_proposefns = + apr_array_make(c->pool, 5, sizeof(ssl_alpn_propose_protos)); + sslconn->alpn_negofns = + apr_array_make(c->pool, 5, sizeof(ssl_alpn_proto_negotiated)); + } + + if (advertisefn) + APR_ARRAY_PUSH(sslconn->alpn_proposefns, ssl_alpn_propose_protos) = + advertisefn; + if (negotiatedfn) + APR_ARRAY_PUSH(sslconn->alpn_negofns, ssl_alpn_proto_negotiated) = + negotiatedfn; + + return OK; +#else + return DECLINED; +#endif +} + +int ssl_init_ssl_connection(conn_rec *c, request_rec *r) +{ + SSLSrvConfigRec *sc; + SSL *ssl; + SSLConnRec *sslconn = myConnConfig(c); + char *vhost_md5; + modssl_ctx_t *mctx; + server_rec *server; + + if (!sslconn) { + sslconn = ssl_init_connection_ctx(c); + } + server = sslconn->server; + sc = mySrvConfig(server); + + /* + * Seed the Pseudo Random Number Generator (PRNG) + */ + ssl_rand_seed(server, c->pool, SSL_RSCTX_CONNECT, ""); + + mctx = sslconn->is_proxy ? sc->proxy : sc->server; + + /* + * Create a new SSL connection with the configured server SSL context and + * attach this to the socket. Additionally we register this attachment + * so we can detach later. + */ + if (!(ssl = SSL_new(mctx->ssl_ctx))) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01962) + "Unable to create a new SSL connection from the SSL " + "context"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, server); + + c->aborted = 1; + + return DECLINED; /* XXX */ + } + + vhost_md5 = ap_md5_binary(c->pool, (unsigned char *)sc->vhost_id, + sc->vhost_id_len); + + if (!SSL_set_session_id_context(ssl, (unsigned char *)vhost_md5, + APR_MD5_DIGESTSIZE*2)) + { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01963) + "Unable to set session id context to '%s'", vhost_md5); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, server); + + c->aborted = 1; + + return DECLINED; /* XXX */ + } + + SSL_set_app_data(ssl, c); + SSL_set_app_data2(ssl, NULL); /* will be request_rec */ + + sslconn->ssl = ssl; + + SSL_set_verify_result(ssl, X509_V_OK); + + ssl_io_filter_init(c, r, ssl); + + return APR_SUCCESS; +} + +static const char *ssl_hook_http_scheme(const request_rec *r) +{ + SSLSrvConfigRec *sc = mySrvConfig(r->server); + + if (sc->enabled == SSL_ENABLED_FALSE || sc->enabled == SSL_ENABLED_OPTIONAL) { + return NULL; + } + + return "https"; +} + +static apr_port_t ssl_hook_default_port(const request_rec *r) +{ + SSLSrvConfigRec *sc = mySrvConfig(r->server); + + if (sc->enabled == SSL_ENABLED_FALSE || sc->enabled == SSL_ENABLED_OPTIONAL) { + return 0; + } + + return 443; +} + +static int ssl_hook_pre_connection(conn_rec *c, void *csd) +{ + SSLSrvConfigRec *sc; + SSLConnRec *sslconn = myConnConfig(c); + + if (sslconn) { + sc = mySrvConfig(sslconn->server); + } + else { + sc = mySrvConfig(c->base_server); + } + /* + * Immediately stop processing if SSL is disabled for this connection + */ + if (!(sc && (sc->enabled == SSL_ENABLED_TRUE || + (sslconn && sslconn->is_proxy)))) + { + return DECLINED; + } + + /* + * Create SSL context + */ + if (!sslconn) { + sslconn = ssl_init_connection_ctx(c); + } + + if (sslconn->disabled) { + return DECLINED; + } + + /* + * Remember the connection information for + * later access inside callback functions + */ + + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(01964) + "Connection to child %ld established " + "(server %s)", c->id, sc->vhost_id); + + return ssl_init_ssl_connection(c, NULL); +} + +/* + * the module registration phase + */ + +static void ssl_register_hooks(apr_pool_t *p) +{ + /* ssl_hook_ReadReq needs to use the BrowserMatch settings so must + * run after mod_setenvif's post_read_request hook. */ + static const char *pre_prr[] = { "mod_setenvif.c", NULL }; + + ssl_io_filter_register(p); + + ap_hook_pre_connection(ssl_hook_pre_connection,NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_test_config (ssl_hook_ConfigTest, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_post_config (ssl_init_Module, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_http_scheme (ssl_hook_http_scheme, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_default_port (ssl_hook_default_port, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_pre_config (ssl_hook_pre_config, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_child_init (ssl_init_Child, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_check_authn (ssl_hook_UserCheck, NULL,NULL, APR_HOOK_FIRST, + AP_AUTH_INTERNAL_PER_CONF); + ap_hook_fixups (ssl_hook_Fixup, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_check_access (ssl_hook_Access, NULL,NULL, APR_HOOK_MIDDLE, + AP_AUTH_INTERNAL_PER_CONF); + ap_hook_check_authz (ssl_hook_Auth, NULL,NULL, APR_HOOK_MIDDLE, + AP_AUTH_INTERNAL_PER_CONF); + ap_hook_post_read_request(ssl_hook_ReadReq, pre_prr,NULL, APR_HOOK_MIDDLE); + + ssl_var_register(p); + + APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable); + APR_REGISTER_OPTIONAL_FN(ssl_engine_disable); + APR_REGISTER_OPTIONAL_FN(modssl_register_alpn); + + ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "ssl", + AUTHZ_PROVIDER_VERSION, + &ssl_authz_provider_require_ssl, + AP_AUTH_INTERNAL_PER_CONF); + + ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "ssl-verify-client", + AUTHZ_PROVIDER_VERSION, + &ssl_authz_provider_verify_client, + AP_AUTH_INTERNAL_PER_CONF); + +} + +module AP_MODULE_DECLARE_DATA ssl_module = { + STANDARD20_MODULE_STUFF, + ssl_config_perdir_create, /* create per-dir config structures */ + ssl_config_perdir_merge, /* merge per-dir config structures */ + ssl_config_server_create, /* create per-server config structures */ + ssl_config_server_merge, /* merge per-server config structures */ + ssl_config_cmds, /* table of configuration directives */ + ssl_register_hooks /* register hooks */ +}; diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.dsp b/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.dsp new file mode 100644 index 0000000000..58b55456ab --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.dsp @@ -0,0 +1,195 @@ +# Microsoft Developer Studio Project File - Name="mod_ssl" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=mod_ssl - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mod_ssl.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mod_ssl.mak" CFG="mod_ssl - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mod_ssl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "mod_ssl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mod_ssl - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE" /D "HAVE_OPENSSL_ENGINE_H" /D "HAVE_ENGINE_INIT" /D "HAVE_ENGINE_LOAD_BUILTIN_ENGINES" /Fd"Release\mod_ssl_src" /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /fo"Release/mod_ssl.res" /i "../../include" /i "../../srclib/apr/include" /d "NDEBUG" /d BIN_NAME="mod_ssl.so" /d LONG_NAME="proxy_ssl_module for Apache" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /out:".\Release\mod_ssl.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so +# ADD LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib advapi32.lib gdi32.lib libeay32.lib ssleay32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Release\mod_ssl.so" /libpath:"../../srclib/openssl/out32dll" /libpath:"../../srclib/openssl/out32" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so /opt:ref +# Begin Special Build Tool +TargetPath=.\Release\mod_ssl.so +SOURCE="$(InputPath)" +PostBuild_Desc=Embed .manifest +PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2 +# End Special Build Tool + +!ELSEIF "$(CFG)" == "mod_ssl - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE" /D "HAVE_OPENSSL_ENGINE_H" /D "HAVE_ENGINE_INIT" /D "HAVE_ENGINE_LOAD_BUILTIN_ENGINES" /Fd"Debug\mod_ssl_src" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /fo"Debug/mod_ssl.res" /i "../../include" /i "../../srclib/apr/include" /d "_DEBUG" /d BIN_NAME="mod_ssl.so" /d LONG_NAME="proxy_ssl_module for Apache" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_ssl.so" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so +# ADD LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib advapi32.lib gdi32.lib libeay32.lib ssleay32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_ssl.so" /libpath:"../../srclib/openssl/out32dll.dbg" /libpath:"../../srclib/openssl/out32.dbg" /libpath:"../../srclib/openssl/out32dll" /libpath:"../../srclib/openssl/out32" /base:@..\..\os\win32\BaseAddr.ref,mod_ssl.so +# Begin Special Build Tool +TargetPath=.\Debug\mod_ssl.so +SOURCE="$(InputPath)" +PostBuild_Desc=Embed .manifest +PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2 +# End Special Build Tool + +!ENDIF + +# Begin Target + +# Name "mod_ssl - Win32 Release" +# Name "mod_ssl - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "*.c" +# Begin Source File + +SOURCE=.\mod_ssl.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_config.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_init.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_io.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_kernel.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_log.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_mutex.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_pphrase.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_rand.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_vars.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_engine_ocsp.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_util_ocsp.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_scache.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_util_stapling.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_util.c +# End Source File +# Begin Source File + +SOURCE=.\ssl_util_ssl.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "*.h" +# Begin Source File + +SOURCE=.\mod_ssl.h +# End Source File +# Begin Source File + +SOURCE=.\ssl_private.h +# End Source File +# Begin Source File + +SOURCE=.\ssl_util_ssl.h +# End Source File +# Begin Source File + +SOURCE=.\ssl_util_table.h +# End Source File +# End Group +# Begin Source File + +SOURCE=..\..\build\win32\httpd.rc +# End Source File +# End Target +# End Project diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.h b/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.h new file mode 100644 index 0000000000..2b061cbde2 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/mod_ssl.h @@ -0,0 +1,108 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file mod_ssl.h + * @brief SSL extension module for Apache + * + * @defgroup MOD_SSL mod_ssl + * @ingroup APACHE_MODS + * @{ + */ + +#ifndef __MOD_SSL_H__ +#define __MOD_SSL_H__ + +#include "httpd.h" +#include "apr_optional.h" + +/** The ssl_var_lookup() optional function retrieves SSL environment + * variables. */ +APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup, + (apr_pool_t *, server_rec *, + conn_rec *, request_rec *, + char *)); + +/** The ssl_ext_list() optional function attempts to build an array + * of all the values contained in the named X.509 extension. The + * returned array will be created in the supplied pool. + * The client certificate is used if peer is non-zero; the server + * certificate is used otherwise. + * Extension specifies the extensions to use as a string. This can be + * one of the "known" long or short names, or a numeric OID, + * e.g. "1.2.3.4", 'nsComment' and 'DN' are all valid. + * A pointer to an apr_array_header_t structure is returned if at + * least one matching extension is found, NULL otherwise. + */ +APR_DECLARE_OPTIONAL_FN(apr_array_header_t *, ssl_ext_list, + (apr_pool_t *p, conn_rec *c, int peer, + const char *extension)); + +/** An optional function which returns non-zero if the given connection + * is using SSL/TLS. */ +APR_DECLARE_OPTIONAL_FN(int, ssl_is_https, (conn_rec *)); + +/** The ssl_proxy_enable() and ssl_engine_disable() optional functions + * are used by mod_proxy to enable use of SSL for outgoing + * connections. */ + +APR_DECLARE_OPTIONAL_FN(int, ssl_proxy_enable, (conn_rec *)); + +APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec *)); + +/** The alpn_propose_proto callback allows other modules to propose + * the name of the protocol that will be chosen during the + * Application-Layer Protocol Negotiation (ALPN) portion of the SSL handshake. + * The callback is given the connection and a list of NULL-terminated + * protocol strings as supported by the client. If this client_protos is + * non-empty, it must pick its preferred protocol from that list. Otherwise + * it should add its supported protocols in order of precedence. + * The callback should not yet modify the connection or install any filters + * as its proposal(s) may be overridden by another callback or server + * configuration. + * It should return OK or, to prevent further processing of (other modules') + * callbacks, return DONE. + */ +typedef int (*ssl_alpn_propose_protos)(conn_rec *connection, + apr_array_header_t *client_protos, + apr_array_header_t *proposed_protos); + +/** The alpn_proto_negotiated callback allows other modules to discover + * the name of the protocol that was chosen during the Application-Layer + * Protocol Negotiation (ALPN) portion of the SSL handshake. + * The callback is given the connection, a + * non-NUL-terminated string containing the protocol name, and the + * length of the string; it should do something appropriate + * (i.e. insert or remove filters) and return OK. To prevent further + * processing of (other modules') callbacks, return DONE. */ +typedef int (*ssl_alpn_proto_negotiated)(conn_rec *connection, + const char *proto_name, + apr_size_t proto_name_len); + +/* An optional function which can be used to register a pair of callbacks + * for ALPN handling. + * This optional function should be invoked from a pre_connection hook + * which runs *after* mod_ssl.c's pre_connection hook. The function returns + * OK if the callbacks are registered, or DECLINED otherwise (for example if + * mod_ssl does not support ALPN). + */ +APR_DECLARE_OPTIONAL_FN(int, modssl_register_alpn, + (conn_rec *conn, + ssl_alpn_propose_protos proposefn, + ssl_alpn_proto_negotiated negotiatedfn)); + +#endif /* __MOD_SSL_H__ */ +/** @} */ diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/modules.mk b/modules/http2/sandbox/httpd/mod_ssl-alpn/modules.mk new file mode 100644 index 0000000000..11edd08d7e --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/modules.mk @@ -0,0 +1,7 @@ +mod_ssl.la: mod_ssl.slo ssl_engine_config.slo ssl_engine_init.slo ssl_engine_io.slo ssl_engine_kernel.slo ssl_engine_log.slo ssl_engine_mutex.slo ssl_engine_pphrase.slo ssl_engine_rand.slo ssl_engine_vars.slo ssl_scache.slo ssl_util_stapling.slo ssl_util.slo ssl_util_ssl.slo ssl_engine_ocsp.slo ssl_util_ocsp.slo + $(SH_LINK) -rpath $(libexecdir) -module -avoid-version mod_ssl.lo ssl_engine_config.lo ssl_engine_init.lo ssl_engine_io.lo ssl_engine_kernel.lo ssl_engine_log.lo ssl_engine_mutex.lo ssl_engine_pphrase.lo ssl_engine_rand.lo ssl_engine_vars.lo ssl_scache.lo ssl_util_stapling.lo ssl_util.lo ssl_util_ssl.lo ssl_engine_ocsp.lo ssl_util_ocsp.lo $(MOD_SSL_LDADD) +DISTCLEAN_TARGETS = modules.mk +static = +shared = mod_ssl.la +MOD_CFLAGS = -I/Users/sei/projects/mod-h2/httpd/gen/build/include +MOD_LDFLAGS = -L/Users/sei/projects/mod-h2/httpd/gen/build/lib -lssl -lcrypto -lpthread diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_config.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_config.c new file mode 100644 index 0000000000..2444d129ac --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_config.c @@ -0,0 +1,1931 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_config.c + * Apache Configuration Directives + */ + /* ``Damned if you do, + damned if you don't.'' + -- Unknown */ +#include "ssl_private.h" +#include "util_mutex.h" +#include "ap_provider.h" + +/* _________________________________________________________________ +** +** Support for Global Configuration +** _________________________________________________________________ +*/ + +#define SSL_MOD_CONFIG_KEY "ssl_module" + +SSLModConfigRec *ssl_config_global_create(server_rec *s) +{ + apr_pool_t *pool = s->process->pool; + SSLModConfigRec *mc; + void *vmc; + + apr_pool_userdata_get(&vmc, SSL_MOD_CONFIG_KEY, pool); + if (vmc) { + return vmc; /* reused for lifetime of the server */ + } + + /* + * allocate an own subpool which survives server restarts + */ + mc = (SSLModConfigRec *)apr_palloc(pool, sizeof(*mc)); + mc->pPool = pool; + mc->bFixed = FALSE; + + /* + * initialize per-module configuration + */ + mc->sesscache_mode = SSL_SESS_CACHE_OFF; + mc->sesscache = NULL; + mc->pMutex = NULL; + mc->aRandSeed = apr_array_make(pool, 4, + sizeof(ssl_randseed_t)); + mc->tVHostKeys = apr_hash_make(pool); + mc->tPrivateKey = apr_hash_make(pool); +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT) + mc->szCryptoDevice = NULL; +#endif +#ifdef HAVE_OCSP_STAPLING + mc->stapling_cache = NULL; + mc->stapling_mutex = NULL; +#endif + + apr_pool_userdata_set(mc, SSL_MOD_CONFIG_KEY, + apr_pool_cleanup_null, + pool); + + return mc; +} + +void ssl_config_global_fix(SSLModConfigRec *mc) +{ + mc->bFixed = TRUE; +} + +BOOL ssl_config_global_isfixed(SSLModConfigRec *mc) +{ + return mc->bFixed; +} + +/* _________________________________________________________________ +** +** Configuration handling +** _________________________________________________________________ +*/ + +static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p) +{ + mctx->sc = NULL; /* set during module init */ + + mctx->ssl_ctx = NULL; /* set during module init */ + + mctx->pks = NULL; + mctx->pkp = NULL; + +#ifdef HAVE_TLS_SESSION_TICKETS + mctx->ticket_key = NULL; +#endif + + mctx->protocol = SSL_PROTOCOL_ALL; + + mctx->pphrase_dialog_type = SSL_PPTYPE_UNSET; + mctx->pphrase_dialog_path = NULL; + + mctx->cert_chain = NULL; + + mctx->crl_path = NULL; + mctx->crl_file = NULL; + mctx->crl_check_mode = SSL_CRLCHECK_UNSET; + + mctx->auth.ca_cert_path = NULL; + mctx->auth.ca_cert_file = NULL; + mctx->auth.cipher_suite = NULL; + mctx->auth.verify_depth = UNSET; + mctx->auth.verify_mode = SSL_CVERIFY_UNSET; + + mctx->ocsp_enabled = FALSE; + mctx->ocsp_force_default = FALSE; + mctx->ocsp_responder = NULL; + mctx->ocsp_resptime_skew = UNSET; + mctx->ocsp_resp_maxage = UNSET; + mctx->ocsp_responder_timeout = UNSET; + mctx->ocsp_use_request_nonce = UNSET; + +#ifdef HAVE_OCSP_STAPLING + mctx->stapling_enabled = UNSET; + mctx->stapling_resptime_skew = UNSET; + mctx->stapling_resp_maxage = UNSET; + mctx->stapling_cache_timeout = UNSET; + mctx->stapling_return_errors = UNSET; + mctx->stapling_fake_trylater = UNSET; + mctx->stapling_errcache_timeout = UNSET; + mctx->stapling_responder_timeout = UNSET; + mctx->stapling_force_url = NULL; +#endif + +#ifdef HAVE_SRP + mctx->srp_vfile = NULL; + mctx->srp_unknown_user_seed = NULL; + mctx->srp_vbase = NULL; +#endif +#ifdef HAVE_SSL_CONF_CMD + mctx->ssl_ctx_config = SSL_CONF_CTX_new(); + SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_FILE); + SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_SERVER); + SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_CERTIFICATE); + mctx->ssl_ctx_param = apr_array_make(p, 5, sizeof(ssl_ctx_param_t)); +#endif +#if defined(HAVE_ALPN_NPN) || defined(HAVE_TLS_NPN) + mctx->ssl_alpn_pref = apr_array_make(p, 5, sizeof(const char *)); +#endif +} + +static void modssl_ctx_init_proxy(SSLSrvConfigRec *sc, + apr_pool_t *p) +{ + modssl_ctx_t *mctx; + + mctx = sc->proxy = apr_palloc(p, sizeof(*sc->proxy)); + + modssl_ctx_init(mctx, p); + + mctx->pkp = apr_palloc(p, sizeof(*mctx->pkp)); + + mctx->pkp->cert_file = NULL; + mctx->pkp->cert_path = NULL; + mctx->pkp->ca_cert_file = NULL; + mctx->pkp->certs = NULL; + mctx->pkp->ca_certs = NULL; +} + +static void modssl_ctx_init_server(SSLSrvConfigRec *sc, + apr_pool_t *p) +{ + modssl_ctx_t *mctx; + + mctx = sc->server = apr_palloc(p, sizeof(*sc->server)); + + modssl_ctx_init(mctx, p); + + mctx->pks = apr_pcalloc(p, sizeof(*mctx->pks)); + + mctx->pks->cert_files = apr_array_make(p, 3, sizeof(char *)); + mctx->pks->key_files = apr_array_make(p, 3, sizeof(char *)); + +#ifdef HAVE_TLS_SESSION_TICKETS + mctx->ticket_key = apr_pcalloc(p, sizeof(*mctx->ticket_key)); +#endif +} + +static SSLSrvConfigRec *ssl_config_server_new(apr_pool_t *p) +{ + SSLSrvConfigRec *sc = apr_palloc(p, sizeof(*sc)); + + sc->mc = NULL; + sc->enabled = SSL_ENABLED_UNSET; + sc->proxy_enabled = UNSET; + sc->vhost_id = NULL; /* set during module init */ + sc->vhost_id_len = 0; /* set during module init */ + sc->session_cache_timeout = UNSET; + sc->cipher_server_pref = UNSET; + sc->insecure_reneg = UNSET; + sc->proxy_ssl_check_peer_expire = SSL_ENABLED_UNSET; + sc->proxy_ssl_check_peer_cn = SSL_ENABLED_UNSET; + sc->proxy_ssl_check_peer_name = SSL_ENABLED_UNSET; +#ifdef HAVE_TLSEXT + sc->strict_sni_vhost_check = SSL_ENABLED_UNSET; +#endif +#ifdef HAVE_FIPS + sc->fips = UNSET; +#endif +#ifndef OPENSSL_NO_COMP + sc->compression = UNSET; +#endif + + modssl_ctx_init_proxy(sc, p); + + modssl_ctx_init_server(sc, p); + + return sc; +} + +/* + * Create per-server SSL configuration + */ +void *ssl_config_server_create(apr_pool_t *p, server_rec *s) +{ + SSLSrvConfigRec *sc = ssl_config_server_new(p); + + sc->mc = ssl_config_global_create(s); + + return sc; +} + +#define cfgMerge(el,unset) mrg->el = (add->el == (unset)) ? base->el : add->el +#define cfgMergeArray(el) mrg->el = apr_array_append(p, base->el, add->el) +#define cfgMergeString(el) cfgMerge(el, NULL) +#define cfgMergeBool(el) cfgMerge(el, UNSET) +#define cfgMergeInt(el) cfgMerge(el, UNSET) + +static void modssl_ctx_cfg_merge(apr_pool_t *p, + modssl_ctx_t *base, + modssl_ctx_t *add, + modssl_ctx_t *mrg) +{ + cfgMerge(protocol, SSL_PROTOCOL_ALL); + + cfgMerge(pphrase_dialog_type, SSL_PPTYPE_UNSET); + cfgMergeString(pphrase_dialog_path); + + cfgMergeString(cert_chain); + + cfgMerge(crl_path, NULL); + cfgMerge(crl_file, NULL); + cfgMerge(crl_check_mode, SSL_CRLCHECK_UNSET); + + cfgMergeString(auth.ca_cert_path); + cfgMergeString(auth.ca_cert_file); + cfgMergeString(auth.cipher_suite); + cfgMergeInt(auth.verify_depth); + cfgMerge(auth.verify_mode, SSL_CVERIFY_UNSET); + + cfgMergeBool(ocsp_enabled); + cfgMergeBool(ocsp_force_default); + cfgMerge(ocsp_responder, NULL); + cfgMergeInt(ocsp_resptime_skew); + cfgMergeInt(ocsp_resp_maxage); + cfgMergeInt(ocsp_responder_timeout); + cfgMergeBool(ocsp_use_request_nonce); +#ifdef HAVE_OCSP_STAPLING + cfgMergeBool(stapling_enabled); + cfgMergeInt(stapling_resptime_skew); + cfgMergeInt(stapling_resp_maxage); + cfgMergeInt(stapling_cache_timeout); + cfgMergeBool(stapling_return_errors); + cfgMergeBool(stapling_fake_trylater); + cfgMergeInt(stapling_errcache_timeout); + cfgMergeInt(stapling_responder_timeout); + cfgMerge(stapling_force_url, NULL); +#endif + +#ifdef HAVE_SRP + cfgMergeString(srp_vfile); + cfgMergeString(srp_unknown_user_seed); +#endif + +#ifdef HAVE_SSL_CONF_CMD + cfgMergeArray(ssl_ctx_param); +#endif +#if defined(HAVE_ALPN_NPN) || defined(HAVE_TLS_NPN) + cfgMergeArray(ssl_alpn_pref); +#endif +} + +static void modssl_ctx_cfg_merge_proxy(apr_pool_t *p, + modssl_ctx_t *base, + modssl_ctx_t *add, + modssl_ctx_t *mrg) +{ + modssl_ctx_cfg_merge(p, base, add, mrg); + + cfgMergeString(pkp->cert_file); + cfgMergeString(pkp->cert_path); + cfgMergeString(pkp->ca_cert_file); +} + +static void modssl_ctx_cfg_merge_certkeys_array(apr_pool_t *p, + apr_array_header_t *base, + apr_array_header_t *add, + apr_array_header_t *mrg) +{ + int i; + + /* + * pick up to CERTKEYS_IDX_MAX+1 entries from "add" (in which case they + * they "knock out" their corresponding entries in "base", emulating + * the behavior with cfgMergeString in releases up to 2.4.7) + */ + for (i = 0; i < add->nelts && i <= CERTKEYS_IDX_MAX; i++) { + APR_ARRAY_PUSH(mrg, const char *) = APR_ARRAY_IDX(add, i, const char *); + } + + /* add remaining ones from "base" */ + while (i < base->nelts) { + APR_ARRAY_PUSH(mrg, const char *) = APR_ARRAY_IDX(base, i, const char *); + i++; + } + + /* and finally, append the rest of "add" (if there are any) */ + for (i = CERTKEYS_IDX_MAX+1; i < add->nelts; i++) { + APR_ARRAY_PUSH(mrg, const char *) = APR_ARRAY_IDX(add, i, const char *); + } +} + +static void modssl_ctx_cfg_merge_server(apr_pool_t *p, + modssl_ctx_t *base, + modssl_ctx_t *add, + modssl_ctx_t *mrg) +{ + modssl_ctx_cfg_merge(p, base, add, mrg); + + /* + * For better backwards compatibility with releases up to 2.4.7, + * merging global and vhost-level SSLCertificateFile and + * SSLCertificateKeyFile directives needs special treatment. + * See also PR 56306 and 56353. + */ + modssl_ctx_cfg_merge_certkeys_array(p, base->pks->cert_files, + add->pks->cert_files, + mrg->pks->cert_files); + modssl_ctx_cfg_merge_certkeys_array(p, base->pks->key_files, + add->pks->key_files, + mrg->pks->key_files); + + cfgMergeString(pks->ca_name_path); + cfgMergeString(pks->ca_name_file); + +#ifdef HAVE_TLS_SESSION_TICKETS + cfgMergeString(ticket_key->file_path); +#endif +} + +/* + * Merge per-server SSL configurations + */ +void *ssl_config_server_merge(apr_pool_t *p, void *basev, void *addv) +{ + SSLSrvConfigRec *base = (SSLSrvConfigRec *)basev; + SSLSrvConfigRec *add = (SSLSrvConfigRec *)addv; + SSLSrvConfigRec *mrg = ssl_config_server_new(p); + + cfgMerge(mc, NULL); + cfgMerge(enabled, SSL_ENABLED_UNSET); + cfgMergeBool(proxy_enabled); + cfgMergeInt(session_cache_timeout); + cfgMergeBool(cipher_server_pref); + cfgMergeBool(insecure_reneg); + cfgMerge(proxy_ssl_check_peer_expire, SSL_ENABLED_UNSET); + cfgMerge(proxy_ssl_check_peer_cn, SSL_ENABLED_UNSET); + cfgMerge(proxy_ssl_check_peer_name, SSL_ENABLED_UNSET); +#ifdef HAVE_TLSEXT + cfgMerge(strict_sni_vhost_check, SSL_ENABLED_UNSET); +#endif +#ifdef HAVE_FIPS + cfgMergeBool(fips); +#endif +#ifndef OPENSSL_NO_COMP + cfgMergeBool(compression); +#endif + + modssl_ctx_cfg_merge_proxy(p, base->proxy, add->proxy, mrg->proxy); + + modssl_ctx_cfg_merge_server(p, base->server, add->server, mrg->server); + + return mrg; +} + +/* + * Create per-directory SSL configuration + */ +void *ssl_config_perdir_create(apr_pool_t *p, char *dir) +{ + SSLDirConfigRec *dc = apr_palloc(p, sizeof(*dc)); + + dc->bSSLRequired = FALSE; + dc->aRequirement = apr_array_make(p, 4, sizeof(ssl_require_t)); + dc->nOptions = SSL_OPT_NONE|SSL_OPT_RELSET; + dc->nOptionsAdd = SSL_OPT_NONE; + dc->nOptionsDel = SSL_OPT_NONE; + + dc->szCipherSuite = NULL; + dc->nVerifyClient = SSL_CVERIFY_UNSET; + dc->nVerifyDepth = UNSET; + + dc->szCACertificatePath = NULL; + dc->szCACertificateFile = NULL; + dc->szUserName = NULL; + + dc->nRenegBufferSize = UNSET; + + return dc; +} + +/* + * Merge per-directory SSL configurations + */ +void *ssl_config_perdir_merge(apr_pool_t *p, void *basev, void *addv) +{ + SSLDirConfigRec *base = (SSLDirConfigRec *)basev; + SSLDirConfigRec *add = (SSLDirConfigRec *)addv; + SSLDirConfigRec *mrg = (SSLDirConfigRec *)apr_palloc(p, sizeof(*mrg)); + + cfgMerge(bSSLRequired, FALSE); + cfgMergeArray(aRequirement); + + if (add->nOptions & SSL_OPT_RELSET) { + mrg->nOptionsAdd = + (base->nOptionsAdd & ~(add->nOptionsDel)) | add->nOptionsAdd; + mrg->nOptionsDel = + (base->nOptionsDel & ~(add->nOptionsAdd)) | add->nOptionsDel; + mrg->nOptions = + (base->nOptions & ~(mrg->nOptionsDel)) | mrg->nOptionsAdd; + } + else { + mrg->nOptions = add->nOptions; + mrg->nOptionsAdd = add->nOptionsAdd; + mrg->nOptionsDel = add->nOptionsDel; + } + + cfgMergeString(szCipherSuite); + cfgMerge(nVerifyClient, SSL_CVERIFY_UNSET); + cfgMergeInt(nVerifyDepth); + + cfgMergeString(szCACertificatePath); + cfgMergeString(szCACertificateFile); + cfgMergeString(szUserName); + + cfgMergeInt(nRenegBufferSize); + + return mrg; +} + +/* + * Configuration functions for particular directives + */ + +const char *ssl_cmd_SSLPassPhraseDialog(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + int arglen = strlen(arg); + + if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) { + return err; + } + + if (strcEQ(arg, "builtin")) { + sc->server->pphrase_dialog_type = SSL_PPTYPE_BUILTIN; + sc->server->pphrase_dialog_path = NULL; + } + else if ((arglen > 5) && strEQn(arg, "exec:", 5)) { + sc->server->pphrase_dialog_type = SSL_PPTYPE_FILTER; + sc->server->pphrase_dialog_path = + ap_server_root_relative(cmd->pool, arg+5); + if (!sc->server->pphrase_dialog_path) { + return apr_pstrcat(cmd->pool, + "Invalid SSLPassPhraseDialog exec: path ", + arg+5, NULL); + } + if (!ssl_util_path_check(SSL_PCM_EXISTS, + sc->server->pphrase_dialog_path, + cmd->pool)) + { + return apr_pstrcat(cmd->pool, + "SSLPassPhraseDialog: file '", + sc->server->pphrase_dialog_path, + "' does not exist", NULL); + } + + } + else if ((arglen > 1) && (arg[0] == '|')) { + sc->server->pphrase_dialog_type = SSL_PPTYPE_PIPE; + sc->server->pphrase_dialog_path = arg + 1; + } + else { + return "SSLPassPhraseDialog: Invalid argument"; + } + + return NULL; +} + +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT) +const char *ssl_cmd_SSLCryptoDevice(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLModConfigRec *mc = myModConfig(cmd->server); + const char *err; + ENGINE *e; + + if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) { + return err; + } + + if (strcEQ(arg, "builtin")) { + mc->szCryptoDevice = NULL; + } + else if ((e = ENGINE_by_id(arg))) { + mc->szCryptoDevice = arg; + ENGINE_free(e); + } + else { + err = "SSLCryptoDevice: Invalid argument; must be one of: " + "'builtin' (none)"; + e = ENGINE_get_first(); + while (e) { + err = apr_pstrcat(cmd->pool, err, ", '", ENGINE_get_id(e), + "' (", ENGINE_get_name(e), ")", NULL); + /* Iterate; this call implicitly decrements the refcount + * on the 'old' e, per the docs in engine.h. */ + e = ENGINE_get_next(e); + } + return err; + } + + return NULL; +} +#endif + +const char *ssl_cmd_SSLRandomSeed(cmd_parms *cmd, + void *dcfg, + const char *arg1, + const char *arg2, + const char *arg3) +{ + SSLModConfigRec *mc = myModConfig(cmd->server); + const char *err; + ssl_randseed_t *seed; + int arg2len = strlen(arg2); + + if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) { + return err; + } + + if (ssl_config_global_isfixed(mc)) { + return NULL; + } + + seed = apr_array_push(mc->aRandSeed); + + if (strcEQ(arg1, "startup")) { + seed->nCtx = SSL_RSCTX_STARTUP; + } + else if (strcEQ(arg1, "connect")) { + seed->nCtx = SSL_RSCTX_CONNECT; + } + else { + return apr_pstrcat(cmd->pool, "SSLRandomSeed: " + "invalid context: `", arg1, "'", + NULL); + } + + if ((arg2len > 5) && strEQn(arg2, "file:", 5)) { + seed->nSrc = SSL_RSSRC_FILE; + seed->cpPath = ap_server_root_relative(mc->pPool, arg2+5); + } + else if ((arg2len > 5) && strEQn(arg2, "exec:", 5)) { + seed->nSrc = SSL_RSSRC_EXEC; + seed->cpPath = ap_server_root_relative(mc->pPool, arg2+5); + } + else if ((arg2len > 4) && strEQn(arg2, "egd:", 4)) { + seed->nSrc = SSL_RSSRC_EGD; + seed->cpPath = ap_server_root_relative(mc->pPool, arg2+4); + } + else if (strcEQ(arg2, "builtin")) { + seed->nSrc = SSL_RSSRC_BUILTIN; + seed->cpPath = NULL; + } + else { + seed->nSrc = SSL_RSSRC_FILE; + seed->cpPath = ap_server_root_relative(mc->pPool, arg2); + } + + if (seed->nSrc != SSL_RSSRC_BUILTIN) { + if (!seed->cpPath) { + return apr_pstrcat(cmd->pool, + "Invalid SSLRandomSeed path ", + arg2, NULL); + } + if (!ssl_util_path_check(SSL_PCM_EXISTS, seed->cpPath, cmd->pool)) { + return apr_pstrcat(cmd->pool, + "SSLRandomSeed: source path '", + seed->cpPath, "' does not exist", NULL); + } + } + + if (!arg3) { + seed->nBytes = 0; /* read whole file */ + } + else { + if (seed->nSrc == SSL_RSSRC_BUILTIN) { + return "SSLRandomSeed: byte specification not " + "allowed for builtin seed source"; + } + + seed->nBytes = atoi(arg3); + + if (seed->nBytes < 0) { + return "SSLRandomSeed: invalid number of bytes specified"; + } + } + + return NULL; +} + +const char *ssl_cmd_SSLEngine(cmd_parms *cmd, void *dcfg, const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + if (!strcasecmp(arg, "On")) { + sc->enabled = SSL_ENABLED_TRUE; + return NULL; + } + else if (!strcasecmp(arg, "Off")) { + sc->enabled = SSL_ENABLED_FALSE; + return NULL; + } + else if (!strcasecmp(arg, "Optional")) { + sc->enabled = SSL_ENABLED_OPTIONAL; + return NULL; + } + + return "Argument must be On, Off, or Optional"; +} + +const char *ssl_cmd_SSLFIPS(cmd_parms *cmd, void *dcfg, int flag) +{ +#ifdef HAVE_FIPS + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); +#endif + const char *err; + + if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) { + return err; + } + +#ifdef HAVE_FIPS + if ((sc->fips != UNSET) && (sc->fips != (BOOL)(flag ? TRUE : FALSE))) + return "Conflicting SSLFIPS options, cannot be both On and Off"; + sc->fips = flag ? TRUE : FALSE; +#else + if (flag) + return "SSLFIPS invalid, rebuild httpd and openssl compiled for FIPS"; +#endif + + return NULL; +} + +const char *ssl_cmd_SSLCipherSuite(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg; + + /* always disable null and export ciphers */ + arg = apr_pstrcat(cmd->pool, "!aNULL:!eNULL:!EXP:", arg, NULL); + + if (cmd->path) { + dc->szCipherSuite = arg; + } + else { + sc->server->auth.cipher_suite = arg; + } + + return NULL; +} + +#define SSL_FLAGS_CHECK_FILE \ + (SSL_PCM_EXISTS|SSL_PCM_ISREG|SSL_PCM_ISNONZERO) + +#define SSL_FLAGS_CHECK_DIR \ + (SSL_PCM_EXISTS|SSL_PCM_ISDIR) + +static const char *ssl_cmd_check_file(cmd_parms *parms, + const char **file) +{ + const char *filepath = ap_server_root_relative(parms->pool, *file); + + if (!filepath) { + return apr_pstrcat(parms->pool, parms->cmd->name, + ": Invalid file path ", *file, NULL); + } + *file = filepath; + + if (ssl_util_path_check(SSL_FLAGS_CHECK_FILE, *file, parms->pool)) { + return NULL; + } + + return apr_pstrcat(parms->pool, parms->cmd->name, + ": file '", *file, + "' does not exist or is empty", NULL); + +} + +const char *ssl_cmd_SSLCompression(cmd_parms *cmd, void *dcfg, int flag) +{ +#if !defined(OPENSSL_NO_COMP) + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); +#ifndef SSL_OP_NO_COMPRESSION + const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY); + if (err) + return "This version of openssl does not support configuring " + "compression within sections."; +#endif + sc->compression = flag ? TRUE : FALSE; + return NULL; +#else + return "Setting Compression mode unsupported; not implemented by the SSL library"; +#endif +} + +const char *ssl_cmd_SSLHonorCipherOrder(cmd_parms *cmd, void *dcfg, int flag) +{ +#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->cipher_server_pref = flag?TRUE:FALSE; + return NULL; +#else + return "SSLHonorCipherOrder unsupported; not implemented by the SSL library"; +#endif +} + +const char *ssl_cmd_SSLInsecureRenegotiation(cmd_parms *cmd, void *dcfg, int flag) +{ +#ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->insecure_reneg = flag?TRUE:FALSE; + return NULL; +#else + return "The SSLInsecureRenegotiation directive is not available " + "with this SSL library"; +#endif +} + + +static const char *ssl_cmd_check_dir(cmd_parms *parms, + const char **dir) +{ + const char *dirpath = ap_server_root_relative(parms->pool, *dir); + + if (!dirpath) { + return apr_pstrcat(parms->pool, parms->cmd->name, + ": Invalid dir path ", *dir, NULL); + } + *dir = dirpath; + + if (ssl_util_path_check(SSL_FLAGS_CHECK_DIR, *dir, parms->pool)) { + return NULL; + } + + return apr_pstrcat(parms->pool, parms->cmd->name, + ": directory '", *dir, + "' does not exist", NULL); + +} + +const char *ssl_cmd_SSLCertificateFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + *(const char **)apr_array_push(sc->server->pks->cert_files) = + apr_pstrdup(cmd->pool, arg); + + return NULL; +} + +const char *ssl_cmd_SSLCertificateKeyFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + *(const char **)apr_array_push(sc->server->pks->key_files) = + apr_pstrdup(cmd->pool, arg); + + return NULL; +} + +const char *ssl_cmd_SSLCertificateChainFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_STARTUP, 0, cmd->server, + APLOGNO(02559) + "The SSLCertificateChainFile directive (%s:%d) is deprecated, " + "SSLCertificateFile should be used instead", + cmd->directive->filename, cmd->directive->line_num); + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->server->cert_chain = arg; + + return NULL; +} + +#ifdef HAVE_TLS_SESSION_TICKETS +const char *ssl_cmd_SSLSessionTicketKeyFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->server->ticket_key->file_path = arg; + + return NULL; +} +#endif + +#define NO_PER_DIR_SSL_CA \ + "Your SSL library does not have support for per-directory CA" + +const char *ssl_cmd_SSLCACertificatePath(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + /*SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;*/ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_dir(cmd, &arg))) { + return err; + } + + if (cmd->path) { + return NO_PER_DIR_SSL_CA; + } + + /* XXX: bring back per-dir */ + sc->server->auth.ca_cert_path = arg; + + return NULL; +} + +const char *ssl_cmd_SSLCACertificateFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + /*SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg;*/ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + if (cmd->path) { + return NO_PER_DIR_SSL_CA; + } + + /* XXX: bring back per-dir */ + sc->server->auth.ca_cert_file = arg; + + return NULL; +} + +const char *ssl_cmd_SSLCADNRequestPath(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_dir(cmd, &arg))) { + return err; + } + + sc->server->pks->ca_name_path = arg; + + return NULL; +} + +const char *ssl_cmd_SSLCADNRequestFile(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->server->pks->ca_name_file = arg; + + return NULL; +} + +const char *ssl_cmd_SSLCARevocationPath(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_dir(cmd, &arg))) { + return err; + } + + sc->server->crl_path = arg; + + return NULL; +} + +const char *ssl_cmd_SSLCARevocationFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->server->crl_file = arg; + + return NULL; +} + +static const char *ssl_cmd_crlcheck_parse(cmd_parms *parms, + const char *arg, + ssl_crlcheck_t *mode) +{ + if (strcEQ(arg, "none")) { + *mode = SSL_CRLCHECK_NONE; + } + else if (strcEQ(arg, "leaf")) { + *mode = SSL_CRLCHECK_LEAF; + } + else if (strcEQ(arg, "chain")) { + *mode = SSL_CRLCHECK_CHAIN; + } + else { + return apr_pstrcat(parms->temp_pool, parms->cmd->name, + ": Invalid argument '", arg, "'", + NULL); + } + + return NULL; +} + +const char *ssl_cmd_SSLCARevocationCheck(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + return ssl_cmd_crlcheck_parse(cmd, arg, &sc->server->crl_check_mode); +} + +static const char *ssl_cmd_verify_parse(cmd_parms *parms, + const char *arg, + ssl_verify_t *id) +{ + if (strcEQ(arg, "none") || strcEQ(arg, "off")) { + *id = SSL_CVERIFY_NONE; + } + else if (strcEQ(arg, "optional")) { + *id = SSL_CVERIFY_OPTIONAL; + } + else if (strcEQ(arg, "require") || strcEQ(arg, "on")) { + *id = SSL_CVERIFY_REQUIRE; + } + else if (strcEQ(arg, "optional_no_ca")) { + *id = SSL_CVERIFY_OPTIONAL_NO_CA; + } + else { + return apr_pstrcat(parms->temp_pool, parms->cmd->name, + ": Invalid argument '", arg, "'", + NULL); + } + + return NULL; +} + +const char *ssl_cmd_SSLVerifyClient(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg; + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + ssl_verify_t mode; + const char *err; + + if ((err = ssl_cmd_verify_parse(cmd, arg, &mode))) { + return err; + } + + if (cmd->path) { + dc->nVerifyClient = mode; + } + else { + sc->server->auth.verify_mode = mode; + } + + return NULL; +} + +static const char *ssl_cmd_verify_depth_parse(cmd_parms *parms, + const char *arg, + int *depth) +{ + if ((*depth = atoi(arg)) >= 0) { + return NULL; + } + + return apr_pstrcat(parms->temp_pool, parms->cmd->name, + ": Invalid argument '", arg, "'", + NULL); +} + +const char *ssl_cmd_SSLVerifyDepth(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg; + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + int depth; + const char *err; + + if ((err = ssl_cmd_verify_depth_parse(cmd, arg, &depth))) { + return err; + } + + if (cmd->path) { + dc->nVerifyDepth = depth; + } + else { + sc->server->auth.verify_depth = depth; + } + + return NULL; +} + +const char *ssl_cmd_SSLSessionCache(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLModConfigRec *mc = myModConfig(cmd->server); + const char *err, *sep, *name; + long enabled_flags; + + if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) { + return err; + } + + /* The OpenSSL session cache mode must have both the flags + * SSL_SESS_CACHE_SERVER and SSL_SESS_CACHE_NO_INTERNAL set if a + * session cache is configured; NO_INTERNAL prevents the + * OpenSSL-internal session cache being used in addition to the + * "external" (mod_ssl-provided) cache, which otherwise causes + * additional memory consumption. */ + enabled_flags = SSL_SESS_CACHE_SERVER | SSL_SESS_CACHE_NO_INTERNAL; + + if (strcEQ(arg, "none")) { + /* Nothing to do; session cache will be off. */ + } + else if (strcEQ(arg, "nonenotnull")) { + /* ### Having a separate mode for this seems logically + * unnecessary; the stated purpose of sending non-empty + * session IDs would be better fixed in OpenSSL or simply + * doing it by default if "none" is used. */ + mc->sesscache_mode = enabled_flags; + } + else { + /* Argument is of form 'name:args' or just 'name'. */ + sep = ap_strchr_c(arg, ':'); + if (sep) { + name = apr_pstrmemdup(cmd->pool, arg, sep - arg); + sep++; + } + else { + name = arg; + } + + /* Find the provider of given name. */ + mc->sesscache = ap_lookup_provider(AP_SOCACHE_PROVIDER_GROUP, + name, + AP_SOCACHE_PROVIDER_VERSION); + if (mc->sesscache) { + /* Cache found; create it, passing anything beyond the colon. */ + mc->sesscache_mode = enabled_flags; + err = mc->sesscache->create(&mc->sesscache_context, sep, + cmd->temp_pool, cmd->pool); + } + else { + apr_array_header_t *name_list; + const char *all_names; + + /* Build a comma-separated list of all registered provider + * names: */ + name_list = ap_list_provider_names(cmd->pool, + AP_SOCACHE_PROVIDER_GROUP, + AP_SOCACHE_PROVIDER_VERSION); + all_names = apr_array_pstrcat(cmd->pool, name_list, ','); + + err = apr_psprintf(cmd->pool, "'%s' session cache not supported " + "(known names: %s). Maybe you need to load the " + "appropriate socache module (mod_socache_%s?).", + name, all_names, name); + } + } + + if (err) { + return apr_psprintf(cmd->pool, "SSLSessionCache: %s", err); + } + + return NULL; +} + +const char *ssl_cmd_SSLSessionCacheTimeout(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->session_cache_timeout = atoi(arg); + + if (sc->session_cache_timeout < 0) { + return "SSLSessionCacheTimeout: Invalid argument"; + } + + return NULL; +} + +const char *ssl_cmd_SSLOptions(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg; + ssl_opt_t opt; + int first = TRUE; + char action, *w; + + while (*arg) { + w = ap_getword_conf(cmd->temp_pool, &arg); + action = NUL; + + if ((*w == '+') || (*w == '-')) { + action = *(w++); + } + else if (first) { + dc->nOptions = SSL_OPT_NONE; + first = FALSE; + } + + if (strcEQ(w, "StdEnvVars")) { + opt = SSL_OPT_STDENVVARS; + } + else if (strcEQ(w, "ExportCertData")) { + opt = SSL_OPT_EXPORTCERTDATA; + } + else if (strcEQ(w, "FakeBasicAuth")) { + opt = SSL_OPT_FAKEBASICAUTH; + } + else if (strcEQ(w, "StrictRequire")) { + opt = SSL_OPT_STRICTREQUIRE; + } + else if (strcEQ(w, "OptRenegotiate")) { + opt = SSL_OPT_OPTRENEGOTIATE; + } + else if (strcEQ(w, "LegacyDNStringFormat")) { + opt = SSL_OPT_LEGACYDNFORMAT; + } + else { + return apr_pstrcat(cmd->pool, + "SSLOptions: Illegal option '", w, "'", + NULL); + } + + if (action == '-') { + dc->nOptionsAdd &= ~opt; + dc->nOptionsDel |= opt; + dc->nOptions &= ~opt; + } + else if (action == '+') { + dc->nOptionsAdd |= opt; + dc->nOptionsDel &= ~opt; + dc->nOptions |= opt; + } + else { + dc->nOptions = opt; + dc->nOptionsAdd = opt; + dc->nOptionsDel = SSL_OPT_NONE; + } + } + + return NULL; +} + +const char *ssl_cmd_SSLRequireSSL(cmd_parms *cmd, void *dcfg) +{ + SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg; + + dc->bSSLRequired = TRUE; + + return NULL; +} + +const char *ssl_cmd_SSLRequire(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg; + ap_expr_info_t *info = apr_pcalloc(cmd->pool, sizeof(ap_expr_info_t)); + ssl_require_t *require; + const char *errstring; + + info->flags = AP_EXPR_FLAG_SSL_EXPR_COMPAT; + info->filename = cmd->directive->filename; + info->line_number = cmd->directive->line_num; + info->module_index = APLOG_MODULE_INDEX; + errstring = ap_expr_parse(cmd->pool, cmd->temp_pool, info, arg, NULL); + if (errstring) { + return apr_pstrcat(cmd->pool, "SSLRequire: ", errstring, NULL); + } + + require = apr_array_push(dc->aRequirement); + require->cpExpr = apr_pstrdup(cmd->pool, arg); + require->mpExpr = info; + + return NULL; +} + +const char *ssl_cmd_SSLRenegBufferSize(cmd_parms *cmd, void *dcfg, const char *arg) +{ + SSLDirConfigRec *dc = dcfg; + int val; + + val = atoi(arg); + if (val < 0) { + return apr_pstrcat(cmd->pool, "Invalid size for SSLRenegBufferSize: ", + arg, NULL); + } + dc->nRenegBufferSize = val; + + return NULL; +} + +static const char *ssl_cmd_protocol_parse(cmd_parms *parms, + const char *arg, + ssl_proto_t *options) +{ + ssl_proto_t thisopt; + + *options = SSL_PROTOCOL_NONE; + + while (*arg) { + char *w = ap_getword_conf(parms->temp_pool, &arg); + char action = '\0'; + + if ((*w == '+') || (*w == '-')) { + action = *(w++); + } + + if (strcEQ(w, "SSLv2")) { + if (action == '-') { + continue; + } + else { + return "SSLProtocol: SSLv2 is no longer supported"; + } + } + else if (strcEQ(w, "SSLv3")) { + thisopt = SSL_PROTOCOL_SSLV3; + } + else if (strcEQ(w, "TLSv1")) { + thisopt = SSL_PROTOCOL_TLSV1; + } +#ifdef HAVE_TLSV1_X + else if (strcEQ(w, "TLSv1.1")) { + thisopt = SSL_PROTOCOL_TLSV1_1; + } + else if (strcEQ(w, "TLSv1.2")) { + thisopt = SSL_PROTOCOL_TLSV1_2; + } +#endif + else if (strcEQ(w, "all")) { + thisopt = SSL_PROTOCOL_ALL; + } + else { + return apr_pstrcat(parms->temp_pool, + parms->cmd->name, + ": Illegal protocol '", + w, "'", NULL); + } + + if (action == '-') { + *options &= ~thisopt; + } + else if (action == '+') { + *options |= thisopt; + } + else { + *options = thisopt; + } + } + + return NULL; +} + +const char *ssl_cmd_SSLProtocol(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + return ssl_cmd_protocol_parse(cmd, arg, &sc->server->protocol); +} + +const char *ssl_cmd_SSLProxyEngine(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->proxy_enabled = flag ? TRUE : FALSE; + + return NULL; +} + +const char *ssl_cmd_SSLProxyProtocol(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + return ssl_cmd_protocol_parse(cmd, arg, &sc->proxy->protocol); +} + +const char *ssl_cmd_SSLProxyCipherSuite(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + /* always disable null and export ciphers */ + arg = apr_pstrcat(cmd->pool, "!aNULL:!eNULL:!EXP:", arg, NULL); + + sc->proxy->auth.cipher_suite = arg; + + return NULL; +} + +const char *ssl_cmd_SSLProxyVerify(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + ssl_verify_t mode; + const char *err; + + if ((err = ssl_cmd_verify_parse(cmd, arg, &mode))) { + return err; + } + + sc->proxy->auth.verify_mode = mode; + + return NULL; +} + +const char *ssl_cmd_SSLProxyVerifyDepth(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + int depth; + const char *err; + + if ((err = ssl_cmd_verify_depth_parse(cmd, arg, &depth))) { + return err; + } + + sc->proxy->auth.verify_depth = depth; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCACertificateFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->proxy->auth.ca_cert_file = arg; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCACertificatePath(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_dir(cmd, &arg))) { + return err; + } + + sc->proxy->auth.ca_cert_path = arg; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCARevocationPath(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_dir(cmd, &arg))) { + return err; + } + + sc->proxy->crl_path = arg; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCARevocationFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->proxy->crl_file = arg; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCARevocationCheck(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + return ssl_cmd_crlcheck_parse(cmd, arg, &sc->proxy->crl_check_mode); +} + +const char *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->proxy->pkp->cert_file = arg; + + return NULL; +} + +const char *ssl_cmd_SSLProxyMachineCertificatePath(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_dir(cmd, &arg))) { + return err; + } + + sc->proxy->pkp->cert_path = arg; + + return NULL; +} + +const char *ssl_cmd_SSLProxyMachineCertificateChainFile(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) { + return err; + } + + sc->proxy->pkp->ca_cert_file = arg; + + return NULL; +} + +const char *ssl_cmd_SSLUserName(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLDirConfigRec *dc = (SSLDirConfigRec *)dcfg; + dc->szUserName = arg; + return NULL; +} + +const char *ssl_cmd_SSLOCSPEnable(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->server->ocsp_enabled = flag ? TRUE : FALSE; + +#ifdef OPENSSL_NO_OCSP + if (flag) { + return "OCSP support disabled in SSL library; cannot enable " + "OCSP validation"; + } +#endif + + return NULL; +} + +const char *ssl_cmd_SSLOCSPOverrideResponder(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->server->ocsp_force_default = flag ? TRUE : FALSE; + + return NULL; +} + +const char *ssl_cmd_SSLOCSPDefaultResponder(cmd_parms *cmd, void *dcfg, const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->server->ocsp_responder = arg; + + return NULL; +} + +const char *ssl_cmd_SSLOCSPResponseTimeSkew(cmd_parms *cmd, void *dcfg, const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->ocsp_resptime_skew = atoi(arg); + if (sc->server->ocsp_resptime_skew < 0) { + return "SSLOCSPResponseTimeSkew: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLOCSPResponseMaxAge(cmd_parms *cmd, void *dcfg, const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->ocsp_resp_maxage = atoi(arg); + if (sc->server->ocsp_resp_maxage < 0) { + return "SSLOCSPResponseMaxAge: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLOCSPResponderTimeout(cmd_parms *cmd, void *dcfg, const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->ocsp_responder_timeout = apr_time_from_sec(atoi(arg)); + if (sc->server->ocsp_responder_timeout < 0) { + return "SSLOCSPResponderTimeout: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLOCSPUseRequestNonce(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->server->ocsp_use_request_nonce = flag ? TRUE : FALSE; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCheckPeerExpire(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->proxy_ssl_check_peer_expire = flag ? SSL_ENABLED_TRUE : SSL_ENABLED_FALSE; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCheckPeerCN(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->proxy_ssl_check_peer_cn = flag ? SSL_ENABLED_TRUE : SSL_ENABLED_FALSE; + + return NULL; +} + +const char *ssl_cmd_SSLProxyCheckPeerName(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->proxy_ssl_check_peer_name = flag ? SSL_ENABLED_TRUE : SSL_ENABLED_FALSE; + + return NULL; +} + +const char *ssl_cmd_SSLStrictSNIVHostCheck(cmd_parms *cmd, void *dcfg, int flag) +{ +#ifdef HAVE_TLSEXT + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + + sc->strict_sni_vhost_check = flag ? SSL_ENABLED_TRUE : SSL_ENABLED_FALSE; + + return NULL; +#else + return "SSLStrictSNIVHostCheck failed; OpenSSL is not built with support " + "for TLS extensions and SNI indication. Refer to the " + "documentation, and build a compatible version of OpenSSL."; +#endif +} + +#ifdef HAVE_OCSP_STAPLING + +const char *ssl_cmd_SSLStaplingCache(cmd_parms *cmd, + void *dcfg, + const char *arg) +{ + SSLModConfigRec *mc = myModConfig(cmd->server); + const char *err, *sep, *name; + + if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) { + return err; + } + + /* Argument is of form 'name:args' or just 'name'. */ + sep = ap_strchr_c(arg, ':'); + if (sep) { + name = apr_pstrmemdup(cmd->pool, arg, sep - arg); + sep++; + } + else { + name = arg; + } + + /* Find the provider of given name. */ + mc->stapling_cache = ap_lookup_provider(AP_SOCACHE_PROVIDER_GROUP, + name, + AP_SOCACHE_PROVIDER_VERSION); + if (mc->stapling_cache) { + /* Cache found; create it, passing anything beyond the colon. */ + err = mc->stapling_cache->create(&mc->stapling_cache_context, + sep, cmd->temp_pool, + cmd->pool); + } + else { + apr_array_header_t *name_list; + const char *all_names; + + /* Build a comma-separated list of all registered provider + * names: */ + name_list = ap_list_provider_names(cmd->pool, + AP_SOCACHE_PROVIDER_GROUP, + AP_SOCACHE_PROVIDER_VERSION); + all_names = apr_array_pstrcat(cmd->pool, name_list, ','); + + err = apr_psprintf(cmd->pool, "'%s' stapling cache not supported " + "(known names: %s) Maybe you need to load the " + "appropriate socache module (mod_socache_%s?)", + name, all_names, name); + } + + if (err) { + return apr_psprintf(cmd->pool, "SSLStaplingCache: %s", err); + } + + return NULL; +} + +const char *ssl_cmd_SSLUseStapling(cmd_parms *cmd, void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_enabled = flag ? TRUE : FALSE; + return NULL; +} + +const char *ssl_cmd_SSLStaplingResponseTimeSkew(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_resptime_skew = atoi(arg); + if (sc->server->stapling_resptime_skew < 0) { + return "SSLStaplingResponseTimeSkew: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLStaplingResponseMaxAge(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_resp_maxage = atoi(arg); + if (sc->server->stapling_resp_maxage < 0) { + return "SSLStaplingResponseMaxAge: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLStaplingStandardCacheTimeout(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_cache_timeout = atoi(arg); + if (sc->server->stapling_cache_timeout < 0) { + return "SSLStaplingStandardCacheTimeout: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLStaplingErrorCacheTimeout(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_errcache_timeout = atoi(arg); + if (sc->server->stapling_errcache_timeout < 0) { + return "SSLStaplingErrorCacheTimeout: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLStaplingReturnResponderErrors(cmd_parms *cmd, + void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_return_errors = flag ? TRUE : FALSE; + return NULL; +} + +const char *ssl_cmd_SSLStaplingFakeTryLater(cmd_parms *cmd, + void *dcfg, int flag) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_fake_trylater = flag ? TRUE : FALSE; + return NULL; +} + +const char *ssl_cmd_SSLStaplingResponderTimeout(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_responder_timeout = atoi(arg); + sc->server->stapling_responder_timeout *= APR_USEC_PER_SEC; + if (sc->server->stapling_responder_timeout < 0) { + return "SSLStaplingResponderTimeout: invalid argument"; + } + return NULL; +} + +const char *ssl_cmd_SSLStaplingForceURL(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + sc->server->stapling_force_url = arg; + return NULL; +} + +#endif /* HAVE_OCSP_STAPLING */ + +#ifdef HAVE_SSL_CONF_CMD +const char *ssl_cmd_SSLOpenSSLConfCmd(cmd_parms *cmd, void *dcfg, + const char *arg1, const char *arg2) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + SSL_CONF_CTX *cctx = sc->server->ssl_ctx_config; + int value_type = SSL_CONF_cmd_value_type(cctx, arg1); + const char *err; + ssl_ctx_param_t *param; + + if (value_type == SSL_CONF_TYPE_UNKNOWN) { + return apr_psprintf(cmd->pool, + "'%s': invalid OpenSSL configuration command", + arg1); + } + + if (value_type == SSL_CONF_TYPE_FILE) { + if ((err = ssl_cmd_check_file(cmd, &arg2))) + return err; + } + else if (value_type == SSL_CONF_TYPE_DIR) { + if ((err = ssl_cmd_check_dir(cmd, &arg2))) + return err; + } + + param = apr_array_push(sc->server->ssl_ctx_param); + param->name = arg1; + param->value = arg2; + return NULL; +} +#endif + +#if defined(HAVE_ALPN_NPN) || defined(HAVE_TLS_NPN) +const char *ssl_cmd_SSLAlpnPreference(cmd_parms *cmd, void *dcfg, + const char *protocol) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + APR_ARRAY_PUSH(sc->server->ssl_alpn_pref, const char *) = protocol; + return NULL; +} +#endif + +#ifdef HAVE_SRP + +const char *ssl_cmd_SSLSRPVerifierFile(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + const char *err; + + if ((err = ssl_cmd_check_file(cmd, &arg))) + return err; + /* SRP_VBASE_init takes char*, not const char* */ + sc->server->srp_vfile = apr_pstrdup(cmd->pool, arg); + return NULL; +} + +const char *ssl_cmd_SSLSRPUnknownUserSeed(cmd_parms *cmd, void *dcfg, + const char *arg) +{ + SSLSrvConfigRec *sc = mySrvConfig(cmd->server); + /* SRP_VBASE_new takes char*, not const char* */ + sc->server->srp_unknown_user_seed = apr_pstrdup(cmd->pool, arg); + return NULL; +} + +#endif /* HAVE_SRP */ + +void ssl_hook_ConfigTest(apr_pool_t *pconf, server_rec *s) +{ + apr_file_t *out = NULL; + if (!ap_exists_config_define("DUMP_CERTS")) { + return; + } + apr_file_open_stdout(&out, pconf); + apr_file_printf(out, "Server certificates:\n"); + + /* Dump the filenames of all configured server certificates to + * stdout. */ + while (s) { + SSLSrvConfigRec *sc = mySrvConfig(s); + + if (sc && sc->server && sc->server->pks) { + modssl_pk_server_t *const pks = sc->server->pks; + int i; + + for (i = 0; (i < pks->cert_files->nelts) && + APR_ARRAY_IDX(pks->cert_files, i, const char *); + i++) { + apr_file_printf(out, " %s\n", + APR_ARRAY_IDX(pks->cert_files, + i, const char *)); + } + } + + s = s->next; + } + +} diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_init.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_init.c new file mode 100644 index 0000000000..7181aecc50 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_init.c @@ -0,0 +1,1774 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_init.c + * Initialization of Servers + */ + /* ``Recursive, adj.; + see Recursive.'' + -- Unknown */ +#include "ssl_private.h" +#include "mpm_common.h" + +/* _________________________________________________________________ +** +** Module Initialization +** _________________________________________________________________ +*/ + +#ifdef HAVE_ECC +#define KEYTYPES "RSA, DSA or ECC" +#else +#define KEYTYPES "RSA or DSA" +#endif + +/* + * Grab well-defined DH parameters from OpenSSL, see the get_rfc* + * functions in for all available primes. + */ +static DH *make_dh_params(BIGNUM *(*prime)(BIGNUM *), const char *gen) +{ + DH *dh = DH_new(); + + if (!dh) { + return NULL; + } + dh->p = prime(NULL); + BN_dec2bn(&dh->g, gen); + if (!dh->p || !dh->g) { + DH_free(dh); + return NULL; + } + return dh; +} + +/* Storage and initialization for DH parameters. */ +static struct dhparam { + BIGNUM *(*const prime)(BIGNUM *); /* function to generate... */ + DH *dh; /* ...this, used for keys.... */ + const unsigned int min; /* ...of length >= this. */ +} dhparams[] = { + { get_rfc3526_prime_8192, NULL, 6145 }, + { get_rfc3526_prime_6144, NULL, 4097 }, + { get_rfc3526_prime_4096, NULL, 3073 }, + { get_rfc3526_prime_3072, NULL, 2049 }, + { get_rfc3526_prime_2048, NULL, 1025 }, + { get_rfc2409_prime_1024, NULL, 0 } +}; + +static void init_dh_params(void) +{ + unsigned n; + + for (n = 0; n < sizeof(dhparams)/sizeof(dhparams[0]); n++) + dhparams[n].dh = make_dh_params(dhparams[n].prime, "2"); +} + +static void free_dh_params(void) +{ + unsigned n; + + /* DH_free() is a noop for a NULL parameter, so these are harmless + * in the (unexpected) case where these variables are already + * NULL. */ + for (n = 0; n < sizeof(dhparams)/sizeof(dhparams[0]); n++) { + DH_free(dhparams[n].dh); + dhparams[n].dh = NULL; + } +} + +/* Hand out the same DH structure though once generated as we leak + * memory otherwise and freeing the structure up after use would be + * hard to track and in fact is not needed at all as it is safe to + * use the same parameters over and over again security wise (in + * contrast to the keys itself) and code safe as the returned structure + * is duplicated by OpenSSL anyway. Hence no modification happens + * to our copy. */ +DH *modssl_get_dh_params(unsigned keylen) +{ + unsigned n; + + for (n = 0; n < sizeof(dhparams)/sizeof(dhparams[0]); n++) + if (keylen >= dhparams[n].min) + return dhparams[n].dh; + + return NULL; /* impossible to reach. */ +} + +static void ssl_add_version_components(apr_pool_t *p, + server_rec *s) +{ + char *modver = ssl_var_lookup(p, s, NULL, NULL, "SSL_VERSION_INTERFACE"); + char *libver = ssl_var_lookup(p, s, NULL, NULL, "SSL_VERSION_LIBRARY"); + char *incver = ssl_var_lookup(p, s, NULL, NULL, + "SSL_VERSION_LIBRARY_INTERFACE"); + + ap_add_version_component(p, libver); + + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(01876) + "%s compiled against Server: %s, Library: %s", + modver, AP_SERVER_BASEVERSION, incver); +} + +/* + * Per-module initialization + */ +apr_status_t ssl_init_Module(apr_pool_t *p, apr_pool_t *plog, + apr_pool_t *ptemp, + server_rec *base_server) +{ + SSLModConfigRec *mc = myModConfig(base_server); + SSLSrvConfigRec *sc; + server_rec *s; + apr_status_t rv; + apr_array_header_t *pphrases; + + if (SSLeay() < SSL_LIBRARY_VERSION) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, base_server, APLOGNO(01882) + "Init: this version of mod_ssl was compiled against " + "a newer library (%s, version currently loaded is %s)" + " - may result in undefined or erroneous behavior", + SSL_LIBRARY_TEXT, SSLeay_version(SSLEAY_VERSION)); + } + + /* We initialize mc->pid per-process in the child init, + * but it should be initialized for startup before we + * call ssl_rand_seed() below. + */ + mc->pid = getpid(); + + /* + * Let us cleanup on restarts and exits + */ + apr_pool_cleanup_register(p, base_server, + ssl_init_ModuleKill, + apr_pool_cleanup_null); + + /* + * Any init round fixes the global config + */ + ssl_config_global_create(base_server); /* just to avoid problems */ + ssl_config_global_fix(mc); + + /* + * try to fix the configuration and open the dedicated SSL + * logfile as early as possible + */ + for (s = base_server; s; s = s->next) { + sc = mySrvConfig(s); + + if (sc->server) { + sc->server->sc = sc; + } + + if (sc->proxy) { + sc->proxy->sc = sc; + } + + /* + * Create the server host:port string because we need it a lot + */ + sc->vhost_id = ssl_util_vhostid(p, s); + sc->vhost_id_len = strlen(sc->vhost_id); + + /* Default to enabled if SSLEngine is not set explicitly, and + * the protocol is https. */ + if (ap_get_server_protocol(s) + && strcmp("https", ap_get_server_protocol(s)) == 0 + && sc->enabled == SSL_ENABLED_UNSET) { + sc->enabled = SSL_ENABLED_TRUE; + } + + /* Fix up stuff that may not have been set. If sc->enabled is + * UNSET, then SSL is disabled on this vhost. */ + if (sc->enabled == SSL_ENABLED_UNSET) { + sc->enabled = SSL_ENABLED_FALSE; + } + if (sc->proxy_enabled == UNSET) { + sc->proxy_enabled = FALSE; + } + + if (sc->session_cache_timeout == UNSET) { + sc->session_cache_timeout = SSL_SESSION_CACHE_TIMEOUT; + } + + if (sc->server && sc->server->pphrase_dialog_type == SSL_PPTYPE_UNSET) { + sc->server->pphrase_dialog_type = SSL_PPTYPE_BUILTIN; + } + +#ifdef HAVE_FIPS + if (sc->fips == UNSET) { + sc->fips = FALSE; + } +#endif + } + +#if APR_HAS_THREADS + ssl_util_thread_setup(p); +#endif + + /* + * SSL external crypto device ("engine") support + */ +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT) + if ((rv = ssl_init_Engine(base_server, p)) != APR_SUCCESS) { + return rv; + } +#endif + + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(01883) + "Init: Initialized %s library", SSL_LIBRARY_NAME); + + /* + * Seed the Pseudo Random Number Generator (PRNG) + * only need ptemp here; nothing inside allocated from the pool + * needs to live once we return from ssl_rand_seed(). + */ + ssl_rand_seed(base_server, ptemp, SSL_RSCTX_STARTUP, "Init: "); + +#ifdef HAVE_FIPS + if(sc->fips) { + if (!FIPS_mode()) { + if (FIPS_mode_set(1)) { + ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, s, APLOGNO(01884) + "Operating in SSL FIPS mode"); + } + else { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01885) "FIPS mode failed"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + } + } + else { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01886) + "SSL FIPS mode disabled"); + } +#endif + + /* + * initialize the mutex handling + */ + if (!ssl_mutex_init(base_server, p)) { + return HTTP_INTERNAL_SERVER_ERROR; + } +#ifdef HAVE_OCSP_STAPLING + ssl_stapling_ex_init(); +#endif + + /* + * initialize session caching + */ + if ((rv = ssl_scache_init(base_server, p)) != APR_SUCCESS) { + return rv; + } + + pphrases = apr_array_make(ptemp, 2, sizeof(char *)); + + /* + * initialize servers + */ + ap_log_error(APLOG_MARK, APLOG_INFO, 0, base_server, APLOGNO(01887) + "Init: Initializing (virtual) servers for SSL"); + + for (s = base_server; s; s = s->next) { + sc = mySrvConfig(s); + /* + * Either now skip this server when SSL is disabled for + * it or give out some information about what we're + * configuring. + */ + + /* + * Read the server certificate and key + */ + if ((rv = ssl_init_ConfigureServer(s, p, ptemp, sc, pphrases)) + != APR_SUCCESS) { + return rv; + } + } + + if (pphrases->nelts > 0) { + memset(pphrases->elts, 0, pphrases->elt_size * pphrases->nelts); + pphrases->nelts = 0; + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(02560) + "Init: Wiped out the queried pass phrases from memory"); + } + + /* + * Configuration consistency checks + */ + if ((rv = ssl_init_CheckServers(base_server, ptemp)) != APR_SUCCESS) { + return rv; + } + + /* + * Announce mod_ssl and SSL library in HTTP Server field + * as ``mod_ssl/X.X.X OpenSSL/X.X.X'' + */ + ssl_add_version_components(p, base_server); + + SSL_init_app_data2_idx(); /* for SSL_get_app_data2() at request time */ + + init_dh_params(); + + return OK; +} + +/* + * Support for external a Crypto Device ("engine"), usually + * a hardware accellerator card for crypto operations. + */ +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT) +apr_status_t ssl_init_Engine(server_rec *s, apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + ENGINE *e; + + if (mc->szCryptoDevice) { + if (!(e = ENGINE_by_id(mc->szCryptoDevice))) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01888) + "Init: Failed to load Crypto Device API `%s'", + mc->szCryptoDevice); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + if (strEQ(mc->szCryptoDevice, "chil")) { + ENGINE_ctrl(e, ENGINE_CTRL_CHIL_SET_FORKCHECK, 1, 0, 0); + } + + if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01889) + "Init: Failed to enable Crypto Device API `%s'", + mc->szCryptoDevice); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(01890) + "Init: loaded Crypto Device API `%s'", + mc->szCryptoDevice); + + ENGINE_free(e); + } + + return APR_SUCCESS; +} +#endif + +#ifdef HAVE_TLSEXT +static apr_status_t ssl_init_ctx_tls_extensions(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + apr_status_t rv; + + /* + * Configure TLS extensions support + */ + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01893) + "Configuring TLS extension handling"); + + /* + * Server name indication (SNI) + */ + if (!SSL_CTX_set_tlsext_servername_callback(mctx->ssl_ctx, + ssl_callback_ServerNameIndication) || + !SSL_CTX_set_tlsext_servername_arg(mctx->ssl_ctx, mctx)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01894) + "Unable to initialize TLS servername extension " + "callback (incompatible OpenSSL version?)"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + +#ifdef HAVE_OCSP_STAPLING + /* + * OCSP Stapling support, status_request extension + */ + if ((mctx->pkp == FALSE) && (mctx->stapling_enabled == TRUE)) { + if ((rv = modssl_init_stapling(s, p, ptemp, mctx)) != APR_SUCCESS) { + return rv; + } + } +#endif + +#ifdef HAVE_SRP + /* + * TLS-SRP support + */ + if (mctx->srp_vfile != NULL) { + int err; + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02308) + "Using SRP verifier file [%s]", mctx->srp_vfile); + + if (!(mctx->srp_vbase = SRP_VBASE_new(mctx->srp_unknown_user_seed))) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02309) + "Unable to initialize SRP verifier structure " + "[%s seed]", + mctx->srp_unknown_user_seed ? "with" : "without"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + err = SRP_VBASE_init(mctx->srp_vbase, mctx->srp_vfile); + if (err != SRP_NO_ERROR) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02310) + "Unable to load SRP verifier file [error %d]", err); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + SSL_CTX_set_srp_username_callback(mctx->ssl_ctx, + ssl_callback_SRPServerParams); + SSL_CTX_set_srp_cb_arg(mctx->ssl_ctx, mctx); + } +#endif + return APR_SUCCESS; +} +#endif + +static apr_status_t ssl_init_ctx_protocol(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + SSL_CTX *ctx = NULL; + MODSSL_SSL_METHOD_CONST SSL_METHOD *method = NULL; + char *cp; + int protocol = mctx->protocol; + SSLSrvConfigRec *sc = mySrvConfig(s); + + /* + * Create the new per-server SSL context + */ + if (protocol == SSL_PROTOCOL_NONE) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02231) + "No SSL protocols available [hint: SSLProtocol]"); + return ssl_die(s); + } + + cp = apr_pstrcat(p, + (protocol & SSL_PROTOCOL_SSLV3 ? "SSLv3, " : ""), + (protocol & SSL_PROTOCOL_TLSV1 ? "TLSv1, " : ""), +#ifdef HAVE_TLSV1_X + (protocol & SSL_PROTOCOL_TLSV1_1 ? "TLSv1.1, " : ""), + (protocol & SSL_PROTOCOL_TLSV1_2 ? "TLSv1.2, " : ""), +#endif + NULL); + cp[strlen(cp)-2] = NUL; + + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, + "Creating new SSL context (protocols: %s)", cp); + + if (protocol == SSL_PROTOCOL_SSLV3) { + method = mctx->pkp ? + SSLv3_client_method() : /* proxy */ + SSLv3_server_method(); /* server */ + } + else if (protocol == SSL_PROTOCOL_TLSV1) { + method = mctx->pkp ? + TLSv1_client_method() : /* proxy */ + TLSv1_server_method(); /* server */ + } +#ifdef HAVE_TLSV1_X + else if (protocol == SSL_PROTOCOL_TLSV1_1) { + method = mctx->pkp ? + TLSv1_1_client_method() : /* proxy */ + TLSv1_1_server_method(); /* server */ + } + else if (protocol == SSL_PROTOCOL_TLSV1_2) { + method = mctx->pkp ? + TLSv1_2_client_method() : /* proxy */ + TLSv1_2_server_method(); /* server */ + } +#endif + else { /* For multiple protocols, we need a flexible method */ + method = mctx->pkp ? + SSLv23_client_method() : /* proxy */ + SSLv23_server_method(); /* server */ + } + ctx = SSL_CTX_new(method); + + mctx->ssl_ctx = ctx; + + SSL_CTX_set_options(ctx, SSL_OP_ALL); + + /* always disable SSLv2, as per RFC 6176 */ + SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2); + + if (!(protocol & SSL_PROTOCOL_SSLV3)) { + SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3); + } + + if (!(protocol & SSL_PROTOCOL_TLSV1)) { + SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1); + } + +#ifdef HAVE_TLSV1_X + if (!(protocol & SSL_PROTOCOL_TLSV1_1)) { + SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1_1); + } + + if (!(protocol & SSL_PROTOCOL_TLSV1_2)) { + SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1_2); + } +#endif + +#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE + if (sc->cipher_server_pref == TRUE) { + SSL_CTX_set_options(ctx, SSL_OP_CIPHER_SERVER_PREFERENCE); + } +#endif + + +#ifndef OPENSSL_NO_COMP + if (sc->compression != TRUE) { +#ifdef SSL_OP_NO_COMPRESSION + /* OpenSSL >= 1.0 only */ + SSL_CTX_set_options(ctx, SSL_OP_NO_COMPRESSION); +#else + sk_SSL_COMP_zero(SSL_COMP_get_compression_methods()); +#endif + } +#endif + +#ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION + if (sc->insecure_reneg == TRUE) { + SSL_CTX_set_options(ctx, SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION); + } +#endif + + SSL_CTX_set_app_data(ctx, s); + + /* + * Configure additional context ingredients + */ + SSL_CTX_set_options(ctx, SSL_OP_SINGLE_DH_USE); +#ifdef HAVE_ECC + SSL_CTX_set_options(ctx, SSL_OP_SINGLE_ECDH_USE); +#endif + +#ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION + /* + * Disallow a session from being resumed during a renegotiation, + * so that an acceptable cipher suite can be negotiated. + */ + SSL_CTX_set_options(ctx, SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); +#endif + +#ifdef SSL_MODE_RELEASE_BUFFERS + /* If httpd is configured to reduce mem usage, ask openssl to do so, too */ + if (ap_max_mem_free != APR_ALLOCATOR_MAX_FREE_UNLIMITED) + SSL_CTX_set_mode(ctx, SSL_MODE_RELEASE_BUFFERS); +#endif + + return APR_SUCCESS; +} + +static void ssl_init_ctx_session_cache(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + SSL_CTX *ctx = mctx->ssl_ctx; + SSLModConfigRec *mc = myModConfig(s); + + SSL_CTX_set_session_cache_mode(ctx, mc->sesscache_mode); + + if (mc->sesscache) { + SSL_CTX_sess_set_new_cb(ctx, ssl_callback_NewSessionCacheEntry); + SSL_CTX_sess_set_get_cb(ctx, ssl_callback_GetSessionCacheEntry); + SSL_CTX_sess_set_remove_cb(ctx, ssl_callback_DelSessionCacheEntry); + } +} + +static void ssl_init_ctx_callbacks(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + SSL_CTX *ctx = mctx->ssl_ctx; + + SSL_CTX_set_tmp_dh_callback(ctx, ssl_callback_TmpDH); + + SSL_CTX_set_info_callback(ctx, ssl_callback_Info); + +#if defined(HAVE_TLS_ALPN) + SSL_CTX_set_alpn_select_cb( + ctx, ssl_callback_alpn_select, NULL); +#elif defined(HAVE_TLS_NPN) + SSL_CTX_set_next_protos_advertised_cb( + ctx, ssl_callback_AdvertiseNextProtos, NULL); +#endif +} + +static apr_status_t ssl_init_ctx_verify(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + SSL_CTX *ctx = mctx->ssl_ctx; + + int verify = SSL_VERIFY_NONE; + STACK_OF(X509_NAME) *ca_list; + + if (mctx->auth.verify_mode == SSL_CVERIFY_UNSET) { + mctx->auth.verify_mode = SSL_CVERIFY_NONE; + } + + if (mctx->auth.verify_depth == UNSET) { + mctx->auth.verify_depth = 1; + } + + /* + * Configure callbacks for SSL context + */ + if (mctx->auth.verify_mode == SSL_CVERIFY_REQUIRE) { + verify |= SSL_VERIFY_PEER_STRICT; + } + + if ((mctx->auth.verify_mode == SSL_CVERIFY_OPTIONAL) || + (mctx->auth.verify_mode == SSL_CVERIFY_OPTIONAL_NO_CA)) + { + verify |= SSL_VERIFY_PEER; + } + + SSL_CTX_set_verify(ctx, verify, ssl_callback_SSLVerify); + + /* + * Configure Client Authentication details + */ + if (mctx->auth.ca_cert_file || mctx->auth.ca_cert_path) { + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, + "Configuring client authentication"); + + if (!SSL_CTX_load_verify_locations(ctx, + mctx->auth.ca_cert_file, + mctx->auth.ca_cert_path)) + { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01895) + "Unable to configure verify locations " + "for client authentication"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + if (mctx->pks && (mctx->pks->ca_name_file || mctx->pks->ca_name_path)) { + ca_list = ssl_init_FindCAList(s, ptemp, + mctx->pks->ca_name_file, + mctx->pks->ca_name_path); + } else + ca_list = ssl_init_FindCAList(s, ptemp, + mctx->auth.ca_cert_file, + mctx->auth.ca_cert_path); + if (sk_X509_NAME_num(ca_list) <= 0) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01896) + "Unable to determine list of acceptable " + "CA certificates for client authentication"); + return ssl_die(s); + } + + SSL_CTX_set_client_CA_list(ctx, ca_list); + } + + /* + * Give a warning when no CAs were configured but client authentication + * should take place. This cannot work. + */ + if (mctx->auth.verify_mode == SSL_CVERIFY_REQUIRE) { + ca_list = SSL_CTX_get_client_CA_list(ctx); + + if (sk_X509_NAME_num(ca_list) == 0) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(01897) + "Init: Oops, you want to request client " + "authentication, but no CAs are known for " + "verification!? [Hint: SSLCACertificate*]"); + } + } + + return APR_SUCCESS; +} + +static apr_status_t ssl_init_ctx_cipher_suite(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + SSL_CTX *ctx = mctx->ssl_ctx; + const char *suite; + + /* + * Configure SSL Cipher Suite. Always disable NULL and export ciphers, + * see also ssl_engine_config.c:ssl_cmd_SSLCipherSuite(). + * OpenSSL's SSL_DEFAULT_CIPHER_LIST already includes !aNULL:!eNULL, + * so only prepend !EXP in this case. + */ + suite = mctx->auth.cipher_suite ? mctx->auth.cipher_suite : + apr_pstrcat(ptemp, "!EXP:", SSL_DEFAULT_CIPHER_LIST, NULL); + + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, + "Configuring permitted SSL ciphers [%s]", + suite); + + if (!SSL_CTX_set_cipher_list(ctx, suite)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01898) + "Unable to configure permitted SSL ciphers"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + return APR_SUCCESS; +} + +static apr_status_t ssl_init_ctx_crl(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + X509_STORE *store = SSL_CTX_get_cert_store(mctx->ssl_ctx); + unsigned long crlflags = 0; + char *cfgp = mctx->pkp ? "SSLProxy" : "SSL"; + + /* + * Configure Certificate Revocation List (CRL) Details + */ + + if (!(mctx->crl_file || mctx->crl_path)) { + if (mctx->crl_check_mode == SSL_CRLCHECK_LEAF || + mctx->crl_check_mode == SSL_CRLCHECK_CHAIN) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01899) + "Host %s: CRL checking has been enabled, but " + "neither %sCARevocationFile nor %sCARevocationPath " + "is configured", mctx->sc->vhost_id, cfgp, cfgp); + return ssl_die(s); + } + return APR_SUCCESS; + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01900) + "Configuring certificate revocation facility"); + + if (!store || !X509_STORE_load_locations(store, mctx->crl_file, + mctx->crl_path)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01901) + "Host %s: unable to configure X.509 CRL storage " + "for certificate revocation", mctx->sc->vhost_id); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + switch (mctx->crl_check_mode) { + case SSL_CRLCHECK_LEAF: + crlflags = X509_V_FLAG_CRL_CHECK; + break; + case SSL_CRLCHECK_CHAIN: + crlflags = X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL; + break; + default: + crlflags = 0; + } + + if (crlflags) { + X509_STORE_set_flags(store, crlflags); + } else { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(01902) + "Host %s: X.509 CRL storage locations configured, " + "but CRL checking (%sCARevocationCheck) is not " + "enabled", mctx->sc->vhost_id, cfgp); + } + + return APR_SUCCESS; +} + +static apr_status_t ssl_init_ctx_cert_chain(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + BOOL skip_first = FALSE; + int i, n; + const char *chain = mctx->cert_chain; + + /* + * Optionally configure extra server certificate chain certificates. + * This is usually done by OpenSSL automatically when one of the + * server cert issuers are found under SSLCACertificatePath or in + * SSLCACertificateFile. But because these are intended for client + * authentication it can conflict. For instance when you use a + * Global ID server certificate you've to send out the intermediate + * CA certificate, too. When you would just configure this with + * SSLCACertificateFile and also use client authentication mod_ssl + * would accept all clients also issued by this CA. Obviously this + * isn't what we want in this situation. So this feature here exists + * to allow one to explicity configure CA certificates which are + * used only for the server certificate chain. + */ + if (!chain) { + return APR_SUCCESS; + } + + for (i = 0; (i < mctx->pks->cert_files->nelts) && + APR_ARRAY_IDX(mctx->pks->cert_files, i, const char *); i++) { + if (strEQ(APR_ARRAY_IDX(mctx->pks->cert_files, i, const char *), chain)) { + skip_first = TRUE; + break; + } + } + + n = SSL_CTX_use_certificate_chain(mctx->ssl_ctx, + (char *)chain, + skip_first, NULL); + if (n < 0) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01903) + "Failed to configure CA certificate chain!"); + return ssl_die(s); + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01904) + "Configuring server certificate chain " + "(%d CA certificate%s)", + n, n == 1 ? "" : "s"); + + return APR_SUCCESS; +} + +static apr_status_t ssl_init_ctx(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + apr_status_t rv; + + if ((rv = ssl_init_ctx_protocol(s, p, ptemp, mctx)) != APR_SUCCESS) { + return rv; + } + + ssl_init_ctx_session_cache(s, p, ptemp, mctx); + + ssl_init_ctx_callbacks(s, p, ptemp, mctx); + + if ((rv = ssl_init_ctx_verify(s, p, ptemp, mctx)) != APR_SUCCESS) { + return rv; + } + + if ((rv = ssl_init_ctx_cipher_suite(s, p, ptemp, mctx)) != APR_SUCCESS) { + return rv; + } + + if ((rv = ssl_init_ctx_crl(s, p, ptemp, mctx)) != APR_SUCCESS) { + return rv; + } + + if (mctx->pks) { + /* XXX: proxy support? */ + if ((rv = ssl_init_ctx_cert_chain(s, p, ptemp, mctx)) != APR_SUCCESS) { + return rv; + } +#ifdef HAVE_TLSEXT + if ((rv = ssl_init_ctx_tls_extensions(s, p, ptemp, mctx)) != + APR_SUCCESS) { + return rv; + } +#endif + } + + return APR_SUCCESS; +} + +static void ssl_check_public_cert(server_rec *s, + apr_pool_t *ptemp, + X509 *cert, + const char *key_id) +{ + int is_ca, pathlen; + + if (!cert) { + return; + } + + /* + * Some information about the certificate(s) + */ + + if (SSL_X509_getBC(cert, &is_ca, &pathlen)) { + if (is_ca) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(01906) + "%s server certificate is a CA certificate " + "(BasicConstraints: CA == TRUE !?)", key_id); + } + + if (pathlen > 0) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(01907) + "%s server certificate is not a leaf certificate " + "(BasicConstraints: pathlen == %d > 0 !?)", + key_id, pathlen); + } + } + + if (SSL_X509_match_name(ptemp, cert, (const char *)s->server_hostname, + TRUE, s) == FALSE) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(01909) + "%s server certificate does NOT include an ID " + "which matches the server name", key_id); + } +} + +/* prevent OpenSSL from showing its "Enter PEM pass phrase:" prompt */ +static int ssl_no_passwd_prompt_cb(char *buf, int size, int rwflag, + void *userdata) { + return 0; +} + +static apr_status_t ssl_init_server_certs(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx, + apr_array_header_t *pphrases) +{ + SSLModConfigRec *mc = myModConfig(s); + const char *vhost_id = mctx->sc->vhost_id, *key_id, *certfile, *keyfile; + int i; + X509 *cert; + DH *dhparams; +#ifdef HAVE_ECC + EC_GROUP *ecparams; + int nid; + EC_KEY *eckey; +#endif +#ifndef HAVE_SSL_CONF_CMD + SSL *ssl; +#endif + + /* no OpenSSL default prompts for any of the SSL_CTX_use_* calls, please */ + SSL_CTX_set_default_passwd_cb(mctx->ssl_ctx, ssl_no_passwd_prompt_cb); + + /* Iterate over the SSLCertificateFile array */ + for (i = 0; (i < mctx->pks->cert_files->nelts) && + (certfile = APR_ARRAY_IDX(mctx->pks->cert_files, i, + const char *)); + i++) { + key_id = apr_psprintf(ptemp, "%s:%d", vhost_id, i); + + ERR_clear_error(); + + /* first the certificate (public key) */ + if (mctx->cert_chain) { + if ((SSL_CTX_use_certificate_file(mctx->ssl_ctx, certfile, + SSL_FILETYPE_PEM) < 1)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02561) + "Failed to configure certificate %s, check %s", + key_id, certfile); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return APR_EGENERAL; + } + } else { + if ((SSL_CTX_use_certificate_chain_file(mctx->ssl_ctx, + certfile) < 1)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02562) + "Failed to configure certificate %s (with chain)," + " check %s", key_id, certfile); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return APR_EGENERAL; + } + } + + /* and second, the private key */ + if (i < mctx->pks->key_files->nelts) { + keyfile = APR_ARRAY_IDX(mctx->pks->key_files, i, const char *); + } else { + keyfile = certfile; + } + + ERR_clear_error(); + + if ((SSL_CTX_use_PrivateKey_file(mctx->ssl_ctx, keyfile, + SSL_FILETYPE_PEM) < 1) && + (ERR_GET_FUNC(ERR_peek_last_error()) + != X509_F_X509_CHECK_PRIVATE_KEY)) { + ssl_asn1_t *asn1; + EVP_PKEY *pkey; + const unsigned char *ptr; + + ERR_clear_error(); + + /* perhaps it's an encrypted private key, so try again */ + ssl_load_encrypted_pkey(s, ptemp, i, keyfile, &pphrases); + + if (!(asn1 = ssl_asn1_table_get(mc->tPrivateKey, key_id)) || + !(ptr = asn1->cpData) || + !(pkey = d2i_AutoPrivateKey(NULL, &ptr, asn1->nData)) || + (SSL_CTX_use_PrivateKey(mctx->ssl_ctx, pkey) < 1)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02564) + "Failed to configure encrypted (?) private key %s," + " check %s", key_id, keyfile); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return APR_EGENERAL; + } + } + + if (SSL_CTX_check_private_key(mctx->ssl_ctx) < 1) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02565) + "Certificate and private key %s from %s and %s " + "do not match", key_id, certfile, keyfile); + return APR_EGENERAL; + } + +#ifdef HAVE_SSL_CONF_CMD + /* + * workaround for those OpenSSL versions where SSL_CTX_get0_certificate + * is not yet available: create an SSL struct which we dispose of + * as soon as we no longer need access to the cert. (Strictly speaking, + * SSL_CTX_get0_certificate does not depend on the SSL_CONF stuff, + * but there's no reliable way to check for its existence, so we + * assume that if SSL_CONF is available, it's OpenSSL 1.0.2 or later, + * and SSL_CTX_get0_certificate is implemented.) + */ + if (!(cert = SSL_CTX_get0_certificate(mctx->ssl_ctx))) { +#else + ssl = SSL_new(mctx->ssl_ctx); + if (ssl) { + /* Workaround bug in SSL_get_certificate in OpenSSL 0.9.8y */ + SSL_set_connect_state(ssl); + cert = SSL_get_certificate(ssl); + } + if (!ssl || !cert) { +#endif + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02566) + "Unable to retrieve certificate %s", key_id); +#ifndef HAVE_SSL_CONF_CMD + if (ssl) + SSL_free(ssl); +#endif + return APR_EGENERAL; + } + + /* warn about potential cert issues */ + ssl_check_public_cert(s, ptemp, cert, key_id); + +#if defined(HAVE_OCSP_STAPLING) && !defined(SSL_CTRL_SET_CURRENT_CERT) + /* + * OpenSSL up to 1.0.1: configure stapling as we go. In 1.0.2 + * and later, there's SSL_CTX_set_current_cert, which allows + * iterating over all certs in an SSL_CTX (including those possibly + * loaded via SSLOpenSSLConfCmd Certificate), so for 1.0.2 and + * later, we defer to the code in ssl_init_server_ctx. + */ + if ((mctx->stapling_enabled == TRUE) && + !ssl_stapling_init_cert(s, mctx, cert)) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02567) + "Unable to configure certificate %s for stapling", + key_id); + } +#endif + +#ifndef HAVE_SSL_CONF_CMD + SSL_free(ssl); +#endif + + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(02568) + "Certificate and private key %s configured from %s and %s", + key_id, certfile, keyfile); + } + + /* + * Try to read DH parameters from the (first) SSLCertificateFile + */ + if ((certfile = APR_ARRAY_IDX(mctx->pks->cert_files, 0, const char *)) && + (dhparams = ssl_dh_GetParamFromFile(certfile))) { + SSL_CTX_set_tmp_dh(mctx->ssl_ctx, dhparams); + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02540) + "Custom DH parameters (%d bits) for %s loaded from %s", + BN_num_bits(dhparams->p), vhost_id, certfile); + } + +#ifdef HAVE_ECC + /* + * Similarly, try to read the ECDH curve name from SSLCertificateFile... + */ + if ((certfile != NULL) && + (ecparams = ssl_ec_GetParamFromFile(certfile)) && + (nid = EC_GROUP_get_curve_name(ecparams)) && + (eckey = EC_KEY_new_by_curve_name(nid))) { + SSL_CTX_set_tmp_ecdh(mctx->ssl_ctx, eckey); + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02541) + "ECDH curve %s for %s specified in %s", + OBJ_nid2sn(nid), vhost_id, certfile); + } + /* + * ...otherwise, enable auto curve selection (OpenSSL 1.0.2 and later) + * or configure NIST P-256 (required to enable ECDHE for earlier versions) + */ + else { +#if defined(SSL_CTX_set_ecdh_auto) + SSL_CTX_set_ecdh_auto(mctx->ssl_ctx, 1); +#else + SSL_CTX_set_tmp_ecdh(mctx->ssl_ctx, + EC_KEY_new_by_curve_name(NID_X9_62_prime256v1)); +#endif + } +#endif + + return APR_SUCCESS; +} + +#ifdef HAVE_TLS_SESSION_TICKETS +static apr_status_t ssl_init_ticket_key(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + apr_status_t rv; + apr_file_t *fp; + apr_size_t len; + char buf[TLSEXT_TICKET_KEY_LEN]; + char *path; + modssl_ticket_key_t *ticket_key = mctx->ticket_key; + + if (!ticket_key->file_path) { + return APR_SUCCESS; + } + + path = ap_server_root_relative(p, ticket_key->file_path); + + rv = apr_file_open(&fp, path, APR_READ|APR_BINARY, + APR_OS_DEFAULT, ptemp); + + if (rv != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02286) + "Failed to open ticket key file %s: (%d) %pm", + path, rv, &rv); + return ssl_die(s); + } + + rv = apr_file_read_full(fp, &buf[0], TLSEXT_TICKET_KEY_LEN, &len); + + if (rv != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02287) + "Failed to read %d bytes from %s: (%d) %pm", + TLSEXT_TICKET_KEY_LEN, path, rv, &rv); + return ssl_die(s); + } + + memcpy(ticket_key->key_name, buf, 16); + memcpy(ticket_key->hmac_secret, buf + 16, 16); + memcpy(ticket_key->aes_key, buf + 32, 16); + + if (!SSL_CTX_set_tlsext_ticket_key_cb(mctx->ssl_ctx, + ssl_callback_SessionTicket)) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01913) + "Unable to initialize TLS session ticket key callback " + "(incompatible OpenSSL version?)"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(02288) + "TLS session ticket key for %s successfully loaded from %s", + (mySrvConfig(s))->vhost_id, path); + + return APR_SUCCESS; +} +#endif + +static apr_status_t ssl_init_proxy_certs(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + modssl_ctx_t *mctx) +{ + int n, ncerts = 0; + STACK_OF(X509_INFO) *sk; + modssl_pk_proxy_t *pkp = mctx->pkp; + STACK_OF(X509) *chain; + X509_STORE_CTX *sctx; + X509_STORE *store = SSL_CTX_get_cert_store(mctx->ssl_ctx); + + SSL_CTX_set_client_cert_cb(mctx->ssl_ctx, + ssl_callback_proxy_cert); + + if (!(pkp->cert_file || pkp->cert_path)) { + return APR_SUCCESS; + } + + sk = sk_X509_INFO_new_null(); + + if (pkp->cert_file) { + SSL_X509_INFO_load_file(ptemp, sk, pkp->cert_file); + } + + if (pkp->cert_path) { + SSL_X509_INFO_load_path(ptemp, sk, pkp->cert_path); + } + + if ((ncerts = sk_X509_INFO_num(sk)) <= 0) { + sk_X509_INFO_free(sk); + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(02206) + "no client certs found for SSL proxy"); + return APR_SUCCESS; + } + + /* Check that all client certs have got certificates and private + * keys. */ + for (n = 0; n < ncerts; n++) { + X509_INFO *inf = sk_X509_INFO_value(sk, n); + + if (!inf->x509 || !inf->x_pkey || !inf->x_pkey->dec_pkey || + inf->enc_data) { + sk_X509_INFO_free(sk); + ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, s, APLOGNO(02252) + "incomplete client cert configured for SSL proxy " + "(missing or encrypted private key?)"); + return ssl_die(s); + } + + if (X509_check_private_key(inf->x509, inf->x_pkey->dec_pkey) != 1) { + ssl_log_xerror(SSLLOG_MARK, APLOG_STARTUP, 0, ptemp, s, inf->x509, + APLOGNO(02326) "proxy client certificate and " + "private key do not match"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + return ssl_die(s); + } + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02207) + "loaded %d client certs for SSL proxy", + ncerts); + pkp->certs = sk; + + + if (!pkp->ca_cert_file || !store) { + return APR_SUCCESS; + } + + /* If SSLProxyMachineCertificateChainFile is configured, load all + * the CA certs and have OpenSSL attempt to construct a full chain + * from each configured end-entity cert up to a root. This will + * allow selection of the correct cert given a list of root CA + * names in the certificate request from the server. */ + pkp->ca_certs = (STACK_OF(X509) **) apr_pcalloc(p, ncerts * sizeof(sk)); + sctx = X509_STORE_CTX_new(); + + if (!sctx) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02208) + "SSL proxy client cert initialization failed"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + X509_STORE_load_locations(store, pkp->ca_cert_file, NULL); + + for (n = 0; n < ncerts; n++) { + int i; + + X509_INFO *inf = sk_X509_INFO_value(pkp->certs, n); + X509_STORE_CTX_init(sctx, store, inf->x509, NULL); + + /* Attempt to verify the client cert */ + if (X509_verify_cert(sctx) != 1) { + int err = X509_STORE_CTX_get_error(sctx); + ssl_log_xerror(SSLLOG_MARK, APLOG_WARNING, 0, ptemp, s, inf->x509, + APLOGNO(02270) "SSL proxy client cert chain " + "verification failed: %s :", + X509_verify_cert_error_string(err)); + } + + /* Clear X509_verify_cert errors */ + ERR_clear_error(); + + /* Obtain a copy of the verified chain */ + chain = X509_STORE_CTX_get1_chain(sctx); + + if (chain != NULL) { + /* Discard end entity cert from the chain */ + X509_free(sk_X509_shift(chain)); + + if ((i = sk_X509_num(chain)) > 0) { + /* Store the chain for later use */ + pkp->ca_certs[n] = chain; + } + else { + /* Discard empty chain */ + sk_X509_pop_free(chain, X509_free); + pkp->ca_certs[n] = NULL; + } + + ssl_log_xerror(SSLLOG_MARK, APLOG_DEBUG, 0, ptemp, s, inf->x509, + APLOGNO(02271) + "loaded %i intermediate CA%s for cert %i: ", + i, i == 1 ? "" : "s", n); + if (i > 0) { + int j; + for (j = 0; j < i; j++) { + ssl_log_xerror(SSLLOG_MARK, APLOG_DEBUG, 0, ptemp, s, + sk_X509_value(chain, j), "%i:", j); + } + } + } + + /* get ready for next X509_STORE_CTX_init */ + X509_STORE_CTX_cleanup(sctx); + } + + X509_STORE_CTX_free(sctx); + + return APR_SUCCESS; +} + +static apr_status_t ssl_init_proxy_ctx(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + SSLSrvConfigRec *sc) +{ + apr_status_t rv; + + if ((rv = ssl_init_ctx(s, p, ptemp, sc->proxy)) != APR_SUCCESS) { + return rv; + } + + if ((rv = ssl_init_proxy_certs(s, p, ptemp, sc->proxy)) != APR_SUCCESS) { + return rv; + } + + return APR_SUCCESS; +} + +static apr_status_t ssl_init_server_ctx(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + SSLSrvConfigRec *sc, + apr_array_header_t *pphrases) +{ + apr_status_t rv; +#ifdef HAVE_SSL_CONF_CMD + ssl_ctx_param_t *param = (ssl_ctx_param_t *)sc->server->ssl_ctx_param->elts; + SSL_CONF_CTX *cctx = sc->server->ssl_ctx_config; + int i; +#endif + + /* + * Check for problematic re-initializations + */ + if (sc->server->ssl_ctx) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02569) + "Illegal attempt to re-initialise SSL for server " + "(SSLEngine On should go in the VirtualHost, not in global scope.)"); + return APR_EGENERAL; + } + + if ((rv = ssl_init_ctx(s, p, ptemp, sc->server)) != APR_SUCCESS) { + return rv; + } + + if ((rv = ssl_init_server_certs(s, p, ptemp, sc->server, pphrases)) + != APR_SUCCESS) { + return rv; + } + +#ifdef HAVE_SSL_CONF_CMD + SSL_CONF_CTX_set_ssl_ctx(cctx, sc->server->ssl_ctx); + for (i = 0; i < sc->server->ssl_ctx_param->nelts; i++, param++) { + ERR_clear_error(); + if (SSL_CONF_cmd(cctx, param->name, param->value) <= 0) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02407) + "\"SSLOpenSSLConfCmd %s %s\" failed for %s", + param->name, param->value, sc->vhost_id); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } else { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02556) + "\"SSLOpenSSLConfCmd %s %s\" applied to %s", + param->name, param->value, sc->vhost_id); + } + } + + if (SSL_CONF_CTX_finish(cctx) == 0) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02547) + "SSL_CONF_CTX_finish() failed"); + SSL_CONF_CTX_free(cctx); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + SSL_CONF_CTX_free(cctx); +#endif + + if (SSL_CTX_check_private_key(sc->server->ssl_ctx) != 1) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02572) + "Failed to configure at least one certificate and key " + "for %s", sc->vhost_id); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + +#if defined(HAVE_OCSP_STAPLING) && defined(SSL_CTRL_SET_CURRENT_CERT) + /* + * OpenSSL 1.0.2 and later allows iterating over all SSL_CTX certs + * by means of SSL_CTX_set_current_cert. Enabling stapling at this + * (late) point makes sure that we catch both certificates loaded + * via SSLCertificateFile and SSLOpenSSLConfCmd Certificate. + */ + if (sc->server->stapling_enabled == TRUE) { + X509 *cert; + int i = 0; + int ret = SSL_CTX_set_current_cert(sc->server->ssl_ctx, + SSL_CERT_SET_FIRST); + while (ret) { + cert = SSL_CTX_get0_certificate(sc->server->ssl_ctx); + if (!cert || !ssl_stapling_init_cert(s, sc->server, cert)) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02604) + "Unable to configure certificate %s:%d " + "for stapling", sc->vhost_id, i); + } + ret = SSL_CTX_set_current_cert(sc->server->ssl_ctx, + SSL_CERT_SET_NEXT); + i++; + } + } +#endif + +#ifdef HAVE_TLS_SESSION_TICKETS + if ((rv = ssl_init_ticket_key(s, p, ptemp, sc->server)) != APR_SUCCESS) { + return rv; + } +#endif + + SSL_CTX_set_timeout(sc->server->ssl_ctx, + sc->session_cache_timeout == UNSET ? + SSL_SESSION_CACHE_TIMEOUT : sc->session_cache_timeout); + + return APR_SUCCESS; +} + +/* + * Configure a particular server + */ +apr_status_t ssl_init_ConfigureServer(server_rec *s, + apr_pool_t *p, + apr_pool_t *ptemp, + SSLSrvConfigRec *sc, + apr_array_header_t *pphrases) +{ + apr_status_t rv; + + /* Initialize the server if SSL is enabled or optional. + */ + if ((sc->enabled == SSL_ENABLED_TRUE) || (sc->enabled == SSL_ENABLED_OPTIONAL)) { + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(01914) + "Configuring server %s for SSL protocol", sc->vhost_id); + if ((rv = ssl_init_server_ctx(s, p, ptemp, sc, pphrases)) + != APR_SUCCESS) { + return rv; + } + } + + if (sc->proxy_enabled) { + if ((rv = ssl_init_proxy_ctx(s, p, ptemp, sc)) != APR_SUCCESS) { + return rv; + } + } + + return APR_SUCCESS; +} + +apr_status_t ssl_init_CheckServers(server_rec *base_server, apr_pool_t *p) +{ + server_rec *s; + SSLSrvConfigRec *sc; +#ifndef HAVE_TLSEXT + server_rec *ps; + apr_hash_t *table; + const char *key; + apr_ssize_t klen; + + BOOL conflict = FALSE; +#endif + + /* + * Give out warnings when a server has HTTPS configured + * for the HTTP port or vice versa + */ + for (s = base_server; s; s = s->next) { + sc = mySrvConfig(s); + + if ((sc->enabled == SSL_ENABLED_TRUE) && (s->port == DEFAULT_HTTP_PORT)) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, + base_server, APLOGNO(01915) + "Init: (%s) You configured HTTPS(%d) " + "on the standard HTTP(%d) port!", + ssl_util_vhostid(p, s), + DEFAULT_HTTPS_PORT, DEFAULT_HTTP_PORT); + } + + if ((sc->enabled == SSL_ENABLED_FALSE) && (s->port == DEFAULT_HTTPS_PORT)) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, + base_server, APLOGNO(01916) + "Init: (%s) You configured HTTP(%d) " + "on the standard HTTPS(%d) port!", + ssl_util_vhostid(p, s), + DEFAULT_HTTP_PORT, DEFAULT_HTTPS_PORT); + } + } + +#ifndef HAVE_TLSEXT + /* + * Give out warnings when more than one SSL-aware virtual server uses the + * same IP:port and an OpenSSL version without support for TLS extensions + * (SNI in particular) is used. + */ + table = apr_hash_make(p); + + for (s = base_server; s; s = s->next) { + char *addr; + + sc = mySrvConfig(s); + + if (!((sc->enabled == SSL_ENABLED_TRUE) && s->addrs)) { + continue; + } + + apr_sockaddr_ip_get(&addr, s->addrs->host_addr); + key = apr_psprintf(p, "%s:%u", addr, s->addrs->host_port); + klen = strlen(key); + + if ((ps = (server_rec *)apr_hash_get(table, key, klen))) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, base_server, + "Init: SSL server IP/port conflict: " + "%s (%s:%d) vs. %s (%s:%d)", + ssl_util_vhostid(p, s), + (s->defn_name ? s->defn_name : "unknown"), + s->defn_line_number, + ssl_util_vhostid(p, ps), + (ps->defn_name ? ps->defn_name : "unknown"), + ps->defn_line_number); + conflict = TRUE; + continue; + } + + apr_hash_set(table, key, klen, s); + } + + if (conflict) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, base_server, APLOGNO(01917) + "Init: Name-based SSL virtual hosts require " + "an OpenSSL version with support for TLS extensions " + "(RFC 6066 - Server Name Indication / SNI), " + "but the currently used library version (%s) is " + "lacking this feature", SSLeay_version(SSLEAY_VERSION)); + } +#endif + + return APR_SUCCESS; +} + +static int ssl_init_FindCAList_X509NameCmp(const X509_NAME * const *a, + const X509_NAME * const *b) +{ + return(X509_NAME_cmp(*a, *b)); +} + +static void ssl_init_PushCAList(STACK_OF(X509_NAME) *ca_list, + server_rec *s, apr_pool_t *ptemp, + const char *file) +{ + int n; + STACK_OF(X509_NAME) *sk; + + sk = (STACK_OF(X509_NAME) *) + SSL_load_client_CA_file(file); + + if (!sk) { + return; + } + + for (n = 0; n < sk_X509_NAME_num(sk); n++) { + X509_NAME *name = sk_X509_NAME_value(sk, n); + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02209) + "CA certificate: %s", + SSL_X509_NAME_to_string(ptemp, name, 0)); + + /* + * note that SSL_load_client_CA_file() checks for duplicates, + * but since we call it multiple times when reading a directory + * we must also check for duplicates ourselves. + */ + + if (sk_X509_NAME_find(ca_list, name) < 0) { + /* this will be freed when ca_list is */ + sk_X509_NAME_push(ca_list, name); + } + else { + /* need to free this ourselves, else it will leak */ + X509_NAME_free(name); + } + } + + sk_X509_NAME_free(sk); +} + +STACK_OF(X509_NAME) *ssl_init_FindCAList(server_rec *s, + apr_pool_t *ptemp, + const char *ca_file, + const char *ca_path) +{ + STACK_OF(X509_NAME) *ca_list; + + /* + * Start with a empty stack/list where new + * entries get added in sorted order. + */ + ca_list = sk_X509_NAME_new(ssl_init_FindCAList_X509NameCmp); + + /* + * Process CA certificate bundle file + */ + if (ca_file) { + ssl_init_PushCAList(ca_list, s, ptemp, ca_file); + /* + * If ca_list is still empty after trying to load ca_file + * then the file failed to load, and users should hear about that. + */ + if (sk_X509_NAME_num(ca_list) == 0) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02210) + "Failed to load SSLCACertificateFile: %s", ca_file); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + } + } + + /* + * Process CA certificate path files + */ + if (ca_path) { + apr_dir_t *dir; + apr_finfo_t direntry; + apr_int32_t finfo_flags = APR_FINFO_TYPE|APR_FINFO_NAME; + apr_status_t rv; + + if ((rv = apr_dir_open(&dir, ca_path, ptemp)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, APLOGNO(02211) + "Failed to open Certificate Path `%s'", + ca_path); + sk_X509_NAME_pop_free(ca_list, X509_NAME_free); + return NULL; + } + + while ((apr_dir_read(&direntry, finfo_flags, dir)) == APR_SUCCESS) { + const char *file; + if (direntry.filetype == APR_DIR) { + continue; /* don't try to load directories */ + } + file = apr_pstrcat(ptemp, ca_path, "/", direntry.name, NULL); + ssl_init_PushCAList(ca_list, s, ptemp, file); + } + + apr_dir_close(dir); + } + + /* + * Cleanup + */ + (void) sk_X509_NAME_set_cmp_func(ca_list, NULL); + + return ca_list; +} + +void ssl_init_Child(apr_pool_t *p, server_rec *s) +{ + SSLModConfigRec *mc = myModConfig(s); + mc->pid = getpid(); /* only call getpid() once per-process */ + + /* XXX: there should be an ap_srand() function */ + srand((unsigned int)time(NULL)); + + /* open the mutex lockfile */ + ssl_mutex_reinit(s, p); +#ifdef HAVE_OCSP_STAPLING + ssl_stapling_mutex_reinit(s, p); +#endif +} + +#define MODSSL_CFG_ITEM_FREE(func, item) \ + if (item) { \ + func(item); \ + item = NULL; \ + } + +static void ssl_init_ctx_cleanup(modssl_ctx_t *mctx) +{ + MODSSL_CFG_ITEM_FREE(SSL_CTX_free, mctx->ssl_ctx); + +#ifdef HAVE_SRP + if (mctx->srp_vbase != NULL) { + SRP_VBASE_free(mctx->srp_vbase); + mctx->srp_vbase = NULL; + } +#endif +} + +static void ssl_init_ctx_cleanup_proxy(modssl_ctx_t *mctx) +{ + ssl_init_ctx_cleanup(mctx); + + if (mctx->pkp->certs) { + int i = 0; + int ncerts = sk_X509_INFO_num(mctx->pkp->certs); + + if (mctx->pkp->ca_certs) { + for (i = 0; i < ncerts; i++) { + if (mctx->pkp->ca_certs[i] != NULL) { + sk_X509_pop_free(mctx->pkp->ca_certs[i], X509_free); + } + } + } + + sk_X509_INFO_pop_free(mctx->pkp->certs, X509_INFO_free); + mctx->pkp->certs = NULL; + } +} + +apr_status_t ssl_init_ModuleKill(void *data) +{ + SSLSrvConfigRec *sc; + server_rec *base_server = (server_rec *)data; + server_rec *s; + + /* + * Drop the session cache and mutex + */ + ssl_scache_kill(base_server); + + /* + * Free the non-pool allocated structures + * in the per-server configurations + */ + for (s = base_server; s; s = s->next) { + sc = mySrvConfig(s); + + ssl_init_ctx_cleanup_proxy(sc->proxy); + + ssl_init_ctx_cleanup(sc->server); + } + + free_dh_params(); + + return APR_SUCCESS; +} diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_io.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_io.c new file mode 100644 index 0000000000..168f43f525 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_io.c @@ -0,0 +1,2098 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_io.c + * I/O Functions + */ + /* ``MY HACK: This universe. + Just one little problem: + core keeps dumping.'' + -- Unknown */ +#include "ssl_private.h" +#include "mod_ssl.h" +#include "apr_date.h" + +/* _________________________________________________________________ +** +** I/O Hooks +** _________________________________________________________________ +*/ + +/* This file is designed to be the bridge between OpenSSL and httpd. + * However, we really don't expect anyone (let alone ourselves) to + * remember what is in this file. So, first, a quick overview. + * + * In this file, you will find: + * - ssl_io_filter_input (Apache input filter) + * - ssl_io_filter_output (Apache output filter) + * + * - bio_filter_in_* (OpenSSL input filter) + * - bio_filter_out_* (OpenSSL output filter) + * + * The input chain is roughly: + * + * ssl_io_filter_input->ssl_io_input_read->SSL_read->... + * ...->bio_filter_in_read->ap_get_brigade/next-httpd-filter + * + * In mortal terminology, we do the following: + * - Receive a request for data to the SSL input filter + * - Call a helper function once we know we should perform a read + * - Call OpenSSL's SSL_read() + * - SSL_read() will then call bio_filter_in_read + * - bio_filter_in_read will then try to fetch data from the next httpd filter + * - bio_filter_in_read will flatten that data and return it to SSL_read + * - SSL_read will then decrypt the data + * - ssl_io_input_read will then receive decrypted data as a char* and + * ensure that there were no read errors + * - The char* is placed in a brigade and returned + * + * Since connection-level input filters in httpd need to be able to + * handle AP_MODE_GETLINE calls (namely identifying LF-terminated strings), + * ssl_io_input_getline which will handle this special case. + * + * Due to AP_MODE_GETLINE and AP_MODE_SPECULATIVE, we may sometimes have + * 'leftover' decoded data which must be setaside for the next read. That + * is currently handled by the char_buffer_{read|write} functions. So, + * ssl_io_input_read may be able to fulfill reads without invoking + * SSL_read(). + * + * Note that the filter context of ssl_io_filter_input and bio_filter_in_* + * are shared as bio_filter_in_ctx_t. + * + * Note that the filter is by choice limited to reading at most + * AP_IOBUFSIZE (8192 bytes) per call. + * + */ + +/* this custom BIO allows us to hook SSL_write directly into + * an apr_bucket_brigade and use transient buckets with the SSL + * malloc-ed buffer, rather than copying into a mem BIO. + * also allows us to pass the brigade as data is being written + * rather than buffering up the entire response in the mem BIO. + * + * when SSL needs to flush (e.g. SSL_accept()), it will call BIO_flush() + * which will trigger a call to bio_filter_out_ctrl() -> bio_filter_out_flush(). + * so we only need to flush the output ourselves if we receive an + * EOS or FLUSH bucket. this was not possible with the mem BIO where we + * had to flush all over the place not really knowing when it was required + * to do so. + */ + +typedef struct { + SSL *pssl; + BIO *pbioRead; + BIO *pbioWrite; + ap_filter_t *pInputFilter; + ap_filter_t *pOutputFilter; + SSLConnRec *config; +} ssl_filter_ctx_t; + +typedef struct { + ssl_filter_ctx_t *filter_ctx; + conn_rec *c; + apr_bucket_brigade *bb; /* Brigade used as a buffer. */ + apr_status_t rc; +} bio_filter_out_ctx_t; + +static bio_filter_out_ctx_t *bio_filter_out_ctx_new(ssl_filter_ctx_t *filter_ctx, + conn_rec *c) +{ + bio_filter_out_ctx_t *outctx = apr_palloc(c->pool, sizeof(*outctx)); + + outctx->filter_ctx = filter_ctx; + outctx->c = c; + outctx->bb = apr_brigade_create(c->pool, c->bucket_alloc); + + return outctx; +} + +/* Pass an output brigade down the filter stack; returns 1 on success + * or -1 on failure. */ +static int bio_filter_out_pass(bio_filter_out_ctx_t *outctx) +{ + AP_DEBUG_ASSERT(!APR_BRIGADE_EMPTY(outctx->bb)); + + outctx->rc = ap_pass_brigade(outctx->filter_ctx->pOutputFilter->next, + outctx->bb); + /* Fail if the connection was reset: */ + if (outctx->rc == APR_SUCCESS && outctx->c->aborted) { + outctx->rc = APR_ECONNRESET; + } + return (outctx->rc == APR_SUCCESS) ? 1 : -1; +} + +/* Send a FLUSH bucket down the output filter stack; returns 1 on + * success, -1 on failure. */ +static int bio_filter_out_flush(BIO *bio) +{ + bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)(bio->ptr); + apr_bucket *e; + + AP_DEBUG_ASSERT(APR_BRIGADE_EMPTY(outctx->bb)); + + e = apr_bucket_flush_create(outctx->bb->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(outctx->bb, e); + + return bio_filter_out_pass(outctx); +} + +static int bio_filter_create(BIO *bio) +{ + bio->shutdown = 1; + bio->init = 1; + bio->num = -1; + bio->ptr = NULL; + + return 1; +} + +static int bio_filter_destroy(BIO *bio) +{ + if (bio == NULL) { + return 0; + } + + /* nothing to free here. + * apache will destroy the bucket brigade for us + */ + return 1; +} + +static int bio_filter_out_read(BIO *bio, char *out, int outl) +{ + /* this is never called */ + return -1; +} + +static int bio_filter_out_write(BIO *bio, const char *in, int inl) +{ + bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)(bio->ptr); + apr_bucket *e; + + /* Abort early if the client has initiated a renegotiation. */ + if (outctx->filter_ctx->config->reneg_state == RENEG_ABORT) { + outctx->rc = APR_ECONNABORTED; + return -1; + } + + /* when handshaking we'll have a small number of bytes. + * max size SSL will pass us here is about 16k. + * (16413 bytes to be exact) + */ + BIO_clear_retry_flags(bio); + + /* Use a transient bucket for the output data - any downstream + * filter must setaside if necessary. */ + e = apr_bucket_transient_create(in, inl, outctx->bb->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(outctx->bb, e); + + if (bio_filter_out_pass(outctx) < 0) { + return -1; + } + + return inl; +} + +static long bio_filter_out_ctrl(BIO *bio, int cmd, long num, void *ptr) +{ + long ret = 1; + bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)(bio->ptr); + + switch (cmd) { + case BIO_CTRL_RESET: + case BIO_CTRL_EOF: + case BIO_C_SET_BUF_MEM_EOF_RETURN: + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, outctx->c, + "output bio: unhandled control %d", cmd); + ret = 0; + break; + case BIO_CTRL_WPENDING: + case BIO_CTRL_PENDING: + case BIO_CTRL_INFO: + ret = 0; + break; + case BIO_CTRL_GET_CLOSE: + ret = (long)bio->shutdown; + break; + case BIO_CTRL_SET_CLOSE: + bio->shutdown = (int)num; + break; + case BIO_CTRL_FLUSH: + ret = bio_filter_out_flush(bio); + break; + case BIO_CTRL_DUP: + ret = 1; + break; + /* N/A */ + case BIO_C_SET_BUF_MEM: + case BIO_C_GET_BUF_MEM_PTR: + /* we don't care */ + case BIO_CTRL_PUSH: + case BIO_CTRL_POP: + default: + ret = 0; + break; + } + + return ret; +} + +static int bio_filter_out_gets(BIO *bio, char *buf, int size) +{ + /* this is never called */ + return -1; +} + +static int bio_filter_out_puts(BIO *bio, const char *str) +{ + /* this is never called */ + return -1; +} + +static BIO_METHOD bio_filter_out_method = { + BIO_TYPE_MEM, + "APR output filter", + bio_filter_out_write, + bio_filter_out_read, /* read is never called */ + bio_filter_out_puts, /* puts is never called */ + bio_filter_out_gets, /* gets is never called */ + bio_filter_out_ctrl, + bio_filter_create, + bio_filter_destroy, + NULL +}; + +typedef struct { + int length; + char *value; +} char_buffer_t; + +typedef struct { + SSL *ssl; + BIO *bio_out; + ap_filter_t *f; + apr_status_t rc; + ap_input_mode_t mode; + apr_read_type_e block; + apr_bucket_brigade *bb; + char_buffer_t cbuf; + apr_pool_t *pool; + char buffer[AP_IOBUFSIZE]; + ssl_filter_ctx_t *filter_ctx; + int alpn_finished; /* 1 if ALPN has finished, 0 otherwise */ +} bio_filter_in_ctx_t; + +/* + * this char_buffer api might seem silly, but we don't need to copy + * any of this data and we need to remember the length. + */ + +/* Copy up to INL bytes from the char_buffer BUFFER into IN. Note + * that due to the strange way this API is designed/used, the + * char_buffer object is used to cache a segment of inctx->buffer, and + * then this function called to copy (part of) that segment to the + * beginning of inctx->buffer. So the segments to copy cannot be + * presumed to be non-overlapping, and memmove must be used. */ +static int char_buffer_read(char_buffer_t *buffer, char *in, int inl) +{ + if (!buffer->length) { + return 0; + } + + if (buffer->length > inl) { + /* we have have enough to fill the caller's buffer */ + memmove(in, buffer->value, inl); + buffer->value += inl; + buffer->length -= inl; + } + else { + /* swallow remainder of the buffer */ + memmove(in, buffer->value, buffer->length); + inl = buffer->length; + buffer->value = NULL; + buffer->length = 0; + } + + return inl; +} + +static int char_buffer_write(char_buffer_t *buffer, char *in, int inl) +{ + buffer->value = in; + buffer->length = inl; + return inl; +} + +/* This function will read from a brigade and discard the read buckets as it + * proceeds. It will read at most *len bytes. + */ +static apr_status_t brigade_consume(apr_bucket_brigade *bb, + apr_read_type_e block, + char *c, apr_size_t *len) +{ + apr_size_t actual = 0; + apr_status_t status = APR_SUCCESS; + + while (!APR_BRIGADE_EMPTY(bb)) { + apr_bucket *b = APR_BRIGADE_FIRST(bb); + const char *str; + apr_size_t str_len; + apr_size_t consume; + + /* Justin points out this is an http-ism that might + * not fit if brigade_consume is added to APR. Perhaps + * apr_bucket_read(eos_bucket) should return APR_EOF? + * Then this becomes mainline instead of a one-off. + */ + if (APR_BUCKET_IS_EOS(b)) { + status = APR_EOF; + break; + } + + /* The reason I'm not offering brigade_consume yet + * across to apr-util is that the following call + * illustrates how borked that API really is. For + * this sort of case (caller provided buffer) it + * would be much more trivial for apr_bucket_consume + * to do all the work that follows, based on the + * particular characteristics of the bucket we are + * consuming here. + */ + status = apr_bucket_read(b, &str, &str_len, block); + + if (status != APR_SUCCESS) { + if (APR_STATUS_IS_EOF(status)) { + /* This stream bucket was consumed */ + apr_bucket_delete(b); + continue; + } + break; + } + + if (str_len > 0) { + /* Do not block once some data has been consumed */ + block = APR_NONBLOCK_READ; + + /* Assure we don't overflow. */ + consume = (str_len + actual > *len) ? *len - actual : str_len; + + memcpy(c, str, consume); + + c += consume; + actual += consume; + + if (consume >= b->length) { + /* This physical bucket was consumed */ + apr_bucket_delete(b); + } + else { + /* Only part of this physical bucket was consumed */ + b->start += consume; + b->length -= consume; + } + } + else if (b->length == 0) { + apr_bucket_delete(b); + } + + /* This could probably be actual == *len, but be safe from stray + * photons. */ + if (actual >= *len) { + break; + } + } + + *len = actual; + return status; +} + +/* + * this is the function called by SSL_read() + */ +static int bio_filter_in_read(BIO *bio, char *in, int inlen) +{ + apr_size_t inl = inlen; + bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)(bio->ptr); + apr_read_type_e block = inctx->block; + + inctx->rc = APR_SUCCESS; + + /* OpenSSL catches this case, so should we. */ + if (!in) + return 0; + + /* Abort early if the client has initiated a renegotiation. */ + if (inctx->filter_ctx->config->reneg_state == RENEG_ABORT) { + inctx->rc = APR_ECONNABORTED; + return -1; + } + + /* In theory, OpenSSL should flush as necessary, but it is known + * not to do so correctly in some cases; see PR 46952. + * + * Historically, this flush call was performed only for an SSLv2 + * connection or for a proxy connection. Calling _out_flush + * should be very cheap in cases where it is unnecessary (and no + * output is buffered) so the performance impact of doing it + * unconditionally should be minimal. + */ + if (bio_filter_out_flush(inctx->bio_out) < 0) { + bio_filter_out_ctx_t *outctx = inctx->bio_out->ptr; + inctx->rc = outctx->rc; + return -1; + } + + BIO_clear_retry_flags(bio); + + if (!inctx->bb) { + inctx->rc = APR_EOF; + return -1; + } + + if (APR_BRIGADE_EMPTY(inctx->bb)) { + + inctx->rc = ap_get_brigade(inctx->f->next, inctx->bb, + AP_MODE_READBYTES, block, + inl); + + /* If the read returns EAGAIN or success with an empty + * brigade, return an error after setting the retry flag; + * SSL_read() will then return -1, and SSL_get_error() will + * indicate SSL_ERROR_WANT_READ. */ + if (APR_STATUS_IS_EAGAIN(inctx->rc) || APR_STATUS_IS_EINTR(inctx->rc) + || (inctx->rc == APR_SUCCESS && APR_BRIGADE_EMPTY(inctx->bb))) { + BIO_set_retry_read(bio); + return -1; + } + + if (inctx->rc != APR_SUCCESS) { + /* Unexpected errors discard the brigade */ + apr_brigade_cleanup(inctx->bb); + inctx->bb = NULL; + return -1; + } + } + + inctx->rc = brigade_consume(inctx->bb, block, in, &inl); + + if (inctx->rc == APR_SUCCESS) { + return (int)inl; + } + + if (APR_STATUS_IS_EAGAIN(inctx->rc) + || APR_STATUS_IS_EINTR(inctx->rc)) { + BIO_set_retry_read(bio); + return (int)inl; + } + + /* Unexpected errors and APR_EOF clean out the brigade. + * Subsequent calls will return APR_EOF. + */ + apr_brigade_cleanup(inctx->bb); + inctx->bb = NULL; + + if (APR_STATUS_IS_EOF(inctx->rc) && inl) { + /* Provide the results of this read pass, + * without resetting the BIO retry_read flag + */ + return (int)inl; + } + + return -1; +} + + +static BIO_METHOD bio_filter_in_method = { + BIO_TYPE_MEM, + "APR input filter", + NULL, /* write is never called */ + bio_filter_in_read, + NULL, /* puts is never called */ + NULL, /* gets is never called */ + NULL, /* ctrl is never called */ + bio_filter_create, + bio_filter_destroy, + NULL +}; + + +static apr_status_t ssl_io_input_read(bio_filter_in_ctx_t *inctx, + char *buf, + apr_size_t *len) +{ + apr_size_t wanted = *len; + apr_size_t bytes = 0; + int rc; + + *len = 0; + + /* If we have something leftover from last time, try that first. */ + if ((bytes = char_buffer_read(&inctx->cbuf, buf, wanted))) { + *len = bytes; + if (inctx->mode == AP_MODE_SPECULATIVE) { + /* We want to rollback this read. */ + if (inctx->cbuf.length > 0) { + inctx->cbuf.value -= bytes; + inctx->cbuf.length += bytes; + } else { + char_buffer_write(&inctx->cbuf, buf, (int)bytes); + } + return APR_SUCCESS; + } + /* This could probably be *len == wanted, but be safe from stray + * photons. + */ + if (*len >= wanted) { + return APR_SUCCESS; + } + if (inctx->mode == AP_MODE_GETLINE) { + if (memchr(buf, APR_ASCII_LF, *len)) { + return APR_SUCCESS; + } + } + else { + /* Down to a nonblock pattern as we have some data already + */ + inctx->block = APR_NONBLOCK_READ; + } + } + + while (1) { + + if (!inctx->filter_ctx->pssl) { + /* Ensure a non-zero error code is returned */ + if (inctx->rc == APR_SUCCESS) { + inctx->rc = APR_EGENERAL; + } + break; + } + + /* SSL_read may not read because we haven't taken enough data + * from the stack. This is where we want to consider all of + * the blocking and SPECULATIVE semantics + */ + rc = SSL_read(inctx->filter_ctx->pssl, buf + bytes, wanted - bytes); + + if (rc > 0) { + *len += rc; + if (inctx->mode == AP_MODE_SPECULATIVE) { + /* We want to rollback this read. */ + char_buffer_write(&inctx->cbuf, buf, rc); + } + return inctx->rc; + } + else if (rc == 0) { + /* If EAGAIN, we will loop given a blocking read, + * otherwise consider ourselves at EOF. + */ + if (APR_STATUS_IS_EAGAIN(inctx->rc) + || APR_STATUS_IS_EINTR(inctx->rc)) { + /* Already read something, return APR_SUCCESS instead. + * On win32 in particular, but perhaps on other kernels, + * a blocking call isn't 'always' blocking. + */ + if (*len > 0) { + inctx->rc = APR_SUCCESS; + break; + } + if (inctx->block == APR_NONBLOCK_READ) { + break; + } + } + else { + if (*len > 0) { + inctx->rc = APR_SUCCESS; + } + else { + inctx->rc = APR_EOF; + } + break; + } + } + else /* (rc < 0) */ { + int ssl_err = SSL_get_error(inctx->filter_ctx->pssl, rc); + conn_rec *c = (conn_rec*)SSL_get_app_data(inctx->filter_ctx->pssl); + + if (ssl_err == SSL_ERROR_WANT_READ) { + /* + * If OpenSSL wants to read more, and we were nonblocking, + * report as an EAGAIN. Otherwise loop, pulling more + * data from network filter. + * + * (This is usually the case when the client forces an SSL + * renegotiation which is handled implicitly by OpenSSL.) + */ + inctx->rc = APR_EAGAIN; + + if (*len > 0) { + inctx->rc = APR_SUCCESS; + break; + } + if (inctx->block == APR_NONBLOCK_READ) { + break; + } + continue; /* Blocking and nothing yet? Try again. */ + } + else if (ssl_err == SSL_ERROR_SYSCALL) { + if (APR_STATUS_IS_EAGAIN(inctx->rc) + || APR_STATUS_IS_EINTR(inctx->rc)) { + /* Already read something, return APR_SUCCESS instead. */ + if (*len > 0) { + inctx->rc = APR_SUCCESS; + break; + } + if (inctx->block == APR_NONBLOCK_READ) { + break; + } + continue; /* Blocking and nothing yet? Try again. */ + } + else { + ap_log_cerror(APLOG_MARK, APLOG_INFO, inctx->rc, c, APLOGNO(01991) + "SSL input filter read failed."); + } + } + else /* if (ssl_err == SSL_ERROR_SSL) */ { + /* + * Log SSL errors and any unexpected conditions. + */ + ap_log_cerror(APLOG_MARK, APLOG_INFO, inctx->rc, c, APLOGNO(01992) + "SSL library error %d reading data", ssl_err); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, mySrvFromConn(c)); + + } + if (inctx->rc == APR_SUCCESS) { + inctx->rc = APR_EGENERAL; + } + break; + } + } + return inctx->rc; +} + +/* Read a line of input from the SSL input layer into buffer BUF of + * length *LEN; updating *len to reflect the length of the line + * including the LF character. */ +static apr_status_t ssl_io_input_getline(bio_filter_in_ctx_t *inctx, + char *buf, + apr_size_t *len) +{ + const char *pos = NULL; + apr_status_t status; + apr_size_t tmplen = *len, buflen = *len, offset = 0; + + *len = 0; + + /* + * in most cases we get all the headers on the first SSL_read. + * however, in certain cases SSL_read will only get a partial + * chunk of the headers, so we try to read until LF is seen. + */ + + while (tmplen > 0) { + status = ssl_io_input_read(inctx, buf + offset, &tmplen); + + if (status != APR_SUCCESS) { + if (APR_STATUS_IS_EAGAIN(status) && (*len > 0)) { + /* Save the part of the line we already got */ + char_buffer_write(&inctx->cbuf, buf, *len); + } + return status; + } + + *len += tmplen; + + if ((pos = memchr(buf, APR_ASCII_LF, *len))) { + break; + } + + offset += tmplen; + tmplen = buflen - offset; + } + + if (pos) { + char *value; + int length; + apr_size_t bytes = pos - buf; + + bytes += 1; + value = buf + bytes; + length = *len - bytes; + + char_buffer_write(&inctx->cbuf, value, length); + + *len = bytes; + } + + return APR_SUCCESS; +} + + +static apr_status_t ssl_filter_write(ap_filter_t *f, + const char *data, + apr_size_t len) +{ + ssl_filter_ctx_t *filter_ctx = f->ctx; + bio_filter_out_ctx_t *outctx; + int res; + + /* write SSL */ + if (filter_ctx->pssl == NULL) { + return APR_EGENERAL; + } + + outctx = (bio_filter_out_ctx_t *)filter_ctx->pbioWrite->ptr; + res = SSL_write(filter_ctx->pssl, (unsigned char *)data, len); + + if (res < 0) { + int ssl_err = SSL_get_error(filter_ctx->pssl, res); + conn_rec *c = (conn_rec*)SSL_get_app_data(outctx->filter_ctx->pssl); + + if (ssl_err == SSL_ERROR_WANT_WRITE) { + /* + * If OpenSSL wants to write more, and we were nonblocking, + * report as an EAGAIN. Otherwise loop, pushing more + * data at the network filter. + * + * (This is usually the case when the client forces an SSL + * renegotiation which is handled implicitly by OpenSSL.) + */ + outctx->rc = APR_EAGAIN; + } + else if (ssl_err == SSL_ERROR_WANT_READ) { + /* + * If OpenSSL wants to read during write, and we were + * nonblocking, set the sense explicitly to read and + * report as an EAGAIN. + * + * (This is usually the case when the client forces an SSL + * renegotiation which is handled implicitly by OpenSSL.) + */ + outctx->c->cs->sense = CONN_SENSE_WANT_READ; + outctx->rc = APR_EAGAIN; + } + else if (ssl_err == SSL_ERROR_SYSCALL) { + ap_log_cerror(APLOG_MARK, APLOG_INFO, outctx->rc, c, APLOGNO(01993) + "SSL output filter write failed."); + } + else /* if (ssl_err == SSL_ERROR_SSL) */ { + /* + * Log SSL errors + */ + ap_log_cerror(APLOG_MARK, APLOG_INFO, outctx->rc, c, APLOGNO(01994) + "SSL library error %d writing data", ssl_err); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, mySrvFromConn(c)); + } + if (outctx->rc == APR_SUCCESS) { + outctx->rc = APR_EGENERAL; + } + } + else if ((apr_size_t)res != len) { + conn_rec *c = f->c; + char *reason = "reason unknown"; + + /* XXX: probably a better way to determine this */ + if (SSL_total_renegotiations(filter_ctx->pssl)) { + reason = "likely due to failed renegotiation"; + } + + ap_log_cerror(APLOG_MARK, APLOG_INFO, outctx->rc, c, APLOGNO(01995) + "failed to write %" APR_SSIZE_T_FMT + " of %" APR_SIZE_T_FMT " bytes (%s)", + len - (apr_size_t)res, len, reason); + + outctx->rc = APR_EGENERAL; + } + return outctx->rc; +} + +/* Just use a simple request. Any request will work for this, because + * we use a flag in the conn_rec->conn_vector now. The fake request just + * gets the request back to the Apache core so that a response can be sent. + * Since we use an HTTP/1.x request, we also have to inject the empty line + * that terminates the headers, or the core will read more data from the + * socket. + */ +#define HTTP_ON_HTTPS_PORT \ + "GET / HTTP/1.0" CRLF + +#define HTTP_ON_HTTPS_PORT_BUCKET(alloc) \ + apr_bucket_immortal_create(HTTP_ON_HTTPS_PORT, \ + sizeof(HTTP_ON_HTTPS_PORT) - 1, \ + alloc) + +/* Custom apr_status_t error code, used when a plain HTTP request is + * recevied on an SSL port. */ +#define MODSSL_ERROR_HTTP_ON_HTTPS (APR_OS_START_USERERR + 0) + +/* Custom apr_status_t error code, used when the proxy cannot + * establish an outgoing SSL connection. */ +#define MODSSL_ERROR_BAD_GATEWAY (APR_OS_START_USERERR + 1) + +static void ssl_io_filter_disable(SSLConnRec *sslconn, ap_filter_t *f) +{ + bio_filter_in_ctx_t *inctx = f->ctx; + SSL_free(inctx->ssl); + sslconn->ssl = NULL; + inctx->ssl = NULL; + inctx->filter_ctx->pssl = NULL; +} + +static apr_status_t ssl_io_filter_error(ap_filter_t *f, + apr_bucket_brigade *bb, + apr_status_t status) +{ + SSLConnRec *sslconn = myConnConfig(f->c); + apr_bucket *bucket; + int send_eos = 1; + + switch (status) { + case MODSSL_ERROR_HTTP_ON_HTTPS: + /* log the situation */ + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, f->c, APLOGNO(01996) + "SSL handshake failed: HTTP spoken on HTTPS port; " + "trying to send HTML error page"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, sslconn->server); + + sslconn->non_ssl_request = NON_SSL_SEND_HDR_SEP; + ssl_io_filter_disable(sslconn, f); + + /* fake the request line */ + bucket = HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc); + send_eos = 0; + break; + + case MODSSL_ERROR_BAD_GATEWAY: + bucket = ap_bucket_error_create(HTTP_BAD_REQUEST, NULL, + f->c->pool, + f->c->bucket_alloc); + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, f->c, APLOGNO(01997) + "SSL handshake failed: sending 502"); + break; + + default: + return status; + } + + APR_BRIGADE_INSERT_TAIL(bb, bucket); + if (send_eos) { + bucket = apr_bucket_eos_create(f->c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, bucket); + } + return APR_SUCCESS; +} + +static const char ssl_io_filter[] = "SSL/TLS Filter"; +static const char ssl_io_buffer[] = "SSL/TLS Buffer"; +static const char ssl_io_coalesce[] = "SSL/TLS Coalescing Filter"; + +/* + * Close the SSL part of the socket connection + * (called immediately _before_ the socket is closed) + * or called with + */ +static void ssl_filter_io_shutdown(ssl_filter_ctx_t *filter_ctx, + conn_rec *c, int abortive) +{ + SSL *ssl = filter_ctx->pssl; + const char *type = ""; + SSLConnRec *sslconn = myConnConfig(c); + int shutdown_type; + int loglevel = APLOG_DEBUG; + const char *logno; + + if (!ssl) { + return; + } + + /* + * Now close the SSL layer of the connection. We've to take + * the TLSv1 standard into account here: + * + * | 7.2.1. Closure alerts + * | + * | The client and the server must share knowledge that the connection is + * | ending in order to avoid a truncation attack. Either party may + * | initiate the exchange of closing messages. + * | + * | close_notify + * | This message notifies the recipient that the sender will not send + * | any more messages on this connection. The session becomes + * | unresumable if any connection is terminated without proper + * | close_notify messages with level equal to warning. + * | + * | Either party may initiate a close by sending a close_notify alert. + * | Any data received after a closure alert is ignored. + * | + * | Each party is required to send a close_notify alert before closing + * | the write side of the connection. It is required that the other party + * | respond with a close_notify alert of its own and close down the + * | connection immediately, discarding any pending writes. It is not + * | required for the initiator of the close to wait for the responding + * | close_notify alert before closing the read side of the connection. + * + * This means we've to send a close notify message, but haven't to wait + * for the close notify of the client. Actually we cannot wait for the + * close notify of the client because some clients (including Netscape + * 4.x) don't send one, so we would hang. + */ + + /* + * exchange close notify messages, but allow the user + * to force the type of handshake via SetEnvIf directive + */ + if (abortive) { + shutdown_type = SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN; + type = "abortive"; + logno = APLOGNO(01998); + loglevel = APLOG_INFO; + } + else switch (sslconn->shutdown_type) { + case SSL_SHUTDOWN_TYPE_UNCLEAN: + /* perform no close notify handshake at all + (violates the SSL/TLS standard!) */ + shutdown_type = SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN; + type = "unclean"; + logno = APLOGNO(01999); + break; + case SSL_SHUTDOWN_TYPE_ACCURATE: + /* send close notify and wait for clients close notify + (standard compliant, but usually causes connection hangs) */ + shutdown_type = 0; + type = "accurate"; + logno = APLOGNO(02000); + break; + default: + /* + * case SSL_SHUTDOWN_TYPE_UNSET: + * case SSL_SHUTDOWN_TYPE_STANDARD: + */ + /* send close notify, but don't wait for clients close notify + (standard compliant and safe, so it's the DEFAULT!) */ + shutdown_type = SSL_RECEIVED_SHUTDOWN; + type = "standard"; + logno = APLOGNO(02001); + break; + } + + SSL_set_shutdown(ssl, shutdown_type); + SSL_smart_shutdown(ssl); + + /* and finally log the fact that we've closed the connection */ + if (APLOG_CS_IS_LEVEL(c, mySrvFromConn(c), loglevel)) { + ap_log_cserror(APLOG_MARK, loglevel, 0, c, mySrvFromConn(c), + "%sConnection closed to child %ld with %s shutdown " + "(server %s)", + logno, c->id, type, + ssl_util_vhostid(c->pool, mySrvFromConn(c))); + } + + /* deallocate the SSL connection */ + if (sslconn->client_cert) { + X509_free(sslconn->client_cert); + sslconn->client_cert = NULL; + } + SSL_free(ssl); + sslconn->ssl = NULL; + filter_ctx->pssl = NULL; /* so filters know we've been shutdown */ + + if (abortive) { + /* prevent any further I/O */ + c->aborted = 1; + } +} + +static apr_status_t ssl_io_filter_cleanup(void *data) +{ + ssl_filter_ctx_t *filter_ctx = data; + + if (filter_ctx->pssl) { + conn_rec *c = (conn_rec *)SSL_get_app_data(filter_ctx->pssl); + SSLConnRec *sslconn = myConnConfig(c); + + SSL_free(filter_ctx->pssl); + sslconn->ssl = filter_ctx->pssl = NULL; + } + + return APR_SUCCESS; +} + +/* + * The hook is NOT registered with ap_hook_process_connection. Instead, it is + * called manually from the churn () before it tries to read any data. + * There is some problem if I accept conn_rec *. Still investigating.. + * Adv. if conn_rec * can be accepted is we can hook this function using the + * ap_hook_process_connection hook. + */ + +/* Perform the SSL handshake (whether in client or server mode), if + * necessary, for the given connection. */ +static apr_status_t ssl_io_filter_handshake(ssl_filter_ctx_t *filter_ctx) +{ + conn_rec *c = (conn_rec *)SSL_get_app_data(filter_ctx->pssl); + SSLConnRec *sslconn = myConnConfig(c); + SSLSrvConfigRec *sc; + X509 *cert; + int n; + int ssl_err; + long verify_result; + server_rec *server; + + if (SSL_is_init_finished(filter_ctx->pssl)) { + return APR_SUCCESS; + } + + server = sslconn->server; + if (sslconn->is_proxy) { +#ifdef HAVE_TLSEXT + apr_ipsubnet_t *ip; +#endif + const char *hostname_note = apr_table_get(c->notes, + "proxy-request-hostname"); + BOOL proxy_ssl_check_peer_ok = TRUE; + sc = mySrvConfig(server); + +#ifdef HAVE_TLSEXT + /* + * Enable SNI for backend requests. Make sure we don't do it for + * pure SSLv3 connections, and also prevent IP addresses + * from being included in the SNI extension. (OpenSSL would simply + * pass them on, but RFC 6066 is quite clear on this: "Literal + * IPv4 and IPv6 addresses are not permitted".) + */ + if (hostname_note && + sc->proxy->protocol != SSL_PROTOCOL_SSLV3 && + apr_ipsubnet_create(&ip, hostname_note, NULL, + c->pool) != APR_SUCCESS) { + if (SSL_set_tlsext_host_name(filter_ctx->pssl, hostname_note)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "SNI extension for SSL Proxy request set to '%s'", + hostname_note); + } else { + ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, c, APLOGNO(02002) + "Failed to set SNI extension for SSL Proxy " + "request to '%s'", hostname_note); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_WARNING, server); + } + } +#endif + + if ((n = SSL_connect(filter_ctx->pssl)) <= 0) { + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02003) + "SSL Proxy connect failed"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, server); + /* ensure that the SSL structures etc are freed, etc: */ + ssl_filter_io_shutdown(filter_ctx, c, 1); + apr_table_setn(c->notes, "SSL_connect_rv", "err"); + return MODSSL_ERROR_BAD_GATEWAY; + } + + cert = SSL_get_peer_certificate(filter_ctx->pssl); + + if (sc->proxy_ssl_check_peer_expire != SSL_ENABLED_FALSE) { + if (!cert + || (X509_cmp_current_time( + X509_get_notBefore(cert)) >= 0) + || (X509_cmp_current_time( + X509_get_notAfter(cert)) <= 0)) { + proxy_ssl_check_peer_ok = FALSE; + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02004) + "SSL Proxy: Peer certificate is expired"); + } + } + if ((sc->proxy_ssl_check_peer_name != SSL_ENABLED_FALSE) && + hostname_note) { + apr_table_unset(c->notes, "proxy-request-hostname"); + if (!cert + || SSL_X509_match_name(c->pool, cert, hostname_note, + TRUE, server) == FALSE) { + proxy_ssl_check_peer_ok = FALSE; + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02411) + "SSL Proxy: Peer certificate does not match " + "for hostname %s", hostname_note); + } + } + else if ((sc->proxy_ssl_check_peer_cn != SSL_ENABLED_FALSE) && + hostname_note) { + const char *hostname; + int match = 0; + + hostname = ssl_var_lookup(NULL, server, c, NULL, + "SSL_CLIENT_S_DN_CN"); + apr_table_unset(c->notes, "proxy-request-hostname"); + + /* Do string match or simplest wildcard match if that + * fails. */ + match = strcasecmp(hostname, hostname_note) == 0; + if (!match && strncmp(hostname, "*.", 2) == 0) { + const char *p = ap_strchr_c(hostname_note, '.'); + + match = p && strcasecmp(p, hostname + 1) == 0; + } + + if (!match) { + proxy_ssl_check_peer_ok = FALSE; + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02005) + "SSL Proxy: Peer certificate CN mismatch:" + " Certificate CN: %s Requested hostname: %s", + hostname, hostname_note); + } + } + + if (cert) { + X509_free(cert); + } + + if (proxy_ssl_check_peer_ok != TRUE) { + /* ensure that the SSL structures etc are freed, etc: */ + ssl_filter_io_shutdown(filter_ctx, c, 1); + apr_table_setn(c->notes, "SSL_connect_rv", "err"); + return HTTP_BAD_GATEWAY; + } + + apr_table_setn(c->notes, "SSL_connect_rv", "ok"); + return APR_SUCCESS; + } + + if ((n = SSL_accept(filter_ctx->pssl)) <= 0) { + bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *) + (filter_ctx->pbioRead->ptr); + bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *) + (filter_ctx->pbioWrite->ptr); + apr_status_t rc = inctx->rc ? inctx->rc : outctx->rc ; + ssl_err = SSL_get_error(filter_ctx->pssl, n); + + if (ssl_err == SSL_ERROR_ZERO_RETURN) { + /* + * The case where the connection was closed before any data + * was transferred. That's not a real error and can occur + * sporadically with some clients. + */ + ap_log_cerror(APLOG_MARK, APLOG_INFO, rc, c, APLOGNO(02006) + "SSL handshake stopped: connection was closed"); + } + else if (ssl_err == SSL_ERROR_WANT_READ) { + /* + * This is in addition to what was present earlier. It is + * borrowed from openssl_state_machine.c [mod_tls]. + * TBD. + */ + outctx->rc = APR_EAGAIN; + return APR_EAGAIN; + } + else if (ERR_GET_LIB(ERR_peek_error()) == ERR_LIB_SSL && + ERR_GET_REASON(ERR_peek_error()) == SSL_R_HTTP_REQUEST) { + /* + * The case where OpenSSL has recognized a HTTP request: + * This means the client speaks plain HTTP on our HTTPS port. + * ssl_io_filter_error will disable the ssl filters when it + * sees this status code. + */ + return MODSSL_ERROR_HTTP_ON_HTTPS; + } + else if (ssl_err == SSL_ERROR_SYSCALL) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rc, c, APLOGNO(02007) + "SSL handshake interrupted by system " + "[Hint: Stop button pressed in browser?!]"); + } + else /* if (ssl_err == SSL_ERROR_SSL) */ { + /* + * Log SSL errors and any unexpected conditions. + */ + ap_log_cerror(APLOG_MARK, APLOG_INFO, rc, c, APLOGNO(02008) + "SSL library error %d in handshake " + "(server %s)", ssl_err, + ssl_util_vhostid(c->pool, server)); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, server); + + } + if (inctx->rc == APR_SUCCESS) { + inctx->rc = APR_EGENERAL; + } + + ssl_filter_io_shutdown(filter_ctx, c, 1); + return inctx->rc; + } + sc = mySrvConfig(sslconn->server); + + /* + * Check for failed client authentication + */ + verify_result = SSL_get_verify_result(filter_ctx->pssl); + + if ((verify_result != X509_V_OK) || + sslconn->verify_error) + { + if (ssl_verify_error_is_optional(verify_result) && + (sc->server->auth.verify_mode == SSL_CVERIFY_OPTIONAL_NO_CA)) + { + /* leaving this log message as an error for the moment, + * according to the mod_ssl docs: + * "level optional_no_ca is actually against the idea + * of authentication (but can be used to establish + * SSL test pages, etc.)" + * optional_no_ca doesn't appear to work as advertised + * in 1.x + */ + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02009) + "SSL client authentication failed, " + "accepting certificate based on " + "\"SSLVerifyClient optional_no_ca\" " + "configuration"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, server); + } + else { + const char *error = sslconn->verify_error ? + sslconn->verify_error : + X509_verify_cert_error_string(verify_result); + + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02010) + "SSL client authentication failed: %s", + error ? error : "unknown"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, server); + + ssl_filter_io_shutdown(filter_ctx, c, 1); + return APR_ECONNABORTED; + } + } + + /* + * Remember the peer certificate's DN + */ + if ((cert = SSL_get_peer_certificate(filter_ctx->pssl))) { + if (sslconn->client_cert) { + X509_free(sslconn->client_cert); + } + sslconn->client_cert = cert; + sslconn->client_dn = NULL; + } + + /* + * Make really sure that when a peer certificate + * is required we really got one... (be paranoid) + */ + if ((sc->server->auth.verify_mode == SSL_CVERIFY_REQUIRE) && + !sslconn->client_cert) + { + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02011) + "No acceptable peer certificate available"); + + ssl_filter_io_shutdown(filter_ctx, c, 1); + return APR_ECONNABORTED; + } + + return APR_SUCCESS; +} + +static apr_status_t ssl_io_filter_input(ap_filter_t *f, + apr_bucket_brigade *bb, + ap_input_mode_t mode, + apr_read_type_e block, + apr_off_t readbytes) +{ + apr_status_t status; + bio_filter_in_ctx_t *inctx = f->ctx; + const char *start = inctx->buffer; /* start of block to return */ + apr_size_t len = sizeof(inctx->buffer); /* length of block to return */ + int is_init = (mode == AP_MODE_INIT); + + if (f->c->aborted) { + /* XXX: Ok, if we aborted, we ARE at the EOS. We also have + * aborted. This 'double protection' is probably redundant, + * but also effective against just about anything. + */ + apr_bucket *bucket = apr_bucket_eos_create(f->c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, bucket); + return APR_ECONNABORTED; + } + + if (!inctx->ssl) { + SSLConnRec *sslconn = myConnConfig(f->c); + if (sslconn->non_ssl_request == NON_SSL_SEND_HDR_SEP) { + apr_bucket *bucket = apr_bucket_immortal_create(CRLF, 2, f->c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, bucket); + sslconn->non_ssl_request = NON_SSL_SET_ERROR_MSG; + return APR_SUCCESS; + } + return ap_get_brigade(f->next, bb, mode, block, readbytes); + } + + /* XXX: we don't currently support anything other than these modes. */ + if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE && + mode != AP_MODE_SPECULATIVE && mode != AP_MODE_INIT) { + return APR_ENOTIMPL; + } + + inctx->mode = mode; + inctx->block = block; + + /* XXX: we could actually move ssl_io_filter_handshake to an + * ap_hook_process_connection but would still need to call it for + * AP_MODE_INIT for protocols that may upgrade the connection + * rather than have SSLEngine On configured. + */ + if ((status = ssl_io_filter_handshake(inctx->filter_ctx)) != APR_SUCCESS) { + return ssl_io_filter_error(f, bb, status); + } + + if (is_init) { + /* protocol module needs to handshake before sending + * data to client (e.g. NNTP or FTP) + */ + return APR_SUCCESS; + } + + if (inctx->mode == AP_MODE_READBYTES || + inctx->mode == AP_MODE_SPECULATIVE) { + /* Protected from truncation, readbytes < MAX_SIZE_T + * FIXME: No, it's *not* protected. -- jre */ + if (readbytes < len) { + len = (apr_size_t)readbytes; + } + status = ssl_io_input_read(inctx, inctx->buffer, &len); + } + else if (inctx->mode == AP_MODE_GETLINE) { + const char *pos; + + /* Satisfy the read directly out of the buffer if possible; + * invoking ssl_io_input_getline will mean the entire buffer + * is copied once (unnecessarily) for each GETLINE call. */ + if (inctx->cbuf.length + && (pos = memchr(inctx->cbuf.value, APR_ASCII_LF, + inctx->cbuf.length)) != NULL) { + start = inctx->cbuf.value; + len = 1 + pos - start; /* +1 to include LF */ + /* Buffer contents now consumed. */ + inctx->cbuf.value += len; + inctx->cbuf.length -= len; + status = APR_SUCCESS; + } + else { + /* Otherwise fall back to the hard way. */ + status = ssl_io_input_getline(inctx, inctx->buffer, &len); + } + } + else { + /* We have no idea what you are talking about, so return an error. */ + status = APR_ENOTIMPL; + } + + /* It is possible for mod_ssl's BIO to be used outside of the + * direct control of mod_ssl's input or output filter -- notably, + * when mod_ssl initiates a renegotiation. Switching the BIO mode + * back to "blocking" here ensures such operations don't fail with + * SSL_ERROR_WANT_READ. */ + inctx->block = APR_BLOCK_READ; + + /* Handle custom errors. */ + if (status != APR_SUCCESS) { + return ssl_io_filter_error(f, bb, status); + } + + /* Create a transient bucket out of the decrypted data. */ + if (len > 0) { + apr_bucket *bucket = + apr_bucket_transient_create(start, len, f->c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, bucket); + } + +#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) + /* By this point, Application-Layer Protocol Negotiation (ALPN) should be + * completed (if our version of OpenSSL supports it). If we haven't already, + * find out which protocol was decided upon and inform other modules + * by calling alpn_proto_negotiated_hook. + */ + if (!inctx->alpn_finished) { + SSLConnRec *sslconn = myConnConfig(f->c); + const unsigned char *next_proto = NULL; + unsigned next_proto_len = 0; + int n; + + if (sslconn->alpn_negofns) { + #ifdef HAVE_TLS_ALPN + SSL_get0_alpn_selected(inctx->ssl, &next_proto, &next_proto_len); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, f->c, + APLOGNO(02306) "SSL ALPN negotiated protocol: '%*s'", + next_proto_len, (const char*)next_proto); + #else + SSL_get0_next_proto_negotiated( + inctx->ssl, &next_proto, &next_proto_len); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, f->c, + APLOGNO(02306) "SSL NPN negotiated protocol: '%*s'", + next_proto_len, (const char*)next_proto); + #endif + for (n = 0; n < sslconn->alpn_negofns->nelts; n++) { + ssl_alpn_proto_negotiated fn = + APR_ARRAY_IDX(sslconn->alpn_negofns, n, ssl_alpn_proto_negotiated); + + if (fn(f->c, (const char *)next_proto, next_proto_len) == DONE) + break; + } + } + inctx->alpn_finished = 1; + } +#endif + + return APR_SUCCESS; +} + + +/* ssl_io_filter_output() produces one SSL/TLS message per bucket + * passed down the output filter stack. This results in a high + * overhead (network packets) for any output comprising many small + * buckets. SSI page applied through the HTTP chunk filter, for + * example, may produce many brigades containing small buckets - + * [chunk-size CRLF] [chunk-data] [CRLF]. + * + * The coalescing filter merges many small buckets into larger buckets + * where possible, allowing the SSL I/O output filter to handle them + * more efficiently. */ + +#define COALESCE_BYTES (2048) + +struct coalesce_ctx { + char buffer[COALESCE_BYTES]; + apr_size_t bytes; /* number of bytes of buffer used. */ +}; + +static apr_status_t ssl_io_filter_coalesce(ap_filter_t *f, + apr_bucket_brigade *bb) +{ + apr_bucket *e, *last = NULL; + apr_size_t bytes = 0; + struct coalesce_ctx *ctx = f->ctx; + unsigned count = 0; + + /* The brigade consists of zero-or-more small data buckets which + * can be coalesced (the prefix), followed by the remainder of the + * brigade. + * + * Find the last bucket - if any - of that prefix. count gives + * the number of buckets in the prefix. The "prefix" must contain + * only data buckets with known length, and must be of a total + * size which fits into the buffer. + * + * N.B.: The process here could be repeated throughout the brigade + * (coalesce any run of consecutive data buckets) but this would + * add significant complexity, particularly to memory + * management. */ + for (e = APR_BRIGADE_FIRST(bb); + e != APR_BRIGADE_SENTINEL(bb) + && !APR_BUCKET_IS_METADATA(e) + && e->length != (apr_size_t)-1 + && e->length < COALESCE_BYTES + && (bytes + e->length) < COALESCE_BYTES + && (ctx == NULL + || bytes + ctx->bytes + e->length < COALESCE_BYTES); + e = APR_BUCKET_NEXT(e)) { + last = e; + if (e->length) count++; /* don't count zero-length buckets */ + bytes += e->length; + } + + /* Coalesce the prefix, if: + * a) more than one bucket is found to coalesce, or + * b) the brigade contains only a single data bucket, or + * c) + */ + if (bytes > 0 + && (count > 1 + || (count == 1 && APR_BUCKET_NEXT(last) == APR_BRIGADE_SENTINEL(bb)))) { + /* If coalescing some bytes, ensure a context has been + * created. */ + if (!ctx) { + f->ctx = ctx = apr_palloc(f->c->pool, sizeof *ctx); + ctx->bytes = 0; + } + + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, f->c, + "coalesce: have %" APR_SIZE_T_FMT " bytes, " + "adding %" APR_SIZE_T_FMT " more", ctx->bytes, bytes); + + /* Iterate through the prefix segment. For non-fatal errors + * in this loop it is safe to break out and fall back to the + * normal path of sending the buffer + remaining buckets in + * brigade. */ + e = APR_BRIGADE_FIRST(bb); + while (e != last) { + apr_size_t len; + const char *data; + apr_bucket *next; + + if (APR_BUCKET_IS_METADATA(e) + || e->length == (apr_size_t)-1) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, f->c, APLOGNO(02012) + "unexpected bucket type during coalesce"); + break; /* non-fatal error; break out */ + } + + if (e->length) { + apr_status_t rv; + + /* A blocking read should be fine here for a + * known-length data bucket, rather than the usual + * non-block/flush/block. */ + rv = apr_bucket_read(e, &data, &len, APR_BLOCK_READ); + if (rv) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, f->c, APLOGNO(02013) + "coalesce failed to read from data bucket"); + return AP_FILTER_ERROR; + } + + /* Be paranoid. */ + if (len > sizeof ctx->buffer + || (len + ctx->bytes > sizeof ctx->buffer)) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, f->c, APLOGNO(02014) + "unexpected coalesced bucket data length"); + break; /* non-fatal error; break out */ + } + + memcpy(ctx->buffer + ctx->bytes, data, len); + ctx->bytes += len; + } + + next = APR_BUCKET_NEXT(e); + apr_bucket_delete(e); + e = next; + } + } + + if (APR_BRIGADE_EMPTY(bb)) { + /* If the brigade is now empty, our work here is done. */ + return APR_SUCCESS; + } + + /* If anything remains in the brigade, it must now be passed down + * the filter stack, first prepending anything that has been + * coalesced. */ + if (ctx && ctx->bytes) { + apr_bucket *e; + + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, f->c, + "coalesce: passing on %" APR_SIZE_T_FMT " bytes", ctx->bytes); + + e = apr_bucket_transient_create(ctx->buffer, ctx->bytes, bb->bucket_alloc); + APR_BRIGADE_INSERT_HEAD(bb, e); + ctx->bytes = 0; /* buffer now emptied. */ + } + + return ap_pass_brigade(f->next, bb); +} + +static apr_status_t ssl_io_filter_output(ap_filter_t *f, + apr_bucket_brigade *bb) +{ + apr_status_t status = APR_SUCCESS; + ssl_filter_ctx_t *filter_ctx = f->ctx; + bio_filter_in_ctx_t *inctx; + bio_filter_out_ctx_t *outctx; + apr_read_type_e rblock = APR_NONBLOCK_READ; + + if (f->c->aborted) { + apr_brigade_cleanup(bb); + return APR_ECONNABORTED; + } + + if (!filter_ctx->pssl) { + /* ssl_filter_io_shutdown was called */ + return ap_pass_brigade(f->next, bb); + } + + inctx = (bio_filter_in_ctx_t *)filter_ctx->pbioRead->ptr; + outctx = (bio_filter_out_ctx_t *)filter_ctx->pbioWrite->ptr; + + /* When we are the writer, we must initialize the inctx + * mode so that we block for any required ssl input, because + * output filtering is always nonblocking. + */ + inctx->mode = AP_MODE_READBYTES; + inctx->block = APR_BLOCK_READ; + + if ((status = ssl_io_filter_handshake(filter_ctx)) != APR_SUCCESS) { + return ssl_io_filter_error(f, bb, status); + } + + while (!APR_BRIGADE_EMPTY(bb)) { + apr_bucket *bucket = APR_BRIGADE_FIRST(bb); + + /* If it is a flush or EOS, we need to pass this down. + * These types do not require translation by OpenSSL. + */ + if (APR_BUCKET_IS_EOS(bucket) || APR_BUCKET_IS_FLUSH(bucket)) { + if (bio_filter_out_flush(filter_ctx->pbioWrite) < 0) { + status = outctx->rc; + break; + } + + if (APR_BUCKET_IS_EOS(bucket)) { + /* + * By definition, nothing can come after EOS. + * which also means we can pass the rest of this brigade + * without creating a new one since it only contains the + * EOS bucket. + */ + + if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { + return status; + } + break; + } + else { + /* bio_filter_out_flush() already passed down a flush bucket + * if there was any data to be flushed. + */ + apr_bucket_delete(bucket); + } + } + else if (AP_BUCKET_IS_EOC(bucket)) { + /* The EOC bucket indicates connection closure, so SSL + * shutdown must now be performed. */ + ssl_filter_io_shutdown(filter_ctx, f->c, 0); + if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { + return status; + } + break; + } + else { + /* filter output */ + const char *data; + apr_size_t len; + + status = apr_bucket_read(bucket, &data, &len, rblock); + + if (APR_STATUS_IS_EAGAIN(status)) { + /* No data available: flush... */ + if (bio_filter_out_flush(filter_ctx->pbioWrite) < 0) { + status = outctx->rc; + break; + } + rblock = APR_BLOCK_READ; + continue; /* and try again with a blocking read. */ + } + + rblock = APR_NONBLOCK_READ; + + if (!APR_STATUS_IS_EOF(status) && (status != APR_SUCCESS)) { + break; + } + + status = ssl_filter_write(f, data, len); + apr_bucket_delete(bucket); + + if (status != APR_SUCCESS) { + break; + } + } + } + + return status; +} + +struct modssl_buffer_ctx { + apr_bucket_brigade *bb; +}; + +int ssl_io_buffer_fill(request_rec *r, apr_size_t maxlen) +{ + conn_rec *c = r->connection; + struct modssl_buffer_ctx *ctx; + apr_bucket_brigade *tempb; + apr_off_t total = 0; /* total length buffered */ + int eos = 0; /* non-zero once EOS is seen */ + + /* Create the context which will be passed to the input filter; + * containing a setaside pool and a brigade which constrain the + * lifetime of the buffered data. */ + ctx = apr_palloc(r->pool, sizeof *ctx); + ctx->bb = apr_brigade_create(r->pool, c->bucket_alloc); + + /* ... and a temporary brigade. */ + tempb = apr_brigade_create(r->pool, c->bucket_alloc); + + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, c, "filling buffer, max size " + "%" APR_SIZE_T_FMT " bytes", maxlen); + + do { + apr_status_t rv; + apr_bucket *e, *next; + + /* The request body is read from the protocol-level input + * filters; the buffering filter will reinject it from that + * level, allowing content/resource filters to run later, if + * necessary. */ + + rv = ap_get_brigade(r->proto_input_filters, tempb, AP_MODE_READBYTES, + APR_BLOCK_READ, 8192); + if (rv) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(02015) + "could not read request body for SSL buffer"); + return HTTP_INTERNAL_SERVER_ERROR; + } + + /* Iterate through the returned brigade: setaside each bucket + * into the context's pool and move it into the brigade. */ + for (e = APR_BRIGADE_FIRST(tempb); + e != APR_BRIGADE_SENTINEL(tempb) && !eos; e = next) { + const char *data; + apr_size_t len; + + next = APR_BUCKET_NEXT(e); + + if (APR_BUCKET_IS_EOS(e)) { + eos = 1; + } else if (!APR_BUCKET_IS_METADATA(e)) { + rv = apr_bucket_read(e, &data, &len, APR_BLOCK_READ); + if (rv != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(02016) + "could not read bucket for SSL buffer"); + return HTTP_INTERNAL_SERVER_ERROR; + } + total += len; + } + + rv = apr_bucket_setaside(e, r->pool); + if (rv != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(02017) + "could not setaside bucket for SSL buffer"); + return HTTP_INTERNAL_SERVER_ERROR; + } + + APR_BUCKET_REMOVE(e); + APR_BRIGADE_INSERT_TAIL(ctx->bb, e); + } + + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, c, + "total of %" APR_OFF_T_FMT " bytes in buffer, eos=%d", + total, eos); + + /* Fail if this exceeds the maximum buffer size. */ + if (total > maxlen) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02018) + "request body exceeds maximum size (%" APR_SIZE_T_FMT + ") for SSL buffer", maxlen); + return HTTP_REQUEST_ENTITY_TOO_LARGE; + } + + } while (!eos); + + apr_brigade_destroy(tempb); + + /* After consuming all protocol-level input, remove all protocol-level + * filters. It should strictly only be necessary to remove filters + * at exactly ftype == AP_FTYPE_PROTOCOL, since this filter will + * precede all > AP_FTYPE_PROTOCOL anyway. */ + while (r->proto_input_filters->frec->ftype < AP_FTYPE_CONNECTION) { + ap_remove_input_filter(r->proto_input_filters); + } + + /* Insert the filter which will supply the buffered content. */ + ap_add_input_filter(ssl_io_buffer, ctx, r, c); + + return 0; +} + +/* This input filter supplies the buffered request body to the caller + * from the brigade stored in f->ctx. Note that the placement of this + * filter in the filter stack is important; it must be the first + * r->proto_input_filter; lower-typed filters will not be preserved + * across internal redirects (see PR 43738). */ +static apr_status_t ssl_io_filter_buffer(ap_filter_t *f, + apr_bucket_brigade *bb, + ap_input_mode_t mode, + apr_read_type_e block, + apr_off_t bytes) +{ + struct modssl_buffer_ctx *ctx = f->ctx; + apr_status_t rv; + + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, f->c, + "read from buffered SSL brigade, mode %d, " + "%" APR_OFF_T_FMT " bytes", + mode, bytes); + + if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE) { + return APR_ENOTIMPL; + } + + if (APR_BRIGADE_EMPTY(ctx->bb)) { + /* Suprisingly (and perhaps, wrongly), the request body can be + * pulled from the input filter stack more than once; a + * handler may read it, and ap_discard_request_body() will + * attempt to do so again after *every* request. So input + * filters must be prepared to give up an EOS if invoked after + * initially reading the request. The HTTP_IN filter does this + * with its ->eos_sent flag. */ + + APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(f->c->bucket_alloc)); + return APR_SUCCESS; + } + + if (mode == AP_MODE_READBYTES) { + apr_bucket *e; + + /* Partition the buffered brigade. */ + rv = apr_brigade_partition(ctx->bb, bytes, &e); + if (rv && rv != APR_INCOMPLETE) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, f->c, APLOGNO(02019) + "could not partition buffered SSL brigade"); + ap_remove_input_filter(f); + return rv; + } + + /* If the buffered brigade contains less then the requested + * length, just pass it all back. */ + if (rv == APR_INCOMPLETE) { + APR_BRIGADE_CONCAT(bb, ctx->bb); + } else { + apr_bucket *d = APR_BRIGADE_FIRST(ctx->bb); + + e = APR_BUCKET_PREV(e); + + /* Unsplice the partitioned segment and move it into the + * passed-in brigade; no convenient way to do this with + * the APR_BRIGADE_* macros. */ + APR_RING_UNSPLICE(d, e, link); + APR_RING_SPLICE_HEAD(&bb->list, d, e, apr_bucket, link); + + APR_BRIGADE_CHECK_CONSISTENCY(bb); + APR_BRIGADE_CHECK_CONSISTENCY(ctx->bb); + } + } + else { + /* Split a line into the passed-in brigade. */ + rv = apr_brigade_split_line(bb, ctx->bb, block, bytes); + + if (rv) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, f->c, APLOGNO(02020) + "could not split line from buffered SSL brigade"); + ap_remove_input_filter(f); + return rv; + } + } + + if (APR_BRIGADE_EMPTY(ctx->bb)) { + apr_bucket *e = APR_BRIGADE_LAST(bb); + + /* Ensure that the brigade is terminated by an EOS if the + * buffered request body has been entirely consumed. */ + if (e == APR_BRIGADE_SENTINEL(bb) || !APR_BUCKET_IS_EOS(e)) { + e = apr_bucket_eos_create(f->c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, e); + } + + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, f->c, + "buffered SSL brigade exhausted"); + /* Note that the filter must *not* be removed here; it may be + * invoked again, see comment above. */ + } + + return APR_SUCCESS; +} + +/* The request_rec pointer is passed in here only to ensure that the + * filter chain is modified correctly when doing a TLS upgrade. It + * must *not* be used otherwise. */ +static void ssl_io_input_add_filter(ssl_filter_ctx_t *filter_ctx, conn_rec *c, + request_rec *r, SSL *ssl) +{ + bio_filter_in_ctx_t *inctx; + + inctx = apr_palloc(c->pool, sizeof(*inctx)); + + filter_ctx->pInputFilter = ap_add_input_filter(ssl_io_filter, inctx, r, c); + + filter_ctx->pbioRead = BIO_new(&bio_filter_in_method); + filter_ctx->pbioRead->ptr = (void *)inctx; + + inctx->ssl = ssl; + inctx->bio_out = filter_ctx->pbioWrite; + inctx->f = filter_ctx->pInputFilter; + inctx->rc = APR_SUCCESS; + inctx->mode = AP_MODE_READBYTES; + inctx->cbuf.length = 0; + inctx->bb = apr_brigade_create(c->pool, c->bucket_alloc); + inctx->block = APR_BLOCK_READ; + inctx->pool = c->pool; + inctx->filter_ctx = filter_ctx; + inctx->alpn_finished = 0; +} + +/* The request_rec pointer is passed in here only to ensure that the + * filter chain is modified correctly when doing a TLS upgrade. It + * must *not* be used otherwise. */ +void ssl_io_filter_init(conn_rec *c, request_rec *r, SSL *ssl) +{ + ssl_filter_ctx_t *filter_ctx; + + filter_ctx = apr_palloc(c->pool, sizeof(ssl_filter_ctx_t)); + + filter_ctx->config = myConnConfig(c); + + ap_add_output_filter(ssl_io_coalesce, NULL, r, c); + + filter_ctx->pOutputFilter = ap_add_output_filter(ssl_io_filter, + filter_ctx, r, c); + + filter_ctx->pbioWrite = BIO_new(&bio_filter_out_method); + filter_ctx->pbioWrite->ptr = (void *)bio_filter_out_ctx_new(filter_ctx, c); + + /* write is non blocking for the benefit of async mpm */ + if (c->cs) { + BIO_set_nbio(filter_ctx->pbioWrite, 1); + } + + ssl_io_input_add_filter(filter_ctx, c, r, ssl); + + SSL_set_bio(ssl, filter_ctx->pbioRead, filter_ctx->pbioWrite); + filter_ctx->pssl = ssl; + + apr_pool_cleanup_register(c->pool, (void*)filter_ctx, + ssl_io_filter_cleanup, apr_pool_cleanup_null); + + if (APLOG_CS_IS_LEVEL(c, mySrvFromConn(c), APLOG_TRACE4)) { + BIO_set_callback(SSL_get_rbio(ssl), ssl_io_data_cb); + BIO_set_callback_arg(SSL_get_rbio(ssl), (void *)ssl); + } + + return; +} + +void ssl_io_filter_register(apr_pool_t *p) +{ + ap_register_input_filter (ssl_io_filter, ssl_io_filter_input, NULL, AP_FTYPE_CONNECTION + 5); + ap_register_output_filter (ssl_io_coalesce, ssl_io_filter_coalesce, NULL, AP_FTYPE_CONNECTION + 4); + ap_register_output_filter (ssl_io_filter, ssl_io_filter_output, NULL, AP_FTYPE_CONNECTION + 5); + + ap_register_input_filter (ssl_io_buffer, ssl_io_filter_buffer, NULL, AP_FTYPE_PROTOCOL); + + return; +} + +/* _________________________________________________________________ +** +** I/O Data Debugging +** _________________________________________________________________ +*/ + +#define DUMP_WIDTH 16 + +static void ssl_io_data_dump(server_rec *srvr, + const char *s, + long len) +{ + char buf[256]; + char tmp[64]; + int i, j, rows, trunc; + unsigned char ch; + + trunc = 0; + for(; (len > 0) && ((s[len-1] == ' ') || (s[len-1] == '\0')); len--) + trunc++; + rows = (len / DUMP_WIDTH); + if ((rows * DUMP_WIDTH) < len) + rows++; + ap_log_error(APLOG_MARK, APLOG_TRACE7, 0, srvr, + "+-------------------------------------------------------------------------+"); + for(i = 0 ; i< rows; i++) { +#if APR_CHARSET_EBCDIC + char ebcdic_text[DUMP_WIDTH]; + j = DUMP_WIDTH; + if ((i * DUMP_WIDTH + j) > len) + j = len % DUMP_WIDTH; + if (j == 0) + j = DUMP_WIDTH; + memcpy(ebcdic_text,(char *)(s) + i * DUMP_WIDTH, j); + ap_xlate_proto_from_ascii(ebcdic_text, j); +#endif /* APR_CHARSET_EBCDIC */ + apr_snprintf(tmp, sizeof(tmp), "| %04x: ", i * DUMP_WIDTH); + apr_cpystrn(buf, tmp, sizeof(buf)); + for (j = 0; j < DUMP_WIDTH; j++) { + if (((i * DUMP_WIDTH) + j) >= len) + apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf)); + else { + ch = ((unsigned char)*((char *)(s) + i * DUMP_WIDTH + j)) & 0xff; + apr_snprintf(tmp, sizeof(tmp), "%02x%c", ch , j==7 ? '-' : ' '); + apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf)); + } + } + apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf)); + for (j = 0; j < DUMP_WIDTH; j++) { + if (((i * DUMP_WIDTH) + j) >= len) + apr_cpystrn(buf+strlen(buf), " ", sizeof(buf)-strlen(buf)); + else { + ch = ((unsigned char)*((char *)(s) + i * DUMP_WIDTH + j)) & 0xff; +#if APR_CHARSET_EBCDIC + apr_snprintf(tmp, sizeof(tmp), "%c", (ch >= 0x20 && ch <= 0x7F) ? ebcdic_text[j] : '.'); +#else /* APR_CHARSET_EBCDIC */ + apr_snprintf(tmp, sizeof(tmp), "%c", ((ch >= ' ') && (ch <= '~')) ? ch : '.'); +#endif /* APR_CHARSET_EBCDIC */ + apr_cpystrn(buf+strlen(buf), tmp, sizeof(buf)-strlen(buf)); + } + } + apr_cpystrn(buf+strlen(buf), " |", sizeof(buf)-strlen(buf)); + ap_log_error(APLOG_MARK, APLOG_TRACE7, 0, srvr, + "%s", buf); + } + if (trunc > 0) + ap_log_error(APLOG_MARK, APLOG_TRACE7, 0, srvr, + "| %04ld - ", len + trunc); + ap_log_error(APLOG_MARK, APLOG_TRACE7, 0, srvr, + "+-------------------------------------------------------------------------+"); + return; +} + +long ssl_io_data_cb(BIO *bio, int cmd, + const char *argp, + int argi, long argl, long rc) +{ + SSL *ssl; + conn_rec *c; + server_rec *s; + + if ((ssl = (SSL *)BIO_get_callback_arg(bio)) == NULL) + return rc; + if ((c = (conn_rec *)SSL_get_app_data(ssl)) == NULL) + return rc; + s = mySrvFromConn(c); + + if ( cmd == (BIO_CB_WRITE|BIO_CB_RETURN) + || cmd == (BIO_CB_READ |BIO_CB_RETURN) ) { + if (rc >= 0) { + ap_log_cserror(APLOG_MARK, APLOG_TRACE4, 0, c, s, + "%s: %s %ld/%d bytes %s BIO#%pp [mem: %pp] %s", + SSL_LIBRARY_NAME, + (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "write" : "read"), + rc, argi, (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "to" : "from"), + bio, argp, + (argp != NULL ? "(BIO dump follows)" : "(Oops, no memory buffer?)")); + if ((argp != NULL) && APLOG_CS_IS_LEVEL(c, s, APLOG_TRACE7)) + ssl_io_data_dump(s, argp, rc); + } + else { + ap_log_cserror(APLOG_MARK, APLOG_TRACE4, 0, c, s, + "%s: I/O error, %d bytes expected to %s on BIO#%pp [mem: %pp]", + SSL_LIBRARY_NAME, argi, + (cmd == (BIO_CB_WRITE|BIO_CB_RETURN) ? "write" : "read"), + bio, argp); + } + } + return rc; +} diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_kernel.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_kernel.c new file mode 100644 index 0000000000..387c0bf745 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_kernel.c @@ -0,0 +1,2419 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_kernel.c + * The SSL engine kernel + */ + /* ``It took me fifteen years to discover + I had no talent for programming, but + I couldn't give it up because by that + time I was too famous.'' + -- Unknown */ +#include "ssl_private.h" +#include "mod_ssl.h" +#include "util_md5.h" + +static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn); +#ifdef HAVE_TLSEXT +static int ssl_find_vhost(void *servername, conn_rec *c, server_rec *s); +#endif + +#define SWITCH_STATUS_LINE "HTTP/1.1 101 Switching Protocols" +#define UPGRADE_HEADER "Upgrade: TLS/1.0, HTTP/1.1" +#define CONNECTION_HEADER "Connection: Upgrade" + +/* Perform an upgrade-to-TLS for the given request, per RFC 2817. */ +static apr_status_t upgrade_connection(request_rec *r) +{ + struct conn_rec *conn = r->connection; + apr_bucket_brigade *bb; + SSLConnRec *sslconn; + apr_status_t rv; + SSL *ssl; + + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02028) + "upgrading connection to TLS"); + + bb = apr_brigade_create(r->pool, conn->bucket_alloc); + + rv = ap_fputstrs(conn->output_filters, bb, SWITCH_STATUS_LINE, CRLF, + UPGRADE_HEADER, CRLF, CONNECTION_HEADER, CRLF, CRLF, NULL); + if (rv == APR_SUCCESS) { + APR_BRIGADE_INSERT_TAIL(bb, + apr_bucket_flush_create(conn->bucket_alloc)); + rv = ap_pass_brigade(conn->output_filters, bb); + } + + if (rv) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02029) + "failed to send 101 interim response for connection " + "upgrade"); + return rv; + } + + ssl_init_ssl_connection(conn, r); + + sslconn = myConnConfig(conn); + ssl = sslconn->ssl; + + /* Perform initial SSL handshake. */ + SSL_set_accept_state(ssl); + SSL_do_handshake(ssl); + + if (SSL_get_state(ssl) != SSL_ST_OK) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02030) + "TLS upgrade handshake failed: not accepted by client!?"); + + return APR_ECONNABORTED; + } + + return APR_SUCCESS; +} + +/* Perform a speculative (and non-blocking) read from the connection + * filters for the given request, to determine whether there is any + * pending data to read. Return non-zero if there is, else zero. */ +static int has_buffered_data(request_rec *r) +{ + apr_bucket_brigade *bb; + apr_off_t len; + apr_status_t rv; + int result; + + bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); + + rv = ap_get_brigade(r->connection->input_filters, bb, AP_MODE_SPECULATIVE, + APR_NONBLOCK_READ, 1); + result = rv == APR_SUCCESS + && apr_brigade_length(bb, 1, &len) == APR_SUCCESS + && len > 0; + + apr_brigade_destroy(bb); + + return result; +} + +/* + * Post Read Request Handler + */ +int ssl_hook_ReadReq(request_rec *r) +{ + SSLSrvConfigRec *sc = mySrvConfig(r->server); + SSLConnRec *sslconn; + const char *upgrade; +#ifdef HAVE_TLSEXT + const char *servername; +#endif + SSL *ssl; + + /* Perform TLS upgrade here if "SSLEngine optional" is configured, + * SSL is not already set up for this connection, and the client + * has sent a suitable Upgrade header. */ + if (sc->enabled == SSL_ENABLED_OPTIONAL && !myConnConfig(r->connection) + && (upgrade = apr_table_get(r->headers_in, "Upgrade")) != NULL + && ap_find_token(r->pool, upgrade, "TLS/1.0")) { + if (upgrade_connection(r)) { + return HTTP_INTERNAL_SERVER_ERROR; + } + } + + sslconn = myConnConfig(r->connection); + if (!sslconn) { + return DECLINED; + } + + if (sslconn->non_ssl_request == NON_SSL_SET_ERROR_MSG) { + apr_table_setn(r->notes, "error-notes", + "Reason: You're speaking plain HTTP to an SSL-enabled " + "server port.
\n Instead use the HTTPS scheme to " + "access this URL, please.
\n"); + + /* Now that we have caught this error, forget it. we are done + * with using SSL on this request. + */ + sslconn->non_ssl_request = NON_SSL_OK; + + return HTTP_BAD_REQUEST; + } + + /* + * Get the SSL connection structure and perform the + * delayed interlinking from SSL back to request_rec + */ + ssl = sslconn->ssl; + if (!ssl) { + return DECLINED; + } +#ifdef HAVE_TLSEXT + /* + * Perform SNI checks only on the initial request. In particular, + * if these checks detect a problem, the checks shouldn't return an + * error again when processing an ErrorDocument redirect for the + * original problem. + */ + if (r->proxyreq != PROXYREQ_PROXY && ap_is_initial_req(r)) { + if ((servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))) { + char *host, *scope_id; + apr_port_t port; + apr_status_t rv; + + /* + * The SNI extension supplied a hostname. So don't accept requests + * with either no hostname or a different hostname as this could + * cause us to end up in a different virtual host as the one that + * was used for the handshake causing different SSL parameters to + * be applied as SSLProtocol, SSLCACertificateFile/Path and + * SSLCADNRequestFile/Path cannot be renegotiated (SSLCA* due + * to current limitations in OpenSSL, see + * http://mail-archives.apache.org/mod_mbox/httpd-dev/200806.mbox/%3C48592955.2090303@velox.ch%3E + * and + * http://mail-archives.apache.org/mod_mbox/httpd-dev/201312.mbox/%3CCAKQ1sVNpOrdiBm-UPw1hEdSN7YQXRRjeaT-MCWbW_7mN%3DuFiOw%40mail.gmail.com%3E + * ) + */ + if (!r->hostname) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, APLOGNO(02031) + "Hostname %s provided via SNI, but no hostname" + " provided in HTTP request", servername); + return HTTP_BAD_REQUEST; + } + rv = apr_parse_addr_port(&host, &scope_id, &port, r->hostname, r->pool); + if (rv != APR_SUCCESS || scope_id) { + return HTTP_BAD_REQUEST; + } + if (strcasecmp(host, servername)) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, APLOGNO(02032) + "Hostname %s provided via SNI and hostname %s provided" + " via HTTP are different", servername, host); + return HTTP_BAD_REQUEST; + } + } + else if (((sc->strict_sni_vhost_check == SSL_ENABLED_TRUE) + || (mySrvConfig(sslconn->server))->strict_sni_vhost_check + == SSL_ENABLED_TRUE) + && r->connection->vhost_lookup_data) { + /* + * We are using a name based configuration here, but no hostname was + * provided via SNI. Don't allow that if are requested to do strict + * checking. Check whether this strict checking was set up either in the + * server config we used for handshaking or in our current server. + * This should avoid insecure configuration by accident. + */ + ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, APLOGNO(02033) + "No hostname was provided via SNI for a name based" + " virtual host"); + apr_table_setn(r->notes, "error-notes", + "Reason: The client software did not provide a " + "hostname using Server Name Indication (SNI), " + "which is required to access this server.
\n"); + return HTTP_FORBIDDEN; + } + } +#endif + SSL_set_app_data2(ssl, r); + + /* + * Log information about incoming HTTPS requests + */ + if (APLOGrinfo(r) && ap_is_initial_req(r)) { + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02034) + "%s HTTPS request received for child %ld (server %s)", + (r->connection->keepalives <= 0 ? + "Initial (No.1)" : + apr_psprintf(r->pool, "Subsequent (No.%d)", + r->connection->keepalives+1)), + r->connection->id, + ssl_util_vhostid(r->pool, r->server)); + } + + /* SetEnvIf ssl-*-shutdown flags can only be per-server, + * so they won't change across keepalive requests + */ + if (sslconn->shutdown_type == SSL_SHUTDOWN_TYPE_UNSET) { + ssl_configure_env(r, sslconn); + } + + return DECLINED; +} + +/* + * Move SetEnvIf information from request_rec to conn_rec/BUFF + * to allow the close connection handler to use them. + */ + +static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn) +{ + int i; + const apr_array_header_t *arr = apr_table_elts(r->subprocess_env); + const apr_table_entry_t *elts = (const apr_table_entry_t *)arr->elts; + + sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD; + + for (i = 0; i < arr->nelts; i++) { + const char *key = elts[i].key; + + switch (*key) { + case 's': + /* being case-sensitive here. + * and not checking for the -shutdown since these are the only + * SetEnvIf "flags" we support + */ + if (!strncmp(key+1, "sl-", 3)) { + key += 4; + if (!strncmp(key, "unclean", 7)) { + sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN; + } + else if (!strncmp(key, "accurate", 8)) { + sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_ACCURATE; + } + return; /* should only ever be one ssl-*-shutdown */ + } + break; + } + } +} + +/* + * Access Handler + */ +int ssl_hook_Access(request_rec *r) +{ + SSLDirConfigRec *dc = myDirConfig(r); + SSLSrvConfigRec *sc = mySrvConfig(r->server); + SSLConnRec *sslconn = myConnConfig(r->connection); + SSL *ssl = sslconn ? sslconn->ssl : NULL; + server_rec *handshakeserver = sslconn ? sslconn->server : NULL; + SSL_CTX *ctx = NULL; + apr_array_header_t *requires; + ssl_require_t *ssl_requires; + int ok, i; + BOOL renegotiate = FALSE, renegotiate_quick = FALSE; + X509 *cert; + X509 *peercert; + X509_STORE *cert_store = NULL; + X509_STORE_CTX cert_store_ctx; + STACK_OF(SSL_CIPHER) *cipher_list_old = NULL, *cipher_list = NULL; + const SSL_CIPHER *cipher = NULL; + int depth, verify_old, verify, n; + + if (ssl) { + ctx = SSL_get_SSL_CTX(ssl); + } + + /* + * Support for SSLRequireSSL directive + */ + if (dc->bSSLRequired && !ssl) { + if (sc->enabled == SSL_ENABLED_OPTIONAL) { + /* This vhost was configured for optional SSL, just tell the + * client that we need to upgrade. + */ + apr_table_setn(r->err_headers_out, "Upgrade", "TLS/1.0, HTTP/1.1"); + apr_table_setn(r->err_headers_out, "Connection", "Upgrade"); + + return HTTP_UPGRADE_REQUIRED; + } + + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02219) + "access to %s failed, reason: %s", + r->filename, "SSL connection required"); + + /* remember forbidden access for strict require option */ + apr_table_setn(r->notes, "ssl-access-forbidden", "1"); + + return HTTP_FORBIDDEN; + } + + /* + * Check to see whether SSL is in use; if it's not, then no + * further access control checks are relevant. (the test for + * sc->enabled is probably strictly unnecessary) + */ + if (sc->enabled == SSL_ENABLED_FALSE || !ssl) { + return DECLINED; + } + +#ifdef HAVE_SRP + /* + * Support for per-directory reconfigured SSL connection parameters + * + * We do not force any renegotiation if the user is already authenticated + * via SRP. + * + */ + if (SSL_get_srp_username(ssl)) { + return DECLINED; + } +#endif + + /* + * Support for per-directory reconfigured SSL connection parameters. + * + * This is implemented by forcing an SSL renegotiation with the + * reconfigured parameter suite. But Apache's internal API processing + * makes our life very hard here, because when internal sub-requests occur + * we nevertheless should avoid multiple unnecessary SSL handshakes (they + * require extra network I/O and especially time to perform). + * + * But the optimization for filtering out the unnecessary handshakes isn't + * obvious and trivial. Especially because while Apache is in its + * sub-request processing the client could force additional handshakes, + * too. And these take place perhaps without our notice. So the only + * possibility is to explicitly _ask_ OpenSSL whether the renegotiation + * has to be performed or not. It has to performed when some parameters + * which were previously known (by us) are not those we've now + * reconfigured (as known by OpenSSL) or (in optimized way) at least when + * the reconfigured parameter suite is stronger (more restrictions) than + * the currently active one. + */ + + /* + * Override of SSLCipherSuite + * + * We provide two options here: + * + * o The paranoid and default approach where we force a renegotiation when + * the cipher suite changed in _any_ way (which is straight-forward but + * often forces renegotiations too often and is perhaps not what the + * user actually wanted). + * + * o The optimized and still secure way where we force a renegotiation + * only if the currently active cipher is no longer contained in the + * reconfigured/new cipher suite. Any other changes are not important + * because it's the servers choice to select a cipher from the ones the + * client supports. So as long as the current cipher is still in the new + * cipher suite we're happy. Because we can assume we would have + * selected it again even when other (better) ciphers exists now in the + * new cipher suite. This approach is fine because the user explicitly + * has to enable this via ``SSLOptions +OptRenegotiate''. So we do no + * implicit optimizations. + */ + if (dc->szCipherSuite || (r->server != handshakeserver)) { + /* remember old state */ + + if (dc->nOptions & SSL_OPT_OPTRENEGOTIATE) { + cipher = SSL_get_current_cipher(ssl); + } + else { + cipher_list_old = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl); + + if (cipher_list_old) { + cipher_list_old = sk_SSL_CIPHER_dup(cipher_list_old); + } + } + + /* configure new state */ + if ((dc->szCipherSuite || sc->server->auth.cipher_suite) && + !SSL_set_cipher_list(ssl, dc->szCipherSuite ? + dc->szCipherSuite : + sc->server->auth.cipher_suite)) { + ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(02253) + "Unable to reconfigure (per-directory) " + "permitted SSL ciphers"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, r->server); + + if (cipher_list_old) { + sk_SSL_CIPHER_free(cipher_list_old); + } + + return HTTP_FORBIDDEN; + } + + /* determine whether a renegotiation has to be forced */ + cipher_list = (STACK_OF(SSL_CIPHER) *)SSL_get_ciphers(ssl); + + if (dc->nOptions & SSL_OPT_OPTRENEGOTIATE) { + /* optimized way */ + if ((!cipher && cipher_list) || + (cipher && !cipher_list)) + { + renegotiate = TRUE; + } + else if (cipher && cipher_list && + (sk_SSL_CIPHER_find(cipher_list, cipher) < 0)) + { + renegotiate = TRUE; + } + } + else { + /* paranoid way */ + if ((!cipher_list_old && cipher_list) || + (cipher_list_old && !cipher_list)) + { + renegotiate = TRUE; + } + else if (cipher_list_old && cipher_list) { + for (n = 0; + !renegotiate && (n < sk_SSL_CIPHER_num(cipher_list)); + n++) + { + SSL_CIPHER *value = sk_SSL_CIPHER_value(cipher_list, n); + + if (sk_SSL_CIPHER_find(cipher_list_old, value) < 0) { + renegotiate = TRUE; + } + } + + for (n = 0; + !renegotiate && (n < sk_SSL_CIPHER_num(cipher_list_old)); + n++) + { + SSL_CIPHER *value = sk_SSL_CIPHER_value(cipher_list_old, n); + + if (sk_SSL_CIPHER_find(cipher_list, value) < 0) { + renegotiate = TRUE; + } + } + } + } + + /* cleanup */ + if (cipher_list_old) { + sk_SSL_CIPHER_free(cipher_list_old); + } + + if (renegotiate) { +#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE + if (sc->cipher_server_pref == TRUE) { + SSL_set_options(ssl, SSL_OP_CIPHER_SERVER_PREFERENCE); + } +#endif + /* tracing */ + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02220) + "Reconfigured cipher suite will force renegotiation"); + } + } + + /* + * override of SSLVerifyDepth + * + * The depth checks are handled by us manually inside the verify callback + * function and not by OpenSSL internally (and our function is aware of + * both the per-server and per-directory contexts). So we cannot ask + * OpenSSL about the currently verify depth. Instead we remember it in our + * SSLConnRec attached to the SSL* of OpenSSL. We've to force the + * renegotiation if the reconfigured/new verify depth is less than the + * currently active/remembered verify depth (because this means more + * restriction on the certificate chain). + */ + n = (sslconn->verify_depth != UNSET) ? + sslconn->verify_depth : + (mySrvConfig(handshakeserver))->server->auth.verify_depth; + /* determine the new depth */ + sslconn->verify_depth = (dc->nVerifyDepth != UNSET) ? + dc->nVerifyDepth : sc->server->auth.verify_depth; + if (sslconn->verify_depth < n) { + renegotiate = TRUE; + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02254) + "Reduced client verification depth will force " + "renegotiation"); + } + + /* + * override of SSLVerifyClient + * + * We force a renegotiation if the reconfigured/new verify type is + * stronger than the currently active verify type. + * + * The order is: none << optional_no_ca << optional << require + * + * Additionally the following optimization is possible here: When the + * currently active verify type is "none" but a client certificate is + * already known/present, it's enough to manually force a client + * verification but at least skip the I/O-intensive renegotiation + * handshake. + */ + if ((dc->nVerifyClient != SSL_CVERIFY_UNSET) || + (sc->server->auth.verify_mode != SSL_CVERIFY_UNSET)) { + /* remember old state */ + verify_old = SSL_get_verify_mode(ssl); + /* configure new state */ + verify = SSL_VERIFY_NONE; + + if ((dc->nVerifyClient == SSL_CVERIFY_REQUIRE) || + (sc->server->auth.verify_mode == SSL_CVERIFY_REQUIRE)) { + verify |= SSL_VERIFY_PEER_STRICT; + } + + if ((dc->nVerifyClient == SSL_CVERIFY_OPTIONAL) || + (dc->nVerifyClient == SSL_CVERIFY_OPTIONAL_NO_CA) || + (sc->server->auth.verify_mode == SSL_CVERIFY_OPTIONAL) || + (sc->server->auth.verify_mode == SSL_CVERIFY_OPTIONAL_NO_CA)) + { + verify |= SSL_VERIFY_PEER; + } + + SSL_set_verify(ssl, verify, ssl_callback_SSLVerify); + SSL_set_verify_result(ssl, X509_V_OK); + + /* determine whether we've to force a renegotiation */ + if (!renegotiate && verify != verify_old) { + if (((verify_old == SSL_VERIFY_NONE) && + (verify != SSL_VERIFY_NONE)) || + + (!(verify_old & SSL_VERIFY_PEER) && + (verify & SSL_VERIFY_PEER)) || + + (!(verify_old & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) && + (verify & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))) + { + renegotiate = TRUE; + /* optimization */ + + if ((dc->nOptions & SSL_OPT_OPTRENEGOTIATE) && + (verify_old == SSL_VERIFY_NONE) && + ((peercert = SSL_get_peer_certificate(ssl)) != NULL)) + { + renegotiate_quick = TRUE; + X509_free(peercert); + } + + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02255) + "Changed client verification type will force " + "%srenegotiation", + renegotiate_quick ? "quick " : ""); + } + } + /* If we're handling a request for a vhost other than the default one, + * then we need to make sure that client authentication is properly + * enforced. For clients supplying an SNI extension, the peer + * certificate verification has happened in the handshake already + * (and r->server == handshakeserver). For non-SNI requests, + * an additional check is needed here. If client authentication + * is configured as mandatory, then we can only proceed if the + * CA list doesn't have to be changed (OpenSSL doesn't provide + * an option to change the list for an existing session). + */ + if ((r->server != handshakeserver) + && renegotiate + && ((verify & SSL_VERIFY_PEER) || + (verify & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))) { + SSLSrvConfigRec *hssc = mySrvConfig(handshakeserver); + +#define MODSSL_CFG_CA_NE(f, sc1, sc2) \ + (sc1->server->auth.f && \ + (!sc2->server->auth.f || \ + strNE(sc1->server->auth.f, sc2->server->auth.f))) + + if (MODSSL_CFG_CA_NE(ca_cert_file, sc, hssc) || + MODSSL_CFG_CA_NE(ca_cert_path, sc, hssc)) { + if (verify & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) { + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02256) + "Non-default virtual host with SSLVerify set to " + "'require' and VirtualHost-specific CA certificate " + "list is only available to clients with TLS server " + "name indication (SNI) support"); + SSL_set_verify(ssl, verify_old, NULL); + return HTTP_FORBIDDEN; + } else + /* let it pass, possibly with an "incorrect" peer cert, + * so make sure the SSL_CLIENT_VERIFY environment variable + * will indicate partial success only, later on. + */ + sslconn->verify_info = "GENEROUS"; + } + } + } + + /* If a renegotiation is now required for this location, and the + * request includes a message body (and the client has not + * requested a "100 Continue" response), then the client will be + * streaming the request body over the wire already. In that + * case, it is not possible to stop and perform a new SSL + * handshake immediately; once the SSL library moves to the + * "accept" state, it will reject the SSL packets which the client + * is sending for the request body. + * + * To allow authentication to complete in this auth hook, the + * solution used here is to fill a (bounded) buffer with the + * request body, and then to reinject that request body later. + */ + if (renegotiate && !renegotiate_quick + && (apr_table_get(r->headers_in, "transfer-encoding") + || (apr_table_get(r->headers_in, "content-length") + && strcmp(apr_table_get(r->headers_in, "content-length"), "0"))) + && !r->expecting_100) { + int rv; + apr_size_t rsize; + + rsize = dc->nRenegBufferSize == UNSET ? DEFAULT_RENEG_BUFFER_SIZE : + dc->nRenegBufferSize; + if (rsize > 0) { + /* Fill the I/O buffer with the request body if possible. */ + rv = ssl_io_buffer_fill(r, rsize); + } + else { + /* If the reneg buffer size is set to zero, just fail. */ + rv = HTTP_REQUEST_ENTITY_TOO_LARGE; + } + + if (rv) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02257) + "could not buffer message body to allow " + "SSL renegotiation to proceed"); + return rv; + } + } + + /* + * now do the renegotiation if anything was actually reconfigured + */ + if (renegotiate) { + /* + * Now we force the SSL renegotiation by sending the Hello Request + * message to the client. Here we have to do a workaround: Actually + * OpenSSL returns immediately after sending the Hello Request (the + * intent AFAIK is because the SSL/TLS protocol says it's not a must + * that the client replies to a Hello Request). But because we insist + * on a reply (anything else is an error for us) we have to go to the + * ACCEPT state manually. Using SSL_set_accept_state() doesn't work + * here because it resets too much of the connection. So we set the + * state explicitly and continue the handshake manually. + */ + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02221) + "Requesting connection re-negotiation"); + + if (renegotiate_quick) { + STACK_OF(X509) *cert_stack; + + /* perform just a manual re-verification of the peer */ + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02258) + "Performing quick renegotiation: " + "just re-verifying the peer"); + + cert_stack = (STACK_OF(X509) *)SSL_get_peer_cert_chain(ssl); + + cert = SSL_get_peer_certificate(ssl); + + if (!cert_stack && cert) { + /* client cert is in the session cache, but there is + * no chain, since ssl3_get_client_certificate() + * sk_X509_shift-ed the peer cert out of the chain. + * we put it back here for the purpose of quick_renegotiation. + */ + cert_stack = sk_X509_new_null(); + sk_X509_push(cert_stack, cert); + } + + if (!cert_stack || (sk_X509_num(cert_stack) == 0)) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02222) + "Cannot find peer certificate chain"); + + return HTTP_FORBIDDEN; + } + + if (!(cert_store || + (cert_store = SSL_CTX_get_cert_store(ctx)))) + { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02223) + "Cannot find certificate storage"); + + return HTTP_FORBIDDEN; + } + + if (!cert) { + cert = sk_X509_value(cert_stack, 0); + } + + X509_STORE_CTX_init(&cert_store_ctx, cert_store, cert, cert_stack); + depth = SSL_get_verify_depth(ssl); + + if (depth >= 0) { + X509_STORE_CTX_set_depth(&cert_store_ctx, depth); + } + + X509_STORE_CTX_set_ex_data(&cert_store_ctx, + SSL_get_ex_data_X509_STORE_CTX_idx(), + (char *)ssl); + + if (!X509_verify_cert(&cert_store_ctx)) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02224) + "Re-negotiation verification step failed"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, r->server); + } + + SSL_set_verify_result(ssl, cert_store_ctx.error); + X509_STORE_CTX_cleanup(&cert_store_ctx); + + if (cert_stack != SSL_get_peer_cert_chain(ssl)) { + /* we created this ourselves, so free it */ + sk_X509_pop_free(cert_stack, X509_free); + } + } + else { + const char *reneg_support; + request_rec *id = r->main ? r->main : r; + + /* Additional mitigation for CVE-2009-3555: At this point, + * before renegotiating, an (entire) request has been read + * from the connection. An attacker may have sent further + * data to "prefix" any subsequent request by the victim's + * client after the renegotiation; this data may already + * have been read and buffered. Forcing a connection + * closure after the response ensures such data will be + * discarded. Legimately pipelined HTTP requests will be + * retried anyway with this approach. */ + if (has_buffered_data(r)) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02259) + "insecure SSL re-negotiation required, but " + "a pipelined request is present; keepalive " + "disabled"); + r->connection->keepalive = AP_CONN_CLOSE; + } + +#if defined(SSL_get_secure_renegotiation_support) + reneg_support = SSL_get_secure_renegotiation_support(ssl) ? + "client does" : "client does not"; +#else + reneg_support = "server does not"; +#endif + /* Perform a full renegotiation. */ + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02260) + "Performing full renegotiation: complete handshake " + "protocol (%s support secure renegotiation)", + reneg_support); + + SSL_set_session_id_context(ssl, + (unsigned char *)&id, + sizeof(id)); + + /* Toggle the renegotiation state to allow the new + * handshake to proceed. */ + sslconn->reneg_state = RENEG_ALLOW; + + SSL_renegotiate(ssl); + SSL_do_handshake(ssl); + + if (SSL_get_state(ssl) != SSL_ST_OK) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02225) + "Re-negotiation request failed"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, r->server); + + r->connection->keepalive = AP_CONN_CLOSE; + return HTTP_FORBIDDEN; + } + + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02226) + "Awaiting re-negotiation handshake"); + + /* XXX: Should replace setting state with SSL_renegotiate(ssl); + * However, this causes failures in perl-framework currently, + * perhaps pre-test if we have already negotiated? + */ +#ifdef OPENSSL_NO_SSL_INTERN + SSL_set_state(ssl, SSL_ST_ACCEPT); +#else + ssl->state = SSL_ST_ACCEPT; +#endif + SSL_do_handshake(ssl); + + sslconn->reneg_state = RENEG_REJECT; + + if (SSL_get_state(ssl) != SSL_ST_OK) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02261) + "Re-negotiation handshake failed: " + "Not accepted by client!?"); + + r->connection->keepalive = AP_CONN_CLOSE; + return HTTP_FORBIDDEN; + } + } + + /* + * Remember the peer certificate's DN + */ + if ((cert = SSL_get_peer_certificate(ssl))) { + if (sslconn->client_cert) { + X509_free(sslconn->client_cert); + } + sslconn->client_cert = cert; + sslconn->client_dn = NULL; + } + + /* + * Finally check for acceptable renegotiation results + */ + if ((dc->nVerifyClient != SSL_CVERIFY_NONE) || + (sc->server->auth.verify_mode != SSL_CVERIFY_NONE)) { + BOOL do_verify = ((dc->nVerifyClient == SSL_CVERIFY_REQUIRE) || + (sc->server->auth.verify_mode == SSL_CVERIFY_REQUIRE)); + + if (do_verify && (SSL_get_verify_result(ssl) != X509_V_OK)) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02262) + "Re-negotiation handshake failed: " + "Client verification failed"); + + return HTTP_FORBIDDEN; + } + + if (do_verify) { + if ((peercert = SSL_get_peer_certificate(ssl)) == NULL) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02263) + "Re-negotiation handshake failed: " + "Client certificate missing"); + + return HTTP_FORBIDDEN; + } + + X509_free(peercert); + } + } + + /* + * Also check that SSLCipherSuite has been enforced as expected. + */ + if (cipher_list) { + cipher = SSL_get_current_cipher(ssl); + if (sk_SSL_CIPHER_find(cipher_list, cipher) < 0) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02264) + "SSL cipher suite not renegotiated: " + "access to %s denied using cipher %s", + r->filename, + SSL_CIPHER_get_name(cipher)); + return HTTP_FORBIDDEN; + } + } + } + + /* If we're trying to have the user name set from a client + * certificate then we need to set it here. This should be safe as + * the user name probably isn't important from an auth checking point + * of view as the certificate supplied acts in that capacity. + * However, if FakeAuth is being used then this isn't the case so + * we need to postpone setting the username until later. + */ + if ((dc->nOptions & SSL_OPT_FAKEBASICAUTH) == 0 && dc->szUserName) { + char *val = ssl_var_lookup(r->pool, r->server, r->connection, + r, (char *)dc->szUserName); + if (val && val[0]) + r->user = val; + else + ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(02227) + "Failed to set r->user to '%s'", dc->szUserName); + } + + /* + * Check SSLRequire boolean expressions + */ + requires = dc->aRequirement; + ssl_requires = (ssl_require_t *)requires->elts; + + for (i = 0; i < requires->nelts; i++) { + ssl_require_t *req = &ssl_requires[i]; + const char *errstring; + ok = ap_expr_exec(r, req->mpExpr, &errstring); + + if (ok < 0) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02265) + "access to %s failed, reason: Failed to execute " + "SSL requirement expression: %s", + r->filename, errstring); + + /* remember forbidden access for strict require option */ + apr_table_setn(r->notes, "ssl-access-forbidden", "1"); + + return HTTP_FORBIDDEN; + } + + if (ok != 1) { + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02266) + "Access to %s denied for %s " + "(requirement expression not fulfilled)", + r->filename, r->useragent_ip); + + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02228) + "Failed expression: %s", req->cpExpr); + + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02229) + "access to %s failed, reason: %s", + r->filename, + "SSL requirement expression not fulfilled"); + + /* remember forbidden access for strict require option */ + apr_table_setn(r->notes, "ssl-access-forbidden", "1"); + + return HTTP_FORBIDDEN; + } + } + + /* + * Else access is granted from our point of view (except vendor + * handlers override). But we have to return DECLINED here instead + * of OK, because mod_auth and other modules still might want to + * deny access. + */ + + return DECLINED; +} + +/* + * Authentication Handler: + * Fake a Basic authentication from the X509 client certificate. + * + * This must be run fairly early on to prevent a real authentication from + * occuring, in particular it must be run before anything else that + * authenticates a user. This means that the Module statement for this + * module should be LAST in the Configuration file. + */ +int ssl_hook_UserCheck(request_rec *r) +{ + SSLConnRec *sslconn = myConnConfig(r->connection); + SSLSrvConfigRec *sc = mySrvConfig(r->server); + SSLDirConfigRec *dc = myDirConfig(r); + char *clientdn; + const char *auth_line, *username, *password; + + /* + * Additionally forbid access (again) + * when strict require option is used. + */ + if ((dc->nOptions & SSL_OPT_STRICTREQUIRE) && + (apr_table_get(r->notes, "ssl-access-forbidden"))) + { + return HTTP_FORBIDDEN; + } + + /* + * We decline when we are in a subrequest. The Authorization header + * would already be present if it was added in the main request. + */ + if (!ap_is_initial_req(r)) { + return DECLINED; + } + + /* + * Make sure the user is not able to fake the client certificate + * based authentication by just entering an X.509 Subject DN + * ("/XX=YYY/XX=YYY/..") as the username and "password" as the + * password. + */ + if ((auth_line = apr_table_get(r->headers_in, "Authorization"))) { + if (strcEQ(ap_getword(r->pool, &auth_line, ' '), "Basic")) { + while ((*auth_line == ' ') || (*auth_line == '\t')) { + auth_line++; + } + + auth_line = ap_pbase64decode(r->pool, auth_line); + username = ap_getword_nulls(r->pool, &auth_line, ':'); + password = auth_line; + + if ((username[0] == '/') && strEQ(password, "password")) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02035) + "Encountered FakeBasicAuth spoof: %s", username); + return HTTP_FORBIDDEN; + } + } + } + + /* + * We decline operation in various situations... + * - SSLOptions +FakeBasicAuth not configured + * - r->user already authenticated + * - ssl not enabled + * - client did not present a certificate + */ + if (!((sc->enabled == SSL_ENABLED_TRUE || sc->enabled == SSL_ENABLED_OPTIONAL) + && sslconn && sslconn->ssl && sslconn->client_cert) || + !(dc->nOptions & SSL_OPT_FAKEBASICAUTH) || r->user) + { + return DECLINED; + } + + if (!sslconn->client_dn) { + X509_NAME *name = X509_get_subject_name(sslconn->client_cert); + char *cp = X509_NAME_oneline(name, NULL, 0); + sslconn->client_dn = apr_pstrdup(r->connection->pool, cp); + OPENSSL_free(cp); + } + + clientdn = (char *)sslconn->client_dn; + + /* + * Fake a password - which one would be immaterial, as, it seems, an empty + * password in the users file would match ALL incoming passwords, if only + * we were using the standard crypt library routine. Unfortunately, OpenSSL + * "fixes" a "bug" in crypt and thus prevents blank passwords from + * working. (IMHO what they really fix is a bug in the users of the code + * - failing to program correctly for shadow passwords). We need, + * therefore, to provide a password. This password can be matched by + * adding the string "xxj31ZMTZzkVA" as the password in the user file. + * This is just the crypted variant of the word "password" ;-) + */ + auth_line = apr_pstrcat(r->pool, "Basic ", + ap_pbase64encode(r->pool, + apr_pstrcat(r->pool, clientdn, + ":password", NULL)), + NULL); + apr_table_setn(r->headers_in, "Authorization", auth_line); + + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02036) + "Faking HTTP Basic Auth header: \"Authorization: %s\"", + auth_line); + + return DECLINED; +} + +/* authorization phase */ +int ssl_hook_Auth(request_rec *r) +{ + SSLDirConfigRec *dc = myDirConfig(r); + + /* + * Additionally forbid access (again) + * when strict require option is used. + */ + if ((dc->nOptions & SSL_OPT_STRICTREQUIRE) && + (apr_table_get(r->notes, "ssl-access-forbidden"))) + { + return HTTP_FORBIDDEN; + } + + return DECLINED; +} + +/* + * Fixup Handler + */ + +static const char *ssl_hook_Fixup_vars[] = { + "SSL_VERSION_INTERFACE", + "SSL_VERSION_LIBRARY", + "SSL_PROTOCOL", + "SSL_SECURE_RENEG", + "SSL_COMPRESS_METHOD", + "SSL_CIPHER", + "SSL_CIPHER_EXPORT", + "SSL_CIPHER_USEKEYSIZE", + "SSL_CIPHER_ALGKEYSIZE", + "SSL_CLIENT_VERIFY", + "SSL_CLIENT_M_VERSION", + "SSL_CLIENT_M_SERIAL", + "SSL_CLIENT_V_START", + "SSL_CLIENT_V_END", + "SSL_CLIENT_V_REMAIN", + "SSL_CLIENT_S_DN", + "SSL_CLIENT_I_DN", + "SSL_CLIENT_A_KEY", + "SSL_CLIENT_A_SIG", + "SSL_SERVER_M_VERSION", + "SSL_SERVER_M_SERIAL", + "SSL_SERVER_V_START", + "SSL_SERVER_V_END", + "SSL_SERVER_S_DN", + "SSL_SERVER_I_DN", + "SSL_SERVER_A_KEY", + "SSL_SERVER_A_SIG", + "SSL_SESSION_ID", + "SSL_SESSION_RESUMED", +#ifdef HAVE_SRP + "SSL_SRP_USER", + "SSL_SRP_USERINFO", +#endif + NULL +}; + +int ssl_hook_Fixup(request_rec *r) +{ + SSLConnRec *sslconn = myConnConfig(r->connection); + SSLSrvConfigRec *sc = mySrvConfig(r->server); + SSLDirConfigRec *dc = myDirConfig(r); + apr_table_t *env = r->subprocess_env; + char *var, *val = ""; +#ifdef HAVE_TLSEXT + const char *servername; +#endif + STACK_OF(X509) *peer_certs; + SSL *ssl; + int i; + + /* If "SSLEngine optional" is configured, this is not an SSL + * connection, and this isn't a subrequest, send an Upgrade + * response header. */ + if (sc->enabled == SSL_ENABLED_OPTIONAL && !(sslconn && sslconn->ssl) + && !r->main) { + apr_table_setn(r->headers_out, "Upgrade", "TLS/1.0, HTTP/1.1"); + apr_table_mergen(r->headers_out, "Connection", "upgrade"); + } + + /* + * Check to see if SSL is on + */ + if (!(((sc->enabled == SSL_ENABLED_TRUE) || (sc->enabled == SSL_ENABLED_OPTIONAL)) && sslconn && (ssl = sslconn->ssl))) { + return DECLINED; + } + + /* + * Annotate the SSI/CGI environment with standard SSL information + */ + /* the always present HTTPS (=HTTP over SSL) flag! */ + apr_table_setn(env, "HTTPS", "on"); + +#ifdef HAVE_TLSEXT + /* add content of SNI TLS extension (if supplied with ClientHello) */ + if ((servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))) { + apr_table_set(env, "SSL_TLS_SNI", servername); + } +#endif + + /* standard SSL environment variables */ + if (dc->nOptions & SSL_OPT_STDENVVARS) { + modssl_var_extract_dns(env, sslconn->ssl, r->pool); + + for (i = 0; ssl_hook_Fixup_vars[i]; i++) { + var = (char *)ssl_hook_Fixup_vars[i]; + val = ssl_var_lookup(r->pool, r->server, r->connection, r, var); + if (!strIsEmpty(val)) { + apr_table_setn(env, var, val); + } + } + } + + /* + * On-demand bloat up the SSI/CGI environment with certificate data + */ + if (dc->nOptions & SSL_OPT_EXPORTCERTDATA) { + val = ssl_var_lookup(r->pool, r->server, r->connection, + r, "SSL_SERVER_CERT"); + + apr_table_setn(env, "SSL_SERVER_CERT", val); + + val = ssl_var_lookup(r->pool, r->server, r->connection, + r, "SSL_CLIENT_CERT"); + + apr_table_setn(env, "SSL_CLIENT_CERT", val); + + if ((peer_certs = (STACK_OF(X509) *)SSL_get_peer_cert_chain(ssl))) { + for (i = 0; i < sk_X509_num(peer_certs); i++) { + var = apr_psprintf(r->pool, "SSL_CLIENT_CERT_CHAIN_%d", i); + val = ssl_var_lookup(r->pool, r->server, r->connection, + r, var); + if (val) { + apr_table_setn(env, var, val); + } + } + } + } + + +#ifdef SSL_get_secure_renegotiation_support + apr_table_setn(r->notes, "ssl-secure-reneg", + SSL_get_secure_renegotiation_support(ssl) ? "1" : "0"); +#endif + + return DECLINED; +} + +/* _________________________________________________________________ +** +** Authz providers for use with mod_authz_core +** _________________________________________________________________ +*/ + +static authz_status ssl_authz_require_ssl_check(request_rec *r, + const char *require_line, + const void *parsed) +{ + SSLConnRec *sslconn = myConnConfig(r->connection); + SSL *ssl = sslconn ? sslconn->ssl : NULL; + + if (ssl) + return AUTHZ_GRANTED; + else + return AUTHZ_DENIED; +} + +static const char *ssl_authz_require_ssl_parse(cmd_parms *cmd, + const char *require_line, + const void **parsed) +{ + if (require_line && require_line[0]) + return "'Require ssl' does not take arguments"; + + return NULL; +} + +const authz_provider ssl_authz_provider_require_ssl = +{ + &ssl_authz_require_ssl_check, + &ssl_authz_require_ssl_parse, +}; + +static authz_status ssl_authz_verify_client_check(request_rec *r, + const char *require_line, + const void *parsed) +{ + SSLConnRec *sslconn = myConnConfig(r->connection); + SSL *ssl = sslconn ? sslconn->ssl : NULL; + + if (!ssl) + return AUTHZ_DENIED; + + if (sslconn->verify_error == NULL && + sslconn->verify_info == NULL && + SSL_get_verify_result(ssl) == X509_V_OK) + { + X509 *xs = SSL_get_peer_certificate(ssl); + + if (xs) { + X509_free(xs); + return AUTHZ_GRANTED; + } + else { + X509_free(xs); + } + } + + return AUTHZ_DENIED; +} + +static const char *ssl_authz_verify_client_parse(cmd_parms *cmd, + const char *require_line, + const void **parsed) +{ + if (require_line && require_line[0]) + return "'Require ssl-verify-client' does not take arguments"; + + return NULL; +} + +const authz_provider ssl_authz_provider_verify_client = +{ + &ssl_authz_verify_client_check, + &ssl_authz_verify_client_parse, +}; + + + +/* _________________________________________________________________ +** +** OpenSSL Callback Functions +** _________________________________________________________________ +*/ + +/* + * Hand out standard DH parameters, based on the authentication strength + */ +DH *ssl_callback_TmpDH(SSL *ssl, int export, int keylen) +{ + conn_rec *c = (conn_rec *)SSL_get_app_data(ssl); + EVP_PKEY *pkey; + int type; + +#ifdef SSL_CERT_SET_SERVER + /* + * When multiple certs/keys are configured for the SSL_CTX: make sure + * that we get the private key which is indeed used for the current + * SSL connection (available in OpenSSL 1.0.2 or later only) + */ + SSL_set_current_cert(ssl, SSL_CERT_SET_SERVER); +#endif + pkey = SSL_get_privatekey(ssl); + type = pkey ? EVP_PKEY_type(pkey->type) : EVP_PKEY_NONE; + + /* + * OpenSSL will call us with either keylen == 512 or keylen == 1024 + * (see the definition of SSL_EXPORT_PKEYLENGTH in ssl_locl.h). + * Adjust the DH parameter length according to the size of the + * RSA/DSA private key used for the current connection, and always + * use at least 1024-bit parameters. + * Note: This may cause interoperability issues with implementations + * which limit their DH support to 1024 bit - e.g. Java 7 and earlier. + * In this case, SSLCertificateFile can be used to specify fixed + * 1024-bit DH parameters (with the effect that OpenSSL skips this + * callback). + */ + if ((type == EVP_PKEY_RSA) || (type == EVP_PKEY_DSA)) { + keylen = EVP_PKEY_bits(pkey); + } + + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "handing out built-in DH parameters for %d-bit authenticated connection", keylen); + + return modssl_get_dh_params(keylen); +} + +/* + * This OpenSSL callback function is called when OpenSSL + * does client authentication and verifies the certificate chain. + */ +int ssl_callback_SSLVerify(int ok, X509_STORE_CTX *ctx) +{ + /* Get Apache context back through OpenSSL context */ + SSL *ssl = X509_STORE_CTX_get_ex_data(ctx, + SSL_get_ex_data_X509_STORE_CTX_idx()); + conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl); + request_rec *r = (request_rec *)SSL_get_app_data2(ssl); + server_rec *s = r ? r->server : mySrvFromConn(conn); + + SSLSrvConfigRec *sc = mySrvConfig(s); + SSLDirConfigRec *dc = r ? myDirConfig(r) : NULL; + SSLConnRec *sslconn = myConnConfig(conn); + modssl_ctx_t *mctx = myCtxConfig(sslconn, sc); + + /* Get verify ingredients */ + int errnum = X509_STORE_CTX_get_error(ctx); + int errdepth = X509_STORE_CTX_get_error_depth(ctx); + int depth, verify; + + /* + * Log verification information + */ + ssl_log_cxerror(SSLLOG_MARK, APLOG_DEBUG, 0, conn, + X509_STORE_CTX_get_current_cert(ctx), APLOGNO(02275) + "Certificate Verification, depth %d, " + "CRL checking mode: %s", errdepth, + mctx->crl_check_mode == SSL_CRLCHECK_CHAIN ? + "chain" : (mctx->crl_check_mode == SSL_CRLCHECK_LEAF ? + "leaf" : "none")); + + /* + * Check for optionally acceptable non-verifiable issuer situation + */ + if (dc && (dc->nVerifyClient != SSL_CVERIFY_UNSET)) { + verify = dc->nVerifyClient; + } + else { + verify = mctx->auth.verify_mode; + } + + if (verify == SSL_CVERIFY_NONE) { + /* + * SSLProxyVerify is either not configured or set to "none". + * (this callback doesn't happen in the server context if SSLVerify + * is not configured or set to "none") + */ + return TRUE; + } + + if (ssl_verify_error_is_optional(errnum) && + (verify == SSL_CVERIFY_OPTIONAL_NO_CA)) + { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, conn, APLOGNO(02037) + "Certificate Verification: Verifiable Issuer is " + "configured as optional, therefore we're accepting " + "the certificate"); + + sslconn->verify_info = "GENEROUS"; + ok = TRUE; + } + + /* + * Expired certificates vs. "expired" CRLs: by default, OpenSSL + * turns X509_V_ERR_CRL_HAS_EXPIRED into a "certificate_expired(45)" + * SSL alert, but that's not really the message we should convey to the + * peer (at the very least, it's confusing, and in many cases, it's also + * inaccurate, as the certificate itself may very well not have expired + * yet). We set the X509_STORE_CTX error to something which OpenSSL's + * s3_both.c:ssl_verify_alarm_type() maps to SSL_AD_CERTIFICATE_UNKNOWN, + * i.e. the peer will receive a "certificate_unknown(46)" alert. + * We do not touch errnum, though, so that later on we will still log + * the "real" error, as returned by OpenSSL. + */ + if (!ok && errnum == X509_V_ERR_CRL_HAS_EXPIRED) { + X509_STORE_CTX_set_error(ctx, -1); + } + +#ifndef OPENSSL_NO_OCSP + /* + * Perform OCSP-based revocation checks + */ + if (ok && sc->server->ocsp_enabled) { + /* If there was an optional verification error, it's not + * possible to perform OCSP validation since the issuer may be + * missing/untrusted. Fail in that case. */ + if (ssl_verify_error_is_optional(errnum)) { + X509_STORE_CTX_set_error(ctx, X509_V_ERR_APPLICATION_VERIFICATION); + errnum = X509_V_ERR_APPLICATION_VERIFICATION; + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, conn, APLOGNO(02038) + "cannot perform OCSP validation for cert " + "if issuer has not been verified " + "(optional_no_ca configured)"); + ok = FALSE; + } else { + ok = modssl_verify_ocsp(ctx, sc, s, conn, conn->pool); + if (!ok) { + errnum = X509_STORE_CTX_get_error(ctx); + } + } + } +#endif + + /* + * If we already know it's not ok, log the real reason + */ + if (!ok) { + if (APLOGcinfo(conn)) { + ssl_log_cxerror(SSLLOG_MARK, APLOG_INFO, 0, conn, + X509_STORE_CTX_get_current_cert(ctx), APLOGNO(02276) + "Certificate Verification: Error (%d): %s", + errnum, X509_verify_cert_error_string(errnum)); + } else { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, conn, APLOGNO(02039) + "Certificate Verification: Error (%d): %s", + errnum, X509_verify_cert_error_string(errnum)); + } + + if (sslconn->client_cert) { + X509_free(sslconn->client_cert); + sslconn->client_cert = NULL; + } + sslconn->client_dn = NULL; + sslconn->verify_error = X509_verify_cert_error_string(errnum); + } + + /* + * Finally check the depth of the certificate verification + */ + if (dc && (dc->nVerifyDepth != UNSET)) { + depth = dc->nVerifyDepth; + } + else { + depth = mctx->auth.verify_depth; + } + + if (errdepth > depth) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, conn, APLOGNO(02040) + "Certificate Verification: Certificate Chain too long " + "(chain has %d certificates, but maximum allowed are " + "only %d)", + errdepth, depth); + + errnum = X509_V_ERR_CERT_CHAIN_TOO_LONG; + sslconn->verify_error = X509_verify_cert_error_string(errnum); + + ok = FALSE; + } + + /* + * And finally signal OpenSSL the (perhaps changed) state + */ + return ok; +} + +#define SSLPROXY_CERT_CB_LOG_FMT \ + "Proxy client certificate callback: (%s) " + +static void modssl_proxy_info_log(conn_rec *c, + X509_INFO *info, + const char *msg) +{ + ssl_log_cxerror(SSLLOG_MARK, APLOG_DEBUG, 0, c, info->x509, APLOGNO(02277) + SSLPROXY_CERT_CB_LOG_FMT "%s, sending", + (mySrvConfigFromConn(c))->vhost_id, msg); +} + +/* + * caller will decrement the cert and key reference + * so we need to increment here to prevent them from + * being freed. + */ +#define modssl_set_cert_info(info, cert, pkey) \ + *cert = info->x509; \ + CRYPTO_add(&(*cert)->references, +1, CRYPTO_LOCK_X509); \ + *pkey = info->x_pkey->dec_pkey; \ + CRYPTO_add(&(*pkey)->references, +1, CRYPTO_LOCK_X509_PKEY) + +int ssl_callback_proxy_cert(SSL *ssl, X509 **x509, EVP_PKEY **pkey) +{ + conn_rec *c = (conn_rec *)SSL_get_app_data(ssl); + server_rec *s = mySrvFromConn(c); + SSLSrvConfigRec *sc = mySrvConfig(s); + X509_NAME *ca_name, *issuer, *ca_issuer; + X509_INFO *info; + X509 *ca_cert; + STACK_OF(X509_NAME) *ca_list; + STACK_OF(X509_INFO) *certs = sc->proxy->pkp->certs; + STACK_OF(X509) *ca_certs; + STACK_OF(X509) **ca_cert_chains; + int i, j, k; + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02267) + SSLPROXY_CERT_CB_LOG_FMT "entered", + sc->vhost_id); + + if (!certs || (sk_X509_INFO_num(certs) <= 0)) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(02268) + SSLPROXY_CERT_CB_LOG_FMT + "downstream server wanted client certificate " + "but none are configured", sc->vhost_id); + return FALSE; + } + + ca_list = SSL_get_client_CA_list(ssl); + + if (!ca_list || (sk_X509_NAME_num(ca_list) <= 0)) { + /* + * downstream server didn't send us a list of acceptable CA certs, + * so we send the first client cert in the list. + */ + info = sk_X509_INFO_value(certs, 0); + + modssl_proxy_info_log(c, info, APLOGNO(02278) "no acceptable CA list"); + + modssl_set_cert_info(info, x509, pkey); + + return TRUE; + } + + ca_cert_chains = sc->proxy->pkp->ca_certs; + for (i = 0; i < sk_X509_NAME_num(ca_list); i++) { + ca_name = sk_X509_NAME_value(ca_list, i); + + for (j = 0; j < sk_X509_INFO_num(certs); j++) { + info = sk_X509_INFO_value(certs, j); + issuer = X509_get_issuer_name(info->x509); + + /* Search certs (by issuer name) one by one*/ + if (X509_NAME_cmp(issuer, ca_name) == 0) { + modssl_proxy_info_log(c, info, APLOGNO(02279) + "found acceptable cert"); + + modssl_set_cert_info(info, x509, pkey); + + return TRUE; + } + + if (ca_cert_chains) { + /* + * Failed to find direct issuer - search intermediates + * (by issuer name), if provided. + */ + ca_certs = ca_cert_chains[j]; + for (k = 0; k < sk_X509_num(ca_certs); k++) { + ca_cert = sk_X509_value(ca_certs, k); + ca_issuer = X509_get_issuer_name(ca_cert); + + if(X509_NAME_cmp(ca_issuer, ca_name) == 0 ) { + modssl_proxy_info_log(c, info, APLOGNO(02280) + "found acceptable cert by intermediate CA"); + + modssl_set_cert_info(info, x509, pkey); + + return TRUE; + } + } /* end loop through chained certs */ + } + } /* end loop through available certs */ + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02269) + SSLPROXY_CERT_CB_LOG_FMT + "no client certificate found!?", sc->vhost_id); + + return FALSE; +} + +static void ssl_session_log(server_rec *s, + const char *request, + unsigned char *id, + unsigned int idlen, + const char *status, + const char *result, + long timeout) +{ + char buf[SSL_SESSION_ID_STRING_LEN]; + char timeout_str[56] = {'\0'}; + + if (!APLOGdebug(s)) { + return; + } + + if (timeout) { + apr_snprintf(timeout_str, sizeof(timeout_str), + "timeout=%lds ", timeout); + } + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, s, + "Inter-Process Session Cache: " + "request=%s status=%s id=%s %s(session %s)", + request, status, + SSL_SESSION_id2sz(id, idlen, buf, sizeof(buf)), + timeout_str, result); +} + +/* + * This callback function is executed by OpenSSL whenever a new SSL_SESSION is + * added to the internal OpenSSL session cache. We use this hook to spread the + * SSL_SESSION also to the inter-process disk-cache to make share it with our + * other Apache pre-forked server processes. + */ +int ssl_callback_NewSessionCacheEntry(SSL *ssl, SSL_SESSION *session) +{ + /* Get Apache context back through OpenSSL context */ + conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl); + server_rec *s = mySrvFromConn(conn); + SSLSrvConfigRec *sc = mySrvConfig(s); + long timeout = sc->session_cache_timeout; + BOOL rc; + unsigned char *id; + unsigned int idlen; + + /* + * Set the timeout also for the internal OpenSSL cache, because this way + * our inter-process cache is consulted only when it's really necessary. + */ + SSL_set_timeout(session, timeout); + + /* + * Store the SSL_SESSION in the inter-process cache with the + * same expire time, so it expires automatically there, too. + */ +#ifdef OPENSSL_NO_SSL_INTERN + id = (unsigned char *)SSL_SESSION_get_id(session, &idlen); +#else + id = session->session_id; + idlen = session->session_id_length; +#endif + + rc = ssl_scache_store(s, id, idlen, + apr_time_from_sec(SSL_SESSION_get_time(session) + + timeout), + session, conn->pool); + + ssl_session_log(s, "SET", id, idlen, + rc == TRUE ? "OK" : "BAD", + "caching", timeout); + + /* + * return 0 which means to OpenSSL that the session is still + * valid and was not freed by us with SSL_SESSION_free(). + */ + return 0; +} + +/* + * This callback function is executed by OpenSSL whenever a + * SSL_SESSION is looked up in the internal OpenSSL cache and it + * was not found. We use this to lookup the SSL_SESSION in the + * inter-process disk-cache where it was perhaps stored by one + * of our other Apache pre-forked server processes. + */ +SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL *ssl, + unsigned char *id, + int idlen, int *do_copy) +{ + /* Get Apache context back through OpenSSL context */ + conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl); + server_rec *s = mySrvFromConn(conn); + SSL_SESSION *session; + + /* + * Try to retrieve the SSL_SESSION from the inter-process cache + */ + session = ssl_scache_retrieve(s, id, idlen, conn->pool); + + ssl_session_log(s, "GET", id, idlen, + session ? "FOUND" : "MISSED", + session ? "reuse" : "renewal", 0); + + /* + * Return NULL or the retrieved SSL_SESSION. But indicate (by + * setting do_copy to 0) that the reference count on the + * SSL_SESSION should not be incremented by the SSL library, + * because we will no longer hold a reference to it ourself. + */ + *do_copy = 0; + + return session; +} + +/* + * This callback function is executed by OpenSSL whenever a + * SSL_SESSION is removed from the the internal OpenSSL cache. + * We use this to remove the SSL_SESSION in the inter-process + * disk-cache, too. + */ +void ssl_callback_DelSessionCacheEntry(SSL_CTX *ctx, + SSL_SESSION *session) +{ + server_rec *s; + SSLSrvConfigRec *sc; + unsigned char *id; + unsigned int idlen; + + /* + * Get Apache context back through OpenSSL context + */ + if (!(s = (server_rec *)SSL_CTX_get_app_data(ctx))) { + return; /* on server shutdown Apache is already gone */ + } + + sc = mySrvConfig(s); + + /* + * Remove the SSL_SESSION from the inter-process cache + */ +#ifdef OPENSSL_NO_SSL_INTERN + id = (unsigned char *)SSL_SESSION_get_id(session, &idlen); +#else + id = session->session_id; + idlen = session->session_id_length; +#endif + + /* TODO: Do we need a temp pool here, or are we always shutting down? */ + ssl_scache_remove(s, id, idlen, sc->mc->pPool); + + ssl_session_log(s, "REM", id, idlen, + "OK", "dead", 0); + + return; +} + +/* Dump debugginfo trace to the log file. */ +static void log_tracing_state(const SSL *ssl, conn_rec *c, + server_rec *s, int where, int rc) +{ + /* + * create the various trace messages + */ + if (where & SSL_CB_HANDSHAKE_START) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Handshake: start", SSL_LIBRARY_NAME); + } + else if (where & SSL_CB_HANDSHAKE_DONE) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Handshake: done", SSL_LIBRARY_NAME); + } + else if (where & SSL_CB_LOOP) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Loop: %s", + SSL_LIBRARY_NAME, SSL_state_string_long(ssl)); + } + else if (where & SSL_CB_READ) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Read: %s", + SSL_LIBRARY_NAME, SSL_state_string_long(ssl)); + } + else if (where & SSL_CB_WRITE) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Write: %s", + SSL_LIBRARY_NAME, SSL_state_string_long(ssl)); + } + else if (where & SSL_CB_ALERT) { + char *str = (where & SSL_CB_READ) ? "read" : "write"; + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Alert: %s:%s:%s", + SSL_LIBRARY_NAME, str, + SSL_alert_type_string_long(rc), + SSL_alert_desc_string_long(rc)); + } + else if (where & SSL_CB_EXIT) { + if (rc == 0) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Exit: failed in %s", + SSL_LIBRARY_NAME, SSL_state_string_long(ssl)); + } + else if (rc < 0) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, + "%s: Exit: error in %s", + SSL_LIBRARY_NAME, SSL_state_string_long(ssl)); + } + } + + /* + * Because SSL renegotiations can happen at any time (not only after + * SSL_accept()), the best way to log the current connection details is + * right after a finished handshake. + */ + if (where & SSL_CB_HANDSHAKE_DONE) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02041) + "Protocol: %s, Cipher: %s (%s/%s bits)", + ssl_var_lookup(NULL, s, c, NULL, "SSL_PROTOCOL"), + ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER"), + ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER_USEKEYSIZE"), + ssl_var_lookup(NULL, s, c, NULL, "SSL_CIPHER_ALGKEYSIZE")); + } +} + +/* + * This callback function is executed while OpenSSL processes the SSL + * handshake and does SSL record layer stuff. It's used to trap + * client-initiated renegotiations, and for dumping everything to the + * log. + */ +void ssl_callback_Info(const SSL *ssl, int where, int rc) +{ + conn_rec *c; + server_rec *s; + SSLConnRec *scr; + + /* Retrieve the conn_rec and the associated SSLConnRec. */ + if ((c = (conn_rec *)SSL_get_app_data((SSL *)ssl)) == NULL) { + return; + } + + if ((scr = myConnConfig(c)) == NULL) { + return; + } + + /* If the reneg state is to reject renegotiations, check the SSL + * state machine and move to ABORT if a Client Hello is being + * read. */ + if ((where & SSL_CB_ACCEPT_LOOP) && scr->reneg_state == RENEG_REJECT) { + int state = SSL_get_state((SSL *)ssl); + + if (state == SSL3_ST_SR_CLNT_HELLO_A + || state == SSL23_ST_SR_CLNT_HELLO_A) { + scr->reneg_state = RENEG_ABORT; + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02042) + "rejecting client initiated renegotiation"); + } + } + /* If the first handshake is complete, change state to reject any + * subsequent client-initiated renegotiation. */ + else if ((where & SSL_CB_HANDSHAKE_DONE) && scr->reneg_state == RENEG_INIT) { + scr->reneg_state = RENEG_REJECT; + } + + s = mySrvFromConn(c); + if (s && APLOGdebug(s)) { + log_tracing_state(ssl, c, s, where, rc); + } +} + +#ifdef HAVE_TLSEXT +/* + * This callback function is executed when OpenSSL encounters an extended + * client hello with a server name indication extension ("SNI", cf. RFC 6066). + */ +int ssl_callback_ServerNameIndication(SSL *ssl, int *al, modssl_ctx_t *mctx) +{ + const char *servername = + SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); + conn_rec *c = (conn_rec *)SSL_get_app_data(ssl); + + if (c) { + if (servername) { + if (ap_vhost_iterate_given_conn(c, ssl_find_vhost, + (void *)servername)) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02043) + "SSL virtual host for servername %s found", + servername); + return SSL_TLSEXT_ERR_OK; + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02044) + "No matching SSL virtual host for servername " + "%s found (using default/first virtual host)", + servername); + /* + * RFC 6066 section 3 says "It is NOT RECOMMENDED to send + * a warning-level unrecognized_name(112) alert, because + * the client's behavior in response to warning-level alerts + * is unpredictable." + * + * To maintain backwards compatibility in mod_ssl, we + * no longer send any alert (neither warning- nor fatal-level), + * i.e. we take the second action suggested in RFC 6066: + * "If the server understood the ClientHello extension but + * does not recognize the server name, the server SHOULD take + * one of two actions: either abort the handshake by sending + * a fatal-level unrecognized_name(112) alert or continue + * the handshake." + */ + } + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02645) + "Server name not provided via TLS extension " + "(using default/first virtual host)"); + } + } + + return SSL_TLSEXT_ERR_NOACK; +} + +/* + * Find a (name-based) SSL virtual host where either the ServerName + * or one of the ServerAliases matches the supplied name (to be used + * with ap_vhost_iterate_given_conn()) + */ +static int ssl_find_vhost(void *servername, conn_rec *c, server_rec *s) +{ + SSLSrvConfigRec *sc; + SSL *ssl; + BOOL found = FALSE; + apr_array_header_t *names; + int i; + SSLConnRec *sslcon; + + /* check ServerName */ + if (!strcasecmp(servername, s->server_hostname)) { + found = TRUE; + } + + /* + * if not matched yet, check ServerAlias entries + * (adapted from vhost.c:matches_aliases()) + */ + if (!found) { + names = s->names; + if (names) { + char **name = (char **)names->elts; + for (i = 0; i < names->nelts; ++i) { + if (!name[i]) + continue; + if (!strcasecmp(servername, name[i])) { + found = TRUE; + break; + } + } + } + } + + /* if still no match, check ServerAlias entries with wildcards */ + if (!found) { + names = s->wild_names; + if (names) { + char **name = (char **)names->elts; + for (i = 0; i < names->nelts; ++i) { + if (!name[i]) + continue; + if (!ap_strcasecmp_match(servername, name[i])) { + found = TRUE; + break; + } + } + } + } + + /* set SSL_CTX (if matched) */ + sslcon = myConnConfig(c); + if (found && (ssl = sslcon->ssl) && + (sc = mySrvConfig(s))) { + SSL_CTX *ctx = SSL_set_SSL_CTX(ssl, sc->server->ssl_ctx); + /* + * SSL_set_SSL_CTX() only deals with the server cert, + * so we need to duplicate a few additional settings + * from the ctx by hand + */ + SSL_set_options(ssl, SSL_CTX_get_options(ctx)); + if ((SSL_get_verify_mode(ssl) == SSL_VERIFY_NONE) || + (SSL_num_renegotiations(ssl) == 0)) { + /* + * Only initialize the verification settings from the ctx + * if they are not yet set, or if we're called when a new + * SSL connection is set up (num_renegotiations == 0). + * Otherwise, we would possibly reset a per-directory + * configuration which was put into effect by ssl_hook_Access. + */ + SSL_set_verify(ssl, SSL_CTX_get_verify_mode(ctx), + SSL_CTX_get_verify_callback(ctx)); + } + + /* + * Adjust the session id context. ssl_init_ssl_connection() + * always picks the configuration of the first vhost when + * calling SSL_new(), but we want to tie the session to the + * vhost we have just switched to. Again, we have to make sure + * that we're not overwriting a session id context which was + * possibly set in ssl_hook_Access(), before triggering + * a renegotiation. + */ + if (SSL_num_renegotiations(ssl) == 0) { + unsigned char *sid_ctx = + (unsigned char *)ap_md5_binary(c->pool, + (unsigned char *)sc->vhost_id, + sc->vhost_id_len); + SSL_set_session_id_context(ssl, sid_ctx, APR_MD5_DIGESTSIZE*2); + } + + /* + * Save the found server into our SSLConnRec for later + * retrieval + */ + sslcon->server = s; + + /* + * There is one special filter callback, which is set + * very early depending on the base_server's log level. + * If this is not the first vhost we're now selecting + * (and the first vhost doesn't use APLOG_TRACE4), then + * we need to set that callback here. + */ + if (APLOGtrace4(s)) { + BIO_set_callback(SSL_get_rbio(ssl), ssl_io_data_cb); + BIO_set_callback_arg(SSL_get_rbio(ssl), (void *)ssl); + } + + return 1; + } + + return 0; +} +#endif /* HAVE_TLSEXT */ + +#ifdef HAVE_TLS_SESSION_TICKETS +/* + * This callback function is executed when OpenSSL needs a key for encrypting/ + * decrypting a TLS session ticket (RFC 5077) and a ticket key file has been + * configured through SSLSessionTicketKeyFile. + */ +int ssl_callback_SessionTicket(SSL *ssl, + unsigned char *keyname, + unsigned char *iv, + EVP_CIPHER_CTX *cipher_ctx, + HMAC_CTX *hctx, + int mode) +{ + conn_rec *c = (conn_rec *)SSL_get_app_data(ssl); + server_rec *s = mySrvFromConn(c); + SSLSrvConfigRec *sc = mySrvConfig(s); + SSLConnRec *sslconn = myConnConfig(c); + modssl_ctx_t *mctx = myCtxConfig(sslconn, sc); + modssl_ticket_key_t *ticket_key = mctx->ticket_key; + + if (mode == 1) { + /* + * OpenSSL is asking for a key for encrypting a ticket, + * see s3_srvr.c:ssl3_send_newsession_ticket() + */ + + if (ticket_key == NULL) { + /* should never happen, but better safe than sorry */ + return -1; + } + + memcpy(keyname, ticket_key->key_name, 16); + RAND_pseudo_bytes(iv, EVP_MAX_IV_LENGTH); + EVP_EncryptInit_ex(cipher_ctx, EVP_aes_128_cbc(), NULL, + ticket_key->aes_key, iv); + HMAC_Init_ex(hctx, ticket_key->hmac_secret, 16, tlsext_tick_md(), NULL); + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02289) + "TLS session ticket key for %s successfully set, " + "creating new session ticket", sc->vhost_id); + + return 0; + } + else if (mode == 0) { + /* + * OpenSSL is asking for the decryption key, + * see t1_lib.c:tls_decrypt_ticket() + */ + + /* check key name */ + if (ticket_key == NULL || memcmp(keyname, ticket_key->key_name, 16)) { + return 0; + } + + EVP_DecryptInit_ex(cipher_ctx, EVP_aes_128_cbc(), NULL, + ticket_key->aes_key, iv); + HMAC_Init_ex(hctx, ticket_key->hmac_secret, 16, tlsext_tick_md(), NULL); + + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02290) + "TLS session ticket key for %s successfully set, " + "decrypting existing session ticket", sc->vhost_id); + + return 1; + } + + /* OpenSSL is not expected to call us with modes other than 1 or 0 */ + return -1; +} +#endif /* HAVE_TLS_SESSION_TICKETS */ + +static int ssl_array_index(apr_array_header_t *array, + const unsigned char *s) +{ + int i; + for (i = 0; i < array->nelts; i++) { + const unsigned char *p = APR_ARRAY_IDX(array, i, const unsigned char*); + if (!strcmp((const char *)p, (const char *)s)) { + return i; + } + } + return -1; +} + +#ifdef HAVE_TLS_ALPN +/* + * Compare to ALPN protocol proposal. Result is similar to strcmp(): + * 0 gives same precedence, >0 means proto1 is prefered. + */ +static int ssl_cmp_alpn_protos(modssl_ctx_t *ctx, + const unsigned char *proto1, + const unsigned char *proto2) +{ + /* TODO: we should have a mod_ssl configuration parameter. */ + if (ctx && ctx->ssl_alpn_pref) { + int index1 = ssl_array_index(ctx->ssl_alpn_pref, proto1); + int index2 = ssl_array_index(ctx->ssl_alpn_pref, proto2); + if (index2 > index1) { + return (index1 >= 0)? 1 : -1; + } + else if (index1 > index2) { + return (index2 >= 0)? -1 : 1; + } + } + /* both have the same index (mabye -1 or no pref configured) and we compare + * the names so that spdy3 gets precedence over spdy2. That makes + * the outcome at least deterministic. */ + return strcmp((const char *)proto1, (const char *)proto2); +} + +/* + * This callback function is executed when the TLS Application Layer + * Protocol Negotiate Extension (ALPN, RFC 7301) is triggered by the client + * hello, giving a list of desired protocol names (in descending preference) + * to the server. + * The callback has to select a protocol name or return an error if none of + * the clients preferences is supported. + * The selected protocol does not have to be on the client list, according + * to RFC 7301, so no checks are performed. + * The client protocol list is serialized as length byte followed by ascii + * characters (not null-terminated), followed by the next protocol name. + */ +int ssl_callback_alpn_select(SSL *ssl, + const unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, void *arg) +{ + conn_rec *c = (conn_rec*)SSL_get_app_data(ssl); + SSLConnRec *sslconn = myConnConfig(c); + server_rec *s = mySrvFromConn(c); + SSLSrvConfigRec *sc = mySrvConfig(s); + modssl_ctx_t *mctx = myCtxConfig(sslconn, sc); + const unsigned char *alpn_http1 = (const unsigned char*)"http/1.1"; + apr_array_header_t *client_protos; + apr_array_header_t *proposed_protos; + int i; + + /* If the connection object is not available, + * then there's nothing for us to do. */ + if (c == NULL) { + return SSL_TLSEXT_ERR_OK; + } + + if (inlen == 0) { + // someone tries to trick us? + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02306) + "alpn client protocol list empty"); + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + + client_protos = apr_array_make(c->pool, 0, sizeof(char *)); + for (i = 0; i < inlen; /**/) { + unsigned int plen = in[i++]; + if (plen + i > inlen) { + // someone tries to trick us? + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02306) + "alpn protocol identier too long"); + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + APR_ARRAY_PUSH(client_protos, char*) = + apr_pstrndup(c->pool, (const char *)in+i, plen); + i += plen; + } + + /* Regardless of installed hooks, the http/1.1 protocol is always + * supported by us. Add it to the proposals if the client also + * offers it. */ + proposed_protos = apr_array_make(c->pool, client_protos->nelts+1, + sizeof(char *)); + if (ssl_array_index(client_protos, alpn_http1) >= 0) { + APR_ARRAY_PUSH(proposed_protos, const unsigned char*) = alpn_http1; + } + + if (sslconn->alpn_proposefns != NULL) { + /* Invoke our alpn_propos_proto hooks, giving other modules a chance to + * propose protocol names for selection. We might have several such + * hooks installed and if two make a proposal, we need to give + * preference to one. + */ + for (i = 0; i < sslconn->alpn_proposefns->nelts; i++) { + ssl_alpn_propose_protos fn = + APR_ARRAY_IDX(sslconn->alpn_proposefns, i, + ssl_alpn_propose_protos); + + if (fn(c, client_protos, proposed_protos) == DONE) + break; + } + } + + if (proposed_protos->nelts <= 0) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02306) + "none of the client alpn protocols are supported"); + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + + /* Now select the most preferred protocol from the proposals. */ + *out = APR_ARRAY_IDX(proposed_protos, 0, const unsigned char *); + for (i = 1; i < proposed_protos->nelts; ++i) { + const unsigned char *proto = APR_ARRAY_IDX(proposed_protos, i, + const unsigned char*); + /* Do we prefer it over existing candidate? */ + if (ssl_cmp_alpn_protos(mctx, *out, proto) < 0) { + *out = proto; + } + } + + size_t len = strlen((const char*)*out); + if (len > 255) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02306) + "alpn negotiated protocol name too long"); + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + *outlen = (unsigned char)len; + + return SSL_TLSEXT_ERR_OK; +} + +#elif defined(HAVE_TLS_NPN) +/* + * This callback function is executed when SSL needs to decide what protocols + * to advertise during Next Protocol Negotiation (NPN). It must produce a + * string in wire format -- a sequence of length-prefixed strings -- indicating + * the advertised protocols. Refer to SSL_CTX_set_next_protos_advertised_cb + * in OpenSSL for reference. + */ +int ssl_callback_AdvertiseNextProtos(SSL *ssl, const unsigned char **data_out, + unsigned int *size_out, void *arg) +{ + conn_rec *c = (conn_rec*)SSL_get_app_data(ssl); + SSLConnRec *sslconn = myConnConfig(c); + server_rec *s = mySrvFromConn(c); + SSLSrvConfigRec *sc = mySrvConfig(s); + modssl_ctx_t *mctx = myCtxConfig(sslconn, sc); + apr_array_header_t *protos; + int num_protos; + unsigned int size; + int i, j; + unsigned char *data; + unsigned char *start; + + *data_out = NULL; + *size_out = 0; + + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02306) + "advertisingNextProtos"); + + /* If the connection object is not available, or there are no NPN + * hooks registered, then there's nothing for us to do. */ + if (c == NULL || sslconn->alpn_proposefns == NULL) { + return SSL_TLSEXT_ERR_OK; + } + + /* Invoke our alpn_propose_proto hook, giving other modules a chance to + * add alternate protocol names to advertise. */ + protos = apr_array_make(c->pool, 0, sizeof(char *)); + for (i = 0; i < sslconn->alpn_proposefns->nelts; i++) { + ssl_alpn_propose_protos fn = + APR_ARRAY_IDX(sslconn->alpn_proposefns, i, ssl_alpn_propose_protos); + + if (fn(c, NULL, protos) == DONE) + break; + } + num_protos = protos->nelts; + + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(02306) + "alpn protos %d to advertise, %d in pref config", num_protos, mctx->ssl_alpn_pref->nelts ); + if (num_protos > 1 && mctx->ssl_alpn_pref && mctx->ssl_alpn_pref->nelts > 0) { + /* Sort the protocol names according to our configured preferences. */ + int insert_idx = 0; + for (i = 0; i < mctx->ssl_alpn_pref->nelts; ++i) { + const char *proto = APR_ARRAY_IDX(mctx->ssl_alpn_pref, i, const char*); + int idx = ssl_array_index(protos, proto); + if (idx > insert_idx) { + /* bubble found protocol up */ + for (j = idx; j > insert_idx; --j) { + ((const char **)protos->elts)[j] = ((const char **)protos->elts)[j-1]; + } + ((const char **)protos->elts)[insert_idx] = proto; + ++insert_idx; + } + } + } + + /* We now have a list of null-terminated strings; we need to concatenate + * them together into a single string, where each protocol name is prefixed + * by its length. First, calculate how long that string will be. */ + size = 0; + for (i = 0; i < num_protos; ++i) { + const char *string = APR_ARRAY_IDX(protos, i, const char*); + unsigned int length = strlen(string); + /* If the protocol name is too long (the length must fit in one byte), + * then log an error and skip it. */ + if (length > 255) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02307) + "SSL NPN protocol name too long (length=%u): %s", + length, string); + continue; + } + /* Leave room for the length prefix (one byte) plus the protocol name + * itself. */ + size += 1 + length; + } + + /* If there is nothing to advertise (either because no modules added + * anything to the protos array, or because all strings added to the array + * were skipped), then we're done. */ + if (size == 0) { + return SSL_TLSEXT_ERR_OK; + } + + /* Now we can build the string. Copy each protocol name string into the + * larger string, prefixed by its length. */ + data = apr_palloc(c->pool, size * sizeof(unsigned char)); + start = data; + for (i = 0; i < num_protos; ++i) { + const char *string = APR_ARRAY_IDX(protos, i, const char*); + apr_size_t length = strlen(string); + if (length > 255) + continue; + *start = (unsigned char)length; + ++start; + memcpy(start, string, length * sizeof(unsigned char)); + start += length; + } + + /* Success. */ + *data_out = data; + *size_out = size; + return SSL_TLSEXT_ERR_OK; +} + +#endif /* HAVE_TLS_NPN */ + +#ifdef HAVE_SRP + +int ssl_callback_SRPServerParams(SSL *ssl, int *ad, void *arg) +{ + modssl_ctx_t *mctx = (modssl_ctx_t *)arg; + char *username = SSL_get_srp_username(ssl); + SRP_user_pwd *u; + + if (username == NULL + || (u = SRP_VBASE_get_by_user(mctx->srp_vbase, username)) == NULL) { + *ad = SSL_AD_UNKNOWN_PSK_IDENTITY; + return SSL3_AL_FATAL; + } + + if (SSL_set_srp_server_param(ssl, u->N, u->g, u->s, u->v, u->info) < 0) { + *ad = SSL_AD_INTERNAL_ERROR; + return SSL3_AL_FATAL; + } + + /* reset all other options */ + SSL_set_verify(ssl, SSL_VERIFY_NONE, ssl_callback_SSLVerify); + return SSL_ERROR_NONE; +} + +#endif /* HAVE_SRP */ diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_log.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_log.c new file mode 100644 index 0000000000..2c87638fa4 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_log.c @@ -0,0 +1,238 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_log.c + * Logging Facility + */ + /* ``The difference between a computer + industry job and open-source software + hacking is about 30 hours a week.'' + -- Ralf S. Engelschall */ +#include "ssl_private.h" + +/* _________________________________________________________________ +** +** Logfile Support +** _________________________________________________________________ +*/ + +static const struct { + const char *cpPattern; + const char *cpAnnotation; +} ssl_log_annotate[] = { + { "*envelope*bad*decrypt*", "wrong pass phrase!?" }, + { "*CLIENT_HELLO*unknown*protocol*", "speaking not SSL to HTTPS port!?" }, + { "*CLIENT_HELLO*http*request*", "speaking HTTP to HTTPS port!?" }, + { "*SSL3_READ_BYTES:sslv3*alert*bad*certificate*", "Subject CN in certificate not server name or identical to CA!?" }, + { "*self signed certificate in certificate chain*", "Client certificate signed by CA not known to server?" }, + { "*peer did not return a certificate*", "No CAs known to server for verification?" }, + { "*no shared cipher*", "Too restrictive SSLCipherSuite or using DSA server certificate?" }, + { "*no start line*", "Bad file contents or format - or even just a forgotten SSLCertificateKeyFile?" }, + { "*bad password read*", "You entered an incorrect pass phrase!?" }, + { "*bad mac decode*", "Browser still remembered details of a re-created server certificate?" }, + { NULL, NULL } +}; + +static const char *ssl_log_annotation(const char *error) +{ + int i = 0; + + while (ssl_log_annotate[i].cpPattern != NULL + && ap_strcmp_match(error, ssl_log_annotate[i].cpPattern) != 0) + i++; + + return ssl_log_annotate[i].cpAnnotation; +} + +apr_status_t ssl_die(server_rec *s) +{ + if (s != NULL && s->is_virtual && s->error_fname != NULL) + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, NULL, APLOGNO(02311) + "Fatal error initialising mod_ssl, exiting. " + "See %s for more information", + ap_server_root_relative(s->process->pool, + s->error_fname)); + else + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, NULL, APLOGNO(02312) + "Fatal error initialising mod_ssl, exiting."); + + return APR_EGENERAL; +} + +/* + * Prints the SSL library error information. + */ +void ssl_log_ssl_error(const char *file, int line, int level, server_rec *s) +{ + unsigned long e; + const char *data; + int flags; + + while ((e = ERR_peek_error_line_data(NULL, NULL, &data, &flags))) { + const char *annotation; + char err[256]; + + if (!(flags & ERR_TXT_STRING)) { + data = NULL; + } + + ERR_error_string_n(e, err, sizeof err); + annotation = ssl_log_annotation(err); + + ap_log_error(file, line, APLOG_MODULE_INDEX, level, 0, s, + "SSL Library Error: %s%s%s%s%s%s", + /* %s */ + err, + /* %s%s%s */ + data ? " (" : "", data ? data : "", data ? ")" : "", + /* %s%s */ + annotation ? " -- " : "", + annotation ? annotation : ""); + + /* Pop the error off the stack: */ + ERR_get_error(); + } +} + +static void ssl_log_cert_error(const char *file, int line, int level, + apr_status_t rv, const server_rec *s, + const conn_rec *c, const request_rec *r, + apr_pool_t *p, X509 *cert, const char *format, + va_list ap) +{ + char buf[HUGE_STRING_LEN]; + int msglen, n; + char *name; + + apr_vsnprintf(buf, sizeof buf, format, ap); + + msglen = strlen(buf); + + if (cert) { + BIO *bio = BIO_new(BIO_s_mem()); + + if (bio) { + /* + * Limit the maximum length of the subject and issuer DN strings + * in the log message. 300 characters should always be sufficient + * for holding both the timestamp, module name, pid etc. stuff + * at the beginning of the line and the trailing information about + * serial, notbefore and notafter. + */ + int maxdnlen = (HUGE_STRING_LEN - msglen - 300) / 2; + + BIO_puts(bio, " [subject: "); + name = SSL_X509_NAME_to_string(p, X509_get_subject_name(cert), + maxdnlen); + if (!strIsEmpty(name)) { + BIO_puts(bio, name); + } else { + BIO_puts(bio, "-empty-"); + } + + BIO_puts(bio, " / issuer: "); + name = SSL_X509_NAME_to_string(p, X509_get_issuer_name(cert), + maxdnlen); + if (!strIsEmpty(name)) { + BIO_puts(bio, name); + } else { + BIO_puts(bio, "-empty-"); + } + + BIO_puts(bio, " / serial: "); + if (i2a_ASN1_INTEGER(bio, X509_get_serialNumber(cert)) == -1) + BIO_puts(bio, "(ERROR)"); + + BIO_puts(bio, " / notbefore: "); + ASN1_TIME_print(bio, X509_get_notBefore(cert)); + + BIO_puts(bio, " / notafter: "); + ASN1_TIME_print(bio, X509_get_notAfter(cert)); + + BIO_puts(bio, "]"); + + n = BIO_read(bio, buf + msglen, sizeof buf - msglen - 1); + if (n > 0) + buf[msglen + n] = '\0'; + + BIO_free(bio); + } + } + else { + apr_snprintf(buf + msglen, sizeof buf - msglen, + " [certificate: -not available-]"); + } + + if (r) { + ap_log_rerror(file, line, APLOG_MODULE_INDEX, level, rv, r, "%s", buf); + } + else if (c) { + ap_log_cerror(file, line, APLOG_MODULE_INDEX, level, rv, c, "%s", buf); + } + else if (s) { + ap_log_error(file, line, APLOG_MODULE_INDEX, level, rv, s, "%s", buf); + } + +} + +/* + * Wrappers for ap_log_error/ap_log_cerror/ap_log_rerror which log additional + * details of the X509 cert. For ssl_log_xerror, a pool needs to be passed in + * as well (for temporary allocation of the cert's subject/issuer name strings, + * in the other cases we use the connection and request pool, respectively). + */ +void ssl_log_xerror(const char *file, int line, int level, apr_status_t rv, + apr_pool_t *ptemp, server_rec *s, X509 *cert, + const char *fmt, ...) +{ + if (APLOG_IS_LEVEL(s,level)) { + va_list ap; + va_start(ap, fmt); + ssl_log_cert_error(file, line, level, rv, s, NULL, NULL, ptemp, + cert, fmt, ap); + va_end(ap); + } +} + +void ssl_log_cxerror(const char *file, int line, int level, apr_status_t rv, + conn_rec *c, X509 *cert, const char *fmt, ...) +{ + if (APLOG_IS_LEVEL(mySrvFromConn(c),level)) { + va_list ap; + va_start(ap, fmt); + ssl_log_cert_error(file, line, level, rv, NULL, c, NULL, c->pool, + cert, fmt, ap); + va_end(ap); + } +} + +void ssl_log_rxerror(const char *file, int line, int level, apr_status_t rv, + request_rec *r, X509 *cert, const char *fmt, ...) +{ + if (APLOG_R_IS_LEVEL(r,level)) { + va_list ap; + va_start(ap, fmt); + ssl_log_cert_error(file, line, level, rv, NULL, NULL, r, r->pool, + cert, fmt, ap); + va_end(ap); + } +} diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_mutex.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_mutex.c new file mode 100644 index 0000000000..e915a163d2 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_mutex.c @@ -0,0 +1,111 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_mutex.c + * Semaphore for Mutual Exclusion + */ + /* ``Real programmers confuse + Christmas and Halloween + because DEC 25 = OCT 31.'' + -- Unknown */ + +#include "ssl_private.h" + +int ssl_mutex_init(server_rec *s, apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + + /* A mutex is only needed if a session cache is configured, and + * the provider used is not internally multi-process/thread + * safe. */ + if (!mc->sesscache + || (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) == 0) { + return TRUE; + } + + if (mc->pMutex) { + return TRUE; + } + + if ((rv = ap_global_mutex_create(&mc->pMutex, NULL, SSL_CACHE_MUTEX_TYPE, + NULL, s, s->process->pool, 0)) + != APR_SUCCESS) { + return FALSE; + } + + return TRUE; +} + +int ssl_mutex_reinit(server_rec *s, apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + const char *lockfile; + + if (mc->pMutex == NULL || !mc->sesscache + || (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) == 0) { + return TRUE; + } + + lockfile = apr_global_mutex_lockfile(mc->pMutex); + if ((rv = apr_global_mutex_child_init(&mc->pMutex, + lockfile, + p)) != APR_SUCCESS) { + if (lockfile) + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(02024) + "Cannot reinit %s mutex with file `%s'", + SSL_CACHE_MUTEX_TYPE, lockfile); + else + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(02025) + "Cannot reinit %s mutex", SSL_CACHE_MUTEX_TYPE); + return FALSE; + } + return TRUE; +} + +int ssl_mutex_on(server_rec *s) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + + if ((rv = apr_global_mutex_lock(mc->pMutex)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(02026) + "Failed to acquire SSL session cache lock"); + return FALSE; + } + return TRUE; +} + +int ssl_mutex_off(server_rec *s) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + + if ((rv = apr_global_mutex_unlock(mc->pMutex)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(02027) + "Failed to release SSL session cache lock"); + return FALSE; + } + return TRUE; +} + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_ocsp.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_ocsp.c new file mode 100644 index 0000000000..0ac223ac03 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_ocsp.c @@ -0,0 +1,300 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ssl_private.h" + +#ifndef OPENSSL_NO_OCSP +#include "apr_base64.h" + +/* Return the responder URI specified in the given certificate, or + * NULL if none specified. */ +static const char *extract_responder_uri(X509 *cert, apr_pool_t *pool) +{ + STACK_OF(ACCESS_DESCRIPTION) *values; + char *result = NULL; + int j; + + values = X509_get_ext_d2i(cert, NID_info_access, NULL, NULL); + if (!values) { + return NULL; + } + + for (j = 0; j < sk_ACCESS_DESCRIPTION_num(values) && !result; j++) { + ACCESS_DESCRIPTION *value = sk_ACCESS_DESCRIPTION_value(values, j); + + /* Name found in extension, and is a URI: */ + if (OBJ_obj2nid(value->method) == NID_ad_OCSP + && value->location->type == GEN_URI) { + result = apr_pstrdup(pool, + (char *)value->location->d.uniformResourceIdentifier->data); + } + } + + AUTHORITY_INFO_ACCESS_free(values); + + return result; +} + +/* Return the responder URI object which should be used in the given + * configuration for the given certificate, or NULL if none can be + * determined. */ +static apr_uri_t *determine_responder_uri(SSLSrvConfigRec *sc, X509 *cert, + conn_rec *c, apr_pool_t *p) +{ + apr_uri_t *u = apr_palloc(p, sizeof *u); + const char *s; + apr_status_t rv; + + /* Use default responder URL if forced by configuration, else use + * certificate-specified responder, falling back to default if + * necessary and possible. */ + if (sc->server->ocsp_force_default) { + s = sc->server->ocsp_responder; + } + else { + s = extract_responder_uri(cert, p); + + if (s == NULL && sc->server->ocsp_responder) { + s = sc->server->ocsp_responder; + } + } + + if (s == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01918) + "no OCSP responder specified in certificate and " + "no default configured"); + return NULL; + } + + rv = apr_uri_parse(p, s, u); + if (rv || !u->hostname) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c, APLOGNO(01919) + "failed to parse OCSP responder URI '%s'", s); + return NULL; + } + + if (strcasecmp(u->scheme, "http") != 0) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c, APLOGNO(01920) + "cannot handle OCSP responder URI '%s'", s); + return NULL; + } + + if (!u->port) { + u->port = apr_uri_port_of_scheme(u->scheme); + } + + return u; +} + +/* Create an OCSP request for the given certificate; returning the + * certificate ID in *certid and *issuer on success. Returns the + * request object on success, or NULL on error. */ +static OCSP_REQUEST *create_request(X509_STORE_CTX *ctx, X509 *cert, + OCSP_CERTID **certid, + server_rec *s, apr_pool_t *p, + SSLSrvConfigRec *sc) +{ + OCSP_REQUEST *req = OCSP_REQUEST_new(); + + *certid = OCSP_cert_to_id(NULL, cert, ctx->current_issuer); + if (!*certid || !OCSP_request_add0_id(req, *certid)) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01921) + "could not retrieve certificate id"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + return NULL; + } + + if (sc->server->ocsp_use_request_nonce != FALSE) { + OCSP_request_add1_nonce(req, 0, -1); + } + + return req; +} + +/* Verify the OCSP status of given certificate. Returns + * V_OCSP_CERTSTATUS_* result code. */ +static int verify_ocsp_status(X509 *cert, X509_STORE_CTX *ctx, conn_rec *c, + SSLSrvConfigRec *sc, server_rec *s, + apr_pool_t *pool) +{ + int rc = V_OCSP_CERTSTATUS_GOOD; + OCSP_RESPONSE *response = NULL; + OCSP_BASICRESP *basicResponse = NULL; + OCSP_REQUEST *request = NULL; + OCSP_CERTID *certID = NULL; + apr_uri_t *ruri; + + ruri = determine_responder_uri(sc, cert, c, pool); + if (!ruri) { + return V_OCSP_CERTSTATUS_UNKNOWN; + } + + request = create_request(ctx, cert, &certID, s, pool, sc); + if (request) { + apr_interval_time_t to = sc->server->ocsp_responder_timeout == UNSET ? + apr_time_from_sec(DEFAULT_OCSP_TIMEOUT) : + sc->server->ocsp_responder_timeout; + response = modssl_dispatch_ocsp_request(ruri, to, request, c, pool); + } + + if (!request || !response) { + rc = V_OCSP_CERTSTATUS_UNKNOWN; + } + + if (rc == V_OCSP_CERTSTATUS_GOOD) { + int r = OCSP_response_status(response); + + if (r != OCSP_RESPONSE_STATUS_SUCCESSFUL) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01922) + "OCSP response not successful: %d", rc); + rc = V_OCSP_CERTSTATUS_UNKNOWN; + } + } + + if (rc == V_OCSP_CERTSTATUS_GOOD) { + basicResponse = OCSP_response_get1_basic(response); + if (!basicResponse) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01923) + "could not retrieve OCSP basic response"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + rc = V_OCSP_CERTSTATUS_UNKNOWN; + } + } + + if (rc == V_OCSP_CERTSTATUS_GOOD && + sc->server->ocsp_use_request_nonce != FALSE && + OCSP_check_nonce(request, basicResponse) != 1) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01924) + "Bad OCSP responder answer (bad nonce)"); + rc = V_OCSP_CERTSTATUS_UNKNOWN; + } + + if (rc == V_OCSP_CERTSTATUS_GOOD) { + /* TODO: allow flags configuration. */ + if (OCSP_basic_verify(basicResponse, NULL, ctx->ctx, 0) != 1) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01925) + "failed to verify the OCSP response"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + rc = V_OCSP_CERTSTATUS_UNKNOWN; + } + } + + if (rc == V_OCSP_CERTSTATUS_GOOD) { + int reason = -1, status; + ASN1_GENERALIZEDTIME *thisup = NULL, *nextup = NULL; + + rc = OCSP_resp_find_status(basicResponse, certID, &status, + &reason, NULL, &thisup, &nextup); + if (rc != 1) { + ssl_log_cxerror(SSLLOG_MARK, APLOG_ERR, 0, c, cert, APLOGNO(02272) + "failed to retrieve OCSP response status"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + rc = V_OCSP_CERTSTATUS_UNKNOWN; + } + else { + rc = status; + } + + /* Check whether the response is inside the defined validity + * period; otherwise fail. */ + if (rc != V_OCSP_CERTSTATUS_UNKNOWN) { + long resptime_skew = sc->server->ocsp_resptime_skew == UNSET ? + DEFAULT_OCSP_MAX_SKEW : sc->server->ocsp_resptime_skew; + /* oscp_resp_maxage can be passed verbatim - UNSET (-1) means + * that responses can be of any age as long as nextup is in the + * future. */ + int vrc = OCSP_check_validity(thisup, nextup, resptime_skew, + sc->server->ocsp_resp_maxage); + if (vrc != 1) { + ssl_log_cxerror(SSLLOG_MARK, APLOG_ERR, 0, c, cert, APLOGNO(02273) + "OCSP response outside validity period"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + rc = V_OCSP_CERTSTATUS_UNKNOWN; + } + } + + { + int level = + (status == V_OCSP_CERTSTATUS_GOOD) ? APLOG_INFO : APLOG_ERR; + const char *result = + status == V_OCSP_CERTSTATUS_GOOD ? "good" : + (status == V_OCSP_CERTSTATUS_REVOKED ? "revoked" : "unknown"); + + ssl_log_cxerror(SSLLOG_MARK, level, 0, c, cert, + "OCSP validation completed, " + "certificate status: %s (%d, %d)", + result, status, reason); + } + } + + if (request) OCSP_REQUEST_free(request); + if (response) OCSP_RESPONSE_free(response); + if (basicResponse) OCSP_BASICRESP_free(basicResponse); + /* certID is freed when the request is freed */ + + return rc; +} + +int modssl_verify_ocsp(X509_STORE_CTX *ctx, SSLSrvConfigRec *sc, + server_rec *s, conn_rec *c, apr_pool_t *pool) +{ + X509 *cert = X509_STORE_CTX_get_current_cert(ctx); + apr_pool_t *vpool; + int rv; + + if (!cert) { + /* starting with OpenSSL 1.0, X509_STORE_CTX_get_current_cert() + * may yield NULL. Return early, but leave the ctx error as is. */ + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "No cert available to check with OCSP"); + return 1; + } + else if (cert->valid && X509_check_issued(cert,cert) == X509_V_OK) { + /* don't do OCSP checking for valid self-issued certs */ + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "Skipping OCSP check for valid self-issued cert"); + X509_STORE_CTX_set_error(ctx, X509_V_OK); + return 1; + } + + /* Create a temporary pool to constrain memory use (the passed-in + * pool may be e.g. a connection pool). */ + apr_pool_create(&vpool, pool); + + rv = verify_ocsp_status(cert, ctx, c, sc, s, vpool); + + apr_pool_destroy(vpool); + + /* Propagate the verification status back to the passed-in + * context. */ + switch (rv) { + case V_OCSP_CERTSTATUS_GOOD: + X509_STORE_CTX_set_error(ctx, X509_V_OK); + break; + + case V_OCSP_CERTSTATUS_REVOKED: + X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_REVOKED); + break; + + case V_OCSP_CERTSTATUS_UNKNOWN: + /* correct error code for application errors? */ + X509_STORE_CTX_set_error(ctx, X509_V_ERR_APPLICATION_VERIFICATION); + break; + } + + return rv == V_OCSP_CERTSTATUS_GOOD; +} +#endif /* HAVE_OCSP */ diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_pphrase.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_pphrase.c new file mode 100644 index 0000000000..a1f8734cab --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_pphrase.c @@ -0,0 +1,623 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_pphrase.c + * Pass Phrase Dialog + */ + /* ``Treat your password like your + toothbrush. Don't let anybody + else use it, and get a new one + every six months.'' + -- Clifford Stoll */ +#include "ssl_private.h" + +typedef struct { + server_rec *s; + apr_pool_t *p; + apr_array_header_t *aPassPhrase; + int nPassPhraseCur; + char *cpPassPhraseCur; + int nPassPhraseDialog; + int nPassPhraseDialogCur; + BOOL bPassPhraseDialogOnce; + const char *key_id; + const char *pkey_file; +} pphrase_cb_arg_t; + +#ifdef HAVE_ECC +static const char *key_types[] = {"RSA", "DSA", "ECC"}; +#else +static const char *key_types[] = {"RSA", "DSA"}; +#endif + +/* + * Return true if the named file exists and is readable + */ + +static apr_status_t exists_and_readable(const char *fname, apr_pool_t *pool, + apr_time_t *mtime) +{ + apr_status_t stat; + apr_finfo_t sbuf; + apr_file_t *fd; + + if ((stat = apr_stat(&sbuf, fname, APR_FINFO_MIN, pool)) != APR_SUCCESS) + return stat; + + if (sbuf.filetype != APR_REG) + return APR_EGENERAL; + + if ((stat = apr_file_open(&fd, fname, APR_READ, 0, pool)) != APR_SUCCESS) + return stat; + + if (mtime) { + *mtime = sbuf.mtime; + } + + apr_file_close(fd); + return APR_SUCCESS; +} + +/* + * reuse vhost keys for asn1 tables where keys are allocated out + * of s->process->pool to prevent "leaking" each time we format + * a vhost key. since the key is stored in a table with lifetime + * of s->process->pool, the key needs to have the same lifetime. + * + * XXX: probably seems silly to use a hash table with keys and values + * being the same, but it is easier than doing a linear search + * and will make it easier to remove keys if needed in the future. + * also have the problem with apr_array_header_t that if we + * underestimate the number of vhost keys when we apr_array_make(), + * the array will get resized when we push past the initial number + * of elts. this resizing in the s->process->pool means "leaking" + * since apr_array_push() will apr_alloc arr->nalloc * 2 elts, + * leaving the original arr->elts to waste. + */ +static const char *asn1_table_vhost_key(SSLModConfigRec *mc, apr_pool_t *p, + const char *id, int i) +{ + /* 'p' pool used here is cleared on restarts (or sooner) */ + char *key = apr_psprintf(p, "%s:%d", id, i); + void *keyptr = apr_hash_get(mc->tVHostKeys, key, + APR_HASH_KEY_STRING); + + if (!keyptr) { + /* make a copy out of s->process->pool */ + keyptr = apr_pstrdup(mc->pPool, key); + apr_hash_set(mc->tVHostKeys, keyptr, + APR_HASH_KEY_STRING, keyptr); + } + + return (char *)keyptr; +} + +/* _________________________________________________________________ +** +** Pass Phrase and Private Key Handling +** _________________________________________________________________ +*/ + +#define BUILTIN_DIALOG_BACKOFF 2 +#define BUILTIN_DIALOG_RETRIES 5 + +static apr_file_t *writetty = NULL; +static apr_file_t *readtty = NULL; + +int ssl_pphrase_Handle_CB(char *, int, int, void *); + +static char *pphrase_array_get(apr_array_header_t *arr, int idx) +{ + if ((idx < 0) || (idx >= arr->nelts)) { + return NULL; + } + + return ((char **)arr->elts)[idx]; +} + +apr_status_t ssl_load_encrypted_pkey(server_rec *s, apr_pool_t *p, int idx, + const char *pkey_file, + apr_array_header_t **pphrases) +{ + SSLModConfigRec *mc = myModConfig(s); + SSLSrvConfigRec *sc = mySrvConfig(s); + const char *key_id = asn1_table_vhost_key(mc, p, sc->vhost_id, idx); + EVP_PKEY *pPrivateKey = NULL; + ssl_asn1_t *asn1; + unsigned char *ucp; + long int length; + BOOL bReadable; + int nPassPhrase = (*pphrases)->nelts; + int nPassPhraseRetry = 0; + apr_time_t pkey_mtime = 0; + apr_status_t rv; + pphrase_cb_arg_t ppcb_arg; + + if (!pkey_file) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02573) + "Init: No private key specified for %s", key_id); + return ssl_die(s); + } + else if ((rv = exists_and_readable(pkey_file, p, &pkey_mtime)) + != APR_SUCCESS ) { + ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, APLOGNO(02574) + "Init: Can't open server private key file %s", pkey_file); + return ssl_die(s); + } + + ppcb_arg.s = s; + ppcb_arg.p = p; + ppcb_arg.aPassPhrase = *pphrases; + ppcb_arg.nPassPhraseCur = 0; + ppcb_arg.cpPassPhraseCur = NULL; + ppcb_arg.nPassPhraseDialog = 0; + ppcb_arg.nPassPhraseDialogCur = 0; + ppcb_arg.bPassPhraseDialogOnce = TRUE; + ppcb_arg.key_id = key_id; + ppcb_arg.pkey_file = pkey_file; + + /* + * if the private key is encrypted and SSLPassPhraseDialog + * is configured to "builtin" it isn't possible to prompt for + * a password after httpd has detached from the tty. + * in this case if we already have a private key and the + * file name/mtime hasn't changed, then reuse the existing key. + * we also reuse existing private keys that were encrypted for + * exec: and pipe: dialogs to minimize chances to snoop the + * password. that and pipe: dialogs might prompt the user + * for password, which on win32 for example could happen 4 + * times at startup. twice for each child and twice within + * each since apache "restarts itself" on startup. + * of course this will not work for the builtin dialog if + * the server was started without LoadModule ssl_module + * configured, then restarted with it configured. + * but we fall through with a chance of success if the key + * is not encrypted or can be handled via exec or pipe dialog. + * and in the case of fallthrough, pkey_mtime and isatty() + * are used to give a better idea as to what failed. + */ + if (pkey_mtime) { + ssl_asn1_t *asn1 = ssl_asn1_table_get(mc->tPrivateKey, key_id); + if (asn1 && (asn1->source_mtime == pkey_mtime)) { + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(02575) + "Reusing existing private key from %s on restart", + ppcb_arg.pkey_file); + return APR_SUCCESS; + } + } + + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(02576) + "Attempting to load encrypted (?) private key %s", key_id); + + for (;;) { + /* + * Try to read the private key file with the help of + * the callback function which serves the pass + * phrases to OpenSSL + */ + + ppcb_arg.cpPassPhraseCur = NULL; + + /* Ensure that the error stack is empty; some SSL + * functions will fail spuriously if the error stack + * is not empty. */ + ERR_clear_error(); + + bReadable = ((pPrivateKey = SSL_read_PrivateKey(ppcb_arg.pkey_file, + NULL, ssl_pphrase_Handle_CB, &ppcb_arg)) != NULL ? + TRUE : FALSE); + + /* + * when the private key file now was readable, + * it's fine and we go out of the loop + */ + if (bReadable) + break; + + /* + * when we have more remembered pass phrases + * try to reuse these first. + */ + if (ppcb_arg.nPassPhraseCur < nPassPhrase) { + ppcb_arg.nPassPhraseCur++; + continue; + } + + /* + * else it's not readable and we have no more + * remembered pass phrases. Then this has to mean + * that the callback function popped up the dialog + * but a wrong pass phrase was entered. We give the + * user (but not the dialog program) a few more + * chances... + */ +#ifndef WIN32 + if ((sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN + || sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE) +#else + if (sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE +#endif + && ppcb_arg.cpPassPhraseCur != NULL + && nPassPhraseRetry < BUILTIN_DIALOG_RETRIES ) { + apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase incorrect " + "(%d more retr%s permitted).\n", + (BUILTIN_DIALOG_RETRIES-nPassPhraseRetry), + (BUILTIN_DIALOG_RETRIES-nPassPhraseRetry) == 1 ? "y" : "ies"); + nPassPhraseRetry++; + if (nPassPhraseRetry > BUILTIN_DIALOG_BACKOFF) + apr_sleep((nPassPhraseRetry-BUILTIN_DIALOG_BACKOFF) + * 5 * APR_USEC_PER_SEC); + continue; + } +#ifdef WIN32 + if (sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02577) + "Init: SSLPassPhraseDialog builtin is not " + "supported on Win32 (key file " + "%s)", ppcb_arg.pkey_file); + return ssl_die(s); + } +#endif /* WIN32 */ + + /* + * Ok, anything else now means a fatal error. + */ + if (ppcb_arg.cpPassPhraseCur == NULL) { + if (ppcb_arg.nPassPhraseDialogCur && pkey_mtime && + !isatty(fileno(stdout))) /* XXX: apr_isatty() */ + { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, + s, APLOGNO(02578) + "Init: Unable to read pass phrase " + "[Hint: key introduced or changed " + "before restart?]"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + } + else { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, + s, APLOGNO(02579) "Init: Private key not found"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, s); + } + if (writetty) { + apr_file_printf(writetty, "Apache:mod_ssl:Error: Private key not found.\n"); + apr_file_printf(writetty, "**Stopped\n"); + } + } + else { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02580) + "Init: Pass phrase incorrect for key %s", + key_id); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + + if (writetty) { + apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase incorrect.\n"); + apr_file_printf(writetty, "**Stopped\n"); + } + } + return ssl_die(s); + } + + if (pPrivateKey == NULL) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02581) + "Init: Unable to read server private key from file %s", + ppcb_arg.pkey_file); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); + return ssl_die(s); + } + + /* + * Log the type of reading + */ + if (ppcb_arg.nPassPhraseDialogCur == 0) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02582) + "unencrypted %s private key - pass phrase not " + "required", key_id); + } + else { + if (ppcb_arg.cpPassPhraseCur != NULL) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, + s, APLOGNO(02583) + "encrypted %s private key - pass phrase " + "requested", key_id); + } + else { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, + s, APLOGNO(02584) + "encrypted %s private key - pass phrase" + " reused", key_id); + } + } + + /* + * Ok, when we have one more pass phrase store it + */ + if (ppcb_arg.cpPassPhraseCur != NULL) { + *(const char **)apr_array_push(ppcb_arg.aPassPhrase) = + ppcb_arg.cpPassPhraseCur; + nPassPhrase++; + } + + /* + * Insert private key into the global module configuration + * (we convert it to a stand-alone DER byte sequence + * because the SSL library uses static variables inside a + * RSA structure which do not survive DSO reloads!) + */ + length = i2d_PrivateKey(pPrivateKey, NULL); + ucp = ssl_asn1_table_set(mc->tPrivateKey, key_id, length); + (void)i2d_PrivateKey(pPrivateKey, &ucp); /* 2nd arg increments */ + + if (ppcb_arg.nPassPhraseDialogCur != 0) { + /* remember mtime of encrypted keys */ + asn1 = ssl_asn1_table_get(mc->tPrivateKey, key_id); + asn1->source_mtime = pkey_mtime; + } + + /* + * Free the private key structure + */ + EVP_PKEY_free(pPrivateKey); + + /* + * Let the user know when we're successful. + */ + if ((ppcb_arg.nPassPhraseDialog > 0) && + (ppcb_arg.cpPassPhraseCur != NULL)) { + if (writetty) { + apr_file_printf(writetty, "\n" + "OK: Pass Phrase Dialog successful.\n"); + } + } + + /* Close the pipes if they were opened + */ + if (readtty) { + apr_file_close(readtty); + apr_file_close(writetty); + readtty = writetty = NULL; + } + + return APR_SUCCESS; +} + +static apr_status_t ssl_pipe_child_create(apr_pool_t *p, const char *progname) +{ + /* Child process code for 'ErrorLog "|..."'; + * may want a common framework for this, since I expect it will + * be common for other foo-loggers to want this sort of thing... + */ + apr_status_t rc; + apr_procattr_t *procattr; + apr_proc_t *procnew; + + if (((rc = apr_procattr_create(&procattr, p)) == APR_SUCCESS) && + ((rc = apr_procattr_io_set(procattr, + APR_FULL_BLOCK, + APR_FULL_BLOCK, + APR_NO_PIPE)) == APR_SUCCESS)) { + char **args; + const char *pname; + + apr_tokenize_to_argv(progname, &args, p); + pname = apr_pstrdup(p, args[0]); + procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew)); + rc = apr_proc_create(procnew, pname, (const char * const *)args, + NULL, procattr, p); + if (rc == APR_SUCCESS) { + /* XXX: not sure if we aught to... + * apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT); + */ + writetty = procnew->in; + readtty = procnew->out; + } + } + + return rc; +} + +static int pipe_get_passwd_cb(char *buf, int length, char *prompt, int verify) +{ + apr_status_t rc; + char *p; + + apr_file_puts(prompt, writetty); + + buf[0]='\0'; + rc = apr_file_gets(buf, length, readtty); + apr_file_puts(APR_EOL_STR, writetty); + + if (rc != APR_SUCCESS || apr_file_eof(readtty)) { + memset(buf, 0, length); + return 1; /* failure */ + } + if ((p = strchr(buf, '\n')) != NULL) { + *p = '\0'; + } +#ifdef WIN32 + /* XXX: apr_sometest */ + if ((p = strchr(buf, '\r')) != NULL) { + *p = '\0'; + } +#endif + return 0; +} + +int ssl_pphrase_Handle_CB(char *buf, int bufsize, int verify, void *srv) +{ + pphrase_cb_arg_t *ppcb_arg = (pphrase_cb_arg_t *)srv; + SSLSrvConfigRec *sc = mySrvConfig(ppcb_arg->s); + char *cpp; + int len = -1; + + ppcb_arg->nPassPhraseDialog++; + ppcb_arg->nPassPhraseDialogCur++; + + /* + * When remembered pass phrases are available use them... + */ + if ((cpp = pphrase_array_get(ppcb_arg->aPassPhrase, + ppcb_arg->nPassPhraseCur)) != NULL) { + apr_cpystrn(buf, cpp, bufsize); + len = strlen(buf); + return len; + } + + /* + * Builtin or Pipe dialog + */ + if (sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN + || sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE) { + char *prompt; + int i; + + if (sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE) { + if (!readtty) { + ap_log_error(APLOG_MARK, APLOG_INFO, 0, ppcb_arg->s, + APLOGNO(01965) + "Init: Creating pass phrase dialog pipe child " + "'%s'", sc->server->pphrase_dialog_path); + if (ssl_pipe_child_create(ppcb_arg->p, + sc->server->pphrase_dialog_path) + != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, ppcb_arg->s, + APLOGNO(01966) + "Init: Failed to create pass phrase pipe '%s'", + sc->server->pphrase_dialog_path); + PEMerr(PEM_F_PEM_DEF_CALLBACK, + PEM_R_PROBLEMS_GETTING_PASSWORD); + memset(buf, 0, (unsigned int)bufsize); + return (-1); + } + } + ap_log_error(APLOG_MARK, APLOG_INFO, 0, ppcb_arg->s, APLOGNO(01967) + "Init: Requesting pass phrase via piped dialog"); + } + else { /* sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN */ +#ifdef WIN32 + PEMerr(PEM_F_PEM_DEF_CALLBACK, PEM_R_PROBLEMS_GETTING_PASSWORD); + memset(buf, 0, (unsigned int)bufsize); + return (-1); +#else + /* + * stderr has already been redirected to the error_log. + * rather than attempting to temporarily rehook it to the terminal, + * we print the prompt to stdout before EVP_read_pw_string turns + * off tty echo + */ + apr_file_open_stdout(&writetty, ppcb_arg->p); + + ap_log_error(APLOG_MARK, APLOG_INFO, 0, ppcb_arg->s, APLOGNO(01968) + "Init: Requesting pass phrase via builtin terminal " + "dialog"); +#endif + } + + /* + * The first time display a header to inform the user about what + * program he actually speaks to, which module is responsible for + * this terminal dialog and why to the hell he has to enter + * something... + */ + if (ppcb_arg->nPassPhraseDialog == 1) { + apr_file_printf(writetty, "%s mod_ssl (Pass Phrase Dialog)\n", + AP_SERVER_BASEVERSION); + apr_file_printf(writetty, "Some of your private key files are encrypted for security reasons.\n"); + apr_file_printf(writetty, "In order to read them you have to provide the pass phrases.\n"); + } + if (ppcb_arg->bPassPhraseDialogOnce) { + ppcb_arg->bPassPhraseDialogOnce = FALSE; + apr_file_printf(writetty, "\n"); + apr_file_printf(writetty, "Private key %s (%s)\n", + ppcb_arg->key_id, ppcb_arg->pkey_file); + } + + /* + * Emulate the OpenSSL internal pass phrase dialog + * (see crypto/pem/pem_lib.c:def_callback() for details) + */ + prompt = "Enter pass phrase:"; + + for (;;) { + apr_file_puts(prompt, writetty); + if (sc->server->pphrase_dialog_type == SSL_PPTYPE_PIPE) { + i = pipe_get_passwd_cb(buf, bufsize, "", FALSE); + } + else { /* sc->server->pphrase_dialog_type == SSL_PPTYPE_BUILTIN */ + i = EVP_read_pw_string(buf, bufsize, "", FALSE); + } + if (i != 0) { + PEMerr(PEM_F_PEM_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD); + memset(buf, 0, (unsigned int)bufsize); + return (-1); + } + len = strlen(buf); + if (len < 1) + apr_file_printf(writetty, "Apache:mod_ssl:Error: Pass phrase empty (needs to be at least 1 character).\n"); + else + break; + } + } + + /* + * Filter program + */ + else if (sc->server->pphrase_dialog_type == SSL_PPTYPE_FILTER) { + const char *cmd = sc->server->pphrase_dialog_path; + const char **argv = apr_palloc(ppcb_arg->p, sizeof(char *) * 4); + const char *idx = ap_strrchr_c(ppcb_arg->key_id, ':') + 1; + char *result; + int i; + + ap_log_error(APLOG_MARK, APLOG_INFO, 0, ppcb_arg->s, APLOGNO(01969) + "Init: Requesting pass phrase from dialog filter " + "program (%s)", cmd); + + argv[0] = cmd; + argv[1] = apr_pstrndup(ppcb_arg->p, ppcb_arg->key_id, + idx-1 - ppcb_arg->key_id); + if ((i = atoi(idx)) < CERTKEYS_IDX_MAX+1) { + /* + * For compatibility with existing 2.4.x configurations, use + * "RSA", "DSA" and "ECC" strings for the first two/three keys + */ + argv[2] = key_types[i]; + } else { + /* Four and above: use the integer index */ + argv[2] = apr_pstrdup(ppcb_arg->p, idx); + } + argv[3] = NULL; + + result = ssl_util_readfilter(ppcb_arg->s, ppcb_arg->p, cmd, argv); + apr_cpystrn(buf, result, bufsize); + len = strlen(buf); + } + + /* + * Ok, we now have the pass phrase, so give it back + */ + ppcb_arg->cpPassPhraseCur = apr_pstrdup(ppcb_arg->p, buf); + + /* + * And return its length to OpenSSL... + */ + return (len); +} diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_rand.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_rand.c new file mode 100644 index 0000000000..df25d8fd63 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_rand.c @@ -0,0 +1,175 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_rand.c + * Random Number Generator Seeding + */ + /* ``The generation of random + numbers is too important + to be left to chance.'' */ + +#include "ssl_private.h" + +/* _________________________________________________________________ +** +** Support for better seeding of SSL library's RNG +** _________________________________________________________________ +*/ + +static int ssl_rand_choosenum(int, int); +static int ssl_rand_feedfp(apr_pool_t *, apr_file_t *, int); + +int ssl_rand_seed(server_rec *s, apr_pool_t *p, ssl_rsctx_t nCtx, char *prefix) +{ + SSLModConfigRec *mc; + apr_array_header_t *apRandSeed; + ssl_randseed_t *pRandSeeds; + ssl_randseed_t *pRandSeed; + unsigned char stackdata[256]; + int nDone; + apr_file_t *fp; + int i, n, l; + + mc = myModConfig(s); + nDone = 0; + apRandSeed = mc->aRandSeed; + pRandSeeds = (ssl_randseed_t *)apRandSeed->elts; + for (i = 0; i < apRandSeed->nelts; i++) { + pRandSeed = &pRandSeeds[i]; + if (pRandSeed->nCtx == nCtx) { + if (pRandSeed->nSrc == SSL_RSSRC_FILE) { + /* + * seed in contents of an external file + */ + if (apr_file_open(&fp, pRandSeed->cpPath, + APR_READ, APR_OS_DEFAULT, p) != APR_SUCCESS) + continue; + nDone += ssl_rand_feedfp(p, fp, pRandSeed->nBytes); + apr_file_close(fp); + } + else if (pRandSeed->nSrc == SSL_RSSRC_EXEC) { + const char *cmd = pRandSeed->cpPath; + const char **argv = apr_palloc(p, sizeof(char *) * 3); + /* + * seed in contents generated by an external program + */ + argv[0] = cmd; + argv[1] = apr_itoa(p, pRandSeed->nBytes); + argv[2] = NULL; + + if ((fp = ssl_util_ppopen(s, p, cmd, argv)) == NULL) + continue; + nDone += ssl_rand_feedfp(p, fp, pRandSeed->nBytes); + ssl_util_ppclose(s, p, fp); + } + else if (pRandSeed->nSrc == SSL_RSSRC_EGD) { + /* + * seed in contents provided by the external + * Entropy Gathering Daemon (EGD) + */ + if ((n = RAND_egd(pRandSeed->cpPath)) == -1) + continue; + nDone += n; + } + else if (pRandSeed->nSrc == SSL_RSSRC_BUILTIN) { + struct { + time_t t; + pid_t pid; + } my_seed; + + /* + * seed in the current time (usually just 4 bytes) + */ + my_seed.t = time(NULL); + + /* + * seed in the current process id (usually just 4 bytes) + */ + my_seed.pid = mc->pid; + + l = sizeof(my_seed); + RAND_seed((unsigned char *)&my_seed, l); + nDone += l; + + /* + * seed in some current state of the run-time stack (128 bytes) + */ + n = ssl_rand_choosenum(0, sizeof(stackdata)-128-1); + RAND_seed(stackdata+n, 128); + nDone += 128; + + } + } + } + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, s, + "%sSeeding PRNG with %d bytes of entropy", prefix, nDone); + + if (RAND_status() == 0) + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(01990) + "%sPRNG still contains insufficient entropy!", prefix); + + return nDone; +} + +#define BUFSIZE 8192 + +static int ssl_rand_feedfp(apr_pool_t *p, apr_file_t *fp, int nReq) +{ + apr_size_t nDone; + unsigned char caBuf[BUFSIZE]; + apr_size_t nBuf; + apr_size_t nRead; + apr_size_t nTodo; + + nDone = 0; + nRead = BUFSIZE; + nTodo = nReq; + while (1) { + if (nReq > 0) + nRead = (nTodo < BUFSIZE ? nTodo : BUFSIZE); + nBuf = nRead; + if (apr_file_read(fp, caBuf, &nBuf) != APR_SUCCESS) + break; + RAND_seed(caBuf, nBuf); + nDone += nBuf; + if (nReq > 0) { + nTodo -= nBuf; + if (nTodo <= 0) + break; + } + } + return nDone; +} + +static int ssl_rand_choosenum(int l, int h) +{ + int i; + char buf[50]; + + apr_snprintf(buf, sizeof(buf), "%.0f", + (((double)(rand()%RAND_MAX)/RAND_MAX)*(h-l))); + i = atoi(buf)+1; + if (i < l) i = l; + if (i > h) i = h; + return i; +} + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_vars.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_vars.c new file mode 100644 index 0000000000..922bf7c11f --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_engine_vars.c @@ -0,0 +1,1081 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_engine_vars.c + * Variable Lookup Facility + */ + /* ``Those of you who think they + know everything are very annoying + to those of us who do.'' + -- Unknown */ +#include "ssl_private.h" +#include "mod_ssl.h" +#include "ap_expr.h" + +#include "apr_time.h" + +/* _________________________________________________________________ +** +** Variable Lookup +** _________________________________________________________________ +*/ + +static char *ssl_var_lookup_ssl(apr_pool_t *p, conn_rec *c, request_rec *r, char *var); +static char *ssl_var_lookup_ssl_cert(apr_pool_t *p, request_rec *r, X509 *xs, char *var); +static char *ssl_var_lookup_ssl_cert_dn(apr_pool_t *p, X509_NAME *xsname, char *var); +static char *ssl_var_lookup_ssl_cert_valid(apr_pool_t *p, ASN1_TIME *tm); +static char *ssl_var_lookup_ssl_cert_remain(apr_pool_t *p, ASN1_TIME *tm); +static char *ssl_var_lookup_ssl_cert_serial(apr_pool_t *p, X509 *xs); +static char *ssl_var_lookup_ssl_cert_chain(apr_pool_t *p, STACK_OF(X509) *sk, char *var); +static char *ssl_var_lookup_ssl_cert_PEM(apr_pool_t *p, X509 *xs); +static char *ssl_var_lookup_ssl_cert_verify(apr_pool_t *p, conn_rec *c); +static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, conn_rec *c, char *var); +static void ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algkeysize); +static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var); +static char *ssl_var_lookup_ssl_compress_meth(SSL *ssl); + +static int ssl_is_https(conn_rec *c) +{ + SSLConnRec *sslconn = myConnConfig(c); + return sslconn && sslconn->ssl; +} + +static const char var_interface[] = "mod_ssl/" AP_SERVER_BASEREVISION; +static char var_library_interface[] = SSL_LIBRARY_TEXT; +static char *var_library = NULL; + +static apr_array_header_t *expr_peer_ext_list_fn(ap_expr_eval_ctx_t *ctx, + const void *dummy, + const char *arg) +{ + return ssl_ext_list(ctx->p, ctx->c, 1, arg); +} + +static const char *expr_var_fn(ap_expr_eval_ctx_t *ctx, const void *data) +{ + char *var = (char *)data; + return ssl_var_lookup_ssl(ctx->p, ctx->c, ctx->r, var); +} + +static int ssl_expr_lookup(ap_expr_lookup_parms *parms) +{ + switch (parms->type) { + case AP_EXPR_FUNC_VAR: + /* for now, we just handle everything that starts with SSL_, but + * register our hook as APR_HOOK_LAST + * XXX: This can be optimized + */ + if (strcEQn(parms->name, "SSL_", 4)) { + *parms->func = expr_var_fn; + *parms->data = parms->name + 4; + return OK; + } + break; + case AP_EXPR_FUNC_LIST: + if (strcEQ(parms->name, "PeerExtList")) { + *parms->func = expr_peer_ext_list_fn; + *parms->data = "PeerExtList"; + return OK; + } + break; + } + return DECLINED; +} + + +void ssl_var_register(apr_pool_t *p) +{ + char *cp, *cp2; + + APR_REGISTER_OPTIONAL_FN(ssl_is_https); + APR_REGISTER_OPTIONAL_FN(ssl_var_lookup); + APR_REGISTER_OPTIONAL_FN(ssl_ext_list); + + /* Perform once-per-process library version determination: */ + var_library = apr_pstrdup(p, SSL_LIBRARY_DYNTEXT); + + if ((cp = strchr(var_library, ' ')) != NULL) { + *cp = '/'; + if ((cp2 = strchr(cp, ' ')) != NULL) + *cp2 = NUL; + } + + if ((cp = strchr(var_library_interface, ' ')) != NULL) { + *cp = '/'; + if ((cp2 = strchr(cp, ' ')) != NULL) + *cp2 = NUL; + } + + ap_hook_expr_lookup(ssl_expr_lookup, NULL, NULL, APR_HOOK_MIDDLE); +} + +/* This function must remain safe to use for a non-SSL connection. */ +char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, char *var) +{ + SSLModConfigRec *mc = myModConfig(s); + const char *result; + BOOL resdup; + apr_time_exp_t tm; + + result = NULL; + resdup = TRUE; + + /* + * When no pool is given try to find one + */ + if (p == NULL) { + if (r != NULL) + p = r->pool; + else if (c != NULL) + p = c->pool; + else + p = mc->pPool; + } + + /* + * Request dependent stuff + */ + if (r != NULL) { + switch (var[0]) { + case 'H': + case 'h': + if (strcEQ(var, "HTTP_USER_AGENT")) + result = apr_table_get(r->headers_in, "User-Agent"); + else if (strcEQ(var, "HTTP_REFERER")) + result = apr_table_get(r->headers_in, "Referer"); + else if (strcEQ(var, "HTTP_COOKIE")) + result = apr_table_get(r->headers_in, "Cookie"); + else if (strcEQ(var, "HTTP_FORWARDED")) + result = apr_table_get(r->headers_in, "Forwarded"); + else if (strcEQ(var, "HTTP_HOST")) + result = apr_table_get(r->headers_in, "Host"); + else if (strcEQ(var, "HTTP_PROXY_CONNECTION")) + result = apr_table_get(r->headers_in, "Proxy-Connection"); + else if (strcEQ(var, "HTTP_ACCEPT")) + result = apr_table_get(r->headers_in, "Accept"); + else if (strlen(var) > 5 && strcEQn(var, "HTTP:", 5)) + /* all other headers from which we are still not know about */ + result = apr_table_get(r->headers_in, var+5); + break; + + case 'R': + case 'r': + if (strcEQ(var, "REQUEST_METHOD")) + result = r->method; + else if (strcEQ(var, "REQUEST_SCHEME")) + result = ap_http_scheme(r); + else if (strcEQ(var, "REQUEST_URI")) + result = r->uri; + else if (strcEQ(var, "REQUEST_FILENAME")) + result = r->filename; + else if (strcEQ(var, "REMOTE_ADDR")) + result = r->useragent_ip; + else if (strcEQ(var, "REMOTE_HOST")) + result = ap_get_remote_host(r->connection, r->per_dir_config, + REMOTE_NAME, NULL); + else if (strcEQ(var, "REMOTE_IDENT")) + result = ap_get_remote_logname(r); + else if (strcEQ(var, "REMOTE_USER")) + result = r->user; + break; + + case 'S': + case 's': + if (strcEQn(var, "SSL", 3)) break; /* shortcut common case */ + + if (strcEQ(var, "SERVER_ADMIN")) + result = r->server->server_admin; + else if (strcEQ(var, "SERVER_NAME")) + result = ap_get_server_name_for_url(r); + else if (strcEQ(var, "SERVER_PORT")) + result = apr_psprintf(p, "%u", ap_get_server_port(r)); + else if (strcEQ(var, "SERVER_PROTOCOL")) + result = r->protocol; + else if (strcEQ(var, "SCRIPT_FILENAME")) + result = r->filename; + break; + + default: + if (strcEQ(var, "PATH_INFO")) + result = r->path_info; + else if (strcEQ(var, "QUERY_STRING")) + result = r->args; + else if (strcEQ(var, "IS_SUBREQ")) + result = (r->main != NULL ? "true" : "false"); + else if (strcEQ(var, "DOCUMENT_ROOT")) + result = ap_document_root(r); + else if (strcEQ(var, "AUTH_TYPE")) + result = r->ap_auth_type; + else if (strcEQ(var, "THE_REQUEST")) + result = r->the_request; + else if (strlen(var) > 4 && strcEQn(var, "ENV:", 4)) { + result = apr_table_get(r->notes, var+4); + if (result == NULL) + result = apr_table_get(r->subprocess_env, var+4); + } + break; + } + } + + /* + * Connection stuff + */ + if (result == NULL && c != NULL) { + SSLConnRec *sslconn = myConnConfig(c); + if (strlen(var) > 4 && strcEQn(var, "SSL_", 4) + && sslconn && sslconn->ssl) + result = ssl_var_lookup_ssl(p, c, r, var+4); + else if (strcEQ(var, "HTTPS")) { + if (sslconn && sslconn->ssl) + result = "on"; + else + result = "off"; + } + } + + /* + * Totally independent stuff + */ + if (result == NULL) { + if (strlen(var) > 12 && strcEQn(var, "SSL_VERSION_", 12)) + result = ssl_var_lookup_ssl_version(p, var+12); + else if (strcEQ(var, "SERVER_SOFTWARE")) + result = ap_get_server_banner(); + else if (strcEQ(var, "API_VERSION")) { + result = apr_itoa(p, MODULE_MAGIC_NUMBER); + resdup = FALSE; + } + else if (strcEQ(var, "TIME_YEAR")) { + apr_time_exp_lt(&tm, apr_time_now()); + result = apr_psprintf(p, "%02d%02d", + (tm.tm_year / 100) + 19, tm.tm_year % 100); + resdup = FALSE; + } +#define MKTIMESTR(format, tmfield) \ + apr_time_exp_lt(&tm, apr_time_now()); \ + result = apr_psprintf(p, format, tm.tmfield); \ + resdup = FALSE; + else if (strcEQ(var, "TIME_MON")) { + MKTIMESTR("%02d", tm_mon+1) + } + else if (strcEQ(var, "TIME_DAY")) { + MKTIMESTR("%02d", tm_mday) + } + else if (strcEQ(var, "TIME_HOUR")) { + MKTIMESTR("%02d", tm_hour) + } + else if (strcEQ(var, "TIME_MIN")) { + MKTIMESTR("%02d", tm_min) + } + else if (strcEQ(var, "TIME_SEC")) { + MKTIMESTR("%02d", tm_sec) + } + else if (strcEQ(var, "TIME_WDAY")) { + MKTIMESTR("%d", tm_wday) + } + else if (strcEQ(var, "TIME")) { + apr_time_exp_lt(&tm, apr_time_now()); + result = apr_psprintf(p, + "%02d%02d%02d%02d%02d%02d%02d", (tm.tm_year / 100) + 19, + (tm.tm_year % 100), tm.tm_mon+1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec); + resdup = FALSE; + } + /* all other env-variables from the parent Apache process */ + else if (strlen(var) > 4 && strcEQn(var, "ENV:", 4)) { + result = getenv(var+4); + } + } + + if (result != NULL && resdup) + result = apr_pstrdup(p, result); + if (result == NULL) + result = ""; + return (char *)result; +} + +static char *ssl_var_lookup_ssl(apr_pool_t *p, conn_rec *c, request_rec *r, + char *var) +{ + SSLConnRec *sslconn = myConnConfig(c); + char *result; + X509 *xs; + STACK_OF(X509) *sk; + SSL *ssl; + + result = NULL; + + ssl = sslconn->ssl; + if (strlen(var) > 8 && strcEQn(var, "VERSION_", 8)) { + result = ssl_var_lookup_ssl_version(p, var+8); + } + else if (ssl != NULL && strcEQ(var, "PROTOCOL")) { + result = (char *)SSL_get_version(ssl); + } + else if (ssl != NULL && strcEQ(var, "SESSION_ID")) { + char buf[SSL_SESSION_ID_STRING_LEN]; + SSL_SESSION *pSession = SSL_get_session(ssl); + if (pSession) { + unsigned char *id; + unsigned int idlen; + +#ifdef OPENSSL_NO_SSL_INTERN + id = (unsigned char *)SSL_SESSION_get_id(pSession, &idlen); +#else + id = pSession->session_id; + idlen = pSession->session_id_length; +#endif + + result = apr_pstrdup(p, SSL_SESSION_id2sz(id, idlen, + buf, sizeof(buf))); + } + } + else if(ssl != NULL && strcEQ(var, "SESSION_RESUMED")) { + if (SSL_session_reused(ssl) == 1) + result = "Resumed"; + else + result = "Initial"; + } + else if (ssl != NULL && strlen(var) >= 6 && strcEQn(var, "CIPHER", 6)) { + result = ssl_var_lookup_ssl_cipher(p, c, var+6); + } + else if (ssl != NULL && strlen(var) > 18 && strcEQn(var, "CLIENT_CERT_CHAIN_", 18)) { + sk = SSL_get_peer_cert_chain(ssl); + result = ssl_var_lookup_ssl_cert_chain(p, sk, var+18); + } + else if (ssl != NULL && strcEQ(var, "CLIENT_VERIFY")) { + result = ssl_var_lookup_ssl_cert_verify(p, c); + } + else if (ssl != NULL && strlen(var) > 7 && strcEQn(var, "CLIENT_", 7)) { + if ((xs = SSL_get_peer_certificate(ssl)) != NULL) { + result = ssl_var_lookup_ssl_cert(p, r, xs, var+7); + X509_free(xs); + } + } + else if (ssl != NULL && strlen(var) > 7 && strcEQn(var, "SERVER_", 7)) { + if ((xs = SSL_get_certificate(ssl)) != NULL) { + result = ssl_var_lookup_ssl_cert(p, r, xs, var+7); + /* SSL_get_certificate is different from SSL_get_peer_certificate. + * No need to X509_free(xs). + */ + } + } + else if (ssl != NULL && strcEQ(var, "COMPRESS_METHOD")) { + result = ssl_var_lookup_ssl_compress_meth(ssl); + } +#ifdef HAVE_TLSEXT + else if (ssl != NULL && strcEQ(var, "TLS_SNI")) { + result = apr_pstrdup(p, SSL_get_servername(ssl, + TLSEXT_NAMETYPE_host_name)); + } +#endif + else if (ssl != NULL && strcEQ(var, "SECURE_RENEG")) { + int flag = 0; +#ifdef SSL_get_secure_renegotiation_support + flag = SSL_get_secure_renegotiation_support(ssl); +#endif + result = apr_pstrdup(p, flag ? "true" : "false"); + } +#ifdef HAVE_SRP + else if (ssl != NULL && strcEQ(var, "SRP_USER")) { + if ((result = SSL_get_srp_username(ssl)) != NULL) { + result = apr_pstrdup(p, result); + } + } + else if (ssl != NULL && strcEQ(var, "SRP_USERINFO")) { + if ((result = SSL_get_srp_userinfo(ssl)) != NULL) { + result = apr_pstrdup(p, result); + } + } +#endif + + return result; +} + +static char *ssl_var_lookup_ssl_cert_dn_oneline(apr_pool_t *p, request_rec *r, + X509_NAME *xsname) +{ + char *result = NULL; + SSLDirConfigRec *dc; + int legacy_format = 0; + if (r) { + dc = myDirConfig(r); + legacy_format = dc->nOptions & SSL_OPT_LEGACYDNFORMAT; + } + if (legacy_format) { + char *cp = X509_NAME_oneline(xsname, NULL, 0); + result = apr_pstrdup(p, cp); + OPENSSL_free(cp); + } + else { + BIO* bio; + int n; + unsigned long flags = XN_FLAG_RFC2253 & ~ASN1_STRFLGS_ESC_MSB; + if ((bio = BIO_new(BIO_s_mem())) == NULL) + return NULL; + X509_NAME_print_ex(bio, xsname, 0, flags); + n = BIO_pending(bio); + if (n > 0) { + result = apr_palloc(p, n+1); + n = BIO_read(bio, result, n); + result[n] = NUL; + } + BIO_free(bio); + } + return result; +} + +static char *ssl_var_lookup_ssl_cert(apr_pool_t *p, request_rec *r, X509 *xs, + char *var) +{ + char *result; + BOOL resdup; + X509_NAME *xsname; + int nid; + + result = NULL; + resdup = TRUE; + + if (strcEQ(var, "M_VERSION")) { + result = apr_psprintf(p, "%lu", X509_get_version(xs)+1); + resdup = FALSE; + } + else if (strcEQ(var, "M_SERIAL")) { + result = ssl_var_lookup_ssl_cert_serial(p, xs); + } + else if (strcEQ(var, "V_START")) { + result = ssl_var_lookup_ssl_cert_valid(p, X509_get_notBefore(xs)); + } + else if (strcEQ(var, "V_END")) { + result = ssl_var_lookup_ssl_cert_valid(p, X509_get_notAfter(xs)); + } + else if (strcEQ(var, "V_REMAIN")) { + result = ssl_var_lookup_ssl_cert_remain(p, X509_get_notAfter(xs)); + resdup = FALSE; + } + else if (*var && strcEQ(var+1, "_DN")) { + if (*var == 'S') + xsname = X509_get_subject_name(xs); + else if (*var == 'I') + xsname = X509_get_issuer_name(xs); + else + return NULL; + result = ssl_var_lookup_ssl_cert_dn_oneline(p, r, xsname); + resdup = FALSE; + } + else if (strlen(var) > 5 && strcEQn(var+1, "_DN_", 4)) { + if (*var == 'S') + xsname = X509_get_subject_name(xs); + else if (*var == 'I') + xsname = X509_get_issuer_name(xs); + else + return NULL; + result = ssl_var_lookup_ssl_cert_dn(p, xsname, var+5); + resdup = FALSE; + } + else if (strcEQ(var, "A_SIG")) { + nid = OBJ_obj2nid((ASN1_OBJECT *)(xs->cert_info->signature->algorithm)); + result = apr_pstrdup(p, + (nid == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(nid)); + resdup = FALSE; + } + else if (strcEQ(var, "A_KEY")) { + nid = OBJ_obj2nid((ASN1_OBJECT *)(xs->cert_info->key->algor->algorithm)); + result = apr_pstrdup(p, + (nid == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(nid)); + resdup = FALSE; + } + else if (strcEQ(var, "CERT")) { + result = ssl_var_lookup_ssl_cert_PEM(p, xs); + } + + if (resdup) + result = apr_pstrdup(p, result); + return result; +} + +/* In this table, .extract is non-zero if RDNs using the NID should be + * extracted to for the SSL_{CLIENT,SERVER}_{I,S}_DN_* environment + * variables. */ +static const struct { + char *name; + int nid; + int extract; +} ssl_var_lookup_ssl_cert_dn_rec[] = { + { "C", NID_countryName, 1 }, + { "ST", NID_stateOrProvinceName, 1 }, /* officially (RFC2156) */ + { "SP", NID_stateOrProvinceName, 0 }, /* compatibility (SSLeay) */ + { "L", NID_localityName, 1 }, + { "O", NID_organizationName, 1 }, + { "OU", NID_organizationalUnitName, 1 }, + { "CN", NID_commonName, 1 }, + { "T", NID_title, 1 }, + { "I", NID_initials, 1 }, + { "G", NID_givenName, 1 }, + { "S", NID_surname, 1 }, + { "D", NID_description, 1 }, +#ifdef NID_userId + { "UID", NID_userId, 1 }, +#endif + { "Email", NID_pkcs9_emailAddress, 1 }, + { NULL, 0, 0 } +}; + +static char *ssl_var_lookup_ssl_cert_dn(apr_pool_t *p, X509_NAME *xsname, char *var) +{ + char *result, *ptr; + X509_NAME_ENTRY *xsne; + int i, j, n, idx = 0; + apr_size_t varlen; + + /* if an _N suffix is used, find the Nth attribute of given name */ + ptr = strchr(var, '_'); + if (ptr != NULL && strspn(ptr + 1, "0123456789") == strlen(ptr + 1)) { + idx = atoi(ptr + 1); + varlen = ptr - var; + } else { + varlen = strlen(var); + } + + result = NULL; + + for (i = 0; ssl_var_lookup_ssl_cert_dn_rec[i].name != NULL; i++) { + if (strEQn(var, ssl_var_lookup_ssl_cert_dn_rec[i].name, varlen) + && strlen(ssl_var_lookup_ssl_cert_dn_rec[i].name) == varlen) { + for (j = 0; j < sk_X509_NAME_ENTRY_num((STACK_OF(X509_NAME_ENTRY) *) + xsname->entries); + j++) { + xsne = sk_X509_NAME_ENTRY_value((STACK_OF(X509_NAME_ENTRY) *) + xsname->entries, j); + + n =OBJ_obj2nid((ASN1_OBJECT *)X509_NAME_ENTRY_get_object(xsne)); + + if (n == ssl_var_lookup_ssl_cert_dn_rec[i].nid && idx-- == 0) { + result = SSL_X509_NAME_ENTRY_to_string(p, xsne); + break; + } + } + break; + } + } + return result; +} + +static char *ssl_var_lookup_ssl_cert_valid(apr_pool_t *p, ASN1_TIME *tm) +{ + char *result; + BIO* bio; + int n; + + if ((bio = BIO_new(BIO_s_mem())) == NULL) + return NULL; + ASN1_TIME_print(bio, tm); + n = BIO_pending(bio); + result = apr_pcalloc(p, n+1); + n = BIO_read(bio, result, n); + result[n] = NUL; + BIO_free(bio); + return result; +} + +#define DIGIT2NUM(x) (((x)[0] - '0') * 10 + (x)[1] - '0') + +/* Return a string giving the number of days remaining until 'tm', or + * "0" if this can't be determined. */ +static char *ssl_var_lookup_ssl_cert_remain(apr_pool_t *p, ASN1_TIME *tm) +{ + apr_time_t then, now = apr_time_now(); + apr_time_exp_t exp = {0}; + long diff; + unsigned char *dp; + + /* Fail if the time isn't a valid ASN.1 TIME; RFC3280 mandates + * that the seconds digits are present even though ASN.1 + * doesn't. */ + if ((tm->type == V_ASN1_UTCTIME && tm->length < 11) || + (tm->type == V_ASN1_GENERALIZEDTIME && tm->length < 13) || + !ASN1_TIME_check(tm)) { + return apr_pstrdup(p, "0"); + } + + if (tm->type == V_ASN1_UTCTIME) { + exp.tm_year = DIGIT2NUM(tm->data); + if (exp.tm_year <= 50) exp.tm_year += 100; + dp = tm->data + 2; + } else { + exp.tm_year = DIGIT2NUM(tm->data) * 100 + DIGIT2NUM(tm->data + 2) - 1900; + dp = tm->data + 4; + } + + exp.tm_mon = DIGIT2NUM(dp) - 1; + exp.tm_mday = DIGIT2NUM(dp + 2) + 1; + exp.tm_hour = DIGIT2NUM(dp + 4); + exp.tm_min = DIGIT2NUM(dp + 6); + exp.tm_sec = DIGIT2NUM(dp + 8); + + if (apr_time_exp_gmt_get(&then, &exp) != APR_SUCCESS) { + return apr_pstrdup(p, "0"); + } + + diff = (long)((apr_time_sec(then) - apr_time_sec(now)) / (60*60*24)); + + return diff > 0 ? apr_ltoa(p, diff) : apr_pstrdup(p, "0"); +} + +static char *ssl_var_lookup_ssl_cert_serial(apr_pool_t *p, X509 *xs) +{ + char *result; + BIO *bio; + int n; + + if ((bio = BIO_new(BIO_s_mem())) == NULL) + return NULL; + i2a_ASN1_INTEGER(bio, X509_get_serialNumber(xs)); + n = BIO_pending(bio); + result = apr_pcalloc(p, n+1); + n = BIO_read(bio, result, n); + result[n] = NUL; + BIO_free(bio); + return result; +} + +static char *ssl_var_lookup_ssl_cert_chain(apr_pool_t *p, STACK_OF(X509) *sk, char *var) +{ + char *result; + X509 *xs; + int n; + + result = NULL; + + if (strspn(var, "0123456789") == strlen(var)) { + n = atoi(var); + if (n < sk_X509_num(sk)) { + xs = sk_X509_value(sk, n); + result = ssl_var_lookup_ssl_cert_PEM(p, xs); + } + } + + return result; +} + +static char *ssl_var_lookup_ssl_cert_PEM(apr_pool_t *p, X509 *xs) +{ + char *result; + BIO *bio; + int n; + + if ((bio = BIO_new(BIO_s_mem())) == NULL) + return NULL; + PEM_write_bio_X509(bio, xs); + n = BIO_pending(bio); + result = apr_pcalloc(p, n+1); + n = BIO_read(bio, result, n); + result[n] = NUL; + BIO_free(bio); + return result; +} + +static char *ssl_var_lookup_ssl_cert_verify(apr_pool_t *p, conn_rec *c) +{ + SSLConnRec *sslconn = myConnConfig(c); + char *result; + long vrc; + const char *verr; + const char *vinfo; + SSL *ssl; + X509 *xs; + + result = NULL; + ssl = sslconn->ssl; + verr = sslconn->verify_error; + vinfo = sslconn->verify_info; + vrc = SSL_get_verify_result(ssl); + xs = SSL_get_peer_certificate(ssl); + + if (vrc == X509_V_OK && verr == NULL && xs == NULL) + /* no client verification done at all */ + result = "NONE"; + else if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs != NULL) + /* client verification done successful */ + result = "SUCCESS"; + else if (vrc == X509_V_OK && vinfo != NULL && strEQ(vinfo, "GENEROUS")) + /* client verification done in generous way */ + result = "GENEROUS"; + else + /* client verification failed */ + result = apr_psprintf(p, "FAILED:%s", + verr ? verr : X509_verify_cert_error_string(vrc)); + + if (xs) + X509_free(xs); + return result; +} + +static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, conn_rec *c, char *var) +{ + SSLConnRec *sslconn = myConnConfig(c); + char *result; + BOOL resdup; + int usekeysize, algkeysize; + SSL *ssl; + + result = NULL; + resdup = TRUE; + + ssl = sslconn->ssl; + ssl_var_lookup_ssl_cipher_bits(ssl, &usekeysize, &algkeysize); + + if (ssl && strEQ(var, "")) { + MODSSL_SSL_CIPHER_CONST SSL_CIPHER *cipher = SSL_get_current_cipher(ssl); + result = (cipher != NULL ? (char *)SSL_CIPHER_get_name(cipher) : NULL); + } + else if (strcEQ(var, "_EXPORT")) + result = (usekeysize < 56 ? "true" : "false"); + else if (strcEQ(var, "_USEKEYSIZE")) { + result = apr_itoa(p, usekeysize); + resdup = FALSE; + } + else if (strcEQ(var, "_ALGKEYSIZE")) { + result = apr_itoa(p, algkeysize); + resdup = FALSE; + } + + if (result != NULL && resdup) + result = apr_pstrdup(p, result); + return result; +} + +static void ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algkeysize) +{ + MODSSL_SSL_CIPHER_CONST SSL_CIPHER *cipher; + + *usekeysize = 0; + *algkeysize = 0; + if (ssl != NULL) + if ((cipher = SSL_get_current_cipher(ssl)) != NULL) + *usekeysize = SSL_CIPHER_get_bits(cipher, algkeysize); + return; +} + +static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var) +{ + if (strEQ(var, "INTERFACE")) { + return apr_pstrdup(p, var_interface); + } + else if (strEQ(var, "LIBRARY_INTERFACE")) { + return apr_pstrdup(p, var_library_interface); + } + else if (strEQ(var, "LIBRARY")) { + return apr_pstrdup(p, var_library); + } + return NULL; +} + +/* Add each RDN in 'xn' to the table 't' where the NID is present in + * 'nids', using key prefix 'pfx'. */ +static void extract_dn(apr_table_t *t, apr_hash_t *nids, const char *pfx, + X509_NAME *xn, apr_pool_t *p) +{ + STACK_OF(X509_NAME_ENTRY) *ents = xn->entries; + X509_NAME_ENTRY *xsne; + apr_hash_t *count; + int i, nid; + + /* Hash of (int) NID -> (int *) counter to count each time an RDN + * with the given NID has been seen. */ + count = apr_hash_make(p); + + /* For each RDN... */ + for (i = 0; i < sk_X509_NAME_ENTRY_num(ents); i++) { + const char *tag; + + xsne = sk_X509_NAME_ENTRY_value(ents, i); + + /* Retrieve the nid, and check whether this is one of the nids + * which are to be extracted. */ + nid = OBJ_obj2nid((ASN1_OBJECT *)X509_NAME_ENTRY_get_object(xsne)); + + tag = apr_hash_get(nids, &nid, sizeof nid); + if (tag) { + const char *key; + int *dup; + char *value; + + /* Check whether a variable with this nid was already + * been used; if so, use the foo_N=bar syntax. */ + dup = apr_hash_get(count, &nid, sizeof nid); + if (dup) { + key = apr_psprintf(p, "%s%s_%d", pfx, tag, ++(*dup)); + } + else { + /* Otherwise, use the plain foo=bar syntax. */ + dup = apr_pcalloc(p, sizeof *dup); + apr_hash_set(count, &nid, sizeof nid, dup); + key = apr_pstrcat(p, pfx, tag, NULL); + } + value = SSL_X509_NAME_ENTRY_to_string(p, xsne); + apr_table_setn(t, key, value); + } + } +} + +void modssl_var_extract_dns(apr_table_t *t, SSL *ssl, apr_pool_t *p) +{ + apr_hash_t *nids; + unsigned n; + X509 *xs; + + /* Build up a hash table of (int *)NID->(char *)short-name for all + * the tags which are to be extracted: */ + nids = apr_hash_make(p); + for (n = 0; ssl_var_lookup_ssl_cert_dn_rec[n].name; n++) { + if (ssl_var_lookup_ssl_cert_dn_rec[n].extract) { + apr_hash_set(nids, &ssl_var_lookup_ssl_cert_dn_rec[n].nid, + sizeof(ssl_var_lookup_ssl_cert_dn_rec[0].nid), + ssl_var_lookup_ssl_cert_dn_rec[n].name); + } + } + + /* Extract the server cert DNS -- note that the refcount does NOT + * increase: */ + xs = SSL_get_certificate(ssl); + if (xs) { + extract_dn(t, nids, "SSL_SERVER_S_DN_", X509_get_subject_name(xs), p); + extract_dn(t, nids, "SSL_SERVER_I_DN_", X509_get_issuer_name(xs), p); + } + + /* Extract the client cert DNs -- note that the refcount DOES + * increase: */ + xs = SSL_get_peer_certificate(ssl); + if (xs) { + extract_dn(t, nids, "SSL_CLIENT_S_DN_", X509_get_subject_name(xs), p); + extract_dn(t, nids, "SSL_CLIENT_I_DN_", X509_get_issuer_name(xs), p); + X509_free(xs); + } +} + +/* For an extension type which OpenSSL does not recognize, attempt to + * parse the extension type as a primitive string. This will fail for + * any structured extension type per the docs. Returns non-zero on + * success and writes the string to the given bio. */ +static int dump_extn_value(BIO *bio, ASN1_OCTET_STRING *str) +{ + const unsigned char *pp = str->data; + ASN1_STRING *ret = ASN1_STRING_new(); + int rv = 0; + + /* This allows UTF8String, IA5String, VisibleString, or BMPString; + * conversion to UTF-8 is forced. */ + if (d2i_DISPLAYTEXT(&ret, &pp, str->length)) { + ASN1_STRING_print_ex(bio, ret, ASN1_STRFLGS_UTF8_CONVERT); + rv = 1; + } + + ASN1_STRING_free(ret); + return rv; +} + +apr_array_header_t *ssl_ext_list(apr_pool_t *p, conn_rec *c, int peer, + const char *extension) +{ + SSLConnRec *sslconn = myConnConfig(c); + SSL *ssl = NULL; + apr_array_header_t *array = NULL; + X509 *xs = NULL; + ASN1_OBJECT *oid = NULL; + int count = 0, j; + + if (!sslconn || !sslconn->ssl || !extension) { + return NULL; + } + ssl = sslconn->ssl; + + /* We accept the "extension" string to be converted as + * a long name (nsComment), short name (DN) or + * numeric OID (1.2.3.4). + */ + oid = OBJ_txt2obj(extension, 0); + if (!oid) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01970) + "could not parse OID '%s'", extension); + ERR_clear_error(); + return NULL; + } + + xs = peer ? SSL_get_peer_certificate(ssl) : SSL_get_certificate(ssl); + if (xs == NULL) { + return NULL; + } + + count = X509_get_ext_count(xs); + /* Create an array large enough to accomodate every extension. This is + * likely overkill, but safe. + */ + array = apr_array_make(p, count, sizeof(char *)); + for (j = 0; j < count; j++) { + X509_EXTENSION *ext = X509_get_ext(xs, j); + + if (OBJ_cmp(ext->object, oid) == 0) { + BIO *bio = BIO_new(BIO_s_mem()); + + /* We want to obtain a string representation of the extensions + * value and add it to the array we're building. + * X509V3_EXT_print() doesn't know about all the possible + * data types, but the value is stored as an ASN1_OCTET_STRING + * allowing us a fallback in case of X509V3_EXT_print + * not knowing how to handle the data. + */ + if (X509V3_EXT_print(bio, ext, 0, 0) == 1 || + dump_extn_value(bio, X509_EXTENSION_get_data(ext)) == 1) { + BUF_MEM *buf; + char **ptr = apr_array_push(array); + BIO_get_mem_ptr(bio, &buf); + *ptr = apr_pstrmemdup(p, buf->data, buf->length); + } else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01971) + "Found an extension '%s', but failed to " + "create a string from it", extension); + } + BIO_vfree(bio); + } + } + + if (array->nelts == 0) + array = NULL; + + if (peer) { + /* only SSL_get_peer_certificate raises the refcount */ + X509_free(xs); + } + + ASN1_OBJECT_free(oid); + ERR_clear_error(); + return array; +} + +static char *ssl_var_lookup_ssl_compress_meth(SSL *ssl) +{ + char *result = "NULL"; +#ifndef OPENSSL_NO_COMP + SSL_SESSION *pSession = SSL_get_session(ssl); + + if (pSession) { +#ifdef OPENSSL_NO_SSL_INTERN + switch (SSL_SESSION_get_compress_id(pSession)) { +#else + switch (pSession->compress_meth) { +#endif + case 0: + /* default "NULL" already set */ + break; + + /* Defined by RFC 3749, deflate is coded by "1" */ + case 1: + result = "DEFLATE"; + break; + + /* IANA assigned compression number for LZS */ + case 0x40: + result = "LZS"; + break; + + default: + result = "UNKNOWN"; + break; + } + } +#endif + return result; +} + +/* _________________________________________________________________ +** +** SSL Extension to mod_log_config +** _________________________________________________________________ +*/ + +#include "../../modules/loggers/mod_log_config.h" + +static const char *ssl_var_log_handler_c(request_rec *r, char *a); +static const char *ssl_var_log_handler_x(request_rec *r, char *a); + +/* + * register us for the mod_log_config function registering phase + * to establish %{...}c and to be able to expand %{...}x variables. + */ +void ssl_var_log_config_register(apr_pool_t *p) +{ + static APR_OPTIONAL_FN_TYPE(ap_register_log_handler) *log_pfn_register; + + log_pfn_register = APR_RETRIEVE_OPTIONAL_FN(ap_register_log_handler); + + if (log_pfn_register) { + log_pfn_register(p, "c", ssl_var_log_handler_c, 0); + log_pfn_register(p, "x", ssl_var_log_handler_x, 0); + } + return; +} + +/* + * implement the %{..}c log function + * (we are the only function) + */ +static const char *ssl_var_log_handler_c(request_rec *r, char *a) +{ + SSLConnRec *sslconn = myConnConfig(r->connection); + char *result; + + if (sslconn == NULL || sslconn->ssl == NULL) + return NULL; + result = NULL; + if (strEQ(a, "version")) + result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_PROTOCOL"); + else if (strEQ(a, "cipher")) + result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER"); + else if (strEQ(a, "subjectdn") || strEQ(a, "clientcert")) + result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CLIENT_S_DN"); + else if (strEQ(a, "issuerdn") || strEQ(a, "cacert")) + result = ssl_var_lookup(r->pool, r->server, r->connection, r, "SSL_CLIENT_I_DN"); + else if (strEQ(a, "errcode")) + result = "-"; + else if (strEQ(a, "errstr")) + result = (char *)sslconn->verify_error; + if (result != NULL && result[0] == NUL) + result = NULL; + return result; +} + +/* + * extend the implementation of the %{..}x log function + * (there can be more functions) + */ +static const char *ssl_var_log_handler_x(request_rec *r, char *a) +{ + char *result; + + result = ssl_var_lookup(r->pool, r->server, r->connection, r, a); + if (result != NULL && result[0] == NUL) + result = NULL; + return result; +} + + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_private.h b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_private.h new file mode 100644 index 0000000000..09e698b328 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_private.h @@ -0,0 +1,975 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SSL_PRIVATE_H +#define SSL_PRIVATE_H + +/** + * @file ssl_private.h + * @brief Internal interfaces private to mod_ssl. + * + * @defgroup MOD_SSL_PRIVATE Private + * @ingroup MOD_SSL + * @{ + */ + +/** Apache headers */ +#include "httpd.h" +#include "http_config.h" +#include "http_core.h" +#include "http_log.h" +#include "http_main.h" +#include "http_connection.h" +#include "http_request.h" +#include "http_protocol.h" +#include "http_vhost.h" +#include "util_script.h" +#include "util_filter.h" +#include "util_ebcdic.h" +#include "util_mutex.h" +#include "apr.h" +#include "apr_strings.h" +#define APR_WANT_STRFUNC +#define APR_WANT_MEMFUNC +#include "apr_want.h" +#include "apr_tables.h" +#include "apr_lib.h" +#include "apr_fnmatch.h" +#include "apr_strings.h" +#include "apr_global_mutex.h" +#include "apr_optional.h" +#include "ap_socache.h" +#include "mod_auth.h" + +/* The #ifdef macros are only defined AFTER including the above + * therefore we cannot include these system files at the top :-( + */ +#ifdef APR_HAVE_STDLIB_H +#include +#endif +#if APR_HAVE_SYS_TIME_H +#include +#endif +#if APR_HAVE_UNISTD_H +#include /* needed for STDIN_FILENO et.al., at least on FreeBSD */ +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE !FALSE +#endif + +#ifndef BOOL +#define BOOL unsigned int +#endif + +#include "ap_expr.h" + +/* OpenSSL headers */ +#include +#if (OPENSSL_VERSION_NUMBER >= 0x10001000) +/* must be defined before including ssl.h */ +#define OPENSSL_NO_SSL_INTERN +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Avoid tripping over an engine build installed globally and detected + * when the user points at an explicit non-engine flavor of OpenSSL + */ +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT) +#include +#endif + +#if (OPENSSL_VERSION_NUMBER < 0x0090801f) +#error mod_ssl requires OpenSSL 0.9.8a or later +#endif + +/** + * ...shifting sands of OpenSSL... + * Note: when adding support for new OpenSSL features, avoid explicit + * version number checks whenever possible, and use "feature-based" + * detection instead (check for definitions of constants or functions) + */ +#if (OPENSSL_VERSION_NUMBER >= 0x10000000) +#define MODSSL_SSL_CIPHER_CONST const +#define MODSSL_SSL_METHOD_CONST const +#else +#define MODSSL_SSL_CIPHER_CONST +#define MODSSL_SSL_METHOD_CONST +#endif + +#if defined(OPENSSL_FIPS) +#define HAVE_FIPS +#endif + +#if defined(SSL_OP_NO_TLSv1_2) +#define HAVE_TLSV1_X +#endif + +#if defined(SSL_CONF_FLAG_FILE) +#define HAVE_SSL_CONF_CMD +#endif + +/** + * The following features all depend on TLS extension support. + * Within this block, check again for features (not version numbers). + */ +#if !defined(OPENSSL_NO_TLSEXT) && defined(SSL_set_tlsext_host_name) + +#define HAVE_TLSEXT + +/* ECC: make sure we have at least 1.0.0 */ +#if !defined(OPENSSL_NO_EC) && defined(TLSEXT_ECPOINTFORMAT_uncompressed) +#define HAVE_ECC +#endif + +/* OCSP stapling */ +#if !defined(OPENSSL_NO_OCSP) && defined(SSL_CTX_set_tlsext_status_cb) +#define HAVE_OCSP_STAPLING +#ifndef sk_OPENSSL_STRING_pop +#define sk_OPENSSL_STRING_pop sk_pop +#endif +#endif + +/* TLS session tickets */ +#if defined(SSL_CTX_set_tlsext_ticket_key_cb) +#define HAVE_TLS_SESSION_TICKETS +#define TLSEXT_TICKET_KEY_LEN 48 +#ifndef tlsext_tick_md +#ifdef OPENSSL_NO_SHA256 +#define tlsext_tick_md EVP_sha1 +#else +#define tlsext_tick_md EVP_sha256 +#endif +#endif +#endif + +/* ALPN Protocol Negotiation */ +#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_TLSEXT) +#define HAVE_TLS_ALPN +#endif + +/* Next Protocol Negotiation */ +#if !defined(OPENSSL_NO_NEXTPROTONEG) && defined(OPENSSL_NPN_NEGOTIATED) +#define HAVE_TLS_NPN +#endif + +/* Secure Remote Password */ +#if !defined(OPENSSL_NO_SRP) && defined(SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB) +#define HAVE_SRP +#include +#endif + +#endif /* !defined(OPENSSL_NO_TLSEXT) && defined(SSL_set_tlsext_host_name) */ + +/* mod_ssl headers */ +#include "ssl_util_ssl.h" + +APLOG_USE_MODULE(ssl); + +/* + * Provide reasonable default for some defines + */ +#ifndef PFALSE +#define PFALSE ((void *)FALSE) +#endif +#ifndef PTRUE +#define PTRUE ((void *)TRUE) +#endif +#ifndef UNSET +#define UNSET (-1) +#endif +#ifndef NUL +#define NUL '\0' +#endif +#ifndef RAND_MAX +#include +#define RAND_MAX INT_MAX +#endif + +/** + * Provide reasonable defines for some types + */ +#ifndef UCHAR +#define UCHAR unsigned char +#endif + +/** + * Provide useful shorthands + */ +#define strEQ(s1,s2) (strcmp(s1,s2) == 0) +#define strNE(s1,s2) (strcmp(s1,s2) != 0) +#define strEQn(s1,s2,n) (strncmp(s1,s2,n) == 0) +#define strNEn(s1,s2,n) (strncmp(s1,s2,n) != 0) + +#define strcEQ(s1,s2) (strcasecmp(s1,s2) == 0) +#define strcNE(s1,s2) (strcasecmp(s1,s2) != 0) +#define strcEQn(s1,s2,n) (strncasecmp(s1,s2,n) == 0) +#define strcNEn(s1,s2,n) (strncasecmp(s1,s2,n) != 0) + +#define strIsEmpty(s) (s == NULL || s[0] == NUL) + +#define myConnConfig(c) \ +(SSLConnRec *)ap_get_module_config(c->conn_config, &ssl_module) +#define myCtxConfig(sslconn, sc) (sslconn->is_proxy ? sc->proxy : sc->server) +#define myConnConfigSet(c, val) \ +ap_set_module_config(c->conn_config, &ssl_module, val) +#define mySrvConfig(srv) (SSLSrvConfigRec *)ap_get_module_config(srv->module_config, &ssl_module) +#define myDirConfig(req) (SSLDirConfigRec *)ap_get_module_config(req->per_dir_config, &ssl_module) +#define myModConfig(srv) (mySrvConfig((srv)))->mc +#define mySrvFromConn(c) (myConnConfig(c))->server +#define mySrvConfigFromConn(c) mySrvConfig(mySrvFromConn(c)) +#define myModConfigFromConn(c) myModConfig(mySrvFromConn(c)) + +/** + * Defaults for the configuration + */ +#ifndef SSL_SESSION_CACHE_TIMEOUT +#define SSL_SESSION_CACHE_TIMEOUT 300 +#endif + +/* Default setting for per-dir reneg buffer. */ +#ifndef DEFAULT_RENEG_BUFFER_SIZE +#define DEFAULT_RENEG_BUFFER_SIZE (128 * 1024) +#endif + +/* Default for OCSP response validity */ +#ifndef DEFAULT_OCSP_MAX_SKEW +#define DEFAULT_OCSP_MAX_SKEW (60 * 5) +#endif + +/* Default timeout for OCSP queries */ +#ifndef DEFAULT_OCSP_TIMEOUT +#define DEFAULT_OCSP_TIMEOUT 10 +#endif + +/* + * For better backwards compatibility with the SSLCertificate[Key]File + * and SSLPassPhraseDialog ("exec" type) directives in 2.4.7 and earlier + */ +#ifdef HAVE_ECC +#define CERTKEYS_IDX_MAX 2 +#else +#define CERTKEYS_IDX_MAX 1 +#endif + +/** + * Define the SSL options + */ +#define SSL_OPT_NONE (0) +#define SSL_OPT_RELSET (1<<0) +#define SSL_OPT_STDENVVARS (1<<1) +#define SSL_OPT_EXPORTCERTDATA (1<<3) +#define SSL_OPT_FAKEBASICAUTH (1<<4) +#define SSL_OPT_STRICTREQUIRE (1<<5) +#define SSL_OPT_OPTRENEGOTIATE (1<<6) +#define SSL_OPT_LEGACYDNFORMAT (1<<7) +typedef int ssl_opt_t; + +/** + * Define the SSL Protocol options + */ +#define SSL_PROTOCOL_NONE (0) +#define SSL_PROTOCOL_SSLV2 (1<<0) +#define SSL_PROTOCOL_SSLV3 (1<<1) +#define SSL_PROTOCOL_TLSV1 (1<<2) +#ifdef HAVE_TLSV1_X +#define SSL_PROTOCOL_TLSV1_1 (1<<3) +#define SSL_PROTOCOL_TLSV1_2 (1<<4) +#define SSL_PROTOCOL_ALL (SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1| \ + SSL_PROTOCOL_TLSV1_1|SSL_PROTOCOL_TLSV1_2) +#else +#define SSL_PROTOCOL_ALL (SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1) +#endif +typedef int ssl_proto_t; + +/** + * Define the SSL verify levels + */ +typedef enum { + SSL_CVERIFY_UNSET = UNSET, + SSL_CVERIFY_NONE = 0, + SSL_CVERIFY_OPTIONAL = 1, + SSL_CVERIFY_REQUIRE = 2, + SSL_CVERIFY_OPTIONAL_NO_CA = 3 +} ssl_verify_t; + +#define SSL_VERIFY_PEER_STRICT \ + (SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT) + +#define ssl_verify_error_is_optional(errnum) \ + ((errnum == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) \ + || (errnum == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) \ + || (errnum == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) \ + || (errnum == X509_V_ERR_CERT_UNTRUSTED) \ + || (errnum == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE)) + +/** + * CRL checking modes + */ +typedef enum { + SSL_CRLCHECK_UNSET = UNSET, + SSL_CRLCHECK_NONE = 0, + SSL_CRLCHECK_LEAF = 1, + SSL_CRLCHECK_CHAIN = 2 +} ssl_crlcheck_t; + +/** + * Define the SSL pass phrase dialog types + */ +typedef enum { + SSL_PPTYPE_UNSET = UNSET, + SSL_PPTYPE_BUILTIN = 0, + SSL_PPTYPE_FILTER = 1, + SSL_PPTYPE_PIPE = 2 +} ssl_pphrase_t; + +/** + * Define the Path Checking modes + */ +#define SSL_PCM_EXISTS 1 +#define SSL_PCM_ISREG 2 +#define SSL_PCM_ISDIR 4 +#define SSL_PCM_ISNONZERO 8 +typedef unsigned int ssl_pathcheck_t; + +/** + * Define the SSL enabled state + */ +typedef enum { + SSL_ENABLED_UNSET = UNSET, + SSL_ENABLED_FALSE = 0, + SSL_ENABLED_TRUE = 1, + SSL_ENABLED_OPTIONAL = 3 +} ssl_enabled_t; + +/** + * Define the SSL requirement structure + */ +typedef struct { + char *cpExpr; + ap_expr_info_t *mpExpr; +} ssl_require_t; + +/** + * Define the SSL random number generator seeding source + */ +typedef enum { + SSL_RSCTX_STARTUP = 1, + SSL_RSCTX_CONNECT = 2 +} ssl_rsctx_t; +typedef enum { + SSL_RSSRC_BUILTIN = 1, + SSL_RSSRC_FILE = 2, + SSL_RSSRC_EXEC = 3, + SSL_RSSRC_EGD = 4 +} ssl_rssrc_t; +typedef struct { + ssl_rsctx_t nCtx; + ssl_rssrc_t nSrc; + char *cpPath; + int nBytes; +} ssl_randseed_t; + +/** + * Define the structure of an ASN.1 anything + */ +typedef struct { + long int nData; + unsigned char *cpData; + apr_time_t source_mtime; +} ssl_asn1_t; + +/** + * Define the mod_ssl per-module configuration structure + * (i.e. the global configuration for each httpd process) + */ + +typedef enum { + SSL_SHUTDOWN_TYPE_UNSET, + SSL_SHUTDOWN_TYPE_STANDARD, + SSL_SHUTDOWN_TYPE_UNCLEAN, + SSL_SHUTDOWN_TYPE_ACCURATE +} ssl_shutdown_type_e; + +typedef struct { + SSL *ssl; + const char *client_dn; + X509 *client_cert; + ssl_shutdown_type_e shutdown_type; + const char *verify_info; + const char *verify_error; + int verify_depth; + int is_proxy; + int disabled; + enum { + NON_SSL_OK = 0, /* is SSL request, or error handling completed */ + NON_SSL_SEND_HDR_SEP, /* Need to send the header separator */ + NON_SSL_SET_ERROR_MSG /* Need to set the error message */ + } non_ssl_request; + + /* Track the handshake/renegotiation state for the connection so + * that all client-initiated renegotiations can be rejected, as a + * partial fix for CVE-2009-3555. */ + enum { + RENEG_INIT = 0, /* Before initial handshake */ + RENEG_REJECT, /* After initial handshake; any client-initiated + * renegotiation should be rejected */ + RENEG_ALLOW, /* A server-initiated renegotiation is taking + * place (as dictated by configuration) */ + RENEG_ABORT /* Renegotiation initiated by client, abort the + * connection */ + } reneg_state; + +#ifdef HAVE_TLS_NPN + /* Poor man's inter-module optional hooks for NPN. */ + apr_array_header_t *alpn_proposefns; /* list of ssl_alpn_propose_protos callbacks */ + apr_array_header_t *alpn_negofns; /* list of ssl_alpn_proto_negotiated callbacks. */ +#endif + + server_rec *server; +} SSLConnRec; + +/* BIG FAT WARNING: SSLModConfigRec has unusual memory lifetime: it is + * allocated out of the "process" pool and only a single such + * structure is created and used for the lifetime of the process. + * (The process pool is s->process->pool and is stored in the .pPool + * field.) Most members of this structure are likewise allocated out + * of the process pool, but notably sesscache and sesscache_context + * are not. + * + * The structure is treated as mostly immutable after a single config + * parse has completed; the post_config hook (ssl_init_Module) flips + * the bFixed flag to true and subsequent invocations of the config + * callbacks hence do nothing. + * + * This odd lifetime strategy is used so that encrypted private keys + * can be decrypted once at startup and continue to be used across + * subsequent server reloads where the interactive password prompt is + * not possible. + + * It is really an ABI nightmare waiting to happen since DSOs are + * reloaded across restarts, and nothing prevents the struct type + * changing across such reloads, yet the cached structure will be + * assumed to match regardless. + * + * This should really be fixed using a smaller structure which only + * stores that which is absolutely necessary (the private keys, maybe + * the random seed), and have that structure be strictly ABI-versioned + * for safety. + */ +typedef struct { + pid_t pid; + apr_pool_t *pPool; + BOOL bFixed; + + /* OpenSSL SSL_SESS_CACHE_* flags: */ + long sesscache_mode; + + /* The configured provider, and associated private data + * structure. */ + const ap_socache_provider_t *sesscache; + ap_socache_instance_t *sesscache_context; + + apr_global_mutex_t *pMutex; + apr_array_header_t *aRandSeed; + apr_hash_t *tVHostKeys; + + /* A hash table of pointers to ssl_asn1_t structures. The structures + * are used to store private keys in raw DER format (serialized OpenSSL + * PrivateKey structures). The table is indexed by (vhost-id, + * index), for example the string "vhost.example.com:443:0". */ + apr_hash_t *tPrivateKey; + +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT) + const char *szCryptoDevice; +#endif + +#ifdef HAVE_OCSP_STAPLING + const ap_socache_provider_t *stapling_cache; + ap_socache_instance_t *stapling_cache_context; + apr_global_mutex_t *stapling_mutex; +#endif +} SSLModConfigRec; + +/** Structure representing configured filenames for certs and keys for + * a given vhost */ +typedef struct { + /* Lists of configured certs and keys for this server */ + apr_array_header_t *cert_files; + apr_array_header_t *key_files; + + /** Certificates which specify the set of CA names which should be + * sent in the CertificateRequest message: */ + const char *ca_name_path; + const char *ca_name_file; +} modssl_pk_server_t; + +typedef struct { + /** proxy can have any number of cert/key pairs */ + const char *cert_file; + const char *cert_path; + const char *ca_cert_file; + STACK_OF(X509_INFO) *certs; /* Contains End Entity certs */ + STACK_OF(X509) **ca_certs; /* Contains ONLY chain certs for + * each item in certs. + * (ptr to array of ptrs) */ +} modssl_pk_proxy_t; + +/** stuff related to authentication that can also be per-dir */ +typedef struct { + /** known/trusted CAs */ + const char *ca_cert_path; + const char *ca_cert_file; + + const char *cipher_suite; + + /** for client or downstream server authentication */ + int verify_depth; + ssl_verify_t verify_mode; +} modssl_auth_ctx_t; + +#ifdef HAVE_TLS_SESSION_TICKETS +typedef struct { + const char *file_path; + unsigned char key_name[16]; + unsigned char hmac_secret[16]; + unsigned char aes_key[16]; +} modssl_ticket_key_t; +#endif + +#ifdef HAVE_SSL_CONF_CMD +typedef struct { + const char *name; + const char *value; +} ssl_ctx_param_t; +#endif + +typedef struct SSLSrvConfigRec SSLSrvConfigRec; + +typedef struct { + SSLSrvConfigRec *sc; /** pointer back to server config */ + SSL_CTX *ssl_ctx; + + /** we are one or the other */ + modssl_pk_server_t *pks; + modssl_pk_proxy_t *pkp; + +#ifdef HAVE_TLS_SESSION_TICKETS + modssl_ticket_key_t *ticket_key; +#endif + + ssl_proto_t protocol; + + /** config for handling encrypted keys */ + ssl_pphrase_t pphrase_dialog_type; + const char *pphrase_dialog_path; + + const char *cert_chain; + + /** certificate revocation list */ + const char *crl_path; + const char *crl_file; + ssl_crlcheck_t crl_check_mode; + +#ifdef HAVE_OCSP_STAPLING + /** OCSP stapling options */ + BOOL stapling_enabled; + long stapling_resptime_skew; + long stapling_resp_maxage; + int stapling_cache_timeout; + BOOL stapling_return_errors; + BOOL stapling_fake_trylater; + int stapling_errcache_timeout; + apr_interval_time_t stapling_responder_timeout; + const char *stapling_force_url; +#endif + +#ifdef HAVE_SRP + char *srp_vfile; + char *srp_unknown_user_seed; + SRP_VBASE *srp_vbase; +#endif + + modssl_auth_ctx_t auth; + + BOOL ocsp_enabled; /* true if OCSP verification enabled */ + BOOL ocsp_force_default; /* true if the default responder URL is + * used regardless of per-cert URL */ + const char *ocsp_responder; /* default responder URL */ + long ocsp_resptime_skew; + long ocsp_resp_maxage; + apr_interval_time_t ocsp_responder_timeout; + BOOL ocsp_use_request_nonce; + +#ifdef HAVE_SSL_CONF_CMD + SSL_CONF_CTX *ssl_ctx_config; /* Configuration context */ + apr_array_header_t *ssl_ctx_param; /* parameters to pass to SSL_CTX */ +#endif + +#if defined(HAVE_ALPN_NPN) || defined(HAVE_TLS_NPN) + apr_array_header_t *ssl_alpn_pref; /* protocol names in order of preference */ +#endif +} modssl_ctx_t; + +struct SSLSrvConfigRec { + SSLModConfigRec *mc; + ssl_enabled_t enabled; + BOOL proxy_enabled; + const char *vhost_id; + int vhost_id_len; + int session_cache_timeout; + BOOL cipher_server_pref; + BOOL insecure_reneg; + modssl_ctx_t *server; + modssl_ctx_t *proxy; + ssl_enabled_t proxy_ssl_check_peer_expire; + ssl_enabled_t proxy_ssl_check_peer_cn; + ssl_enabled_t proxy_ssl_check_peer_name; +#ifdef HAVE_TLSEXT + ssl_enabled_t strict_sni_vhost_check; +#endif +#ifdef HAVE_FIPS + BOOL fips; +#endif +#ifndef OPENSSL_NO_COMP + BOOL compression; +#endif +}; + +/** + * Define the mod_ssl per-directory configuration structure + * (i.e. the local configuration for all <Directory> + * and .htaccess contexts) + */ +typedef struct { + BOOL bSSLRequired; + apr_array_header_t *aRequirement; + ssl_opt_t nOptions; + ssl_opt_t nOptionsAdd; + ssl_opt_t nOptionsDel; + const char *szCipherSuite; + ssl_verify_t nVerifyClient; + int nVerifyDepth; + const char *szCACertificatePath; + const char *szCACertificateFile; + const char *szUserName; + apr_size_t nRenegBufferSize; +} SSLDirConfigRec; + +/** + * function prototypes + */ + +/** API glue structures */ +extern module AP_MODULE_DECLARE_DATA ssl_module; + +/** configuration handling */ +SSLModConfigRec *ssl_config_global_create(server_rec *); +void ssl_config_global_fix(SSLModConfigRec *); +BOOL ssl_config_global_isfixed(SSLModConfigRec *); +void *ssl_config_server_create(apr_pool_t *, server_rec *); +void *ssl_config_server_merge(apr_pool_t *, void *, void *); +void *ssl_config_perdir_create(apr_pool_t *, char *); +void *ssl_config_perdir_merge(apr_pool_t *, void *, void *); +const char *ssl_cmd_SSLPassPhraseDialog(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCryptoDevice(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLRandomSeed(cmd_parms *, void *, const char *, const char *, const char *); +const char *ssl_cmd_SSLEngine(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCipherSuite(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCertificateFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCertificateKeyFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCertificateChainFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCACertificatePath(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCACertificateFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCADNRequestPath(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCADNRequestFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCARevocationPath(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCARevocationFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLCARevocationCheck(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLHonorCipherOrder(cmd_parms *cmd, void *dcfg, int flag); +const char *ssl_cmd_SSLCompression(cmd_parms *, void *, int flag); +const char *ssl_cmd_SSLVerifyClient(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLVerifyDepth(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLSessionCache(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLSessionCacheTimeout(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProtocol(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLOptions(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLRequireSSL(cmd_parms *, void *); +const char *ssl_cmd_SSLRequire(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLUserName(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLRenegBufferSize(cmd_parms *cmd, void *dcfg, const char *arg); +const char *ssl_cmd_SSLStrictSNIVHostCheck(cmd_parms *cmd, void *dcfg, int flag); +const char *ssl_cmd_SSLInsecureRenegotiation(cmd_parms *cmd, void *dcfg, int flag); + +const char *ssl_cmd_SSLProxyEngine(cmd_parms *cmd, void *dcfg, int flag); +const char *ssl_cmd_SSLProxyProtocol(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyCipherSuite(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyVerify(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyVerifyDepth(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyCACertificatePath(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyCACertificateFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyCARevocationPath(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyCARevocationFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyCARevocationCheck(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyMachineCertificatePath(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyMachineCertificateFile(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLProxyMachineCertificateChainFile(cmd_parms *, void *, const char *); +#ifdef HAVE_TLS_SESSION_TICKETS +const char *ssl_cmd_SSLSessionTicketKeyFile(cmd_parms *cmd, void *dcfg, const char *arg); +#endif +const char *ssl_cmd_SSLProxyCheckPeerExpire(cmd_parms *cmd, void *dcfg, int flag); +const char *ssl_cmd_SSLProxyCheckPeerCN(cmd_parms *cmd, void *dcfg, int flag); +const char *ssl_cmd_SSLProxyCheckPeerName(cmd_parms *cmd, void *dcfg, int flag); + +const char *ssl_cmd_SSLOCSPOverrideResponder(cmd_parms *cmd, void *dcfg, int flag); +const char *ssl_cmd_SSLOCSPDefaultResponder(cmd_parms *cmd, void *dcfg, const char *arg); +const char *ssl_cmd_SSLOCSPResponseTimeSkew(cmd_parms *cmd, void *dcfg, const char *arg); +const char *ssl_cmd_SSLOCSPResponseMaxAge(cmd_parms *cmd, void *dcfg, const char *arg); +const char *ssl_cmd_SSLOCSPResponderTimeout(cmd_parms *cmd, void *dcfg, const char *arg); +const char *ssl_cmd_SSLOCSPUseRequestNonce(cmd_parms *cmd, void *dcfg, int flag); +const char *ssl_cmd_SSLOCSPEnable(cmd_parms *cmd, void *dcfg, int flag); + +#ifdef HAVE_SSL_CONF_CMD +const char *ssl_cmd_SSLOpenSSLConfCmd(cmd_parms *cmd, void *dcfg, const char *arg1, const char *arg2); +#endif + +#if defined(HAVE_ALPN_NPN) || defined(HAVE_TLS_NPN) +const char *ssl_cmd_SSLAlpnPreference(cmd_parms *cmd, void *dcfg, const char *protocol); +#endif + +#ifdef HAVE_SRP +const char *ssl_cmd_SSLSRPVerifierFile(cmd_parms *cmd, void *dcfg, const char *arg); +const char *ssl_cmd_SSLSRPUnknownUserSeed(cmd_parms *cmd, void *dcfg, const char *arg); +#endif + +const char *ssl_cmd_SSLFIPS(cmd_parms *cmd, void *dcfg, int flag); + +/** module initialization */ +apr_status_t ssl_init_Module(apr_pool_t *, apr_pool_t *, apr_pool_t *, server_rec *); +apr_status_t ssl_init_Engine(server_rec *, apr_pool_t *); +apr_status_t ssl_init_ConfigureServer(server_rec *, apr_pool_t *, apr_pool_t *, SSLSrvConfigRec *, + apr_array_header_t *); +apr_status_t ssl_init_CheckServers(server_rec *, apr_pool_t *); +STACK_OF(X509_NAME) + *ssl_init_FindCAList(server_rec *, apr_pool_t *, const char *, const char *); +void ssl_init_Child(apr_pool_t *, server_rec *); +apr_status_t ssl_init_ModuleKill(void *data); + +/** Apache API hooks */ +int ssl_hook_Auth(request_rec *); +int ssl_hook_UserCheck(request_rec *); +int ssl_hook_Access(request_rec *); +int ssl_hook_Fixup(request_rec *); +int ssl_hook_ReadReq(request_rec *); +int ssl_hook_Upgrade(request_rec *); +void ssl_hook_ConfigTest(apr_pool_t *pconf, server_rec *s); + +/** Apache authz provisders */ +extern const authz_provider ssl_authz_provider_require_ssl; +extern const authz_provider ssl_authz_provider_verify_client; + +/** OpenSSL callbacks */ +DH *ssl_callback_TmpDH(SSL *, int, int); +int ssl_callback_SSLVerify(int, X509_STORE_CTX *); +int ssl_callback_SSLVerify_CRL(int, X509_STORE_CTX *, conn_rec *); +int ssl_callback_proxy_cert(SSL *ssl, X509 **x509, EVP_PKEY **pkey); +int ssl_callback_NewSessionCacheEntry(SSL *, SSL_SESSION *); +SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL *, unsigned char *, int, int *); +void ssl_callback_DelSessionCacheEntry(SSL_CTX *, SSL_SESSION *); +void ssl_callback_Info(const SSL *, int, int); +#ifdef HAVE_TLSEXT +int ssl_callback_ServerNameIndication(SSL *, int *, modssl_ctx_t *); +#endif +#ifdef HAVE_TLS_SESSION_TICKETS +int ssl_callback_SessionTicket(SSL *, unsigned char *, unsigned char *, + EVP_CIPHER_CTX *, HMAC_CTX *, int); +#endif + +#ifdef HAVE_TLS_ALPN +int ssl_callback_alpn_select(SSL *ssl, const unsigned char **out, + unsigned char *outlen, const unsigned char *in, + unsigned int inlen, void *arg); +#elif defined(HAVE_TLS_NPN) +int ssl_callback_AdvertiseNextProtos(SSL *ssl, const unsigned char **data, unsigned int *len, void *arg); +#endif + +/** Session Cache Support */ +apr_status_t ssl_scache_init(server_rec *, apr_pool_t *); +void ssl_scache_status_register(apr_pool_t *p); +void ssl_scache_kill(server_rec *); +BOOL ssl_scache_store(server_rec *, UCHAR *, int, + apr_time_t, SSL_SESSION *, apr_pool_t *); +SSL_SESSION *ssl_scache_retrieve(server_rec *, UCHAR *, int, apr_pool_t *); +void ssl_scache_remove(server_rec *, UCHAR *, int, + apr_pool_t *); + +/** Proxy Support */ +int ssl_proxy_enable(conn_rec *c); +int ssl_engine_disable(conn_rec *c); + +/** OCSP Stapling Support */ +#ifdef HAVE_OCSP_STAPLING +const char *ssl_cmd_SSLStaplingCache(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLUseStapling(cmd_parms *, void *, int); +const char *ssl_cmd_SSLStaplingResponseTimeSkew(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLStaplingResponseMaxAge(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLStaplingStandardCacheTimeout(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLStaplingErrorCacheTimeout(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLStaplingReturnResponderErrors(cmd_parms *, void *, int); +const char *ssl_cmd_SSLStaplingFakeTryLater(cmd_parms *, void *, int); +const char *ssl_cmd_SSLStaplingResponderTimeout(cmd_parms *, void *, const char *); +const char *ssl_cmd_SSLStaplingForceURL(cmd_parms *, void *, const char *); +apr_status_t modssl_init_stapling(server_rec *, apr_pool_t *, apr_pool_t *, modssl_ctx_t *); +void ssl_stapling_ex_init(void); +int ssl_stapling_init_cert(server_rec *s, modssl_ctx_t *mctx, X509 *x); +#endif +#ifdef HAVE_SRP +int ssl_callback_SRPServerParams(SSL *, int *, void *); +#endif + +/** I/O */ +void ssl_io_filter_init(conn_rec *, request_rec *r, SSL *); +void ssl_io_filter_register(apr_pool_t *); +long ssl_io_data_cb(BIO *, int, const char *, int, long, long); + +/* ssl_io_buffer_fill fills the setaside buffering of the HTTP request + * to allow an SSL renegotiation to take place. */ +int ssl_io_buffer_fill(request_rec *r, apr_size_t maxlen); + +/** PRNG */ +int ssl_rand_seed(server_rec *, apr_pool_t *, ssl_rsctx_t, char *); + +/** Utility Functions */ +char *ssl_util_vhostid(apr_pool_t *, server_rec *); +apr_file_t *ssl_util_ppopen(server_rec *, apr_pool_t *, const char *, + const char * const *); +void ssl_util_ppclose(server_rec *, apr_pool_t *, apr_file_t *); +char *ssl_util_readfilter(server_rec *, apr_pool_t *, const char *, + const char * const *); +BOOL ssl_util_path_check(ssl_pathcheck_t, const char *, apr_pool_t *); +void ssl_util_thread_setup(apr_pool_t *); +int ssl_init_ssl_connection(conn_rec *c, request_rec *r); + +/** Pass Phrase Support */ +apr_status_t ssl_load_encrypted_pkey(server_rec *, apr_pool_t *, int, + const char *, apr_array_header_t **); + +/** Diffie-Hellman Parameter Support */ +DH *ssl_dh_GetParamFromFile(const char *); +#ifdef HAVE_ECC +EC_GROUP *ssl_ec_GetParamFromFile(const char *); +#endif + +unsigned char *ssl_asn1_table_set(apr_hash_t *table, + const char *key, + long int length); + +ssl_asn1_t *ssl_asn1_table_get(apr_hash_t *table, + const char *key); + +void ssl_asn1_table_unset(apr_hash_t *table, + const char *key); + +/** Mutex Support */ +int ssl_mutex_init(server_rec *, apr_pool_t *); +int ssl_mutex_reinit(server_rec *, apr_pool_t *); +int ssl_mutex_on(server_rec *); +int ssl_mutex_off(server_rec *); + +int ssl_stapling_mutex_reinit(server_rec *, apr_pool_t *); + +/* mutex type names for Mutex directive */ +#define SSL_CACHE_MUTEX_TYPE "ssl-cache" +#define SSL_STAPLING_MUTEX_TYPE "ssl-stapling" + +apr_status_t ssl_die(server_rec *); + +/** Logfile Support */ +void ssl_log_ssl_error(const char *, int, int, server_rec *); + +/* ssl_log_xerror, ssl_log_cxerror and ssl_log_rxerror are wrappers for the + * respective ap_log_*error functions and take a certificate as an + * additional argument (whose details are appended to the log message). + * The other arguments are interpreted exactly as with their ap_log_*error + * counterparts. */ +void ssl_log_xerror(const char *file, int line, int level, + apr_status_t rv, apr_pool_t *p, server_rec *s, + X509 *cert, const char *format, ...) + __attribute__((format(printf,8,9))); + +void ssl_log_cxerror(const char *file, int line, int level, + apr_status_t rv, conn_rec *c, X509 *cert, + const char *format, ...) + __attribute__((format(printf,7,8))); + +void ssl_log_rxerror(const char *file, int line, int level, + apr_status_t rv, request_rec *r, X509 *cert, + const char *format, ...) + __attribute__((format(printf,7,8))); + +#define SSLLOG_MARK __FILE__,__LINE__ + +/** Variables */ + +/* Register variables for the lifetime of the process pool 'p'. */ +void ssl_var_register(apr_pool_t *p); +char *ssl_var_lookup(apr_pool_t *, server_rec *, conn_rec *, request_rec *, char *); +apr_array_header_t *ssl_ext_list(apr_pool_t *p, conn_rec *c, int peer, const char *extension); + +void ssl_var_log_config_register(apr_pool_t *p); + +/* Extract SSL_*_DN_* variables into table 't' from SSL object 'ssl', + * allocating from 'p': */ +void modssl_var_extract_dns(apr_table_t *t, SSL *ssl, apr_pool_t *p); + +#ifndef OPENSSL_NO_OCSP +/* Perform OCSP validation of the current cert in the given context. + * Returns non-zero on success or zero on failure. On failure, the + * context error code is set. */ +int modssl_verify_ocsp(X509_STORE_CTX *ctx, SSLSrvConfigRec *sc, + server_rec *s, conn_rec *c, apr_pool_t *pool); + +/* OCSP helper interface; dispatches the given OCSP request to the + * responder at the given URI. Returns the decoded OCSP response + * object, or NULL on error (in which case, errors will have been + * logged). Pool 'p' is used for temporary allocations. */ +OCSP_RESPONSE *modssl_dispatch_ocsp_request(const apr_uri_t *uri, + apr_interval_time_t timeout, + OCSP_REQUEST *request, + conn_rec *c, apr_pool_t *p); +#endif + +/* Retrieve DH parameters for given key length. Return value should + * be treated as unmutable, since it is stored in process-global + * memory. */ +DH *modssl_get_dh_params(unsigned keylen); + +#endif /* SSL_PRIVATE_H */ +/** @} */ + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_scache.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_scache.c new file mode 100644 index 0000000000..01f72546cd --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_scache.c @@ -0,0 +1,231 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_scache.c + * Session Cache Abstraction + */ + /* ``Open-Source Software: generous + programmers from around the world all + join forces to help you shoot + yourself in the foot for free.'' + -- Unknown */ +#include "ssl_private.h" +#include "mod_status.h" + +/* _________________________________________________________________ +** +** Session Cache: Common Abstraction Layer +** _________________________________________________________________ +*/ + +apr_status_t ssl_scache_init(server_rec *s, apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + struct ap_socache_hints hints; + + /* The very first invocation of this function will be the + * post_config invocation during server startup; do nothing for + * this first (and only the first) time through, since the pool + * will be immediately cleared anyway. For every subsequent + * invocation, initialize the configured cache. */ + if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) + return APR_SUCCESS; + +#ifdef HAVE_OCSP_STAPLING + if (mc->stapling_cache) { + memset(&hints, 0, sizeof hints); + hints.avg_obj_size = 1500; + hints.avg_id_len = 20; + hints.expiry_interval = 300; + + rv = mc->stapling_cache->init(mc->stapling_cache_context, + "mod_ssl-stapling", &hints, s, p); + if (rv) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01872) + "Could not initialize stapling cache. Exiting."); + return ssl_die(s); + } + } +#endif + + /* + * Warn the user that he should use the session cache. + * But we can operate without it, of course. + */ + if (mc->sesscache == NULL) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(01873) + "Init: Session Cache is not configured " + "[hint: SSLSessionCache]"); + return APR_SUCCESS; + } + + memset(&hints, 0, sizeof hints); + hints.avg_obj_size = 150; + hints.avg_id_len = 30; + hints.expiry_interval = 30; + + rv = mc->sesscache->init(mc->sesscache_context, "mod_ssl-session", &hints, s, p); + if (rv) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01874) + "Could not initialize session cache. Exiting."); + return ssl_die(s); + } + + return APR_SUCCESS; +} + +void ssl_scache_kill(server_rec *s) +{ + SSLModConfigRec *mc = myModConfig(s); + + if (mc->sesscache) { + mc->sesscache->destroy(mc->sesscache_context, s); + } + +#ifdef HAVE_OCSP_STAPLING + if (mc->stapling_cache) { + mc->stapling_cache->destroy(mc->stapling_cache_context, s); + } +#endif + +} + +BOOL ssl_scache_store(server_rec *s, UCHAR *id, int idlen, + apr_time_t expiry, SSL_SESSION *sess, + apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + unsigned char encoded[SSL_SESSION_MAX_DER], *ptr; + unsigned int len; + apr_status_t rv; + + /* Serialise the session. */ + len = i2d_SSL_SESSION(sess, NULL); + if (len > sizeof encoded) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01875) + "session is too big (%u bytes)", len); + return FALSE; + } + + ptr = encoded; + len = i2d_SSL_SESSION(sess, &ptr); + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_on(s); + } + + rv = mc->sesscache->store(mc->sesscache_context, s, id, idlen, + expiry, encoded, len, p); + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_off(s); + } + + return rv == APR_SUCCESS ? TRUE : FALSE; +} + +SSL_SESSION *ssl_scache_retrieve(server_rec *s, UCHAR *id, int idlen, + apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + unsigned char dest[SSL_SESSION_MAX_DER]; + unsigned int destlen = SSL_SESSION_MAX_DER; + const unsigned char *ptr; + apr_status_t rv; + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_on(s); + } + + rv = mc->sesscache->retrieve(mc->sesscache_context, s, id, idlen, + dest, &destlen, p); + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_off(s); + } + + if (rv != APR_SUCCESS) { + return NULL; + } + + ptr = dest; + + return d2i_SSL_SESSION(NULL, &ptr, destlen); +} + +void ssl_scache_remove(server_rec *s, UCHAR *id, int idlen, + apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_on(s); + } + + mc->sesscache->remove(mc->sesscache_context, s, id, idlen, p); + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_off(s); + } +} + +/* _________________________________________________________________ +** +** SSL Extension to mod_status +** _________________________________________________________________ +*/ +static int ssl_ext_status_hook(request_rec *r, int flags) +{ + SSLModConfigRec *mc = myModConfig(r->server); + + if (mc == NULL || flags & AP_STATUS_SHORT || mc->sesscache == NULL) + return OK; + + ap_rputs("
\n", r); + ap_rputs("\n", r); + ap_rputs("\n", r); + ap_rputs("\n", r); + ap_rputs("
\n", r); + ap_rputs("SSL/TLS Session Cache Status:\r", r); + ap_rputs("
\n", r); + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_on(r->server); + } + + mc->sesscache->status(mc->sesscache_context, r, flags); + + if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) { + ssl_mutex_off(r->server); + } + + ap_rputs("
\n", r); + return OK; +} + +void ssl_scache_status_register(apr_pool_t *p) +{ + APR_OPTIONAL_HOOK(ap, status_hook, ssl_ext_status_hook, NULL, NULL, + APR_HOOK_MIDDLE); +} + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util.c new file mode 100644 index 0000000000..476aa0b6d4 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util.c @@ -0,0 +1,379 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_util.c + * Utility Functions + */ + /* ``Every day of my life + I am forced to add another + name to the list of people + who piss me off!'' + -- Calvin */ + +#include "ssl_private.h" +#include "ap_mpm.h" +#include "apr_thread_mutex.h" + +/* _________________________________________________________________ +** +** Utility Functions +** _________________________________________________________________ +*/ + +char *ssl_util_vhostid(apr_pool_t *p, server_rec *s) +{ + char *id; + SSLSrvConfigRec *sc; + char *host; + apr_port_t port; + + host = s->server_hostname; + if (s->port != 0) + port = s->port; + else { + sc = mySrvConfig(s); + if (sc->enabled == TRUE) + port = DEFAULT_HTTPS_PORT; + else + port = DEFAULT_HTTP_PORT; + } + id = apr_psprintf(p, "%s:%lu", host, (unsigned long)port); + return id; +} + +apr_file_t *ssl_util_ppopen(server_rec *s, apr_pool_t *p, const char *cmd, + const char * const *argv) +{ + apr_procattr_t *procattr; + apr_proc_t *proc; + + if (apr_procattr_create(&procattr, p) != APR_SUCCESS) + return NULL; + if (apr_procattr_io_set(procattr, APR_FULL_BLOCK, APR_FULL_BLOCK, + APR_FULL_BLOCK) != APR_SUCCESS) + return NULL; + if (apr_procattr_dir_set(procattr, + ap_make_dirstr_parent(p, cmd)) != APR_SUCCESS) + return NULL; + if (apr_procattr_cmdtype_set(procattr, APR_PROGRAM) != APR_SUCCESS) + return NULL; + proc = apr_pcalloc(p, sizeof(apr_proc_t)); + if (apr_proc_create(proc, cmd, argv, NULL, procattr, p) != APR_SUCCESS) + return NULL; + return proc->out; +} + +void ssl_util_ppclose(server_rec *s, apr_pool_t *p, apr_file_t *fp) +{ + apr_file_close(fp); + return; +} + +/* + * Run a filter program and read the first line of its stdout output + */ +char *ssl_util_readfilter(server_rec *s, apr_pool_t *p, const char *cmd, + const char * const *argv) +{ + static char buf[MAX_STRING_LEN]; + apr_file_t *fp; + apr_size_t nbytes = 1; + char c; + int k; + + if ((fp = ssl_util_ppopen(s, p, cmd, argv)) == NULL) + return NULL; + /* XXX: we are reading 1 byte at a time here */ + for (k = 0; apr_file_read(fp, &c, &nbytes) == APR_SUCCESS + && nbytes == 1 && (k < MAX_STRING_LEN-1) ; ) { + if (c == '\n' || c == '\r') + break; + buf[k++] = c; + } + buf[k] = NUL; + ssl_util_ppclose(s, p, fp); + + return buf; +} + +BOOL ssl_util_path_check(ssl_pathcheck_t pcm, const char *path, apr_pool_t *p) +{ + apr_finfo_t finfo; + + if (path == NULL) + return FALSE; + if (pcm & SSL_PCM_EXISTS && apr_stat(&finfo, path, + APR_FINFO_TYPE|APR_FINFO_SIZE, p) != 0) + return FALSE; + AP_DEBUG_ASSERT((pcm & SSL_PCM_EXISTS) || + !(pcm & (SSL_PCM_ISREG|SSL_PCM_ISDIR|SSL_PCM_ISNONZERO))); + if (pcm & SSL_PCM_ISREG && finfo.filetype != APR_REG) + return FALSE; + if (pcm & SSL_PCM_ISDIR && finfo.filetype != APR_DIR) + return FALSE; + if (pcm & SSL_PCM_ISNONZERO && finfo.size <= 0) + return FALSE; + return TRUE; +} + +/* + * certain key data needs to survive restarts, + * which are stored in the user data table of s->process->pool. + * to prevent "leaking" of this data, we use malloc/free + * rather than apr_palloc and these wrappers to help make sure + * we do not leak the malloc-ed data. + */ +unsigned char *ssl_asn1_table_set(apr_hash_t *table, + const char *key, + long int length) +{ + apr_ssize_t klen = strlen(key); + ssl_asn1_t *asn1 = apr_hash_get(table, key, klen); + + /* + * if a value for this key already exists, + * reuse as much of the already malloc-ed data + * as possible. + */ + if (asn1) { + if (asn1->nData != length) { + free(asn1->cpData); /* XXX: realloc? */ + asn1->cpData = NULL; + } + } + else { + asn1 = ap_malloc(sizeof(*asn1)); + asn1->source_mtime = 0; /* used as a note for encrypted private keys */ + asn1->cpData = NULL; + } + + asn1->nData = length; + if (!asn1->cpData) { + asn1->cpData = ap_malloc(length); + } + + apr_hash_set(table, key, klen, asn1); + + return asn1->cpData; /* caller will assign a value to this */ +} + +ssl_asn1_t *ssl_asn1_table_get(apr_hash_t *table, + const char *key) +{ + return (ssl_asn1_t *)apr_hash_get(table, key, APR_HASH_KEY_STRING); +} + +void ssl_asn1_table_unset(apr_hash_t *table, + const char *key) +{ + apr_ssize_t klen = strlen(key); + ssl_asn1_t *asn1 = apr_hash_get(table, key, klen); + + if (!asn1) { + return; + } + + if (asn1->cpData) { + free(asn1->cpData); + } + free(asn1); + + apr_hash_set(table, key, klen, NULL); +} + +#if APR_HAS_THREADS +/* + * To ensure thread-safetyness in OpenSSL - work in progress + */ + +static apr_thread_mutex_t **lock_cs; +static int lock_num_locks; + +static void ssl_util_thr_lock(int mode, int type, + const char *file, int line) +{ + if (type < lock_num_locks) { + if (mode & CRYPTO_LOCK) { + apr_thread_mutex_lock(lock_cs[type]); + } + else { + apr_thread_mutex_unlock(lock_cs[type]); + } + } +} + +/* Dynamic lock structure */ +struct CRYPTO_dynlock_value { + apr_pool_t *pool; + const char* file; + int line; + apr_thread_mutex_t *mutex; +}; + +/* Global reference to the pool passed into ssl_util_thread_setup() */ +apr_pool_t *dynlockpool = NULL; + +/* + * Dynamic lock creation callback + */ +static struct CRYPTO_dynlock_value *ssl_dyn_create_function(const char *file, + int line) +{ + struct CRYPTO_dynlock_value *value; + apr_pool_t *p; + apr_status_t rv; + + /* + * We need a pool to allocate our mutex. Since we can't clear + * allocated memory from a pool, create a subpool that we can blow + * away in the destruction callback. + */ + apr_pool_create(&p, dynlockpool); + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_TRACE1, 0, p, + "Creating dynamic lock"); + + value = apr_palloc(p, sizeof(struct CRYPTO_dynlock_value)); + value->pool = p; + /* Keep our own copy of the place from which we were created, + using our own pool. */ + value->file = apr_pstrdup(p, file); + value->line = line; + rv = apr_thread_mutex_create(&(value->mutex), APR_THREAD_MUTEX_DEFAULT, + p); + if (rv != APR_SUCCESS) { + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_ERR, rv, p, APLOGNO(02186) + "Failed to create thread mutex for dynamic lock"); + apr_pool_destroy(p); + return NULL; + } + return value; +} + +/* + * Dynamic locking and unlocking function + */ + +static void ssl_dyn_lock_function(int mode, struct CRYPTO_dynlock_value *l, + const char *file, int line) +{ + apr_status_t rv; + + if (mode & CRYPTO_LOCK) { + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_TRACE3, 0, l->pool, + "Acquiring mutex %s:%d", l->file, l->line); + rv = apr_thread_mutex_lock(l->mutex); + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_TRACE3, rv, l->pool, + "Mutex %s:%d acquired!", l->file, l->line); + } + else { + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_TRACE3, 0, l->pool, + "Releasing mutex %s:%d", l->file, l->line); + rv = apr_thread_mutex_unlock(l->mutex); + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_TRACE3, rv, l->pool, + "Mutex %s:%d released!", l->file, l->line); + } +} + +/* + * Dynamic lock destruction callback + */ +static void ssl_dyn_destroy_function(struct CRYPTO_dynlock_value *l, + const char *file, int line) +{ + apr_status_t rv; + + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_TRACE1, 0, l->pool, + "Destroying dynamic lock %s:%d", l->file, l->line); + rv = apr_thread_mutex_destroy(l->mutex); + if (rv != APR_SUCCESS) { + ap_log_perror(file, line, APLOG_MODULE_INDEX, APLOG_ERR, rv, l->pool, + APLOGNO(02192) "Failed to destroy mutex for dynamic " + "lock %s:%d", l->file, l->line); + } + + /* Trust that whomever owned the CRYPTO_dynlock_value we were + * passed has no future use for it... + */ + apr_pool_destroy(l->pool); +} + +static unsigned long ssl_util_thr_id(void) +{ + /* OpenSSL needs this to return an unsigned long. On OS/390, the pthread + * id is a structure twice that big. Use the TCB pointer instead as a + * unique unsigned long. + */ +#ifdef __MVS__ + struct PSA { + char unmapped[540]; + unsigned long PSATOLD; + } *psaptr = 0; + + return psaptr->PSATOLD; +#else + return (unsigned long) apr_os_thread_current(); +#endif +} + +static apr_status_t ssl_util_thread_cleanup(void *data) +{ + CRYPTO_set_locking_callback(NULL); + CRYPTO_set_id_callback(NULL); + + CRYPTO_set_dynlock_create_callback(NULL); + CRYPTO_set_dynlock_lock_callback(NULL); + CRYPTO_set_dynlock_destroy_callback(NULL); + + dynlockpool = NULL; + + /* Let the registered mutex cleanups do their own thing + */ + return APR_SUCCESS; +} + +void ssl_util_thread_setup(apr_pool_t *p) +{ + int i; + + lock_num_locks = CRYPTO_num_locks(); + lock_cs = apr_palloc(p, lock_num_locks * sizeof(*lock_cs)); + + for (i = 0; i < lock_num_locks; i++) { + apr_thread_mutex_create(&(lock_cs[i]), APR_THREAD_MUTEX_DEFAULT, p); + } + + CRYPTO_set_id_callback(ssl_util_thr_id); + + CRYPTO_set_locking_callback(ssl_util_thr_lock); + + /* Set up dynamic locking scaffolding for OpenSSL to use at its + * convenience. + */ + dynlockpool = p; + CRYPTO_set_dynlock_create_callback(ssl_dyn_create_function); + CRYPTO_set_dynlock_lock_callback(ssl_dyn_lock_function); + CRYPTO_set_dynlock_destroy_callback(ssl_dyn_destroy_function); + + apr_pool_cleanup_register(p, NULL, ssl_util_thread_cleanup, + apr_pool_cleanup_null); +} +#endif diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ocsp.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ocsp.c new file mode 100644 index 0000000000..9016040528 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ocsp.c @@ -0,0 +1,319 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* This file implements an OCSP client including a toy HTTP/1.0 + * client. Once httpd depends on a real HTTP client library, most of + * this can be thrown away. */ + +#include "ssl_private.h" + +#ifndef OPENSSL_NO_OCSP + +#include "apr_buckets.h" +#include "apr_uri.h" + +/* Serialize an OCSP request which will be sent to the responder at + * given URI to a memory BIO object, which is returned. */ +static BIO *serialize_request(OCSP_REQUEST *req, const apr_uri_t *uri) +{ + BIO *bio; + int len; + + len = i2d_OCSP_REQUEST(req, NULL); + + bio = BIO_new(BIO_s_mem()); + + BIO_printf(bio, "POST %s%s%s HTTP/1.0\r\n" + "Host: %s:%d\r\n" + "Content-Type: application/ocsp-request\r\n" + "Content-Length: %d\r\n" + "\r\n", + uri->path ? uri->path : "/", + uri->query ? "?" : "", uri->query ? uri->query : "", + uri->hostname, uri->port, len); + + if (i2d_OCSP_REQUEST_bio(bio, req) != 1) { + BIO_free(bio); + return NULL; + } + + return bio; +} + +/* Send the OCSP request serialized into BIO 'request' to the + * responder at given server given by URI. Returns socket object or + * NULL on error. */ +static apr_socket_t *send_request(BIO *request, const apr_uri_t *uri, + apr_interval_time_t timeout, + conn_rec *c, apr_pool_t *p) +{ + apr_status_t rv; + apr_sockaddr_t *sa; + apr_socket_t *sd; + char buf[HUGE_STRING_LEN]; + int len; + + rv = apr_sockaddr_info_get(&sa, uri->hostname, APR_UNSPEC, uri->port, 0, p); + if (rv) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01972) + "could not resolve address of OCSP responder %s", + uri->hostinfo); + return NULL; + } + + /* establish a connection to the OCSP responder */ + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01973) + "connecting to OCSP responder '%s'", uri->hostinfo); + + /* Cycle through address until a connect() succeeds. */ + for (; sa; sa = sa->next) { + rv = apr_socket_create(&sd, sa->family, SOCK_STREAM, APR_PROTO_TCP, p); + if (rv == APR_SUCCESS) { + apr_socket_timeout_set(sd, timeout); + + rv = apr_socket_connect(sd, sa); + if (rv == APR_SUCCESS) { + break; + } + apr_socket_close(sd); + } + } + + if (sa == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01974) + "could not connect to OCSP responder '%s'", + uri->hostinfo); + return NULL; + } + + /* send the request and get a response */ + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01975) + "sending request to OCSP responder"); + + while ((len = BIO_read(request, buf, sizeof buf)) > 0) { + char *wbuf = buf; + apr_size_t remain = len; + + do { + apr_size_t wlen = remain; + + rv = apr_socket_send(sd, wbuf, &wlen); + wbuf += remain; + remain -= wlen; + } while (rv == APR_SUCCESS && remain > 0); + + if (rv) { + apr_socket_close(sd); + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01976) + "failed to send request to OCSP responder '%s'", + uri->hostinfo); + return NULL; + } + } + + return sd; +} + +/* Return a pool-allocated NUL-terminated line, with CRLF stripped, + * read from brigade 'bbin' using 'bbout' as temporary storage. */ +static char *get_line(apr_bucket_brigade *bbout, apr_bucket_brigade *bbin, + conn_rec *c, apr_pool_t *p) +{ + apr_status_t rv; + apr_size_t len; + char *line; + + apr_brigade_cleanup(bbout); + + rv = apr_brigade_split_line(bbout, bbin, APR_BLOCK_READ, 8192); + if (rv) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01977) + "failed reading line from OCSP server"); + return NULL; + } + + rv = apr_brigade_pflatten(bbout, &line, &len, p); + if (rv) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01978) + "failed reading line from OCSP server"); + return NULL; + } + + if (len == 0) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(02321) + "empty response from OCSP server"); + return NULL; + } + + if (line[len-1] != APR_ASCII_LF) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01979) + "response header line too long from OCSP server"); + return NULL; + } + + line[len-1] = '\0'; + if (len > 1 && line[len-2] == APR_ASCII_CR) { + line[len-2] = '\0'; + } + + return line; +} + +/* Maximum values to prevent eating RAM forever. */ +#define MAX_HEADERS (256) +#define MAX_CONTENT (2048 * 1024) + +/* Read the OCSP response from the socket 'sd', using temporary memory + * BIO 'bio', and return the decoded OCSP response object, or NULL on + * error. */ +static OCSP_RESPONSE *read_response(apr_socket_t *sd, BIO *bio, conn_rec *c, + apr_pool_t *p) +{ + apr_bucket_brigade *bb, *tmpbb; + OCSP_RESPONSE *response; + char *line; + apr_size_t count; + apr_int64_t code; + + /* Using brigades for response parsing is much simpler than using + * apr_socket_* directly. */ + bb = apr_brigade_create(p, c->bucket_alloc); + tmpbb = apr_brigade_create(p, c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_socket_create(sd, c->bucket_alloc)); + + line = get_line(tmpbb, bb, c, p); + if (!line || strncmp(line, "HTTP/", 5) + || (line = ap_strchr(line, ' ')) == NULL + || (code = apr_atoi64(++line)) < 200 || code > 299) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01980) + "bad response from OCSP server: %s", + line ? line : "(none)"); + return NULL; + } + + /* Read till end of headers; don't have to even bother parsing the + * Content-Length since the server is obliged to close the + * connection after the response anyway for HTTP/1.0. */ + count = 0; + while ((line = get_line(tmpbb, bb, c, p)) != NULL && line[0] + && ++count < MAX_HEADERS) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01981) + "OCSP response header: %s", line); + } + + if (count == MAX_HEADERS) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01982) + "could not read response headers from OCSP server, " + "exceeded maximum count (%u)", MAX_HEADERS); + return NULL; + } + else if (!line) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01983) + "could not read response header from OCSP server"); + return NULL; + } + + /* Read the response body into the memory BIO. */ + count = 0; + while (!APR_BRIGADE_EMPTY(bb)) { + const char *data; + apr_size_t len; + apr_status_t rv; + apr_bucket *e = APR_BRIGADE_FIRST(bb); + + rv = apr_bucket_read(e, &data, &len, APR_BLOCK_READ); + if (rv == APR_EOF) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01984) + "OCSP response: got EOF"); + break; + } + if (rv != APR_SUCCESS) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01985) + "error reading response from OCSP server"); + return NULL; + } + if (len == 0) { + /* Ignore zero-length buckets (possible side-effect of + * line splitting). */ + apr_bucket_delete(e); + continue; + } + count += len; + if (count > MAX_CONTENT) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(01986) + "OCSP response size exceeds %u byte limit", + MAX_CONTENT); + return NULL; + } + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(01987) + "OCSP response: got %" APR_SIZE_T_FMT + " bytes, %" APR_SIZE_T_FMT " total", len, count); + + BIO_write(bio, data, (int)len); + apr_bucket_delete(e); + } + + apr_brigade_destroy(bb); + apr_brigade_destroy(tmpbb); + + /* Finally decode the OCSP response from what's stored in the + * bio. */ + response = d2i_OCSP_RESPONSE_bio(bio, NULL); + if (response == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01988) + "failed to decode OCSP response data"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, mySrvFromConn(c)); + } + + return response; +} + +OCSP_RESPONSE *modssl_dispatch_ocsp_request(const apr_uri_t *uri, + apr_interval_time_t timeout, + OCSP_REQUEST *request, + conn_rec *c, apr_pool_t *p) +{ + OCSP_RESPONSE *response = NULL; + apr_socket_t *sd; + BIO *bio; + + bio = serialize_request(request, uri); + if (bio == NULL) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(01989) + "could not serialize OCSP request"); + ssl_log_ssl_error(SSLLOG_MARK, APLOG_ERR, mySrvFromConn(c)); + return NULL; + } + + sd = send_request(bio, uri, timeout, c, p); + if (sd == NULL) { + /* Errors already logged. */ + BIO_free(bio); + return NULL; + } + + /* Clear the BIO contents, ready for the response. */ + (void)BIO_reset(bio); + + response = read_response(sd, bio, c, p); + + apr_socket_close(sd); + BIO_free(bio); + + return response; +} + +#endif /* HAVE_OCSP */ diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.c new file mode 100644 index 0000000000..0bf377682c --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.c @@ -0,0 +1,537 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_util_ssl.c + * Additional Utility Functions for OpenSSL + */ + +#include "ssl_private.h" + +/* _________________________________________________________________ +** +** Additional High-Level Functions for OpenSSL +** _________________________________________________________________ +*/ + +/* we initialize this index at startup time + * and never write to it at request time, + * so this static is thread safe. + * also note that OpenSSL increments at static variable when + * SSL_get_ex_new_index() is called, so we _must_ do this at startup. + */ +static int SSL_app_data2_idx = -1; + +void SSL_init_app_data2_idx(void) +{ + int i; + + if (SSL_app_data2_idx > -1) { + return; + } + + /* we _do_ need to call this twice */ + for (i=0; i<=1; i++) { + SSL_app_data2_idx = + SSL_get_ex_new_index(0, + "Second Application Data for SSL", + NULL, NULL, NULL); + } +} + +void *SSL_get_app_data2(SSL *ssl) +{ + return (void *)SSL_get_ex_data(ssl, SSL_app_data2_idx); +} + +void SSL_set_app_data2(SSL *ssl, void *arg) +{ + SSL_set_ex_data(ssl, SSL_app_data2_idx, (char *)arg); + return; +} + +/* _________________________________________________________________ +** +** High-Level Private Key Loading +** _________________________________________________________________ +*/ + +EVP_PKEY *SSL_read_PrivateKey(const char* filename, EVP_PKEY **key, pem_password_cb *cb, void *s) +{ + EVP_PKEY *rc; + BIO *bioS; + BIO *bioF; + + /* 1. try PEM (= DER+Base64+headers) */ + if ((bioS=BIO_new_file(filename, "r")) == NULL) + return NULL; + rc = PEM_read_bio_PrivateKey(bioS, key, cb, s); + BIO_free(bioS); + + if (rc == NULL) { + /* 2. try DER+Base64 */ + if ((bioS = BIO_new_file(filename, "r")) == NULL) + return NULL; + + if ((bioF = BIO_new(BIO_f_base64())) == NULL) { + BIO_free(bioS); + return NULL; + } + bioS = BIO_push(bioF, bioS); + rc = d2i_PrivateKey_bio(bioS, NULL); + BIO_free_all(bioS); + + if (rc == NULL) { + /* 3. try plain DER */ + if ((bioS = BIO_new_file(filename, "r")) == NULL) + return NULL; + rc = d2i_PrivateKey_bio(bioS, NULL); + BIO_free(bioS); + } + } + if (rc != NULL && key != NULL) { + if (*key != NULL) + EVP_PKEY_free(*key); + *key = rc; + } + return rc; +} + +/* _________________________________________________________________ +** +** Smart shutdown +** _________________________________________________________________ +*/ + +int SSL_smart_shutdown(SSL *ssl) +{ + int i; + int rc; + + /* + * Repeat the calls, because SSL_shutdown internally dispatches through a + * little state machine. Usually only one or two interation should be + * needed, so we restrict the total number of restrictions in order to + * avoid process hangs in case the client played bad with the socket + * connection and OpenSSL cannot recognize it. + */ + rc = 0; + for (i = 0; i < 4 /* max 2x pending + 2x data = 4 */; i++) { + if ((rc = SSL_shutdown(ssl))) + break; + } + return rc; +} + +/* _________________________________________________________________ +** +** Certificate Checks +** _________________________________________________________________ +*/ + +/* retrieve basic constraints ingredients */ +BOOL SSL_X509_getBC(X509 *cert, int *ca, int *pathlen) +{ + BASIC_CONSTRAINTS *bc; + BIGNUM *bn = NULL; + char *cp; + + bc = X509_get_ext_d2i(cert, NID_basic_constraints, NULL, NULL); + if (bc == NULL) + return FALSE; + *ca = bc->ca; + *pathlen = -1 /* unlimited */; + if (bc->pathlen != NULL) { + if ((bn = ASN1_INTEGER_to_BN(bc->pathlen, NULL)) == NULL) + return FALSE; + if ((cp = BN_bn2dec(bn)) == NULL) + return FALSE; + *pathlen = atoi(cp); + free(cp); + BN_free(bn); + } + BASIC_CONSTRAINTS_free(bc); + return TRUE; +} + +/* convert a NAME_ENTRY to UTF8 string */ +char *SSL_X509_NAME_ENTRY_to_string(apr_pool_t *p, X509_NAME_ENTRY *xsne) +{ + char *result = NULL; + BIO* bio; + int len; + + if ((bio = BIO_new(BIO_s_mem())) == NULL) + return NULL; + ASN1_STRING_print_ex(bio, X509_NAME_ENTRY_get_data(xsne), + ASN1_STRFLGS_ESC_CTRL|ASN1_STRFLGS_UTF8_CONVERT); + len = BIO_pending(bio); + result = apr_palloc(p, len+1); + len = BIO_read(bio, result, len); + result[len] = NUL; + BIO_free(bio); + ap_xlate_proto_from_ascii(result, len); + return result; +} + +/* + * convert an X509_NAME to an RFC 2253 formatted string, optionally truncated + * to maxlen characters (specify a maxlen of 0 for no length limit) + */ +char *SSL_X509_NAME_to_string(apr_pool_t *p, X509_NAME *dn, int maxlen) +{ + char *result = NULL; + BIO *bio; + int len; + + if ((bio = BIO_new(BIO_s_mem())) == NULL) + return NULL; + X509_NAME_print_ex(bio, dn, 0, XN_FLAG_RFC2253); + len = BIO_pending(bio); + if (len > 0) { + result = apr_palloc(p, (maxlen > 0) ? maxlen+1 : len+1); + if (maxlen > 0 && maxlen < len) { + len = BIO_read(bio, result, maxlen); + if (maxlen > 2) { + /* insert trailing ellipsis if there's enough space */ + apr_snprintf(result + maxlen - 3, 4, "..."); + } + } else { + len = BIO_read(bio, result, len); + } + result[len] = NUL; + } + BIO_free(bio); + + return result; +} + +/* return an array of (RFC 6125 coined) DNS-IDs and CN-IDs in a certificate */ +BOOL SSL_X509_getIDs(apr_pool_t *p, X509 *x509, apr_array_header_t **ids) +{ + STACK_OF(GENERAL_NAME) *names; + BIO *bio; + X509_NAME *subj; + char **cpp; + int i, n; + + if (!x509 || !(*ids = apr_array_make(p, 0, sizeof(char *)))) { + *ids = NULL; + return FALSE; + } + + /* First, the DNS-IDs (dNSName entries in the subjectAltName extension) */ + if ((names = X509_get_ext_d2i(x509, NID_subject_alt_name, NULL, NULL)) && + (bio = BIO_new(BIO_s_mem()))) { + GENERAL_NAME *name; + + for (i = 0; i < sk_GENERAL_NAME_num(names); i++) { + name = sk_GENERAL_NAME_value(names, i); + if (name->type == GEN_DNS) { + ASN1_STRING_print_ex(bio, name->d.ia5, ASN1_STRFLGS_ESC_CTRL| + ASN1_STRFLGS_UTF8_CONVERT); + n = BIO_pending(bio); + if (n > 0) { + cpp = (char **)apr_array_push(*ids); + *cpp = apr_palloc(p, n+1); + n = BIO_read(bio, *cpp, n); + (*cpp)[n] = NUL; + } + } + } + BIO_free(bio); + } + + if (names) + sk_GENERAL_NAME_pop_free(names, GENERAL_NAME_free); + + /* Second, the CN-IDs (commonName attributes in the subject DN) */ + subj = X509_get_subject_name(x509); + i = -1; + while ((i = X509_NAME_get_index_by_NID(subj, NID_commonName, i)) != -1) { + cpp = (char **)apr_array_push(*ids); + *cpp = SSL_X509_NAME_ENTRY_to_string(p, X509_NAME_get_entry(subj, i)); + } + + return apr_is_empty_array(*ids) ? FALSE : TRUE; +} + +/* + * Check if a certificate matches for a particular name, by iterating over its + * DNS-IDs and CN-IDs (RFC 6125), optionally with basic wildcard matching. + * If server_rec is non-NULL, some (debug/trace) logging is enabled. + */ +BOOL SSL_X509_match_name(apr_pool_t *p, X509 *x509, const char *name, + BOOL allow_wildcard, server_rec *s) +{ + BOOL matched = FALSE; + apr_array_header_t *ids; + + /* + * At some day in the future, this might be replaced with X509_check_host() + * (available in OpenSSL 1.0.2 and later), but two points should be noted: + * 1) wildcard matching in X509_check_host() might yield different + * results (by default, it supports a broader set of patterns, e.g. + * wildcards in non-initial positions); + * 2) we lose the option of logging each DNS- and CN-ID (until a match + * is found). + */ + + if (SSL_X509_getIDs(p, x509, &ids)) { + const char *cp; + int i; + char **id = (char **)ids->elts; + BOOL is_wildcard; + + for (i = 0; i < ids->nelts; i++) { + if (!id[i]) + continue; + + /* + * Determine if it is a wildcard ID - we're restrictive + * in the sense that we require the wildcard character to be + * THE left-most label (i.e., the ID must start with "*.") + */ + is_wildcard = (*id[i] == '*' && *(id[i]+1) == '.') ? TRUE : FALSE; + + /* + * If the ID includes a wildcard character (and the caller is + * allowing wildcards), check if it matches for the left-most + * DNS label - i.e., the wildcard character is not allowed + * to match a dot. Otherwise, try a simple string compare. + */ + if ((allow_wildcard == TRUE && is_wildcard == TRUE && + (cp = ap_strchr_c(name, '.')) && !strcasecmp(id[i]+1, cp)) || + !strcasecmp(id[i], name)) { + matched = TRUE; + } + + if (s) { + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, + "[%s] SSL_X509_match_name: expecting name '%s', " + "%smatched by ID '%s'", + (mySrvConfig(s))->vhost_id, name, + matched == TRUE ? "" : "NOT ", id[i]); + } + + if (matched == TRUE) { + break; + } + } + + } + + if (s) { + ssl_log_xerror(SSLLOG_MARK, APLOG_DEBUG, 0, p, s, x509, + APLOGNO(02412) "[%s] Cert %s for name '%s'", + (mySrvConfig(s))->vhost_id, + matched == TRUE ? "matches" : "does not match", + name); + } + + return matched; +} + +/* _________________________________________________________________ +** +** Low-Level CA Certificate Loading +** _________________________________________________________________ +*/ + +BOOL SSL_X509_INFO_load_file(apr_pool_t *ptemp, + STACK_OF(X509_INFO) *sk, + const char *filename) +{ + BIO *in; + + if (!(in = BIO_new(BIO_s_file()))) { + return FALSE; + } + + if (BIO_read_filename(in, filename) <= 0) { + BIO_free(in); + return FALSE; + } + + ERR_clear_error(); + + PEM_X509_INFO_read_bio(in, sk, NULL, NULL); + + BIO_free(in); + + return TRUE; +} + +BOOL SSL_X509_INFO_load_path(apr_pool_t *ptemp, + STACK_OF(X509_INFO) *sk, + const char *pathname) +{ + /* XXX: this dir read code is exactly the same as that in + * ssl_engine_init.c, only the call to handle the fullname is different, + * should fold the duplication. + */ + apr_dir_t *dir; + apr_finfo_t dirent; + apr_int32_t finfo_flags = APR_FINFO_TYPE|APR_FINFO_NAME; + const char *fullname; + BOOL ok = FALSE; + + if (apr_dir_open(&dir, pathname, ptemp) != APR_SUCCESS) { + return FALSE; + } + + while ((apr_dir_read(&dirent, finfo_flags, dir)) == APR_SUCCESS) { + if (dirent.filetype == APR_DIR) { + continue; /* don't try to load directories */ + } + + fullname = apr_pstrcat(ptemp, + pathname, "/", dirent.name, + NULL); + + if (SSL_X509_INFO_load_file(ptemp, sk, fullname)) { + ok = TRUE; + } + } + + apr_dir_close(dir); + + return ok; +} + +/* _________________________________________________________________ +** +** Custom (EC)DH parameter support +** _________________________________________________________________ +*/ + +DH *ssl_dh_GetParamFromFile(const char *file) +{ + DH *dh = NULL; + BIO *bio; + + if ((bio = BIO_new_file(file, "r")) == NULL) + return NULL; + dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL); + BIO_free(bio); + return (dh); +} + +#ifdef HAVE_ECC +EC_GROUP *ssl_ec_GetParamFromFile(const char *file) +{ + EC_GROUP *group = NULL; + BIO *bio; + + if ((bio = BIO_new_file(file, "r")) == NULL) + return NULL; + group = PEM_read_bio_ECPKParameters(bio, NULL, NULL, NULL); + BIO_free(bio); + return (group); +} +#endif + +/* _________________________________________________________________ +** +** Extra Server Certificate Chain Support +** _________________________________________________________________ +*/ + +/* + * Read a file that optionally contains the server certificate in PEM + * format, possibly followed by a sequence of CA certificates that + * should be sent to the peer in the SSL Certificate message. + */ +int SSL_CTX_use_certificate_chain( + SSL_CTX *ctx, char *file, int skipfirst, pem_password_cb *cb) +{ + BIO *bio; + X509 *x509; + unsigned long err; + int n; + + if ((bio = BIO_new(BIO_s_file_internal())) == NULL) + return -1; + if (BIO_read_filename(bio, file) <= 0) { + BIO_free(bio); + return -1; + } + /* optionally skip a leading server certificate */ + if (skipfirst) { + if ((x509 = PEM_read_bio_X509(bio, NULL, cb, NULL)) == NULL) { + BIO_free(bio); + return -1; + } + X509_free(x509); + } + /* free a perhaps already configured extra chain */ +#ifdef OPENSSL_NO_SSL_INTERN + SSL_CTX_clear_extra_chain_certs(ctx); +#else + if (ctx->extra_certs != NULL) { + sk_X509_pop_free((STACK_OF(X509) *)ctx->extra_certs, X509_free); + ctx->extra_certs = NULL; + } +#endif + /* create new extra chain by loading the certs */ + n = 0; + while ((x509 = PEM_read_bio_X509(bio, NULL, cb, NULL)) != NULL) { + if (!SSL_CTX_add_extra_chain_cert(ctx, x509)) { + X509_free(x509); + BIO_free(bio); + return -1; + } + n++; + } + /* Make sure that only the error is just an EOF */ + if ((err = ERR_peek_error()) > 0) { + if (!( ERR_GET_LIB(err) == ERR_LIB_PEM + && ERR_GET_REASON(err) == PEM_R_NO_START_LINE)) { + BIO_free(bio); + return -1; + } + while (ERR_get_error() > 0) ; + } + BIO_free(bio); + return n; +} + +/* _________________________________________________________________ +** +** Session Stuff +** _________________________________________________________________ +*/ + +char *SSL_SESSION_id2sz(unsigned char *id, int idlen, + char *str, int strsize) +{ + if (idlen > SSL_MAX_SSL_SESSION_ID_LENGTH) + idlen = SSL_MAX_SSL_SESSION_ID_LENGTH; + + /* We must ensure not to process more than what would fit in the + * destination buffer, including terminating NULL */ + if (idlen > (strsize-1) / 2) + idlen = (strsize-1) / 2; + + ap_bin2hex(id, idlen, str); + + return str; +} diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.h b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.h new file mode 100644 index 0000000000..6f6873b487 --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_ssl.h @@ -0,0 +1,77 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @verbatim + _ _ + _ __ ___ ___ __| | ___ ___| | mod_ssl + | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + | | | | | | (_) | (_| | \__ \__ \ | + |_| |_| |_|\___/ \__,_|___|___/___/_| + |_____| + @endverbatim + * @file ssl_util_ssl.h + * @brief Additional Utility Functions for OpenSSL + * + * @defgroup MOD_SSL_UTIL Utilities + * @ingroup MOD_SSL + * @{ + */ + +#ifndef __SSL_UTIL_SSL_H__ +#define __SSL_UTIL_SSL_H__ + +/** + * SSL library version number + */ + +#define SSL_LIBRARY_VERSION OPENSSL_VERSION_NUMBER +#define SSL_LIBRARY_NAME "OpenSSL" +#define SSL_LIBRARY_TEXT OPENSSL_VERSION_TEXT +#define SSL_LIBRARY_DYNTEXT SSLeay_version(SSLEAY_VERSION) + +/** + * Maximum length of a DER encoded session. + * FIXME: There is no define in OpenSSL, but OpenSSL uses 1024*10, + * so this value should be ok. Although we have no warm feeling. + */ +#define SSL_SESSION_MAX_DER 1024*10 + +/** max length for SSL_SESSION_id2sz */ +#define SSL_SESSION_ID_STRING_LEN \ + ((SSL_MAX_SSL_SESSION_ID_LENGTH + 1) * 2) + +/** + * Additional Functions + */ +void SSL_init_app_data2_idx(void); +void *SSL_get_app_data2(SSL *); +void SSL_set_app_data2(SSL *, void *); +EVP_PKEY *SSL_read_PrivateKey(const char *, EVP_PKEY **, pem_password_cb *, void *); +int SSL_smart_shutdown(SSL *ssl); +BOOL SSL_X509_getBC(X509 *, int *, int *); +char *SSL_X509_NAME_ENTRY_to_string(apr_pool_t *p, X509_NAME_ENTRY *xsne); +char *SSL_X509_NAME_to_string(apr_pool_t *, X509_NAME *, int); +BOOL SSL_X509_getIDs(apr_pool_t *, X509 *, apr_array_header_t **); +BOOL SSL_X509_match_name(apr_pool_t *, X509 *, const char *, BOOL, server_rec *); +BOOL SSL_X509_INFO_load_file(apr_pool_t *, STACK_OF(X509_INFO) *, const char *); +BOOL SSL_X509_INFO_load_path(apr_pool_t *, STACK_OF(X509_INFO) *, const char *); +int SSL_CTX_use_certificate_chain(SSL_CTX *, char *, int, pem_password_cb *); +char *SSL_SESSION_id2sz(unsigned char *, int, char *, int); + +#endif /* __SSL_UTIL_SSL_H__ */ +/** @} */ + diff --git a/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_stapling.c b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_stapling.c new file mode 100644 index 0000000000..2dc8fceaaa --- /dev/null +++ b/modules/http2/sandbox/httpd/mod_ssl-alpn/ssl_util_stapling.c @@ -0,0 +1,705 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* _ _ + * _ __ ___ ___ __| | ___ ___| | mod_ssl + * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL + * | | | | | | (_) | (_| | \__ \__ \ | + * |_| |_| |_|\___/ \__,_|___|___/___/_| + * |_____| + * ssl_stapling.c + * OCSP Stapling Support + */ + /* ``Where's the spoons? + Where's the spoons? + Where's the bloody spoons?'' + -- Alexei Sayle */ + +#include "ssl_private.h" +#include "ap_mpm.h" +#include "apr_thread_mutex.h" + +#ifdef HAVE_OCSP_STAPLING + +/** + * Maxiumum OCSP stapling response size. This should be the response for a + * single certificate and will typically include the responder certificate chain + * so 10K should be more than enough. + * + */ + +#define MAX_STAPLING_DER 10240 + +/* Cached info stored in certificate ex_info. */ +typedef struct { + /* Index in session cache SHA1 hash of certificate */ + UCHAR idx[20]; + /* Certificate ID for OCSP requests or NULL if ID cannot be determined */ + OCSP_CERTID *cid; + /* Responder details */ + char *uri; +} certinfo; + +static void certinfo_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp) +{ + certinfo *cinf = ptr; + + if (!cinf) + return; + if (cinf->uri) + OPENSSL_free(cinf->uri); + OPENSSL_free(cinf); +} + +static int stapling_ex_idx = -1; + +void ssl_stapling_ex_init(void) +{ + if (stapling_ex_idx != -1) + return; + stapling_ex_idx = X509_get_ex_new_index(0, "X509 cached OCSP info", 0, 0, + certinfo_free); +} + +static X509 *stapling_get_issuer(modssl_ctx_t *mctx, X509 *x) +{ + X509 *issuer = NULL; + int i; + X509_STORE *st = SSL_CTX_get_cert_store(mctx->ssl_ctx); + X509_STORE_CTX inctx; + STACK_OF(X509) *extra_certs = NULL; + +#ifdef OPENSSL_NO_SSL_INTERN + SSL_CTX_get_extra_chain_certs(mctx->ssl_ctx, &extra_certs); +#else + extra_certs = mctx->ssl_ctx->extra_certs; +#endif + + for (i = 0; i < sk_X509_num(extra_certs); i++) { + issuer = sk_X509_value(extra_certs, i); + if (X509_check_issued(issuer, x) == X509_V_OK) { + CRYPTO_add(&issuer->references, 1, CRYPTO_LOCK_X509); + return issuer; + } + } + + if (!X509_STORE_CTX_init(&inctx, st, NULL, NULL)) + return 0; + if (X509_STORE_CTX_get1_issuer(&issuer, &inctx, x) <= 0) + issuer = NULL; + X509_STORE_CTX_cleanup(&inctx); + return issuer; + +} + +int ssl_stapling_init_cert(server_rec *s, modssl_ctx_t *mctx, X509 *x) +{ + certinfo *cinf; + X509 *issuer = NULL; + STACK_OF(OPENSSL_STRING) *aia = NULL; + + if (x == NULL) + return 0; + cinf = X509_get_ex_data(x, stapling_ex_idx); + if (cinf) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02215) + "ssl_stapling_init_cert: certificate already initialized!"); + return 0; + } + cinf = OPENSSL_malloc(sizeof(certinfo)); + if (!cinf) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02216) + "ssl_stapling_init_cert: error allocating memory!"); + return 0; + } + cinf->cid = NULL; + cinf->uri = NULL; + X509_set_ex_data(x, stapling_ex_idx, cinf); + + issuer = stapling_get_issuer(mctx, x); + + if (issuer == NULL) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02217) + "ssl_stapling_init_cert: Can't retrieve issuer certificate!"); + return 0; + } + + cinf->cid = OCSP_cert_to_id(NULL, x, issuer); + X509_free(issuer); + if (!cinf->cid) + return 0; + X509_digest(x, EVP_sha1(), cinf->idx, NULL); + + aia = X509_get1_ocsp(x); + if (aia) { + cinf->uri = sk_OPENSSL_STRING_pop(aia); + X509_email_free(aia); + } + if (!cinf->uri && !mctx->stapling_force_url) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02218) + "ssl_stapling_init_cert: no responder URL"); + return 0; + } + return 1; +} + +static certinfo *stapling_get_cert_info(server_rec *s, modssl_ctx_t *mctx, + SSL *ssl) +{ + certinfo *cinf; + X509 *x; + x = SSL_get_certificate(ssl); + if (x == NULL) + return NULL; + cinf = X509_get_ex_data(x, stapling_ex_idx); + if (cinf && cinf->cid) + return cinf; + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(01926) + "stapling_get_cert_info: stapling not supported for certificate"); + return NULL; +} + +/* + * OCSP response caching code. The response is preceded by a flag value + * which indicates whether the response was invalid when it was stored. + * the purpose of this flag is to avoid repeated queries to a server + * which has given an invalid response while allowing a response which + * has subsequently become invalid to be retried immediately. + * + * The key for the cache is the hash of the certificate the response + * is for. + */ +static BOOL stapling_cache_response(server_rec *s, modssl_ctx_t *mctx, + OCSP_RESPONSE *rsp, certinfo *cinf, + BOOL ok, apr_pool_t *pool) +{ + SSLModConfigRec *mc = myModConfig(s); + unsigned char resp_der[MAX_STAPLING_DER]; + unsigned char *p; + int resp_derlen; + BOOL rv; + apr_time_t expiry; + + resp_derlen = i2d_OCSP_RESPONSE(rsp, NULL) + 1; + + if (resp_derlen <= 0) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01927) + "OCSP stapling response encode error??"); + return FALSE; + } + + if (resp_derlen > sizeof resp_der) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01928) + "OCSP stapling response too big (%u bytes)", resp_derlen); + return FALSE; + } + + p = resp_der; + + /* TODO: potential optimization; _timeout members as apr_interval_time_t */ + if (ok == TRUE) { + *p++ = 1; + expiry = apr_time_from_sec(mctx->stapling_cache_timeout); + } + else { + *p++ = 0; + expiry = apr_time_from_sec(mctx->stapling_errcache_timeout); + } + + expiry += apr_time_now(); + + i2d_OCSP_RESPONSE(rsp, &p); + + rv = mc->stapling_cache->store(mc->stapling_cache_context, s, + cinf->idx, sizeof(cinf->idx), + expiry, resp_der, resp_derlen, pool); + if (rv != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01929) + "stapling_cache_response: OCSP response session store error!"); + return FALSE; + } + + return TRUE; +} + +static BOOL stapling_get_cached_response(server_rec *s, OCSP_RESPONSE **prsp, + BOOL *pok, certinfo *cinf, + apr_pool_t *pool) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + OCSP_RESPONSE *rsp; + unsigned char resp_der[MAX_STAPLING_DER]; + const unsigned char *p; + unsigned int resp_derlen = MAX_STAPLING_DER; + + rv = mc->stapling_cache->retrieve(mc->stapling_cache_context, s, + cinf->idx, sizeof(cinf->idx), + resp_der, &resp_derlen, pool); + if (rv != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01930) + "stapling_get_cached_response: cache miss"); + return TRUE; + } + if (resp_derlen <= 1) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01931) + "stapling_get_cached_response: response length invalid??"); + return TRUE; + } + p = resp_der; + if (pok) { + if (*p) + *pok = TRUE; + else + *pok = FALSE; + } + p++; + resp_derlen--; + rsp = d2i_OCSP_RESPONSE(NULL, &p, resp_derlen); + if (!rsp) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01932) + "stapling_get_cached_response: response parse error??"); + return TRUE; + } + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01933) + "stapling_get_cached_response: cache hit"); + + *prsp = rsp; + + return TRUE; +} + +static int stapling_set_response(SSL *ssl, OCSP_RESPONSE *rsp) +{ + int rspderlen; + unsigned char *rspder = NULL; + + rspderlen = i2d_OCSP_RESPONSE(rsp, &rspder); + if (rspderlen <= 0) + return 0; + SSL_set_tlsext_status_ocsp_resp(ssl, rspder, rspderlen); + return 1; +} + +static int stapling_check_response(server_rec *s, modssl_ctx_t *mctx, + certinfo *cinf, OCSP_RESPONSE *rsp, + BOOL *pok) +{ + int status, reason; + OCSP_BASICRESP *bs = NULL; + ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd; + int response_status = OCSP_response_status(rsp); + + if (pok) + *pok = FALSE; + /* Check to see if response is an error. If so we automatically accept + * it because it would have expired from the cache if it was time to + * retry. + */ + if (response_status != OCSP_RESPONSE_STATUS_SUCCESSFUL) { + if (mctx->stapling_return_errors) + return SSL_TLSEXT_ERR_OK; + else + return SSL_TLSEXT_ERR_NOACK; + } + + bs = OCSP_response_get1_basic(rsp); + if (bs == NULL) { + /* If we can't parse response just pass it to client */ + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01934) + "stapling_check_response: Error Parsing Response!"); + return SSL_TLSEXT_ERR_OK; + } + + if (!OCSP_resp_find_status(bs, cinf->cid, &status, &reason, &rev, + &thisupd, &nextupd)) { + /* If ID not present just pass back to client */ + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01935) + "stapling_check_response: certificate ID not present in response!"); + } + else { + if (OCSP_check_validity(thisupd, nextupd, + mctx->stapling_resptime_skew, + mctx->stapling_resp_maxage)) { + if (pok) + *pok = TRUE; + } + else { + /* If pok is not NULL response was direct from a responder and + * the times should be valide. If pok is NULL the response was + * retrieved from cache and it is expected to subsequently expire + */ + if (pok) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01936) + "stapling_check_response: response times invalid"); + } + else { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01937) + "stapling_check_response: cached response expired"); + } + + OCSP_BASICRESP_free(bs); + return SSL_TLSEXT_ERR_NOACK; + } + } + + OCSP_BASICRESP_free(bs); + + return SSL_TLSEXT_ERR_OK; +} + +static BOOL stapling_renew_response(server_rec *s, modssl_ctx_t *mctx, SSL *ssl, + certinfo *cinf, OCSP_RESPONSE **prsp, + apr_pool_t *pool) +{ + conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl); + apr_pool_t *vpool; + OCSP_REQUEST *req = NULL; + OCSP_CERTID *id = NULL; + STACK_OF(X509_EXTENSION) *exts; + int i; + BOOL ok = FALSE; + BOOL rv = TRUE; + const char *ocspuri; + apr_uri_t uri; + + *prsp = NULL; + /* Build up OCSP query from server certificate info */ + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01938) + "stapling_renew_response: querying responder"); + + req = OCSP_REQUEST_new(); + if (!req) + goto err; + id = OCSP_CERTID_dup(cinf->cid); + if (!id) + goto err; + if (!OCSP_request_add0_id(req, id)) + goto err; + id = NULL; + /* Add any extensions to the request */ + SSL_get_tlsext_status_exts(ssl, &exts); + for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) { + X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i); + if (!OCSP_REQUEST_add_ext(req, ext, -1)) + goto err; + } + + if (mctx->stapling_force_url) + ocspuri = mctx->stapling_force_url; + else + ocspuri = cinf->uri; + + if (!ocspuri) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(02621) + "stapling_renew_response: no uri for responder"); + rv = FALSE; + goto done; + } + + /* Create a temporary pool to constrain memory use */ + apr_pool_create(&vpool, conn->pool); + + ok = apr_uri_parse(vpool, ocspuri, &uri); + if (ok != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01939) + "stapling_renew_response: Error parsing uri %s", + ocspuri); + rv = FALSE; + goto done; + } + else if (strcmp(uri.scheme, "http")) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01940) + "stapling_renew_response: Unsupported uri %s", ocspuri); + rv = FALSE; + goto done; + } + + if (!uri.port) { + uri.port = apr_uri_port_of_scheme(uri.scheme); + } + + *prsp = modssl_dispatch_ocsp_request(&uri, mctx->stapling_responder_timeout, + req, conn, vpool); + + apr_pool_destroy(vpool); + + if (!*prsp) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01941) + "stapling_renew_response: responder error"); + if (mctx->stapling_fake_trylater) { + *prsp = OCSP_response_create(OCSP_RESPONSE_STATUS_TRYLATER, NULL); + } + else { + goto done; + } + } + else { + int response_status = OCSP_response_status(*prsp); + + if (response_status == OCSP_RESPONSE_STATUS_SUCCESSFUL) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01942) + "stapling_renew_response: query response received"); + stapling_check_response(s, mctx, cinf, *prsp, &ok); + if (ok == FALSE) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01943) + "stapling_renew_response: error in retrieved response!"); + } + } + else { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01944) + "stapling_renew_response: responder error %s", + OCSP_response_status_str(response_status)); + } + } + if (stapling_cache_response(s, mctx, *prsp, cinf, ok, pool) == FALSE) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01945) + "stapling_renew_response: error caching response!"); + } + +done: + if (id) + OCSP_CERTID_free(id); + if (req) + OCSP_REQUEST_free(req); + return rv; +err: + rv = FALSE; + goto done; +} + +/* + * SSLStaplingMutex operations. Similar to SSL mutex except a mutex is + * mandatory if stapling is enabled. + */ +static int ssl_stapling_mutex_init(server_rec *s, apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + SSLSrvConfigRec *sc = mySrvConfig(s); + apr_status_t rv; + + if (mc->stapling_mutex || sc->server->stapling_enabled != TRUE) { + return TRUE; + } + + if ((rv = ap_global_mutex_create(&mc->stapling_mutex, NULL, + SSL_STAPLING_MUTEX_TYPE, NULL, s, + s->process->pool, 0)) != APR_SUCCESS) { + return FALSE; + } + + return TRUE; +} + +int ssl_stapling_mutex_reinit(server_rec *s, apr_pool_t *p) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + const char *lockfile; + + if (mc->stapling_mutex == NULL) { + return TRUE; + } + + lockfile = apr_global_mutex_lockfile(mc->stapling_mutex); + if ((rv = apr_global_mutex_child_init(&mc->stapling_mutex, + lockfile, p)) != APR_SUCCESS) { + if (lockfile) { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(01946) + "Cannot reinit %s mutex with file `%s'", + SSL_STAPLING_MUTEX_TYPE, lockfile); + } + else { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(01947) + "Cannot reinit %s mutex", SSL_STAPLING_MUTEX_TYPE); + } + return FALSE; + } + return TRUE; +} + +static int stapling_mutex_on(server_rec *s) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + + if ((rv = apr_global_mutex_lock(mc->stapling_mutex)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(01948) + "Failed to acquire OCSP stapling lock"); + return FALSE; + } + return TRUE; +} + +static int stapling_mutex_off(server_rec *s) +{ + SSLModConfigRec *mc = myModConfig(s); + apr_status_t rv; + + if ((rv = apr_global_mutex_unlock(mc->stapling_mutex)) != APR_SUCCESS) { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(01949) + "Failed to release OCSP stapling lock"); + return FALSE; + } + return TRUE; +} + +/* Certificate Status callback. This is called when a client includes a + * certificate status request extension. + * + * Check for cached responses in session cache. If valid send back to + * client. If absent or no longer valid query responder and update + * cache. */ +static int stapling_cb(SSL *ssl, void *arg) +{ + conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl); + server_rec *s = mySrvFromConn(conn); + SSLSrvConfigRec *sc = mySrvConfig(s); + SSLConnRec *sslconn = myConnConfig(conn); + modssl_ctx_t *mctx = myCtxConfig(sslconn, sc); + certinfo *cinf = NULL; + OCSP_RESPONSE *rsp = NULL; + int rv; + BOOL ok; + + if (sc->server->stapling_enabled != TRUE) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01950) + "stapling_cb: OCSP Stapling disabled"); + return SSL_TLSEXT_ERR_NOACK; + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01951) + "stapling_cb: OCSP Stapling callback called"); + + cinf = stapling_get_cert_info(s, mctx, ssl); + if (cinf == NULL) { + return SSL_TLSEXT_ERR_NOACK; + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01952) + "stapling_cb: retrieved cached certificate data"); + + /* Check to see if we already have a response for this certificate */ + stapling_mutex_on(s); + + rv = stapling_get_cached_response(s, &rsp, &ok, cinf, conn->pool); + if (rv == FALSE) { + stapling_mutex_off(s); + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + + if (rsp) { + /* see if response is acceptable */ + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01953) + "stapling_cb: retrieved cached response"); + rv = stapling_check_response(s, mctx, cinf, rsp, NULL); + if (rv == SSL_TLSEXT_ERR_ALERT_FATAL) { + OCSP_RESPONSE_free(rsp); + stapling_mutex_off(s); + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + else if (rv == SSL_TLSEXT_ERR_NOACK) { + /* Error in response. If this error was not present when it was + * stored (i.e. response no longer valid) then it can be + * renewed straight away. + * + * If the error *was* present at the time it was stored then we + * don't renew the response straight away we just wait for the + * cached response to expire. + */ + if (ok) { + OCSP_RESPONSE_free(rsp); + rsp = NULL; + } + else if (!mctx->stapling_return_errors) { + OCSP_RESPONSE_free(rsp); + stapling_mutex_off(s); + return SSL_TLSEXT_ERR_NOACK; + } + } + } + + if (rsp == NULL) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01954) + "stapling_cb: renewing cached response"); + rv = stapling_renew_response(s, mctx, ssl, cinf, &rsp, conn->pool); + + if (rv == FALSE) { + stapling_mutex_off(s); + ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01955) + "stapling_cb: fatal error"); + return SSL_TLSEXT_ERR_ALERT_FATAL; + } + } + stapling_mutex_off(s); + + if (rsp) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01956) + "stapling_cb: setting response"); + if (!stapling_set_response(ssl, rsp)) + return SSL_TLSEXT_ERR_ALERT_FATAL; + return SSL_TLSEXT_ERR_OK; + } + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01957) + "stapling_cb: no response available"); + + return SSL_TLSEXT_ERR_NOACK; + +} + +apr_status_t modssl_init_stapling(server_rec *s, apr_pool_t *p, + apr_pool_t *ptemp, modssl_ctx_t *mctx) +{ + SSL_CTX *ctx = mctx->ssl_ctx; + SSLModConfigRec *mc = myModConfig(s); + + if (mc->stapling_cache == NULL) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01958) + "SSLStapling: no stapling cache available"); + return ssl_die(s); + } + if (ssl_stapling_mutex_init(s, ptemp) == FALSE) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01959) + "SSLStapling: cannot initialise stapling mutex"); + return ssl_die(s); + } + /* Set some default values for parameters if they are not set */ + if (mctx->stapling_resptime_skew == UNSET) { + mctx->stapling_resptime_skew = 60 * 5; + } + if (mctx->stapling_cache_timeout == UNSET) { + mctx->stapling_cache_timeout = 3600; + } + if (mctx->stapling_return_errors == UNSET) { + mctx->stapling_return_errors = TRUE; + } + if (mctx->stapling_fake_trylater == UNSET) { + mctx->stapling_fake_trylater = TRUE; + } + if (mctx->stapling_errcache_timeout == UNSET) { + mctx->stapling_errcache_timeout = 600; + } + if (mctx->stapling_responder_timeout == UNSET) { + mctx->stapling_responder_timeout = 10 * APR_USEC_PER_SEC; + } + SSL_CTX_set_tlsext_status_cb(ctx, stapling_cb); + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01960) "OCSP stapling initialized"); + + return APR_SUCCESS; +} + +#endif diff --git a/modules/http2/sandbox/httpd/packages/pcre-8.36.tar.gz b/modules/http2/sandbox/httpd/packages/pcre-8.36.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..191d85555f0361b370897cb312bef679400ccdb8 GIT binary patch literal 2009464 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 z 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%0DRlS=v8D&!ivk&1c- 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

%V~}o{kBj+(2$1e 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

_R=@s)+Qr4=Y62_RLZ*P`-MW(Lm+qt!Sdy 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

=T3G+hVXM^3H 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 s)(XdDl&Kn29&Pn(l+es*yWyQ%hut2 z7QOiw-ZZ0-BmyCgLtW2e%H}cRc+Su*LIZZrY9%N3guBRBwY-Y4gmqvFhwa)H24I)0 z6iNnlFDFP!WfM4c(I;`7859eqwC2%OXU3`Zh&ufdAGHXCj*DT>qdFFHR2rt9!V;Su zTYd-&TE{;b`dzWib=OXTZ`E{8SFJ-=ON(4;g3Cc@z>!%0lcYwYg8`=B4)DUy@xfNf zlopv0scCL?{OKuO|Kpa)-y(V_S0+&@%em;f9b``VhkNezHYD1I=1D*g7kMED|h6U&mUq1L9ft^ZFK&FBkFpXfl-OZL&$B!vvsFqrV`Y z6xzmGwEDKNsPfZ}IQ}_o&ePDf92_VgY!NP97NZqdB;+j6rHiJ}S!^kju(8qvtf;R` zoSKdIPJ-m^6k*@1q zMQx1d##N#YY-ff6;m*qh$?fJE+H~FQwI|-Yj$SsRU`Z5w@cw|!1BU3caiveKy9MUk|0$YuvTY4mvNnc&$X@?+?BMFw|^dmhs2k?lT2v*d3TN>{a{dPv{ zug?P#dnN9N6CX*oaj}?p&LO0Rol515iFO~2N2L`IaDa@ke?Fz%o;6-wdFZj$Z*c zGZcn+A-()4;Y7pjvkXrj%;PQ)uC}m_N$mI3jXHd?#OlR?m6i(ejsS0j_n7RiHm!v+ zd-Pl`qWaD?WOWHBXu54TrXHua=?M24ik9&m3@LJ`ik2G{-uebd9i@oZj=D+IgJv9XS3(RO4H#gU54&~157Q9IRR&Xy* z>zufluhzYVzU9~G;wr7>Qk}CG`Ddqe!uHlqa@dYkD@SVP9p1IjeOpMe+7k`al`Y*d zFLFf7gsbuRigRdBZQMG*DtR<3yLu%4i?i`ixTFLds+q)G+rn}B1N6glc@!E}lRfix zWbvZ9G|adit_?-l21yoa5*3l{e`YkaEw|~Fy#PssU3*1DGbz;{< z95wlZ4+Fd^4@`BY(b?fL>PA#sWpYw2UwHzcx_zw8(oe_Yn%wuN22~4f(&LE|7uXZK z4kqqMnFh5fJI}Q4Lws8FQ*{M$XM8@Gbx@(oLByiFOx$t_=G%x;V^moC8g(8SWV!$4zApCV(!52?2nyIVY^HlQ136J>hI{>d#PKfnKO+WRaZ9 zx?ST1;pK``L{_mURdAk(0U)dPXPp_PZca**PDgLl^5fy1%+w~s;A1efBQ+Jv8UYW? z1mKNO_<@4L*b1_1MRY1#g?Txvg`RO@IT?5)>U|h6Tjj`@86Clfi3WHM@eqG7oKNKj zBAibq826K%Sh69mjagQikVWG;MZ>|F6!AbOJBxaU8*!9Q^51KpZqLuRutV1&d09aH~sIj6j7E5?Bj_@+4~n za8@u>F-3|D)uxWZ4N@_TZ)B3W0M>ceRYcAi!6_xUnG&4wR_zEzZ57Lz&)V-_bJ8tO zza<4&lr9EQjt&eHYfPu!Y{O9E&0_ zL&Zg-?;Dd=m$Q-pu^dm)pg%i3$*O$Ok+LRlGfN#TW)c(4FA7T`euJnq3Fzkja;7}a zjDv%je~jr!?#u9dG#2S!mSvIEo1Zd@L0}lE9&}*Pzk){ym7cm?2N3-(WeSKr&lsl% z-#glCp`Jo4=>zt$QLMwXxZ`yYl^rY&t32^V&7euTKAVCBIvkHCy$~0qMetEhAVZ|+ zaRDqOx^4z!&WHX~2_Q^^67lkaZZ*iBv`y|^*d5yP=**Sa!OrX2>ld|V%KKLG^B-H) z*PS0)dy8Jz7Qb#b;k8I$8u3WZ)`DWIS6I*IV|H|6iq=jvanP^!TY&K2oHQPq=Jm>v z_AKtVWw*jwe-QMf3dc9o-O@9bw?*_`0Q1K2-k~@6t@T6w$lOZaA!-B83fx39v4RTy z(Lwpagn}22<2=ph?SLjl_Ki($nWGoi?1KRb6_SS;!+O29HRiYyc|#?Iks2uDb{(m7 zhXknv6j*s~sGP+cqE2SQA(HNsqnu)2a|&$Mq6j#dcMz{R`zb`QMnS{?cObwD^Eka$7*XUc&cUH(>}?E zQIS)@bfiqOwRP?tu<~=SoM$1^>YL?v#__AkxP(8d;!#Z=F-jK|PDmXEU5eGYA0- zhyb(TmO>?DYa58gTqn+P9ByNH4c{T+w8+vP;;(UG{o z*A7mobj#O$&cP!^lST427DJ&gQc_}a>3CMyV<6Nn9pqo-<3ikuM=d#KY3l`v%VRb# z=lFCu(bNz@V>)~}Oa>qJ^VrpG z6DC~WQY1vG#p%&uuBl6eb2ySOnW^X`L5;LoQn7E%JUv`CPY-dP0Ay^USXaQe6lt@S zfDfpafDiz)3?*n~EHR9!xje7&p%1b!Aw~>RF9JGPMdJGaIMnL_+dH3#=?32V+OdzJ z&8|Nqvr+c(f+9l>WA1x)^yGBhlG31q+rpON(K@DX{~BnD;)oy{%|KNYluGf17Xo7p zaVSY`kxaEs_myX2HIqY-G-pbyQ*`; zysYm=WqpRICI%pCxtqM4&FbEcCkegj=0lTnHu!KqPlsW08bfK$inDCxo#wZSz{!Uf z=!PTzwK#aGiVC8@js&gT$Xf*uUL5c5*P2^iVifim+ymVW zJD>_iX;j7@$@LnC|E#ySfS=EMR~_Y!e{aY8|H$j7)jr<)nUW;!9=<-p6%qlk=C5r< zqKE4U=CQKfwJpzFk*0KMZ68WWa97=--*>#DLs+6e)%KuI&3fZyD^~B-+Lm=uN_)co zVRJX$Ks~w3a$y`Reiny|_ph;X11M+r7xA}SZPgBHt$1gLSlGP@*7%4tX0EYgP!5v1 zwxIlLC~pijReRA+zlLqJj;>z6yPjV$aF|p$nY?t7@!FQUzf=Yc9Wv%1+qDkY&TSMD zis*BJYyP0b8!z%W0RrVJh;-;b&}Rzjl}3J;(%4qY**dvc;SdV*=8y(%okqpixb z97~2tY|gY|Wno^hwH}W?jL@7=c7WpDF102+Io`@V^iP9aC9m$?WQUSr%Qp3y>CJX2 z+&ac?R`!bHX^*bWZZEwV-Q1&8#tV&%C$i;m24l}|PJ8etn9048Y;7z|WvDB(tBq(6 zvtEiS`KeADgqL$FA&^pqPRK|E;G-}g%GUJ>N2>KEXrilARUTOg~;HdxT6fP{}>y8I0m6r*?4CZ9)a2iqnIsEBr4UItntJ;T-79i z(ag7=_K#N25gdFBBX&V1R=p{QvtXq{j9BzgqZfXB#-t`0A)AceI@g@KMTFAdbN?a{^)lM|wV zNX0Kmu2NK_=TSy$hRn-&}Oy+T9vNm@;sI(>X@QWgseK0Xz$YTAR6%kFCxYh*TqGp%8(~koO8>t9t1%>EvNy?8zIk0 zR+^DRv#l7Ppew~Bw0vb;W5)Q!UU;{(9#XtLj@{8(XD47RQ)VEJJ~tqxUlnY5#T9;x*^)Y#z-UbYoV3j-O zC%@^vGt|c|%${Mfa4Tw;0LQxz6M1Y9h7-RVtbn$i=vQcm9H(JSF$xl$h?HS0J0oFdNbx?KUWq$3USkfl&%3qyMAM~kq{zf7 zVRGHuwUY0_`$$l-!5SSHZPmdisIg4drr6ynKlMP?X}FBCM*=S2|k?rNNI99 z@=AnNFdI+EU%>*TNJ?B=iw$+y6?0vpESN})W}sC`WaC1b_mLf}YBsaH-eJ4b@lq^< zh3J99VaOyvYJpMC8@L~sj17fM{G60eGR<2+5=lg%Znx|X<<+_ch^EfEk|BoFd|1lz6EU#|GY+_0QT|IsehgnYWc=8k?i(-yf&A2 zD*XdH%qV@2ep-nfWaWB)G|QmFB&qZK>1kJG9bbnpAJwitD0shYJANujzAW1rB_nj< zbALo1`y=;^N-R6*&`Ep;BRcYfY~o2adO?f|k(bTd5ndcoLiNrsgINcJn(ha0-F%FC zq);HynG-vj)|>bue)Na)fOP|Q5iz1BCCqSeGWDld+nMaJkNVN>lz-DV6g#uPzq8tl zi0o}jUez%`Lmh~TafX0O8Qk~GRl3k2^(Qpfq39akADrg$xNDIgDTpM%OnRoz)z)sk zPJRQp#Yp55N=X5usJ+c9#Sf&Anf{R zGR``*5dU9$H(j%{dD|W38>+*`e*I;qQG0_|0B~p>cLD!>*dOu-gn=5PxIdIUU_3HtzJTl#qtU*A|=EsR#vMRZB==R@?n4t zc=$j-m+C5IU71tX;ri9d>VDHY#SUzb=iWMLTvV23$*#!n=>pv9NLE=1sHFhA*M|T$ zE!ldeB>!A7&n8ZQ>0`!|ZTIVikI@(XVd!LxBE<~wmbZiVC@2C$UMsHUty>!tY+^7Y z<*Tx@WHT!X517RWs)L!)8BYV+O*wi=tG!om6ey#(#H+OILRDPbA%>fR6CTx_kwRA?s%(1OXGgl$ahK^9yxnJ66Eih*-*(&1I&9@5#E zy=XWAZ4jfEq(LC^qYeSc`%${&g6Mv~?Y`90is!VmDS|9`YddSU-9H1NV*nEq_D*#z zwEGp2JWL>BMp8nG0?FEGjjyPac9DRop^DWy6QmpY6?X-+`6E=S?ht{{dLU}!$p4{i zojV*|GPv|H78watJCu2g;1Mtf4joJ+55Y(dENa@q37pBHzgs%CB;Hq``7kFT!gk@5 ziprl!R?DF(Q#`*9DSMOb33W{C7@|B3bbSivCu}RD<59XHF=@{_@Tb!&?+u=}NK(NC zM6wz;o7H~xl;3QUaCe;c|@OXA6 zDW}k??3A2tOb{$i?=m4b6ReI}AG9hcK1ZR0sPPU3_8L!2f=)$8io?OiZ3q?XB3{@* z(_71}X@OP*j|gQ)D;OHL*Q3G)VOo1it0~rrx^dp!7?ILF#T5kV9>zqa@LGIs!G78v z0B#;8)nyGtLcx*fvBTk0{V=crM8abmg$pfYXUw8`SrkT=Jr?4tw1tF?r!Q>%^74}V zlHLuvEwNSbGO}W%N86D~&}pefYOrT`rv!%<#Ng5T2%#1pZ@>}h;<~*xtOIQFc=egmEj;0%~x#~ueinY3;39z!U}O>@Dp*^TWLjd)xYL)w7)H2 z&yi$G%+9PW)JExV%Po;3=2D{h7Fkgf(L!lf^+`#!3&M3n2S<4H0pUj_r?eD*nyE-A ze4oOD=%f2|aC(L^-1MA8iOGD%iD5^U{{VQL4aKtTim3B)SExfAzrwEFsSZa96EMW)2lPW{rdwaOtV(| zQy{EG&5Y56Yf(F#CjPS<`l+4ROo$GD{hWra4AbuE~vi{@|? z6lwh`!$Zls$nkbR2HLV+PRN{io2|>#k$Rht8>$(P@`}pITi;en3fb{UG*zg%=loMj zQrBCweTEF36QsnQ)#orfgS0XM44q{4nibvT5D=A-*J)F=E5#(*PmWlg!XHzzAT8mM zY)a~_-R-X7G`z#;VA)9W&h;?PM3=HrOVV<8uJC@@KBm0Dq0*^2Vvt1>Y&e+8Wy>Z* z9IuLf8C3Wty5#bPgAbOiA{l<$v>1(qAKffBY;})xao6(k78ecEFU6`=ENKL^k zrpRLS3sGeA&_q<(o0}77*cQ&Pc^DTHGTRs8T8%9If`rx^*_;A5Cbj7C=9jN|tc6aI z@l9yVIt5rliOeVganrOUI1e@HC7x82191;67|T|=9a$MPWVtws z$-bdzO^Pi`40icyB2P7ZonwqBLA!3pwr$(CZEKHhYmaSXk8RtwZQHiad{;TSxw%PI zx_?#DT}h{^YrW4>^haI|)VBrns-4z9!x_x>HYvEVE?30G=?J*O!^6R2SM^hulp|y| z+3}q;JE*Mqm|FE4JPB=gH|oKk^5q+O8M)pK806i&NV#S`*{?G!hkzmH8Yuyd9Dvfz ze*i%S93}0rZ&w{9^>kzGRakcS2QhnNLXtWZ@r*{^$CJzgW|KCXdOOKPGBR`gz^R4W zKsY}N9@o*==j<-EB8~Wn4jt8tg=O<*ybLVBK-V3_E%=~0khCi+d{u`W_5$2qq|#~{ z4&_P;(ATSF;2S|t_{5P7a#~L0aRur*>jb@cZGY8S6Kt&rKoPT#i$$?#h9|xgmOQxBo1*hSmUju+?bCL>7LjTyPa|3N|Nf!aQ9jt*U(81Os z*nDM60bb$8u3W9fBrG2qxoGBwh?5KMNMh;{@SfTob~HI0aM0zYcR18%a8Trv?x3HzOt_G1n9NJ0mnOmIzK1uJQ1NN7$wE?D9M1D_ z`M!R-G1W!=o;5n4A&Xf%Ul+>=o#wgxNV;tVjXsW29H6k=~zC?%rX9hfVBCaf}Osor>v9Y|%wr<1g6Tt+NhZctcuk^sF-iWg_ z-X|JX7;=S!N((OW?DZg*e2{NG->7t9&#oJhZ3S&6$HaGaB-ZLlI*oh|R`ksI2$8o1Pe1Ryni)#wh|@ZzjHkFh6S zR6tohgi)wq!5gMSt#E_9ag_GnG~Dxi*ycG_jDGCLut1#Dh=LnA9wUtBFuju{3h0^J z_pmKT>v+*n2cg1Icp*Bm_ZIBKa>)1)6q{J^jd)SJd_53|?tX^HwQn3bC-t?bRTR6c z6ZKbqa@+5xOG8Gm5dMT$j79)0CAxJM%YalXQ(6CFf-KQ#S%*OUC<_BZrGo?zBM3KU zY%YDO+Ohg)e|}9-{Z|F7gT3#DFK34)6P&2XZdyY|1q9ejcCxP3AKA5K zBj$aGvsD=ZPdvPuwM8aNMn0aH=HCSD@kxnXgt0JL+f#}R{;_g4*ym$N{(6@$7Z?91 zq@z`vM~!HDXf~rL;n|Ew0vfaGgYdLLFNG`cjc~o*oa+;|+H5Fho#?tNwb~?Ni>dAaHnK~Xr zx%x~C;bs30FYF_ppfRbbDja?05S@W={Wm#Cov@srj{^p@%yA8!eO;qY&)&;Of}WOA z1-aaRX&4(PZ(zVO{&jVGsi~<{-j|ym`ZN|%N#1dCL#Gv}=|U@sPE+i<14SAR1;MS4 zY#o!wE`Tf@g$V)m-a=|b)K%|CLV*cxi(nzKG11z?*kGcDJ_h3NL?lT~t-{0xr!#4X zop*|0A$9KPcqxsK>4NxF z$s3xgmbx=Ifc_xfcC^Rqk3#=1tHozYcqo- zbHO_4S@KBNfv`WfFTL%}oqrBPxWaP{=cHB-5*iRdQj^}Mbj)7aq9qA#X8RF!`8h7k zv1>?JLQcEd5$xlT;XCrGA)vN-6Fv5_8yXEUv>9g6#B^k_aX|@sD^rmeZMaI3l#R=& zz=GWUhsop$V4Qub@D_r5vJB1)W|>$NYJWNaUfSRzieVnS2o%P zus2Oja2uXccs^zEs~%xD{w*8GU#lr9#(bXFo5RqgAlh*T`pW&{Ur2A8-RJ&K11*|k(g5|{;dj^pc$U@Z&y_97=4~tAe9U!mbBqis! z^F7es#N{)KZs$&&Zw1qyggX@(7BZAgJT7Q3q(-%uiL@>$>a$x$BZD5>JT*s!r6R+n z`odoy;^WewAJiy>FT=ZbuZ&$fnVUI>$ZQA--HBGTbr_3NPM4V-C21o1S>X0^qWIUn zW`Klbx9o^;`tz9kjP5*qPjj$bd;jkG4TC?exU@|&580$~vklZ;%Msg*XwEfx5r+1^ z8yE@tR=T<-Xd1|nFSP{8B@e~pXetM~51UYFK2T(2rwZs%x(`7^wz-4{AcfyZoj401G4}!G7oh*I6?1?Tbmwaokd6OS0oHHt6t$5vHEL^D6*sx~4E6?cL z>XbbpVIzBwVHybKnLwr%K|Ih%|L?Rp3cF6u;uxXWafa(m*7lzVnmH3^aHUv`R|N=> z0S;*%Y9V_7%Ei5w#fvAX9Ho#DnfOgIMRyoNSqRQSlA|s8d~@F%RAVBR&h!Hb!Iu4o zsuE^B)7)|Aw*vUT$g{){uG~yj)uR){ih@1Z%9#1Ui8EKGiF>SKOp3oub3153DcHw} zBy8kWd9UNKp434Z3$liHg>g=|nSqmeA?XE^9#F3#CKRNs$bW;-O2lO*f;_s6!&fF# z%>U>Bk`4mP!&X5LQsIucz(BW`pJ1e-A5dDNl%O0KVCBL^PFkWyQaVtfG9HaQa$~NL z_LA7jkE@@cY7XQ%<%G_8ul=1DTk|ZH@DbA*3|XPTpRAJ`9J07@7ZgXH9w;WYeX@3k z!H9MmurUCkRJ09ZL8cJ!IxI>Q5X(puSGuGl2vLOuJVsOBTb@rexa^FJ&3<`bAQ&ah z1Y&yZpSLz-GV(5D3gjdVI7{A^m$WI2)m37=XKUZ0r#m7kmZiazrf92G0l`BjeYc+& zWA%A#qJ<~zbX{bJyn!V&+~^-dlGStWEOKJ{h0IXza93kYsr`X8rbWsNEC$3Q=v$xJ z7wDb?THn>g5;#pNc{4C2ZAA7GT+#$JoPJ)3_*V_@EG!=GfIk*G+;Olv=!` zZLE7|4npDY?242qH+19fss^mU#nyo>PIIS9;LTb+^tnj}>#q}Ji z1TzUyoXm>Cv<$9<7oMuJ1&JM5&2Pl}l9S`$JM03kA3!KEY$R02Pa>TW;9?ep~&=)hUVgH*2e{skyY|4qeaUXM!&%d5YiCP3?-hh$K}P z(?bZjoiw}$#2F`bIi!k!|B=Pg!nx-i<^=1+)$fFkcK^qqA`S@P1+%=1<=AC3a?>0J z@vwg8#sVIwIZBMp$PwjAuXjhqL48?#o76}&o9qNLF}j)_EY~O+Gyt^F%HMG-i9IY> zuYy58xf%$<;h|uczUO0C0xRVFPUcxMfJG zW_ajD=gwlc)|;+sR<}QWE9a5#f?Z$CtZjen*lXLq2FR+kID}a?p0*AGEf=`CZ1HfL zE%9RPYPQ#dAI>h;^&sB?uKu^yCAc_!+8%LwFGH*<+^9D6qN`L;zJh-D5NvAB{NsnXP7Bn13L~^SzVq|4r%w6bf-Fi#sjC;PHfpR;qj;fH-@}7>!E~`!2T7 zbd%uZZ@N-(2wu9-)x|qxVQe}a42uqE38+b^8|ow2G}x}%2-p*f38qivztf3-+)ur=$x_? z(CG7mo4qhx)NnFQ>6mRj^G@4b=qM{yQg@fa6}N<>4~Z{oQ>;h_Ra9@+;a8;rl4U0#eo?c ziWhePtud43TDA0iO8|ny-TT43y7Fhq)fYevw{%qR7HPNKxo+7fPcEi`(laHug_TDm zl>Fi!d+b>9&EdFJ-0x(OxQ$hc>1u+d+P4o(VTtJYt`~fCIOO=}o+rIvt{&B4w$}-$ z2L(ulUcFEXQT(|o03=)2wH><_8aP}0W?#uc$>{<7^{vxAfZiDJJwykA6(Mo*QZ=SM z`8>?~Zd0ljtCIKBhUhX2syef8_M;FWx%xMXYKa~$s_^4Fo}N2H-G*Dg?=G+xGjH6n zopmZs+j*_LdWaJ`*xo?vE5^$&vBso^l^_>w2j5T+)L^qQ{Xyn1UjXSGo2J> zwR#ds&c)n;xnpN@J5!p@H=kB)P zc%x%|20P_B7Px!eWzsQ5h@yUka#z#MJ)a04tG0#T7riF2{2Q-|A`2ZDldgtV+1Zp^ zp*2=8HdD+yIY+K~ZPcb11554*eR?S0QHnq4k3Rvd zdB3y@hj2`-*{ie`FFbz}!Om(COk%{}i^dg~!c#!{g-UfqJKOwtlX2NJ{9h0BBj&nE z8=b9gsYw&+O3nyw`FBGy77ERTy29$V5u9#K^7Y*I(b#)++lbk`u%~(8Ui0CbJWRNb z>iK3M#Q`Qh5xbcX8;J-K#d3K`K>xm~SZ6_C*pKho%SklmX{L8g9`$LTu7B8IaTrB6 zc*Dr;)%vZk%8;lS`Xi}tZn=jHLjVIxezT%0D~X*f9Zu(sAB1A`8@!n#iS<)7gct%i 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%0A1BroB3;2c^Y#CBqTJqppAkXQ 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

-aq-?s`e~Nypo&Xe^)@ZCLIBNjt;@>UG~3pYEpEFzZ{{v_OF5Ot4s9Wf|0H^8qnf@ zMKGEok3jqE@jgs^6u$T{89w(2#FMgdUmF5xDHBNfL-<`JRQSnArGctXTrkxr(T(!e zdkvoFIw~9|?<=6?A9V)iXoOi;$nqI}Kv4DQBjcuJa&|cls>3L#)-h3n@`dk8QWk5aNi(UeEcD0i0Xx3W937BzR zO4L_rWmfjz0@h*tt*r zGvpaj#HWw$ho8FT2Zd9-{m$DVKk@^QG45`J2z0DkhK;hSmF77wp3OIsudz>dQ84F= zn_aFE!TyXO&d-DZazIji>Mme>>$A1pUCn!Qqg3<6bd9i_9J^(~uYl8-R6R}P7c~BA zc}ZVO`EEWZMrN|`JlJh^n`&k$cOyoDBBo4+*G|@Go>mDJhY6;VI^%I3qz@F0Nk!I> zq}XtI2OOe(5n@nTjXXTi`_JSZN9#C`Grd6f$Xd`GrsPSYKoO+DCD5pSic!)As+R2V> zo2A{|HeBXyuC`aG+tHK3pPv+?&$K;Jv&7U|nnzZnCRY~;Fciw%W(-JLtu2hHDsxLI z2h$!u!X|v!YD0I_#cz}#w0w)zS~BvnrOqJdA!Hk{|{-W*pgkcX$q zI4{?JG50yrKxJRp)H=o&9X}V^ktlP*nTgcg9 zK&3x?Wd^cU28wu$)&3wu01*tNvG}MI(w~m$GholOj@tQl?E#I)GJxLBZsOGFRJAbF zBkL5ta6Eb4bKtK?D`GqCFVF1B0L(n`IF7F{f`QY%pf={j*FoJa*4N~}&-gwTjaWF8 z8pE!XvHS)VDOi4oo*wSHJPj7@(e||P4`%OjdG3@(vh^~0R{gC{L8HD~pgUQhF;PI= zwkwz{5=T|cmXbv|6=yJxqke>PqNFLERPc;hEJcoTI3T@sMu-$;+IEEtJ_`xqA=3UN z9>e1%wrLe%21hd^rMBE_8dkp_%5fB)N}X}mDp7sOk}2lQIn&Q+!IOh7LXs0y(zoIu z_M?V6cX2W0q&q5wsCPW&iVEvR$-!DFh22OR(=?r3Ms`FQx~ERa(3KXA>|~==K20pC za4jvW|D@7QsIus)ytSvuJEdzf$xji&NZ^5PM<4pY*+@wyNrR_W;OM|@rphR^|M|JB z1G6Gt^_bivpC&E{7OCQRJEoLYUX#M=tYoAw$3JG#jDqGw9vQ_bf+5RAeyngmYD$)7 zGD7TdGU|uc?=ZNOsey|gLdyw!LchIxQ7`2vr45&5v>sLw5(*eQAI*BhfhVS9Db?a| z^o}p3&+wqteRA8mrLE}Gp4AW9`-jKfVD*6!sEpFzrwLSQB1gC4RR}tX0pa5O0XwB)KZ-3}NtYnnd*yM-Xocr7p7fLlp$BUh}v!{(} z!wzd`JRC#`m zKsIW7(Xpl?Z>m==L`?Z8`ozdTfA>aEz`bSWAGmi3{`xrwA!2J3Hhtx-dH-J5y;&$q-~c z%X#c_6Q8jkdpbK!F_vgFEy8+^88RuWEQbjUhNsXPE@tOjWmzo~5JK?<<>DoutXRMQ zuf2i)Jt1*d4{}nrv#=SSW7!*-DU`NZu*WLhsF-hs z3&ecexZ)s+>beBxS(G@7dLOM1KKV(r^RSp<-B)Fq;eF_wO&zi5Rn5nK3W{oeK);47 zA6+J^N=D94^IpT7df?o~2j>P}IDu9bIy?x`F;T2r#2n-GIKUA<6)BxC_YSaZ5#93n z3N4L7_ZCvcg_xrczL@u3zyO6-xkEn%*v_J%@EI!eh;XoxM=Wd_+jneo_T>x6p8 z9u$QavO*wM*5 zgl`$0{Fk=bGZ5|vE#@ffh+`Emt?wbla3c`_E`npWxUVq|sl`zO0cD#~11Y1@Vk2&0 zLZ+q6xOZsCoo}9Xr5UgFHJ`=i?rg9N46DA?WzDAZ{T-;tLmhxA<^f34KM! zy(s5jkr9k=pyoL-ehZXyaCEK3e#(M0X68N``0Z!e)ti#VX8p@MrYz-_vcM_DEFtf; zvAjphQa72SL<>a{M;x)_5RVL!@zFjp&ZLe|qMwOEsl)`&-b5_uoLunFJkdn)#l_OeV#&ne33KwvC*@j~mq~82ZSF|TDd(^(Z|l)PnexsuJ!{Df57W%{m}0Aj*fSBT1Q8kR_(CrhN?O!B|F73 zo2X?KZ%ZKIOwkf#t1hBB8-o{US=24_(P!2URtvC`QBn^7MV(9c3r%aF_=LERjxJjXH1c+1FRCx5#sicwfW5C-;nFGyn_rns=B($>S;Ph4t(82guK_<%_N!toeE=`*@QhB( zq#2__y5ba(LHXnt$^Q0$s;!@o5=;swrYn5o%4SJ+_ANUFRXmb!9-d&LcZ^$uA1Fyt zZnEJ6y7}j15-w!~9JbXYjYPXd!^NN$`WtPl(P)CGCIfL}%P3xu z=xi6DCYtSJsFMb$tWsW$IvR6jO=g?}n-%mjfRrE=t)b-3mFk}84mXSxRuuOAUZs1y zQdS;4!XQ371DSqACLk7X4%<7A5Yq6k%1#o;m}&-L-9GVounYwNWw?Pw zu_Z`87f!Y0nzq>D3$Ow%b8i<@oKU%V((wS8gPBx%jR&Z>P<^Z44;gGlPI5>oE`T_x z(%d-4DeFSa@@IS#i0kL1H0e0(M>VyRtD#Q%weaP>p<6qub zIzw+OWm=)UZK~uVx=#Y)_b{~wd0ALw)Ssj6k6LzD@=AHd8o{BRnw=7QQB9}U+Ln{K zGsbZ0(9xj0M1qk=C$*K2oaOV=%A>*a06u_U>BnsHk#ew-g?Kr*fB!!1Ii1DRXq#MY z0YsGK6vZ0^9u>?eIkrx5VzT&9u`Kb$cAOyW7+4LR7Jd?w8!em+Y7qws+rTof0-Fyr z*U^N(_-~@1q`7!Yu*$>*d)VVFip|gC_eY1@yPHL6Tmp&~kDzHh2;7Ge7d1)(qT!S% zBb*{+f#pTl;QN@*jaW&mZpM^JpULlx?N)F#L77BcDheYqkaSdUgjOY=iWxGpUhpE z(mj0%G+1tM1?FxzgCmPEBs*Fmgq2``$GujN7FQDMtYs@MJpgg42D^KZ^&ND*^1PLo zu%F9O-60RGss!I56YL+dydp|FlYv6*-Z)9KT-1}y(%4d!`+x=Hn~|ioxQ*25u$wyk zwY90eZm+%H?ymmC-G2r#SPC%@YC#jZNo)v&Lh^UZN^2R8Um=9B%1hKuSf*-1oEFqf zP>I~~Ig2yj+@N-X&MlW8H2c*JM)gVtMKCi7rYRNn1G4&I)y(jp+9pwM$fY!h@n)Rp2B*pGnv?xybxZo^@sFwZ^VFiJpzFylzH3sKQSiKIf|G4I8DW>5$ zt4Cf0J3stjnHPB7AKx~24vv24?Y0j04t{*w+VA$d&Ccsqw+bV#f6^Hw;Ws?&ji1+i zwl#H7N|RpZ%(d0icr@sR(;nR%Uq^iyOZ2oObUDNLT_p*>6$;)cefI6}@kUc*kn?MT z?%d)19ujqDmh^9)useHioW$LwrRYTVf|Zsd61iLBWv4jr^9MH*E6IptWuRn!O4mzv zI?h^3@-pdRN92Jn-g3UI(SeMv^xqOlCy$*J9Asg$YVzJnu3k5a`LXyAP*|8nI;I0y6t2EA^og>>${hUe6b<6bF#o3`VLD5U)$1X@}Y^BHMQ1B(vVi%{x zUgnC;ONDK?5Kn0llb;lS(>Y4AZ|faz%Q)L+$J^U$fz$ehwDAJOX&LD8%I>4G zXc1;Ew>oczP#+)e2b*zH%j);F5gS!ET5OJoNkUvQy$E{I~iM`Lycc3D_H3> z==)cK{*|Er4hXtN!&_2zfBzy9|Nk4=a4&g|Zn%*&xxjKy#WJU|O?MKGQYyt3x&?hq z8g??tWs{*$@jF$aonc=c5HX)lblJy2d%22Izr{b;h*Tc@i z>rV6SU*YFbVi}Im`H*PQSm!aKTq#}!IX7{gDt*dmr{NrJ^wk9K$ONry|Cq&-Xh3O! z=V-c^c|ksg7@dtqKYF;Pm818A-8iKvCN(fe6k#W_*6L0Hj+<7*AQbc`Nt((FMs}gm z^;LLX(*x(%IZE`G#>{WAV#0@+wcWswV|3kf=haupUV?8zv_baxM7X4%W#9Oci?P@s zvzXi{Zk0jw%rp92@dn|t{q^9udwAUa>wi4ZriBNr&ti0yp>kum zq9%I~elIC`0GvJtLc6x61e5ShmoizSf7$Y!Cud5QkZw*fvWrGr6%qIEMGg7;LJG7 z7+(QS=U_qTEST%Sd{iU<12k>Vvzn4`;F80*c3$i7=9}g6wPrlUYt$06*C1PD=483? zvIS^PEM=L(zwFcPEPBoobFZIgjmxbl_gdz?|76WLY?i~YK3mBBx%bLfU}>51N~XBd zqS8up3oEJcN_%r|ZKad4uecI`EL$08e$qYLKBE2R^=6}=Czghg+~4W2Y-63ZROegl?y%<}GoW>T2O?>#6Ej`xE-^w?mx zJ0!!zPZ@XkWuB)Ui24<9Wxv9Du3%;0|TDkOH8&{>z2w+c*0gU>=$#kT9t_Jzz* z-(024tm6YYc;<^?594=k&;|R;8CzdD??IuRb)^)!Kn8jZW)o~<14TUxtUoXSKEr$p zni%}iEfqd*=UKRUN`w~8lFRayfpLy)U3^YH8gR0Lt|Z8foKQk7g|kM5azC&armEGV z@fC<4M$~$jmraKH8OW6z`=;pScfnkexT^djpGRRc8G%T+X8KU*xowuTz1Jol%NV$w>&L z6r|WVnXthbIuI+TJN7VaZa`6o>MhctS31=lYRW155%&8A$jYaa@*I*^{#e+HZo_ce zn~jh-;TIISNI$(WH8J70=fNlXe-;utDJ88A8ulpA`UUWf)XQl0^>=gE>YLd=XBzqA zJNX)#+2+i%;^`~+yTlT7+*$4&$4Iwd##e)1avj(5uf8UWnJJ7yG6js_MPhcaY55n= zMIqN%U}R?G3OhjkG~jZ|zQf4F1OrSw1OyP>Yl|r3M?~qXc(l>rhaU%F=9F(7rSS_+ z;h{jEzcX}jy9mjPEey~X6!@aEv-pE5NkHzR*eE$WqkI#(Jh_QGLIpl{y`f*~T(?wX z6}-p(@2r<3b)n9#eEA+;=y;e0SC0~2eDq-&jnE%8%~^hpwsB2`zeZTu75mxIj&oKo z)Y>eb%cB-=fGis_kF}%1l{tD)vnHVCG%|)T=QAJ&W%z&1Sy#_mSgtOa)r>8<&K!2D zzEV9Vvq?WP(I>X2mG!97thIjG?VRgowFS_qx`X(jyYrdfCDR1_0=u5q@VV_@{i@mC zJMOf~K|N>$^~X+qhs$`{Q=MQDy>!w?pLlm%9qrw<-YrYSgPVlP;He}+$2-P{s-B99 z8bBdzJTO4*EWkZoR7dY8^W|qgGfHz^SI;1jDDydMd#s8cRC>p(wC&>tFdDi@uAV2D)DSO?W9s2L9z2@tqpqd!Kd`jG^vOPnVpCvLq)(41@qj%(`xij^Yq>&xN|nqx@W(g0-tGeJaS4jS zHy`XzGfpUJt4U-|JG+2>>$Q%p_? z{gY|o+4Qsn@A6T7jyfR|3Zj$UpgF^WKrYdN%8kr(qQ`*)FP*-|f*h{Of!0Hl2uWZ`G{pH zhB(ns;aE1l{{N8ZXX&$47Qn-UqxKKMAmS)IAd)(?0NC0SD3e z^MBUYycK{b47A)&#@FPv5)I)pL<2XoxjtLHL;&m=9OqQ$`oBZ0S8Xoeq1)5g#7>%0 zF!Bc2;8dTnjc+yrta(va)-@+bztzbxta;%NKjG&u=E7eEeV8k!+yy}nTMNu`VHwI( z@8M4;!K0sPs#EIzP{(OqU7&t&Tk0W8DYbMqiFAZ;08iaJWFtb%K8QIU16nz0sKQ~& z{jiq7FdU-+{~l05OqwyAt_X0dYUWHi0{L3fyemk0)2REmeNXL-r_?@u7`LLR=O6j$ z<#T-`Ero`1blr16J?>@~8n@H6XO*Rtq-BG)SMqfn;;66{?6!jdmbR2&x)T%6<-{)OGnx78MO zDmz?n-~rJ5l@-H1jZ9UqTa+7#F|p<b20P~k+9}vni&z}>Sw;eL_ z)oeUB^4`31Hie~ZOc|S-JakSi8bkl)m!k=S;({7E8k(&o;|i?{3ezx^-S+wZlSDzO z@fE(B)XNw%FLn7)t9Bku4HoOV57tY}HDR&>HIeQYs^S2*w^SzzTP@Vh*Q2=Wk_m3T z4L|Y-uc9xDTja=!2T)j9uoEAI?0Q4|HD>~KQ{QHitePcfi%u0b{NIzJn-TjG=lQIV zKI0>&5p;7+XvR~rO%&LDDS3z0SSfZg7R-#Wz%s5c7u&K$qQd5ql`a3 zuG8*P*3ZNWCle~))Np!hE2jxGTGrILyrJ{AHFMtH$ay;xr@92om^bg-xakj!G3N7y z#`Ad=(W5u5y}f`OXgHF1EZ7Ct`8*A(n7=c6Ar|@-rNyD|{>nK7P>t~cjZS}EEBhzB zy;0TYA2ypNmnuyQ-Y<2wS?8Ssv#fRf)g5Q6Y^aQ~bL_Ea6j7#Jx8Mei64qp8Q?lwt z9w#U##7-LaRDh@RmXbu}7C$su!3sS@Vw2jKy@Sy8B;%$}WY6T6&?O8^BTQS!1A!Q& z9r~{&sl+``!i7vDyKqe|?Sf8l8R|efON^Iv2q^w?8rA|Co;$*?$q*102n&@NROb8zhII0xx%Fo9SvXIAk;Obv&Wd5+ zrWKR7r<{o=%mbYgwhX6gMcd!J_#`U;NteypRyZN&wYZltgje^_7H$JbHcN))3YrJKjZhzWgFP%P%sYw!?EUZq^Ssp3^8lve$@oEtwC?=F)Kj;TI)y z+w@iAuku&Sd%tv?Qs$a1cgJpXh2YcMT$Nki6H{$u`TOBHRWr;oM=6KHM<`VftfN!f z{TIH&Q(rE5ek$4CI80NtbYMm?738B*1C7&YHb|;UVn^jQb&TFeBlJVkwK+7Yhn?4$ zY2-ZQ@pMfo_U~c-+5sohf+uJonG9(jJ-xEOsEo3tYNx(dsOh$cy8oX+J9UgV!#qDW zX?zic(grG52D8b+&8fn@pH5C5{fxdzKQ*iW9ajJO^EQ972GY40b<0}miysl2SbkJ| zBZ4{CDAd&KH@i2#%?|B@_iu9UaWXHLagw+nFtf&~=W)aRWP&#f!$4y4>@j|Gq9KEi z!v2&}+qvbW*mLl!O7={$B}gSlBF!Hi*&SoY`agT zJPcO@3a2_W)Cq0i5wyGtBdLdvY<`E$?wbmagH^C#N0>c2C6gehn1)qFVH%@DWi*W@ zm#FZh>Bs;KjO!SH6|>IhzP`U&!c}gN%2;W3h~(@q>ms)~r)Q8+SD9s)rIcoZDAco=1pgBF-97U}OU$XwzjM$RTgF%waWBSd5}G!=6> zF-aZ#i1V)0Lgh&XM+x9S*GY0Fno8w@75>*`A4FH8ilAG?h$j`Ptx#Ffcqc{@@nft! z9ENcPB$&!5sXVL=U_R~H=>Lwx)bro18FgSAEwxqN3Q*Yd8SR_s%2#3@LtHEZ-*4Uh3rW+Os_Q8JXKJ-1LtgXTB zL9l<&#hPv$*%5Quz&}EZHn|{=qJEU7G^x}q(aL#M&7{PRm&Vj7N#i*=>gvW?tt6m% zup&TufSvZq+kkQ%!bEyF`GFiyQ|RLS{=k_{@+7)`2DOr{kbAIV{YJep2r!y(ZaPgA zi90w?$a&l4*lVSD1cx63n0pkLHIX#)4=6{U|4W%jCwRP|8xOlgV+~J`2D33n?_{Nh z2U$tmg;h8h&~pLo(^V9{v!wj-BzYeX7#VDcmattf3sv?6%(<}wNVrKCT4VTcy?K4SX;AQA@3 zp>bh`FXaRtq<9!luN_wru0w}RAyd2bFD14=z?otbRfG)(exVa{s6(x zY|Dd^{*FFWZ#=3&a%~;0x}4}#sQhzmZPIp0*xCmfBK4p=N4o?Mt#P)>q`Syy zo`jS*v?QZ8JIQM4PRee4h4QMj9mql{0}5A+1O=5C-J@fttAqtNlNmXi>0$PEdwcDd zoo4699`XXpBE&KWC5oo}(Q4;4zv}-%Vc9J^c|o?c5fEfIV~q2gQ{pJ^Gg{zW3K06} zE1pFFGNyN5U9C@;mPl{zl5+{6`t@V|oASzE%P=%xnE6uc_V6vO)oLZ*SF3BKk0qnl zj813g^lRrW*H(Z}S$!+)H|cRN;SBoG3%y5^uA`*<>ETc`PdAN*7{cLre5b+R(U%<) z4MkJSTmjD#(8ZFn4+2(9W}MrW*-MojoDW(lp4Gjebe}KK4hjE?ZG>3c$+_5$oJ>0K zvB96yEUR2D)rUnL?Bp|oW(>f_hTu*NqkBHRVLF~pQE196V z4UFw{Bi3A3OlQ%SLnfu+W)aog4Z0n+Tep7L=dMq+%X<0+Zn{0iIm`zb2dA^oEP2bu zP7-}hcGf(_e4Wka>b4hn=3~INA!beuG z$aTBzF77#%=fw+Y5~;;-mVFo!NI!@Srl6Hon$uSyLDhWGMf<$;fi*!lBoC^vc*rG` zVR)AA7m*E&lQ3m>l%0V5yU2-7#2l`}T+5}4H9@3HtQ35E=$|hG+Ck&g3#a(KFxSu2-y+P(L^^t&WnVL+_V)Lf7s%=yl{ejtIU>2$ zONV0?z-&QxPp0N&RwWlgkRVcB@u_A*>f?$Ne07iQgFJvog`B;uTWBy$fYQ33bX zty9mFC01z|b8Y7zR)ll8(G(x`D4%ppzb;j+2v{y{Y0jw#&K*hp!E- z=9u-5EbDzr6)!Ll9T|Bbk*hbx$q=_I610|LbtMoIe=I515f*F@s_gQqCt+?@EXfF; zW*7O?l|@P&!_D|LJ0kme6g#G;rQI<)0W%0-9O`dS74Sm*VBs;sUvd3QC<}tO2fM9u z$r&Dr8FEru@sJxwRY8>E*$JmCp$fvXvbVW#K{R?ea;EKGMP(jKrrtx$}OD|z@C9&}#rb)i!(*&Nc zcQGp5fxy`HeP4qxH_|b4Xj{A=^e>XQA94ER^MsX7%D$jO6=^N1G7Tk%AkFkJs+6d> za6d9eO;nm8`cs5rHX9r?o9LAeRQ8F|eN$B@Oy5a8J(@I`=oA$sEZ7O?a5f2eT6Bw1DWt2~B7XSsKO^9MR z#h2qgRkGx?7Vx=Rt}@n2(aC_%kp`?Lr`|IPN7lm9VYZ>P7s9Sr?hQu+Hnt*6a3uu-ATxDY_7CgPnu@ zSMAr^nKhRDQS+`RIVA??aa;Sl%Z$4GDrhU&`F>$eG`}{yKd_iJjy@eF&!1CT9Q*~< zEYIov_+{C(^4w?#OZq?{zEis4?b3asGTSN8prNF=K!m%f#^f+S2ejRQk6NPvwtgRP zr&li;rP3e%t^SPrlc>5?+j#N_e**3-906I!H(`q8wASx`{v7M@=gHh{0z zr`~8he)5NUV{`rS<0nt+^^HHQ*Ebs*jXwncR)FNqtm}XOP5wN36znA9Yfg&3+FuJA z>+6pz!RsVBhj*zx>eoupqzMFwnxujF<`3|5{HhbdWdhmkbVg4zl3hwpGzx@M$4?|f z7mp~Aie*WXlaPUp=GRB4x2cDy$5S^ z`%z52r?FKJ@gfCn0avc8HX}^Bc4c;8=?Y25cK@;8413i2uVZKjUk1C)x6RkE z$JNEqfkWB>jvWixB1n#oUmkVa-Q#X6cztlNOJF~0b-ruww2qz!dk04ZxZ|T1EoQgb zZPN5G3IGmTz|Sv_kJ<#n_I|h3=^P(++Xwq=aOU3wgkYu3V~iF;SRd@;o*8#q2b~{r zXoLryMkVZ?eDa(!2u5Refy}j z28Y)^!Uk=c954c=J*K_mp~2edxL&#FT%pqq+OLAK>IVpXTyezBhYo!urH~?^LZ!?BHmyZOw zwzrQ6mktq^^4~EgJuj6+&L#VQ7cfY^SzRL~4OJD#TG^GOFVLAZXOK*t7kfs~kPNofOLl2<^Y-aW3_z8X(e6#kP+X)zgbd~nKhH6E=oap(3zX3W1qZztc z(08??cky`VhaU`C;*Vkd6q4NQt1qULSwvs*x&6sHr#~yV>68|c)^=dIz+tUUfLHrZ zm>B-cbJ76%QqngJ`m*~Cx2^|CHx2UdHDF0bw%a zU8QB?ILKS$9)lQO<@M+A&!2+&dSml>@Xa?dcM13jKb@WZgx~xOJQ*q#kXMbT5eN;Z z@i_?o$?W`sTBpK3LI>Of8TMom!G8>hPmI^tbSTh!frH~GpGwweWl~DKU}pKbVk$Ds zLXF%ER@a0GA4OB-4O$;CAq8p+R?8$IB$c)u3RCzg0BR0 zqbFl1oP~K2=o?yfIs1x0WB7{Geeg-46ne0GuuTd4*bXKlhp6Aqt17Guvv2|)po4_S z6-tQ%tGz@kAW0%b6-p&MO!PvcQw=BQ{R*Am!-x3Gdp^=tM36Q7^11!nd;HB|Ow|WA z9uW{x&SA%XIqmYnw;IBe2*dCIonWJX`1i;(yJvssSf31I~s_|m||N3TQed7=H zM&oJY=|*F{@#GKd^~PiP=&Sz!x6uDTyy>6PLnao7(PUVKdpw3m0&Uox=p0SAfgzWv zkQL~1(?5@ZracS}cRDTYKgDIE&$Pmb9PyL^cp{TW*5p?gn8qr-9!4tWiLL*J-CPtb93r%Th3(Xw!Olf)Z%zWESX-V76 zBEw8+3B$}XR+-X5tIX0SnbJIy%-uc*^2Dm}d?vRsgTFF>%PRO!)7H|F1v!7xVx1r;pc(|F5rq<^R9( z|6lq4ul)a4{{Jig|CRs$%Kv}m|9>O?zy9Qg{D1w)P56I@$Nb9w|8DsI{nqzKUyd~{ z=Kr5Od0O8@|NlD308cj88^Hgsuh*Y`<^O++Kl{;DDyhqe+nz*}b1yBVHYH#rIV~Sz zP0)B!J&MLt%36c$?B)V81uwUX_L{_(;UuQ)1gEp}>RJ3j&0Y)MBv%;kR3USvWRt5X zhJ{GgAe@FJ&i%;=H7VG8HXcx}L10Bx!>6@%_+QCc_v2uFv)Y6e3>U2#*NdJ4W(r_K zDE}Nr(8ZU?ensrwO1V*oVG7Vw(Z*yNPDa({(N4Qv(iGJ&fn}^EP(|?rr543omxHq? zoX#d3%}%pYEplM2B8 zN8=%8p-V}02r*gTMU-O1BgR<%t=%=XL$IK{0|I`fK+*$#lGx*+76WnYX6J47$z~;Z z+de#^9}ohEhdb51Rt5_;gZks@Zq(PvyHQ$zyG@LS#3W|~PL*U5-oy7XSMf$jR~!`4 zCn#rysSit&2(#uUcjhY%}550bIyzG6^itwcD1k_RmU@N9IBF>Iw; z5VS2^z#hH!{;PxD+h%v?O%GT+tLflJE$`^7~F_vR+Z5YkTvdsu<>@adtAyAe0Wint9i#H4(T_cu9;Y264;Rz}I zRF{%fO;CPQX@14yDCQ(p67d?D<=3z<&igo-rGVTVo5@Qv<8aCWN)*hu5wjxGc>$2$ z0p*}mr7iZ2ZiO%&brB3UMcNFD2B-x{H`U>~iVjk+sA~SCwn3Dz#+x&}zv~(_)#)-Q zKsI9O)etTz@dM}(oDdl!tbiH0(h<7-PpQ1g051su8d%G89HKyM1YQ>Vs2C`39l(#f z!?7OM>RT3-!lN7k<%!P}ikwE%D_m%qbTc$|nJ!V8tI+Z%yiIC?TjO~KgpBaxU`S-? zEI8Sst|!k3lc#1@%rY-0iL1gIwp7j%%ln37AeA`4`6QW*83R#g#9o|fMKBAo)PO=T zVF&=3U=b?=QeMI{N-T+9IaEYeR1g1*CW!z}B~7)50eVUJf>6?_DpJaYirassA&!8k z$l0DGA3u@qOv3UJH^xakqI()7eITe6L`HJ$BCUq49#g#}>foGqIN|%a{`Bcn+6=iN z$q;x0agZ5Y&C~dN1~BE-wMW76&LM@_RuGx+YG42ZVHfqhN|c%+i-B~o)DRQ8NJc)u zz5Ui+uzLK>`uf)6HCoBrgZG)#%=L-BtQWE|sw+uc()#vulOb>~eBLIae0mMUksFft9aKQ#1v``m~@C6QB zQ3pH+>(-38{9Q!3+L4|!va>!2@n9NGB$fCeK8Jfn0rPF1Uy~LZV+D?F!J8PIyX*I4}=-Q07$uY_EXW3t5O* z_M}fL7{5wc+TR1ZRB-SRZfQ7@{Ptly$S?^TL1U}>HoRWM9{_V81OO)^jteOOab3)V zq{(Ge%sm?J4S`n^wv!aq2srAD44W`&0B+oqddO04s*^qF>FIaMHm*(>%MA~?Spv* zy&mnUm{DtvUpPghfiQx$v%r1lb&xj&0Y=p2O2TFva4D7gdA<8;zs+@o1uJH?c z-!zk;=418;x?`mP&Lf*20f$!M(um$Aa#E$L%R|z=lOHmkJMjubN_7%)v!A9h+h$CNA`zcBd2RNhK}OqUSpbTZ+`#b)gkJ;xVj60G8W5F8f(;b^i3 zkiLvXwvmxEc?RUgwCjeUAd0k)%DCQf_f?RL=?qcScn??-$^(KAD>|aeBC4p~MUWAz zLeWkoPM;6^gkjbc##i_ir799qXd(o{*N3MV_|Z5`XHn+rHiC`y>OS5u;qM!zWn@zk zLh0&~nB?5*3LQD!NyN_Fy(Hd+uVaY_J^+%?HPu(qa5gsW+h|lXYB$C)I&uI+b)!)W z_TqPuI*9rc>L6oObha_7CwzJ>5)_FT04ET#P|YW^n7sI~q>~?LG4h;3YlY=n;-Xh6 z!lz_7114p{{dNFKRlA6WMh)v`W-kT54>k*rdnvP71CxG~WiiMMb3VjL1h@bY!d`3k zfYCo@F;EMbnmK8?t5`9kLNJX!ged-?NQyD6(YxR%KEDi=$b$!nOa|dTB^;47U+EHj zc4)ELmb&3dtzk3St(QBy?HzMSYT^OV&VG1}Zv(CZKM2{`{hU)ZDFMk~9}-x+Qr+j{}GK-Ou5E))U zmsByX55ix_1tMftS8qH!#WD!Z!*=F9tOx5)s(+geuNS<9Mn{XGAGU%P_b1O|MMb4^ z(1^LJ19;wt$(WFrp1hn!&*2j38iqsjb|}^8>ch9q&bMpAeXc&-Id}_9&zi+C+Ul$y z_6`odec5``-rrRRtYC@7+I4v&)K3kQ`C8c^W#lgcOo}I-oK6HBN zqi}3rJU(ut^pxA4@HF}=abcG$oQkTmh<+0*GXs4l2?fiO5GtV9f?Gm_fLWk@aU~1|5bE4 znZbgWVg;Sfa1+_@1Hp0`{v8vX8=i05;p2oY(>y~-2v|j3fB{2Svt)`F3oMZjhQ88! zWMy1w%jVo1%LttyKE7~GnQhhZre_z`ud8dCeAw&{!9F=n6H4%o>rXJxTzx&b29YNv z?gX%cg+j`tIiRtL7=~s`T2+fYF&6S>RW7AUMa-c31&9?1sX|cH4zM6tDNs5DR`5;H zg(Sv+u@ojJYD@Q6*IZ^5BkcDIZX1b{*Hh*U5CSlqP(id0!StxphSlndlY{qC?Ty}$ zCoV|&f)Mv06`$||!$f0ZEK(|)gRBMi#5;=VEJ?D4;h1exr%IpVNs#@WkE1tDdI;qn0;xy(Z@>fOrSbXK z+;d3_6Kb$EvG@=x2LPZmM}-~8AzPxdqqMlJ1zi6y*jiu5KJe4o*_oEAhtWCEcDeKv zX*!6MOitULu(qCFTjWbuyIOaOQzuo~RXLpjSkAG;1*Vhm%GWqL9u$gPYGpC6x&EZK z=1_!2J*YR(_=CitURwMVhC@=U0JMPb@*6Gjph%LpXoE_@DK()=03zlMd4HJhMUe3l zZWj{rtzXpQxtQLi5Kr;C>#(JO9g+NZXVE6XE>S1~RBoeZadA8$Y=`e$_h zAT1$d3p{a^5@qUVJR{S{s~h%FDZqQ6?2V*;#(RwS99GKa#p>T@(~A@&&SRA6AZM@_(sC6Ox2UpcsBn}0)~G*e!d z@Pw8Lk(7lCU)Cc09NC5PkOyExSel9;Pi&ZD!2=vty1iO(gzt`eh_Y%-)Xi$M;FL@P z5rrq?*jP$a0+hADHi>|~p+uB3R5K${!fUSC5qx3>Bz3WoQ9yG#!;_-Rl{udVT73T& zj+QzfR}ZA#S4Rk~C=;Z*0?cz>@FwZy#tcU#0NRsHBCr^W&Ch_Ud1}A=@S?bnJ`+r# z5JqWZ?+FOmx*}xjr5mWHGbb+jZuSjV;w z1om0=Z8%v-j7F^R&Axl?XmuP-$o2X%JX-!8J+h%A6pz3TFGe&xGln^~*uiym9)9UT zjEoTM9E{yHuj87LF<@4XU5@%1Tl;E1}Y&4n{erYh?nH&9KEVEd@Rtnlg zXG5w|L#sFmbu zWaIwR+OwcuN3Y64)Gw9Zf((U8erD&2Z66>5u9I96GlyygfG+`&{Txk_P($3^xwnG# z$LNV#UEeC6dtzxwu)Oyyoul2eti3t=&vglPh-9d+*6=h~e@dCJVp+A5lj{dWO99NVV*Uyqj!d9CJ`4X_&)=xLw8asZIRMR$5@#`pjY>cb}bID ztCqQI4Z%nxVW(3G_FnPhvD4XmB`&X6?Y^QM#E4M~?K>`-HQU>k$fl0q(-INZpiY#t zGi&)cQ&y(*USN5H(=$v6NDPESuS+a+r=+H}EsfNa#9jM^We0p_(HY~hG&eCF_==SL z-kJLc`_<$9_77DIG0G~vpVr8836&AW$BX3H4>}R-wVn+qKL~7fODw0I*!(re$^z^D zAa%X7%Z|s7-~?K($dps&+BvYp)rW_j9^neD8?7`@l}4rNtDd9&Y-##5xD8#PW#jPnt%qbVEe7S3(brcZ>_ z9PA8r4X=0H7Y-+7>o%sXRU(@0UaEZSV4%r>y==GyjZq4QwhJ^K1dhkX9cmw8)yQ!~ zV$^Je9@U$om&Y5z{4iHeBBCMpORc8jSmbfZ^!wl}l+W0-s24hT&-%G*60|HQ4C@5Q z!I=yLsEvd67YSY-?LCgV5Q-Pz1)f>28z2lZ-S8D&diYuq3M7wS_iSWKk>pL{0f!Bv zB5IUehQkCN_DBopSk%XI%kKAQlL@iyj|Iu`idD7x9mwdEPy;dGJzRQa--Ab&2$iC5 z8QGXzBeZy&am{dVCP_&s+!o)=@0*?d_WtW_F{Wr%UP??&B4c`iBLTK;h`Kc8zM|Mq zj#@sAN@%o`=31=7X9w4^3L+hb7fgwr71gs%&`-VvIrjqozJb5*D-=tA@*Q4Nbi0fC zijikU4_aezj;FQyw*E*cT&^G!HdI~@aay{XBp6g+yyz?9{*$RjMb>v_kfg#Z8fz7o zSh9SQ&=TV~8cf9~h64HrBW5@GCV>>xDw);m^<})Bu<{x{Vw%^Wv!?1;?)FjME!b75 zbflju#cCS8H_`bll2cIs>R+lOaZ~)uH}De~f|2m*D2ddyhO-DhLnaRH9r3d`%BmS= zwP>6$wF2v@-^n{JrpP*(bM?!F@<1e`>r0;eMX77(z-p0c*6JM zxeMpjvm{wN`SvtK*G@&R;5Vc#>KR}5{;O+nX3uM5z4yAi z;KN3D!EzN~_XB*M75Z|F3@1O&?By@Nu7;=mwO?01T>o=zjTfqCA|HvIdbLhT5)iG> zc}`Bi5DFj?BDcdk5dSkFW`I1ZP~U~lt`r|4;UTtTwo5MSL1UBU%6WV$Kdl60e1~#2 z4kOuY(+fI^kmG)*=si+!abW$PstYvtef@hW>;lt@xcpRUHZ#Dr%n9XNeb| z@*E*;i}qGH8yaO0VC?>V1%5{c{Hxl8|j;JN}oIb5Ld>--%R`zh- z9u)Ylr=%mg3e%E)A6PPgkB2m4&FC{t)k4pMFgO$2TsZpx@W6LR>H#}UVafQ3j3|Z@ zIgK)E$;w=+5QvHhNS2pDsC@*pL0c+Hb~Q}X*(Gj`b7QakZWV$y6?;B=yw z>8>hEDM+aoQTQIy$dIM7j~WWpd1g64WkWEo$7F6Il$UPkb4{F~(&(b=CdnF{K^i2f zP}!--ubjZoHsBhj^afyPl>)LsLvofN2Rw3fC)KU36f-V*BW3wvrXSG(u!8Q2rQNHQ ztmw?F;}TO1%wRGbUjboDbK#fv3xap0geXaXWfna@BE7nyz7|HYN4E@%Qd9S70?$QN zo5H9jYCA(mtcViw9%b_&dIizKwP>ETDqRQ5gvdX}5P4X#{tN8kE!Np@pZCoaazZ_YFXxV`7`lpS)+F*9KE9rw8K%*4X=j@8-2tTc$S9e z>}g3(O}gr{(H!u3m+%}&(TY;6Xf4Ih4Q@7q3rOtWk=}_i%Z2;nV7-nmuXEs@r!rYi zndpk`Ibz$Nb1`SGk4ED&DAFdn0Bh?!M*`5Pai%#HgJZ^UlS44Y64RVgFP57Vz@C1& z!ifw95?H}W$*e)k&C#`lj_&!S;DhyunDeOmT;!rG&qa;am-EK`d zdkCM$eHKm0U^!zY1P2>wnX*IdrPVK{d=aF?S^dkOvB6qR7XW7fYc#Q45HgIIBnqP$vGbl(k#Bmu?+RfTY=bJdfBZs+Kj+ z!lY=FQ*Q9uqKZw&Q@D~<_3Aw+(C_(PylFY+? z09ZQ_SwTXz;9x}J3A3gcY+um>QyfS*v|Jagpe@Pu!L!ATJ(za}q2P6$Fz)plL_p7> z*?FYo3-%i-S&pMDhM1>AiGO*o1$9F?xr*aBB)aHQ<`B(MCj|5o~o>oYC%qB zQ09IJ`|%iUuEbJ#@{J`CyW~=d_)L0fPvIEPeKr~xn1QJ62Um<@wy-|3INM#va)YQQ zlk;#y0qW2r;n$Sam1rMk*Gy7zh5d_?!F|+XOf5z11pVL;p z1io}V!UEPHlZF|Vn|0avGJ35onri?$!(%Sq(;59 z%!QHJ$%*SyrW1-Yp-4YIG2IA_gMh8*x5ditWy!X(KiDiA`Ql93?_PG|kn6`NY;Ujy zd~+VT9>#qVE&#TGFia~|AfS-)LH?1I6_F7V_Jx5b?7~uhd9+(rgTjK^#x1R4IiuwQ zT-^vOlNQ3(0OIv=Ipx{c$aNFVNR+O@$%R$Ldvi7$iYgY4>0E~_PGGO3%n`nq zh;EO^@z%>rRGs?X{dIY8tDoicTB6Tk|a?!5TyxI$e~s`;jM|KEursaF*-%D zS}r9Q64UwY(*EYX0-r-@Rx!no7}G=SGe z2LmbI3?ldD8m*Dn_4Q+ zRuc9W(0CiCx_QEx3el;RbBS;U61oNKilkF_vC^8~6>dd@QjUUEP8oM-p)X3&Z6CCi zDin91H>f<6NK=X2D8|Z7*s%!UhqPCMROPXLj@h^1LWs+Y<+r>DGHq!0!N@nYcE?IB+b21P$W8jOZjiIM;7V$ zQrm+~Wt~utW%{N}F)L6sQoh_o@X^1Fu)yFv+f+)_U$izx24J^O6;Z3QHkxQ1jq0`F zRTvLv6P++~Ncbo3k>ZOu^caczwjHPRvbl>emLo1EOPDm7b(yvTU^Ez zXW<#%yTEEZ}8F;)<98Zyv`W zvPJ{hk<(;wO?FiE{=s=)ix`f^ETj>(VM;?JMa?I$nVU5qIM63&f`RI7T<obde1BDaBln7d!dmDJjc691xG5vI=>lv}AT<9jL10GL zB-NPrjAA@eR?^$p4!u0et!yDc;*K(IvOw@o{;O82owUTlB^0B4D5-t{od1|%u^M36 zFiYKEzNrKc;qN!!@U!!=^648DqJ}RNk+P%N2nPOJ_&zL+feK;08ulzx;u$+?pc$%< z5>`4p4_UdDlID*Ua-4UV)Vn28?@Bhh4R;&3)sxp~ER&zr*gvgFoGOc_*R<|va!G3a zvJyPG4TgU*yG%(Q#4K2f4Q8|Mgj3sz7;HtQ8pYG;we~gQXb2HPfw&{*0boLw7QsO7 ze&^zjmdWo>G2B0!26V2fzwBVVX30*q#P5Q*y4tLwR`~OKNm)Y&F)V&Yy#A@NR}l4O zE+@tUILObI;I3S=O9(E1N@_p!Yx4&+Vu?H)H*HhL_*G@B~5 z0S{Wzxy9U93q4Ig)Gnr%LtZ4^4J2QZ9UD$hls*?A3QkbJi9D-{H)h%GJhFrNfS)2{ zw4aL&jI(*nZ+X4wxezY}<@G~uT`HnL&{GXwh-;&h zn6lSc%BEZ$#UY7SxU9X-c);}I;Hac?QekQebV5S*2A5E+4&szNnPecq7V9$}&!`C4 zp{XSPOv-zS+^V#DB2%qPqb|}Cm1ry#_G(zeIVDQ#t5MYo#{!YX693sXWOXXl;E7(O z>`;r`O`@W`$UNfe?~z5uco^1xLu(DnMnWd?f-ry>z)hj`5`avu$ zjF$Rv0iPei1pL}a-sIFaD{rI3x*D$qDtj=(q)G+49_M$DOd3$~QpH ziR2xfPFeS&;-)C683jrX!x1Kf1Dbp>q1a>|1%{DPC~=@6rR?!Cn~=8%@rb8YD@mX9 ze{WWCR*~o}?i%J@hlGRJG>H<#qfY!@s&QKFPb3a3|JCr!q>)fq$)<72hzVfpYparu zyRhOpPDVOhhHA2*I)+j?pm)0X+oe__Ae~w-Vs4lwtz8%o7m0H@3mWU|LBeAdcrzoX z*Bh}CtH&MLUc735=bS_#;g;!;=%^Kyhl|TZaWJh%QC;?nlz^qexqBsKuVx{_->`$f=MJ9ZY zCzROVe5yfr*X!D^Wqr;o(+q6aQt<~7lBzWCx&aHMy-4kt9`AWS9E|b(iOQHWGODtERAgmb^SKlql-NgC;^6zfA zR99BSLUBjH4K4CCB|owzMh-S7F-P&tWz}QaFqQTvl4Ns@Z=!Cfq0-qn(kKHOXEhfBy#NJfLAyd~k zm=k`wB=5+ZxOilO%5eiz5cEdKVQB!66f5kJ_f z*8y*Vp%e79RjRepaqemyV0ZR?%;`26?Ix9DRxI~IGz_YYUN_`RfURQ1t3Y3N<~^~qiK z9mT&$XMTIaUiJO?FxqzW9rHs5YWuulynMgC9S!|Zh0l}U^z;B5>EG9y?$o8`4v0Y| zD)paQ>e4eJI2_LVU9wBI?mG5T8pJ+pDJcATuPQ`A5n9yD<9HETbAe;?Tr;C(wd-gN%~Viun)G7F#?+jfk$D;T~ z(qGpG;W0$~TMfLQus?Z7=y;PEFBPF_dDwCNB}J_9s2+VH`FK+dunIdT8DMAWxQdZ&bhBSpXj`*vu3R;Ce}`;oeT%o7-##$N?cq{7(v zu$et`trG?cfnMb+OSU?GHNX~>qKK~OMqfoP=<1Vb7B(0!0gj>;)P(75Dh(n!o!ihl zX2A@<7fypsP|20behW&3~wt->eM3XS105aDIwks-x-BT80bbyVeZeFu@THeTCwd%kbdRFTf!^j&Bv^ z$?VS#ZLy$K#MdA;06G0RM<}~6=Ak9etC>LEx$fZ}18)atD9NFuxFO^1mXE9veQg<> zl|hNeg@jvSF+$~y%WiN!;a&KCjT0sZsH#Dm)==TYB0b3BeyWl(Hip~wD^Xvv>}2Sm zu9JDhqfI;2QU(f;%7-eht&YH}jk2z3Z=D6F|@ZzOBE3Isf><%dg9d{M-#X0AJq z%;XtD(sB)KO24VWY2^}-N)$#IL>@3S)GI(bvlSxs{7$IMm@XEMu1^CFnvGu=`;#+y zag4^~n8B&fU{yb*>%wJ$bcp}w<#@l-8e8eet&Q!-Ws~Bp#%1-Si0QxJV+G2dWv8(Iv`R&)aY;l{;)iojF!i%9ABz|G59!03z%745Huq)6 zVSqzw5E4P+xBgWy@&tvYss{E`%8wvkVRrmE|ep7;2&&yd~1i7oegxrpLbxZA=B!8|SP=7iZJC=HH5 zmn#z7ZS1~m^bl1`Oy`^7!GxWEA_|>mBs`tK4bik{XcB$HOyN`5WIJjQ+Ih%r@e0R@ zcY3@?V@h=Po~UuGE~KNe>t#&>Z6zyuKIw0z$zwNS+4&ZAvBf@^4rN5~X`5X@RmpdK zoAp*jc{)ZrpKjjycz*PzjMJuO-TAGz$FY9%AE!S6^e1o4M=q23S+egn>q7Nj^-?<6 z&dbAtjtok3$nDl^I@nC-KwPHq4lF*Yf?Oxc`il%Jb-`)xHT%fx7S4;fTHgdSS`PzP zIAE>hO|@5oTe&W@`eYi?LUfNj>3l$JN&F0$XmcN%hnCRq;5HeXS?tD5i{@UF>o*+z zFjcD9Tfy`h?cfET?6B5gxjxA8lKp(^PI#x{Oc>x=F=ujkfY_`y0R0u4_5l4wKTQ&BAXte9 zn0k%(;-_(E{g2uLov>RmEz3hb&uY=rWbBM>z3D(!!2V~|;!MolOFVwF-$rV%TsZa> z&c$_luv`Ro7i%aKY%>(Lw~wQ+qb3#~wdIQ0C5}t*Z73eaZ z%WFQHUcYsdMSF$xqb0HWTK6p63Oc|qnr8z`&MJ7~o5`Qekr@3Ymg-{~x;1#`E3Ryk z5q}2+cdv>Tt^TyeMXN>KtNYUR!(Yaj61=W^Hcu?`7p2`Asy;P`HcvG37aD-Bo4-rY zv-~|^9{rU{+K1)oIfB~$*Ukuq^ciTeyh}{3t}T?)Gsgejfqh270xh1gmCIFdMBh*{ ztx3Og6*lrr0@7oQ)#Lo}AL4VpngqL{b!hZc8ri;l^f!JKQOn3+MbojeZmK;occ`D( z-0Fbd0l063v1P-O0u0HZ1%YE92Qmq}d;uTxgLm1CqbW^wT3})@aHo5a)6f~euJ8Ol z`#VfOJDcgH$lU*ia+#1GW;lCvjFoLnzZ-YepxbHnB_9Z~5UET@@6+(9#ukx&>3fkr zh^mDoi5@CwTtMd*hT4I$U|AiOPM~iC>+(J@597pF`DuMD2Ha5$I*9|u@vL}ad^J}` z4~nn+?D{Nr+;G-)zhTvBj(6?k!Lk>3U8sNY!bXj;;C1}U{&41DrN#6!z%yVi9#~2& z!Gp47b^WQU|Ls5zD!XBG((nM;ryk~R$*UNk1p?=&nO@6gjfj1r`Dj6p(Ctu?Xk^DzXV9EVk9?gDC zt{J+Pakg^_<)nss)Zwp~Lfk!t(Nt)!;GTaK{qiwK#)wK-i1kpCsmx)ed!G|q!rEAj zAptS0u5+)PI&A}#$6PgV_K{X%I!`IQoTN06l@6j|e-4QC1~w*j{)k>0lnZq=@?jk;{P{uFO$8c>iY|z@Af1o}fkvSx5Xr;#RrPT@~yKjz7$XBCBWwFM-mLzeF8y7eF zBywlJZ4@i>SYCm&he;+dP~7VJO)sg_pBZ82R3NTY)s`Srxz%T}d1Z|#!nl+jrZ-2u z`fuLvQKmgAk;e_mJ(71@vv^nfxIOnBi9mfZ7A zWaa0AuG>da<(-~Z^SS$om;g_d44$5Doqb_)00K?ey?1!}!jtnz1bKhWnlc-LWtxA{ z&(ayx>E)`2`q|(8=$_!ZunX7_4txoEga^>;=kR#2NEjNdzIsab`fEVHa$Nq~~ftZHe0bi@!cJf1twr=7*?B$zY3M?|8H zx*F+jyrbD!kwS`+i=tNAhc+2UVL=_Zq4POI5(CC)v2>(_1B6~-dUfs?BiC=2LGIqLqeye8mhR2pw`W(7~y?R80qN zcW^_5wqr2Z`}k!%vu24Onj;SFVjAo@^AtAy@VAE-a}sZqt@WjqSmEd-qn*4`{<+R} zqrD)j&ZaLp~+p6yKg7Yu;Xn-9LZt*bs_{vo$R4146zwJ(pv4q2_# z;$RGSDGuX*as*g~G(+oeCVU3heAFtOa?Wt(z9MQ>bC>E|E$k2@ZqZiys$Ji&W12_K zKeldu;`g8xkfK`%WF0X=37yKgDH3{byx`Koq|A|2Z$`EF;e&FjlBRnP;(96`V3cGYWzkc_%kJ+^4m8G@-=DxtWJ0i+4Io7~RwCa>Rg# z4Qhi}4gov|lFGcYofU;TWkUn3Wh9jK0@i!ZGPV6MENy7TQ$bKFr~@Bh1v)WGg?!DT zJ8}zY<+nV<`rhk!llrH$aIS}3LRDqWLmKvoC@H_UO_98}l?JU-3%um&7L%fpTe@C zS2JA~{Am8SU~HmtxkeERXuszz~;2oEbNtwy=09{iAGFg6}dOJx+({w0%SDqWmvc$5iM zp|9IVQKuAUODaN5Imkj8B*dg^cRc!Fj(kmA3`Pk$LKvYy1HqN z?2nGvtEE3D`gqeLj6?H^$}g2lIaXSefn592+gCT1-5W-px5e%X2`oHe2sSP+bU6lF zG7cCej1rUo(xi#V^Eb&`OzG#NwX81g1Av(yS<7%I;d1!GY&bzPtE79%$Ilx55U{CGBM!#ztnP0e9+{;+0g0Jt1unc>?;rr zx>(XPPeZ*v zD_+vGL&9pCQXLgtlbYxbUvQ6=neZJON!o_W!1b>L_0`)lSB6hyQ-jpUSaiA_8@+?S zMzwniMY|yNCsf*3C&#zjgLY<9tZ&HVzJ#R@5OF!v4|h*= zKuA3}^7O%&(VUD@LXp6hWdLM3?+K=MVBvF7Hd>;iI)bFB;#8x4!F1iBNZp-rIuujs z8oo8gyU~)apl6_I7zTN)nz3W)S!$y9!QzLyB~NT*OJq4W2RQZvpV6~<;qAe~k93bb z2=iY2MMyWtOPjOR?Bcw%cs=5sklXHOxeCAwJ=Zo;xbb5g4C=!nIIwLr{Jr20JEa4X zCq1YtNv|0c@Z->B-D?Qp>3|*pp2(ohr90JNKnGk?027O1hk@l#B)ly_*S?XC%tyZ%Y&xk-mU?lChq%bQ>`jo%RPp9s=1s*@oRL8Yv>4>zQ$fEd zF(|;}3ZDkI$`F&Q!soE}(vv4rM9N;3=z`QS#qKK-?`6mcaps%B>1|kInN~=m*k9zmt^RPyE$-^kq5Hq2KyQ&i_~vX>5?YOsh}5p zp2Us**bdK8>lw53TbdSjaHnrAveYv{Y{ABM?_9^uEneQW6s_WdZGp|C((uB#cG*pqp)-RdwG zoU%xe#)r` zak`HiZ`16cl7fRfj&UMntqZ0OS%L-s?G)Zq)cfdN`1|YGgclKUvx*g5J#z^Qv?Zum z`?cv`N!>-dno<0&uh;Kacp^ck@}}E^Sq8pAy|;ZktBvZx{Pqmsa}u7_jR7C*DACQY zln5NFs_)z%wHYg(%@TgEj@yt&_uu=cL-_ta)W61bAG*KEe6GMlegX8~QWxvh59afX}(|EOK&NaUpDd}~r&hNR3o z>&I3#U>AN$NW;~ymw}kd7e3IcCD`&9hp4_4k>E|Q_v*oCaBs8eHM?&&QgpBANqO9w zwc#p1tMc6;@qsQ9+SPr)Pc;a|UC)$s-py8=CM@6_<+XI;PUyWZ&wcYh=S;5mjMXt{ zpD)+c9i?>t6pBX;zkRVUVY_~_;|bkYKYz2o+@I{qd?ywlEgG<3s=7#14$3<6Vfzy- zya6;26jFGit|_$LlBinfCG7?Ah3$ zqom{|r$z%(dl{I}H8^Ub`f~>fKS#VKvP&*?T4FpxI? m2r)JnSBqeLCZ8Yr$W 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 z z6(EXBGA3bfrQ2S&TmZeC$4Upu0M`mIiedaCh$~oGV$HX!}-sY;hX=B^6N28UW@zU zBj63rGN?5_or(9Hg}f8@=m{TY5KbT5%9vNIaIVRB%{LmOjI8^Q6UcD1;_>_cA{zhW^_v;ADxGaAsj^2fHStKesZEi9As&vfO7N2rX(c98OA13$SJ{62t6U* z7i5a@;a5|(xg8&ncqg5X!V(n_b7x5fYUs8CT#j#r2QhhL=ov(@iFGpr2Si42o+K8os7BGn}#b#lXMDQ*otXW@C+ZtYgLc3a+RYg~cKmq&`eo|E!OhTSHd&W?3}@-;#XvrRnE{9v-`4WMxz$q91F;xScP|G87d|Fu@NF4YO62 zB72>V^p__%=CV882pje!FN^DEuvY zdtCXG={4m!dU1Nc!AMpOMwoX@Ym5Y>!7YWWAwj)hdM35)&yXOg%qMWPbtMlQ)^6SQ zq+am`B@v!T1}AQLmH^9`ga7S<4Hk>L=G$xrKBnjJHdrm4mV(8c*E0!6ixG-g#XhY1P3v#r~n8JtmfJ2YR$TlcAP?CrhW-lY5-ztWzT691|j6@bQ~I}Czh@YO?d_qb`j9gHl8 zGMts&{?5yt-JSmT>9;%mx9O{$*ROj=z5PCUqKlORP9e0NO1G|G7!V|p(#x41^=Vk9XfBZ5;+h{z@RuT93?`W5~0 zpO61o%+I$rYc#kY9S*z$|FQXWGp_&kWMlo;_}?#!|9IDb?Pk4yaQgP(xPSWc`+o2A z;OJHF=szq6*!6MQ`fOH`G09i9GE=me@D-A-N!DbLIT}5uK7$k(zfRAl<1)A z*0+dXOQK{N%%Qo#2ZVV>2VjVM?rl1=}!z@aC{UEbtM79U3X!$(Scylvq zly!aW*f8Ck?`FMT9o&Q^pH`X^EZ)`k<{Le=lzt(^K zrTIVhU+)m($9memniV5B?jM=s{>d+h`81Rtuo#0}hQJ zdoxl|-2dkLo$_1^r!cq{qMaO!3gkPLTtB9JgMb(51(f!cjS{8strR>%C!a@Ds4$Xf zIf+Dc1(Vx6IKM-_UOCG7rST}~QYfAnGSNj%d3!!0Vr#9){WL_VcWGqc+SV?WfSw*a z_BQpUqVt0|_P~IipsNU~fJ*qjoqA5W#H{C2tleLMXI6dlZzdHg8m*Nxl zvcv9CZ~s^tkV>SL{wyYCaRD&~WU1rck#FK$$Q8K7uXg(V?$Mjx^5zV~%%@b6&CfJU zLZER)O&fKgOE+nHX5e07m&Fnl$EzHi@6z1({MJ2p{qxDRRedPE4-tKE@h}RaQ)aJU zA=w!RaqoES958&4NIbYK0D82Tc@PM^r1ZXhM?3Bo)VwT*|740y@S8<1v%9nZH3A^; z_8oCZVyYmZ7M`b@?Q{zj#YfStcBKGWil=&;aKaZ>%ZlzY%g{d1ZSm=1HpuU~$1mNL zBVpPVMq4b=RNMT1?^`zvJ-+oDOU}v(*Y1t3G2u}NSD)W84{5rwl{VLJ+`%|(!Jjah z+edfbwa#~Cde`pjJMP-r+Iog}4b5HKM|a+rrfZwQpKxDy|NHyhx>0v)G_Ws^kAgWN zwUpzaC;5@4aG%}ENZ&oM>3V3Kj7H#NLs^Ye1lYXEMR|8S;TvopwcSwTLWcoBlQdrN zpqskIxVw9>ecE?Q>G9ix-B&9g)W38K8z5{1%*8-xIhxJ^t9J%f52)7E>W(_i*QUgB zs7aFcRAY{Md))7Ce@(l^E$t)S2N9*V6LikZ8oYO+?$W90v9NO{_r{Z@5|$Z)L!o)s z$fHbsA&da$KE&x280I62Ics;nBfi@2J1iJ6_p(rI);60F9W>=C|f>SoISeilV=$vWHYn?%U%KucY zUYqiBkKgU>b&tLe5%hq{N@+QAD18j%&x6tv@U5s{V{6w?cY|ulOSd>hZkIyeY=v^R zazIQuvv=@*%@>*|7vnL)b=i|ho5}~F|M2dhzq9|wzp&G5@*6!`$VR>)du6hgjjk@; zoQ(6C;pRbd^BcVJ51mfuBuAAU>)1g321sZa+9GgSDR-Gz_}lJLce~#^Iu3i18HF;N zjoSjcB*4kb-ma}iaOpa}{|D?-a(PeXEf}ZhLzo)O( zheK&WU!8JU26HzNs6e=D@Y>-$u65Vo*%=fl!MmsbaNl)0|GeYwPKOrFU}|MhntnU2Q( z2)v*)7c76@<9odC^1DBnyCEzK)KV)h|K=VKyGJwErkTd|bT({67kq0kfCHrNqVLQ_ zVgcnhb3n=u(~DVlb(w>saI}Cr;kX-Ls$ZfF>mL5YS$5DT$~(l^btK=*sFn_HrNrkx zY&=;*+#0kL#JiFD$l`aALMLC-I!%f?E6U_DySmCJNPv671s14Vx3=1vkwv&X$?zlR zGt-*_#jhbo%=&JXRr+p?v-lb+;dbGnZac=*g8Kd<;0 zndo<;Xn@UE@mTRU98@r@-{8+!p!y461nXo%Y}{AjC8k4Jc^QA}2VfgC)c9+&I)b6@Bd&;{jxI+HdL2{c(^U-;U349~_&PMy$Z#)+zMz<@@T2^k16g znn5lWkq?>+;{NhC)R{k;&QMYwVp9HSrj<@T^WBx>ej`;i?f1CMc%Gq0Rk^_pQBbtS*Ms%6ziH=f?CLU80G3_dRtF< zV2+0;UJrxL!pUs<3d4uRPKWOP!IbGO@k*=%>BoktBd!%Y)u9HnA)Mde^bz_3l)9k; z0f$zS%>{a#KJIKh(-M<AGh89seGTR54H-;T~Q>XDn8_u~xz9m9X~+4Ozx z+5@uMDSQtHy?cl4#UwAl>U6)}Ud@W>9DbR(Zos#%Tpyez3BP=BJ-BcWbiXgIM$=n( zNblm-wc?)p)(M8`#pw3xvUH!iPL%ld{IZx{K|62q>Ffgg^=6b^Oo1;FKApM?;9p=o zxXj>}Ja;4XX7N|d(S_e;J@cY9A=jzr`S|Kp1E$pc%Qvrz|C&fU@A_xAzt($H=hJEx>rD_;RJyHPGADD z?HPRPR)Ral+sS@*<^}~Hx}RU4_Os%2cj21cfA6k3xWILIFgo47EMPUg(*5G*IJ>?)ee2fz z1^hJ{-?}3%hhG<`+l5=XnH%22%j}|b6A!;l-Ik`oJ}j}gn_nkKxf^rW%#oA!?peof zfw_eRmmX&epyim)TocD2jE3~f2W;rL7!L9EkBiBrn=ALrbe6f-aBCIXJ9Yw*7uxad zXgV)W_ubi6z+Y}DyC?PC;vP*e@E5niuQT|~4R22W_OWsJ?VAENYd?DrclWb#;WkS@ zA1yB2OS-FY!McCp%i=7@uJ_%k?soPi{5HE>%-t35V4vd-{RS@m78pq`+-Sj${JyC5 zY;5m#kB>v&#-BQ!&Yu;~3WeN1SV=t?Imrl@{l#CW@YI^iZq{z4H8f$;CTGB6d=w&S z=;={Q0^ApW`qT59o15o<{k>-+8?g`Le$Zpb~BgZM3t*YFb_1n7+F6COOM{XTfYgD-2Z;V1lK z@=xz|=c@M;{JcGuZ=5O!ilAEuZNN@>evz^13f}PG?i+%>;Z0xOeUo;!t-YPp3t@d~aOO}A>K7vqv6el_Jql^3R42YV6*9E?OX|fN< zj~HF@mkPKa=ta0FL!5O0F0AaFQg0c}C2r4RLe*RG5A?0UA{duyBcb6X_)6GQxa^E)Rs?IZ3&*-%pQv$Gv{I zB)+zGA;?c1d~6=CgR7jtyPQs@Si22sLCfK*HL#`l?8Rit*XYUX>`^QFvQy zMSsx$bUIco=^pmq9Yq1irn{tN#(AKHYq8!eT=C^+a2k9e7qX!oUY9n(4sGG(pTHHL z-23vwp!sE&-_G5@(GAaoE`z7LuG2rtP5)qT zXFGj!bnxyl5FX7hzX-ZTrG4AAFJV)DA%A(Vx8D!j`k#(%Oe#|}DQUjMg!-0mf?-E) z?Z!dq=9fh)eAzOGLdW>kSFH$YIK57X3ub;KJpr#92iNIV$M4GEJEpp$crC^2Xky<5 zmkI84F(GN6HbG+3l{dka8o+4MzOhOaUB4EL`eFj}PA>gsX<%Hw96ZpDit;mLs^q!g z?Qi||_6&3Y>PJZpW!f15Ac6|;Z26HEa={pcuzoN~Al(Z%yhMo_XSWH2II>wsChJoI z0i#6veArTI0E!+UxEC3|+}H-b;g-2s5yZ9uj}yMDk^O_y?z{d0ph2B=bKHW{8*1LK z$+>$j%%_x}8DB4r9QV6N{ZqFvu>~B|HI67*E=FxcuXiu;#~w8UxHCVs@Gd^w^gLn@ zY)aPaGrf1?Nh`j0;|brq@udE4caPk@wOP4+Ym;vevpD_j?jE__EMvIca3lKYvtZyg zsbj)X7T3b|Vbp@E*3BjAH)1QH{Lp;RilY8zU7>R@S}Lfa<4$lV(_&yLW@xo0xNIl| zkAb;J7=!^b!=TdUQX+uTBc>Wt*`gsx^zDQFZ=A#nj<-HW+3vkLEvbp$p127U*GaI- zN?{(2wxe#g?W6E?3~?lkkapY3P9=&qM62lcfTwOPZH5F7Ig;gGyp5sgEsyh_UpiqZ zFNgSPxv&+2CS>j_VR9YmZ{K$ND3@@`t(W5GALqM<`Q`D^sejoBh^|*K@v@AR=)ggs9K1E7G3pO&{){k zS?*L$zAR`hY>Y31-t|D)m`|_PM)`+)lsZu`8C=o{WG+pGdkDWcFK!?^2@|8u4tt59 zc;r6W?nSoEBo1;2whd|uQv$F!n6mL%aj}>#N{~wbwXgh^!oRt zMAkP8juBNj-L<5k-s@V|UH8d9@7L~~*LL=MeO7uuhfi87nq`I8$6(&Qbn0XuM5CWP zcbz*@cV6y(pR%0(rq>FWbRfU@j0X*AI`RZ(aNQ(Q0Re`&IFoG+5w5dxI$F$gKkUsf zA52=SZ_TlllZIOE&G^>pvs zKAU{;Q6paW;7@*H3!go(ow$20NQ)tj8&pN<$OGGxAKlDnYd=qK)_!VljNP^WY6lLA z?ru$y0$68IjE1;ETeo?+#!qRj`0j_v)L*8}Oj^K$EC;yEo0kmQ6kYznUSA^~qs!Mm z?sD1)d<&W6HP_nh)}&4FQMcd*m2R!N#mx@ia%4woO0j!mxJ0jUWZzoxV`T6zzv*|T zUwYHh%U|_gJDJRv6AhnTZJ=*kq_4Y!oIQMpdVWm1!Aadea{mF&Pq!5NM+dtRT;7|k z1E*7u-57%PK;+A}tiokb!}huATHWpK9++GTtw!iNCM!WT4DwjPg|E9iyDf{sh65@a zyr0k9e_ntNH=W#$;X*QK_PR%3KL?ONOUw}zd~%r=<$u0fs=zBO}MBSAAP6ncd$Y=As&RPzAK52R9`mcWH&f(k9rq#`|` z5;6~c~r%tiFnfn`T;EZq5iGyr@XV&GEm~LlPn#Y@tzuqy%r+Jc4 zt5h7TdYfM(<~DV|BAHQnHJuEZ;Rq@VXR}dJo49WK_ky@@fDm9YVJd0qD6kKcQx&_> zf7{#ly+?$pSr29*(ZH#fkKY1r_iwRk#PC7Z2fMrLw7BRD*>3rxYPy)yXRIahXJkMj zO5F&E<6bZA?j9fb<|-L2&8?QwR#Q@({e)ZRPvvfzy69s1^FNP>Fv?z9!bAAzS02Kp z`G3H=yY;iD#x2eN+j{zF6YD>2tv}w{e7XrKbQ>E_+&{nO|NVmbe~|PF$$!63U*~7D zpELV!DcetgHihWbH$BX~ec3(U*-l@-+ux47GE4SDYgjY$@z|#cuMQX{`Qay zFs>b$&t}Bp?YaLT6B}!;M67>wtJ1#cqYV`}vH;TCSG&CVWBY77HUpm*_qg$IdM%;@ z=9eR?duoK<+1(4B{P9y^9v2q^#fRBGz;{$koFm&!CprHxJMc+{Q$N$f~W!wl7Z$a&Ci09dRu1n;y ztRdg5$QP<`n<8^IikKC$#_*6`-JYUd>Z_LC6v*Y&BZ^nIC z-8M@4Q)j~mF?)kwcp%ZUchJ><@_ zap?#~C8<~6eZLahtAuU$-FG{?JKdx2?;~XYTFn0spI`clL@)(6{}q3&QL4;k;oqmk zd}VtqkCMlavl|tW)d}`3!BjVEI_3LRy_+&V{SC|1uXfFAgMR_sDbPpxJ*3p+(imni zYW2~$<}KV`qwi@^r=Px>?m+@t6%Die9CvYZsV1Bafs?UbTm2aNQ9D*Ejtxfnn z-Q9V4)IHjyd-v1t}sKFmyCL1hWRpWp3kOZn;5v> zvN`)pFWYRjA=HM{=1}1f>L;73dM4MO>L(JY;A~Nhpkk}M1y@UyLXYUvO#)DtyMIdD z99Z^mynuXvDNW6FWGsJ=kO7sZDc&??OnvSi&y|azEaU*P38%!U$pIa$ddGuSOJ>02 zW&$TO*Z87HfX@QdmvHVw+yu%iV(F;7;2BI%w&b%bI00Tz%mSnd=34lQ)KoF?_KM+N z)PSM>rLxG2(YzEc7r1~@J_yupXJ0zpSZ=Re0hkvYXji-3Mz;} zC3NO>I?o1Lb<}n39KudGq=RWWhD;?K=A`;uemQzP$NhBba8XgYSeX5zV7*X5TWE@q zic+*nmnatvKf~A^)OQXSoODJhYkXtwZ82P?rPm`2BW@>t0c2nfZ{OOCZ;vZcEG7U9 zmar(G!j#1@K?Lj29ni%{cap|WWpxhxqO6%r-82bIJ#!$|b9QY!5xOo|&+)fgo0hT9 z;^tA}!O3&*P4DQNo!+-zc;Z*EP+?4_*AqiCD8)L8N+CNlaVW}Y*(M}YAs^~`mSN_W z-|Wr$+SVXtT2km(7Cj4?gp#zX&Q|K2k6=>GvZQ!o*@&?#S#h&Za;XC$j~&i3#h)lYFLC96RIq`t}fxU z{oSOvSsNAab5k$c2|awhmLX|}x~5p%7RzfwTkbm!xZ$h8;YhW3sX!ymEE5k5hg{rr zZN&G;nt_Y}VIv1NYYeMT0A(zPBds=!pVK(@!}sD>rn7RK4Q5li@N}>H)xnWc2%PTi z?7Kf9_{)W~36TC*K!XA*v6vtXf|LVJwMZghvs)CtW2NK+^0LB`9u!QldX1iW2{&F! z-Bv0b0>FW9i^*_$UD~?8S{78wXqR&$=@{J-?RPXvOwym=GA-v^%Vp?xmCQR=_mf)N z2*c!Ez!i_3%Dc@8Oo`7Jwd=+lv2L02Qj&U}DraqVzEjJIY>QH&nTMY`NkN2&Ui@Ie z&oh|Yfs-Y);7(8BFOb$v_gcjmZX%{v++>Rhj1=N?P;bzE<6HHdv%cVIJN|St`q-Dr zCEom+QkyfA%1o`$G9G$>L0t$6E0)HwDz_UZ`3$5_i8_a`zJR3$q53uy#+`HV$`W~^ z%efRu*JE)^g%h!^riugHFIpjY2i^l(>9EWp%m?=qkY{?Q3r``tc?3j7(E4bm$s`LYoB@qW`L{vVd;Rf=C0IJR;>17P2`l zuL`OBIA13F!C5N9YnXepYfF@c7r=Gt_NiN|`LIkES7Dt|cbs790fxvRnU)l0?4-wq zopus3PHYrhZ4rw*A~73)s1sawPEu$k2DE4d(XQ{OTyB!JCnX*T<%6Q>Lk8*rYDj9F zK*>ny$Qa=YQg#&l94P!^dqg*W>>CQVRpjq!$)TjTS6n(=Nm;5SO*O^dS6>+BpOjLu zeo@Nd`8qcHe9;BUUUlmnYm;F@=s6_1!%l`KVUsURCA0*Vc?sm~ZfC*Z_^G6W$=&2x z;JoC)qq!&t3p^5+>=O5?%L@QId5{DAu3FHvU0>(dsDm)Wk(_Dk+l!1~V}pTe-crj( z7t@&&uw&7E66pcGvB@s9*SZs}M5Rt^%19M~Cg9RYUL*uU6N{3Zp)C>$?{qI z#!5xR*c^0vJTTn6`%mr^l?K&cz)lKZaiZe^Qct-tNKvt zH8gcu2bC+p58w{Ip*ND^!rX~e+h#l^(O}~90ZYr^$kl3>7g&j@sSt=V7ESSiEp8Dx z+f>_u1Zl3oU6AJq&NXzH0EO1*7E!8Fqnm4t!}t;axJ~FQiP?q0(zAzybV|<8tbFrNxJ;KG{At*2H7NRm z(PWB(Y0XJxGO~@0t{8X=tp}?MYHTklWE|V%*V$3Ny~##$&2ht*zG+ADmN?(W0Z>zMaCwmzEC?sy$0?_cr)wipi8pz zk!^%?Py(IJc1eCeTpY+>Evd034SV7penUw9W||9m0I0CoW9`-5V{M}w@rZlPFc5uE zG7~g4V$`3m8Wr3YWv;tC)Wu+@B_6sjJ6D$+GvTre<%&}z##l%k-WS$v+q#!I_u@ky zxskY-nlnmte^m`gxy32}B+V;Y0m|WeV+ef=-lNGD(QryN*~#m~-T+;dWGp7wDs+oT zmY^kgYv7GACXG19KXBDAJW|~BxW-?Ky4UJ|wnyo86j z_@tyBkP)*?Rg{4E5I%VRmf2Dj3v)QiUbgg%@( ztbR;ylL-Wue8SRlNMs_J*H$UWgnQu?FX}tp?EYnb#7LL`=lw<_sd5M4Xz0Edb%fW` z8B0cx17M1z1t+Qiwb1r|wvZ#Vrc!vNUl4bH(Y8()0(F#Cc)<3!|e z9EMjk%zO@`=q+I~n!KsR1)QmbBAkg%{Jn<|odl+zBbxv+$!s4%QhGqC(DLeZ+h4f* z+KC$GS7;^X3bsAhED0Ww2_OLhRgw@J6&V<=+)~Jg$m@qr?%QM;9Rbb2vTsW*oI&k^ z9iEJ7Bw+1bjTYjJ#8)uvd*AfarWOuBs^fPL*4Nixwt(vxgG^L2rJdmC+wSxI-fr5& zj3(#=-SF(O`(pQ)M#eKk!Mr=w9ea{|E$ zbyHa*zW;yLnEeYu3=eO#{>_keWUS|jI+0;?F||T<9NUIVN>eg9O_PiO5O;V&NcL)A zER*Ur_D}$=|67!Sj={%=lMm;gH~t6obzZiOFYp39M@q6sQeyyn&7QBv1#^}=eOL97 z${g5@quxoH418ZS&74T*#R708*h=|?sJmvB${yh4m{C)OwiMTN^YsnFq&d zwG_R_zyho4{9+!ou=j4azXR1)yRUZk-vkNZpcY6V20}O^;#s3)w6#dzn$%UT&58(3PaWqSqP?2RE{V_kr_uNtcWsZet&zQrf1v zahDJX#WRUHma?I@vek0MBNY|L8X$(`bc4&@UCZjXDBo?T=p|~Y#O@cIw=z4=DZVcU zWSL_ExO51FFu3SR)REK(3Va8wX%cgTvoVLRkdanUn5op|mhfbg-k1R?7dbg8fgYZ` zTy8H5tB|E;0715zK=&KS#W_6cZ6E9%?(FtnDYXU`7uf9rb@sdCUPyItzgdujEQ1IV zhAi_n98L_3jKG9W=v?L4$t_iH@R}(5b7%=-2_ukzDZpj$dD#xNErfIbzX{3gSox@5Xyxd z9)rCG@B!MPkjlkTlv^TiNC&_YAE30h-}Z?0;^n)Y-B)Ykr0NB%5Yh{8k;n~0wbpqKS}{-{IH~u7v@{B)>O+dy zIqp3LFc!Rj=o}83B_t>5Rb;UmgH_bpnezR)tNval1BLygR0G`ngmFtfqT4Ni>N zV!EDCAXAhkwx^Y*B3rOQm1|# zH=g|1fi$(+|1~4YuYc!Ih9$L^4d%0d{a9{o{@AfJ<>vo2V@WT4_gF^d#P1qQ1|I+H zV_B_8|04$0;v28c^G>FZZJ{h!)7t9mA0hxn=8>UWRc^lCd7o*~f0 z+8m1EOfXE`u(?nTj?CjyfOoB1r)~C^+CVMY=9rxzB&)Ll&`A$anTF`MKduNE#n3nO z@4y-aSVucGsSRo4=GhasmSN2`N5ve95rWz6M*Bgs05mpaPqiA-S-YvwqzF6g7bbeo zYetb>ud65c8kwwkAF|(v-d6)#I7tHO8@Ko7|?jKHaHg-%JzfT*j^T}%=zCh|~g z08>D$zmVFP7{FN4jddJCaL#RP;jh37yS26TjQ@ad);4iQm^qeI_O%VXznXd5g0vPMDS0s*t*xy`zo*=YttXF3J(P)w#bza4z94mppz0QmE0(DGoWn)<@ z7^7yc;e>~tW@o8$cZE|ID~qTjw=$$|Lwqu@Hkn|PX-$)M(sbfCu@{T;^I}k_>k_cIF))SU=UrzzxUTVzrg{k@`mAP7xE&uDU_ZONB%e^Ezobf33Jk4T zTbLYlx(D2H+o#|sJbrty`|4vC8u)sgWC2VX@QSDYoWu4LkKn~vXoS9j!Q}^0c05e< zVuq7Atnq{-ADL%V_uAc~-v03^^3>Pr3!^DoXy%0pVoWaXn_|2er$DB3Nv>kS-zPQ@ z+yqb4m-if`AAkW@E<&9pW5N<3rLi~7(}&@> zk0kc+{=FY#$LMQBugX}mq}mnQ;G=x3C4ZNJK{Tn(Z!|!o2*izn?2vMnd)Oshx+oW} zM}Qy07GmHW>45$v1-(HCn5>Gh^AIV7flenLbI0hq1R)Nt zQ!OST4SdojZ%{yDeoa|~7ayY&I#_grgL{_rLsa*D9=dC3ex2upGls+y)o*x1g0)cF z4RF0@6U$~H{$dDzR>m7K#H382<_c9m-95%T&1QzUxILvsqLda+H_GP)hl7~8osxEz zBmt1@)YS06V~@wVdrfC8q5W8Gg5Ff421ZHA(rwL5@y-{Fp`E!u+|~xU)D|OvX}>x0 z6|7zzHL&>t*A8Qyh&#oDT}6}&P&9#ot)k1(J)t9cNq!lx=Bkv$p{Ecb#07^5NJ&~M zp70oXG$`$#lE3A!)OZB;lEE)HK5&P-I-!7(8>u+)zKE9t^)pd{Mz`_|(f`Q0 zkSI6}PMnj{v}3@6w-sg}q9%am2L)*eW;9}NMRiCpw2Fs{Gg$H)8c)bRnTrn!rvXFB zqGdYG<|?PGckUS8pw3iGdd%m+$okv_2^2!o#%=g8$$u{96fflba=<@cDI_lxI|_O- zurAuJV0ER}cKR9hh*O`5D{nZ-rU^aaX{7V$VFTI`~bs*rx*aIq}}@JcRD&AM=pIOEXcXZr1Y#%**vlE zLV=RlvtK;R?fP>?@}1xkTXCY39Eh(U`4#Ly1(gzkXTMzCctX!d&`-{IIgJ^|Xdlya ztRqkmr$dIoMR&k4JbLUlKV&WYd^e_jh!QOo9v*O0e9x>77!HP`FIV{+f!-t*@T0DVuu4Yr__&`~Xxls5TaEYJ}@}ZBCvrA?5FnLXmMI#bb zz$>{GgcI5p^`hRM-%M0eR08fGLn@D&b@;^D>w>Q>a7? zGop=*rVyrGN+-fp`j-RAq})tY?a+cZbA|$CTH_Iq3pn0DEW@@eHF;Z-kc;7P#7A>H z!r=hzoG;N@1@7t-tCk>w1$tLiWdleDycTcMR1*e_Qp*mMqD(w=1C!}s>uEc@v_CLL zS@R5Zmllr-`1Ys1P8S4*8nuGSLG}XOL*Dg3MOIk$?%F`UGdvoUL{$+J%7ua~3p*5(C^X z4lWc-on;roqjt>-Ia*x6?E*X-PGUhdpEMpHyA1@tL-zPAf02aNGOj)N5VomGR`|eO z|9Kj;hh=LTf9ZBU{bQr;OV>R7G&m7HeTdhsx8o8w?mAf@a^~~3zr$X%!)r0{YqXQJq#3LPhk4Pv8>>~Eh#n7P1Edq474up$t$+xL7^o6p)Cq7@ zqF3Q(JB->mQ(!?m%t|OJcWKBmmWJTf8=(n9=xkgY6Y*4G31U<4v{EYGGHZl14Rm~$ zIlu;>BsE;p2q_&JE#7)L84p(P&fF974`@**mJo-!xERa@MIU8fL@6wkew*ELx+=Wp z1ZheFXDSwD=8{B9$Fx>YgKE!X<;-$NN)GzBfVB%CJ97$z+g>P5_$b(X{J1U2&4@1c zuK;DbUL&EGW^D3lD>adXkwB%w$EGU!*EYpw?MDpXF%@uSyEWN+H=M)(*1uH9js!!65&1aA~fVaV?$`3>oL-;g7DANwI?ZV!> zbSIw1qtztl?x6ZhQF4XmoL4jUiCr};CVngTkV667H=YX=fJ~NO4?*7i3MO(CcGtZt z<$6Q(xt%DFUOp)ov%Eegvbt-=@J)mv)+1?yRr%^*cei_V+S`A1u)q8L(zTg!MphbR zWYsQJ0hmZce=^iiMsON*(r*j!#c__5u1|Rqo($Y#VksNm#6%h6gh&DdS`^jW(cpHyADQM8RykEBTy4>uFxu zg3&bf-Ep;Ydgk|=o6M&AohL9PxJTNlXJ?#F@-X4A^rLMo;DRev!e5D>``qRrlhLOM zX(cm74GBO;$fLS-kkBh>G@qoP`UHd=NK^HSk}_Simwh|%Wl}E|%X^B&)QZKV`DIxZ zi(OyCd@#y@D;UBT?j8U1m+a3XvSg4nMbenZZmiLl%oZW(|MP$vk)9bYjCY4nrEK}B zLYk-~d=}7raem7@T&S{X(bkfP_-MlbMY20wC6Ykna+!~=pjIkMFeh=4@)UVuT^D7H zj1&I-1n7hjZ9!b(5QUz=2{F(BCl$aorDKtt5OPb-a&IRo!!TM)iOG+R?=Q*NeS!KC z3XzX>#s&l2`>yXK!V29R(Nxy}l})iylNIgJ9>kRQ=^XT^M1+ddr{GM&K_lI1$lUM6 zFb{SsE-SPB%rg^B!UM%X*R2O4%3^GO`GxFkr@9RngIs+4Nyrsp#*=bBbu0Kt-rp7( zET#haFRA^1Y_zxj*-5;JfVV`qoE;%>-a!m)POb?IN1`tc^WWhp^rlo|o&sO#T!-AH*ZWHF*g~|J-Z|0zh=k3Nu%SUKHmL$@^9N20Y zJ)k$iY3v_nW)N;wS(D9$1uJ>n*&y|Y)6IBR{T0AC`G|y;>mE-2H9ec;s(l>1Yp{}O zQ*ilUvsleUEGDuP{|C?|@ls4k!m-1QO2x8B<6{Iyy3GbCuk=p1pOy>dn;$8ZZz@8W zrx`fc{Ai#wBIT0n6m#khjn@bs94T-`n( zs^{Q{swR#b5!Sh!k4OLGiAa1Fd1Jql1zt8#+=b2u6Pk`V&I3=cSFpg?hVU>b(v*MC z&?~pQ^Tjh>O4Sqj}5Mn8CrO;YbQd}g>nFh#@fKp#FV>L~}jr`IO zEFGP!z>V-;teU|IA`2zgBF)z6rx21Toy55ehDY7MDj#wCkvZ&(Z%n2_+oFW!Cf76q7RCVV@YFo#3xG2KL^+$3R02TZ`?!(4es8*5+dJ|OReJ^-%S&$yLGn6hA5R1Dt^E(rF3P;-7HjbY-ZppTDul~vSqZZ3=+X{>m?Ai zM<oQj*DRi$^U#74dk2oFn1{nA~i8Q-JJs z`>WoE`Pt6$%j`n|$tt8j;Bf~MV@hRlN@dLw|82O*zREsi#|T46XPHmgNB<}L-=Ixq zsFR&jJ_l*q+-LzAJDP8!DTZiDr(r=b2TH={^KkRY9ukiP5i!tyN<=jhY*68r%!OO# zt_9P@rq6z1p%AQntka@05)Ji58M?Z=FaNy#3KX#^*f{bOHWK4e#xtY2>E06g0-0rq zwyGf!B^VvSKa5dwF`F)~Odd{}kFVypi8>nmt1xsFhsT<#hTqwfTSGM688Ytey6SpU zUHv5AXf?AIC3*vO#gaEmn@%%XjCq42S(?*)A&%Y18dV}}qy)ffF9b<2Sx9u`kgVag zh0bRhyRBAwlE1TqKn_WCrZwI*{E7C$w2Ak`%O&y4g=HJ%R=7*SZRVQ=)?z&FY%G}o zOwC8opM~*kc&}*MSeWie`JSS3UYxtlmR!0scIX80*e#x6ae=|>fUTFYy8bG5?3*ef z6oSJ5Ng}c*JRqQ}@i3(I!%)n16cT;Dw{Fa)z;SpC<8ZTN9B%G44)g2jFEk9{Ia$-1 zckn_o5aJuMb1*tifEuIx`1_~5Rz|G(NASDL1X-3En z%HLaoL|3;Te)uxlG$@ydM6?V*NDWo|iGB-=ng*-V_z9t`Qb+r@mxIrSbRwti@13OZi{hMcAPb>+oaBWOOmlgCQPi>(>6$qXElhVHbCjrZdZoI=}VDY56MN4(OyF(Ej}keEh$WK_(h(G(}`*a9BH#8T-9&dPjh4tQcFI2eOz~N!UW4Vad^( zrbj+aX9?3#@Zr9qqFf6jb`~sKpo;&2X_)h50D@;aiyw^f(9#V$i7_`(0NaW>d&YCj zW|QhLsE#&2b$3Y2A0#$q*?|MOn1sZyxGfp`r#5+lUC>lHsvjhgWN)2`^@#vdUz^{xxc3RSrk+^AJ+ucg(xyWK&g`hj?%(Y{$hF)gh?k})Fp_P zq)7HLFGz3L@KMBEL>As_<0G&O#XHKTX-u@5Hn)#bW+Jegy`@i0Dg(3Xd1>&x3iE72 z_iI4^*lx9Gpev7wSZWhxskJU}Q(e-t8ZCQ_e?+2>ScX2RZ(7Q#I5TA#Ia2|8iWUA%&dV9h}HGWf2F4iNx^j5gA6ZezWmdeFtK<*AQ{I2W~zVU@H0# zolf*Y^TZIEfPiaif1C|-%KEZ&7rboT$q7^E!Laf`281FP{V4I!ip|GQEbNd1Y0J?? z%c3KeCWKS7(HOn^3kt)ZbDtAmkC7wk|ho4oBk zhpH)tYqC5|bZ;Qtwm?h(V4>%c=f>coh+s+MnBXvhBSf@K(M#sh!2@R+vR~W^ zmfQ(ygGmWX{CYv@D|niNrUtwdi&r#%2yPO(C!q&Kb7-3I|fif8@1s6XikQ3viV~Uzp>iK3qz*5X&irXasb@9uLBc zcSq&4eUAtg1xpi)Uyw)zzAcEIl5z8BUHU+l83unE?M!6Yk*Js=*lyRbC8rE3jYO5L#at&)Hs7sfDhjc_HW2WOl|`~ZLR0U%1s1y3my0K<9& zc$rU8n+RfqSt*^8Z;?Xhf@hWZE7X-}r?p+TqPetLe^i?So$lFtw?Z*Fi5WJMV3;fl z&s51Y3D|@Wh6)>Q+7}ZZAOJoff;o|@pIky(yKiGypkX+X7*>vAHWhIN#WNfxvw5q~ z)*)ko44CK4_>DmTyoey&P$?b6vPY%X3xMTS(3CQ;M%=U$c?eNB)MZI{LzT)TF2;mZ z2)fPno?utxusX2*a}_EXRmb#UgottuiJZZ|2>2p6btuVxMi7ju=bs?f3>nhYO$)hB zmd($-DcdC@Rmhx=4tPzWz<2N{62sUD8iplNj9_h?IBxZ;pDsSKn7w83giY z>`!i7KuIZZfRzpDy+=>^sN$T9X%c%i+;bZQhmf!zHIS6Qb+2HL*v6L)!J!jYL*kQ( zf&f;9ir>Yayc#@y`1YPz*zB)N3%e7RCCs^^v-+F|v z&MxP4Ar6?Tv{nZ}!&%n2OdxB-^M81De0o8tR6ixQd^qJt)9F=+P4nBsN|q{M?_L%W z44T`FkYbty>sGniKn4Uc1d3-#+<~j|$y%n&cCBNKrP(prxozAezJLQ3!@xxP(3Okl zy+*?|A%;q9Qtj}dba+e|)kW@iq;pOo-|ILmGvNb6nAeDj!==f;CwCIMM%b0_nP6^{ z+SF^e7?F%kb;ck)lQsOB#!ysy$AT%p>E}FZ%9LCrCnM@OQZvoxo^znY^NO=uq4X#5 z&|N!nC+@IK>Xmu@1Vhf}KuR;g(2ZLNh*uNdB4k2dl;SMn7&ZBZfMtzpa)<~`*Hg3- z;Q{dHM(Wf%(49G)$9n|6+JvtL_1|r!&VVs~nK+mYDkWU^C{??a`%d9Ehcq0JWJCV9AK3W*IfI1 z7|glEs(?2to4e09+#vsHu1V6YnYbq0O#B(X-$;GX6Q|-iIF|%^;M>_;I?UuiYJLgJ zs`=#_T*QF%@E0{9A zkkNT@12w{s`T{P8MV^g7tg2rXO-+mxaJ!J|zWFo_ptpn=Q{;vBEJL*8YzF8>dNnud zz7rwlMVfX)-~953*4LjNto@lWF2admRd84`TkC$J*(^lBKJ*#B-jLNffK)r&vpF$5 zdU6q6rf`Fs8JzjJ5>A|v2;0;svvBLy>Q%GlCe6>2mLxgJZ=AHjB4ktdOSFi#9(zHe zLk?rLj&J`2gynXS5K~NQ=Nztnno8X~#&k#$F2h z<)qBlHgxt2$oYov-NXr+vV~F+E|58P7d*mEBSe%)%rL-MBIr1n5{B_$rxL)$8+R`7 zL%7V%R(b1|-Hou=d(WA6p#cOi(l(cvJ z3Y&NHW-BS2q)Z#@$aLeaQ|jiHliOtn;0z$%1=?Qn7gA!ngS#Q^1w#7Yiw=#Q)d_+GxS3) zc&EHWgKib(Xm%u=z372Z+o!3}t*!O=?Pw}P9)WHz|^Ns1{2h=GGskAq^Gn&U2c z3Y-3-E;f)Mf*DE1$!;e+GnXU%+hR&vk>AQq=tD2%@%F0`xW=kps zutK=jEf%myBK{x|ODGXO?QU=P4*RXP`}K8qXSap@YJTd}_Pw1xte_`u1vNkYrg!wR zm4;=RDE!F#0lo@Wg=IQdIOI%dT6YBNB z{y=;3j8yTuvsbVlCR5Jc@O!x7{f}LlB5R+n*XgOE%#mav;P)wNFr>gVVfj2o!(v~0 zV9Svhz4Pg&k!wN~q>CG`z*SPp;?*KO3i(Z&Uwodf-wdCvucyEJUHTdRaejV|orul~ zrAVteEH<9t9gowhTy|aNDTnQHc=T?+hrbloVr~kIMj}1IoqFXFF?kDicSncBJ z)3B#d?P*z0w>I%XaG0>i5vSg_7}34cJMP`^`n?2K=_)xOL1aC1>maTO55qIe^Q+M<7l()Iw)`-WkydM$J#+I; zVjbraw++EUxqKqL4ay$4`0+iS?WO@~_VJi%sRKi7TQ^;xP2lkhU1HL_M+6Oo+A=eZ zotH0c^+rO8jI-NBOUViw;uzFzj3_G_RXw^Mj<=*pd^ukXp@v|_V$KwcZyfjEz54!c zHt*B?W$H+Li#&o((Qxxx zUQub9gcJb4E@Vz}-Ts}kRBUwFT?-_JSDwTZ_(tM9l7;WtIZp^p&Pn`qW3uC`}+usP_WY2>wlc`P-VFs*^Y9tKr^vQ;kg4 zfDtx17);}eEuF&oi}gnk_Ja+TLKH}3c>Xkn8x(C46_iAbZA~ZHAIVOHVc~R+Ip)76 z9}`{HsEDnQU|%nxWOPv%IpGlADdfN9D3OHXbIlLH$Oe-sbBgv02GIpP!u6qC*A*DZ zN+8!}NgEbEpTlLsQMhAjSC5*Myo?Yj9WdaCq*l@O!BKu}VCn6C)H2=jZ`&BjLBSC5iW(q=*Qj=P(!MrNOgk zqAlhPAcCp-a=Pi_(y-Ioq43+llLlJq6T$(Xb2SmcS4K>sO9n3>6r``e+M(Rko!wsb zi^J|wf2X^9`nG%Y>h7zK4_^DW7`WtD8}CI<-5pj7c-vxvVbwoNnkg?HRumosb>M{6 zP>Ky8goH!!>3LR)DV-S716$%mavHz~Q^5*pRHvryBlWmitI)vx4VDq$i=$M-T?B;n z6$0w$xy8!hx{-&8$HDm8yTBXy;r5!)vKH#4v39J5gwYHfZa_Y($wlWm9nLui5RtfY zlCMqA&rQ0gJMgg-j7K*@&(HFSdmmiVJk$!|aoQ$y=}b9>(dNNf;p$$v_?eM=pNu=- zx?mC&o5cr!#R6I0bU81Wz{pMb5D90!)DD8m=UB7`(|?(5xLU-=6NSt^1~k2_JiN*S zXOhl__2sBT(dcyq=9`Yle|OFkm2jFT+*H;rW~(rzAzJN_RUA1pM0tQxb5t(~OKf^N z-mr>km1{g*#xwPu zPPf)^a5|lijJerJ<*@a_e%zep?gN;$W09I!sIEi!1Ea|0bFvcKnoxfR-fo3uC^>$V z8tXCYZhKiKl8B@krp0L~k`}8KWdQxGa6DmUncRA$$vLMm(DNBY;U1uS3YtowYM@j8 zbCz&!g55%%A=?l)#L4-6TYXdr&KlhzS1#2g5sPoNPgfH zuAQI;&WJ7Vmdn!Ecp=(+e=LJc22Gs{Z;F0~Von%&aQ9)3+0qvNCj(wpoKC&c#6?GfaQ%~1h}_KU>Oq8WOFh4 zr_^rZJt55<1+owaFWSJ=pTZQ%m2&Uo*9tShAT`lIV3xMQ*VMMrVr{0RI$~DV6KfWp z;E3j_1z;_+FU3T#jutbU^?G0;P+Q*xEuG_Cv8BnEU0GkIlb|+&`l~?chD_&5$aN3C zQ?pHT9MBC-feFUrCDI5mm6`f}z=})^-vwn3;R#9{EyflBVdr_R_7^b1KE2vPar9QR4))$v7rL`6%o8S9W+GxTYotzFi^SP zf9)QM`i04wi@O*=>BMNFjD~969|I!g5@8|z`p=pRQ0ozEq=K_Rv+tmTKAk~EnRH6I*~N?;7dJvV zpkma^ZCf`pSo2=9Sp+4i!sA5Jzb&Nmxsbg-9g{n~p*Dgc)8nLNho~ zBLQGB@SRYgE;M(yPq+KuA3BAjaXveJebhkvl3#_bUOOB0X1_C5+k6w7qkY*z1g?|T zRTp>bdbgM?ZgBJ{c;nXE%^G@WXxEi5STjvXV8JVW>(1=yH9LT?;rfwvk8w|gPa59o zwQO~{6P{bFtj}T+6|GIAXl+_sv{tgkd|dAnWMaJntQW(F+`^$!7>P0wt1Alyxaa759La>XE5io4|kUhQ#6wqDx6TQ2`3LWRmHp$ z5c7~JpXH;9jtN^PIgM{QWzBcZXy$DnB10MHX(~sou&Zqf??DTOm?&%=($Ht`%Qyz* zO8I!EplRhSq8KITpUAL?Q@6=n4%HIrNpya+mc=ud)Mt}ou8FY%$WwKn0I=|hNS!7O zL)(mS=qN6dt69Dl;}J?BD*ljjrAAy-T%CEE;R@Z3OO7c<+pj=R)?Z@DUBcC1Egrye z(U@LmWkPlAqC9U6>C)6u=c(A8>O9gPo4Tdt8M^MH@ztEYL(2WCgQ6}YTd~|8z==74 zxsq4z{kR1)VQJv6MAtM~2qQ{6c7rx`as^5mG?9=2351X{XE1N^p;j)#=zy;Q(+F!Y zIy?KX503UIf2#ZP;9Y+OSO;9ep|ffkPN(6&5HB$xayW`@OU^T*2P`$Js}8=oPw|r+ zOG;bxPXA7anL-PK(&(5%nN_413g}smwN}eO=cqO;Y9CCM6T(wioHCyYM|oiB2^8~L zXKP(t1|BE8v7X-M*$f?>)3b8w7W^Qe4AgXIp0nE6S@^<51hJ`;(xmak;rU8Y$+{qt zNTwpFzKm~=o6}udNRjI(-skztXvD6H91Ef(k;_Zyto>O6gtZWPGChqTPZHTnFbiss z7Yy9@Ro;myNXpI1s&FkK7b-z=F$jk5NEz=*s48i#8%Es)=mN|!JjJo`KL~=9Ui*E3 z!^QbY%YWjVW#QYq&7)s-U+s0@>};F68{_Pv7;twRI!OXx4{z@6zuM{U@Ar<6(=?vi z5HRfJ*Q)LV6b=gTA|Nt+6nK}MSkZoxI~-S>YjAYhna ze)GAinbA=AO3E?6E7mHkL(oB%Fd_jG$|=T^qMX~z-)weP%yGlBuEuMWR-hjcNv{Nw z8UWJJ*;R)=te%WmlE7#em($W2Y;VcAm-vt%rq!5D97qW?Oh`$ssd*fWi)zFV%H^C& zH0DJR{nF>u2I}q=s)Oj)T{p2z@&bwP#f1WA*Xc2ONb%llR&SLkU&4L#0;cpSUYyTJ zGvicDKJi>b>6UeurNj5h!b} zs9%{b^!kAs6LPvo3=(Ny1!>|%GWnQ1v;q6+{(v1QGPRTb5k#bcQ!wz3;&f0lA$)Ym z|AX(s99r84@Amu4-=@Ak*YX$f&ZzsnNTpk^dat|hcKfIO?#o>+C&nGCoS~|3FRh8o zNv-OBN#bLxzLUsL`AHTG zS9W3skp<#k%8H-LHO~^y2^-vbf$35mW2|lQ^80=dhzfzD6g(0wJJwZ|Y)PefFzO^# zR(Ooj*h}hyoU~HV{txLyXr&5pI3nm|9EY#zPKG`NH*1&P$~~0$ncNrU!Ib{gfTLE& z$&kFrFmMK>jfvVNK^)kiG3vLOaf=XpqY7 z!vk7Q!gce9!Svew|8_dhTWws^`X>IBcP2~7S`)pPy|YpLWhWq`mI?7%4f_TF=s!)? zZ_eG1-W1JZ{Y~lm&Bi+377vmWyfveQJmTjZH^6NM`+L}b=kGUt6THn_KO_B}YYGVi1HtdwP z)4+GaYTk;XtzHGpVsOiJW@5ZTTxn}lacx(R99-K3Z7keT6%a<7F7vCfUUuqki4RUy zo9o17lcj+voDqpospBFqQOp;aV9sWFx_VcOIlb}1R{|E?`1;2P%7y#uG?bN0BE5t> z`N!gIorJYBz+I9>$Zr;NW^>EymjxdE9T+*PdvNnb;8F=UC;%j}!Uk z>~}wpAyOI3w@~Np0O~&&0kt8yqZN=Cyjp$(G2~*div@;4$}I$p*#1OW|9IhKtf%fI z2_K39XaZFD!kyJFFxknB{+U$Y{wpUy_TO-QR3342{}$s;`{< zv{%N5gT$hzBN_~jrHL@y5o94KqphOJR=lWr>7D+{$u=8^gp#2R6<9pt@}YY*nNUdB zk(B|N^8H34shxaLM^sH(wSz^l`pW?Q9&_LBp#R?u2KgjcORe25l-YFWes_1JGCczbEY>&|A>jozVb39M zhJujFydKjql-KvXgxH;P3FChwRM{a&`s++C-!?$CTLLzaHqQ7_qtBiJ?-rs_P<|!PG=JdRdbQg za2;3A;*a$q*LQ7qXK$xpCt~p2;w~W(1^69_IapX$=lNJ|UnuR<{1jWGhCiRUpH`rW zM%H7XA>GHHtm+X@Iw)mGca7Y|w5OvTEt)oFs9S(W7_t>x+GqF0;jX&j`)>E(;Om#Y zw>$f2-#`@JaRECo(CL0fl-gc)O}H5Y4T zelfPZt!CTd83$FMJ=}kw2vo)4~6h+w_OQb?l<8dqxp9at%I|9)R8W2UtIiLNleXU*94Um%MadKYiNyZX@ z?yj!uzO2306G`g$=>o;O!5<7Sv+jSlLx7@LaRzK!01bD`ejdb(=7G#WRVDr61sjRp zf$77XDUy-mJOywu)(^5}u&<)la3CvH z9D&%}*wC8jO=N~(^{-20alk?+Vj!*79TrA=g(F*9{&iN&Pw^#Af!`XtnBk4HBF^q1 zI%-J8c=&D*x|M4%AqV#nP$_P67GTJihg7!E+Fg=_O_ zjoWvTU+VI$1N{x>LTe!rA*)F-RZ#ZF{E9X2bGoWAbhCyoiy!_Oo=Po~8U;OwF+E(% z7xWVYE}HXnq4kRpdE(&O>qk^SsKs(@b|#jUe-{CkK*0yz#+#W~^+JW*F2;4pF;CN_ zWy!UZG-JxjzOW5h$t5-;n% zLx&BFG-Rur&hd`)fF*eWj)QW;wYJ;wufo>ew_>AXkq4LPR=+d8U|^ ztDos^d?wd2DA5GKNNW zFph{pCj(2)ahU%*HEIK++rg0w85PTwJ16cVJVQn-rx@U(65&uzc`XZOh)%R8W?j+| zYn75jfII3(I?|6^GtRK;e6Jx6glLzTrUT~oUk~>W9B`@s#qTY}WB3bTjURVk7bE|F zy>Ixx*&6-o!f!F>kM%>k@LE4m@=10yz}{_ALib5uN#@Eq0^R%%qq8w=^e&!RHLIY~ zk${FJA&TYefSc>nLT&L zR&25n0*GjNOsV|` zKaeO^50cH^ic~!~+gD0?3KO`*)-snz4 zOd)iYu0=#K5iy)*0tPJ32$*z&kfU_9 z^szH#`w-?lgL;^I zq{KI`dRK z^~_LUrQ^tkA+Wu$NY7vQPx>xI^e3W#zOpqf6AFl6m(Hr2XO9dmQ6eI5FGT}TM^@qc zt(4bTKe~)_cz@jZ$}t-UBNt3!SXmi40`UGRvE|cydGl-Lv~DARrqVrs2)C1sH+jZG z5wm#x5W1aD+Ig>=g!Cb5&}mYsbWh|CsN^Revo%MmximVB(a32n>$QsZJ zmn6qFvo4`Wf9Ztn553Lyck3w%!>vYPz)Nkco@4)S;BNrEzP)vNdk{_vQ5CsTzmE5g z_6~OUGR!L&ol;w0?{~6cwV2MkOBFEk5u~=TJibvGuUE&F@g{%^93og0nwvsGyhgc@ z!l6Z!LyGWhh6y+$6(zGslUc~KUBoMdHw1bv2x{W6W)|XbLukDTfzMxqCYawBjI*HNdf+K?e9Hfrdj%$#t+QJH41tolbkSxWnCgr zEs6`|yZ3vdZ-IBBDO?8x5q`(1fRR*o5yU=4!a84NC*SR5Cr3L^_aQ8_^E`X@>R=cC zx}3!WBX7T*!NcnAfVD)}4*ZeqR&9-`udn1w^dYz!%P^Z;l2 z-#medhsmREzHFS73vF~nuhhIF2Hk^>H~b4WOqh-R2q1txXX41IYIyu)D=Bl5A}^8l z3eKYxC3c)8l4mcA*@W1_=-?oOiK}hFc;FZ>o3#L)KpH-ca0P5l%J*V% z25s)fXq@A&)m-gtO%d($zV8m)T+G>-6!erxV%Q*w$GlXf(O1r5^oB@C1?dqrPjh`PiiQ_+%-=4hu z=#ne2kVezb=At-arU+lvL46cjnVmjfWeK@?)8ij+ZZ=xg%qz8D+QPn1L3wnjQ6^<0 zWdmP+sZcN^%=yZWAAZRYBupk_5K{BxTKpP94SXBm)=!lJ0=7paqq_%(Cvn6FhoYTm z%V=&f!`5-u*~8P5GJJ;4NoLPcIH316beg;+stWc#Mivm8;H^kcw-rp$|}d2(I~y; z&rUVSpFWkT*KLc)=xUVm?Gt-P`otiLc#+TE;I}y6BCM1tg2LX@@M~XYC11?04LH>E z>&wD*n9kXI`;{h?n1Kv5$?Xd#djBfSBEcnTjJtUuJM{r@it*NR_)?2fWHxG zR{4)(!Y|Yr+ueEo{P5Mu>C>H)o%ox*zwhn7LRcME&PCq=OMdzZRBBMRXW17aX%qj1 zl*yVcFswF*^n&^_!IWfulTd86By@|%H^idA_;b1)CDUGhOkEf(;MUbEY^gT#-Y#5p zM$GPNIYz9x@=}pp5*I$RuNd|m*`2@(MqjxyVv0s90cV74By6gbvlu{U9&M&xyud}O zl42k=s>bA``3xw60s$+OaK*qI1u7Po-obbavBLZU9nlJ+m9>A1ArajN#`&02Q*dIc zT1secgn0=oGKhU-i0nr3Uvs#TiDh&d=%wo-pFvt@RtS(9b#BX{T0?~YWYYp0f?Vt@ zT?;O&?+ug<2laENLSJSmVs&v1L4yyu%}tK= zz&KU2q&U>I6oXMGqHq*6#LXL)$qa%XhDY7Toya^V08~J$zg4ceQnaa~ z=+_F+jECFf1J5cXEMR5~S`cso6FDsHci{|*W{BY+5qTD|EdX@rx|sTjiTZp4Fuq2U z@4UL=r`gv=f4zb|VG*c5#oA@*T2W%c+oS>s5%v9}%#gY(i@pDLb0fR(U1hvkQP}`b zhB2(SfL47(_JN55|DIkb@~c z|23RQoraTZh)mdRTMrw(&Oi%7u_D80;<2!Gig>UfcXbgF_6r!JNsb}Q$HFwo&WKAI znKX?<-?Zm4tWnY5x+vIUH?#u`3>6d(+`t9yoO!w}8qwiu+{!H7XR$?m6kh9OsN(yI ztU&uA8JV{xPwc;g0(kVRlPN*fNk+LN+E3@zTzkZB+4(#^KEg(Z;<~JNP7S^!hgO>= zxOzd`&@XTZ>I>>6!36VLyR;d2L5~HA@2YMxWY|sA0vr8yV~M)JfEd%XSzg!YAr^0h(Kp z_KL#?^pmIK4=ugEL6I_)M*9W&RKy+n7|0CszMr7=PUX9+zs2ayWRF|kzX-d zu62t}fpYJ;O}k*_EZ?RBrtbfxtvU%ZBp!8%2Frh_T&Z|y9lorSjlD?@?!2tW_M#sX zk>x8_YYE$sMrhI!4T5&r0T*c#&^|C+)N^ktr`)c62I8P*O+7?Kxk+8%_|h7{NVae^ zNBHqbRS64Yv|NhS2*TWAW8N8!1Bief{|3ZQp6I;!TT`Jy8lQ(BQ<02sA8ITMnG|Q6 zB!`Zaq>!O5>x(`?RnRSk1^HRsE~(_0pW-Dn{f8V;H($Zfog^K!#1j;q2Hh!fkF08z zM+x1k45{sK_Wf~GF(g$&eHQihbEAYRmDXj1Odwo1!Zp_Z&5M2_O@oRg2u;`=XlmLc6sLH`WkoAiP=5sG;4W4M#7r73|rT z+z{@+B&>DQX1^q?2LtRvILZXD>qSW~mf~w#S;k!CL&G<-Y68)YK@hwnmCCQ6%&ixg z1cUSr+n=K>hQf`eI7^}vNE2YWw2 zEyt;U@Vj^K5V*m5q9;!dpUaO9PxhjJ04-7S&(oa~6d>)pWs;}z`Kyy>4^MZ$+uQw~ zKjR9t)9-eUo*KJUK0ZEtc4FvCZ%JlmidrJZx~_K^dMdK2%yx6>J*KQEMw+7>lftXn zW`H|?>D%0*=UjWwE$NM{*&DEw^Ql`*)7FZ0*IzDKtJ~%jl^aQp%G)CdnjlroC9%WV zBF5CqRMH6@m(_5K*fVY3QDWQ}cQuT-fpbVAo%FsdNL!Pc4W0w#CA>B2NXOAuNxdy+ za{{|T%V3jWmBG2;*F(hjVw&@1xoH~q3h{Bc_rc1*ToU5zq%SEQvm43WSq3}eJjghVOTO12!*qH_o$ye ze}+8+jifHBoG^!7t3s)8y2?}H^1nLvS^1$7J$Be-cm$v?a-&gayHGZw-J|rA(5K-y z&CinVHy^ijfAkje%4i^#rgQ+aKe%6bjjSau3eQ9Di+qWr<92Z zV#&6R+~YasBkHE@i_faOb2uz#{u~=mig&EGTumS*ci|gm1F-<}PeAZ{F=ORIC?k{A<}66;2Z^gh1KDpKN1UPQ7g0btm)T2NZp~*0 z>lp13or=T7j1Wrpy#N;o&((<^%*%$cI;~bS;<}hjaAiM&Wpx$FMw`%@Kf?f^=WLZL zn$}|}fPyBgXN?oc@6wXigW2UB1LD_0bKngV*BEz16x>0v+%I7fc})rwl44kY`}Hq& z2$iPwlw8gk4kGl2i#bX+1U@$Ej6fEhbzT><*TrX*7iKyCWe4q$NGM_6t@nKiE zNM^TCVEy!uzyAzGPXw)AO#N_7VY{nPzFUtqE{UvVWT4^GxK5{bQZL2N=;7-hRC74c zQ3z7AtT3(nK`)WBu|xwxnM2az!WE8-7^c5N1+vD0M)VcZ#f@&L6T*}>;smnr_*gMD zV5*XbuSR1VM!g+n7s441E3&6tF9gF2tDh5@VLOkv@XUZFXu7ahNWrK1TmwH+N}1Gf zcN1;Ro~W^hCpwC2h(W=jdwyv-iEySb+MCn_1?{0O{^HB z8@pJ3l)I>N+s?*j$Ch)P>)nE?5CGZ?Y)Nn@2b6<7Vq3(?R$g2bBfz-8@~8diJqEHajKj6(yH8x(lAh>)8+L;z;)kKW%9!9pSXae#UuC^ot1p0qX=R z;*je}s1xY1aJJyy$;1l&$)Ulm124{MSdvUblLiNPnGn(?nJDJ86$1CUTlW4KgH!UX zG=hlOZo$uRxQxmeFvEuDf@E7;jk(vw_jvL^!GQ?R6VGA>^t8T53rc6k1EAJv!-=Qb zVaI008<_r9B#buqNPRE(P3jlvt z_$>>Nckr^G)n>0|RofsJJq40%ZiuvP@pmYePu*Rb$FZ2Ze}6@YkiF zfH+rjvWRMAxg=9cO8{Yh&f`WfX|%yEV0yUpFj6Zl`Z;27gntTp$ zu-Hm%?bwD};$pWX*&C8rU&1qH**Rg?zbJpPb)(B5gpE8dL-TCKk}?YrsWYZ#nmajR z4BkwED~vZJXZ%E(A{b4jr*W2@t&E|S7s1>u@2X~#a$^ySFu#QXA>Y&51JoXlGmT3u ze(H-g;FQc)P@*k`R4N8}5{nF)odz=DL6Yh7-NP3z_D^~({Lp3}P0ns_-Io*b^PT2$ zbf!?ECk9d}gajD`*R!1oOibLPI5!Lsen)AX9=1}6Di@p-^IK#GAF{T%>?HFgh+SgY z5hWS3kbHz)R>gAI{Zm3c$ zYuA~wE!hb?J~&W*1H|)Fb{2HkV8B}DmHz<`Dw2blY2>dWGHN}C%nXu%NGp&POu{AI zCX`XJ?~(*?NjWEH`ip8G+d z>sv&VVe1BM>3F{gvKWlHXgY5l(E5F{+liO1v#TS6 zRSFnb!R7K@`nbW?@D!qASxChZ+B0m#NC1%;;%7WZ!t_R5k=bV>{j^1GVp>jui;YQc zNa_`Btbs9Gl^G~xo!a)k-H}O^j=Yj^F*5=7N9c}J#Z8^Pa|m{bj9};zjj8gZ^<|)o zT<2*gn4W}!AagBr7#B#8dYCvL;`AFJ0zd{1`N!XUMur0OO{918+0sC(2 zoTvkXL?fKps%2njA6@DKvB=7`f}n(*Uia_6{-_+QZBNL9w-!YN^$m^7(}5|^5P2v3 zg*+~G$nNmZI`qHrKU$sZr#|xoMxMpGThX1gHUI-8Q$XiRC}s$;QJ9Vn>?*S`%sb4h z3gRfUc?8PW(_ao~?|VWl5sr&>sxi~`A=FP%gVR`roj}wpG>!UB3%)5#XpcH_)97C2 zKKbHZIVnj)G@-JxI);h)8k*SK8-a{)N#El-huoK3pAoL$3 z$JUy#g<@F@djbIl0jAg8NeF+0JIlS;kbz}ONe8y6aR`FJW9aD|BCZnl2Q9FW`zD$y z<=oJxC!l(K=`7M^QSvGSh||LRC18;SB{Ye8d@&zCWD)}l7O|aAj}`fn6?hT8u_YPj ze7v7B6zI}eGgJm4r5y5{ET$`AvGA}4HR6+d|&;)7tq?cu%YeohoR{qY1n+Qdz_&^+KHfJ&ml^Uy=ckK1pX*oHO9urun8r0BQR zlRE2G3P5X)M6cg615OX0Jv-hzNp>Lw#XwLYpUk{>evM8pwFxRG?PkoeL6|6(E(yFR z>U4*Tl~S43wIC_^y05k2B1qZX{luTa6uD3zwQx`X0-iLCq!|)z(Sz8Zyi>%gxUh>w zB^T*-$Nhj&T?BtgO<}ldjQUs{D;9GEi@jijn>0NTwaVburt(%cG8Zu?HD}ARO)i}Y zG!0xb4c0T0F^{@g^5Ai8qWC5`lm_xn#Np-I@ZnINTz;{l^?s@u*zAumpE$&YYkD}# zYh>x1RMlm4BH9fq{S5F+Er<-{A*iNH1jY!6PDUJ{|E_ZHZ(y3lZ$wlr7^A1Sz~_2e zO|LI-Qni4ncH$>F^mc2pz*i=eW>ATVtnLASW;G-rk^uWbF-1Kxxq(UZGm3mt%!@D` z1I(E$b3!dN;cyw2DZ&F9{oT{a5o!~;E)f)moIj07F*H9rIK)bmCVO}DC2R1A)vn|^39JUFXzSbQ~)hcZ^j zSp6Ci8oK3ZMJG)FLv_xjgDv%o{3Hz!YG_5qkoqtlzqD($psD@+ zlFk#}w(MZ z@Ks*x^drls;n5SNyA@Q!-2h!hLS}gbB(ANH4nWku6+kpNEOfxxg+xPW37mMjD1fj= z9%r2s^X}BaTx(#M6qdk-o4XO0d9K{7Vx9e23_u z;E>uhz@Ec>GA1QUjutqk(K2>&;3qOuR>z5=j`G7)2MQiQj3ln**Rg_=to2rhMHT!| z&!@=erY5wVDyi>oRpjO^I5OV&KyOR9_`Nic88U5y4H+;U0PlqnR3x(D$qxV?1k{%s z=d)J87w!>cl=_FjUpDWnh^}Vw0wa-IVZsPQb=!&AB~8X4(OXTKi4+-Oy;+w}l3)m? zuSvfE8bSF1v{k%8^a?o?qach;>)Y@RTk6?>@_^90tRP2%jaci^9EL~{l?FmG<@vM< zfh<}7nDvzB8p6+(l}O1_22P3+iI@=U8r^M9PNE`UG6)nv6jQIl1P29KifIuHKCqkP zXfa@xf=Wl4h{g>Vrxnxu!P)Yr#1VB?kTr^<4VOp7UKdZwy7vFe^^_2Zp-{NH8S zF^9@hmNX^g1kE=!kQDjgKp=cQa2Y#!Ec}#5JCBYEeeMS@LoRz~j z*G;s$Rp)k55Vi@<$P#eIoil^aXn|ljgKTJlVDuAFnl>DUYb)5OO$a%`W2^*YxCnre z{bm4$3jmDl69A(HfPt1wzVa;N71@}V5o!vKWQq0%`dpe&B$XI$2o)ZTJHWg+RZI<` z=3jcS5v3QI?*J3v4Q2)AEf~sv*I5xW6}w{=X!xoOc$_)PE=!DigU2?wCX#d6)U_V-nFBDc0W>QC)0Dz_fwCZy5c$#(rybO|f z)2=65SS;~evxqYBuf3t8er%LZe~DD^RK6NvC%BcHZlxI_ql=S$w>i|zwZicRHc>fF z016#>8;dAXcf+90fIlJPe2y5YxqP?DA1al=bZel{O>e;b)pD{*349(4g$td8pWO%5 z94`2ZOn1u=3S6aDStx3v5|}E?L^XNW{GDbatt-{WDusbo{kE;4zC)(5K(!^^Yh|NA>rMq(NR^O`Vtgx;r-(*U z2g}8SCE;B*n{c>P4i{f&R*+Svj5R``JOdL6IOM9UsTCH`XiA6@w&hP+`rk@TKpqOZ zy|(?{54(MvOPElr!%@#cK;|ffwGvH|pmrlSgu~M!19<*}KR`5eFcm@pxN#eWXC*0s z5Ti*PHr}Kh8+q?@t589sh<>v#QDm8OLIfu#aE{|ATk(zu|bWlk&*GYIneb9C- z>@-M`{+zydEuo6#*CYXpWOv}U;hw3zf!XtP4@g&P-%N_1Hhwmt8ToMYXX4=>f!#Bv z0)qCVF~V`HSi2bgdcNVRE8fjzsyNjTwZ2tzjVoF}mTp7ltKI*AFv11l@HlD%$_uEQ zj%y!F0?V0@$uLwAst;TP`+rs0l#K4eLGvX zAI>1eg3pmr!_ z)aL~QNYhC_#fZ?gHrXY139mh1@@$Lyvz=)9IHO(L1-UUpCm)PD{Z_6|Sc$W1a*O9C3gf~oE6Sygq~SBTiOH3Ng=O)7!vj@wOo$Svkmp< z8#Jf&B;@ge>%Z8v6eYBwTyiCfwS*{55N;u_NtI-CI)mxVLe|hmaY___&IiMeJR z$ZqQ0{MYU;y{%N^0uhnm*IhQH%m8na70N&vd<;$7E#Ch%N#!RUqY(O(#bt|H zG?K|eC)XrqR|nou;x;l*c0w)hzg^qJaXF-0@O@d8PHxnGmnMDShBb#M(&iKvX_vn{_n{47~) z<)UwZ+)hNE!iB?oN&obO@D0Lv_*%Lqifc_3`UB%Urvu=a!sig9E-^16vx{uch)oko zVu#8c+_C{XVA2BQ0vwwBnYhvUtT4o%h>u*#iWU%+Mk~kQG&6(KT!nIIO`UNLqMT>J zZg0fWPOO>?qOcghCKKqq$VVs`GD$Q+EI3K@gSu;*y=AbAQ8`NJOxma-__kochdK~zwhw%wE3{>4-? zA4pP1gliE&WD8ea`!inbe7nD^uYZ@GLGfeIMuxGxyM_^$&P9G!4tYR3tx1B2?zvBU z2AGtZ*)|H1(s$lpp1x5WOio+PsF>>+-V{R!ERCdST1?-TvuY|aa)>tgQ>X-aItnC1 zsZ8^yTJ%KVfp7`uQP{~QtTa9w`{fL|4>WUQdj-rv1RH~-WowVWI{5zJ@P~ub!fETE!|Uai7> zCK%0EGh{S(>At_|lEeF+V4^ZLvn? z41p|6(+$k*4J5(JK^E#dC(6Yr0D&$ms5+MnY;*f@dMP9`_`$3wDA1Pf$?59A0c zYZ=J|$xm=TJVdnsDK;PS09=fi+uCb5*l=KWo+t~+<;9naIr|Q-n@IOEsotc3*zp!c zyG=%=Q4)c4>sY{wFViTPQ6lEp#bC=?(5e&_WEN9%g)^=ZUm}@Hy?`udSf2^OeOxv) z$VX63#zir;`$M5q5 zT|RZCP{~hSV?DP`P6d6p%ur_Er0PK=(m>3&Kbi-O1|?$kTg~5IIQS*f@7hq7qh<|P zLdur*I(gl$+3PL+BLxy+X>Z-my9mXqN}|Om^U3uJiGdYBbh`;z_`5mnTSnKufN%Y_ z*_dU;O)J#KqHHgz5zHB~Kf5SqTH|0rNp=M|GkBy5KvXOZ#(UlXiHZRL-$6|PX(yEz znScSw>t)Zt0|mhua2Fn~Z)|wW1B;6Kna$lf$llCKJ{zj(Z8~cI0My%coP9^#H7=F# zYX-3eI#9sUVVL9SR@SszYE5Uix2FA|?jF86I0fkr$P_89Q1tQdZlRee;&b z#;Pyi51XArJ0=l+xsACJDc!hWxMaW0aB-HtcbVbh`;w_@#mNt@v>efXNC1v5iPUxm zcCCqnrjXg*?zhuED^I%{x^P8JAMT2`E_4V0WFZ zf8|&%VI`oKuhCZ1m%y(ybwf*vA0xpso1(-qLU@`gmCqd`L>Q8&T0T zYK~k#7D|1C)MkcZSk{t{wTh^^Ss=_5M4i*l4`?jm5^r!qz*N9MG*;7yzx%E5#Dls1uqKVm7rc3fldNDk~W8UzWlmz4O)8|`M>U;0N>2+_qtm@xOwDn zsVyqNLT6;$%z`AUm?%wUWKLrAA8c2V(u1L{AOSoM;n*Crd=I4)9PAw* zW0Sx9;3i|r5p}R|T9C39SWme-2Sh&Z)nS6h5z!)B%t`)LaXPY#@Doqx)hXQP6ugO3 zqynV9B}sW>dSo^iR#2@Ms}!|_bWkD`TwG;v*Ch);S;WK@8N_5Ffv`Hn+F?89 zcUxo6_YS^2`A!oTTPr8*E!2?JE>ZzP5v4WdtRc(r|>ttA=A_CPCjPHU_q~euJ#{|2gn_%v`w^wVqwwrC=-}*8Wx4%vwBBF>P&Vi28T`I#6ZgJlTv^xCWeSr>UdB$99l8yG; z06c7K>w!OJ5hO+Hm{4%{<#tldZ7I5Nt~~MsA*ExnWV*Wxr@=jaO{ouQ4%Pkig9qsc z57Q66Yz+5?julv)Sa4UDXH&G=r}IeLYzqi5wrBo-?#|Eq***9l-_-klSUEDBa6@u& z5S8meERG5aX?NZjY;G7{PU8+hBV5u5=)esvR7X%cf4bRg?VQcVMBd!uIJ}V<<-8%S za<Oo9n;YZt_)*sSXm|TZ-{nVduX;3ZMl<9j-FP>8xUm8A+y9N*0M-+J=_hX54UpZQ zy^Y%v%fk|HL6BWBediEkf~&W^{r4K5G}gmrV?k^-R>bC)+z(r8escT&zw7`1-Wtv9 zv}=IY5dw8E_#G2dL5UeT%5!Ik#n_}p!C1)kQ*VrmD-ar`JwmIu`Ls!J$8%nqH0?It z4gE6Mc$d>oZ=yLH@3v47wW@5sI^PC-eWJI15cKH9!;NUwY%2U zuEo7A%X~AO>snZ}(F2lMa046-iPWxQkNN+SP(U76ozDz`qG>Df!@$48Ue(?qo7y3( z-nWiMVT@rp|KD*^$mHA1N-We^jB7TnzV?=ErKT}1wkR;4i16Zk8*+2&YE8;c0hz3= z??_Y{FfVZ5brq6>IaHqclY4QI{mYlEJp~heQslIA5>UL&dVM-} z>rWs;oweZt0OC(|S=r|a%?@1hd0dqTcj}<;0$*aJ7Vd&r8@)z9CMN?w*9Q!c@Ebns zG;T)UiQW3BL+v+hk6{b{oTi&*+6R8FKfRpKZqr;sQ7mtB+`gpo%i0{Z2(E#LmEN< z2@))YC#4#>T!iSJeptQ!4VZ~HKna8ef+7Z(v%qNas zO7tp7u^`M$c14r1NjZvbsG((UEXOEuOyU)I{PV>Wsp*7W+z;e9C%J)}rjC?okAURK zpOs_Ga!yB+K+jg&G_L9UI)=xa>^jxe#ClV}m~-iWLo~-y{4+{x;-P+9!#8AMYMdYK zE-XQWA1Mp1POPtD+BCszCP{m(EBy~D_{Yi+6Zw;9o@@q@am5uwp;3 zuGu|Knr*6}4C8|2&qJNpz^H)sS=6r#1pD@_L;a_g0ndsv$Wxf|j2Q6RDC%t|btR*Y zeHe#6j23Awiw61I5t&+AGz&3bF#Q%-$3sj6>4s}loB^29?94z1i@Y&6@kESD+C;Ha zfl5H9r|w=KzFHmcPZ5)?l?D6fp?ZEP9!nRCJltT(%t_FYyAEBNzTniy;yKtu2zV{_6HX zYs8Xb7ve4yO1Z~344njD4AqeDX(u(p$jW)cIJ_6Am#Z|VrjWm}6k1k5T3&e*d^fBR z=!B4xv_=t>xh~4ds76`On#h`I!xwVs3kX9_G}wnaFqWBG=AQJIgq~JUK$=f7`FPIo z9q^7WnUGmz_nP1Wrg$0wZh09-V#qtuW6iORzr#Aa*&D$yVZjPt(VX{D-ihonl6kzs znu=mF3AB?sk8eMV8Os#U#YXS&tTdc1)9V)NAXG?Lf)gDg)FG0t1TUVk?ktOSn>tk0 z;WcHbF+K;Z&G#rnWfe^>%SzNJ4J;pk0tkLSTa-2I^-NOX9s32)q@i`sTT*y)ztJ*} zuWI;SdVBVA20X`sNj5!qb+Tz94x@e0eW?*IL8kT+I4zC#=WNSC>e|0Ii#sizo-u%( zCx`Xm43p=OSW8zOBv>lFa%1U(!+>3fvQNlI!;x@K{0hMdJkCW&1g$0_aJ-Is!St^> zAQoCUAxdQSc6g9?1EHR}CkQ!|G6_F~H6dVF(@JXO32Edl{WrX=7-c%^LkOcPKL-m^ zC%K<&`B?~na_-b6@1tHe1DgZ{QVa8gR{uw}kxty%_lpGWyx3bF2g0E==Lm-;;5&>y zaCKk5J^TS{)jJ_e0v~vkq9fY~*WCX8H^g%~HwJXl`_ao%tD~?^GdA^J5vl(@FM3n_ zio-=GYC=b60|Ykm3+AIF2US=pk*UG^9o4YJfC&dcVv3?r7?v=Je9;?pzxm6%ckdp* zE=FJU*4N2qirqf8h$XEDOl+M8f( zGAi2InhHc5lg2$h8V;>*(F+OP5&FscMPZW228V4x#X>dTUD(q?adxSpduEpAGL+T` zqAG2J0-HZclM<*=WuTS+Q4R0~UR1T3ej$=#PQ2F5s&VYLEp&}GYD@<6B2^u@b(oB0 za?NqQq{Y&QCT6%(^MMc-u_yiHxSx!&IMJ4_g-cWwkh_i8w+zm5h)xtR2G4-+$sn2S zvX^m>KI1jU1)9e=ZAJL4B&l$CHSO`fc<`op)LQCkEGbJpnU2Cd|J zXyDqsTBF80-;`<1$T5_J6@x4?iP08XxvG^qx10-wEM@kt-CP7?SB6AZx{6RO;EdHt zM0$rOdtbq&BKM)&S6p+&gFIR=0+;YG6nqGr%m994Fzpo!E>Y#6YFpWObx%k$e#mDK z@051fBJ4%Yi0`|6yTr@htn)|{Moiv#gsFUX3INX~{@J)rA zgx(?gu6@(kGFPgn@lP$hOSeHb^ca0aT;1Y&Q2l5-sF`EMj;@pSOW}~P+#}WiE`$~| zr3Bk?03b2U@jQ-55l#W2Qhny?#f><$haNqql(CMDIB8*ID6v^7_E&FA~O zJ12W!ioV=AfvO_3LyvD`h~mmT^-Tjb-iO+wePiI@@tb@G#DIyt^Fs`QHDa*|AGt0) zLW%aN*7)hjsoSux3^{o3eUZa-oGiSDKz;WKZVurIqDv3kN&a6Y=0~-~Pd@je7 zxsF(gX4HU@IYexeC6z&sgqE)NU_UqjP$gD3#LXMEycRxG^qesgG1cHa&e>odP+OuF zQsqE-2@LE0WSojEiCf<}5_CUwP_cUX^+6RBhFSsZkaU#h3O&JB%8E@#K2(^Q-X;btbU!O@|jD?Q;*Z6h2et(nkmeFt|!=4zR{%@>U~ndp6u&F+@j z?AfhtcA~Pv!kG%Pt~AF?1odt1PkEHxrapo17ndVh(bm-WlONfG%ejN-*lZz&UsU(Y z-iB`svY+xh%2^VdL}UgjEIM=|cY^vD$VXuHK20QxY3Nnyx!@98 zrwDt7-m09*!Ax@|fM9h_!y+XSw&}GwO`q)_JcSP2dHy_md3b!h|K#~zhI|?JJjJ;- z%L9R_DiF#T(&??lkon}Sn)#)A0rLigJH!yL=hbEHgor57iIH8~a(K()qgfc&o8i9Y zyT!@MrWk?mPUSS@2(bpm5ekL0z4iw|vB!l&&T64IF9~D+#+zkAbF5U~z1XlMdA-xa10fd?lQW!lKNcUT0d z(`2f5G-O?x^qA$?IapNAfo@;tY7qUuq#C|n;p3T^j?ZhK=ai$9mTEqcYEVM@0Q5phn<13Y zA_)_l1Zx)tp0KuS>(_01a)~k;Q4aIn7$iU>clLkRzWnk_+VJ6TRPY46m$;XXVY|_2 z)Ou`Hmt*tGNLK@Id^@>T0r> z7lCOWh8qJM?`Q;RYK>>8M+X&6Dh`r$cN%w<*=MRDy{!$)^Yq|9*@n%9a3;38V8?=;X5M^_QQ#@FDl`1I?-&hgX7S=H1ft?rm zr47&NEpS@tD(kxzjFP~|-tM^V=hCm$*A-?DT(? zoqV_F4Hu*pIobc)UiR$O!7kLIE)N9wJ5%>A@%*z+_<~3=@N1#RSeEH%$*{ztp_)~( zq!TS^mp~lZUxm@NVmh5Bs#oP?>@`=lWOG7XA_7|J{L@ZK%0Yt&R*LXreqfik_%Kq> zt0t7O4PkcF!+hEX8^oe@KbeOtCZ>hEdSY|H7N&KGI4N!(Vq`-J*19Qfec{>t%*f>k z$HRo{XTV_PGfna#6zr&lg2TlT4oL6_v(9>U04ZUA6|k7woB{;0l)4hKM=T?0gncBv z?hj51u_4Kt5#*J!m1b|U>7P3RpJqvy_};h@Yl$#exTrnFBnzLrFfp$3>$q?*W$z8d#G(irqhjHvT1E=Z z^>-Amla?kEE~uPYc0ZYLq9@`oe`0|fW=9WC=hVEBiBesKD6F90I|f%W7E>f&1M%F3 z!ZC%DMKx&N6vZXFKxh=h^c1xxsC$RmG$Wc%6QG}?2Gk3HV1zcJ;X5cKn*t*nRt>SQ z{|9oOSp5JD_o#(h&A|;9hm#AQzZ2!^5UZnf67h|ss-)4x6F?vAiL>D&{+m_+Z~QDD zUEw?Yv_+rHhS}H20pei8o%y}V{<-tHz}lhp6yL-Bu-nT%zk`>MMHF3f1rhww^s_l~ zAY4a1%U5*>Pl6j`r;k^)0Im7Qo12YREtP6cF5QT)gi8t7mWw!4wvj5zF29uNqtx)_ zUvhW%%`aQ@=s4mnpjH!tk=NX4yk-m9xC=^gk=>_5L1WyHhQiNY1fAgw=2r2~w>El@ zKKOa8+IUFYz#vG1w@lJF?!sLEwo0&_VS4!uMQP6wLLB!wsPe;mGGrMED=^nLV+&sN zPy0*wxR@%D6qNfxO*Q%lNUQeSl~(n7LsG~;eR6!{AO9oBikeSe9qa>bv)=9$Z*vO# zBQN&z0WPWYpz&vuCNz5c|1X%;lk;-a= z?2S3XTFwJ^oAV&!^B}-A?c1cE!RyF0@$JzHQEZ6FyB7ZZgZK$^=8vjn=M}%Hlb|@J z0wxf}f%<$oMwt&~DLbb%|pZEFnFeCnr3}S);QGu z;{@lVQ*B+QP-3Z;B+7cQ`rTN>c!@wp!KM_=0DK5KQ%Jzs)-5nR+%1u+S;I%BP>{o% zAX4)X4Py0P-IRrH>a)&TP-g?Rwd6H)z;EnKXF8KMk5v86;Ccb?#28mwHp^jG7x6@L zo$Vrs9OjK+a43qx{S@R@(1BhLNcP-P;$W4bHJIgzFm7#%|AfZnL93d>YVDypIm)B#)1o^Zf{M+dCb zGzzWvb!e^y5#4D4A;ElB%AR%(K20NDE^%Gf*yHb0JKzgXsm262mM z4v8M06%0oUu$()VS0{p$u{`q67?`YT1;)o0VSWs|(f#VOs^^eWpy`@_h(Fa`b`&hJs z6j)1Dqw+kX0V%Bt4~YNOc-#$Nx3vbJaj2E1bOJBMxaMNYN2D-RA13*;1T3uYWy_w(lt}4Vd%~=LgNavGD9r&M1c?t zNT`9O469+&g>$Q!O_P0s(%A(8hczAnJgA20*{DVb1GXpOmR7O!5_WMQgDe>P>2F1j z^P`ySS1g)_l_FJ@I9`GnhrkF1IjV|O24%Hl+INoTo@*($T{>ZDYRZTQp)wL_47nr8 zck5>HYC0+36m1Sb`;N+KLuZOv6cqty5pVe6hv{lyNxQ62AF_s}$ z(+-|@7v(QGqX}5`lqvb(P?yu%k+YO4-sMJ^uEs(*w2_!Jdve`N_DNK6<|{fm6a{o5 zR32Q67+f4T`i1|AslQijJMQfc=c2#}R7NP`AdAID(8MRdfW5y_c~;J8LwDZ1FcvDV zD#P;23#>@(va%L`grNw2JM%B^PhdhnX)I6XUpXcG9A~ANl8b0!vc>caq;Iadg|188 z@J*+OBtTplDBk$atCPc1z>ok_s_@mHYr2VSKRNoX{MqeJ{ga!6$x8*$)CL<9Yvzkk zut-aiIzQjPLxIG$g*DLzeZ1jzy1SwZ1^EkP)S+%&dnt^ey zXvurNP_ZKao)16dJyQ}_EGm^WrZdS|!}3zIn;N2wiQ*9n+Ah--AVDM}-xj?p%921S z1pWwD51-a3_6vPzx4hnxuKD5kc>mu;NnrEK59u0<+fk~EHm8ivxFro?-goA)-slC- zBsaPJSWcc1H;jgE0hJLHfbfvc5VA`a^>S9e1xx|8Og5<~3&xJ5c@G*8*REO-bE~#8 zffGrtuzDb+MuFD?ygc_Kc$s~d|58lct7!=qI*jP9 zf7Ajut>a<_MDA`kzZlF)07>pX*~+&6?Yn-q=l2-DF4hV3zz;dv``i98@|K&&JcrmP zhhX!joo1{+x+s&2W#+oW*X#2TU$U6{L`mDANLQ; zo3)4Q+xPE`s^Og*81UD(Kj;~L|Jt~J_b&W*Yin!M{ulmi-MfG9Pn%m?54Ij`Z$8-G z{?o?h{rg+nf6D$>btJ!x{`Y^$pY@aPB+-I6uv71Le0O+!a{A=QlfBc!qo;dE*>=|1 zx|{uV;XNe3Lbp0u2N7_7)@*ce`9qBr3GJ>S+-J>TfS92x3k+Q~UUU58!Qso}{o}A@ zJjwor%jvSe5EuAktoBM_XDbvMRurEt1EDeW%$qUg8N@6UgNC&Ybvuo~=KY&mv3Y+* zJN)Gzt0mi8H??GYYeh@^Isp7wKHWRsJ=$mG3abVX_=~1>Ku?KGBRb4m#9s`i z786V}LKjW{w5(V>y!m+`5T?+QIu#6ON12TP$APdoDQCDyIim^V#M09Oug9n#R3ZZz zBI}?qnMlyzaTvZ^t~3(ip2VXxYTWW?Cp4kCX6O+XY%Pv`$X^ZXY@WPjFg zZe<7F3C2*LKkv8Ad4Knxa^4@mkQ1)^IpO|jO7^<;U#Apz`MmdtuCiD712(!Q{Cm|^ z{xFQL3jelOEj{tDLl|8OyO3}z2=fi!s}s>^P#7BalH%gBnju&KWw)s6csid|6Xn=| z8_fhYEyv(RIT{gaQx3MEKzhO|?&hk{KrDVF6-+&+2iKW*0q3N6T2rZLlx}rrlWJfp zB;cs9qXGv;mp===E~$+m=;K%hs4q7Noo#;{OO5r`vnSVbevsSmv>_UMBTy*yG3&S2 zT#`(+L9n}F0UoLWVu&f7v;D05&2CS5erwJ@kZi=9Z;ky2{vJ58cuL=Q8l-ce$Z0U=Ofw6k5ZG6Wr}RWpcAbV-&ba5<4Az*UvB zN$eB<_M5$YF!cZ3>iK))$NS*~rTm0!8kGVu1$%V0l%atjgANi`fIvmrMJ{-(r7<-n zQ!zHhy|8uf9&m6VI0H*!Ow2rR&ZNovW>ZTm`PnhBlfqbA91;etKQJ5b7B?G4oLsgKPk#?rC zjT?+|J90}=$k2-cR)Vyjun^=fejQHAVTr6%<1nOQa{6xj()Zohxu2uIjtUdFPIbq$ z@!_@VtZNdF*OIJaaDg*S-_$KNvFhxkFJ4Csj<{nQG3gDgb3aCP-X?(MuBBrYVvN zt>RPDBz;kLLYA6z#bu~~0*{4v&;m=9--I?rr{ssOb z;uVqlTb>=Es>;j?KY-`ejHP9fJd4(vB*mJ`V_sQAYbW=A02Uz2cx`R%F?_KFGhoPqy(B{1jfme|Es7TVeUz13Tvz(aaEb3?{An5#*o=B=ApEbhK<@ z=DqONO3a?WVM$8#a^+q+cd+bq9j7ns7i^IbiZq%S*J?3>8NeoB8y>)!f*dW05%z1P zd$5ZdN2vRGa-SZY4lZSbPNqaRa5&sK3>#1{+5lldp1)3p=b*1u6EV)m9AW;9ei(hm z*V@nIc1vdmEy|UXg15by9Y~%M%xO>p?w!D}vWhXMhziI4S4_ad;0V7f9AdyI-kER; zNhKQUpmwAdy2Akxro+yuop*DW}s%Nr7<= z!}CV?JcX%+@Dal9o%CZrOKw~ZifiWC-cP$t1ao=Imc9b-YFb__E=;{wo_1Xy_X;e~ zv*r&lNN`Q;UFk+ zXl4Kv!s!7P3V1k_hK4?9*^ufYnWknVvf!k+RLHUU&)ar*F+8CBU7UpdgOk0ZXFI!w zBIGIYr<*bdDN*66YE5EWZ%%iriC0wIQ3yohP2LOU_PZj3@KQaUaSwcZz>lC}BVa(0w2@>P@<;l_JeQLv! z3t7jw?aJ+~l~-~M#9Y~UZ@%(WNfKIn2N&QePJ^W#NZFH92wKlqb~G|!ozAPvn|{Ll zjqsbdRXK`ALdFX~Aj|F}>8+cZ1U#sxU{1%quq>4YDiNlqn*&Q1lEUHccRM(~Z5K8N zHoX$Yx9!SwU;{AI%yYtcaf!C*G#N!JLM#(nE+XG%TpBrRwC1G>LVgc8@{LDP+DyJ8 zhVGMaa}giHbB^pis(JvMalAmg6$sHnX;1*Ck#Je4iYyT#Bqf`8-Xo0t0(WPFCVfZT ztOAA$vMJ4#&ixc^D=`^4UxFYj%_}NySOL!wFrDu}0he!fNi#m5F7k)t&q z*No#@R5uEKp8UFJUn1Rz%vdki>Pj`b9P39h10jcdmmS7jTiL>n)7Zo#xLAlFD8Ng? zmr|hEw;azZ7L}@hg<=Oqw_`a~KWk@$a7Jp++)IkB0)3Dq{YFBkTSTW`VDjcbsP;9p z%K=M>85<+SCOT*7CMz>stma{LSr!U>qcpZt$+MuPwq#`N!=s&=n>uB}sd$caMamV$ zvaQ{SK?I3YM=WnDNrTUctZXTX^+w|*6u*Ej?a;TW_}*!%Tw%X7B}ki^qRzB2a8=59 zQZU{8MKz)Tx7dKB;?syuiku(Yw6O`VMhVx~v!F-~4fpGj0yavC)GQQ}hm27uO-Y`` zDy0CpORCE3meV{N+cur$10vev(NKsuk&@h6o)^13vs*1s*EpQhHezwB*6ua8NfcA7 z=e*zJ)|E23@{(nyTe~d7>XxghRjT*aY#vrP6(P*X#L6`CAi^!3;#aeaR95({qhKxv zT^K3ds{a<9B9V=9^BIDA(6eGlGLUk2%b6Jb)d;?f8eYh#XDPqlV%EbimMcd4!+s9O z1cU|1xfQA~Wa6vL&a#4Nmj}k(JTO_?z({ZS!C2eWfpO`;j9YfuK+fNGShJazcC!e% z3%^;|DD&p_tB89&pu2)PIVVa)2@ zgp~m~NcbvH^}biFLsW; z@AX~x^Or}j4)%IDt-7C|e7ASdiz?ED{hu*@W!Tv$d8J1Sdm`|nRGo%rl-%FmUPGYN zPRW!ECjO4#FTwjsAqY1V3$5esTYmUh3!jcH7r{eJ-0x`bzU>VRvodCXzpb2Ca_J+-ZDf03{|Enwlk`J1W1!BA~1(|h`GXvGSqFXT&sw_#fDbLluL`oHj#{ zcz`-=A`sc;ps_KkR4hkn#yAz2zOq19k#mfK5`nl?nFvzOWODr*-G^tI@8#?sNcgo7 z@n3rzhigdDr6a+e|6G*AH*2B(zFzqEm|a_78eNH^Fw3Qx;=8iwPs0bLTM;R3;rk1T zqZP5#1czfMVDEANkk$QC2j%L#KqCgeM!b<$8sl*I9wrWV;tGK3TCgBtp!?XlSP$&P zD$AiLTU<^Q*TaEZ9)7Q z&N%_|>UM+kg&jR)^ikg==Yh%2uP@J`WPjCq1We|dywn|N`ldgB@Gsl=TU!}`&}iHj z0tBh3Q$YG<8PYNGCXNtosvA0w*!zU;j&~Pg5}O1GV}`?#cjkohD>SFi6IVKASWO@$ zXM+)>GrWK)M%EEYPL2U(om0)UjB#G6_2cwBmp(L!PXyO^YkI2+BygU4immMQkn# z-{aQ-TTRN|lnkB}=IkW2vVfdQ^7O;=5pV2=XD&sX947`B(KK(3?!U%D5ZbP0ZG}@OKNZIl0l?Aiq9a+l&~G8ko`~z> z;rFlyJ$d!)c>mw2zL&#s=+H8O9)~v89sdrc0|*dB*weq%^HEu?pFc*jl^=pyOJfa6 zn6(@Fo(EL;kYqFW?|;Ya=e@qvP6Ti>n--9`*1dzRK}uVknHk#_xMRSmn%Ng7{>ONWrsmQ-O}a!GvZ6ct zy?#>SEb*R*xjApaSpK2n(*ecXvJe_C6q^z#vB&6T0~HT86U&w%B-5yQAQTag3cs6rf8bg*d|*(Auq_Dg$$sq&J+0!Mht=8C@9LveH`hWJI$iGs6|>$q zUH^`~Z#v+yx{&e!H_~^l7?aeg5MVyBwH%}q3BSj!pLFGsP|=&Pu7gkDGs8cn^T>`K zC0{uHu6qGNv+=@T;Sw3-3977TEqjJNxnaRtRJPw2p6{OSJbxY%BL3gICqKU2Bhool z(hF6nOb4C1{py`_f|*p#A-+A#CqbZ7w28gBT&%jW6cE_HF$optt7MAgdoO(oPC(o}h3q+L*qSklo}qZx?y&^C33M)9W(M%d{=v@CkLiF#$1}fJ!v4oS1KAKXg)AJ1{MpTo zt-E9;0gtq)0nW|!9K@K8;v!TQ{euDO$_7Xx3VNT~-hwOPkgwWX$+PtygpZ8vi$BFf zx(=PsaUQKuM-N0+3Pi`EC*-J+Fda>72OeTj?l{V-C8tPjgu&EnzPtp9z}5qV2wg*f zr82YU+^R%QEb+U!jh{tR@j#*Jj(zMO)KvA$&%Y2I4`oZNNwk=vLl?@xYDWSg>)A0$ z_k#Vw)*ow(VUpCd@xU7`GXTIyMhq97P}~zZ&ia{X zm%r#k*%+XpAqK%`HxmZKk8nQv-@$)B$A3gSfm=U$>AxeR4eVMfsFH*;qa;`?joXsY z@02Ncf-Djj^)33$tWTeFV1Qz+0u9uyfodKo4#Zd_$7_U#H&V!gv8FAMd|PzR@j3LA z8s8CLa0jLifEEN?%vLPAP-_T)eK-Hwe{O%{4(W)rpOLpkaX7rlmTv2@h~^jUblOD6 z9t(DfD7c3sQ)3j;K^*n0W=5|~#V2!zVFpXPicP_`fwxJPYk-t@*48>!rj>yg&}gDy zMILXs8p_@{_p5P2WJ4$2hqDDF@OcT*h6}H_9`rpOA)rEs0g>Z77Cf1AAZe1*B+P0^ z_!>VZJ|ErL!gqpyH!}SYmf+j!{|cVz*bo8JNW9Jc5`_~NvjN;GyvgWP$iwKv_c-(6 zm`FCiT8|hqTOs=CUyw>`T-zr5HE=A^9mCU}ESY%ZG5)rhXUP*jO}&5a)FZ&vdrrM* z#_*V5`O_1gcg(S52nRNfVQRdZ3kuhOi?L{vuIM0(uwzrk`^70s0U8}ty-)t5eNsT1 z5PdrH3e>LiB>XD-3(Tp<;&yce6w5j)tS{1RAoNG4@02GeT26Z08%(CIP9dyq^ok4S zQ%jZ)^9X3z(k$6$dkKK9{ixM0sG=CZh)-R9=vh7+cn?&3Qm|uiN=)%BDwaH`(J44<_E&WR8_Y^(g7K#>WNjj<@9qYLKYy3VT`=8Gj`EGG{mva68?} zFdHbjo|Pv-SDmrVc!eY6NG+mFMs6dQp)NxTI`Qu+;yWL$``D4voXx%1b6neD8@?GToZ z@HEQQlFAcj3z^p3Y?PFu1-rekNp?!GOkDxA5H&g%jd$TSh_gI-ujDIQPLj>#Frx2U z41;2U#IT$V7Z-vpm6$M9LbQa0L%J{U#!#ceAt2K;<`oM(Ip}pbxyqOiSywk=iL;U3 zGX^w!aw2pvyyv&=4#gQd82aweFwijr%n3-fK!*)I3s$ZuDB^T2$8i=m9JqepnyS@e zPZE?6_B*$~-LNpZXx0&t$G~ivf;BSgYu-PJJRw9rY?jAlre02mSLiEv*9Y#@M(@>(}7!slj z_{~)%)^Ixi0p?P2Cig^6QqC@qN}#AkhBM?wDU{QXZ#}MpgU=lR$sQd=%stSOhL9VE z=OCpca-5YVKcIsga=iYY)0)drI5DCCe(f>k&Z{G3P02`t@v-@6dsA%=*c4#DFdNoW zK7dJ{FRbrT0YFo+TJ>9pH2!RlBfvr2dW8m|*~nV$Gc0<&hQ%`^VWY4u_@ju)*&62V z-||U0lGq3gMh9Y{WbVq_AsoF^zbP*}u3Lli1EU20mVoE5YgkXVLC0@I+o0)M1{CGOzK63MOKSb5Vk}&|5yTT+bqQqzX#HH*SfqecpMrpX zA;8TDkEP?0p^}%7A;HK=QqUFC(ONY|1LF~HWw4%V5k&-GP4xyPo-m;vW=+AfCLri| z+W5I%yyFSe{^e!kTXp%usTSdwIQGzzpwK)W;Rnj8)4fK?q zW@`P0_tp(OAOa}*@E(W&=7LfcSrFJ|?4X5|1s=)(=W4{7qui<_b}@s{cQ(drvV@64 z&;&SK%qdF| zEMX2NNnVj$tTs$)-&F$$6TGa1p83n9cFiDsci%JaZ3Q(nr>^8b{&^k z4kl@K)smFmrmt&&>m=b6RHntXXS&N@MULS+>ljio9ArF+!PN3FGIi6Xr9mK94g5b- zs?IxopyQC8z5&`GX(a<=6k{I47dh?LYfRJ)a|A;o{Bf8_p#qitPx@vQZ@(zdiVVv++ZDL*v_%=PmPhO_3L>@Xd7UQeIu2%#wnhg8Ni{S z%0cT}I@hm^=JJ1PY_9iS?pd#+Lgy(YpJN7c>?Ng*;c?$|ApVZvl6V25B+7gtfL5 zI^Env!rZt*^d@B{$UgUD*NdkJeGMymLUutzYuBVnTXaqkK}4zb$O8?mwTjwZ)gEU;d@L8fHikrAw6@U~@XR0!t+1?V6(d3dy|ZjwAnt^e9Z+3|zONiD`g8&g%pXDNj86{rW^JNEWFCj-w^2ufkRPbGS^VAl9FRBcskb zYaM3z3Ir5sd60VgpufLe|m&-9Zeihn9a<8yi~#@c`AEAXN+=@wZKSC$R3SOiVaD{0QF+mqU3Otd-B#4-y~K;pxD!p zqhn6{0Ehh;yFxNALj{K04`vO-79`tUXVomE+f2GxN+ci-5t8Hts&Gv16o@(Irig+bnT_md0HdOa;zQn7(u2 zB6Oy)*GQTmx`?@{_&AArG7CNFeoId_F?_hMeqc{#aZd`OU$8g+p}_Cu-@8VLl;6J) zEaT6&vG1HY&>Ja-7M~TmTp7meppHQ50QzFf5yK)_f7fWmWyPc}TCEGeVjIwl{pHY3 zs?f3Y>F)#bjPP60A}+%uqvou^YQa4i|C#w0EM|9LED0RIlxWOxHKO!Aru1fI9l03B zB}rmDETo?LE$ua2{Q&Tbu|)<=M>;%JZKKV$z{?a^`Tl3BFR7YxOTvh~cn1xR8F>#; zJcyV$+y}>%KOk6iQO{d}b(-DB2^LGS&P}8CNNvJ!tR$9T9IU%}-{2qKymzE7 zjEkLykGF#)E$X$WoK{4W-OU?BcKc|uyX`)4%V@H@DVm(!Hk$0-Z?m{5n(S`cEN&ko zMoFNL5hHGF6VKx~8(~H5$!uL8GH~X>`-wre%$I1Pv=Ro;-w=A4dr~;!p^F+=+kmhY zIN}~`R+d`CX*K*1eS1rF#O2%knv=HIG?3Vj{g$SB<3nDIzi~@nEIU?nS}7mvd39M^ zYJ@yCiXB?P9AnPeaY;Gu6~Nm?;BT)LD;x+9u&iXdh!Z5dHAH&!csH?11I8FPKJ1X( zvia~n7UCp17NJX3Y&m0C@_P1)b(q4QuP&tEkOMr2y%dSxP6F!=Bc4%PwK4z|IRz&9 zpqTLfuP3NQ<}P?QWlo=Y6>DHNqa*0m=$I40+PV>pD4#3CS04)9qkHr^mKs3Uy}Olp zfc`a=78F=L^MmReCUKO0i04o|#*bk*r-%vX+C<1O9Ii;=v3Is{#|{MpSF>`S_{{MW z{M_;T{~1u2E~anlzT>K<1d@V6T?Iv$3atX?n;?!97H)_^F*+I60dvFx^RM7_328C~ zPR@60hh+I=$A6t7FX5mO*-vJ0rFxj>P0?z zgz$Fhj%fr1)x|)~K+}o%!zp~RBC3}ykLtPiit1%IMfKeKMfI|qqIzy+R4<9EX19py z1)>SqeCZ!+t$VN{hLy`A*@l~1@cVP+si>V{Z=QZA>4wToa0@I8R=+`~5we6JDN5Z2 zzv=9D_!W9WX!ZW49d+j#qC4g2(xR`Ip(Y&323kluFD|Vn)GZwaSAvC+lg8=ar^niqsaqK=$LTdj8rBQ6eg9l1sl=Q^*V@L z^cn5zO5YIx==9ohU?{a~OfaU_qdjM=@_9eIfo^egBl8nx5}hS4g8!_>9vmY(NVFEV z8s1luR3W*nD;x|3K)_y4W^j;n6W%%vCk8rP=GkRMiiElAADA=zSMzfY(u4}yoXYL% z8tiUvd44U7tT+SZMV!2d=sMH)TJI>lH?{zRZ;2uv>ypq(Tq53{K+az@G@OwKq*zblaeT@mSnv?4`I5=_T z6|)}IxkOwP{{OGQ=?*%_$m1<+Mve%SSeYemLznH6=qKTO47-ertH2i8qe^RG&Jfa# zxIv&qGAPc0eoUoE>h|Q21OJO$%Gk%Ye!D*<3phz$Hp2qzJ>3HigjaxO=^Er4O-5M5 z^j|lBgC|uq1%=k!5BuA~$QKQPNqR~y%NY5~3FqN0IiC5!BQ%9cfzWy_)W*m%s*Ukx;cPPQn6?TlhY}Xn z5soYnoe*U$5We*#0|fVr?q%o;{XJey%b{PDG)@IErfZ{MjWRn07QK$xZKI8jFLj|G zq^qbM7{|Pzry>l^yKC9sPO>g2@FA7fJRkJ4S6^&wY&`M3^X!@HlFL!R&++qJ|M|h* z^Q=3S96EjR@SgwT`7!lw$fd)VTN_&s$vbv0{SV+9?-*R3H-7bHFWT6en;6jtqv{(S zU^wSmIw@3bxxk^xahoVMrx!`ot{J#_g|R3Xs2~!iU0s8X5-KHLYg#)S+k74%k<`L`=e%as23Wv$$?A0QHK+8_S$r-iMy!y8n8?mA|=)lXiI_WWK7M0V2+u} zSe)|KuSXR-4%-9(6TA-C*AaSUY7o;c_!u{C;A*G{oe?q(^o$O;1>OXJj57ckRom0D zJQ1NwKw_vm1>pIW)W|04F|F4A1I=rpPHo*aXr@_$PS_3oD6U~-fsAE%ZH^iHc>(%l zi%ad0USoa75nx({ToDRWPszEwg9OT#emYFbVL8WKaE)9OV9G%AM(AiQuU;k+U$h4x zz{n5z>;4JcV78d@9^J|aDdTY~ zag?iz0cOrMF8UV3=p~3~uu1|jRj5=Ul`d37I16Zvcv1EU!L3OG6<81A@?`U5Xi2bl zYS?4BjmA64U|AT9q~PQcCen9Y5@3+?fp^X%GGoR(L%)P{qa=>*gbvIKt56rhkvBD* zO97*@6iVveE9jhTCh>%BVbDq^cN|iEpP5c#n4l~i$&6|mnXv=1C%!`3yzQ+e*I<{? zR)%a*{{7af4LEFL#tNN;Mrx9u@FZy4n2L7`K6imtDd^601G$e-x9WGcM!bbZ$+fa5 zMM6Pq)i%tbq~pKd;#i|ppfJFnEjCym+6J6f#HNntP>kIm94^m%%hBG}$(&y+-a%v_ z7PUqD>x!vtadEM*FbDrW(sH?>1}0*(=!btN1mk)LQxiF9e;(5u;4Kp(0vL_8Y7_s9 zlcg3RcfP%o**&;kGEuj2Zf*u}>NX*H*vk#PQ_iBPL)Jqfxmb-anKyJjIO}E%f$CyS zFNnEC4Q&Yj0u8W0KBRq@gp_0fMUgm1)F_tA9`G5-eJ!uOGG}RH|1)ede#I8p$REIS z$A3XEd@g62u=mTPVk%|QEnx&PN4fy|3+Ch;SwGQ{CO9^6AI+FNIN*EIZ)bYuFcV()G z{NYH{Q*EDJ#&t!_BnVf>L4i43RWB)$kWk9&V&I|@BHYhJvu1PO2Q%gNs)8Gf6iFQ z(Ws<=ouC}hmD6!##IVMk(=l{m4F8d(Ij3ydkYbBX9dzaw-4s1bS0K*ey~n#z-S2+O zcsHv1-G_{~h=%MP{B8f}@ZiPX!AbVFoumDoC(j$o@@;UM7=y!RfCb@DU@gBO)v=OL z24vOtImbsx8mX(DF~(E?A84*e3QO$uFfeH3eGAJwk?P(k^=|L4-kJRd5T5g5+Ne*K z6C`kfk~Yhb03Ub|3qg)c!=KD*FHv57cw&1*oH_v(oK{QGCM`ZYTE2WahWj;I!%t zwiPz@TO(rqWXtQfB8XNYMEbf}HS)v~REyp8{xW}ve!hqhuIduBaWoFO0M!h#h)Nqh zOzpTdxF^F&*o-AXAr7B`P}|M~!eeKEeF=aARtoLYc06*-Xe3w1lIoXMhNJdnRfjT<$D{7i4Kqtsd;Sghz zGNsn$nr{QQ4gO`|x5rB%2g$;dMmiJEhAuw98y${SwftK0=Epp338Jrkw{{MyD40^|5Hj2XN+)~;j(NHj4__BjN=Ot=mn4uh$jut|7YjX@Ps2{{9PfErmy2bBF^r=olz_eo_eaXkhwOGBrM z;&m7lu}(OKZxn)83-xLwX34fr)ZYfGCsRATT=7g)&eeC5N6>ZHZQe2y!)G zTKAc{NoQjq@LkUiHNTZwZCHSV=At6Ux%8PiK7(S`X`gy(4p0a@jcANg4o9aP~P95;AID0Q!hwL}Qkaj((=i z=Dhep|HR5`1g;^Lp=e+L$YidS_}sCXtr5163&f|67$Jta_a&w{+25&hvL>asHUPzX zPCst8h|bW(r7o@&^#;wrV1hcRS;weCYV?VVd-GAq)<9;(TlJ%WUJ%%RD_R|$b}%{> zbIPtliUkjKGQN|BZ+fvZMwe4Uem2y@MQvDqER8p&E5q`6y1(=7!Qt`A{%+9Z+{GARG3Mf~Bt|kq@`#FukmCK0DOR7Me21LUN*BnI~vzRzOk(XVk?1t@7{QUbgf6_%Q5G zJlO)HLU%jBYN*GO4*|adA8nce+UeQE0(0Z5Y-2my@gD2MugJ~2ZnwI;o|R|k^Q=4UWt(4q`Ctt`&rECl)YQk*)Bg17 z&;NiwFwxc?u5aJJGpdGn&gU1CJ0JZS8~)FOd-veKTU%S3_P_GyPn%nJH#fJoH?}q& z{ApuzbK}A0pR#-Zn>tcnME?7~cl@zz5FmYXs`7*ne{DV00h5znmBO$p2?v&L_p=WCm!I3FE1MxkEp4f4RdK4XV*~HaH_q zx6Z#j!#^FAI`#jA-nh5Zfz$sD{`3BQ_%`Q%Z*PD3CH(s>|J%=uttU@9(4@^qL;NA{ zE$_3!KYG*u;_|UOqT`pX$-j74Z&r-I?tu0E4rgxXG1|!Z0biRxUiXc^q#K+Nv&|Wr zau&&kmwk8g;<=X62nQ!bR}Azp2E)4GJNhFLsS~8tG1L;ta=ej-d0(W$hOz`86TqS@ z!1xociY~^4k3a`Gii}3z6^46e-oWy2HJCld|M|<{u{-|p;PB<~{;_}8!DIU7C4Bq% zUpSVQ{rO++Z#;rNUO)GL-FgH+^uKc;S1$WJ8IV#<~92dz8TQopEmFRy1n)DDMK*2J!lRx$8a$|PPETzC$)WjLT#^sTSkpwr9rfT zFY*xr+>^VTE};j2Q%MphFjoct(Ob`cgwO}tY7%`JF+{K-J(HuUE*_eTa*NV~*JVLH zcv;~K$V%k1BaEr3w1d`6ym_0_VC$;mEb-3EeSz-j!iJa5FH2t9+zb8#9Av+;-KBV- zdF$;DkN5w+^v0J}UA~KNjUPofU;pj<&j0-L9~5-Q<=JmP`)_gnKiJ&dPR{?k8xOWV zo&SI6`Oh=pk3IXP5ueWe+noCg7|2Qa_%FoF^>yduaCfuAJ@YTed;TAf#VEk-EdBA8 z{qa`ku{lLsf4^;izukGviK^D$-nGBI>l?xmlGY#Jvp>Gqc}!uC)}P+DKfT|1EWr!< z@g3|FFbd=n>;}06J1FWCYbV(mnEkZ2cIhuF-~9}K1y&XNZypr<`=lJyKa)w~4`TC& zzuUa8Kl4Yo{B>=3c^UqJ$Ih~w49AoFto}LtHTt=lLFSFOk~dBUcF9YlAwlsi$xOn> zi&<`uR0vm7#1r+A2RAd$=}$ z#p6x1&HMV-?Jf9grp@T1WNtB>BRHE&k!OWNe2k(H$}!zpvmgL{4X>g=S~Sgw({k#q zQ@w!;*}P(k3EW~PNxcq|)^sc;#R#Lf57>4xU}k06!IC+NBmVf|S=6(?+$kSt$ouKHF$R+NGyd`pnuzifRAS|y z^p@bG)+3`oT2~+Yof>ZxmqjBhew`(qdfRsM`cK;&qmkQJjG1Q1vt0YLV1tMr)Q&uB zV3XU{AsoC;E0J+Q#lYw;JaPh?0`3OM$oJaXwt4^eX&o){WzD0f-l~DyTfa{OdFxry zKziz}8VF~>$7~|uAIZPO@7a7h zML$;4`D}BBYXD9*oEBZG=S2V`#bB^D2U@XDO_h}WfC^km;|lq`S4Kz#RJGjnX zDn&NjLk`Ao0%l+hCtPQMh6DRPt?q+{o_>te**xX|G;s2qi#-~5OHUD!~%ufmJjFG%kKSRMp z`JjN%4e_758=Lo&_|Jp;n|D9OfBx9~&ypGN2PcD;wdzxZ=%1SzD*dfj4M>*~IPjC~ zbMGDkJ_a1aeiYN7A5n70{|F8={1JZypCPm`{SYV#;WJ77$jjN5ZQj2{+cxj7XdR66 z>G8{xBmb+Yb@;`r-S2kbo3xe9FK^S@?X6q1c6;kKt@XcJ(ptEFX=~-nw6(WSt5G>s zNu*+uAOa$nTFTQT4;9!X0(umU(HyjDc}deH%npJKOVf~AVg%P!MIZ4ljp`}((l1`{-A)_?&duW!K!G$5+mF{XHSn0th2ztmGq#z8vR&D z-T(Lp+-p!=6L-l*{*J~3Zgfpo%e2UDb2ULPE z5$jL@;3vq}^ZleIdx`*<#>@}WFSFu;)vY8D=FgTA8A|z1ECRn-%{9#_y%VIWJL(R}RBHNGHwAfSAq9)^~7hI{6bgV*(1z(0q#Ie*kw^|BRbR7$U zyFr2Vb5OZ|d7cjn;@?FY1N4IggfuO#;247^sQ-f;M{`SV;7G2U&M)7^a7;s2dxLd8 zdK{gieEd;ZIQIvq{{fC6{PNG!L4Em%{&(M>^3`a;*(N+9;a+$AOcHfO=;J8odSg2_@0%t-N@Ug3pQe=~Z7G%;AGy6{9tlZ~_j_bZ(&WZR2184& ztW^)?kae*1ZhQdZ0?i}v->V<;1bzbB1U&7=2S7l;54U*)f3o@^un@sVkl%W9e4GzK ztmNiSqcv}zh##zeAb21-s-av{5gKeCH$Up~(mn@LN;kcg%}PlG{k`VIsJN)iL*bvR zpSqL5Z>GSYj0dw`c&>c(zFh!y(Sbl| za#qd!EWfz92@nq~^NDEzf3ms(RF8&JYRs~4Wj@J5>u-E45hdBj;wP&gdu*)@dG%&c zp$^olV9wlXCu6-l+amhph89&9hSn7HpMvh*&CfLMuX73os;i16`-Mqjr zY2O5DMDu+8aCIZTtI(pUQGRL)VV$)_T{NO%H_yHrYluw?=!5s2{IXHX&Uf>3p%B$R z7XJM{PvxT+uOl(9o1clbk@lhZ!41=kN>KlEQ4Zg%`CAo8Z0e`C-&t=l%20Y~o(TWE z^)^mF4%>LdMSiO#wIDGI(*XYDeR^8NG@u1Yr+5ecck@2}XM3wh@Je*ex$Jqwtrrm8x_i1zQIK9=*v8#B= z=B|C~r*5@8cI(5Rn{|cK&kTL*knI7zK)G3N29ff<%UH*|_D+dfx`2AO2h0G#clqA!%D9pRI1k z3nC|N9B)L)BGj9d_+gFVVj#s%DtEJQ7CG0W06{~qmq|5lA>Md7!Z#pv3$ zEquDVh0j1Y27iaND7SrF+k}e0xy54(npJi>z3=l+Apo?z5%~2jS~6k1x|SB*VgmrZ zJwRed?cmRDx30=Y&_=~PZhkyu0#|H5EnokJ-3KCQ#3gdOhS?Nl+A90qO=ku%98yLW zT18C~wRpM5?OW7@Aaz!vL2j5tAT1K5^Y9?2ZPB##mMvU1j2~&Ye(y0{y4srG-mYa# zi>qNJ+_td*-fSerO~qBisDt+ zdr3QQZb!p@xP|F(j8;Sb0Z&`Z$D8+W7^`K!x!p*SV=7zkZyqM!nC-2b8{GPv+cy|o z=#SK3PHWosX+6=Z<}lO)qgaxArLYnu%K+-#?%&^`tnUi^?+t78W8#0e@88>q^Z#2L z+jl?Z|Nmh8@A4V&2Sb2YH0%=!_zyw>FCUZc4G>^<&b_ILKf=E;+_#Ma#{Wc&l^fx| zH#BM`_Lpz*J2cFnJ2y0JCCry^@f#cV0bDte4ms+KTocoNwzY;w9~?b*>90(bgIv9; zJtTG*icgAm&I~X+d}>PGSL{jX8&URL)CCCFBUfs!w_+jRMCAz5NdOJSQyEY{fD-n0 z7lVBBDJ2_8r4Xoa98ugVc{YgpfmpX3?;JSX)mT@yV`x54#Ru;N{-Yv%{koI|sXa$)SGbj~OIH zK>&_{U9d6-CXoRE0x-?5go}Ei%-)x?3Tct2XHJy6NsE)W4Vx+-~V%wPv@ZO z!HO5Tw{xcD#o_`~O7b}wKT}ety;IE`Gm(QNWBv|)*AH6c_U@=MdP#U^HQ~7F2w4EB z2p5UB@TF=rb@RdSS8qA={%fm$_rJweh^*x(X#T8`p)uG(Y;L_l?}Kdr}O~ zrwA?1>vB|l#fIdF1kwE8V9tud;vgTsfoS&|s$?R@egB4tMc@h`c=LG~sYM%}oCqwx z-V0U?h-b7xt*BHhj8siBJ-|X#122sftTBYWB<67`H_L@c-^{s^HZYOCM94MF83MB- z)@%sPAcasM(s%Zq2yiySd zf7720|2>4iZR<2Z(B-|&@7cFNYhUNZLb%*x$QIWV&=Ri`snc?lON zdcPZXCn&an!(0o+y7(S&Ehtcf*a8V*<+Zcxmn zh>yg|W(Df0#oIZTI3f!w&k?2$^=&lf`{9(%1>eKo^I8mL^rCsiPJ$8CC|OqYjp|l0 zLF!T<R=I^m=wwtij7ktD-^jTSh!zyWec}{%fQE z<(FUjDck*K6aKNK(-vQk;lliOTzW}fqko^xhu`-Afk1x0S%h;`!0tKc$`Zfqr{Mf< zZG4ZK!GTVwIYV@MzzsJxqT>dw7@eQ6RrnP-gl#FPcg8w4wr^0hg5}`2o+V$^ws8zw4nX=^n!93L8q#PEQ4W3jrfs!u^k!67# z&GV4LT$N5QhiPPRKh2V0>bNZJ94snf^*z>gmXno?WtR=t~|3*eXH!-T= z#Bc8YVD<;YPkB*Ri=WAg%^kCM6OeQ*Twx@KYdU4TZQ0F#Eq*P3t$tnfVCJwtH|diA zINB`0Nr9Ci3krSWg7UBP*4vR>`zWLVg97A`VFV2qfXoD^@3Wr$)&G4~TxZW_egm0& zR(qGHdV@;EcnE+p9KHkxI=NL@Q1@|!HR3W2m^f`#B?4%*7matv(^h7OGfxIp#>#KK zv$wg*1}$g@F~>QTE(okRbTVj{`l$ghnl1{KUG}rrB3$|Rtf+_iCFt~kTCm@>`cBRu zm8jRTMm0?!96ytK`-$(Q#U<{=u+zdCo%+492D40B@L4TwxYqhXlKzE|-ZT=PjsnLj z;Rc3O+Y2Gb18%sw$o(NU&TCLJ3qAAXS~eOkOvP6=V!p2jzDvAS{hBSs*H@vw6vK-y zndN4>{`3`=Nq+US^*Ln}Y*WF$2iZw)i^CavmCr`Cf)ml^34Q?mE^_|KEv}7C!TpG< zi)lh$M#_CF=K`~7L{ig!Z(0y{M-jj)h~|aX(8eO~4gD1*0&2J4b z{;DU>;gLRUpF=!(Veydi9eSgQf}u;Xu(1bf8^b+^EwT0p8uxG>Ia_oVTc_*ZlJ@7C zPOYG~sFMPd3MjEFXSlOn#_$Z?=v1TG#wC!bknW}dJbkFMBA=xDNz%?Dm3Wacg$oL5 z%k|{_LU+YtwyrH6vi>=#$B8c?if8ssI#}cUdI~Q|zwUr21WeA?Q(|`%x*UGVu%Yz& z!4akR#Fn9j%mWK<2h8~()aZ{zO37h$ydzOmyI;==^blL_IflV1unR=cTU1QxZOn?< zPZcL<@$1-N!{gzsW$VVdz+>y;p&h^hZZ`oi;RZ}&;HSIDrkkmXYf)apjuW-vAASM* zANc=#6Ul!2lNZ+$uO?g!Cs-JhgUNw}*f=e~NFb;Xs?z7AHfe?!4!V-0VZ$g=Pt(H7 zZO1(+uAtL`>CD~2{n6B*}>OXB4KPID@-dOPH>IO%+2!45`v?7 zB+z~a@`~_cFqyj$p#GeDz&v)NpKbQDt$wzRqkk8}+5AMULsBwuIuSH;Jk2)nBARhu zNdJc0yYM0skb`@{Bi4I?0)v78qd*RAc57S>l5TfQcR_9U-=0-GqrgQrs}oKX-w8vk zpW;vstw#|@b#HSJo7Y2cF2g}HVv5N6;sQ23og94(PGG;xib+mv>LeEJcx9UTxigK+ ziHE$Y)x_)01~TZEQ;d*0mydoE^7V6OAd`mnJBU=z(J~H41MSRyZa={Q0YxX@&`urm z-)dL^eUs55L=(=7;hTVMkl;XP(8(qkFOT;yo@e&hQ9}WZ#xWK+hyBqUB<8rh;#nZq zx^TwGTjJOxeTiqN8dpEExyyQ>#zb*`uR{ZHCIO7#t@v|1>gLya0O@I=u`q~?vFwlE zQHvSttmYX9XZ&`CelPM?pxcY;L(vvOsRYrq?fB)c<5y!xz@ldEFbYDFI4|C22Fl84 zIKnnXrvje_w8+^JM7L#Y!`#{)HcT*#bB!at)np-Jpi#IbK0Mgb7dOQ>$pm;Z+^}J3 zfeZH5M)VW!nzcLQjFlDd#7|c$c;YWs$#~L@?Ne3EGkR`927E8uS)75ebD#qbnx21# z;$$aD*7FmO@c&!!iR7X-j54v0-}|Pf03QmKk9NmyDj-|+{A>? z_v19t-t>K%D2%^Lnn*0ZAGwLj@!M?T?GeEY$ZX^K#b5_k4U&GOl+18=LUS#{XZT{Yo%xfR5}4Qu|gqurGE_cE5wm4)%WVm+xhu zMX|H%uRp$(G^}2~`mw1@ES}iei@jq&J+(jSfxYB`f0DtSw_fnjUhr_GYVDWyr(b?l z)!L>v$D8?bmu^;^fyvSJ|1I8~l4Ie`&agKT0Os>khK|6 z^D_R(830&<%s!@^#Cuq$O@{G?ncARp?z2OrnSOw3fI}cS5qY(okiRD(;}X4~62Ud|YJPpm zx;2>E4RsjS9A7`jsR4&HJh7ZGK*IOmt0|o7q_Joj838F@OvZ?yM{Qac-4N?ep(aKg zyL`ylK5(H%Blaj$8BRK)on^v=!ybbJoMUEA+K6-c0#bPa3PL`Kb{x8}ROvu{R81MG z1t%^jt>N49dAA*{KIi9nl30?Z`1% zy*7(D2@y>pld*3Uv9qJSZ%_CBezJG)bnhvartpX&Oo?1v2rz)t$rvh#cKAtKV9^vI z_X)Mb1g?f`U&JYS2`1jhiw=P>@`dl<~JxxzDx zTJV%JEVd!cT2fjdP-J+)H8FOxagool*8Odnn;9sf6Ya$m{G~N0r0&dD*JgW=Y09&V zHdPVTpuGqHu0WTHdlE%1i19Wf_|FBT7l-vK7H3#Oel@?Pox;`g5*JLxrSR1&WbwZ0XX>ljJDDtVH34k|*9B%avH@Z5Wkql5l z?4HDh<{3rt=AymJPw2lNoTdP3#FbV0mi1^q>`?ri&m(}3bVC9WBIcN|qV>=1c5Bj^zC ze{e24b3Bl8o4{x;^5LwiLqY-O7a{&^WPK@sRuMXF#SURW018a+od-CHnkO=c*0Te@ zKTywxcF2}z!VtVQ3TkORYW@E1&hcKO@$lhu@67(5&5xSF-g=`UFJ3)A*+)PApVN_Z zDr)fCh+zx9C;^@WJt-4|dNjbFU>=*-$hv}_3R9;p@L|2=y+MMo@zw{2r{38=^uzG- z1mY`z}AlBHYr^eck8R&myJ$^a)aM<5-|!Does2h7~s_`u5h6c0RU`R z%5l}tiurK8ZxP_==z$i**_0}Dc8+)V_n8feX06lZ|LWw~!Tn0Te1!@&#ZV;@$Pb+E!>Zr!l)rNtaCq%(_mwoX3OBx<#!`WRSQ z8F&Mj6e5RU0auc0RfWM^wqs@4Ty@Bq?(fl;Vh-*L|B>yy2%{ek6>xyTcY>V>OiJ8^ zxKGI|R)KOJJG0B9RjT-PW**^J(h>sfSE)Jj_QX0?wOxxR+5`Io4K(GmqPj$_*ZN2P zv(rm@iOr*#{c2>y)BMqf>x&Q4h~QDzT#BM z>Q0pYqWZN9*pYFxeFHBpVfng6$fwK;Q&imAqmaMpGq8mTF5tef@Mt%1=`q^R;^N`O zRNfHAfQo%tXso1i)(OU`hBNOnE^%G%Ca%j3Ns~Cf>pMBuQmm5RL2EE^?LotEU19-1 zC|r137FXOo1n}Qi4_#^rpyg*=AP9f22F11PZnBL~plYrW63C=sIVXBY(~)X#bG+F* z^=H1r1adA08CQg&(4+;r&mA=eY8-{kU3cvE?FpI@oPuS4p7MT}WxIa2J0s+|gPN^O zs>Lme(@E*Z|$h~_y2gW-*c~W-XSV0$DJC)6a2b?W%`+4QN=r8ibx7pAT%6CVl3k6 zG)Yc*mf-yNcR^1Ai(M(Y%X>gSx*Z($5C@)DmvTZ)6FY(yvs{J-1I3G` z76P@TA`fF8EzQ@>ByA&xb@5fO^Po77_)qd$VtdZIe7ShFZ5!^rWgG6TLq#zQMhF#M zEK`{=$B)a;;KT(?AgNNsdC(C58))TuBYuQ71B6Ij7t;jZzlFCyKG`{fj01&mdyP1- zSeJyM3%OELIOqn&SBX!2^5pP&i&G3Aw^{WPNQVa^`_1H9Wf24OOMBeG8v-w0p8VMM zH2mVXKQA%i^~N`w@mksCWI}8C7Sr9qa8mfngwD-kpHe2IF6WC}1kRGTZ|~{7kKWTV zQ|!}%DL>@0Pny(Hq8d-s?28aC_-W(k_1VQ~T}dPX;*YpYbDg?y>w{O%QAc7<$()<+ zSK$57-bVJaf)JK|Z4(m*8WnKQocBt+H-vQ%E8qtWa|1k_Ohr46;~wiq82!odQ$RQu z(;CAsMn@anC|GG|W~mD@xOV${dwbcjlpttKbVP``)=t=Wo<8IDAmLV>|;mz(Qga`jXCr!-?Goa zjk?OH{ILPS?`JkJr%BKDPLtE;(vVg=AOpN^c8hvZw8E}0i>#4M>WhQP+ms^@wT|a1 z52CJkJ&w5G9gi+T_47f7lnI7c1q8#OpgYJb31GhEI#XOsga&Bj`c12G7uZISO%)5G zY5r~asaz1CKz9}@HNev8kOJkBZZnSYewPmABTJFSPpJ8(;EIM4i_|Y)nk-(=UQKb! z5h*N&ebb2I28}ji2rj>-Ov_aI9q(7+?@V9 zQm^F75mMlpj0|V3^j`b;KS-_n1lbul&+vGnTBcS4V~i(rfd|JhCThOGwySLZp{{;O zoT0n985(+TXMOI}s}V9qT_fwzfAPB=sNnHtuhJs{i<7 z>%YSc_=D@dO+!A_g8Xyqy%E`#3_^FAVpDI$^_%z8JG6@{t-8ndR(g+i9i-o&aU_5z zsaTEZsyU&EsRwZ0!URC0iQwB+T3Ac1r9(Wbe$A5V*9a1Yd8+||=Q)*BjfEZ!p7g13 z^i$#J?|A+XFE2k<_2*6J|MuOD2aWpA?d=Dj&i_C3{P#29k3ILH0iVwMk6rtj9X`u; zzxX2i;b`aO%e|xDr4&??W%~ywdq>Z9cK2>o3HooZ4o~2!7kei=?^y);a_8t|f9H9I zPhL{anO1-jZfob@X?F76UUthir!}E3cZe?i#o^QaXZyan*~uZ^?`ZGaSI>8jvc12* zJOWDf!-H(^;M@I!+f|Mp@9rENAPxK8-%os#{M3B0cK~V8A8%Do>iYwm_1)gz?;P&> z>+bBX9ql~z2lTgGl?X*R&ge))W77w!Z-jFad1Aa9Qb%Pk-m^MgFeLIUO~amBm=M8cwD#XFZ^aWmlS3bB*d^h)7J z*RZ;TD7&V67K1fQZ0wj$*?(*>b#&TYg#7FtVbQ*7gxj5J#QHJ*>MJbL?RL)BKd(By zNA#ul_Vn%jSH)z4-`Tq^rj0OumlY3ctj(eidtbFbuFz-wpIbZ(ybPv`0*GFP)u@1> zM_fYl5%M~%H|AWmaH0}S4-oR5P*(nVhd4Vs)bSl$uN@fY4tZgW^s5OY;UME`^eDo8 zlzX+G<+{X-imcoQ2~_)7H&Zyuaq`nyI8lzDe}FmOdc>XxvH`4?~R_yc!oD zuG@U(mlKqo!7SaQ(i$Qo;>t11lRI^A!BA1$u{_22n?DM!5-0XGF@CkoecxqF24<(b zpZ>$5Zkfvb+dAva7K7^!P5VyWL6_6J26y?Bvg4F)pyYYR8NK>Z`-JSietq>t?<@bG z(HFfX3jrSb6+EWX&;DHd|1Xny8VKkq)-Ue{-9=qsSMAM@xaIBfrCH8* zCED5b2=8z!I)V?xc{QM&Kfv2t+Kr$LG#S4(Ka|s*cOISxc+(->)bCgz!6~6VQs}G~ zB_nqL6#?5WWH1E-VK+6cqGEn*x}9m4ir(;PM^|Im^m7^@30uZ3>C-U?xoh)dx|+LM z^x1X(;v>ezRlLyy`L;IOc1`HJK0n+R3!4eSTY7-q;P~zC{B3XN z!vD-(nwEP!4T4Ahm(%LhzeiF4zo<>o`h;=7vp0g*LGDo}M3Op(v_JZk5=VdotUq?% zE=trlPJSmc32p-Aey}4KXNbM6Z&|gmJiwvOi5RY`(fDr*?`*yBo|ko0P=cf`W~5tN z1J?lBfvA1}X$U1E0CJKd2W%CX@^KMFZs&i1e+jNh5d*G?eCU%ZmLROjMTp!zzIDUQ zi?+7^gqIs-UuQ6h^i8{qDSZ*W`OTj26gypCs zV25l)bF8hA9I#CY;pPGlMi~*|ml38ECLkD6V_14B&-BrD*S21-Z@m7db4%oUOK5EQYAECepwl#fM^G+N3nJM=5X}3d99@SQ5X3PbeHfLq6^#HJ@4CjE6p}-i6@DI zZ-n1dv6%GE$tK+DDD`V;D#6go&3u^e$1)`;+oeF4OU}BK^vu~%1HK{IqS#-Mtq!fvGi&_lUB2#AoW_AKPM9h?w*+TF$hrh%*p2cf-y+a$M zsHkzzPk}E3Vd)DdJi$8vlF~PWV?T>a>U_vQQ%9ioo8i0(ow8(mHFNs(kPAAvu!Co+ za8vn5pDyO(huvQLa)9qnwF~*GRtFk?$v#RFO;U5Bl{6f>pt~fL6hB_Sq)Tqm3^_i~ zoH(&#i#*X}Zo+8+x2C#8QWYDQXK1AgXfLW_TU#rD_p4ZghvD7USFZ5~jV<{@k_G{D z$Fs7`rE3&I%5}PJQT@2N%3pWk;%ZRa>}sA?IM#Yy?cx$ot=_YBh$7Dz zDi;s#?C6Die?K|evAqGy0%DG2G+lZZKZG8V3yG6X{?I}Js~a}&%X}Cbn%#M)*Wu!_ ze}p3dzkppUT;{jHaxz~dZ#AZ{kUujhrGf+Jb3A1}|HjZ$MQ*eyoS#?Pd#`QEri&(KoB0DL|~B?36JpyURN5<&y2*_%3K zmm#e|+zaq-0MStq(d^Qor1=Taz4{@f2W(=(9}pW1g)^Tx8dz<)H$q15=xd*WV$Up$XiQjfcoFORP+ z8wFcl_ycr^cYygN-ESG_0yxh-B(9=xchcccf%4! zePL7#rCS1HQ0qA3-%~mcITFY?@Y}{Cx4NPBHs1cF5)Ngn(;w5?m`i|+$Z0NU>lyR# zTCO-7#9?c7ky{c^ESQ|$wyv;YPjySDss@abd=29t7&7{syza6MltMS;> zjMMEkD&`M3zl#GkAc*GRr>7AuA8L&bfo22i&1U`p9MkNBfXwhZ3x!X+%1FyBL=)H^ zacC>s(_Jy{9TOr**LS0h|JT^^>LoqwyCoR=s;=p6Drym+C5kx}0gh?Yx?LN3ErX69 zp~(jZ8-3OjdW#j!GFr!~+!_{zoJ;kb;%>S+?D;DknhhU{M_6}LGlPkoNZlB_So9Rk zC$MiK3&U5iBJTCkv>?=AF<|ky|!auuQ)a*YLQ<8;+8q&`ge#TJh9CfH6 z&a4DiVBLt$IZYkNDhiG7StaKs>ou2TkI~*ifC9UeX%8R{T{;<(2Xa?CV#)N2VKONo zYUoXs5p^(D??X!nh>eUh*Ag}uLwa2zYJQZU2n=fKoIHk4^mp(lI&>EYr+ zEf@&IirEGc;JJ*hpaP;8giNn!9rayg;P=(yHC~PEl0;rR#WQ?fP{If)mGWyOmyWm0 zZYTRk_U`(Z?DgyV3(&hCO!D)8?X;{ZT`SGC6@7(e_M>9d@>RP0l4V!HF7|E?VTe_3 zd0O6f1L!UW5P|Hq-*|116gq|~?I6}(j!nR{VtwdhG?6e*8*eiss{9U0$EzxDO|Lxr>JYdA(9 zHOPeS+{vDS6)S)cKNY-fmBf~!eEIZpf!c+5+ukF*#SgQb%}V>mQA2!#ABBiAHhd-c z#5b5C%de*zTV`KxR;=@E>i!v<)6f3=7TEUwjJNd`!++`Q_wP)9|8F^0_NW|P;aWtF zUzr(-W<6}M(93tIj{_-y%SUff=eUELMz#U} z-FSC*LyklHM{iD@_UF830^QJ`e;)K!UB>eWeLfzM!FuJe5>`7QfD)~579)P@bkl0nCvAyyae+}xo2L!dkY+i3sg-+5$j zENOn>rL+Mt$>u7~8LRxP)<-pjfIy#7FoBCSD%JdUQVsG6w^gXmFec=`v>#jcx^gZL zLVg2>PeLnKZG=FoZ;5V{P=N$g@OC*--=V$AEU84kM-O5rJWdd_%4ZF)K#=_YuZqrh-e5i3>+# zKx$2jvG=s6L~T_p-TXFhX23`jXIzNkpX3joM%l*_4vMXfjR(!2wYO>O1Bfslwh&=_ zsj}zjrsb?|-WQ{bTEYaR&UsCBW2%PgTJ0!TRxZ|Jk#> zqrHROz2of3-pLPpdk6GVfGK;qcl5l4|3Y3>#S3GC?O`Y&L@X3q5fN!HXJuQEqLRZf zw`x&HL=%FE^k7uso{nF&&hD*yKNU?V}DVoFvu4~CPhXHTh& zk?7>e{zN8BrcNuEa<`4eVnO$cc`W$Dl*vNcxV3H|1vLjCvj1EFH9FaY6`7 zNI_v{JidnH37E8iJ)p*8Ko%_taFpI8p^@%4|0nPL*YtgO$nmeVsiA@9o$tar#T>gO|4ZhCLbBQ=KKhx+UN~wYAU;ME zNEL5GLUCM0!D@YkIn9Ym5wgari`Gxb2}KOE5Ev8DVGaxM&bb(CVMNljRHSkm?~WM` zO()z-B?qwclLv+65fEzG>q$R*z3~74yzgGWqL9k#1A>dv?UW`+7Yt%%{D8|2g)zMK ztn06<5HaMct7$)kEC{dB5H#qEN+C97y$3+qaZbu6B%nDCa7YOR>OM3cCe7a%Lgiexy zgpA`Ea8;Qb@;>OEFYpEjej_5Vq=+x_KKZTRu>q))eU}sFgMlG4zhjK-4R@y3D2M#~ z&+7qfqQ&}12;evU+WYL4-*1YZzOz*AU?0nY^eAWo#mdh$7#bZ>0VW%RBrVUG=UYmO zK;RY2vw_|msn{_eY@jT>?3J^+F)np1dcaBPuxx0r^LsF!xxg)YjTv4DsbHNOzihqU z2~+C9vi^DfZ|m#pulHo0!Fxa%2p={oB(-acb=;tsU!lzHEE1oZ_<7)mz78Da^#sfT zKPN*WI-Ua9g(cU_{VNXP{}=Rk1yyHmDdz?>8Ou~i$yhZauBjftX~{aRu8M`Y@Ssw0 zQ_~f&t>D3{$5c-#B?=ezUa35{3L-CgH@6U9rLq@LD!wUyLP@*V|CSGi|N8Fwm)8o~ z?ok|43&%@nbN4Jv?qPx9LuGoA1udn}2u4;WgUSP`mWTxmDhdEx7mxD$E zaFs_1^_>=T{Cn7M5FZdhNFRC=F)wFeaSlLppay(aJUDi)cE9;ASStTbIhO7>@=vE= zB(m{!-_~^`cOk7#e+d}SL({f0O3>7>IeU2gG zm)G<2it1wg-bo*UER5Tg5?#_Q49!Ewisx8vnn*c8l|>hf3T!)$rzba|uL=n&LSxtq zM`b-+P%R!l6UZ?{dCYG#i93oYLh9Rg%0W)sz-ax8;u*tDI*(c5GsAjw{yy?lb>qa5 zz3Cx=*-*rI+dV>Iwpg^7E7L z_6~X^-c4pYzB0~X;>HO&I?3Di(LT+U!!xpv0JjDA=xb>xj3V7u-%E4^U{HQFhCw7r zxFBX8UAM6IymiCiZD7xUNa1qAoDAqx0(I}pvTPdztZUw~!-;#{7x@?_%kasecmvYuYzVnZ6-W~M5>3#99 zcl5l)#ATiR>lPI_@R7_iel$8P1JN0D?2F$eV$bJDda{+8efIT%E8Ra=C=iK%K zM~;fnD+Iq))zGX!57;GQEeXPmonZpkV{MG348TAW_B*$v&lQW-d{C7gL_LGvhFavd z{n*sT?q;GN>}_?w`L+8Ea?#~TD6-R&e-C<3dH~SlErTH8tu;t8QMtUFvc(8?QNtgb z(--|&^;yZk<7!^@$-(ht8G8sd;hqE)uZ0*?#9-z-5U^Ivvtwl-{qYS`c2U;nq7h@7 zt7N^u);4p6bR%VXg62$2?-Y7i5MoO~un1Rukq> zW>_=XqEr#eIhi~M8_dAErG2dJ-st~{xMetk=)MkX#R$C11Hwpk!m<;jG(OSj z%60pGgC1;~t(vA}h_sY5$l(Xp3*7r(9nh_;g+-YbQ{|GP4Di^tWfMNcoUy6ymHdRlJic4p1=! zK-TpFJa*n1*L(IoM&UiQ0$W}MgUhp`7(pDuh=^SlbA*9KSvY^tl#rfA1A|?Vexy)p zWYp=l*KAOZ+rKm7AGhR`X#=R`jKJ8n1&VH;@n*8&0=L7{8`$6|Mt!tOMs4=OB zu?&amhvDj(^41V!fa|D@XVk{mM~(EEhHr=^z>3vk_v{|^v**tk(*69I;|M9X^vUs& zABZ2}b8cny&~thyN6KX9y@qK9m#+!NB)X`ii!Q0MCk)8#uKtgn#EOl^BzRqOmM z!wP4`n#>!&N^?Zl`)R|5Q8jg8KRd5#$${&3MagHsU6lD07D^NjMRxJUhfTcj@_R_2We4YS7ym*oST`_7yh=*`^h&_wa3~j z$z?sB4j7gRJ>qQ*XH$kS|JH&qYSiutty*hxlin>;bcLLodP<+~9`#aF+L>jHkr@a~ zVv${_9+XTPJ1Sz`G`ShpW2G2^c*Y=^-&y5s0ENH=;*6ggqd2{Ja^T+*-Jz|G&FvfX z%(nmkQqSzupO2&e#@o(EL4dBte{ODWK1lW7?r!^^f5LzMq55wUHu+=4-=r0vFrfcj zeHVS+}zHO+E?hBM?jlr;hgBl>hpZ&V<+mbvzGQhvRh&%(9*8A0KeUA~wy zgRiy$!?JuMk$qEZL#-To4{z`O@$p@^gtvn0q6ABn4{DP+aNGeX=*(}Vbx-iHI#&7! zNR@af7~rvkaKkl&XEa6aMgYB0>)F-;3}ax|h8}4~nlJo!0C5WA4##o_fGo_iXu#z` zKTzJG$}Ulso@1pV6D=2o8G#oal72eieAy_c^aWiE8|E02#B{lx9SqkA^~@nCgFma$ z+e8L)?=v;KMQCe4_e(+qceD(5R=f$3F;0{vng+w4_ zh%h!9QtxgVQ(>0vH@FJXtNjRs8Ef0zPwoE&tcYt901@V1J8fJ3clSe$; zKRQ0KRFN{hLUan3F*A2_@5~B$P3?=xp&I_zkA`jAK;NN!{xdo@$b>rktr&(N4)%&8^{s~ zH;{z^Z-L+Dwdttke>9YkK4teve{<}&E&tD4P^GJzXO=HrNR7G8rD5IUrMI{+<+SuG zm&ockAqppMoEBbN*&UpP?NTP9LTXn*-SyI^zC1iW=50fs3Y*&+WP9QK5pTd;hr!F! zLw~Hl*#Gyva2-xNiez#0hC*L>eQj>wXOy?lcE8)({a!XIgjooArEbZv6#&Qc=KYl~ zj4BKe`sm{R3fZf-z{OLJS6(JWrrt87D0nY!qqn`@qmA2Jzh@i0&DYw-ho*@)xAEcc z*~Euw3t#QNOn>{z@13$mm<%bj@Aasky}t50&wRMh|)yEq_&GXe#K3Uc^+=!FG+6lFk5w#mRmfeJFsyR(s%>5fRs^OvA6zq z)ojG@cm`qPqwj3qzvEkEQw`x`nmx4R(k=a%=`F`$9GjGnU~yfS#Y7WlR#`ituDP6* zZ{dK)2smMh7X){kJ4L{e$IJ2iz(dYfVL1*)D%hE$Vov4!0k!AoYS<;)7`K$MKgE#$cg25!1OMX? z0IZJxZalbmcPowmZr_CZMj|}Gg?o)mS%}7&LX1>-85w~! zk{fWhX+#bIbXPVWhy|e#FEHV?=u(w9M6*=2Cvz3y)RI3NcqI#T_weA^{udkyjjyLwulZ1VBZ@~fV$gP?`K#n)}Yqk;n zYefkErml|umE;dFsgTZh@c8^(eE$4!_w?kuqrKzr4xc|=`JfYTRn;Jj3G<2R zf|$U?L+9QNZABdle`X2DOk_I+K`4%B(%j>do!#$gwd`R)nAd?;<#V0+=GUY`vGKJx zNiWmQE)MymJ1mEH;!X3WuE#y~kz|$(8Z+2ABn8rFiHRGvwZwn@ky;Wgr6nzSn5}Hd z!`5@;(M_9oqa7<-L20eimq&*$_l{2X_l{TIzR}D$Vt8%Nhm|QCdoH#qPh^=*s$VIP6N5;U6O~Zrks7zm$Hd0aSgwjMy0#ANx7_UE z?eCRLPuweRcS8z>H*T2BvQHtd|Ais0W$_N?sG@t12U^(@*o&fh z(v!x!OH!cpJJXp0E)lMKs!yt^z|^v%OC3HV21C#D9T?2VT$Fg91VU-bg}{yDro=;} zVF;Dk_OHJ5KK2$eiYW4$UlgI}kiwOrH|*>5sSUkGDFH_YYpa zI?0~yoa|)J4v${!oU~rGZLivpV6lT@Www)(y`zKd#o^QaXZx(g*0}0{ zz3PE~3Um&%t^MZ@?av=}9-n--m+d@<=j@#9|7|bBoDiIh&t4tuE^X?U_AXz-t3BI! z_536|e02f?^z7*H1y0+Oz2o*FGWuPl=JnWK`eBXQjHecA&>;R7uH1R%ZjIy<``ymb&hE*w(c6q>m;cw}5Kerd5!R2V9!j1^! zKXYK&0(%W_EZ_)9{&Km0ioA3I?@$+$v2wkF;fuj@v3|*|x-4cT?8hqm#dmax(8O{r z3q@q`UT+)w2w@1LpbJ3`M-wdyWHr9IZ;@51C_a!5G&x+J1&Y{KL`bNJ^M_3>)ZFFF zscdm;Q&w8P{rI<=_v4>#-q&9Oz#{tX_E!Ac?X4v*7NdfBmW9-i&ZCm#$^&O#OSM~| z+?)m$M5>)pUb);ViwufMb;bJTG^guxpi`R%2|WKKAUSd@psPC3Qvn@cKvz?_6Vstz z21*fP-&8e=irZGa^FEdLvagtelOAsRVy6ylWyRad&n0Bl!++;P_HmH{)9`mIl^HrL zR1yjA&~GftX?2CS@@5JOVt6MJ-?SRk!-duW61aZOCu@D9 zS&CT*0R`XbgryP4bO294u)jG4{Pusyv{gz=vM8x~3CSJ-_&vrNPbJs_4na{)%hft_ zA|F63Bg9sWOe*Mpj!Ey>CgYUFE%3^--b~-YRs)R!WD6E=0nSFP+$B5ggiocVMr0e$yhYO>Jly$GB<-0Xxmnx=jOK(nMG^(FIhROF}N)E08{Xld#Kuhbi z9FW3F(UdvzGyKmk#0D7i7lW=o1d4nk=)kV zhWF(mh)P@a7~gf~F%VKs$4QKlB%FpD5pvF5}&!muZCy~0f%#+?<=4UL~W)6M$(2qn}0gm^qUOV;?^WQ{NLSFHiQ z_7JV={V|C*G+rkJ?RhaEffxg8cvoy(phbAYx7|g!_^16mIq3W zRV+KZMpk0WyRhj`y%@w~qJb!d!8mMz6AEvO;T7DqTYe@z>1{ zIi2o78c5!!G6R6=Mm%+jIVZTl$N`8T%oN7%jzXff7!3VqYtu=_4&SI?ymHq4Iy-pY zL!!fJw)bTB>He;@S{oqWjdz>(V6tz#+q&2I4rZw;cud*8G*EpZl?2$C4o)e)I z$amrtP3Ip&QaHVjbw+Jd&j0>D{5|U0~_6v#}k!yyp!-|T3t;I zpFN^;`wfz#a0om~b`k%@MzU*;-s3!aO6Sq27%a|`V@MaU!(#|$Qfm!PqY{4AiS;P7 z5PlX2fjKO(Hpte>1h$J;jPoULg-!@*PulYQ*H2R};YX~{poWNBNmScUJ%WUH*4Qne zb~g83ms4JD-&y%=v;w1|;nQv;7$y1;91n^6;Jlbz+7mv{2Hx%h9K^*18d7mY%pS$b zoyzx^A^X_gFf-cgu-fJTOI_Sxw7huFaec9JT#0~!WIu*LzKa)Klv515*eWULpVkVf zAaXOfb`tbjK9Zts1L0M$cMQoq6h+m^>t3Wb8Xk-s^=&RC>b=syrsO9oFXQ4xl#fQ- z;5#oUQdZHun*nT!#$W?1%tPss+=HeOg(RrWK#LVQV*>tDl_20Q*YlHcw?~bB1=(B z1~Ll$Q}5mr^-@u;Y}?kBnSxRZ)^b(cXsQt9Ucni`(J5i5 z9-}(RsC-+F7MA#&(m#W1L!|clP{cXH8ipuu`>uBR9@FS$vKIwV)YU9UF%bku)lOn+ zC;><+g9pH;!W(q#e_)bhdM(0pI1RLAa5q%EK8gIn5V=F=QnLw>@sYggf8v`m^HH_R zOG_h$sb&w1+oEMJJ(d-r3*yiQ)az@1OkH4VF5Y`E|FoDYAr^2lRndJeinAQ|h2)8~ zSrTjY7w<8a$BlD^hvll8jp{xtBVaBp7DuS(ewuNxAUsu8ai2q|QGu^@HC>20CMyDN zd@ZLt949cDBcs-`gh^|Pxm#Sqo0hTh*bh4>KwR;>No51pvtw~tO=~5Es)_)94;wNO zfA9g!t1BDO83uf5IAPg(&tP7;2eQl1jp|14Tu?c9OA-HOCUSE@bHRV?&GNb$&*S%z zFSnCx&;@Dy+W+uw<|o8#)P9%y{0O+Z`78f}2bl?$(;IXpuxPAo>ZWLlh`GiqO?t6Q ztV=V^!sVv7v2S~QM;XI+^Q_bLJ=p8ukdH=b*V~1&lw&D5PgBEj{tE@L7;C8 z-V7c){^KxP@>EBI6~lt5NSgtB7QwR-`AjeywZ&ZkP;>Hu`phl&D|-DU4oFCy>wB=$ zr$nY`Q@7uuxyZXWp}=`B!yF!GJ=Io*86A5r=5^Agq8U&vi z#wRquWUHfNv^J-|vNXrq{K5=(EgKG)l+EWmVI|NV8^z-#ckW&C(PCH_D~4Yr?U--? zt!Hdd1Hl;rb?9QrFTi}HZTW)+A|-*vU{-;w<>&CVh#OMLcU;QrOrVRJ$@1q=&>k@>3!gg8M}%=PR?e^VF~ zLH9)djYG9Tv*=Zs8Hb;4+OQku)@Y-;n#6}G*0#Cz5^=xI+C1Cb*x2Y~)Dqvt z@K5S(@+!pdDRKSq&$4?6NSEKmlYpG$NEbXbn>l*Ob({0BYKkW;$aB>1L!#&qpumF- zMxDM-pL{|FH2m!aw*g`*1F~q7hQxcHs?dT1P5~s|?-?SJ!)D7CL^TKX)>1g6QK+1m z<@>ydYBSrJvMEk;Cwbp{N!~Ys8wU{3xDEb8&Og9706&6-Fj@(QxC1~Hu=IE^b6~Fn zSV5t>hO}@*rB!c?!vhXj4cb)?^* zFCdqL&`sD|Xww@LLPFGaJF@~SOgnrMT`&!Q3$l}L+W{Z9^%8Y{?Iinwoy)ZUIq8^d z0)@^?vnR8`rt_Y*UN@i&i4|#H4z^m)2=2iPYgC~~`Iw`Ojd&sp=Kp^$j*^xtW~@jokPpPDz3R12u5oGNIh9kqa8$VqI3d^YF1+3J z@h2oDSE-`G>uE!uuM2d@I1aC8ul?=@l*s*zo`-hjG$9nn&?+S{rDLOoh~Y{^Q{lFq zGDOuPUCzaZ5Mq^wgi6A&^d6bHJy?)USjUAjq|S=yE!ni@mEUlnaMD6#{mc8MO}NMm zz@^^mvio}!@Tzh5XT53UWXn;!wYiT3fZ)jzd^c?Uw2k^6m{gjyy>?(d<`aLC`Po#= zymdAzutxwO81RrmoHLS#4qpD9ZvN|F*n9WI^)GkCb^akzct+3`^<;@&xIPF|=bXIH zcG^(V-avJOLf60uO-nzZsEo&h&RwP@uUcOu<8P3U;GYD)jsyeBxu~pI>2IMApnR<~ zxT&=Vs*yOc(Kn1mv_mK5gW>Bt-j=yzq6@G}Mt-hTgpT9YAvRrjCT7rVQJ0cNgVEsE z!4Sg3I(7sS#td*e#0~LA3R;$PR*&~B6QujT)D)1i3x+YGVG|JRSq@z(orxh*!&G6u)x%^H-LR_y8 z3nI4_zAZVLc5Cl`isWr87E_yVCwO1vlt#lHokrrGsSgix5k$xRB%%E}ploZHjF`2k zBTzoOkpJnuX%xst2ZS-v28->UsZ)aLu!|bY3+Wyh4FMGAjOGz~i@xJxh5M{CCx`Y< z8HJNOERxF2ix*=&6*H(*r=>(IZcsRXG|{ACK(|iokS7u}t@an#R$P)(ebC|+R5GG8HNT7upSOe!d~v;UnSst3|L~;k zhmiGasMzrZuU6byG;R2&Kdk!c?o0mF-&gz!#m)G4?^gc~1=RSbKdv6vSmcSX`S+Gn zp_+b16_@NP)~sy98yx3l_y)*1=4~S-9BVzFR3a?7YB-yWlPlYdoY1g9<3tm!~L*X^~3tpY!}bnV2lZ#BHFE)w@A0OzFn^Uz}_liftow>#=|8T zRBydwM)dBkT`x2+7egR}*_LWB%pmC~c@}Q~qEkuH98L&12D^}>a}7?cUklJzQGDOT z2t=RpPTAhiFSIwXA`6XuTZr83?vRtf9f@n9C43I4{^*v1w8ooq4Lx?AO%AKqTJp8r3T@Lq1152)kGlEkRu-)Bbgo~y&Er+V?)@Hb z1;u*p)o8bRysFc+JpRjNSBmMs+)!>al6RN=tZDS_E%|Ay**aeG>$021cGU@PS%i#*GO$?rQzKkp6ejdQ`v=7AF0jAgD(o@oj2+*i0ziBI zPK(*pWHM5*LQ`L6wo^TP8I=y6BSdm9eJ{l&+9?P z4JRD)w3vJ-g&9yo8N>b??>09!OyU@x1XKnBpTX4rVg>*x9v74Dcm|loHUb!1wI`7A z_vCqLWn^J9;#o-pW_@i+77@K>WJMeoDDA@KR|plC@V{Kk6ALrG63`KWbDC@nK`Ta% zr5{2FfT3*PMq|33?Vy)7mX^}9$h-^2n8WlPrmnG-9N#tZCFb=sO`;r7K=DZI&xIz5 z3Hq&=ehMpt_(Czuw9FQ1NHsnYOCbfe{1y;7X4@fGQET_+lE0!{mPw%i3=IHd)TN=$ z8~R-E)c$G=@Ium}7xOtx(D5ZEfSNKxx#OseB?0Ax0cl|6wu?B&kOHwdt*zMML2*`2 zHBmdMsyBn;9D_Rk$ula&F%b3vrZk^ecoLRu5e-TUc-ZtGPS+)qNE4?#KV2?qMJ789 znF4%}WJol*&!_9j-iwzfKc4QK;3*pfr&KzAJju_3H+PMcNCbuCl(>1#P-j^s85y#Dc(cR6eVB2^?FL*NJ(Dwl zMxvM&yuJsj%YkFv%o^jP?;JaW>?Anko#QWX=KKGCLE#4q3jiJ(U#>Z)zFsw_w4xq| zfsXq*%$Z!%E+cno6w?MpT!_j?^?LS1rLp<~9R%BHaVf{id3ok<;dh2<5o7Ts`K4HC zc|tct9I$UIKJbwi7E?0_Y+8D3^wx=-JXEUTrc_H&R(gAfO`P$-)dm~R#q(>My6iu!C_j9wXYaWEDSl4wD;3vSlEj!~==xNUSnGLvu~o z-1g_m7&rDG!OhMJMr=n3^SE-NS!=4>J&}>vEQ~I3#tk8Gn0e-LARcAsO1v~SL1k7_ za@-z4WGLAe)3f`n9CN{S*m#(tB9LfUb~<#E1ej!L>3l=Vx!)V>z`CK^h*$4aV!AE z6XX!#z9x@IQ^akp;b-vRyY$yFiD{M7)-n?wE=DIJH;CaSbcVJQqls8=d`@*U5Wg%5 z!iE)kMGTksC*sUJ4>Ezy?>qB`oI850`E=^-SZR$skx@TN)^c^u&;ra?5p~QsC%af2 z5@Oq;S_>T;y)fj#8W4S`eI(#NSZc>bL6rs!^fkH6I)5wZ&RH?3h=45Z*qUhmT84Rl z)vlk8_Nua$W*vH0prTx!Hyxe>R;^D}pMEO5gB63Y3uEgcp=aessE1n=qOEY18y>_| zF<}88k1IAf?N)?c<8*q()g4H8LS++uQ_aMd21jAA+Zq1tEdr*)!hh36P&Ao!;0-!l zZj_^84+seJUOM`LoCZ!($4E@t!vOi;eMn?aLi(gcZY|(WC32#hJDP5D^r?F-qy7Do z(QaARn5@IRG{J&x-r7mt+V9WO z1&#CFvbI-vts#rV6I5i8!;#Z?l)F?>=8~|AsFO>=)EpLpPx-IaEH2}0SojWu zUbPkFK)q)SDzLgS1D^E$VvS(jkr3NVVd{j&d7hu02|~W};`^^Uatm#nY!4Q;$lNO} zGx&KtgV8p&sJfB&Vvul`BT7@2jL8{5u?$wpTf&{^p9KAc~OW}{NFO|zwC z)^YNZNEc+AbW1>x*$+~aJ2eB)<qH4C^fAL)rZ1?&~jk8NV`dj{^A(b@yV;FKZ2_FDYMr{p>o?gQ;I$^ z1X$t3Yj*L!HO$qBMHQZa)VW&gbc)EF)3ZfB8_A~c8tc|C*UvUSgKg@w&CmK)t3L7N zcob-vQNhgADGEr*eS}^ltOYd5V6AA4o`DP@LK|5>obh3_nDRp->{N|Jq5QV<_;{6( z-Eutf%ky4Ah7L5(VE!9yH6a8h=1qXo#)}N57srI8)&ngdgHa}6@pY0%!OjNUEk`Bv z)vyZj+CXx-e1hDBIKmtHqpTB@G!!0Aa<(|(80@d=BmWlML2b)|&hmr3y#V|OloO>w zkr6$PlP*{3-Nf!-pmSW`F62j8Bg4@yV=v$Kl_lJJY)wcgJ!58oqSi-JGaOaW0D*yK zRTLZ-j>DA&$TrgN@XQYd9Z?P3u$Y1WZYYUE)r1<<=+uM#Pjw?ysI1>cl~GCuA>59! z+hv14u*o>$h{s_6xVQ@OX^tcY&pfzwI^CPLe>^7bBq_}S`XV;&3o$O;%9-gqcO=n4 zLzY5tL<2(-Y6iEQ1Vw4{R`H*3>>r$}CId=Rj^^i;xBG_kgrtO__EMQP^xLgn=C|QN z$sYVa#%ls$)fK!Z(kuU?c}--_r?e(w0RY#2Sfnj!hev7+v+N(9$<9Wpsi9#xvDL`k zBf)AkUZrgGqO46hP`oyEsW6jBu!Z_@Jc(v6t~5x5L^X$8n(D4hJ#f2I21Vmi^G-^O zQ-fwy)+RyO86k{!nXduRCiUkSb8;)E4UOmINL0>C3W!qp zu3{*Bpu$Ng615qQnjruP*uZ5LN6uRtN!3O|$xB?ubO8zQ82OfRs`RXAPC*O!*~4}C zA)OAv^W_Koo0o_K+CM(b9zMMHr7=BqTb?qKb+b~qgCQX<(B0g6 zNG#aM>VqY7dF>b*)u;Y|rHknVKZ)nVBoF*bGvW<8ympxL%i9Lll|fInT;jqAAlzeF zAAA)kL=6h4yi8Q%BVl5XXbD_s7e_3ToMw!-jx>XWkl+mFDa-eY7iJ(|B@Fw~-nXaw z0Mdp}F60vi>%nIS`WYz2!Y8$SLf~xz#KIS^`8JOB0VlQI4oA0ND@=UYtkZD=)b+eSK8Tlf1hC}bY!M+!O9JK$?)F9TqrR2hxaG#X?U?wTGM^%#CFO-j3ow+GO-O#N=gqjm70C*K-b=BODrJoC6uT+lFlXKkpr(5Ds|OZ_o$XRy*%Em zNp~u;&2#$}CshW#8=yUh@Cg_eZUoLL??QuF6^iZq#%c?RGidH4%pa#5Ql<)(c(4Nr zK&uv;t+Wo2VMj@9xMEO_vQDyFSnW28wiLhxrhm9D*3mtH?8>w);yE&&pPe*nd4dTE z-R_U|W!&N%swU%^qK9E`ir(en4`F%36NQ;LAs`$aSbtlrK!gBdQ={u$x4-e=$~pEg)}*}5KvI?z6cvovQ4HC2^S|wVnpB30Mcy`JM3SpK(ej~ z#tPHT6grE^Q@r!bd00ZbVbs8wYbCRYI?|${EhOCRo`8ztN2nzwv=>x(%`FD9AG&Ra z4;>RAK=a8l2&@kMsVUojfFvhe1B`TL0X?)wVQ-ifYmi6<{Eq)?Gp`ADeCKv*p&iy& z^OIBPeq^yS3XtE?W%dsCgrwj>N=X%I)9S(Tgy=_6%5rJNJ6}u3Op-8 z`!JFX(I_q+b>S}Pf?-T|LV6#O@F(#Ta~$OV$KJp1w{2wWqUin`Pl0Clo*`{Y(ZzNg zd$zr4Sx(fEB~MAtRf#u9f)d&k!4RZnCC+)7^CsuXPK|4gDgcs_&g{&!R{ZOZBoZhT z>N09vzYm^9?s&$(=-@dAgip;NRB)4%G(#u4ueih!5e?A6$?rgFwU>?jrYI3KanX>F zoMu`ykhuq5q}^w``~CFv{l+Jt_M8s&YXsQ9VeYzbAL6&Ur?eoO(0#QP-jYb$ts6k^x%HrX4mBpd}as~FW z!o$XR&C-|mW<&h^Q~dm$ehw^TV9M(SLwbXmyhAwxh&L|~yOdkD&0lbb9<#$Tri{oa zk7YH(YDK-Ga0(F(MY*UGwK1r|Y5DVbj8y{lPK2XkyYdU%`TqQzJ8ewCE z;O@e%aR0Zkg1`)?mLvqXv_3Mrd!TO&d)-f~rZF?@*R}c9HvzK4gPyfK=-}|=+2Q{0 z_Lv=ArD!*W7WDk;jV5+>dldZ9T-fng9ctd8B(Rh`e!jG0dkcqe2LsFPkAttr*F3ZX z7j&+BFtkqqLTj}(${7uqtUiOdyG5eX6+j)m8z2M(snGSL*ECxSUj;);Ck8uPU<(K_(EGiyPe81 zs-;|cn+@?<`-V8nm%sOZ_^f?Dz|;P%+hOgR?eLG_FmsYM^FB~KuEy!xVp>v~fN;jP zA8GsMNV{&3L2q_1-S&Ra)Juz@^RE)9K!XSEf)`6zeizaESlP@t&0d}rPf~OB40Qo| zdsx#lte-mM4!MPPdZRM(s%3Ouxo+(Z_TL;IzBu^Z=vx>XylvLB^%W=|88o- zx7Tcv-%&ex+WulrtNiZa2fmYv^?$FYqW0=n4pxep3JNV7gLR@LlbyBBW3tg2m(F7; zM_ablI@ZLqls+~bTfhE=)RE9QoLVaWdyb)&nqT)wAQ${SAE{O9*S+QM{ZLyS-||pp zQv98t>j${?xxdddjrX1t)x0Ie4p|@d<~(b@u%*(xqzV$BWzMM0V%@W)DLGZFYu2nY zG2s&0X`u2JoKXl>;!qV+%n(ygO0fXBvwWL}goRaOY#$9wAJ;2qT(4mRNI})5H+aFg zeJsQZ4MEpYIU{0k?H=8yz`;Qg$9%PLH-oR|aAp{xpy0GmGx1AWhXl>IP20W1cdsus zI25eHJRp7{e9K~D((b`K8-@TsX&_?{xhyHgGqq3TzDn_rA5(B?%M5uvdF%cIMx+iI zjd5_KKXjK(dYB2{B|Q|B%zJATrNs_F7x-Bi5E((Xf)@A6d?h!}mwQCxgrz!RwO(y+ z1-&9-cZHtS(~>kH`F zEC-toqy^gSC*CP1%jXS$m$c%^j92f2R1F*Rm2bVf+Uo2K!&6a>zyF|E-${MqYRL&|R1fb?$ zN$>iZh@StGc3KVM8oe@NP=r(M@J!$k-m?53qg4!J{%*SHm z#J~$%=$GquK-+k_!y&nV5IxC>E(iG(jV4INaHbxa=(~NmF~u9t^K9M|`xs?N&Y7RO zzOBKw1koFFnw%bb21c*tXeOfQn_RSxnE{tpjG=f1mL-#Yci2i&)y0Yi6nxatd-t79 z==u;9@FbcO?Mp$L*qGT z#;EVZDC&Fi`EEMchd}h;Wbeye@)<&$`o-&mofUY28wX#t;D8j9SMXAYGbA{->DpZ&I7L~S}e)$h@~E3K~)wA9w1>f z!L6zTwbv4SHQzqS@|91oN9JPequVpBW1(j;sd0xT!F`6-Jtz&kcE~*r4%KJK$8@?k zB7h-w6=lLGno-|FJK!t4NaFNm!w?vg8B-0+vYc1G_(_oa8Q#cQU#r>J06%a&&w1{n zC}BriHq)myR<9R>*ZU{w;p>xEuTRn!M~5$Q<(}*wp9K5pgyEWSbYyK*){U*jD7LEM zmfNTw!V1KPffNN`gdrbS{gxtr!RaG%f`&+7Vi5ou$=4y~g`8_bsE)CKT+r{>}8vtLiU>TgL*L9Spch3HFoXt@nJr>sYIhMV3|-=N4MffHN`OieQJ#Br^cIsAv^95BebG-(hkXKCQQ+%WU!!LhF-UI6(tHzD4|pK zYVbOM>Bwl~@m84QMf3ATMnE^A+%XOraVecg99bBZ-99e32JF*eI}HDWUOGK z0~G>JhN%e=9r|L2jt#g=YuE|;w}h-G$Pv0M*VE4>nQNvHnI&gcf=dC9^V-NQRx?l5 z@wZgIOH$7DW=ish>zmu@*2d=M+Qz-L?TsX%a5%Y15ka$iI=1tC2n=gbXb8mx2dl}W(qvq%Qw6NHrmmB@q4I-{3#EQD>}`F+qX_0JvdrnG zWmf@vga)&;BltcYx;6=}rFUrpeCksv#lk!-a1-&;FtgpwdLO#Oc&=rdd4{v#+aZ5D zL3+4AGN!SuRM@I`o*-Jkf|-IP8JXSL}KuR&R@Vc~GL0{BH# zQ(;@Qia>6?9*T^ut#5SttmvLzo?iAoJ`3LKW#OLV{x_c&{A%tmUc&TC%SZD$f8>7Q zw>Qdzh3j*tKCeuxIP&`tvSyQHPY^@|z6Rr;V=ZadoJ#k+7*yNa%`Zh^?{QYG<)uyP zi=)>#TJM1!Fp}QftowKu56`u&duex=g+OY(kT1YPsmjV!(-s`GJIcCn`WgL7>*JIW zIu@aKJMmVDzPJUa2&Jk&Nzh|BTIzmD2+OlTT-su%ZEi${ znl;dVod@JA(Gh;V?;$eKaAdo~t0WwWn!Ro?bJZem@VfPI`3WK;M9GSZWV061D4u{A z-<~N^*sw|75soyY9*Xo)@B|inqUM$Y^WMTuVwIF-Haq(O|H<9r&f&L6W4X!+vs5lQ zea_NbKVcaTf3t?-eieD%^`(|=b~AbZ1QL=w6DaXJ&}3&F3j`A<7tS=95_Lt@+Spsb z=rTB7U1TCe0psTMr+iWN1cy9J>Qm@H+9gN_2kX(8J?VPlyo{*7z*?ApakRWI%@ zC^DP6U$WaSXMd6Z-hU{o{TL&z0lvDfaz&kzN<%;Y?8&jDxJl%|&JYRH{f*Wco~@0U z;B1sF@@f7qn=RYK?`9-^Id>3?qh2`4n+{Uh8Yq2#gTzJ6mG-3O1vPHE1c(7fQUWRl zJ4$7}_Myt>AIj14!>oMwVVsY8r{mM{-$D_)wf)cR^cAke zP~hM{`X5C*F^iFnK6L(?=BhvzF!Iyaghy2 z?k#Y^0^CFT1OCtbI~@n5vT6k44isS%RcUOb_I(`byN7ti&3y4vkN*#iI7; zPJ}Q>fH%am0^0DbsS(O-fnoCg_}W-OL#J+({;^_6@=>vHi*_>2-y5s4m^9B<>gOw4 zcnUb9-0#r%R9?e?Vl#A8R&cm61G9mr<`KmLNH}&mK`tSK-KHt-G(rorGYuCwy4$_c z1U@T|PG4V-Le>zS(ryimFl>#GD1dq2_hWOj^mD@RyTRJ-_osJ0-U%es?j5rd@sITG z1}{E0DNpf(ZTSG(z>glLKky2Ld+u(+JwLFVbIo|?NLCjZ-8%sD+QZ4Om<>V&zxWGH z7za$EB!k5TU{`Jorx_ROEZ&BNw04JjPK=v0lZ-m_=o7`(eF zgOO@WGAR5xxCr;D*DqbKAEjU81)DHxRN8`nZ{g1OzU6?u3f`8+zz0iJBzCe6#bt&a z^2NG+A|W{_>k+@*0%89rUg-fW7tle@HLcSuD+ncW<+dz*o6*we1Kf3N0h6?3pdAdH z%@pH=khfwNt$9wEYZFf()0l=1evS}@pGx%-?s<^KiCQ}(q$tNR2o+JXm{mw0D4t>dxnbqrr|-R*&o2 zY5e9zNUH+tCx)|^7*1(KOg~}hS)Xscy|uQv^}vEBE*Y<6DkBGKzL2Xse@+z9D`mW zkR@A>If{%pIx|$Cnt5^s!@Ibk`#y%uo{!-+HL4p;6{ys}E=Jahetr$OZ-&*HE5grh zU}RXMWnCj=ST}CnA~aq=S9Xarc64o8$>$cu!h(BJEixm(Q_{e}Bc4cSFf_Va@RI?syEt1T zP7dZ4>2k8^*$k3-0lSo$MO?Rgk`^!EFXlmMm*HOGu|`LV;L?^0i{(2uk!(%p@7Xx9 zykJ4+Jq@97oM(#&FA$KbGhl=-=T|izortA^J+a2^V8#q7b-DnHykZCz%0I^b2~J;H zhvIC0AbK-#3S=A7?u<9JJJ+44VsK;x$U$O4ZpIck;NtVzwa`5RtPTo3U&5u0BWaJK zetYB}+V}|;fCm8{LmFeDgkaKJK!oJYP>S>!P)u>8H0a$3$x~`rI_@}Nj3$~r?z33~ z93KJf!F3R|U$vP5Vg=y!Mw+GRPQ3YeWHB-oTzO#kKuchl^Jf7kvT8z=ZA9AW!sS1;Gzzi5|Zi9PP+gJj|Izz1Cfbd>x(yN#8l~ z{T5i=nUk&pzs`~GqGE#&j9b5EYYVdr(s`|zy+c<;uWg|kW0Lr{uv|dRa?H_Xq0)fK zRkgpuI%7f-KMg;f4rMa?{?f5x1*@*;i;jWNB+PYGSUb@hbx3_iR9<#l`LK^?3!7np z4u-qJ!X)G|bDL*`DxolaX_f-}{%z_8ZVq{c0I!!N8f6tV6GD*$&W2SvT_H^ue2MP% zz5vT<<|3FBKp?4bf^J-#=+A_7S4F6aF)F|7vY3vYwfg_*vA&pibi+^=$%fQ8!1hu~ zy>2qacW*FT0@N=lDusLDa9R`wEqQP0RaSG46C>jlDcqpA3J5iZ36+j1I=Mt%sOIYS zD4De2mFQczxd4PQA*dXj0k^P#6sdvD1^dCnr%N=_29k17oB=R%+9WbKibIc3_}!Ui zwP@;nY|8OYs6Q74b@4VQGL}{yf3(P|^Ys8S8llwua~Vl50KsH4f@I4A2zydGM*2*% zi4GkIqt7sxE5t^%=Gpz&JllnM|M6j9fN{T}&)w~w9xR&=;!n1>;!l{_13pUX-Us_J z!*=VPHo@PvXksAUvA>;%y>@kAgSc|70II&vv!C)QHUMy$ z=&Epw73B5`)xYC>@va!X8u*AGn2omP7wwgx$^m*Z-maVAZWXT;G21u`_l* zhEe*M(7I_EZsEZFi_h3_{~p}C2S2yAwl?ig_iuCa-u>18(b=l>%A{uAcc?Vod}5V;@AVmZy91S>!bY4M!>&yVR6w`=&8Vd<=m z;Th!LEt~{+f&WNLa(}{D+#ht16BYk_@BqHe`0wrQPd|mf-|^pWU2Hvj)`1RfM%}o` zX1r&VQfMC&S_ zAtNmk2+kn|3w2;T4k?^LHzO#r&{7i@I(eKgvAPW~tVIqon)vZI2ZyhY_l`s0aQDq$ zCHn_;UKru^bF?}cEag>jhNgFdIp`u_11dG?o&PMJ=qXk_L3~!Is%0>C{EXUksssFk z@8Kpa{($O?`EpUe%07Xwmg|BR6n?1b_SFphMZkt4Jw+vn8|v}9%6KKJAkgb>KJYJ0 zOj55-j@+03+r9Ai7QOKHR>KRsFMq`gcdmcq|KI=jk9ubdvHyJcc;{&E736`&Tn)Cu zk;j5!jd6sFQQl{s?HN>Au|8na66t((Ew6|2%t$O$bCrchus(o`3v2S-XIU> zj6=f%bXKk@ddE0|9G4`3wDzxI0GN}GO%ZyeSrUBXw-5~#N*t~w9|Dv$USE4Ra9j|$ z_nf#VsYGlx8Y83hX`K30q4=@0#C^P z?(wmCz2_w!dKh0cuz>_yc(}hmIC`^t@ci&#pKt{KhK8ovzLHp;A<4JDPkBY;-@5Ok zK<>~X3BMie>z%J(9SmOX+71pdM|8a6h`9C2tcJ?P&G+wqed2l>%-{g1(y0}`%CLOO8k?H}2@>=-LRQ=!p9M~U3>^7a17UiiQt@b&)|PGBW0%jnS- zWYOI(caH!|(ccUNDu`O*K6UbS{cIhHbh>xk-#veyhnM4jM*`f2TA3`-xGbTe0ofwH z0ofSv7WgfMn{=Ss|7pf<{FEJ!+Ij56miv=yx^C*8*}ilmb>=p=`hAbL-r~kXkugQ9;pvBYpO z_eI#EdLJ%3LYLxNV-p0aOapF3IVF+6J6TX+Lv5yZ;7jN$4!~f1MK8$;4IHTm>YapMg zu_O_#1ppdeGG~~y;K`~~=3^iMAOQ1mfx#l;*`*TEg)TFi*WlmLYUZ7p5xaL0AO|MF zz_&Hx_5QFC2Kr0v(6lzv+ytQ}igH8XF&wZ(4TwD0A$t-B{Fg|i>mSYZR8Zb;*A0D4 ztB2Eiu}L>)hALI(QPE6-pu`nGohhV%K|aYewHRXn^F{Fv4)_rBi~=YD)Jhzw@>*dr z@k;6?Cig9|UI)+ym)evtur{RDF~ip^xA|r`vQbRIhsESV_Q3-uw_9g9C8$D5JB}OF z1d+!d-TN`Vq7c|9LX`qLsJX(B5K2bZ2#j+rjW#-ADE!~lJfHHq<-y8hD@cX^k|GWLk)}Q|0Ki2;%!sCy1|4J|Z^#1;Py}#B)XD6cj zt}MpAo3D2Y%CEe`9p_etaJDde6M;NCwXLVQ`&kk>$odQjT_fqk zm^OjwG8`{Xg-7;=nZpGnSkjV-27ynw0K7Y(ngSrwp9k%qvDp8S=Rc8z{~m|`jpzT? z)_r%_hv)zHg9m@cfB)F?pRu_A$itty@aM_@D^7lVf#-Y2JFkzC8|d&wdVDh2`67LN zJos!kJTx&^l+sP7)9WzX5H|v#q80txM8BkhnyZ~%Gw4PW{`!-1F0Do)(|kHf8EW|* zW~ncM>tY6o;9zb`VsE0>v-Jur@{1f#S+2cZdeTnGzJ=aj9Qgku)^ zAppFPhZe>HD;lUK8K8NQq~4NMCsL$}Nx%$7grp?ZYPe>S{c>U>W}?=aQiQ{5LmX~* zw&%+tLZ>|_5v-jjl#rfn*X6~U-kMmoGcL47?qNuozay|DL#>z(0PdwW9K)(p_sz7= z#SIz~^7HC(#MA7fD$3f#Tz{{q(VHp~j;||COy}P*sP!fCJ=g*Z57>+gjeX=nRd(W; z7hMzG3}9)BsUMdPmzLNG$Ao0Yq`*1HROMPOZTT+OAQ3`wU)=;`3aQ|$83~<=5p@y^ zf)65VhV|kN^+{2Q0D0n$PhLO&=FLC$DCV=bzpLoNu&4sI2JhJl%bofP+sPs1Tamq8 z=3F}G)*FYG7#q?r3f!_)<)N%yKYb!OI&e)MIM>cKZ9}LRl)wY z!;fHu(bFq%w8ElCz;&$=AYq9_0wB;mjs~&nmA=$>n!l&y)8zWmE(lL^QKBs4x;Rh6 zfJh=lm%UW%xb@_7LCL01ElUm+R)(byZYyV(h~oTl=VD#)lQAmIO-FF5vs2h!X(q;5@7tPiuN5 zhnrD#fp>OqKCA$6_nD;pW9s z&uNHXiyt69q}H{hs+=sbB*l$a9<6G7{1Jo$(DFE<4RiAWo#Lit@tfrZi<5WVrXM$l$fd4F%?mCGmC<7&Fi|(TXr^jdR(J2VEi63L@YQfTV#du> z_i|qgkesN+?P;(ca2}X+o1=<}%n_Vbo$4~9+3BD$0O&LX9iq&EW>Ks|VhT^gIZ&X? zD18e}1T*{LLTO(IWHsjK1`j?ADf5$M;Djc$NNB;W zZ+9GDRJ32!Foflpgz!`Z)+om|m{Cjx7FlC@Kx@Vtm?=pEHKW>eq7_6Z*p4dKX#R5m z9k_-9v?qLzYmd$FXxjq~@m;YfXLN>>sl>;LP#7_XUj|iMRJ=;!?Gg@Z<~4$X&sxu< zg{BUQr4O$JD`L%=@$4Xgu}E&Ra%LX5O(`rvwIO+dDXEoP-EaakJIQ+T-18R$T@zr6 zu*`z3CkVfF{THhx`4v)G;U6iNfw090eKZ~BHkqniR5+*u#qJO+pY2iiFOTL0cr#Q;TQlukD)o7mP{mw)0bFQm`u>} z3=j|W2i+j31Av!nF=l0)6(^&RCrEsT6vtG8i94DngG`Wx8GKxB`D9Xz3b@7da51%# zXBUdL^*&f2zgaOAr47=Z(Uz&im@%;`bg;B2uB5N_3GWc_gUe+$<+5E>VbNQVv9W|Q zb;KIx&6FwtkD*!KU>!66)~djaYUwp|Z318cLXj^?VdHJi=1Rhv@`>STWF|y`h^5wG zM!cR(3t=_m(pMC+Zi3lP#^$aRb(_oI@c>XX9@xmL^U}5Gvl}9i^)18|4Kt}XhC`k9 zk)rWbEx4P%PWnhco8yIl#cX2GVLML*qo|y5jxnRXTyuEf<9>BKvW*980IDHQlr!Sb zz~G&-yVtE=I%s%dxYhWUdP;aa_ct~eP6j-+s*1v7B2pohEX(;sD;K4S*-FT5`!akE zP=0vFfZH;g4>sJRyx|R+&Vzd|ha$DhI^i*HNXkx2vISHcq?=n0qh>oIwqY$A0{_#}NU9rY;^(T77Rp8VF2o4EawOuNyNVH46e#66bjab5ol+hv^*jHZS&hSeK-wqpjl=@M1>LME6 zxXu6W#1~Jb9V%t?vA2mC%WR4wyl@7Ajk;hxyX#bUsL{$7&IYX#%uikraeCFOvwix= z276KHO@lL6o%pN@!hMmklX$^I_Jn$;JVlWhj1hVZ%RBT!pclGJN7)$zCW^h?sN@LP9O!dH0s5#0R61)R8|gQA3oGd2mI7wq4>zI|78 z*;?fZ%iMG>S2GO3G3Y(fvVspX&a0UFb4*z-MR<+x-n;RQV_t)rwWj@ICY(am3;ViD>rUTnz|VG zJT9#7ARBN?&~cR@s-{3dGxUn?E7w=IMzpOeY>UPi3I!4|zPa4&#*_PY+wf&JN)M0I zufyH)y z>g|<%nN&zZE_0`QIz8c$*T2t~%lV^^KORHe9ITpkh`QwKZl`_xW9I(1wXt#E{n)&> z`6=t@zxIxGRO5reCor0DjQ^X_XdsTmpfllfL)4kAd+9$`?!4UE*xb4Sac1lP48)ms z{FnLF8!W(k<7sJrV?N*w`TzIsJ@_Qb|NCTf`@x_2e}6RoOMM0W;aD&YUHUUW@ZVb* z0G{2}*=SF<3{m&=w8F~<)YyV z%=-Y{gg$~pwhcN(1^{a?uN?wFlxZD=2wLX%8HBjeYX*T!BR?M;aX0^^!N6M5YX<|+ zW^Nt~f}Q!D2ZI~E)nITpZ#@{duTSCPjym}zCo~YZB&vgTf-XxVn>f1yA&nV~hK*$E z-%aQ+GXAFi*(N8{(8xIwPdA%+5r_beed5g?@xQeNGl|>+L$WaG_6;=j;Md}=gtP4$ zLW?xL6%Vy-LKXz{yU$cj$c1JJ~;w9gJKeJ zt0M3=^7uhH{huXD|9h7xwdwz><;02fW%&jmjNgE}?hVF7e~S%pgZ{t$$%D;U|9`N3 z?@#^zkJbO%R=^)@1GIMQPdng`u>;&}w9QGkrdE-&{YL$-n8{V5e9=J|DumI~S{1{$ zc|LzLEHA2m4H!_;1@rgB#*EbR6o3mVi?8}T1)zNiw2qVymjMhmty}>C6b~%CS3g~5 zta2=6UU)`9 zo)vxzqcw(fkhY>IO!)~$6qBvSKF^X`Ph`$L3LbokLm(pwG2uXM1gRH|br{`i8E+13 z!I(?!16TvNScqAabXpxiO=p(fQfGta4e+PtdJE09MgQA;@Ou@1->Cm>e{z58L0td6 zvAOxD{`ZIKf13~fSVa#q1^(3NZlTewVEU$oXJkMQ1|ehsdIlbp%?E4G_D)a$JsTYF z?W8YWAMAk6b4($;sEsY###X%z_8uTKDK>LMd)v0X?RtBI*I)1L?+uQ=xuKnVww-(R zcJ>aQ?;Y*#oa{cop`rV>q5JiQ=+`yGmz9*8-@Mvw9-hsOU=eNL zEw6VF;`5rj!lmcd9uLCxbFmq$Huu+)u^L%0~$cstF|wvS+%@vZ~vIZ{`*d_yu+JmQ7x}~kw&51B+9Q{uQbN)QNK!A zXdURA-nPA|`unyHU(No!^mQ-h~x|x3RhRTTTd8=onjP^zL{yH&c z2f(+BwaE47(?dpYZ_`*-fgbAb?%r0}FpmXy5+aGguIAtAM+(X^#)bnf%kYl$xooAEctos|g zbxWk~*P;)~kK<7O~*=5Ai$xx<|ou=`GBU)$4|TzafZ$JJ*fs{ToKL&B55BVXu}G_up%y z?7Vz#jIz^-al0t{zZ_sUBNEdVU*jp&K{y6ck0C|`J|pDp^x^vUMiW@tNC?i-0E8QZ zhFp1F2_|?9?p@iCC$p*OHyPB|OsDX(TqF^6pgR8_+B^VC#k|P=>At2S61Wy?hOl&* zYc><@Kk|Zbt@5|!beYZ4&-2CTr~HhXT3(hOy<8xII5E_%ONg9SiF=G9O7y7^xR}+j zjR16HJw2T9N5otfMUN{5XT<9N<<(rTDHb-h05KsThCv}~Et+<{E(u5{amvvG;TNYI zPvW~2ODqH`xX6&i9S}~DQoNsDKpfrTtA{s8nHI&nABO1|%$(xhwH%Ey5Y-tVoM9({ zb&KOkye!P@NwCPbE+xwbGErc3xfV5vn(<-iuLeg4&a!@#4pQcwhuSI`4=!$oc$gq< zBJ_q%xQ9x?3b`e$pHa5R8z984TFT|2i+*-7c7=eWZp|h7+Aj>eS`3$ft}3j?k8*|s zYWk#wrKqpH2XGyzpM$sb7n385FP)W3X(#+5qheBO2V^-1{h?>LP@^swA6uQw=Ty|Vr*K|~leR2rCm|fJlPIue{G>opxBJk{ zx{*BN9N`}ELfGfi3`CO>61m^e>zaW6P%#x%EvL_DQHG{HhxL)~k^mOwi$dA0pkFjwR$C}|?cwuXw^7>+^$vUqsy)8| z2^5yGcdBz@`63{>O!}+OWRQdqSSNui@VQm^H0XrBx^J39B=W~q3I@K&sahLqYU@wk zo3Iu!D+#`eF*6VaoGG;;a@lm5V>NO@fWrlDZOU*XL`x~H=e?SmL7rZWAY0CyTvpK+Fna)H@`EhgZ(ggKK=DS^H^2<=DQZ`J#t3(+6LZTDlp>te3k%e9)9 zh*e{6OB&7&Ca=Tt6MSh#VU1J-hMCvb6b(Tq$eyq;GT_>h;(ZjeLbYw6HQ)fpg_ZbR zU;oHfyUS7>;0v#o$Z+dP5eQx>Oa^w+tIjG^#(AQc4VuHg5kn#&JS84Bf6nCZ=Tv}| z>xvM_WOGOj^B@_OQix*|aht)5dp<}L_6olr_Zx=?6NeQJ(5DZN#{e1Lmu=clOpX(< zb5Ao`|7^1Xh|Y=6f8`PgtW$l4s(~uL& zWu_5-3=3D1kts{q9I`Dr$hGv?dSI^%E}-ydEM=aVbXJ zoGN5iMeL=xJzDw2e_5lWEL|3x)^oU0arGJk{&Wc3PLc?lUgy(`gv;>Fxm|Y{k6CA>} z0gGMWaVlVB`@;-@J8qU=a&GWckmOj~Gc3+(O@-Xyz}5p|&g)5HP7>#Gbem9RH>q7{ zdrjOx3j#0nOR(w4g7Sy&&{WeXew`CG*P{>BDi&76gH70>s0Hv+?>tc^ZZ`v=BefMJ z)V8J-5d2|W10izj1s6_PcN2zoBHj~|g)NhWPV&dg2B&(1COK!RnNUr>r?&{Z=7CfZIKh8|g-wNbbDBOr)EaL8+4h!yWEwv* z8jpTr7>Zb~o09NngXg^F(b#R>Hh!aeHxx zEeJeav=Me(!!~yx;SK;tq2(O!BL?vtD#RvWVl9ZXhYn=|=v}~pPMP}~FkJ3HouCe( zK7IXoJ>Bu}`0BMYr!hkNgE&s$a%|p{U!c-Gac?slc`6uZPG-|QwN@j)5@DUKCp*6R zGaLXG`1pkL%;}iwb|gw75EQdA?LZGZX;|JoBAM#|ONf0YL!Z z=_avW25NJUPBx-q*CU*H90(5_g+rfBwZa24CUwh96!$^Rnq=SV?M*MD<#<<&$pk#l zr*m;k6aes-=Y-PQYuoE_xGu_C57Y+~8dW4v=&&P&%pYg;_3`J2M<*l)f&(zQ)6l@j>*bVbD*Gqh)7ppKXgxX6G9!VU^4E-{!x~tlOx6`Ab5t6J{ ziA~UqP*_9}WQ-UNvB)JZ(?*Q(VK#QF_95Uyx?R$F(mBH4%mcaC;e$IyZ$Jg~S5{@x z+TnrVr5aR3hr_p-rY{Q$rUCl23MH`Z*sjw;;_%L`)M;Y$0^yxRs8Xfp#o4+4xOV@x zyT2-lz9eX%cICY^J#c2UN^Mv>N4sqm51%w{Wi2Q1M|M!N#tYA>sZ-10mw5)ArEW>6 z`%@c%);ZF-gpS>CM|d^JRv+kYsg}T9mhnlS#BQ_xZ4Jga+GQ(a0wESb9I+1!Bt8C3 z-d$Po;y$KKknqi6hc`Hw)e**O5eIVG`W=U>Oo>j|?Fh75FyO&GUCi(hErtA#q{Tya z7lX3^-jWS>2w!rXxd?IL5u*SQ&e@ocW91q~0iG45iL~(ZqNqZMPlAFfYtbf;3}*6g zpzoAHm&K{A<2MvN3rSjoh@7{}BS*6y(TPzif@}_Yic_zULy3)bZl$?%Zno(r7$zD^ z91;xR`zEDFF%i8dw3K6{pTu*@$jOy?duh&(s4)hLvst+aygXri4Tp^BE4Y!P)$Bwb zN7d`PsyVC+WKfW|l3<9f2|^zKh7I)Tx;bv-gA!r3F9y$ z{=3zjvwem#bfqV5Qd%qjBA%w9oFw-*x4uB7`=wAn44KpqJ&nY7Mai6)cgy7F5SzfO znA8mk+>&2M|2~gdOaFwi`ri(K^?xq@YolxV--iGCC;!7AkN?`Z0{(dX*XC~hsS*A$ z_^*FlW!nE7{MR^bzn1d(C;sbi!ha2NpZ>&u{T=XM|A6$pKk;Ax*Ta8}@DctsFxVUP zzpd?0V*aoD4?fxYQ~&#);{U@M%l|3vKkUq(y57H6*Hf^QCft;pP*a-P`K<^nO>G5k zI&CX-=e4%=oBeUP4l`djXG)oX!M2@T2n@EWcn6D%?h*-apFO&(p=0-{?DtP|W zjr6A*>A%na!FH>cvQAl+Z?9Unsl*0spfF@8HhPw)-t-oeT4(Tl;(?yUgZk9JR9A04D$4)$NS zz-Y(F?AJg}$3W~&fYUd?NZYaf?LIX^o(gfNu0@@C^{;_e#kWI2ioM4xeGRe{1j%`fI9WQVzZ$94Uf?6@eW>SBY2(B;8$ zfKrExF{I-|T_z`POZ6SqSVwpH4g!J_T<^BEYJR4Zz@Us$J9THLX*3)NKk~!EXuqo|}Leh}$ zg@$=tR0tS{>2B}-cn0d%Uv337`UovH}ZnALOM^z5B}Ydv{y2595r3IvZSFjE*ZUQG@LjMx49y#fF1@=t7! zfB(Qg*P@?2{%Kk}DBbAfTJ@#YjwEc;SfFWw3j;^R=>Tp;o#$0SxM$fE*CI zRDAIMK~i7BlyH0fY*DV}T%@6&LqVWhije8Bpilz*CG)5qL)z7fQi_Xy{@tpy>+86<$lU#MQRUNjd6j?yHqU3UTWM@6TZcA?$DpcboiCihEKX=l zZiTJgB*DS54b4bM4i2qI$xtREl2c`2SNk3J}kX|^?7kC4p z#*|c-B=~Q-#cv1R+oZ$ksr`-Xg-?RXE;9z&>1!#Ud$>(G(x?rTIO37Y!i@G9y}qxx z>icC-l@~cA0hvm=xm!mHWay?0LEtdImkR6by3$no6dEDPnRZ|X*8px2&MQFY=(tmC z&NZe0Yo_x_HGdduK*&ES-*KxGIy1}zn}HgMglKm6yW!}2E5HGl#EU<70bUUl#%l&W zuOaMDa0H=v8l6LOzu+^@c%QOtuCG(YUZG%3Cv*P*hs(=>wY4==N#PraXx-gNe~`e` z5BR~R{~)`IpKRkN_$jj)rAXV-wN#EqtHnAlXAn26_29+f61h^v6qF3sG^HjVPsdk>$H%+J z$4OA>9bg`o3!g=2g#gY~_fFJM4-T4S$>IRfK#N&zb#zyiH23kLmsq_({t$9WMKzVb z|77!LbYbur-)ldU=B`^Pv{SELA1p8zc20S9P&o_~j3gNWy2#ds!*Au3#VK6nH1&Ks zp(c&MK%|sNbV*?-m;mmEYMFLs-0zMDJcT1SbGqtCHPtH8Ad5*P{Bh#QEo+fe%n7sd@B=B+9>f1(#7KPT`ah6&)PxW2h%21XUDw&tD8e z2L>tXifTran=}C(W;QV=^Jkaz3#)VE0G9n0ok4X>L~j>iA_}TaV3||xtUrUmOXB~z z(P6(PjL74r@5Kq_**|KRVTKu^Fun0y9B`Gv?5C?tmG5KonC?R^%f+trk}xqXO|Q9A zD|+jt+kiuTi^J6sm3wF&H4scMEf{W-pm_>L%V*!=P;vhmgW4$YlJBV zF2ca9of4Tj;jd_HNr(|{?AFZfzBiz(M}yJEfFRY|k6Y)s0nN7g&iWk3x5896-Wt!b zN!<$9J{6gB`Mn_G@tzVfEFl1&)&;wqyt8CCk}yF0S@1tf$iNBKjmJT*p<*sp=@#9@ zpCsHko|BA$hk6yLqmvct#DIV?R?i1l$79{dcnoLrkYS?`%UuKyX$?;3EbobMM z$IMDRgs`bPa${Wv@Nfk}Cm0ry-w3~|m>`<+CMQ}~fGBMXw`t{G%bvJIqsM(Tjbf8BPdGsv9LZ(iqzP!s9*>D3ML_FHM;nwia=X+gsR0e5E{bL4i%yOyn_3`F z@I(YJhGu_Q@Km3pdM84u&OKKk^Zf|#S@1Xb;YZ;qbV42H<|7BW zN*4LZO(^V7en_GZv9>Zrd)&nr_pv}to9sBCtQ@_5ish$PuGBa+hImjJOS%^ZI zfV@4LmdJu&qMckg9h6W6_+H#u36IyFpV()X^L$2VOy&V$E4T+m<#%?$A~*2Cw_G-? zjI~dbfG95^_J{~gh<{k1>kN+gRZ*cR8s^JOka%7RsK-wvJpv>t%1A{cl_{VDzzBAY zg~FN?svqwlj$bmw7;9Z)ThST|B*@IW(eS2UttyyBnkA755*Jb-QA6W-$1=5h=jGt& zi(WtJ-g$NO`e3(*>#Td{W6PQlbl@dHKF#{=7y)Y;Y$2qkxEX6Y zufP-=7XibbsS+KewDgnE51Wq>&y-Av`Yi#JD%GR;A%MV1!bMl2wX$!N?R^D`1A7(Y zD*ow6bqBbnU?H8A5Uhbr(mwH!QF=(0PRsHwer^&D&NCwA!TFCm>`{2Bx4NqE+#5P! z;dIDxzuDkQEyQ?8<6!pbLGVQ-VQ@=lHG-s%nK3%@rDT#ZR_Xiq?@8IMaJBg$ecxVn zaQJd?vhz7ejS;$_VX=?1#n=WXU?^bQd+=3JLQP91bqA!$;vMHyFmgz|uByk7u!9~S z^3q5i#*l;e6g*qM9l7Hl3Ly5$Z^92dDBtCjGxdK8h*(Sh|L>Fdf4ltu?aj@5QU3qd zgRMXDAO6_<|35bI|Idv7-!0>R@8IO<@cHYV)-3)w>)-wN_0itRH|fsd!SUYn-J^lB zf!$aE@cMZ7D1Cmo^ZMoP!O5WYk#P;cHF^2+#qTN%2|RJ#gvR8Ww-pp z_4$}UX~EO)HX*8!mS6X`F-60BRJoG}U>0D4wIa_x3U;>`fl4F&u$e_V?J96W5`dWZ z1Tn43A$v9;r%rDqr%t+U zFjU`S9=5I}>~>FDj2ovS9wH8=UN`bMMDBsX5G9R61mfBCVpz;F>lu5v)`z)hge0cc zZaGdn=L_&SWVi{d(RpP2FVCTp_$FHKG^F(=t_@F!hI9Z)BN`1ukzCKCm|7l1-L?s_ z3~;kyZAnA3+gsN*3vA#CvVo_+7aMp|zxHM#aJUXWFd zd4HG-Ecr@&DMcjwu@Iq7`(mY*>tiS+pZesMNBy3pzOp*e1`#KNp1`_IIiXzGEEop- zeQ`naL%bMp@ZDeE-0CM@IN0M1MfAs;4?cF%f*57S9_8Jw1t!5!mM=(UJ}VbjP(3gQ z-vmsQy8Ucx_HKD177(G6*Oz7_ZfQHAF@Efsh=oBIs*{+zf*V>=eOAaB#$P5PYags{ zuWy8OKa!}Sd>?LH*5o9eHYNb_@QO!p=1XGU^~B=W1qqbcu}P9^hB*5op~B9EIJ zLJXQ03%8Bgtw)}k#>c?`qP~!g-#JAJ_X(!kW~rep<1GPayS`X9J%eNJ{DQDJ>w8x- z>4IG;pSHm%2%`R_YkQevddv=sGn@?EZJGN_(ccFqTsY55NO1%gXCf^y7CbFKbiz(D z_H{z_9{4QZIxDB{L;9>N&s<}Bv(b8jPE)1-A*hE%?)F^;!wKN?3OUd2|AL5LA?j?DH5Z$S-X(Ez_TlUVXVeMIM@JWi8P zCgo~o<8(W85el1evB311D}jodFPwyMf4(?*l>#NGuQ7e(yFOXYAAS6>`|tXwdcQu( zF4nWr`s(e+^VRUcpK5^&SB4(ZZGUwz`=*TGpQ?Y zLA_dfy%7UN>1bMT_HM+PVP`r~BaUfly^ScvcWDz-Q`lwHh{F!!M-h9{^FYTULP)$$ z>S3_wBAtk81`pb+3PU)I^^DuJ){mpz!Sk29>&y2`>;wJTysi!o57wYs=H&2j|9I`$ z>%INwdSCF}8~n}>IhLGB>P@*?jPg)!g(^o)8;7Oog|>SM9*>*_v`q#lxs8mYd{~DR zc5W~F3>!4eB>Ry!Yc0K;vgSE`i#N9qZ5oGu5HS+Y)ndVHVGx1zjA2RV4KB|Ptakd{ zX?5l=r>|-G{kfac$!dy96+{P0DvT-LQvN2ipNytibgr-xPKlmJ$At4_s&jN`7=Ml7grVuJDDMRKK@!XqH>@Kljj!Jh%HSHmn5EB> zO3jtlijnFA*p5y+q;!6^dZ@w(f~reQ(;{9&5Zg{G%ogrE#@AFG3dtu?v&u+CyJ{%N z#AFmHTO-0YGIaF;=tw2jOs@)qGxJhv`!)XW2?U|5Xp@6&i=$2owrM0TfMnt>&9%ce za0OPp1iN>Da;`_K4*zh!Q#3AO_2eTO*#H+{5L@o3gtO_;sV2%hbI(4sbe+aDg|bBV zYLL_WFs3RdUoqy5Ri4C2UIUL>#$JIclBm;4+ zmJ|3_SU=R~dYBa3pki03Gj<#z}q@Yd8e3xiIO?t&c^x;s9Z+$`eyC zY^&gAlzQui=WLZNP`b+t8V3jQQW9hXr`9P)1V{;}UaoQQmi!Xr)DEqKk18c1=22Qt z244He>UCJ3#+S5Bi(erAeWBCtm%B&6k|)p#P+eq7fmyNTxy@!loiGPdBW6cUiGbO2 z52KTfb78|Owc2=7`eNk2a_#iP0%~0nG)Q0=Bb6+Amax}S*oWy1;c^L+hHy1t`l}xy z_pXU81#=zv?%@aa5fH01kCqq%?4o2|HhNiO=9NhW_62xsX5$P%I-uJ&uVpZ!&_66E z5p!Ci&Z^frZI_`fsS9KU73RZsNSw}l2HnaQkiv}Md%Q4pC@96+N3XHB>*+yWf%IR^ zriGKU`8c7vP_{^QQzP945Y}N5CW^522n7aDHTTz&xGodBH6Dpg$?^BEPmTs}FpmFb zfA8hqiAv<(grj%M;{E3EOAzmXLm+aQO_)%XY{UZhh0%6Qc6823n~-Y+uiA0b+2N9t zKEY^^GE<22uXk|rj*Lo>nF@d2+paQP-b&WzCVZnk`YP+?If)mlz{?K@T)uVATqjEFeOmHXT%38w}axnY8Vw{@ zyNKqrf&7pNEef)+P4b0^I%va?z4bQL#Pdmp`XS}`KUK-iB05@f$$X5@aO zrU8`%%$$oW6bD>YTlKlRU8^q>_;y^J!I*At^u^sgE-x^^A->>S=LX-HvAFRt{RdQ~ zE|B%~-VF(h_x@x({qx^#`M=z>V_E0#kqCMd|HFfOTQUCg{XhA?{%HOOSpk1A^MiKd z&y3JNhTltP0MUR6(8K910XtVV1|_|PsKF401x+y}*l%lWdn;_rDNetpvENMlfT>6s z4uHZBz8X5^luDog@5vPhw!{(BQkm%L9S#}q14*jhtMY8t+M)9nNNR)B*1 z>tKb7MJTzFBG)EvDS8HWB51%MH;>4$1cW5O$(t6rR^4r&&iUZ}{q6gIQdIl_T2;&W zZzKNyz4agWwl*GY-LLUK{K^0R2cQ4qo%lmff1g+X=h^@JRD5U*4`xWcS(5^SzxE zAhQNL?%s6g@cHiT_#*V4<8*NFJbmdp?mxO!3CXj;&KJk~gX7O{#Tl`)ceL~R<%|8@ zukm@$5BJ^B-HJlu1ynO1pB%nQyRUYS_70!--Q6cWZ05ANFy^6c;$i0r29N-bd5{7s z^Zsu7d~h;IUmxt9G~WNIz5i1;RsZ#R;3oW;8=fzAPiVxk~b2g}a=_2l^VGhXK{T@03) z`|HW`*RS?n7f*Ime{Xv5`sK5>g}NE6J@?m>gTc$)=jn})4p!bKvX{KtJ=trmzuFAe znfvR>;N&-0`MkL<*ayNC$=-_1U#a?UAgN5h*!cFD`&5PZm-GiN$ zS=|cOnEUGqtf-^*aqS#9C6I(Uxn3G(QMVcH4>*%mHJh?KTm9xNdDmmAfc*GD)W z*FPs%J6qw}Ne9Q!Q8&(R?X`_du$0_iPYw_EK6`!i`sKjfn>r)!Wbk!!3&Bd-0x@#f(Xz-s7AW?^3Pqc`@1FWm)i|rQsRO4zfEou%A;Ds|^g#+nC^Y{r z=SobQS}`okw@{5x5|#=M6J_oLh9IQUawbZ(p8g}BOcwc7`ohiR7`okgnK`=~GhdFl z2fMxpoqjT34W~tQP7Ctzqocf-PLZ4(RLHcg*MR-O3zc%ElE^gX2zlfEl}}5}D&rA= zikwA}g$Ro#eL!Mk!WksFeeIizGC~m^e_16MVX4Ek^qVknCGeBaPhGC zZ6rTjhI*W!9MW`HUlfc(8vx(v+n=1<${Sq%07dRU;iom#?r=RYlc8L3Vv$enAuJUO z)QP)Ly4xrPe?!gAO=-S2S~q%J*g_u3U&Q$c(dF8xA@DMx?5Xl)0&weKZabkt$VVJO zq*BY$WF-pjw#;2L^OP?RU;6xAty2}icocIZsDzb-Y=w7U6qqf0d0uKQNhV3#1O=>Q zJdz*fP2=#f9&+tBJ)+&lF$!NW{hGu37!v}0srO5U#}eWN6H`EB!o{<^)TzbfQ6 z{Y7dYstCo%1M6Dp;mOtvM7A$M_ht53NGZc9s2qvFuDH%vs94bq^gl_VY)kkdy|A_0N!Li#hS&Ms>^9Atk^$n|~aRgViM&NEX1oD(NbRt4*gq4Hnx9(+U=2EL8%tVBpaPALKX z^im29qBmoc#wn|aOK1ddy1be@X_T0H4@f>cn-xDHFdeXDn6ePuH_)L zRebZ1@dtzvx)7#U#9V{O4mGkWKiJ9dIM|{~&+4rhT#l-L zOkm}CW5?WuZ_0#n@Q&E((De^_z(jR;1SgF91yWd#((Wi*IE~{hXQ0QP-}!xi;r@%X z3$0D^eB4XS6`TdUW>g@NlsiZJFZ%X$CM*|%!$pM@%6Vs3Dv^1JeDP4dhWO@qH4sHL z-tt#J1C!MPSC&sXrCM4n+?C7daDgO!W~eN+lxkL+Fg>1&Cu}?r4zH#zNSd(M&Y<;c z5x)s!8&v{Z7fK<=EAW)myJ0D*vIrX4s%;_t5G|=j-EHTnCkYYJLcy>1U+CAeJoq;K zCb})m3k_}>9DF19)m9C%T*+1POi+2-7EfhTG{B^Df?*+u@G5lKAQF3zYX5~IyQW7+ z(i_eYc>H^=su26T08(1nmGfNy&Yjuc*9~8t(e9I-vePx zCexh!s$;hjK!p+%TdLe&E>?sIZpZ^Gu5RM`)&PoX4Ck%;%!?p6mg#JHet0qf&}8xe zRr%6e!NdGK1BhcZy-yD;t;bTGvHW;qIfc7Uk7{%uJoECqv0SohKhUv{yYK`OmL1j@W8 zs(j0I?P71?(4Mc(jPn#~JDpvTfeMfCXF>y5AS$`FbZ1dzC##}WkG25d90J;y6qmx; z2ZbRd%dkEKTyD$K=}BO5=p3<2B9IzfU4%%=NO;-gTTVc}db^Ad1oE141Ch@UMx)u+ zXZ>3S;mb%P@8_In zL72j>=}FP8)~}L>r*BMeY=u$MVdKY7c+4HAE+%3B5x&D4=HQ0F6=AIbZQkOGlH-Kl zkI0)s82hdJ_itI!bYp^%@&7l(Jc}x>VmF8ore>Y_pICDRQ#_gG6H3JehxdB=vaBpB z1;N0Jo-GhRAzX*5+(as+AaQuCSs09f)+!x9pIt}Z6<*#p>u?~+sB&(&fNBu`@W{-S_?uXOoNHKU*js zLIN3pa|lTyR)*^m#sFX$d-rBvqIyVOv~m|OaIjT3#R_eADk`Iqbshoizg_Tw3kgfj znqEnWlEm^M<2-gsA>YaW9-sQ=mlwVgq!pzXdllh0^VAU8h^cNH890 z8DB9uyWWoqH-5(@@=Q$b8+JqF zgaYF~f6AY~hg=UPUS~X6Amm9rtN>`b8*unC59e35w_QlY8Hz;Q*Y3%X{O2n&f;G)M)J@w~%`N!B+h zDl$h3cuai9GqOixLCCD~38I@x=^98c7Q)fA0PGhEi|kj05$gbfm#79qIUoMGL>Q@HX`otGEDfV*l}#uK zhRE#Pv_ZT#o6emgx4OVEJsuu@WR0s@XeC)|By*N@+C89$@EE-bsxu$F&@VnEUAb(_@jTBBxdAv(++M;O`tz+h3 zFfS^Vh*|nqUHo>-l7JJRDpED_vD_#95e^ngRV&VBKvWD_Pr9HJBSK7GhgCj<_i-!d zuXdXT#Yst>Br#IenN%IEyJ+T70XBIdU_acj_vguQZH#p`&#AUlfwx z^#IXczr-h?x3`#)nED%D{r}+TxG5P=!vz6TboyWG>+7ex-bIV~yKeIPx4c1d!=fO%0+qPCQMf z36GP16~(WLgr-orJ9OsGdRT@on<#fj@EL2Ty`lX-vFY=p9-KsIH9tYfg({ z&UjLDgad}H268zEiUSC{)4^U&08QTskb-In00px#I2^^hj8mI?>F2os{wIzaTC+3r zCP%io=%>0Kp_OO5`=*KRdHz1#_yjcK(~-bYbr=kJ?R|&kUiw~q^>oTxb^TPKvbgKm z=H@eOb0Xg%CK$w?`H?&L^(+o&^S1;1cF__G=Zl`>MGB3z%!d5Mr})Ljm;v%4gS#9p z0hAh?Jnj;>a(wfZ?h;I(Kyq#i&~;k=?7mxH|K<9d*Vp0N_vh!04}xCfmFMSp+0Wx6va}N%zAYtIG9k04<%4 zz6GHO?kHRen;6D{^*Bho1Gw+rW zgDXC9S3HI*wx6jeClYm}67FK+HTW4Q1sWZuJ+sG8M}j7cftpxn?SsxoI_R1~0xm}o z5@cNm5Iri4BEl-DPsj|@HDF$2f@k+|0skXvsJwD#rNM5;wGy{ThPx=l33^*9&X5qF zDa~vSSsmz|b&X9{Q`UdM>K`E)6%*R`A(XBrYroZNzEhIvt0NfZrlo4m7P~tv@ z!LK+pgfTR@0S3c(#S!6{&5zTOp2nz98~F-BUW%yw>J<#lZM+|Cz*3e%6zm!!xz-l1 zU0)k+jiRc_(?BbCXR}AMz^6Vc9Xu>H*f1`te-a0>-wo96)~9I~*Z%IOyt2_kNvxX( zyi@`!VAN@53O1O^GGI~GjTL=&0Dk0qQl~Zqr#o4M{RnsdUr;FT0@=T{EW5ztR zCwIEPWrGg^cT*ELjPxc)8jg0Io}38bkwzSZsnZXBfuq13>c3bgjn|;~t@xxl3onaa zli5|YD}YXYw#eq^QW(k3$Z`tV`Z5&k_KemSn!xNOH$I3oSc@WJ$;CZT_M8BpmZ)%==oBL5N1HLmcPSNShqc#CW=|V5GM!Ke})MI8lv+- zzdoCN%VLpRE12;EX{HDr5h{Za3o-!VrJ|27;SC-U(+ii-$281TY+S|Cd0nri=i=O2G3b+@AfYXu| zfj&LB18-y$~WTjW(l)m4-%q=| zHPCo_xXHsP^%zZKBxvAG>v*#xHXQpN-HxHovI6V|b#ntFnP$^*WxHm!$O10p^hi(( zp^XS$u|)|4seDQ}If-r^H~_s@3Ti$ygN+i)>F_tIA(CUDe(0r%&Fp0z{e9r=vs3#s z)3K2Ah7?h!>t=ESL~3Z-6;)X&*I0Rn__*r&y{K9^F-^)QHDzh)k$(R(PQovE;#hI$ zPtYVwYmIR`RlT9`a3a5#c&EUl|4ZLzc(Q>Q_~SKt@sGim0|JKQ=qIxx*{lVL$FWjR{$y+5w&9C5TxP)K8(vR>1#+b{|s% zyV-y|4tyb4xv}>r^pARCVTnu;0Zx8pV;~Vx*6I842*nT6J!(xE)Ih%fc|7_Bx{#c% zHa6hGhCYPp=R1P8xx^B6zavN*g}!7naIG?lWLX(bn3@I)&bj3@a3*xs6wQV#9ikGD zdfE$y$oCVq@!m;Gz0T8svEwqhZsPtih9|igG&<=TU~f?Lr07BTD87=*=9{~8?W4G8 z{-#IqE0)hsb28@uiw_Ke&)JOMK$@8dayqy9R|Zlu}^Aq-4N zHZRCEA#l&-n9@7QRfBj1_4JddG77=6w7yD?Ps(kN-^3PWU8gxDk>=oD#-ELy*PWoI z6<&4~ryIyNGq%2ae}AB(q>jmAy$!+{SkWX6hE+LTEps8f=FGy#QBGP^Xz*XaNOUdQdCzCAAq*qvi)7U9w;m#mL44)?k%UfzK7{luH z>}R;nX_wE!w+g|D{!nkgwUgoQS(HGz!j)X%Y`kDb(GXV6qows3nQ69WA>-m{!=ZGe zooG&*P7Z5VSn>hVT@xh%KZ6ARk1J<1`N{Jss;r2i8YUx3cBvl-^5t~=TXxn{VbE@y zp;F$?-zD=z!|JU#H~s4n7VHKHb>ucg2z~c0;^(Jb9W#H~0?Ejo6ad!}yiGZ~x^TNm ze2R+;4tYeY^D)<>E;S_5v^pxtaxgF8|G<}k**5tHj5PzhAHgviat}UZIGPAXqZv1( zmU>W-zHI!_XU**yM+yajkxbQ^0r1sx{i-c}vUbb4-f~_pik|>>e;OoL1u^u`Z+yUQ zTB)>^)=Q3Wd{FDH@AOs(USYXR>$P9r_?Vm9xYRZ}P;S==zx~R83lbr|!iTX9)(@V^ zw9mcNKM3&ch;Pz0s1?@UzLO*~V-lIY0A#a(XEH9AohL|>wcZKyJaH#zfU{mLy-sd) z>?$VuIDJmjGHsS1kz7Bfg1m;qy|7MzUC2nDX9Zf7q;45Wd^2}aHWfuNVx7ok>y>u71xzHH%|$9;ng)(QE3Cr9+-BU6R?4~tW7 zBAZIY6FBJ5qxTLmZYK$SyC#$aK>^?rVTw|O6^q;_QVd16Qx!Z4Cb~5pQh9I z1IlSJ=0MnO;gqMW@~S@7Bt&d@z9uwTrJ;ht5%^^Z5T-#wO9cR2!J+98Z6P<6Jt$Tr z{QzJl$U90I5|BnV^+2f~Rgh1yhPL$BJ{SRoq-0blA-#DL2-_{~R(T6{&0l#YNH}($ zboTLYk(PwP@SDh5diAN#(ifmJopZ-i0T1g;7H?i0b>I?!Fj<>|9ZgltRX+i~`3c^K zSA12>#^t3z@rH5qs+KIIX%XlX1q{s@SgAZCT9wRIf=f7kqyQM)h=hkH3Y4r`s&JIF z9)f8tR}1&jZGQS%4QdeeU(}PFEHAdxz4}fVps)M%l2IWky2IZ;cXIETt;w%I#xBpx z)!8|x_{fSuuW+rhn7mG#TMySD*n;Qpb?fRJ4jXU+tTUKR?RW(LIJFIjsxoY_>wskH zFrUB{<1v(?SWLK5Y}-DTv`?>y9dqJ3Qn&|%2!4%Ks!4kRt<(lY*mi-J-(#^9RU!fV zic?=3VC{5;U5jtm$kYrq${e9n3TE#j3_Z{nt*Wa>F zx438i0yHP9$_PW7_gGVnDs#eO>J}mQRAJeICi{b_Hcq^{GmR{Y%2yM(POI8!uxs$L zzNtA*?6;DKMtLjp2K;zdbh*G8mwZ2-7+No((AbJc=pPL*(b&|cJB7}=kEXScz=J%;b(^8#CN&GsPvf8 zT}Vw{CPo9*#iN_w}XMY8r)OG&6)+k>vkLrEkN1*nDBbIgmnei9Xl z#iM}I*4T29-4oSWzP`J$vGFNdI-mP{Fw^<-lOA8Nh2i}4n8W+<(SSZW5WPcV|F7?E zK6pr99-f_N7ySH-Z1I-9eYinoATP_=Svf77tbXUF6c9Nf*JxQT@Ukt}Exc@Z1~sZ< z`EZjyya+zrk}G{D+^5@eY4GVi{PYB3#cOU8uI179_woA|PIfhZO=RuI?u2dnmNFDx zfM+BRzj;VCH-JjCVmfd8^{3pcBKmwlGXu7j{e0^MjefRRICXYb*5+Vq<33&TG9MQ! zfV~83f!LeOW!o~!d*i&sG%tYX#jlODQbYO{ONlzXugUiNFJuvIJj1WPl*Vw4eW`0~ zV}}P`v-n^5Tgf}J6DR5K9LW_AY1$4Ty_Rao4|ex^GFlI{Q?*sLMI--8(%j4io{|~^ zbA1VRadeK05`)AIgRRPnNf?eLXaK?>ZorZR5U*A=$(C@yHIax&(A0p=PLJ%-a1Csu z3_&ykh)@>8ErXV;j$ea3_!Rwyr;F3s2l(Injp2vW$%oU0`}N^{QxqUDYYK!_Vis%1 zP058@oM(%2HShE-`MS5r;!HKVhi-X7C}^l#GaH(eds3r17VN{l76~&5?gK0)BuDsS zn>e;t1%R7<-YRT(zB4KRJKX`gCh5B zZxlh*$_uP!#gbV)2?rNoyynv&lUNa}uoR$=z8VQdhGDp-a@rbf5n)}xIs7QyKc+$R zo3hUvnw-+F-1qbP&gF|f?XByY_OD!nU19IoEXV3T&WHztEX+7<_HZ-o}PL+2A>D$-Xq zSrj61wI2?BK`YktENQBqUDhKgguEo)pUBmr{+V^^ThXjv^ZoC&8JC#vPYx}vX$rIGynNNizn~jL)`Zl5N>fQGqTpo z6*|gr=d0`QEUAMnH-9Zv$U2pT(d5PiRe~J6n^WNHUW8SrJj<}iDqrDD4om+i#CD@$ zGb4R&d~TGKh|Q2t5xgQOTsbS99P=~ZPdkIzRi_pUbegyE)Duhw7O<0?kr0H%Kf|?b z)>Ky$S!#afzvBGCwN>W{Rv&U|OOI4x%$Oy2hiOo~%6qeys|u9U(K&!M zy$Z<6Fkl$Csb2l;-uf3GLu|nRLPxYXK}153cMIcN&X~4@C+rrh?cOSm%7Df{J3~du zCu-81K>*PVJ33Tj*leTRkT;u&$x<`z0fcz4AwF|*u3Rhbxt|xV{j=%S{Je6Xx=vL1wUdD59NPITFBfOnug|6#IIHm4pE-3Ee=eLA zf1bfFZmQjn)jz@hDB!on#p><3`|WeM+5P8iHN~H+S?LDu^W16Hm+oibY!}zTezNB# z7#IWJxJkOmp!L0(d-(#(-`sI66B;qv7p`0II7pYKS@_PZBbMuhF zFK#aJfnQ`-+4-A&_|olyvO1>=&jB^q{V4zW7XMt0vr9LF{bWBY;Xm$>aX<3;2;O_Y zxEQYB$1KklZwC6?Gx)87Z>~nzqy4Kf{(PC8Xa96F4ZlrY2c|H|FP(V9H+H``!Is)euE~S9?keisf zlI|*8u(=?*#U`iT>gZfBpvZ;SKQ(p~Wy_Brm*FX7U!0Hx*3jTY?4Z;CiyB}BNB zS_C))NSr(*vhipF# zB2qS}T7;?}>G5PLFXli0u)q2x$}oZx%6%GE^`OH7MuXog042tkIGtmx>lGC<6S`NG z3Tqt?UecflG5wxrp2NTCIUZGkyaOCy&4v{k#%O+>F&QnV(YStkILcY0qZ8F;7LzO;4F=H4$D$#YlDBeMO5#;~4&oD#pSn3-9$!njy-#EVT=M?{pK_}pw3yRB( z37yn`UTQzhhX{*v0(=y4Gb`+=4{`E0?yHv+lb~48%aH_?h&+Nm%qf%u`Ly=qnM9i^ zd%gSSfE@prhYNpVj^*>9Xa_!?`Y|w{nit~_0V^#I)xc*mIWxC1+_ImC-_k=7kt+NG z-)0ALgX3>#b}_CWeN$jShEX4)?@WiIZ*blZok$42aNkfqCh70+C%p+Oj3cMK>*sHS z$@ibrq6p$g`km6Lc_y##KBwxY#QpZ-#fx>f-9zVt7#376MJYjeqzTz5S(L`9za&2^ zCsFl*WCT0~P}+r!z|rLfafJD0=V)8ODYRN(?ZRY|beY5^O!HU5K5$sQ+4+2T=Zn7m zZ1Vwqh)DzH^X)DE{I{k}p+VbJlmeqKBOc8Q7>g-qty6M$ZmmXB8hjRU3F`QlpI$I~o#j&37tK=%GdgPdQc_5sRZCy5&e##e z<5_}}17OlC;1cJ_BJxcXJ&Q5r?m9(xY=zfHW(5;(7@&2WU*YRGU0y?PHK$#jX_OK9 z4cn+)cMMG$1(Go>4p56gZxxp93y-8)BZM?bVpLkJ!IyyDhIl85U^OhhY;)>0)LNZ> zEw62}o;?3ggV$(De4mR8j5CV|F^M0>)r068kFcQ#blOI!+k((2CNUDt{s-4Je|M1V?qv$-l&J=xYZHc z0llkZ4oO=X1qca=Ak@ds@P@nB)1B6f5`Qi(^3=2R%#035xu{aft>VK|Qa0Ak6E7?d zo=q~wVUv|+&P;<{Oz-89i4u1ljwwgaedrWc%Z3gEa#p-U#Ldv)%=|)@obAL9C;~Ra zBEzMyn##eW^y4)?V61dRSyqBc4t&{QDYg2-sa#l4la%6p>f`XV^4wk$K;XbPs?C_X z;ICs@tk_0DT?Av-L4|-j62=Dde2G~DNpt3an`kEv*^?UvWod*k05=nRnfhm3pPTE> zq!`~=T47#jYdw8VvJtKpvwPb0LG0{*37>y?Lo+E}b&|yQp5VvLH(v_a2R3lhICA%*>A=)yTHw)HTvDc- zn21$P#v~1bNEWa90r(i`)OTu=_IN+&9jyg`>&*k~b#udm_0&L>kKm>4%@V*8S4W;Tkrik+gA2;|O^PJd8lP0j_QR^Cz*xkO-t z)2f~Ge4V<0Q6Z8)cm(h}^tD_KaV+9A7 zwn=T<7o4J=z&#zLUDA_!i9evB^ES3`o6Uy()aSGXX>6&jyFDg&)%*S68JzFv(Q0>?4_r{+xs0d0(qgGJ+pL1kfj0DX08&d%Mt z9+XbGBS9sZ!hz!^t+FIw(Hi($KmC9D>HnK{-CYnXM}@2>^)x z@+i-|FZ58HnwKbeOXXc5sklOX%OOu_F(9+HID2qe9=4UlGB2p?&By87Jx zL(li?&-ov-jebsrZ8el9+bL+r&80thqPTbr9>NJ4wcU(jOXqpL=Z_5dWQmQTmDO-= z9OX8Dke-Xz)~%^p#_$)OA>c~UGNxB*Hkf`Q=qn~pvihtj8xyK#;#+*0aS*F8rlFU% zld?ShVwf#r62^}E!hPJKt?b4H4=bUm0eK=%>%e8~5a0q3q!cVJ3djV;d^fPchxs|0 z-9lw;3_Aa{v*-MIX{|bsauP%{=$(|`M72-WXVAr$%h2f3NJuNe(+SnR_gH;5J6oP( z0Z&tR-9cUkb$4#&puL2=HEvYF58`bu&-~hg%t4@x1j@l)M0(X=(&E%oZ+W^2>fJDP zo~uirf#>zIm||if3;|qiy?ak>a`m64Cm-2@wX zgk;NeungH`5nyA=o(&q($M!Zb8?5-9=~QBgS&HTB(U5EaK{CHrgYB7!z^8$5<)-NX%{QQ~)( zN7c?iffOKU)dq0!U*uTro!QiVE}Nf8nrc50Z-r~7T3rx6sZBQW73q=jXSPdXU`Oyh zV#_~TPd@+30OJ&Ac5H+41B2umwiTw;4LxHbS=1SZBE-(e9Jpt}HMpG6nc8^qAZ{?` z;Fd9gi@$BUxNbXp{z1~AVk3=2j~xc^zw zkd_OC5{)Qa4M1lI{n;r9cP~zT?MM!9rSQXJp>Pdw0)l18jM2?gqdEAfP#K&IW9#@t z2f+*0*Jp1wf_QLQ_a&-oU!~n*-Dw!$ixQU>*Pi!+i_kI1!7bkbU2F-FuA1-aMy zTx$E7JA&92L=$Jmh7m7&wz~4PLwX?;S)s)VF-;x``T)>pyaK1o>e2~rEWQ^;0{7q< zWHJDfnHG3gY|$XTYlHeXS!8EOlzuwQbUZs*ClFi-)(AjvViuBt+X3Hl#qUpnYJ|Jm zAd?tRg~_#nnB>^?-<>ku8d6-4N=qM#T8_fYKo6L*hJ@A=bmRDjYP)*=dM_7oWUNPF(%%o@YNE3J$ZJx4-+ka?!upQ)^E6~gXwyt{xOK5VI@;A ziYbp`#8z69LjPGj!SN|46Zf_VB9<-AP_=`GIokUsf1i)KJy1j_$TnLeP-v!eRoe9c z%A@4fLiz(L4Tf@nUgE5n38}A{mOdPtuoVrQ1deTD&~Fu0`CD0U1#6@3lUtmKNhn(k z6}T;maTl7x{-4^8%XlMv=4YR(J65?tSGH2N;pmhe@Y3a>GnyybAVKb0^IWE8E|dCP zB4-bcD6430*tLU%jS7pP-fmGPvIr2F65>Sg4h`!CcgUP;;W*@EAewZ!5kVvcI132s zfpGk&NC`N2r{vra>fsnR}`tkF4-f)r6M) zS>L#Ez1|k!Ng=qPTfUId*uYo$k#1zNelQ<_8#U&F94GqLX!py^MuD3rK%+0@<3R48gdmp5!WgwAzGsQkkT4AJLfTe z){p2k$R9U42NN#gfRl!-sdKVFJRC|#?&zeGX?Dg6lpGfVuHs(c4DA;Gv=-Lp2N7%Y z&fd|^>z6O~cfU>t2hY>zhx_}3qZ)(rZ3HhK0I*xuE{id20ArL%D41#mAuEVdKdi~+ z?K2`KM0wI^btSj3y8OglQ_0SwC|a?KDX&5K7f)h5DlhybWyMRtV$vr66pbxuvys$p z+?)J1kry6cX6mBTCeYGfzTQ9C+uu9bH5j?88EOaZ290U^oEfr_EXK-*L>RZd39Ic8 zpL;!f!Q;{U2S6dUusAf(ugf56@$tk^gHMuR%QBH!IeiB{dGxKgQ9lRv>#+4Do%1t_ zv|CJ7*yW;Rs?{}#%b#(q4a{8z5n9;LWXnybiAK1B4w@upo2G3DF>B9CMgmuFk@f5e z-n7<)F{;XnF?&O@Sz=_4P$j3`6XjPy)t@6Q_|Vlzd}Oe~81q_vbXyC8zPhf^3Nv?nSrQa%aUt;jY?Ib#mh}GXNk-45SL6CMa38CfeBf zV)qW)dAdcb2-mbJgp_{#0}zLQ9C*_rr&Gtti_@9Atdn+8X-`gPhW^+OGur#1u}%9J zdZ&3o>rgJhtXtEoexm+lt^E{Hi;$iKxS|be$|&fvwEKheCi%hJ@ur!$SH!2mrL^FW z_Y2j)mL#gWU$4X5V1koXe9boZr0H7tUt2+;UF0J=2F@*X>_ou-UV^KyC22Td07W0& zgalfH*4!iMcm6Ea)F3yPK>;5mn}7h?!~5*Y$7UhnUx$0vuc z((bF>qrJoDeP;}u^w26eJqRp#9lpk0_wTWfQ8f)x6}0K2(<;ZhYSRH%;!O?uXVZg)tsaihVE@9!MQSy0VeAyoSCMH%sNMrpWWUj4p5VA~V(zC{9FI;f{y%VlGy+ z`i~id92G==#yK@_$vR&08+5!{CdUEIZw|oJZ*!UvO|=niuc%^AaT3j}Mj!T~VyR-; zlBvXxa1)+fBOg*yzHbXxkJYY^)0^SyBjNfm60R=?Cp(|-9en0=repVGe>Z(TI2oj` z5B5%OD_I+n_I7HE9celNU#$k{>4QV6RqfGgCXkqE;f|=qRX=P7u7xoL2JpwS{F&y9 z?~r3lK8D-$Ql{t%E=@A|7%p9R63MO=_fkxVF7F0&wpL5YW%>_Iw(+!i1$h*0wF_Hd zpyRn~AQ24N)-fU90OPRLguai_6p;IYx0d{b>|sT7F(G6paW=XxV;(OOuErz-=9xOG zRp0xBV03Y$$!)kp+fL^SHlxWv0T{T*CWSOp>oIWeIz?8LF}4yU$s9JevxR8CL*8>r(pHMQ&?7uyM?wu&*M+CUEw`i$qwO^@Xl3pX%wjKN4lS{4yB6tm`hr`zUd2^hPLz839&KA(D|eEl~SrKN#&( z@xze9A21}q3PcTr_F~VXgnoe3r|(YRZ)~iczW-$MeXo1E(@Q^ak_mnH5Wf5QlgZ>4 z`nutgpC4{)`~p`2tDw28=~5&r#EUm44VT0JwNz@rSfL)mfTKvzb4*tifZ30;u&D?EQ(wk^NrjK=qF{Tl3xZm z@i=`J8>ti~O@5A(;^r>Uo)8IjE>_jT%%3zXX+kNBMin*oXl85ZLO%Ndk~NvD&Y-u zv8hwCMgq^1INa?50fne(f#kCa6-PBk8s4t&XF4rZziOK6nujo+`tP#b8NJ^J3cIK6 zCa`)u|E78J-46{HxABq1jo38cED6U4W8oQNj22*Jx;7{YAYz?ss18Ud!r;dcd7rT~ zNz!9t3_21#Syk0fwzzBLa`cA_rbJSbHU)np0T>5<6Lm3D#zo0|u*D$MX%|?4CzD>H9PYk^A>)zCEKxVBJK!oX zwgZ*B3)6j`0O>leQZxs0@R$_UMeGKvVljge=&kr6#cJ>A@Th;Q9A#0fu5G=7HfidGEJawxZWKk5#RFVvGL^heRc zu#>hk?9@XEkkkSRNtYRc?60c4=@kNdG#V85=ID#!vQB6Xg*Z!B%{sb$N8wDD2_@vBPX%0nw8&>UbumZ<&~x02CGr8X9%Hqz z#AspYo>tS|B!*MkoMwKJ5Vo}CiOKimG3Xndh|Fq1_4I6eJYtDzJzmR=#-lb|8?XK3 z$IXai579IPw=$HGrZkO_qViLXKmcK2ji*5i(d#+>o$os~SuaRI$P(`IpjJ`z-B)Yh z-+S;qt^a`jT}}~LnwMn|tmu5zA}?<8b7U_I<*OhA03bV1dg)r25YC|?{OWuU%z{VMX`^* z|6X-ZKORT$$O363a z;C|ZJ{^a}hl)8j^puoUH^<=6?le3k}lzrM0La7JosXVk~9td)#3X+PwY1gZQ#j>He zhg?fk*gCZ~*sM3rol;KBRd>HE<`w^l|&bN&dgFron=n@ld2#B_17w*LHoAEq(Nlqy5|}4X-}RHzFZ)VQdHNOM zQkcWB9>oW#G9EV?fsAZ{*$|~Q$HOIYIvzaRdA|E1)C7!>OSp(V9Q!5)NU1VfM#)(C z=J1x6QoL0xEKD2Z7S9j{p3L4#bMqv8ufrgG%r)Hxz0|cT9WKzpxb1QplxNln;yW#b z@Z?xUy_t@JT6C|qTu`Z`V*=^+I>HDm$u6L0edH29J>muOwMQCc{kUk!0A5e`F>t3v zi4B|{i6Jpm(niAs(x{C%L-3h9_B#jgpCdL2J70H94I|kzoXli+Kd!4g41IH9Vzl>( zV1&AcR29yy_ELKK47!KQ^lDte6xja=Rhz9jM>{c!r#n?}uA*p9u8 z=TSlWiI~XWonC(L&jriBIq+5Iv1Z_Xs0#@107U?BMo?z-;ZYj=vA(|EVe4J%)77cb zIXFBqmxE8-eUj8Z!B!&qhe9+eH_-FZEV*J;|KH!&uqrk{%x!ka5r>yKTiFgO&V1+pW?ByK1@dbHVcUGfGn=}Jfna2v;2gho zk1*fDN7bl6gy@*Id&8}!&8<(|CBtbpLo{bPP)cM!7bdciTe%3wTm!0u*73>kZAd5V z><+<-9|Nl<;WfK|b7%Z5!*q{6gD)u)y}OR$;PX>H9X%t>nqaD9uXH*m%y zt`j#yqvQVB*mO4l#^}Yo6^gKfCrU?xm5poOpbj;`O7cq@WWG=3E9@u&N00bLatHuiPxaq->1G#u^4me zH(6j`o_H{?P_&v5s73U$*j@M6Hy`%Zsn-tgl}P^>p>9@Q+U#PO%$n8^9fz>tWhG#o z4f}-Hf|XVec5uJ)1)m+f_TT%G&E)?2Lx4;vJzbN(3dEYSB5-|3r5;xH*Zg216edeX zfpeyHyDZ$?`tH#WVy)L?A&9}wR;Mosrf|}*set2(iAK=V9?4-n{r!oMR9CZQ_CEb? zeRRIg9)iD*&j0>BANQTnIS)(6`v7t(uI(s$86%THG*ShwAj}!}3i26}-buPG0nHE;W<-laY|pJ_^NegUeUKG)@!$} z=u6nj@LhQ8bvvwT-riomNaQhG`{* z5_6DKSTbOc8>rjw9^v8q=zGFBz7`IWh>`>?VeyuW0nT#Le(`w4gzi~V3j%>s8m0M8 zr;VV``~CD~KXr!dtA2V+%&3#Z^5S`Xzkp2q!RC&K7D|b|Oej2F*68HZh*bVdB$Ypo z=)NC3a9R@n@@blWnJuusy~COKohpHGJlcI?hZ9F39?llDM;&~Ee5~=Miz$RKY^;D) zrdqUV_`Yoo1+;A#3_I!PdF~PE#&zx2acAGPBZ~fl0O0>I=X^@ceRNaMr#0AV5ywa=NU%!U@RayGI9Z=^eg0**iQ)k9SW__6|O)LAEF>z0Ew?865BK?;aobqr{WGO-$)~ z+N9mDPj(NU?>^VWl&fk9U%$mHC_t3)A$y`A~*Ic3R+|?>;RqdP3|=am~Ih znC6ut;vbDxlarAk$_k%lGR(s(BQFieA}2AB3tJQAn8`hnTqF1xTczN(V!sv_Yt{Rn z*z(xpV2J#@`-~(^NHwiBCNRnP^yLK;6%d@-BQ%zr7J$K5g$odF11xvsS6liSc4sOf z(S)iVJlT7gWaOxSuU{PuUhc{=e|_-T(eCc^Z~8%xj|Re!sbCE=uYf~^3`eJ;g>ENF zQ!uT&^B?{6H9qOhwMMzIm zkRcyH2;eweyU0OCjcec{2@@8f7N?Sw+W?sl4!bc)pXrmQwYsfhA=5}o3S_SjpCy_8;)o{Jfoj8 zNgMKIb`|4bg*%sXy}0h}*%g&l;aSz!0axDfu}=o`o>4t8VBi(KX^t7&;YuMDLe?ra zSI~O4C)^m)VHXQ1OHFVI0Q@%LR(LQ36Llfar#}yyy@xz>A4a{J=P(oCK>@knCE zJMNeK9ftdnU@T1YbYFYDLeX$w9^B0(X#t9%&MS$>$-B0Eou6>L!hj{=ic2= zV(wDPUu`cTIRZW93(U>+{E_Tvg-$)smzezz9c5RoRKB#Pa7b-@{-d*c4j6Mr`x&Qg zSWqlzxO)exSDggLUp61~`uNNC7TZWfMJMlXI2r7`cvArj=kUgws|-_S9(&l7ac#IQ;X06rS(Tnwh)aNYaycf;BH*b@eDo&3WL4J)Q za9hVS4EM8g#09^*&hmmTD_$n)GSd<&jm0`-)c9q+ueQ3+D*dgMeVg~<(!STvUJXt_ z1rPl<#|GIQ*26fT7ES}AQ_B`>b{BwHts!Mq$9U#v$e8LhTxSb$oo9H!(s3FbU>I|ZJ4xp(G~$DLWdMxWKulCSf3J5o@EdpXJ@-$e`Ik5IK+NX@akbhDpq(Z}2U zHe&%%F0v69={qgF2y}fnRnti^#r^MRO$zFme=eWS5ggcP2+rb~30^UQBw_t?ILbi@ zhB)A$)Ji6Vzl4R!`~;f*q%INHxL$fkSB-;7aw&9zFyF{)RAhyABsm6PvLi3nMtYdVkMp%h1t-;>HwC)!8c;UY(_=JH zY%`{wIRT^&7D%p*d^$I6puV}l2nE2C*4W8h%Uw6Tf`V<Q>dEZb=va%qFPj8hbuqjybchBgt4qOK8~74-}sK=aN@gBAf5?!;DVo? zb=yoQ4#|?QBCEvCTMVYz$%Z2Ul?7sSfS7gv>v);*F$fL!b?*bjvwFSL&5u1l6{Uz| z6+*PQC%RR?1Ruu;2@cv`jCDyI0&ylM8jy=IKQ+&Uye`z>4eyl5JEii%KhfxQ6*(7ps;wYIgrbaUtR%<)1cQ94BK@H?vBPsWPm1gEW?zm`%a zOE}aPf{ZyMAhz;6ZS#ce0eU4DO*G?G4K@A@nG*#af(*UKZV+^Uo@Wb8;C-9tb1-4u z1{5eUk9cL-^Xe=ZpwF)s;0?XNS{R(Bh?C=@9Ao8XKWG}1PjYd)Rm+(gyr=;~yqHXY zw*p9X>-B%)z739Z>*=UuAJQk?oN(@a|2E-c6R>4 z2elHT6BSFFcYJSsqirmJ1bhMA)vybp^ zf}bPm87B_9PhU0M#24Y4uct>M{wuF}#Amlp;YpifCz`lvDIML)){_M|9fPB$q7(#w zxjR!<=w$6Y(O>Bru!?Swf!vx61;KXY5&}{3b%$EqY$Ps5U6s-uz{OUk;5=?A1fn>! zl$r5l19C$W5L}oH?*p9FW~qT}Wrzm^i;gxtZ`Q^!gXRam9oJ6=nW$+265l~%_9`w{gMF5uYdn#^HYLR6#_X0=TTUi&n ziZ7VVl>M6CouP3wod{8=jNI@{!roBpqZRH}pW8&W^Gw;LBYKqHMNkj$}*5~;k1$LbiQrxUiuII+AR*#%o7mwEoyS#W*H(?Y-W_L^i! z42SRr4E(TAyph#(notcOC))Y?^}rnBB}1VU(-xmT;zA(&OwBGasF@s1aG(CO99kn3 zrQ`Dhl#MUT*@qX4;scnY-KUShaq{#-?W&Vi4&PQSUw@U4;p#%N(u<8GvvF>q>CPT#3gCSa)s5H(WN z66@${(!%PiHmd)>g@iyRD*y=-dA`UYp-wp|=-m@>s*~p4<<*2Q5=4Mtbb9vORXrBk zMks*LTCWiGyK-s?XU3I4;yh*>vB{z+FrhgFu|NQ+4AGz)EiR*qM+z>Ty!o`sxu`ct zJL}irJgAf$XaYzYi-5iqEK2tIMQID_%6 z`J`UI5YAMy4cR_bvch;BdHP{ZQsR*t5!y*8flapOjOAR#*I4_9^?1zgY1(7GfN}>q zqlXOyDx8*5Q-S!cX^YcK`SnRq8lq<@0xYFd^&BiA+l5;B|m?^OI~us4$6=Bs5sPwJCt)v20$fpD!<_ohO`4 z<~~3UdKmf82NopTe3fBXp7L$JA(tm7Ud6Tz%)z+8ms%CoxesAnmdQ;jPKd^iE+u8f zm4%I=E}vccq9p$@ga#_A0gbB^BgG69bL41B03 zl}YuJsFPa}vLJ>)srD-hhx%k?AI)&WFdZl{A(bBcWk1BszVr;>TJkhC9GysmGed z5ws~oL+v0Q2Pi@M9FQ~3^FHI^FdzBW&@>MU#kG9N8X?X8yxp&jp4&j+Ok1YgRCZF~ z+C;=<@oZ!QjCBFh0v(PF=q&A@j(>hwYgt?s4;iKb(rYz~B3Nr&-z0pa7T8kZ^~^{V zhVFv(0*~DnV(H?jQ`sQmJ^EJqK2j7Q6PuL~Xsti@AN-podo- zZl35H8AoLoo7S6rafPCOc>heGE*aP-K9-!Fb9~h?um%Q-63kzYtLVDuQh;LFm;&c@KFopa`TAlb;SyWfsSBq>Mgh|6P*pBQ znpJ^@#({R{7SS5rJzFb_fdyEO^+*U&(SohryTcRt3P zNmD(;t@Q1&N7sIwMujGRWVh4l;ifoV=tkVDV})(U$OlZ>%*@;%Da`7+9yz*JZT)_r)G@RH&02_ zgqx_Qw4Xdq{PYCe$h1tjB#GTwtf+a4QH9As%vAQ9x$|nF(KaFlBkehPUh-tlCQ5b2 zC@A(44>#s9yg!B(x}{)Ph|lXor!Afo?T2l4?X+FkwY!6{*Ju0q3h7s*Kj>*2u=#h zntT#4yu5Rp00N2>mKrA5PT3U&Qx{2kumkFg|R)y$q;&1T>CAjna8EB@lk&m-L zv<@n97g)I(qJrn*ZS@wo_tke&ymr|;a0X?Z=gqW)F=7@Lg3(=4d&6?SPY7`rx%+Vy zU9bKm zoE!2{m400H6sUU%Nza*?G4wC#sUk&eAzgU^1oGe^FEBQ)4AUZDm9|0(S0#N9)0j2I z9WJ>tP|3=!&_a((;*Db7vy#w$;MzqlhoPGS@f`DkzC_hSTlN``c${d~3S)*aBn^4K z5>xWSWuFjgf(}qsJ<0XcL1=1PjfvvnZ)YHqJXd&F;lm}3_)31biQ)7T^5oN|qInBP zLiH{rHDTf}ik}#6JQ>^PN5^B=^p#SjP0A0>6lq&A&zUMchinyRMc!IKRw28CE~ z)56(VNh)!3c7~c|cAzlc9r_THHhZhDgz`ZSEhsFY1*GENnBtBH2oS;KSWkC2fx1l_ zU%%7KhNII>lPnmJwpVHA{nbyKTifm`_ur1kXO^|fQTP&~5s~X73B2yK0?me_YW@1A z3v&NTh1Qq#$2XWcmg4}+yD-mOld+|k)(IEb;hfS8>YcL*N0ipQo*sh9iCg$rjdcR& zWPPlI@MM%Hu=UufEm?193^rS(9gB%h<~}5q#guNsy1}GB*=v9*>(=wIO1gJm9lbu- z?Qucv@fUlq7!7hNcZ$M06=8FbE zV9sLJ!2+dzJk7rwuP*ZMf8PG(w7S!~E2Cy&dTEERbQh-bYo2#Z7X`Aho+ad#M917y zgNbC>K$WM>wL#23sBv1K+XCp7rX=iAQRA@KgX1K06CFbrPoE*N~+etq=I(+>KDZCG!18mgs?(y;7 zm%HhIy&fE#?7i5FOI4uIl^oTm9TYzyZLL_bv~*F0kZ)Eq{tkWf)9fdARpL$WK5os` zf^AF#E}@4YGis7jI%lRU@V$|lvdGtR7`tpK#pRT?Y=eNtQ9j2Ll@mN8MK>|Vu%th! zMqWsY1Gw+p1+WItjdKo0yA5YET?wRxEmsS#SwV{$#uhsOB@-vTlEzn9!{vgis6D)6o(tRj1>-ld|M0N|w%|FS3LK-9Xp4J7MnKe=y7z zT3j$8PEW4A1tsW#MV3YmTX_AzZvbf?9nM+C6_8{j>!YEKv*5HOr)ZJvCp8qK$@k?U z0h*P29ki7D{@HlTJ^H{2Sy+r*y#X*s7sPJG9b8X419R*^;cL>(5ZBWdoctr7Ocwc7 z`T`V7&~1lh`L>s8{-uz8R1q;H3EUEovepC$!|7QPb%9y=qHsC;EmYVq>G;XQ-fI=I zin3r4$S9MmXEhH9zsk00God~O0r5EY2&nM3AmBv-%rND&{ZxymnIsy|TuZ23*MaC7 zH@Q960Ut#LEtj4Y6zp~gQNc+{>}mjVW74-&1%?Sp*jU$Tpt4>OTawA4a6q;ioziv)pIieuV#^Q@g{Q1O^%ea88VTE~V*E(nViP;hOa>OyhSljAbG&pq}ooya; z+K^BtkFSb#zKL3bxrksoAgMC7$mfa!rT!3 za-v6|4fIt`_{nAV&Wx*Z0E~0VmMFpdKuRmPD>>}#eNP<=S!3!pi)zV5j!@wu*b{dx zfv<_n`1aP**S_4z_acZVMoV&$UoOCvKf^enI{xn7HG89el*Tl4o=-k>qLeOlwa`t3mK*@g?)|rUms4v1G3NPliV125m$UpuUBx ziu^U~YDkDRD#K)#>|I%m$%!X=r79!Ds*+LVBqo1Qj_1tT{3J4J;ic~B^Sd7~&D%*! zJPdnxzWdA58Yf4~D;Rtd8~`DR^c7-S*+pEqd}b@QtD8D}IzGA|#N4>8zkm_=l)aEX z`iC0+Vl{(URxx@Dz+~2^LF&IZ#e9P1Z}=yJ0lH@P7PATc=&}{$Cc9)XBT{yo!2!i@ z?9N2wq#+n^3vGgF&2Uh?2Fz~REGx3eP&I=@sGK7vH~ zb07T$Fy)*)m7rbS#OJycJQ5!)K+TN^v6zyDlT&6%gTx>|0vt^swACtL?4jBNHOC*$ zx&#o0sLBq!op68c1__x3p`A<=Z0Mmn5UvtkBqsYvb!^hDdy?R2%#@e|rC1V@NVIkP zDB4klF^Yodo6qm|uG@4T5HQ$4#xYN+6aJl6NaF$Ek`O?n{ouV`adBz8xLw%m(sM!?7HO(J9y(1noBP6qTHfE1&LAtRXxvLdR~oO!SSec@Z@VNbA)~ra0tF{=bIMkIBeGfPP-D ztYYEgSi|*`2}-pjN83SwwB(Na@-kbDqxbHF<~T*_-+~S?s{kq#1PodeJ@ z!yX2S{MoQ7r>mtE9hMNp53uBhM5lT=9jg%-K=E5#DJ|czvyntKnuB=M=#YYXdHm2^ z8pKMQeFq3-b9P?z+-R)%;jk3VDSai6F>5!183OJUa17fho?Y9lt)8Bl97=>Mi;`_m zw_-o?dg3$Ju{&G8c*N@H=FK3ITOXE6z$X}$5}t(`b?5}c$?;qo=9n3=Z8*G2{#jC{ z^|CypqR7c2JEQbPvdP%><{xfyCNG?=_AWTTYw|%XAkB-(fZl2F4kz&`?%iz#|q6Wu!j8gZ4{FMYZ>Ysf6G#-*Uv_P{;cnDW_$BlZKu zfU6!+H=J%VMP@Bvi{~-LjKJAKS21!Ww?SX?A997FxFx2E=o&0P0+%%`Aj>XVp!*A= zLnIi`Oyi(stUl4)(K;2(NwgrQ`MV6t5ti+NFi9Ui0LR@;PGDj!VG-*pskVPjvBQZ{_Wcf%nh{knMkp$y#QBaX>h%f{D7LU0k z!Yj(t^@H6LQ8rHB{tQ={#5H7OmM=s295DD#-xA&q^~#WFY8`NZDFhfie@AE9da6i| z9|7xX=rQMMj5!&y~Fe3_50~jC#G(Eg4eNRK>n0PWSW?->ege`_6Dw zPr@O5`+p3+931Z)?Y%mALo|X>if~jC(r-47XUr)?i898E7vZLB=|xaHB9jξ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%0D2b5kr9CnR~&>=GLoQ8N<;+r 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󷫂PyW1P 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 UNLe4gKenpK%fS-+y|9^{S74{#kWP7>g5l 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 )x2;JJQd&ZLWC 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, sizeof(*sslconn)); + + sslconn->server = c->base_server; ++ sslconn->vhost_selected = 0; + sslconn->verify_depth = UNSET; + + myConnConfigSet(c, sslconn); +@@ -423,12 +430,44 @@ + return 1; + } + ++static int modssl_register_alpn(conn_rec *c, ++ ssl_alpn_propose_protos advertisefn, ++ ssl_alpn_proto_negotiated negotiatedfn) ++{ ++#ifdef HAVE_TLS_ALPN ++ SSLConnRec *sslconn = myConnConfig(c); ++ ++ if (!sslconn) { ++ return DECLINED; ++ } ++ ++ if (!sslconn->alpn_proposefns) { ++ sslconn->alpn_proposefns = ++ apr_array_make(c->pool, 5, sizeof(ssl_alpn_propose_protos)); ++ sslconn->alpn_negofns = ++ apr_array_make(c->pool, 5, sizeof(ssl_alpn_proto_negotiated)); ++ } ++ ++ if (advertisefn) ++ APR_ARRAY_PUSH(sslconn->alpn_proposefns, ssl_alpn_propose_protos) = ++ advertisefn; ++ if (negotiatedfn) ++ APR_ARRAY_PUSH(sslconn->alpn_negofns, ssl_alpn_proto_negotiated) = ++ negotiatedfn; ++ ++ return OK; ++#else ++ return DECLINED; ++#endif ++} ++ + int ssl_init_ssl_connection(conn_rec *c, request_rec *r) + { + SSLSrvConfigRec *sc; + SSL *ssl; + SSLConnRec *sslconn = myConnConfig(c); + char *vhost_md5; ++ int rc; + modssl_ctx_t *mctx; + server_rec *server; + +@@ -585,6 +624,7 @@ + + APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable); + APR_REGISTER_OPTIONAL_FN(ssl_engine_disable); ++ APR_REGISTER_OPTIONAL_FN(modssl_register_alpn); + + ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "ssl", + AUTHZ_PROVIDER_VERSION, +diff -ru modules/ssl/mod_ssl.h modules/ssl/mod_ssl.h +--- modules/ssl/mod_ssl.h 2015-06-17 15:09:03.000000000 +0200 ++++ modules/ssl/mod_ssl.h 2015-06-17 15:10:39.000000000 +0200 +@@ -63,5 +63,46 @@ + + APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec *)); + ++/** The alpn_propose_proto callback allows other modules to propose ++ * the name of the protocol that will be chosen during the ++ * Application-Layer Protocol Negotiation (ALPN) portion of the SSL handshake. ++ * The callback is given the connection and a list of NULL-terminated ++ * protocol strings as supported by the client. If this client_protos is ++ * non-empty, it must pick its preferred protocol from that list. Otherwise ++ * it should add its supported protocols in order of precedence. ++ * The callback should not yet modify the connection or install any filters ++ * as its proposal(s) may be overridden by another callback or server ++ * configuration. ++ * It should return OK or, to prevent further processing of (other modules') ++ * callbacks, return DONE. ++ */ ++typedef int (*ssl_alpn_propose_protos)(conn_rec *connection, ++ apr_array_header_t *client_protos, ++ apr_array_header_t *proposed_protos); ++ ++/** The alpn_proto_negotiated callback allows other modules to discover ++ * the name of the protocol that was chosen during the Application-Layer ++ * Protocol Negotiation (ALPN) portion of the SSL handshake. ++ * The callback is given the connection, a ++ * non-NUL-terminated string containing the protocol name, and the ++ * length of the string; it should do something appropriate ++ * (i.e. insert or remove filters) and return OK. To prevent further ++ * processing of (other modules') callbacks, return DONE. */ ++typedef int (*ssl_alpn_proto_negotiated)(conn_rec *connection, ++ const char *proto_name, ++ apr_size_t proto_name_len); ++ ++/* An optional function which can be used to register a pair of callbacks ++ * for ALPN handling. ++ * This optional function should be invoked from a pre_connection hook ++ * which runs *after* mod_ssl.c's pre_connection hook. The function returns ++ * OK if the callbacks are registered, or DECLINED otherwise (for example if ++ * mod_ssl does not support ALPN). ++ */ ++APR_DECLARE_OPTIONAL_FN(int, modssl_register_alpn, ++ (conn_rec *conn, ++ ssl_alpn_propose_protos proposefn, ++ ssl_alpn_proto_negotiated negotiatedfn)); ++ + #endif /* __MOD_SSL_H__ */ + /** @} */ +diff -ru modules/ssl/ssl_engine_config.c modules/ssl/ssl_engine_config.c +--- modules/ssl/ssl_engine_config.c 2015-06-17 15:09:03.000000000 +0200 ++++ modules/ssl/ssl_engine_config.c 2015-06-17 15:10:39.000000000 +0200 +@@ -159,6 +159,9 @@ + SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_CERTIFICATE); + mctx->ssl_ctx_param = apr_array_make(p, 5, sizeof(ssl_ctx_param_t)); + #endif ++#ifdef HAVE_TLS_ALPN ++ mctx->ssl_alpn_pref = apr_array_make(p, 5, sizeof(const char *)); ++#endif + } + + static void modssl_ctx_init_proxy(SSLSrvConfigRec *sc, +@@ -298,6 +301,9 @@ + #ifdef HAVE_SSL_CONF_CMD + cfgMergeArray(ssl_ctx_param); + #endif ++#ifdef HAVE_TLS_ALPN ++ cfgMergeArray(ssl_alpn_pref); ++#endif + } + + static void modssl_ctx_cfg_merge_proxy(apr_pool_t *p, +@@ -1869,6 +1875,16 @@ + } + #endif + ++#ifdef HAVE_TLS_ALPN ++const char *ssl_cmd_SSLALPNPreference(cmd_parms *cmd, void *dcfg, ++ const char *protocol) ++{ ++ SSLSrvConfigRec *sc = mySrvConfig(cmd->server); ++ APR_ARRAY_PUSH(sc->server->ssl_alpn_pref, const char *) = protocol; ++ return NULL; ++} ++#endif ++ + #ifdef HAVE_SRP + + const char *ssl_cmd_SSLSRPVerifierFile(cmd_parms *cmd, void *dcfg, +diff -ru modules/ssl/ssl_engine_init.c modules/ssl/ssl_engine_init.c +--- modules/ssl/ssl_engine_init.c 2015-06-17 15:09:03.000000000 +0200 ++++ modules/ssl/ssl_engine_init.c 2015-06-17 15:10:39.000000000 +0200 +@@ -623,6 +623,11 @@ + SSL_CTX_set_tmp_dh_callback(ctx, ssl_callback_TmpDH); + + SSL_CTX_set_info_callback(ctx, ssl_callback_Info); ++ ++#ifdef HAVE_TLS_ALPN ++ SSL_CTX_set_alpn_select_cb( ++ ctx, ssl_callback_alpn_select, NULL); ++#endif + } + + static apr_status_t ssl_init_ctx_verify(server_rec *s, +diff -ru modules/ssl/ssl_engine_io.c modules/ssl/ssl_engine_io.c +--- modules/ssl/ssl_engine_io.c 2015-06-17 15:09:03.000000000 +0200 ++++ modules/ssl/ssl_engine_io.c 2015-06-17 15:10:39.000000000 +0200 +@@ -28,6 +28,7 @@ + core keeps dumping.'' + -- Unknown */ + #include "ssl_private.h" ++#include "mod_ssl.h" + #include "apr_date.h" + + /* _________________________________________________________________ +@@ -297,6 +298,9 @@ + apr_pool_t *pool; + char buffer[AP_IOBUFSIZE]; + ssl_filter_ctx_t *filter_ctx; ++#ifdef HAVE_TLS_ALPN ++ int alpn_finished; /* 1 if ALPN has finished, 0 otherwise */ ++#endif + } bio_filter_in_ctx_t; + + /* +@@ -1412,6 +1416,37 @@ + APR_BRIGADE_INSERT_TAIL(bb, bucket); + } + ++#ifdef HAVE_TLS_ALPN ++ /* By this point, Application-Layer Protocol Negotiation (ALPN) should be ++ * completed (if our version of OpenSSL supports it). If we haven't already, ++ * find out which protocol was decided upon and inform other modules ++ * by calling alpn_proto_negotiated_hook. ++ */ ++ if (!inctx->alpn_finished) { ++ SSLConnRec *sslconn = myConnConfig(f->c); ++ const unsigned char *next_proto = NULL; ++ unsigned next_proto_len = 0; ++ int n; ++ ++ if (sslconn->alpn_negofns) { ++ SSL_get0_alpn_selected(inctx->ssl, &next_proto, &next_proto_len); ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, f->c, ++ APLOGNO(02836) "SSL negotiated protocol: '%s'", ++ (next_proto && next_proto_len)? ++ apr_pstrmemdup(f->c->pool, (const char *)next_proto, ++ next_proto_len) : "(null)"); ++ for (n = 0; n < sslconn->alpn_negofns->nelts; n++) { ++ ssl_alpn_proto_negotiated fn = ++ APR_ARRAY_IDX(sslconn->alpn_negofns, n, ssl_alpn_proto_negotiated); ++ ++ if (fn(f->c, (const char *)next_proto, next_proto_len) == DONE) ++ break; ++ } ++ } ++ inctx->alpn_finished = 1; ++ } ++#endif ++ + return APR_SUCCESS; + } + +@@ -1893,6 +1928,9 @@ + inctx->block = APR_BLOCK_READ; + inctx->pool = c->pool; + inctx->filter_ctx = filter_ctx; ++#ifdef HAVE_TLS_ALPN ++ inctx->alpn_finished = 0; ++#endif + } + + /* The request_rec pointer is passed in here only to ensure that the +diff -ru modules/ssl/ssl_engine_kernel.c modules/ssl/ssl_engine_kernel.c +--- modules/ssl/ssl_engine_kernel.c 2015-06-17 15:09:03.000000000 +0200 ++++ modules/ssl/ssl_engine_kernel.c 2015-06-17 15:53:25.000000000 +0200 +@@ -29,6 +29,7 @@ + time I was too famous.'' + -- Unknown */ + #include "ssl_private.h" ++#include "mod_ssl.h" + #include "util_md5.h" + + static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn); +@@ -1889,55 +1890,69 @@ + } + + #ifdef HAVE_TLSEXT ++apr_status_t ssl_select_vhost(conn_rec *c) ++{ ++ SSLConnRec *sslconn = myConnConfig(c); ++ const char *servername; ++ ++ if (sslconn == NULL || sslconn->ssl == NULL) { ++ return APR_EINVAL; ++ } ++ else if (sslconn->vhost_selected) { ++ return APR_SUCCESS; ++ } ++ ++ servername = SSL_get_servername(sslconn->ssl, TLSEXT_NAMETYPE_host_name); ++ if (servername) { ++ if (ap_vhost_iterate_given_conn(c, ssl_find_vhost, ++ (void *)servername)) { ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02043) ++ "SSL virtual host for servername %s found", ++ servername); ++ sslconn->vhost_selected = 1; ++ return APR_SUCCESS; ++ } ++ else { ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02044) ++ "No matching SSL virtual host for servername " ++ "%s found (using default/first virtual host)", ++ servername); ++ /* ++ * RFC 6066 section 3 says "It is NOT RECOMMENDED to send ++ * a warning-level unrecognized_name(112) alert, because ++ * the client's behavior in response to warning-level alerts ++ * is unpredictable." ++ * ++ * To maintain backwards compatibility in mod_ssl, we ++ * no longer send any alert (neither warning- nor fatal-level), ++ * i.e. we take the second action suggested in RFC 6066: ++ * "If the server understood the ClientHello extension but ++ * does not recognize the server name, the server SHOULD take ++ * one of two actions: either abort the handshake by sending ++ * a fatal-level unrecognized_name(112) alert or continue ++ * the handshake." ++ */ ++ } ++ } ++ else { ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02645) ++ "Server name not provided via TLS extension " ++ "(using default/first virtual host)"); ++ } ++ ++ return APR_NOTFOUND; ++} + /* + * This callback function is executed when OpenSSL encounters an extended + * client hello with a server name indication extension ("SNI", cf. RFC 6066). + */ + int ssl_callback_ServerNameIndication(SSL *ssl, int *al, modssl_ctx_t *mctx) + { +- const char *servername = +- SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); + conn_rec *c = (conn_rec *)SSL_get_app_data(ssl); +- +- if (c) { +- if (servername) { +- if (ap_vhost_iterate_given_conn(c, ssl_find_vhost, +- (void *)servername)) { +- ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02043) +- "SSL virtual host for servername %s found", +- servername); +- return SSL_TLSEXT_ERR_OK; +- } +- else { +- ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02044) +- "No matching SSL virtual host for servername " +- "%s found (using default/first virtual host)", +- servername); +- /* +- * RFC 6066 section 3 says "It is NOT RECOMMENDED to send +- * a warning-level unrecognized_name(112) alert, because +- * the client's behavior in response to warning-level alerts +- * is unpredictable." +- * +- * To maintain backwards compatibility in mod_ssl, we +- * no longer send any alert (neither warning- nor fatal-level), +- * i.e. we take the second action suggested in RFC 6066: +- * "If the server understood the ClientHello extension but +- * does not recognize the server name, the server SHOULD take +- * one of two actions: either abort the handshake by sending +- * a fatal-level unrecognized_name(112) alert or continue +- * the handshake." +- */ +- } +- } +- else { +- ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02645) +- "Server name not provided via TLS extension " +- "(using default/first virtual host)"); +- } +- } +- +- return SSL_TLSEXT_ERR_NOACK; ++ apr_status_t status; ++ ++ status = ssl_select_vhost(c); ++ return (status == APR_SUCCESS)? SSL_TLSEXT_ERR_OK : SSL_TLSEXT_ERR_NOACK; + } + + /* +@@ -2136,6 +2151,159 @@ + } + #endif /* HAVE_TLS_SESSION_TICKETS */ + ++#ifdef HAVE_TLS_ALPN ++static int ssl_array_index(apr_array_header_t *array, ++ const char *s) ++{ ++ int i; ++ for (i = 0; i < array->nelts; i++) { ++ const char *p = APR_ARRAY_IDX(array, i, const char*); ++ if (!strcmp(p, s)) { ++ return i; ++ } ++ } ++ return -1; ++} ++ ++/* ++ * Compare two ALPN protocol proposal. Result is similar to strcmp(): ++ * 0 gives same precedence, >0 means proto1 is prefered. ++ */ ++static int ssl_cmp_alpn_protos(modssl_ctx_t *ctx, ++ const char *proto1, ++ const char *proto2) ++{ ++ /* TODO: we should have a mod_ssl configuration parameter. */ ++ if (ctx && ctx->ssl_alpn_pref) { ++ int index1 = ssl_array_index(ctx->ssl_alpn_pref, proto1); ++ int index2 = ssl_array_index(ctx->ssl_alpn_pref, proto2); ++ if (index2 > index1) { ++ return (index1 >= 0)? 1 : -1; ++ } ++ else if (index1 > index2) { ++ return (index2 >= 0)? -1 : 1; ++ } ++ } ++ /* both have the same index (mabye -1 or no pref configured) and we compare ++ * the names so that spdy3 gets precedence over spdy2. That makes ++ * the outcome at least deterministic. */ ++ return strcmp((const char *)proto1, (const char *)proto2); ++} ++ ++/* ++ * This callback function is executed when the TLS Application Layer ++ * Protocol Negotiate Extension (ALPN, RFC 7301) is triggered by the client ++ * hello, giving a list of desired protocol names (in descending preference) ++ * to the server. ++ * The callback has to select a protocol name or return an error if none of ++ * the clients preferences is supported. ++ * The selected protocol does not have to be on the client list, according ++ * to RFC 7301, so no checks are performed. ++ * The client protocol list is serialized as length byte followed by ascii ++ * characters (not null-terminated), followed by the next protocol name. ++ */ ++int ssl_callback_alpn_select(SSL *ssl, ++ const unsigned char **out, unsigned char *outlen, ++ const unsigned char *in, unsigned int inlen, void *arg) ++{ ++ conn_rec *c = (conn_rec*)SSL_get_app_data(ssl); ++ SSLConnRec *sslconn = myConnConfig(c); ++ server_rec *s = mySrvFromConn(c); ++ SSLSrvConfigRec *sc = mySrvConfig(s); ++ modssl_ctx_t *mctx = myCtxConfig(sslconn, sc); ++ const char *alpn_http1 = "http/1.1"; ++ apr_array_header_t *client_protos; ++ apr_array_header_t *proposed_protos; ++ int i; ++ size_t len; ++ ++ /* If the connection object is not available, ++ * then there's nothing for us to do. */ ++ if (c == NULL) { ++ return SSL_TLSEXT_ERR_OK; ++ } ++ ++ /* Make sure that we set the correct vhost based on SNI servername ++ * information. This is supposed to be done by the SNI callback, but ++ * currently the ssl libs call the ALPN callback *before* the SNI one. ++ */ ++ ssl_select_vhost(c); ++ ++ if (inlen == 0) { ++ // someone tries to trick us? ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02837) ++ "ALPN client protocol list empty"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ ++ client_protos = apr_array_make(c->pool, 0, sizeof(char *)); ++ for (i = 0; i < inlen; /**/) { ++ unsigned int plen = in[i++]; ++ if (plen + i > inlen) { ++ // someone tries to trick us? ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02838) ++ "ALPN protocol identier too long"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ APR_ARRAY_PUSH(client_protos, char*) = ++ apr_pstrndup(c->pool, (const char *)in+i, plen); ++ i += plen; ++ } ++ ++ proposed_protos = apr_array_make(c->pool, client_protos->nelts+1, ++ sizeof(char *)); ++ ++ if (sslconn->alpn_proposefns != NULL) { ++ /* Invoke our alpn_propos_proto hooks, giving other modules a chance to ++ * propose protocol names for selection. We might have several such ++ * hooks installed and if two make a proposal, we need to give ++ * preference to one. ++ */ ++ for (i = 0; i < sslconn->alpn_proposefns->nelts; i++) { ++ ssl_alpn_propose_protos fn = ++ APR_ARRAY_IDX(sslconn->alpn_proposefns, i, ++ ssl_alpn_propose_protos); ++ ++ if (fn(c, client_protos, proposed_protos) == DONE) ++ break; ++ } ++ } ++ ++ if (proposed_protos->nelts <= 0) { ++ /* Regardless of installed hooks, the http/1.1 protocol is always ++ * supported by us. Choose it if none other matches. */ ++ if (ssl_array_index(client_protos, alpn_http1) < 0) { ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02839) ++ "none of the client ALPN protocols are supported"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ *out = (const unsigned char*)alpn_http1; ++ *outlen = (unsigned char)strlen(alpn_http1); ++ return SSL_TLSEXT_ERR_OK; ++ } ++ ++ /* Now select the most preferred protocol from the proposals. */ ++ *out = APR_ARRAY_IDX(proposed_protos, 0, const unsigned char *); ++ for (i = 1; i < proposed_protos->nelts; ++i) { ++ const char *proto = APR_ARRAY_IDX(proposed_protos, i, const char*); ++ /* Do we prefer it over existing candidate? */ ++ if (ssl_cmp_alpn_protos(mctx, (const char *)*out, proto) < 0) { ++ *out = (const unsigned char*)proto; ++ } ++ } ++ ++ len = strlen((const char*)*out); ++ if (len > 255) { ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02840) ++ "ALPN negotiated protocol name too long"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ *outlen = (unsigned char)len; ++ ++ return SSL_TLSEXT_ERR_OK; ++} ++#endif ++ + #ifdef HAVE_SRP + + int ssl_callback_SRPServerParams(SSL *ssl, int *ad, void *arg) +diff -ru modules/ssl/ssl_private.h modules/ssl/ssl_private.h +--- modules/ssl/ssl_private.h 2015-06-17 15:09:03.000000000 +0200 ++++ modules/ssl/ssl_private.h 2015-06-17 15:52:15.000000000 +0200 +@@ -182,6 +182,11 @@ + #include + #endif + ++/* ALPN Protocol Negotiation */ ++#if defined(TLSEXT_TYPE_application_layer_protocol_negotiation) ++#define HAVE_TLS_ALPN ++#endif ++ + #endif /* !defined(OPENSSL_NO_TLSEXT) && defined(SSL_set_tlsext_host_name) */ + + /* mod_ssl headers */ +@@ -443,6 +448,12 @@ + * connection */ + } reneg_state; + ++#ifdef HAVE_TLS_ALPN ++ /* Poor man's inter-module optional hooks for ALPN. */ ++ apr_array_header_t *alpn_proposefns; /* list of ssl_alpn_propose_protos callbacks */ ++ apr_array_header_t *alpn_negofns; /* list of ssl_alpn_proto_negotiated callbacks. */ ++#endif ++ int vhost_selected; + server_rec *server; + } SSLConnRec; + +@@ -622,6 +633,10 @@ + SSL_CONF_CTX *ssl_ctx_config; /* Configuration context */ + apr_array_header_t *ssl_ctx_param; /* parameters to pass to SSL_CTX */ + #endif ++ ++#ifdef HAVE_TLS_ALPN ++ apr_array_header_t *ssl_alpn_pref; /* protocol names in order of preference */ ++#endif + } modssl_ctx_t; + + struct SSLSrvConfigRec { +@@ -748,6 +763,10 @@ + const char *ssl_cmd_SSLOpenSSLConfCmd(cmd_parms *cmd, void *dcfg, const char *arg1, const char *arg2); + #endif + ++#ifdef HAVE_TLS_ALPN ++const char *ssl_cmd_SSLALPNPreference(cmd_parms *cmd, void *dcfg, const char *protocol); ++#endif ++ + #ifdef HAVE_SRP + const char *ssl_cmd_SSLSRPVerifierFile(cmd_parms *cmd, void *dcfg, const char *arg); + const char *ssl_cmd_SSLSRPUnknownUserSeed(cmd_parms *cmd, void *dcfg, const char *arg); +@@ -789,6 +808,7 @@ + void ssl_callback_DelSessionCacheEntry(SSL_CTX *, SSL_SESSION *); + void ssl_callback_Info(const SSL *, int, int); + #ifdef HAVE_TLSEXT ++apr_status_t ssl_select_vhost(conn_rec *c); + int ssl_callback_ServerNameIndication(SSL *, int *, modssl_ctx_t *); + #endif + #ifdef HAVE_TLS_SESSION_TICKETS +@@ -796,6 +816,12 @@ + EVP_CIPHER_CTX *, HMAC_CTX *, int); + #endif + ++#ifdef HAVE_TLS_ALPN ++int ssl_callback_alpn_select(SSL *ssl, const unsigned char **out, ++ unsigned char *outlen, const unsigned char *in, ++ unsigned int inlen, void *arg); ++#endif ++ + /** Session Cache Support */ + apr_status_t ssl_scache_init(server_rec *, apr_pool_t *); + void ssl_scache_status_register(apr_pool_t *p); diff --git a/modules/http2/sandbox/httpd/patches/httpd-2.4.x-alpn-v4.patch b/modules/http2/sandbox/httpd/patches/httpd-2.4.x-alpn-v4.patch new file mode 100644 index 0000000000..733f4fa98b --- /dev/null +++ b/modules/http2/sandbox/httpd/patches/httpd-2.4.x-alpn-v4.patch @@ -0,0 +1,535 @@ +Index: CHANGES +=================================================================== +--- CHANGES (revision 1681752) ++++ CHANGES (working copy) +@@ -12,6 +12,12 @@ Changes with Apache 2.4.13 + calls r:wsupgrade() can cause a child process crash. + [Edward Lu ] + ++ *) mod_ssl: add ALPN support by allowing other modules to register callbacks ++ for negotiation of the application layer protocol. PR 52210. ++ [Matthew Steele , Joe Orton, Jim Jagielski, ++ Stefan Eissing , Rainer Jung, Ruediger Pluem, ++ Kaspar Brand] ++ + *) mod_ssl OCSP Stapling: Don't block initial handshakes while refreshing + the OCSP response for a different certificate. mod_ssl has an additional + global mutex, "ssl-stapling-refresh". PR 57131 (partial fix). +Index: docs/manual/mod/mod_ssl.xml +=================================================================== +--- docs/manual/mod/mod_ssl.xml (revision 1681752) ++++ docs/manual/mod/mod_ssl.xml (working copy) +@@ -2659,4 +2659,32 @@ SSLOpenSSLConfCmd SignatureAlgorithms RSA+SHA384:E + + + ++ ++SSLALPNPreference ++Configure protocol preference for Application-Layer Protocol Negotiation (RFC 7301) ++SSLALPNPreference protocol-id ... ++server config ++virtual host ++Available if using OpenSSL 1.0.2 or later ++ ++ ++

This directive overrides preferences by implementations of application-layer ++protocols during negotiation. Protocol IDs must be specified in terms of the ++"Identification Sequence" from IANA's Application-Layer Protocol ++Negotiation (ALPN) Protocol IDs registry. The protocol specified first gets ++precedence over later or unspecified protocols. This list is evaluated ++against client capabilities.

++ ++Examples ++ ++SSLALPNPreference h2 spdy/3 ++ ++

For clients which support both protocols, h2 will be selected. For ++clients which only support spdy/3, that one will be chosen. If a client ++supports only protocol X and there is support for X in httpd, the ++negotiation will select X.

++
++ ++ ++ + +Index: modules/ssl/mod_ssl.c +=================================================================== +--- modules/ssl/mod_ssl.c (revision 1681752) ++++ modules/ssl/mod_ssl.c (working copy) +@@ -273,6 +273,12 @@ static const command_rec ssl_config_cmds[] = { + "OpenSSL configuration command") + #endif + ++#ifdef HAVE_TLS_ALPN ++ SSL_CMD_SRV(ALPNPreference, ITERATE, ++ "Preference in Application-Layer Protocol Negotiation (ALPN), " ++ "protocols are chosen in the specified order") ++#endif ++ + /* Deprecated directives. */ + AP_INIT_RAW_ARGS("SSLLog", ap_set_deprecated, NULL, OR_ALL, + "SSLLog directive is no longer supported - use ErrorLog."), +@@ -426,6 +432,37 @@ int ssl_engine_disable(conn_rec *c) + return 1; + } + ++static int modssl_register_alpn(conn_rec *c, ++ ssl_alpn_propose_protos advertisefn, ++ ssl_alpn_proto_negotiated negotiatedfn) ++{ ++#ifdef HAVE_TLS_ALPN ++ SSLConnRec *sslconn = myConnConfig(c); ++ ++ if (!sslconn) { ++ return DECLINED; ++ } ++ ++ if (!sslconn->alpn_proposefns) { ++ sslconn->alpn_proposefns = ++ apr_array_make(c->pool, 5, sizeof(ssl_alpn_propose_protos)); ++ sslconn->alpn_negofns = ++ apr_array_make(c->pool, 5, sizeof(ssl_alpn_proto_negotiated)); ++ } ++ ++ if (advertisefn) ++ APR_ARRAY_PUSH(sslconn->alpn_proposefns, ssl_alpn_propose_protos) = ++ advertisefn; ++ if (negotiatedfn) ++ APR_ARRAY_PUSH(sslconn->alpn_negofns, ssl_alpn_proto_negotiated) = ++ negotiatedfn; ++ ++ return OK; ++#else ++ return DECLINED; ++#endif ++} ++ + int ssl_init_ssl_connection(conn_rec *c, request_rec *r) + { + SSLSrvConfigRec *sc; +@@ -588,6 +625,7 @@ static void ssl_register_hooks(apr_pool_t *p) + + APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable); + APR_REGISTER_OPTIONAL_FN(ssl_engine_disable); ++ APR_REGISTER_OPTIONAL_FN(modssl_register_alpn); + + ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "ssl", + AUTHZ_PROVIDER_VERSION, +Index: modules/ssl/mod_ssl.h +=================================================================== +--- modules/ssl/mod_ssl.h (revision 1681752) ++++ modules/ssl/mod_ssl.h (working copy) +@@ -63,5 +63,46 @@ APR_DECLARE_OPTIONAL_FN(int, ssl_proxy_enable, (co + + APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec *)); + ++/** The alpn_propose_proto callback allows other modules to propose ++ * the name of the protocol that will be chosen during the ++ * Application-Layer Protocol Negotiation (ALPN) portion of the SSL handshake. ++ * The callback is given the connection and a list of NULL-terminated ++ * protocol strings as supported by the client. If this client_protos is ++ * non-empty, it must pick its preferred protocol from that list. Otherwise ++ * it should add its supported protocols in order of precedence. ++ * The callback should not yet modify the connection or install any filters ++ * as its proposal(s) may be overridden by another callback or server ++ * configuration. ++ * It should return OK or, to prevent further processing of (other modules') ++ * callbacks, return DONE. ++ */ ++typedef int (*ssl_alpn_propose_protos)(conn_rec *connection, ++ apr_array_header_t *client_protos, ++ apr_array_header_t *proposed_protos); ++ ++/** The alpn_proto_negotiated callback allows other modules to discover ++ * the name of the protocol that was chosen during the Application-Layer ++ * Protocol Negotiation (ALPN) portion of the SSL handshake. ++ * The callback is given the connection, a ++ * non-NUL-terminated string containing the protocol name, and the ++ * length of the string; it should do something appropriate ++ * (i.e. insert or remove filters) and return OK. To prevent further ++ * processing of (other modules') callbacks, return DONE. */ ++typedef int (*ssl_alpn_proto_negotiated)(conn_rec *connection, ++ const char *proto_name, ++ apr_size_t proto_name_len); ++ ++/* An optional function which can be used to register a pair of callbacks ++ * for ALPN handling. ++ * This optional function should be invoked from a pre_connection hook ++ * which runs *after* mod_ssl.c's pre_connection hook. The function returns ++ * OK if the callbacks are registered, or DECLINED otherwise (for example if ++ * mod_ssl does not support ALPN). ++ */ ++APR_DECLARE_OPTIONAL_FN(int, modssl_register_alpn, ++ (conn_rec *conn, ++ ssl_alpn_propose_protos proposefn, ++ ssl_alpn_proto_negotiated negotiatedfn)); ++ + #endif /* __MOD_SSL_H__ */ + /** @} */ +Index: modules/ssl/ssl_engine_config.c +=================================================================== +--- modules/ssl/ssl_engine_config.c (revision 1681752) ++++ modules/ssl/ssl_engine_config.c (working copy) +@@ -161,6 +161,9 @@ static void modssl_ctx_init(modssl_ctx_t *mctx, ap + SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_CERTIFICATE); + mctx->ssl_ctx_param = apr_array_make(p, 5, sizeof(ssl_ctx_param_t)); + #endif ++#ifdef HAVE_TLS_ALPN ++ mctx->ssl_alpn_pref = apr_array_make(p, 5, sizeof(const char *)); ++#endif + } + + static void modssl_ctx_init_proxy(SSLSrvConfigRec *sc, +@@ -305,6 +308,9 @@ static void modssl_ctx_cfg_merge(apr_pool_t *p, + #ifdef HAVE_SSL_CONF_CMD + cfgMergeArray(ssl_ctx_param); + #endif ++#ifdef HAVE_TLS_ALPN ++ cfgMergeArray(ssl_alpn_pref); ++#endif + } + + static void modssl_ctx_cfg_merge_proxy(apr_pool_t *p, +@@ -1890,6 +1896,16 @@ const char *ssl_cmd_SSLOpenSSLConfCmd(cmd_parms *c + } + #endif + ++#ifdef HAVE_TLS_ALPN ++const char *ssl_cmd_SSLALPNPreference(cmd_parms *cmd, void *dcfg, ++ const char *protocol) ++{ ++ SSLSrvConfigRec *sc = mySrvConfig(cmd->server); ++ APR_ARRAY_PUSH(sc->server->ssl_alpn_pref, const char *) = protocol; ++ return NULL; ++} ++#endif ++ + #ifdef HAVE_SRP + + const char *ssl_cmd_SSLSRPVerifierFile(cmd_parms *cmd, void *dcfg, +Index: modules/ssl/ssl_engine_init.c +=================================================================== +--- modules/ssl/ssl_engine_init.c (revision 1681752) ++++ modules/ssl/ssl_engine_init.c (working copy) +@@ -625,6 +625,10 @@ static void ssl_init_ctx_callbacks(server_rec *s, + SSL_CTX_set_tmp_dh_callback(ctx, ssl_callback_TmpDH); + + SSL_CTX_set_info_callback(ctx, ssl_callback_Info); ++ ++#ifdef HAVE_TLS_ALPN ++ SSL_CTX_set_alpn_select_cb(ctx, ssl_callback_alpn_select, NULL); ++#endif + } + + static apr_status_t ssl_init_ctx_verify(server_rec *s, +Index: modules/ssl/ssl_engine_io.c +=================================================================== +--- modules/ssl/ssl_engine_io.c (revision 1681752) ++++ modules/ssl/ssl_engine_io.c (working copy) +@@ -28,6 +28,7 @@ + core keeps dumping.'' + -- Unknown */ + #include "ssl_private.h" ++#include "mod_ssl.h" + #include "apr_date.h" + + /* _________________________________________________________________ +@@ -297,6 +298,9 @@ typedef struct { + apr_pool_t *pool; + char buffer[AP_IOBUFSIZE]; + ssl_filter_ctx_t *filter_ctx; ++#ifdef HAVE_TLS_ALPN ++ int alpn_finished; /* 1 if ALPN has finished, 0 otherwise */ ++#endif + } bio_filter_in_ctx_t; + + /* +@@ -1412,6 +1416,40 @@ static apr_status_t ssl_io_filter_input(ap_filter_ + APR_BRIGADE_INSERT_TAIL(bb, bucket); + } + ++#ifdef HAVE_TLS_ALPN ++ /* By this point, Application-Layer Protocol Negotiation (ALPN) should be ++ * completed (if our version of OpenSSL supports it). If we haven't already, ++ * find out which protocol was decided upon and inform other modules ++ * by calling alpn_proto_negotiated_hook. ++ */ ++ if (!inctx->alpn_finished) { ++ SSLConnRec *sslconn = myConnConfig(f->c); ++ const unsigned char *next_proto = NULL; ++ unsigned next_proto_len = 0; ++ int n; ++ ++ if (sslconn->alpn_negofns) { ++ SSL_get0_alpn_selected(inctx->ssl, &next_proto, &next_proto_len); ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, f->c, ++ APLOGNO(02836) "ALPN selected protocol: '%s'", ++ (next_proto && next_proto_len) ? ++ apr_pstrmemdup(f->c->pool, ++ (const char *)next_proto, ++ next_proto_len) : ++ "(null)"); ++ for (n = 0; n < sslconn->alpn_negofns->nelts; n++) { ++ ssl_alpn_proto_negotiated fn = ++ APR_ARRAY_IDX(sslconn->alpn_negofns, n, ++ ssl_alpn_proto_negotiated); ++ ++ if (fn(f->c, (const char *)next_proto, next_proto_len) == DONE) ++ break; ++ } ++ } ++ inctx->alpn_finished = 1; ++ } ++#endif ++ + return APR_SUCCESS; + } + +@@ -1893,6 +1931,9 @@ static void ssl_io_input_add_filter(ssl_filter_ctx + inctx->block = APR_BLOCK_READ; + inctx->pool = c->pool; + inctx->filter_ctx = filter_ctx; ++#ifdef HAVE_TLS_ALPN ++ inctx->alpn_finished = 0; ++#endif + } + + /* The request_rec pointer is passed in here only to ensure that the +Index: modules/ssl/ssl_engine_kernel.c +=================================================================== +--- modules/ssl/ssl_engine_kernel.c (revision 1681752) ++++ modules/ssl/ssl_engine_kernel.c (working copy) +@@ -29,6 +29,7 @@ + time I was too famous.'' + -- Unknown */ + #include "ssl_private.h" ++#include "mod_ssl.h" + #include "util_md5.h" + + static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn); +@@ -2149,6 +2150,152 @@ int ssl_callback_SessionTicket(SSL *ssl, + } + #endif /* HAVE_TLS_SESSION_TICKETS */ + ++#ifdef HAVE_TLS_ALPN ++static int ssl_array_index(apr_array_header_t *array, const char *s) ++{ ++ int i; ++ for (i = 0; i < array->nelts; i++) { ++ const char *p = APR_ARRAY_IDX(array, i, const char *); ++ if (!strcmp(p, s)) { ++ return i; ++ } ++ } ++ return -1; ++} ++ ++/* ++ * Compare two ALPN protocol proposal. Result is similar to strcmp(): ++ * 0 gives same precedence, >0 means proto1 is preferred. ++ */ ++static int ssl_cmp_alpn_protos(modssl_ctx_t *ctx, ++ const char *proto1, ++ const char *proto2) ++{ ++ if (ctx && ctx->ssl_alpn_pref) { ++ int index1 = ssl_array_index(ctx->ssl_alpn_pref, proto1); ++ int index2 = ssl_array_index(ctx->ssl_alpn_pref, proto2); ++ if (index2 > index1) { ++ return (index1 >= 0) ? 1 : -1; ++ } ++ else if (index1 > index2) { ++ return (index2 >= 0) ? -1 : 1; ++ } ++ } ++ /* both have the same index (mabye -1 or no pref configured) and we compare ++ * the names so that spdy3 gets precedence over spdy2. That makes ++ * the outcome at least deterministic. */ ++ return strcmp((const char *)proto1, (const char *)proto2); ++} ++ ++/* ++ * This callback function is executed when the TLS Application-Layer ++ * Protocol Negotiation Extension (ALPN, RFC 7301) is triggered by the Client ++ * Hello, giving a list of desired protocol names (in descending preference) ++ * to the server. ++ * The callback has to select a protocol name or return an error if none of ++ * the clients preferences is supported. ++ * The selected protocol does not have to be on the client list, according ++ * to RFC 7301, so no checks are performed. ++ * The client protocol list is serialized as length byte followed by ASCII ++ * characters (not null-terminated), followed by the next protocol name. ++ */ ++int ssl_callback_alpn_select(SSL *ssl, ++ const unsigned char **out, unsigned char *outlen, ++ const unsigned char *in, unsigned int inlen, ++ void *arg) ++{ ++ conn_rec *c = (conn_rec*)SSL_get_app_data(ssl); ++ SSLConnRec *sslconn = myConnConfig(c); ++ server_rec *s = mySrvFromConn(c); ++ SSLSrvConfigRec *sc = mySrvConfig(s); ++ modssl_ctx_t *mctx = myCtxConfig(sslconn, sc); ++ const char *alpn_http1 = "http/1.1"; ++ apr_array_header_t *client_protos; ++ apr_array_header_t *proposed_protos; ++ int i; ++ size_t len; ++ ++ /* If the connection object is not available, ++ * then there's nothing for us to do. */ ++ if (c == NULL) { ++ return SSL_TLSEXT_ERR_OK; ++ } ++ ++ if (inlen == 0) { ++ // someone tries to trick us? ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02837) ++ "ALPN client protocol list empty"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ ++ client_protos = apr_array_make(c->pool, 0, sizeof(char *)); ++ for (i = 0; i < inlen; /**/) { ++ unsigned int plen = in[i++]; ++ if (plen + i > inlen) { ++ // someone tries to trick us? ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02838) ++ "ALPN protocol identifier too long"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ APR_ARRAY_PUSH(client_protos, char *) = ++ apr_pstrndup(c->pool, (const char *)in+i, plen); ++ i += plen; ++ } ++ ++ proposed_protos = apr_array_make(c->pool, client_protos->nelts+1, ++ sizeof(char *)); ++ ++ if (sslconn->alpn_proposefns != NULL) { ++ /* Invoke our alpn_propose functions, giving other modules a chance to ++ * propose protocol names for selection. We might have several such ++ * functions installed and if two make a proposal, we need to give ++ * preference to one. ++ */ ++ for (i = 0; i < sslconn->alpn_proposefns->nelts; i++) { ++ ssl_alpn_propose_protos fn = ++ APR_ARRAY_IDX(sslconn->alpn_proposefns, i, ++ ssl_alpn_propose_protos); ++ ++ if (fn(c, client_protos, proposed_protos) == DONE) ++ break; ++ } ++ } ++ ++ if (proposed_protos->nelts <= 0) { ++ /* Regardless of installed hooks, the http/1.1 protocol is always ++ * supported by us. Choose it if none other matches. */ ++ if (ssl_array_index(client_protos, alpn_http1) < 0) { ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02839) ++ "none of the client ALPN protocols are supported"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ *out = (const unsigned char*)alpn_http1; ++ *outlen = (unsigned char)strlen(alpn_http1); ++ return SSL_TLSEXT_ERR_OK; ++ } ++ ++ /* Now select the most preferred protocol from the proposals. */ ++ *out = APR_ARRAY_IDX(proposed_protos, 0, const unsigned char *); ++ for (i = 1; i < proposed_protos->nelts; ++i) { ++ const char *proto = APR_ARRAY_IDX(proposed_protos, i, const char *); ++ /* Do we prefer it over existing candidate? */ ++ if (ssl_cmp_alpn_protos(mctx, (const char *)*out, proto) < 0) { ++ *out = (const unsigned char *)proto; ++ } ++ } ++ ++ len = strlen((const char*)*out); ++ if (len > 255) { ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02840) ++ "ALPN negotiated protocol name too long"); ++ return SSL_TLSEXT_ERR_ALERT_FATAL; ++ } ++ *outlen = (unsigned char)len; ++ ++ return SSL_TLSEXT_ERR_OK; ++} ++#endif /* HAVE_TLS_ALPN */ ++ + #ifdef HAVE_SRP + + int ssl_callback_SRPServerParams(SSL *ssl, int *ad, void *arg) +Index: modules/ssl/ssl_private.h +=================================================================== +--- modules/ssl/ssl_private.h (revision 1681752) ++++ modules/ssl/ssl_private.h (working copy) +@@ -182,6 +182,11 @@ + #include + #endif + ++/* ALPN Protocol Negotiation */ ++#if defined(TLSEXT_TYPE_application_layer_protocol_negotiation) ++#define HAVE_TLS_ALPN ++#endif ++ + #endif /* !defined(OPENSSL_NO_TLSEXT) && defined(SSL_set_tlsext_host_name) */ + + /* mod_ssl headers */ +@@ -443,6 +448,12 @@ typedef struct { + * connection */ + } reneg_state; + ++#ifdef HAVE_TLS_ALPN ++ /* Poor man's inter-module optional hooks for ALPN. */ ++ apr_array_header_t *alpn_proposefns; /* list of ALPN propose callbacks */ ++ apr_array_header_t *alpn_negofns; /* list of ALPN negotiation callbacks. */ ++#endif ++ + server_rec *server; + } SSLConnRec; + +@@ -624,6 +635,10 @@ typedef struct { + SSL_CONF_CTX *ssl_ctx_config; /* Configuration context */ + apr_array_header_t *ssl_ctx_param; /* parameters to pass to SSL_CTX */ + #endif ++ ++#ifdef HAVE_TLS_ALPN ++ apr_array_header_t *ssl_alpn_pref; /* list of ALPN protocol IDs */ ++#endif + } modssl_ctx_t; + + struct SSLSrvConfigRec { +@@ -750,6 +765,10 @@ const char *ssl_cmd_SSLOCSPEnable(cmd_parms *cmd, + const char *ssl_cmd_SSLOpenSSLConfCmd(cmd_parms *cmd, void *dcfg, const char *arg1, const char *arg2); + #endif + ++#ifdef HAVE_TLS_ALPN ++const char *ssl_cmd_SSLALPNPreference(cmd_parms *cmd, void *dcfg, const char *protocol); ++#endif ++ + #ifdef HAVE_SRP + const char *ssl_cmd_SSLSRPVerifierFile(cmd_parms *cmd, void *dcfg, const char *arg); + const char *ssl_cmd_SSLSRPUnknownUserSeed(cmd_parms *cmd, void *dcfg, const char *arg); +@@ -798,6 +817,12 @@ int ssl_callback_SessionTicket(SSL *, unsi + EVP_CIPHER_CTX *, HMAC_CTX *, int); + #endif + ++#ifdef HAVE_TLS_ALPN ++int ssl_callback_alpn_select(SSL *ssl, const unsigned char **out, ++ unsigned char *outlen, const unsigned char *in, ++ unsigned int inlen, void *arg); ++#endif ++ + /** Session Cache Support */ + apr_status_t ssl_scache_init(server_rec *, apr_pool_t *); + void ssl_scache_status_register(apr_pool_t *p); +Index: . +=================================================================== +--- . (revision 1681752) ++++ . (working copy) + +Property changes on: . +___________________________________________________________________ +Modified: svn:mergeinfo + Merged /httpd/httpd/trunk:r1332643,1487772,1670397,1670434,1670436,1670578,1670738,1675459,1676004,1676709,1681741,1681746 diff --git a/modules/http2/sandbox/httpd/patches/httpd-alpn-v4-v5.patch b/modules/http2/sandbox/httpd/patches/httpd-alpn-v4-v5.patch new file mode 100644 index 0000000000..07fadc775c --- /dev/null +++ b/modules/http2/sandbox/httpd/patches/httpd-alpn-v4-v5.patch @@ -0,0 +1,148 @@ +diff -ru modules/ssl/ssl_engine_kernel.c modules/ssl/ssl_engine_kernel.c +--- modules/ssl/ssl_engine_kernel.c 2015-06-17 16:55:27.000000000 +0200 ++++ modules/ssl/ssl_engine_kernel.c 2015-06-17 16:55:46.000000000 +0200 +@@ -1890,55 +1890,69 @@ + } + + #ifdef HAVE_TLSEXT ++apr_status_t ssl_select_vhost(conn_rec *c) ++{ ++ SSLConnRec *sslconn = myConnConfig(c); ++ const char *servername; ++ ++ if (sslconn == NULL || sslconn->ssl == NULL) { ++ return APR_EINVAL; ++ } ++ else if (sslconn->vhost_selected) { ++ return APR_SUCCESS; ++ } ++ ++ servername = SSL_get_servername(sslconn->ssl, TLSEXT_NAMETYPE_host_name); ++ if (servername) { ++ if (ap_vhost_iterate_given_conn(c, ssl_find_vhost, ++ (void *)servername)) { ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02043) ++ "SSL virtual host for servername %s found", ++ servername); ++ sslconn->vhost_selected = 1; ++ return APR_SUCCESS; ++ } ++ else { ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02044) ++ "No matching SSL virtual host for servername " ++ "%s found (using default/first virtual host)", ++ servername); ++ /* ++ * RFC 6066 section 3 says "It is NOT RECOMMENDED to send ++ * a warning-level unrecognized_name(112) alert, because ++ * the client's behavior in response to warning-level alerts ++ * is unpredictable." ++ * ++ * To maintain backwards compatibility in mod_ssl, we ++ * no longer send any alert (neither warning- nor fatal-level), ++ * i.e. we take the second action suggested in RFC 6066: ++ * "If the server understood the ClientHello extension but ++ * does not recognize the server name, the server SHOULD take ++ * one of two actions: either abort the handshake by sending ++ * a fatal-level unrecognized_name(112) alert or continue ++ * the handshake." ++ */ ++ } ++ } ++ else { ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02645) ++ "Server name not provided via TLS extension " ++ "(using default/first virtual host)"); ++ } ++ ++ return APR_NOTFOUND; ++} + /* + * This callback function is executed when OpenSSL encounters an extended + * client hello with a server name indication extension ("SNI", cf. RFC 6066). + */ + int ssl_callback_ServerNameIndication(SSL *ssl, int *al, modssl_ctx_t *mctx) + { +- const char *servername = +- SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name); + conn_rec *c = (conn_rec *)SSL_get_app_data(ssl); +- +- if (c) { +- if (servername) { +- if (ap_vhost_iterate_given_conn(c, ssl_find_vhost, +- (void *)servername)) { +- ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02043) +- "SSL virtual host for servername %s found", +- servername); +- return SSL_TLSEXT_ERR_OK; +- } +- else { +- ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02044) +- "No matching SSL virtual host for servername " +- "%s found (using default/first virtual host)", +- servername); +- /* +- * RFC 6066 section 3 says "It is NOT RECOMMENDED to send +- * a warning-level unrecognized_name(112) alert, because +- * the client's behavior in response to warning-level alerts +- * is unpredictable." +- * +- * To maintain backwards compatibility in mod_ssl, we +- * no longer send any alert (neither warning- nor fatal-level), +- * i.e. we take the second action suggested in RFC 6066: +- * "If the server understood the ClientHello extension but +- * does not recognize the server name, the server SHOULD take +- * one of two actions: either abort the handshake by sending +- * a fatal-level unrecognized_name(112) alert or continue +- * the handshake." +- */ +- } +- } +- else { +- ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02645) +- "Server name not provided via TLS extension " +- "(using default/first virtual host)"); +- } +- } +- +- return SSL_TLSEXT_ERR_NOACK; ++ apr_status_t status; ++ ++ status = ssl_select_vhost(c); ++ return (status == APR_SUCCESS)? SSL_TLSEXT_ERR_OK : SSL_TLSEXT_ERR_NOACK; + } + + /* +@@ -2209,6 +2223,12 @@ + return SSL_TLSEXT_ERR_OK; + } + ++ /* Make sure that we set the correct vhost based on SNI servername ++ * information. This is supposed to be done by the SNI callback, but ++ * currently the ssl libs call the ALPN callback *before* the SNI one. ++ */ ++ ssl_select_vhost(c); ++ + if (inlen == 0) { + // someone tries to trick us? + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02837) +diff -ru modules/ssl/ssl_private.h modules/ssl/ssl_private.h +--- modules/ssl/ssl_private.h 2015-06-17 16:55:27.000000000 +0200 ++++ modules/ssl/ssl_private.h 2015-06-17 16:55:46.000000000 +0200 +@@ -453,7 +453,7 @@ + apr_array_header_t *alpn_proposefns; /* list of ssl_alpn_propose_protos callbacks */ + apr_array_header_t *alpn_negofns; /* list of ssl_alpn_proto_negotiated callbacks. */ + #endif +- ++ int vhost_selected; + server_rec *server; + } SSLConnRec; + +@@ -808,6 +808,7 @@ + void ssl_callback_DelSessionCacheEntry(SSL_CTX *, SSL_SESSION *); + void ssl_callback_Info(const SSL *, int, int); + #ifdef HAVE_TLSEXT ++apr_status_t ssl_select_vhost(conn_rec *c); + int ssl_callback_ServerNameIndication(SSL *, int *, modssl_ctx_t *); + #endif + #ifdef HAVE_TLS_SESSION_TICKETS diff --git a/modules/http2/sandbox/httpd/patches/httpd-npn.unified.diff.patch b/modules/http2/sandbox/httpd/patches/httpd-npn.unified.diff.patch new file mode 100644 index 0000000000..e7b0b5ee6c --- /dev/null +++ b/modules/http2/sandbox/httpd/patches/httpd-npn.unified.diff.patch @@ -0,0 +1,366 @@ +diff -ru modules/ssl/mod_ssl.c modules/ssl/mod_ssl.c +--- modules/ssl/mod_ssl.c 2015-04-27 17:41:19.000000000 +0200 ++++ modules/ssl/mod_ssl.c 2015-04-27 17:45:56.000000000 +0200 +@@ -273,7 +273,7 @@ + "OpenSSL configuration command") + #endif + +-#ifdef HAVE_TLS_ALPN ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) + SSL_CMD_SRV(ALPNPreference, ITERATE, + "Preference in Application-Layer Protocol Negotiation (ALPN), " + "protocols are chosen in the specified order") +@@ -429,6 +429,37 @@ + return 1; + } + ++static int modssl_register_npn(conn_rec *c, ++ ssl_npn_advertise_protos advertisefn, ++ ssl_npn_proto_negotiated negotiatedfn) ++{ ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) ++ SSLConnRec *sslconn = myConnConfig(c); ++ ++ if (!sslconn) { ++ return DECLINED; ++ } ++ ++ if (!sslconn->npn_advertfns) { ++ sslconn->npn_advertfns = ++ apr_array_make(c->pool, 5, sizeof(ssl_npn_advertise_protos)); ++ sslconn->npn_negofns = ++ apr_array_make(c->pool, 5, sizeof(ssl_npn_proto_negotiated)); ++ } ++ ++ if (advertisefn) ++ APR_ARRAY_PUSH(sslconn->npn_advertfns, ssl_npn_advertise_protos) = ++ advertisefn; ++ if (negotiatedfn) ++ APR_ARRAY_PUSH(sslconn->npn_negofns, ssl_npn_proto_negotiated) = ++ negotiatedfn; ++ ++ return OK; ++#else ++ return DECLINED; ++#endif ++} ++ + static int modssl_register_alpn(conn_rec *c, + ssl_alpn_propose_protos advertisefn, + ssl_alpn_proto_negotiated negotiatedfn) +@@ -623,6 +653,7 @@ + + APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable); + APR_REGISTER_OPTIONAL_FN(ssl_engine_disable); ++ APR_REGISTER_OPTIONAL_FN(modssl_register_npn); + APR_REGISTER_OPTIONAL_FN(modssl_register_alpn); + + ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "ssl", +diff -ru modules/ssl/mod_ssl.h modules/ssl/mod_ssl.h +--- modules/ssl/mod_ssl.h 2015-04-27 17:41:19.000000000 +0200 ++++ modules/ssl/mod_ssl.h 2015-04-27 17:45:56.000000000 +0200 +@@ -63,6 +63,41 @@ + + APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec *)); + ++/** The npn_advertise_protos callback allows another modules to add ++ * entries to the list of protocol names advertised by the server ++ * during the Next Protocol Negotiation (NPN) portion of the SSL ++ * handshake. The callback is given the connection and an APR array; ++ * it should push one or more char*'s pointing to NUL-terminated ++ * strings (such as "http/1.1" or "spdy/2") onto the array and return ++ * OK. To prevent further processing of (other modules') callbacks, ++ * return DONE. */ ++typedef int (*ssl_npn_advertise_protos)(conn_rec *connection, ++ apr_array_header_t *protos); ++ ++/** The npn_proto_negotiated callback allows other modules to discover ++ * the name of the protocol that was chosen during the Next Protocol ++ * Negotiation (NPN) portion of the SSL handshake. Note that this may ++ * be the empty string (in which case modules should probably assume ++ * HTTP), or it may be a protocol that was never even advertised by ++ * the server. The callback is given the connection, a ++ * non-NUL-terminated string containing the protocol name, and the ++ * length of the string; it should do something appropriate ++ * (i.e. insert or remove filters) and return OK. To prevent further ++ * processing of (other modules') callbacks, return DONE. */ ++typedef int (*ssl_npn_proto_negotiated)(conn_rec *connection, ++ const char *proto_name, ++ apr_size_t proto_name_len); ++ ++/* An optional function which can be used to register a pair of ++ * callbacks for NPN handling. This optional function should be ++ * invoked from a pre_connection hook which runs *after* mod_ssl.c's ++ * pre_connection hook. The function returns OK if the callbacks are ++ * register, or DECLINED otherwise (for example if mod_ssl does not ++ * support NPN). */ ++APR_DECLARE_OPTIONAL_FN(int, modssl_register_npn, (conn_rec *conn, ++ ssl_npn_advertise_protos advertisefn, ++ ssl_npn_proto_negotiated negotiatedfn)); ++ + /** The alpn_propose_proto callback allows other modules to propose + * the name of the protocol that will be chosen during the + * Application-Layer Protocol Negotiation (ALPN) portion of the SSL handshake. +diff -ru modules/ssl/ssl_engine_config.c modules/ssl/ssl_engine_config.c +--- modules/ssl/ssl_engine_config.c 2015-04-27 17:41:19.000000000 +0200 ++++ modules/ssl/ssl_engine_config.c 2015-04-27 17:45:56.000000000 +0200 +@@ -159,7 +159,7 @@ + SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_CERTIFICATE); + mctx->ssl_ctx_param = apr_array_make(p, 5, sizeof(ssl_ctx_param_t)); + #endif +-#ifdef HAVE_TLS_ALPN ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) + mctx->ssl_alpn_pref = apr_array_make(p, 5, sizeof(const char *)); + #endif + } +@@ -301,7 +301,7 @@ + #ifdef HAVE_SSL_CONF_CMD + cfgMergeArray(ssl_ctx_param); + #endif +-#ifdef HAVE_TLS_ALPN ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) + cfgMergeArray(ssl_alpn_pref); + #endif + } +@@ -1875,7 +1875,7 @@ + } + #endif + +-#ifdef HAVE_TLS_ALPN ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) + const char *ssl_cmd_SSLALPNPreference(cmd_parms *cmd, void *dcfg, + const char *protocol) + { +diff -ru modules/ssl/ssl_engine_init.c modules/ssl/ssl_engine_init.c +--- modules/ssl/ssl_engine_init.c 2015-04-27 17:41:19.000000000 +0200 ++++ modules/ssl/ssl_engine_init.c 2015-04-27 17:45:56.000000000 +0200 +@@ -628,6 +629,11 @@ + SSL_CTX_set_alpn_select_cb( + ctx, ssl_callback_alpn_select, NULL); + #endif ++ ++#ifdef HAVE_TLS_NPN ++ SSL_CTX_set_next_protos_advertised_cb( ++ ctx, ssl_callback_AdvertiseNextProtos, NULL); ++#endif + } + + static apr_status_t ssl_init_ctx_verify(server_rec *s, +diff -ru modules/ssl/ssl_engine_io.c modules/ssl/ssl_engine_io.c +--- modules/ssl/ssl_engine_io.c 2015-04-27 17:41:19.000000000 +0200 ++++ modules/ssl/ssl_engine_io.c 2015-04-27 17:45:56.000000000 +0200 +@@ -298,7 +298,8 @@ + apr_pool_t *pool; + char buffer[AP_IOBUFSIZE]; + ssl_filter_ctx_t *filter_ctx; +-#ifdef HAVE_TLS_ALPN ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) ++ int npn_finished; /* 1 if NPN has finished, 0 otherwise */ + int alpn_finished; /* 1 if ALPN has finished, 0 otherwise */ + #endif + } bio_filter_in_ctx_t; +@@ -1447,6 +1446,37 @@ + } + #endif + ++#ifdef HAVE_TLS_NPN ++ /* By this point, Next Protocol Negotiation (NPN) should be completed (if ++ * our version of OpenSSL supports it). If we haven't already, find out ++ * which protocol was decided upon and inform other modules by calling ++ * npn_proto_negotiated_hook. */ ++ if (!inctx->npn_finished) { ++ SSLConnRec *sslconn = myConnConfig(f->c); ++ const unsigned char *next_proto = NULL; ++ unsigned next_proto_len = 0; ++ int n; ++ ++ if (sslconn->npn_negofns) { ++ SSL_get0_next_proto_negotiated( ++ inctx->ssl, &next_proto, &next_proto_len); ++ ap_log_cerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, f->c, ++ APLOGNO(02306) "SSL NPN negotiated protocol: '%*s'", ++ next_proto_len, (const char*)next_proto); ++ ++ for (n = 0; n < sslconn->npn_negofns->nelts; n++) { ++ ssl_npn_proto_negotiated fn = ++ APR_ARRAY_IDX(sslconn->npn_negofns, n, ssl_npn_proto_negotiated); ++ ++ if (fn(f->c, (const char *)next_proto, next_proto_len) == DONE) ++ break; ++ } ++ } ++ ++ inctx->npn_finished = 1; ++ } ++#endif ++ + return APR_SUCCESS; + } + +@@ -1928,9 +1958,8 @@ + inctx->block = APR_BLOCK_READ; + inctx->pool = c->pool; + inctx->filter_ctx = filter_ctx; +-#ifdef HAVE_TLS_ALPN ++ inctx->npn_finished = 0; + inctx->alpn_finished = 0; +-#endif + } + + /* The request_rec pointer is passed in here only to ensure that the +diff -ru modules/ssl/ssl_engine_kernel.c modules/ssl/ssl_engine_kernel.c +--- modules/ssl/ssl_engine_kernel.c 2015-04-27 17:41:19.000000000 +0200 ++++ modules/ssl/ssl_engine_kernel.c 2015-04-27 17:45:56.000000000 +0200 +@@ -2283,6 +2282,96 @@ + return SSL_TLSEXT_ERR_OK; + } + #endif ++#if defined(HAVE_TLS_NPN) ++/* ++ * This callback function is executed when SSL needs to decide what protocols ++ * to advertise during Next Protocol Negotiation (NPN). It must produce a ++ * string in wire format -- a sequence of length-prefixed strings -- indicating ++ * the advertised protocols. Refer to SSL_CTX_set_next_protos_advertised_cb ++ * in OpenSSL for reference. ++ */ ++int ssl_callback_AdvertiseNextProtos(SSL *ssl, const unsigned char **data_out, ++ unsigned int *size_out, void *arg) ++{ ++ conn_rec *c = (conn_rec*)SSL_get_app_data(ssl); ++ SSLConnRec *sslconn = myConnConfig(c); ++ apr_array_header_t *protos; ++ int num_protos; ++ unsigned int size; ++ int i; ++ unsigned char *data; ++ unsigned char *start; ++ ++ *data_out = NULL; ++ *size_out = 0; ++ ++ /* If the connection object is not available, or there are no NPN ++ * hooks registered, then there's nothing for us to do. */ ++ if (c == NULL || sslconn->npn_advertfns == NULL) { ++ return SSL_TLSEXT_ERR_OK; ++ } ++ ++ /* Invoke our npn_advertise_protos hook, giving other modules a chance to ++ * add alternate protocol names to advertise. */ ++ protos = apr_array_make(c->pool, 0, sizeof(char *)); ++ for (i = 0; i < sslconn->npn_advertfns->nelts; i++) { ++ ssl_npn_advertise_protos fn = ++ APR_ARRAY_IDX(sslconn->npn_advertfns, i, ssl_npn_advertise_protos); ++ ++ if (fn(c, protos) == DONE) ++ break; ++ } ++ num_protos = protos->nelts; ++ ++ /* We now have a list of null-terminated strings; we need to concatenate ++ * them together into a single string, where each protocol name is prefixed ++ * by its length. First, calculate how long that string will be. */ ++ size = 0; ++ for (i = 0; i < num_protos; ++i) { ++ const char *string = APR_ARRAY_IDX(protos, i, const char*); ++ unsigned int length = strlen(string); ++ /* If the protocol name is too long (the length must fit in one byte), ++ * then log an error and skip it. */ ++ if (length > 255) { ++ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(02307) ++ "SSL NPN protocol name too long (length=%u): %s", ++ length, string); ++ continue; ++ } ++ /* Leave room for the length prefix (one byte) plus the protocol name ++ * itself. */ ++ size += 1 + length; ++ } ++ ++ /* If there is nothing to advertise (either because no modules added ++ * anything to the protos array, or because all strings added to the array ++ * were skipped), then we're done. */ ++ if (size == 0) { ++ return SSL_TLSEXT_ERR_OK; ++ } ++ ++ /* Now we can build the string. Copy each protocol name string into the ++ * larger string, prefixed by its length. */ ++ data = apr_palloc(c->pool, size * sizeof(unsigned char)); ++ start = data; ++ for (i = 0; i < num_protos; ++i) { ++ const char *string = APR_ARRAY_IDX(protos, i, const char*); ++ apr_size_t length = strlen(string); ++ if (length > 255) ++ continue; ++ *start = (unsigned char)length; ++ ++start; ++ memcpy(start, string, length * sizeof(unsigned char)); ++ start += length; ++ } ++ ++ /* Success. */ ++ *data_out = data; ++ *size_out = size; ++ return SSL_TLSEXT_ERR_OK; ++} ++ ++#endif /* HAVE_TLS_NPN */ + + #ifdef HAVE_SRP + +diff -ru modules/ssl/ssl_private.h modules/ssl/ssl_private.h +--- modules/ssl/ssl_private.h 2015-04-27 17:41:19.000000000 +0200 ++++ modules/ssl/ssl_private.h 2015-04-27 17:45:56.000000000 +0200 +@@ -176,6 +176,11 @@ + #endif + #endif + ++/* Next Protocol Negotiation */ ++#if !defined(OPENSSL_NO_NEXTPROTONEG) && defined(OPENSSL_NPN_NEGOTIATED) ++#define HAVE_TLS_NPN ++#endif ++ + /* Secure Remote Password */ + #if !defined(OPENSSL_NO_SRP) && defined(SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB) + #define HAVE_SRP +@@ -448,6 +453,12 @@ + * connection */ + } reneg_state; + ++#ifdef HAVE_TLS_NPN ++ /* Poor man's inter-module optional hooks for NPN. */ ++ apr_array_header_t *npn_advertfns; /* list of ssl_npn_advertise_protos callbacks */ ++ apr_array_header_t *npn_negofns; /* list of ssl_npn_proto_negotiated callbacks. */ ++#endif ++ + #ifdef HAVE_TLS_ALPN + /* Poor man's inter-module optional hooks for ALPN. */ + apr_array_header_t *alpn_proposefns; /* list of ssl_alpn_propose_protos callbacks */ +@@ -634,7 +645,7 @@ + apr_array_header_t *ssl_ctx_param; /* parameters to pass to SSL_CTX */ + #endif + +-#ifdef HAVE_TLS_ALPN ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) + apr_array_header_t *ssl_alpn_pref; /* protocol names in order of preference */ + #endif + } modssl_ctx_t; +@@ -763,7 +774,7 @@ + const char *ssl_cmd_SSLOpenSSLConfCmd(cmd_parms *cmd, void *dcfg, const char *arg1, const char *arg2); + #endif + +-#ifdef HAVE_TLS_ALPN ++#if defined(HAVE_TLS_ALPN) || defined(HAVE_TLS_NPN) + const char *ssl_cmd_SSLALPNPreference(cmd_parms *cmd, void *dcfg, const char *protocol); + #endif + +@@ -820,6 +831,9 @@ + unsigned char *outlen, const unsigned char *in, + unsigned int inlen, void *arg); + #endif ++#ifdef HAVE_TLS_NPN ++int ssl_callback_AdvertiseNextProtos(SSL *ssl, const unsigned char **data, unsigned int *len, void *arg); ++#endif + + /** Session Cache Support */ + apr_status_t ssl_scache_init(server_rec *, apr_pool_t *); diff --git a/modules/http2/sandbox/httpd/patches/openssl-1.0.2-alpn.patch b/modules/http2/sandbox/httpd/patches/openssl-1.0.2-alpn.patch new file mode 100644 index 0000000000..f4332000e4 --- /dev/null +++ b/modules/http2/sandbox/httpd/patches/openssl-1.0.2-alpn.patch @@ -0,0 +1,64 @@ +diff -ur openssl-1.0.2c.orig/ssl/t1_lib.c openssl-1.0.2c/ssl/t1_lib.c +--- openssl-1.0.2c.orig/ssl/t1_lib.c 2015-06-12 16:51:27.000000000 +0200 ++++ openssl-1.0.2c/ssl/t1_lib.c 2015-06-23 09:29:51.000000000 +0200 +@@ -1974,6 +1974,8 @@ + } + + static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p, ++ const unsigned char **palpn, ++ unsigned short *palpn_len, + unsigned char *d, int n, int *al) + { + unsigned short type; +@@ -2360,7 +2362,7 @@ + # ifndef OPENSSL_NO_NEXTPROTONEG + else if (type == TLSEXT_TYPE_next_proto_neg && + s->s3->tmp.finish_md_len == 0 && +- s->s3->alpn_selected == NULL) { ++ *palpn == NULL) { + /*- + * We shouldn't accept this extension on a + * renegotiation. +@@ -2384,8 +2386,9 @@ + + else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation && + s->ctx->alpn_select_cb && s->s3->tmp.finish_md_len == 0) { +- if (tls1_alpn_handle_client_hello(s, data, size, al) != 0) +- return 0; ++ /* Store extension location for later processing */ ++ *palpn = data; ++ *palpn_len = size; + # ifndef OPENSSL_NO_NEXTPROTONEG + /* ALPN takes precedence over NPN. */ + s->s3->next_proto_neg_seen = 0; +@@ -2469,6 +2472,8 @@ + int n) + { + int al = -1; ++ const unsigned char *alpn = NULL; ++ unsigned short alpn_len = 0; + unsigned char *ptmp = *p; + /* + * Internally supported extensions are parsed first so SNI can be handled +@@ -2476,7 +2481,7 @@ + * switch the parent context using SSL_set_SSL_CTX and custom extensions + * need to be handled by the new SSL_CTX structure. + */ +- if (ssl_scan_clienthello_tlsext(s, p, d, n, &al) <= 0) { ++ if (ssl_scan_clienthello_tlsext(s, p, &alpn, &alpn_len, d, n, &al) <= 0) { + ssl3_send_alert(s, SSL3_AL_FATAL, al); + return 0; + } +@@ -2492,6 +2497,12 @@ + return 0; + } + ++ if (alpn != NULL) { ++ if (tls1_alpn_handle_client_hello(s, alpn, alpn_len, &al) != 0) { ++ ssl3_send_alert(s, SSL3_AL_FATAL, al); ++ return 0; ++ } ++ } + return 1; + } + diff --git a/modules/http2/sandbox/httpd/patches/sni_misdirect.patch b/modules/http2/sandbox/httpd/patches/sni_misdirect.patch new file mode 100644 index 0000000000..5079fc01a0 --- /dev/null +++ b/modules/http2/sandbox/httpd/patches/sni_misdirect.patch @@ -0,0 +1,45 @@ +diff -ru ../httpd-2.4.12.orig/include/httpd.h ./include/httpd.h +--- ../httpd-2.4.12.orig/include/httpd.h 2014-08-22 20:18:08.000000000 +0200 ++++ ./include/httpd.h 2015-06-11 17:05:49.000000000 +0200 +@@ -518,6 +518,7 @@ + #define HTTP_UNSUPPORTED_MEDIA_TYPE 415 + #define HTTP_RANGE_NOT_SATISFIABLE 416 + #define HTTP_EXPECTATION_FAILED 417 ++#define HTTP_MISDIRECTED_REQUEST 421 + #define HTTP_UNPROCESSABLE_ENTITY 422 + #define HTTP_LOCKED 423 + #define HTTP_FAILED_DEPENDENCY 424 +diff -ru ../httpd-2.4.12.orig/modules/http/http_protocol.c ./modules/http/http_protocol.c +--- ../httpd-2.4.12.orig/modules/http/http_protocol.c 2014-10-16 23:42:45.000000000 +0200 ++++ ./modules/http/http_protocol.c 2015-06-11 17:04:49.000000000 +0200 +@@ -135,7 +135,7 @@ + NULL, /* 418 */ + NULL, /* 419 */ + NULL, /* 420 */ +- NULL, /* 421 */ ++ "421 Misdirected Request", + "422 Unprocessable Entity", + "423 Locked", + "424 Failed Dependency", +@@ -1296,6 +1296,9 @@ + case HTTP_NETWORK_AUTHENTICATION_REQUIRED: + return("

The client needs to authenticate to gain\n" + "network access.

\n"); ++ case HTTP_MISDIRECTED_REQUEST: ++ return("

The client needs to use a new connection for this \n" ++ "request as it does not match the SNI name used.

\n"); + default: /* HTTP_INTERNAL_SERVER_ERROR */ + /* + * This comparison to expose error-notes could be modified to +diff -ru ../httpd-2.4.12.orig/modules/ssl/ssl_engine_kernel.c ./modules/ssl/ssl_engine_kernel.c +--- ../httpd-2.4.12.orig/modules/ssl/ssl_engine_kernel.c 2015-06-10 11:46:00.000000000 +0200 ++++ ./modules/ssl/ssl_engine_kernel.c 2015-06-11 16:58:34.000000000 +0200 +@@ -203,7 +203,7 @@ + ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, APLOGNO(02032) + "Hostname %s provided via SNI and hostname %s provided" + " via HTTP are different", servername, host); +- return HTTP_BAD_REQUEST; ++ return HTTP_MISDIRECTED_REQUEST; + } + } + else if (((sc->strict_sni_vhost_check == SSL_ENABLED_TRUE) diff --git a/modules/http2/sandbox/nghttp2/Makefile b/modules/http2/sandbox/nghttp2/Makefile new file mode 100644 index 0000000000..8cfd700435 --- /dev/null +++ b/modules/http2/sandbox/nghttp2/Makefile @@ -0,0 +1,239 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +NGHTTP2_VERSION = 1.0.4 +NGHTTP2_DIR = nghttp2-$(NGHTTP2_VERSION) +NGHTTP2_TAR = $(NGHTTP2_DIR).tar.gz +NGHTTP2_URL = https://github.com/tatsuhiro-t/nghttp2/releases/download/v$(NGHTTP2_VERSION)/$(NGHTTP2_TAR) + +NGHTTP2_CONF_ENV= +NGHTTP2_DEPS = +NGHTTP2_CONF = --prefix=$(BLD_PREFIX) --enable-app + +ZLIB_VERSION = 1.2.8 +ZLIB_DIR = zlib-$(ZLIB_VERSION) +ZLIB_TAR = $(ZLIB_DIR).tar.gz +ZLIB_URL = http://zlib.net/$(ZLIB_TAR) + +LIBEV_VERSION = 4.19 +LIBEV_DIR = libev-$(LIBEV_VERSION) +LIBEV_TAR = $(LIBEV_DIR).tar.gz +LIBEV_URL = http://dist.schmorp.de/libev/$(LIBEV_TAR) +LIBEV_CONF_ENV += PKG_CONFIG_PATH=$(BLD_PREFIX)/lib/pkgconfig \ + LDFLAGS=-L$(BLD_PREFIX)/lib CFLAGS=-I$(BLD_PREFIX)/include + +LIBEVENT_VERSION = 2.0.22-stable +LIBEVENT_DIR = libevent-$(LIBEVENT_VERSION) +LIBEVENT_TAR = $(LIBEVENT_DIR).tar.gz +LIBEVENT_URL = https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/$(LIBEVENT_TAR) +LIBEVENT_CONF_ENV += PKG_CONFIG_PATH=$(BLD_PREFIX)/lib/pkgconfig \ + LDFLAGS=-L$(BLD_PREFIX)/lib CFLAGS=-I$(BLD_PREFIX)/include + +GEN = gen +INST_DIR = ../install +BLD_PREFIX = $(shell dirname $$PWD)/install + +CURL_OPTS = --progress-bar + +OS = $(shell uname -s) + + +NGHTTP2_CONF_ENV += PKG_CONFIG_PATH=$(BLD_PREFIX)/lib/pkgconfig \ + LDFLAGS=-L$(BLD_PREFIX)/lib CFLAGS=-I$(BLD_PREFIX)/include + + +# For OS X, we drag our own zlib in as the one installed is not +# recognized by nghttp2 configure. +# On other OS, we expect a proper zlib/zlib-dev installation +# +ifeq ($(OS),Darwin) + # we need our own zlib + NGHTTP2_DEPS += $(INST_DIR)/.zlib-installed $(INST_DIR)/.libev-installed +else +ifneq (,$(wildcard $(INST_DIR)/lib/pkgconfig/openssl.pc)) + NGHTTP2_DEPS += $(INST_DIR)/.libevent-installed +endif +endif + +all: install + +dirs: + @mkdir -p $(GEN)/build + +clean: + @rm -rf $(GEN)/$(NGHTTP2_DIR) + +distclean: + @rm -rf $(GEN) + +distdir: + @mkdir -p $(distdir) + @tar cf - Makefile patches | (cd $(distdir) && tar xf - ) + +install: $(INST_DIR)/.nghttp2-installed + + +################################################################################ +# Install the local nghttp2 +# +$(INST_DIR)/.nghttp2-installed: $(GEN)/$(NGHTTP2_DIR)/.nghttp2-built + @echo -n installing nghttp2 locally... + @cd $(GEN)/$(NGHTTP2_DIR)/ && make install >> ../build.log + @echo done. + @touch $(INST_DIR)/.nghttp2-installed + + +################################################################################ +# Build the local nghttp2 +# +$(GEN)/$(NGHTTP2_DIR)/.nghttp2-built: \ + $(GEN)/$(NGHTTP2_DIR)/.nghttp2-configured + @echo -n building nghttp2... + @cd $(GEN)/$(NGHTTP2_DIR)/ && make >> ../build.log + @echo done. + @touch $(GEN)/$(NGHTTP2_DIR)/.nghttp2-built + +################################################################################ +# Configure the local nghttp2 sources +# +$(GEN)/$(NGHTTP2_DIR)/.nghttp2-configured: \ + $(NGHTTP2_DEPS) \ + $(GEN)/$(NGHTTP2_DIR)/.nghttp2-patched + @echo -n configuring nghttp2... + cd $(GEN)/$(NGHTTP2_DIR)/ && \ + $(NGHTTP2_CONF_ENV) ./configure $(NGHTTP2_CONF) >> ../build.log + @echo done. + @touch $(GEN)/$(NGHTTP2_DIR)/.nghttp2-configured + +################################################################################ +# Patch the local nghtp2 sources +# +$(GEN)/$(NGHTTP2_DIR)/.nghttp2-patched: \ + $(GEN)/$(NGHTTP2_DIR)/.nghttp2-extracted + @touch $(GEN)/$(NGHTTP2_DIR)/.nghttp2-patched + +################################################################################ +# Extract nghttp2 source tree +# +$(GEN)/$(NGHTTP2_DIR)/.nghttp2-extracted: \ + $(GEN)/$(NGHTTP2_TAR) + @rm -rf $(GEN)/$(NGHTTP2_DIR) + @echo -n extracting nghttp2 packages... + @cd $(GEN) && tar xfz $(NGHTTP2_TAR) + @echo done. + @touch $(GEN)/$(NGHTTP2_DIR)/.nghttp2-extracted + +################################################################################ +# Retrieve nghttp2 sources +# +$(GEN)/$(NGHTTP2_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) -L $(NGHTTP2_URL) > $(GEN)/$(NGHTTP2_TAR) + + +################################################################################ +# Build + install a local libevent library (if needed) +# +$(INST_DIR)/.libevent-installed: \ + $(GEN)/$(LIBEVENT_DIR)/.libevent-built + @echo -n installing libevent locally... + @cd $(GEN)/$(LIBEVENT_DIR) && make install >> ../build.log + @echo done. + @touch $(INST_DIR)/.libevent-installed + +$(GEN)/$(LIBEVENT_DIR)/.libevent-built: \ + $(GEN)/$(LIBEVENT_DIR)/.libevent-configured + @echo -n building libevent locally... + @cd $(GEN)/$(LIBEVENT_DIR) && make >> ../build.log + @echo done. + @touch $(GEN)/$(LIBEVENT_DIR)/.libevent-built + +$(GEN)/$(LIBEVENT_DIR)/.libevent-configured: \ + $(GEN)/$(LIBEVENT_DIR)/.libevent-extracted + @echo -n configuring libevent... + @cd $(GEN)/$(LIBEVENT_DIR) && $(LIBEVENT_CONF_ENV) ./configure --prefix=$(BLD_PREFIX) --with-sysroot=$(BLD_PREFIX) + @echo done. + @touch $(GEN)/$(LIBEVENT_DIR)/.libevent-configured + +$(GEN)/$(LIBEVENT_DIR)/.libevent-extracted: \ + $(GEN)/$(LIBEVENT_TAR) + @rm -rf $(GEN)/$(LIBEVENT_DIR) + @echo -n downloading and extracting libevent... + @cd gen; tar xfz $(LIBEVENT_TAR) + @echo done. + @touch $(GEN)/$(LIBEVENT_DIR)/.libevent-extracted + +$(GEN)/$(LIBEVENT_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) -L $(LIBEVENT_URL) > $(GEN)/$(LIBEVENT_TAR) + +################################################################################ +# Build + install a local libev library (if needed) +# +$(INST_DIR)/.libev-installed: \ + $(GEN)/$(LIBEV_DIR)/.libev-built + @echo -n installing libev locally... + @cd $(GEN)/$(LIBEV_DIR) && make install >> ../build.log + @echo done. + @touch $(INST_DIR)/.libev-installed + +$(GEN)/$(LIBEV_DIR)/.libev-built: \ + $(GEN)/$(LIBEV_DIR)/.libev-configured + @echo -n building libev locally... + @cd $(GEN)/$(LIBEV_DIR) && make >> ../build.log + @echo done. + @touch $(GEN)/$(LIBEV_DIR)/.libev-built + +$(GEN)/$(LIBEV_DIR)/.libev-configured: $(GEN)/$(LIBEV_TAR) + @rm -rf $(GEN)/$(LIBEV_DIR) + @cd $(GEN) && tar xfz $(LIBEV_TAR) + @echo -n configuring libev... + @cd $(GEN)/$(LIBEV_DIR) && $(LIBEV_CONF_ENV) ./configure --prefix=$(BLD_PREFIX) + @echo done. + @touch $(GEN)/$(LIBEV_DIR)/.libev-configured + +$(GEN)/$(LIBEV_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) -L $(LIBEV_URL) > $(GEN)/$(LIBEV_TAR) + +################################################################################ +# Build + install a local zlib library (if needed) +# +$(INST_DIR)/.zlib-installed: \ + $(GEN)/$(ZLIB_DIR)/.zlib-built + @echo -n installing zlib locally... + @cd $(GEN)/$(ZLIB_DIR) && make install >> ../build.log + @echo done. + @touch $(INST_DIR)/.zlib-installed + +$(GEN)/$(ZLIB_DIR)/.zlib-built: \ + $(GEN)/$(ZLIB_DIR)/.zlib-configured + @echo -n building zlib locally... + @cd $(GEN)/$(ZLIB_DIR) && make >> ../build.log + @echo done. + @touch $(GEN)/$(ZLIB_DIR)/.zlib-built + +$(GEN)/$(ZLIB_DIR)/.zlib-configured: $(GEN)/$(ZLIB_TAR) + @rm -rf $(GEN)/$(ZLIB_DIR) + @cd $(GEN) && tar xfz $(ZLIB_TAR) + @echo -n configuring zlib... + @cd $(GEN)/$(ZLIB_DIR) && ./configure --prefix=$(BLD_PREFIX) + @echo done. + @touch $(GEN)/$(ZLIB_DIR)/.zlib-configured + +$(GEN)/$(ZLIB_TAR): + @mkdir -p $(GEN) + curl $(CURL_OPTS) -L $(ZLIB_URL) > $(GEN)/$(ZLIB_TAR) + diff --git a/modules/http2/sandbox/test/Makefile b/modules/http2/sandbox/test/Makefile new file mode 100644 index 0000000000..32100e74ca --- /dev/null +++ b/modules/http2/sandbox/test/Makefile @@ -0,0 +1,323 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +HOST_NAME = test.example.org +HOST2_NAME = test-ser.example.org + +HTTP_PORT = 12345 +HTTPS_PORT = 12346 + +HTTP_AUTH = $(HOST_NAME):$(HTTP_PORT) +HTTPS_AUTH = $(HOST_NAME):$(HTTPS_PORT) +HTTPS_AUTH2 = $(HOST2_NAME):$(HTTPS_PORT) + +GEN = gen +INST_DIR = ../install +BLD_PREFIX = $(shell dirname $$PWD)/install + +SUB_DIRS = clients + +CURL = $(INST_DIR)/bin/curl +NGHTTP = $(INST_DIR)/bin/nghttp +H2LOAD = $(INST_DIR)/bin/h2load + +PHP_CGI = $(shell bash -c 'type -p php-cgi') + +all: install + +clean: + @rm -rf $(GEN) $(INST_DIR)/.testdocs-setup $(INST_DIR)/.test-setup + @make -C clients clean + +distclean: + @rm -rf $(GEN) + $(foreach sd, $(SUB_DIRS), make -C $(sd) distclean; ) + +distdir: + @mkdir -p $(distdir) + @tar cf - Makefile bin conf htdocs clients/Makefile *.txt *.sh | (cd $(distdir) && tar xf - ) + @rm -f $(distdir)/conf/ssl/mod-h2.greebytes.de* + @rm -f $(distdir)/conf/sites/mod-h2.greebytes.de.conf + +start: $(INST_DIR)/.test-setup + @$(INST_DIR)/bin/apachectl -k start + +start-debug: $(INST_DIR)/.test-setup + @$(INST_DIR)/bin/apachectl -k start -X + +restart: $(INST_DIR)/.test-setup + @echo -n shutting down httpd... + @$(INST_DIR)/bin/apachectl -k stop + @while true; do sleep 1; pkill -1 -U $(USER) httpd; test "$$?" != "0" && break; done + @echo done. + @$(INST_DIR)/bin/apachectl -k restart + +stop: + @$(INST_DIR)/bin/apachectl -k stop + + +install: + @make -C clients install + +################################################################################ +# Test the local httpd +# +test: \ + $(INST_DIR)/.test-setup \ + $(INST_DIR)/.curl-installed + @rm -rf $(GEN)/tmp + @mkdir -p $(GEN)/tmp + @$(INST_DIR)/bin/apachectl restart + @bash test_curl_altsvc.sh http://$(HTTP_AUTH) https://$(HTTPS_AUTH) + @bash test_alt_host.sh https://$(HTTPS_AUTH) + @bash test_nghttp_get.sh https://$(HTTPS_AUTH) + @bash test_nghttp_post.sh https://$(HTTPS_AUTH) + @bash test_curl_get.sh https://$(HTTPS_AUTH) + @bash test_curl_post.sh https://$(HTTPS_AUTH) + @bash test_nghttp_get.sh https://$(HTTPS_AUTH)/proxy + @bash test_nghttp_post.sh https://$(HTTPS_AUTH)/proxy + @bash test_curl_get.sh https://$(HTTPS_AUTH)/proxy + @bash test_curl_post.sh https://$(HTTPS_AUTH)/proxy + @bash test_nghttp_get.sh https://$(HTTPS_AUTH)/rewrite + @bash test_nghttp_post.sh https://$(HTTPS_AUTH)/rewrite + @bash test_curl_get.sh https://$(HTTPS_AUTH)/rewrite + @bash test_curl_post.sh https://$(HTTPS_AUTH)/rewrite + @bash test_nghttp_get.sh http://$(HTTP_AUTH) + @bash test_nghttp_post.sh http://$(HTTP_AUTH) + @bash test_curl_get.sh http://$(HTTP_AUTH) + @bash test_curl_post.sh http://$(HTTP_AUTH) + @bash test_nghttp_get.sh http://$(HTTP_AUTH) direct + @bash test_nghttp_post.sh http://$(HTTP_AUTH) direct + @bash test_nghttp_get.sh http://$(HTTP_AUTH)/proxy + @bash test_nghttp_post.sh http://$(HTTP_AUTH)/proxy + @bash test_curl_get.sh http://$(HTTP_AUTH)/proxy + @bash test_curl_post.sh http://$(HTTP_AUTH)/proxy + @bash test_nghttp_get.sh http://$(HTTP_AUTH)/rewrite + @bash test_nghttp_post.sh http://$(HTTP_AUTH)/rewrite + @bash test_curl_get.sh http://$(HTTP_AUTH)/rewrite + @bash test_curl_post.sh http://$(HTTP_AUTH)/rewrite + @bash test_nghttp_get.sh https://$(HTTPS_AUTH2) + @bash test_nghttp_post.sh https://$(HTTPS_AUTH2) + @bash test_curl_get.sh https://$(HTTPS_AUTH2) + @bash test_curl_post.sh https://$(HTTPS_AUTH2) + +################################################################################ +# Load Test +# + +$(GEN)/load-urls-1.txt: \ + load-urls-1.txt + @mkdir -p $(GEN)/tmp + @sed -e "s,SUBST_AUTH_SUBST,https://$(HTTPS_AUTH)," < load-urls-1.txt >$(GEN)/load-urls-1.txt + +$(GEN)/load-urls-2.txt: \ + load-urls-1.txt + @mkdir -p $(GEN)/tmp + @sed -e "s,SUBST_AUTH_SUBST,http://$(HTTP_AUTH)," < load-urls-1.txt >$(GEN)/load-urls-2.txt + +MAX_STREAMS = 100 + +loadtest: \ + $(INST_DIR)/.test-setup \ + $(INST_DIR)/.curl-installed \ + $(GEN)/load-urls-1.txt + $(H2LOAD) -c 100 -t 10 -n 100000 -m $(MAX_STREAMS) https://$(HTTPS_AUTH)/index.html + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 1 -m $(MAX_STREAMS) -c 8 + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 2 -m $(MAX_STREAMS) -c 8 + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 3 -m $(MAX_STREAMS) -c 8 + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 4 -m $(MAX_STREAMS) -c 8 + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 5 -m $(MAX_STREAMS) -c 8 + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 6 -m $(MAX_STREAMS) -c 8 + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 7 -m $(MAX_STREAMS) -c 8 + $(H2LOAD) -i $(GEN)/load-urls-1.txt -n 200000 -t 8 -m $(MAX_STREAMS) -c 8 + +xtest: \ + $(INST_DIR)/.test-setup \ + $(INST_DIR)/.curl-installed \ + $(GEN)/load-urls-1.txt + @bash test_nghttp_post.sh https://$(HTTPS_AUTH) + +################################################################################ +# Switch mpm modules +# +mpm_worker: $(INST_DIR)/.testdocs-setup + @test -L $(INST_DIR)/conf/mods-enabled/mpm_worker.load || \ + (rm -f $(INST_DIR)/conf/mods-enabled/mpm_*; \ + ln -s ../mods-available/mpm_worker.load $(INST_DIR)/conf/mods-enabled/ && \ + echo "mpm_worker configured, please restart.") + +mpm_event: $(INST_DIR)/.testdocs-setup + @test -L $(INST_DIR)/conf/mods-enabled/mpm_event.load || \ + (rm -f $(INST_DIR)/conf/mods-enabled/mpm_*; \ + ln -s ../mods-available/mpm_event.load $(INST_DIR)/conf/mods-enabled/ && \ + echo "mpm_event configured, please restart.") + +mpm_prefork: $(INST_DIR)/.testdocs-setup + @test -L $(INST_DIR)/conf/mods-enabled/mpm_prefork.load || \ + (rm -f $(INST_DIR)/conf/mods-enabled/mpm_*; \ + ln -s ../mods-available/mpm_prefork.load $(INST_DIR)/conf/mods-enabled/ && \ + echo "mpm_prefork configured, please restart.") + + +################################################################################ +# Setup the local httpd for our tests +# +SETUP_FILES = $(wildcard conf/*.conf) \ + $(wildcard conf/mods-available/*.*) \ + $(wildcard conf/sites/*.conf) \ + $(wildcard bin/*) + +$(INST_DIR)/.testdocs-setup: \ + $(wildcard conf/*) \ + $(wildcard htdocs/*/*) + @echo -n setup htdocs locally... + @cp -r htdocs/* $(INST_DIR)/htdocs + @chmod +x $$(find $(INST_DIR)/htdocs/test.example.org/ -name "*.py" ) + @echo done. + @touch $(INST_DIR)/.testdocs-setup + +$(INST_DIR)/.test-setup: \ + Makefile \ + $(INST_DIR)/.httpd-installed \ + conf/*.conf \ + $(wildcard bin/*) \ + $(wildcard conf/mods-available/*.*) \ + $(wildcard conf/sites/*.conf) \ + $(INST_DIR)/conf/mods-enabled/h2.load \ + $(INST_DIR)/conf/ssl/test.example.org.key \ + $(INST_DIR)/conf/ssl/test.example.org.pem \ + $(INST_DIR)/conf/ssl/test-ser.example.org.key \ + $(INST_DIR)/conf/ssl/test-ser.example.org.pem \ + $(INST_DIR)/conf/ssl/noh2.example.org.key \ + $(INST_DIR)/conf/ssl/noh2.example.org.pem \ + $(INST_DIR)/.testdocs-setup + @echo -n setup httpd locally... + @mkdir -p $(INST_DIR)/conf/sites + @mkdir -p $(INST_DIR)/conf/mods-enabled + @mkdir -p $(INST_DIR)/conf/ssl + @for file in $(SETUP_FILES); do \ + sed -e "s,SUBST_SERVER_ROOT_SUBST,$(BLD_PREFIX),g" \ + -e "s,SUBST_SERVER_NAME_SUBST,$(shell hostname -f),g" \ + -e "s,SUBST_PORT_HTTP_SUBST,$(HTTP_PORT),g" \ + -e "s,SUBST_PORT_HTTPS_SUBST,$(HTTPS_PORT),g" \ + -e "s,SUBST_PHP_CGI_SUBST,$(PHP_CGI),g" \ + < $$file > $(INST_DIR)/$$file; \ + done + @for i in bin/*; do chmod +x $(INST_DIR)/$$i; done + @cp conf/ssl/*.* $(INST_DIR)/conf/ssl + @test -L $(INST_DIR)/conf/mods-enabled/mpm*load || ln -s ../mods-available/mpm_worker.load $(INST_DIR)/conf/mods-enabled/ + @echo done. + @touch $(INST_DIR)/.test-setup + +$(INST_DIR)/conf/ssl/test.example.org.key: + @mkdir -p $(INST_DIR)/conf/ssl + openssl genrsa -out $(INST_DIR)/conf/ssl/test.example.org.key 4096 + +$(INST_DIR)/conf/ssl/test.example.org.req: \ + $(INST_DIR)/conf/ssl/test.example.org.key \ + conf/ssl/test.example.org.x509.input + openssl req -new -key $(INST_DIR)/conf/ssl/test.example.org.key \ + -out $(INST_DIR)/conf/ssl/test.example.org.req < conf/ssl/test.example.org.x509.input + +$(INST_DIR)/conf/ssl/test.example.org.x509.input: \ + conf/ssl/test.example.org.x509.input + cp conf/ssl/test.example.org.x509.input $(INST_DIR)/conf/ssl + +$(INST_DIR)/conf/ssl/test.example.org.pem: \ + $(INST_DIR)/conf/ssl/test.example.org.key \ + $(INST_DIR)/conf/ssl/test.example.org.req \ + conf/ssl/extensions.conf \ + conf/ssl/test.example.org.x509.input + openssl x509 -req -sha256 -days 1095 \ + -signkey $(INST_DIR)/conf/ssl/test.example.org.key \ + -in $(INST_DIR)/conf/ssl/test.example.org.req \ + -out $(INST_DIR)/conf/ssl/test.example.org.pem \ + -extfile conf/ssl/extensions.conf -extensions ssl_client < conf/ssl/noh2.example.org.x509.input + +$(INST_DIR)/conf/ssl/test-ser.example.org.key: + @mkdir -p $(INST_DIR)/conf/ssl + openssl genrsa -out $(INST_DIR)/conf/ssl/test-ser.example.org.key 4096 + +$(INST_DIR)/conf/ssl/test-ser.example.org.x509.input: \ + conf/ssl/test-ser.example.org.x509.input + cp conf/ssl/test-ser.example.org.x509.input $(INST_DIR)/conf/ssl + +$(INST_DIR)/conf/ssl/test-ser.example.org.req: \ + $(INST_DIR)/conf/ssl/test-ser.example.org.key + openssl req -new -key $(INST_DIR)/conf/ssl/test-ser.example.org.key \ + -out $(INST_DIR)/conf/ssl/test-ser.example.org.req < conf/ssl/test-ser.example.org.x509.input + +$(INST_DIR)/conf/ssl/test-ser.example.org.pem: \ + $(INST_DIR)/conf/ssl/test-ser.example.org.key \ + $(INST_DIR)/conf/ssl/test-ser.example.org.req \ + conf/ssl/extensions.conf \ + conf/ssl/test-ser.example.org.x509.input + openssl x509 -req -sha256 -days 1095 \ + -signkey $(INST_DIR)/conf/ssl/test-ser.example.org.key \ + -in $(INST_DIR)/conf/ssl/test-ser.example.org.req \ + -out $(INST_DIR)/conf/ssl/test-ser.example.org.pem \ + -extfile conf/ssl/extensions.conf -extensions ssl_client < conf/ssl/noh2.example.org.x509.input + +$(INST_DIR)/conf/ssl/noh2.example.org.key: + @mkdir -p $(INST_DIR)/conf/ssl + openssl genrsa -out $(INST_DIR)/conf/ssl/noh2.example.org.key 4096 + +$(INST_DIR)/conf/ssl/noh2.example.org.x509.input: \ + conf/ssl/noh2.example.org.x509.input + cp conf/ssl/noh2.example.org.x509.input $(INST_DIR)/conf/ssl + +$(INST_DIR)/conf/ssl/noh2.example.org.req: \ + $(INST_DIR)/conf/ssl/noh2.example.org.key + openssl req -new -key $(INST_DIR)/conf/ssl/noh2.example.org.key \ + -out $(INST_DIR)/conf/ssl/noh2.example.org.req < conf/ssl/noh2.example.org.x509.input + +$(INST_DIR)/conf/ssl/noh2.example.org.pem: \ + $(INST_DIR)/conf/ssl/noh2.example.org.key \ + $(INST_DIR)/conf/ssl/noh2.example.org.req \ + conf/ssl/extensions.conf \ + conf/ssl/noh2.example.org.x509.input + openssl x509 -req -sha256 -days 1095 \ + -signkey $(INST_DIR)/conf/ssl/noh2.example.org.key \ + -in $(INST_DIR)/conf/ssl/noh2.example.org.req \ + -out $(INST_DIR)/conf/ssl/noh2.example.org.pem \ + -extfile conf/ssl/extensions.conf -extensions ssl_client < conf/ssl/noh2.example.org.x509.input + +$(INST_DIR)/conf/mods-available/h2.load: + @mkdir -p $(INST_DIR)/conf/mods-available + cp ../../setup/h2.load $(INST_DIR)/conf/mods-available + +$(INST_DIR)/conf/mods-available/h2.conf: + @mkdir -p $(INST_DIR)/conf/mods-available + cp ../../setup/h2.conf $(INST_DIR)/conf/mods-available + +$(INST_DIR)/conf/mods-enabled/h2.load: \ + $(INST_DIR)/conf/mods-available/h2.load \ + $(INST_DIR)/conf/mods-available/h2.conf + @mkdir -p $(INST_DIR)/conf/mods-enabled + @cd $(INST_DIR)/conf/mods-enabled && ln -sf ../mods-available/h2.* . + + +################################################################################ +# Install the local httpd for our tests +# +$(INST_DIR)/.httpd-installed: + @echo "you need to have httpd installed locally." + @exit 1 + +################################################################################ +# Install the local curl +# +$(INST_DIR)/.curl-installed: + make -C clients diff --git a/modules/http2/sandbox/test/bin/php-wrapper b/modules/http2/sandbox/test/bin/php-wrapper new file mode 100644 index 0000000000..85baaf8f7f --- /dev/null +++ b/modules/http2/sandbox/test/bin/php-wrapper @@ -0,0 +1,11 @@ +#!/bin/sh +# Set desired PHP_FCGI_* environment variables. +# Example: +# PHP FastCGI processes exit after 500 requests by default. +PHP_FCGI_MAX_REQUESTS=10000 +export PHP_FCGI_MAX_REQUESTS + +# set via Makefile +PHP_CGI=SUBST_PHP_CGI_SUBST + +exec ${PHP_CGI:-php-cgi} diff --git a/modules/http2/sandbox/test/bin/testrun b/modules/http2/sandbox/test/bin/testrun new file mode 100644 index 0000000000..5da81f1c2f --- /dev/null +++ b/modules/http2/sandbox/test/bin/testrun @@ -0,0 +1,79 @@ +#!/bin/bash +# +# +# + + +SCHEME=https +HOST=test.example.org +PORT=12346 + +URL=$SCHEME://$HOST:$PORT + +WRK=../wrk/wrk +H2LOAD=${H2LOAD:-sandbox/install/bin/h2load} + +run_wrk() { + path=$1 + $WRK -c100 -t${THREADS:-8} -d30s $URL$path >/tmp/$$.out 2>&1 + + stat=$( fgrep 'Requests/sec: ' /tmp/$$.out ) + reqs=${stat##Requests/sec: } +} + +run_load() { + path=$1 + $H2LOAD -c 100 -t ${THREADS:-8} -m ${MAX_STREAMS:-1} -n 500000 $URL$path > /tmp/$$.out 2>&1 + + fin=$( fgrep 'finished in ' /tmp/$$.out ) + stat=$( fgrep 'requests: ' /tmp/$$.out ) + + case "$stat" in + *", 0 failed,"*) + # ok + reqs=${fin#*, } + reqs=${reqs%% req/s,*} + mbs=${fin##*, } + ;; + *) + reqs="NaN ($stat)" + mbs="NaN ($stat)" + ;; + esac + +} + +run_m() { + path=$1 + iterations="$2" + for m in $iterations; do + MAX_STREAMS=$m + run_load $path + echo -n ", $reqs" + done +} + +run_iter() { + path=$1 + max=$2 + iterations=$3 + echo -n "m, wrk" + for i in $iterations; do + echo -n ", $i" + done + echo "" + i=1 + while [ $i -le $max ]; do + echo -n "$i" + run_wrk $path + echo -n ", $reqs" + run_m $path "$iterations" + echo "" + i=$[ i + 1 ] + done +} + +URL_PATH=$1 + +echo "$URL_PATH, 500k requests, req/s" +run_iter $URL_PATH 10 "1 2 3 4 5 6 7 8 9 10 15 20 40 100" diff --git a/modules/http2/sandbox/test/clients/Makefile b/modules/http2/sandbox/test/clients/Makefile new file mode 100644 index 0000000000..e4f13d693a --- /dev/null +++ b/modules/http2/sandbox/test/clients/Makefile @@ -0,0 +1,113 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +CURL_VERSION = 7.43.0 +CURL_DIR = curl-$(CURL_VERSION) +CURL_TAR = $(CURL_DIR).tar.gz +CURL_URL = http://curl.haxx.se/download/$(CURL_TAR) + +GEN = gen +INST_DIR = ../../install +BLD_PREFIX = $(shell dirname $(shell dirname $$PWD))/install + +OS = $(shell uname -s) + +CURL_CONF = --with-nghttp2=$(BLD_PREFIX) + +OPENSSL_VERSION = $(shell openssl version -v | sed -e 's/OpenSSL *//g' -e 's/[a-z]* .*//g') + +ifeq ($(OPENSSL_VERSION), $(filter $(OPENSSL_VERSION),0.9.7 0.9.8 1.0.0)) + # Very old openssl without alpn or npn support installed, need a newer one + CURL_CONF += --with-ssl=$(BLD_PREFIX) +endif + +all: install-curl + +dirs: + @mkdir -p $(GEN)/build + +clean: + @rm -rf $(GEN)/$(CURL_DIR) $(GEN)/build.log + +distclean: + @rm -rf $(GEN) + +install: install-curl + +install-curl: $(INST_DIR)/.curl-installed + +################################################################################ +# Install the local curl our tests +# +$(INST_DIR)/.curl-installed: $(GEN)/$(CURL_DIR)/.curl-built + @echo -n installing curl locally... + @cd $(GEN)/$(CURL_DIR)/ && make install >> ../build.log + @echo done. + @touch $(INST_DIR)/.curl-installed + + +################################################################################ +# Build the local curl +# +$(GEN)/$(CURL_DIR)/.curl-built: \ + $(GEN)/$(CURL_DIR)/.curl-configured + @echo -n building curl... + @cd $(GEN)/$(CURL_DIR)/ && make >> ../build.log + @echo done. + @touch $(GEN)/$(CURL_DIR)/.curl-built + +################################################################################ +# Configure the local curl sources +# + +PKG_CONF_MSG = Unable to find pkg-config executable. You need pkg-config installed \ +for curl to be built with nghttp2. On OS X try: \"brew install pkg-config\" \ +on Linux you local package manager should be able to help. + +$(GEN)/$(CURL_DIR)/.curl-configured: \ + $(CURL_DEPS) \ + $(INST_DIR)/.nghttp2-installed \ + $(GEN)/$(CURL_DIR)/.curl-extracted + @echo -n configuring curl... + if test ! -x $$( type -p pkg-config ); then echo $(PKG_CONF_MSG); exit 1; fi + cd $(GEN)/$(CURL_DIR)/ && \ + PKG_CONFIG_LIBDIR=$(BLD_PREFIX)/lib/pkgconfig ./configure --prefix=$(BLD_PREFIX) $(CURL_CONF) + @echo done. + @touch $(GEN)/$(CURL_DIR)/.curl-configured + +################################################################################ +# Extract curl source tree +# +$(GEN)/$(CURL_DIR)/.curl-extracted: \ + $(GEN)/$(CURL_TAR) + @rm -rf $(GEN)/$(CURL_DIR) + @echo -n extracting curl packages... + @cd $(GEN) && tar xfz $(CURL_TAR) + @echo done. + @touch $(GEN)/$(CURL_DIR)/.curl-extracted + +################################################################################ +# Retrieve curl sources, we use curl for that??? +# +$(GEN)/$(CURL_TAR): + @mkdir -p $(GEN) + curl --progress-bar $(CURL_URL) > $(GEN)/$(CURL_TAR) + + +################################################################################ +# build and install local nghttp2 +# +$(INST_DIR)/.nghttp2-installed: + @make -C ../nghttp2 install diff --git a/modules/http2/sandbox/test/conf/httpd.conf b/modules/http2/sandbox/test/conf/httpd.conf new file mode 100644 index 0000000000..746bd652ed --- /dev/null +++ b/modules/http2/sandbox/test/conf/httpd.conf @@ -0,0 +1,120 @@ +################################################################################ +# +# Test Setup for localhost +# +################################################################################ + +ServerName SUBST_SERVER_NAME_SUBST +ServerRoot "SUBST_SERVER_ROOT_SUBST" + +Listen SUBST_PORT_HTTP_SUBST + +ServerName localhost + +Include conf/modules.conf + +IncludeOptional conf/mods-enabled/*.load +IncludeOptional conf/mods-enabled/*.conf + +ServerAdmin you@localhost + + + AllowOverride none + Require all denied + + +DocumentRoot "SUBST_SERVER_ROOT_SUBST/htdocs" + + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + + + + DirectoryIndex index.html + DirectoryIndex index.php + + + Require all denied + + +ErrorLog "logs/error_log" +LogLevel warn + +CoreDumpDirectory "/tmp" + + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%h %l %u %t \"%r\" %>s %b" common + CustomLog "logs/access_log" common + + + + ScriptAlias /cgi-bin/ "SUBST_SERVER_ROOT_SUBST/cgi-bin/" + + + AllowOverride None + Options None + Require all granted + + + + TypesConfig conf/mime.types + AddType application/x-compress .Z + + + + + LogLevel h2:info + H2Engine on + + # max parallel streams per session, default 100 + #H2MaxSessionStreams + # max initial window size upstream (per stream), default 64k + #H2InitialWindowSize + # max header list size (the headers for a stream), default 16k + #H2MaxHeaderListSize + # max memory buffer size downstream (per stream), default 64k + #H2StreamMaxMemSize + + # you may set these explicitly, otherwise they are taking from + # ThreadsPerChild and HardLimitThreads parameters of the mpm module + # + #H2MinWorkers 8 + #H2MaxWorkers 128 + # seconds a worker stays idle until shut down, default 10 minutes + #H2MaxWorkerIdleSeconds 600 + + # If stream processing should serialize/read HTTP/1.1 headers for + # better backward compatibility with eventually installed filters + # from other modules or changes in the core. + # default is off + #H2SerializeHeaders Off + + # When mpm_event is selected, perform a hack on internal connections that + # allow them to work. Has no effect when other mpm modules are selected. + # Defaults to "On" + #H2HackMpmEvent On + + + + +################################################################################ +# SSL Setup +################################################################################ + + SSLCipherSuite HIGH:!aNULL:!MD5 + SSLProtocol All -SSLv2 -SSLv3 + SSLPassPhraseDialog builtin + SSLSessionCache "shmcb:SUBST_SERVER_ROOT_SUBST/logs/ssl_scache(512000)" + SSLSessionCacheTimeout 300 + + SSLRandomSeed startup builtin + SSLRandomSeed connect builtin + + Listen SUBST_PORT_HTTPS_SUBST + + + +IncludeOptional conf/sites/*.conf + diff --git a/modules/http2/sandbox/test/conf/mods-available/mpm_event.load b/modules/http2/sandbox/test/conf/mods-available/mpm_event.load new file mode 100644 index 0000000000..6b0f8e2b98 --- /dev/null +++ b/modules/http2/sandbox/test/conf/mods-available/mpm_event.load @@ -0,0 +1 @@ +LoadModule mpm_event_module modules/mod_mpm_event.so diff --git a/modules/http2/sandbox/test/conf/mods-available/mpm_prefork.load b/modules/http2/sandbox/test/conf/mods-available/mpm_prefork.load new file mode 100644 index 0000000000..f10fd42ce2 --- /dev/null +++ b/modules/http2/sandbox/test/conf/mods-available/mpm_prefork.load @@ -0,0 +1 @@ +LoadModule mpm_prefork_module modules/mod_mpm_prefork.so diff --git a/modules/http2/sandbox/test/conf/mods-available/mpm_worker.load b/modules/http2/sandbox/test/conf/mods-available/mpm_worker.load new file mode 100644 index 0000000000..21bd173155 --- /dev/null +++ b/modules/http2/sandbox/test/conf/mods-available/mpm_worker.load @@ -0,0 +1 @@ +LoadModule mpm_worker_module modules/mod_mpm_worker.so diff --git a/modules/http2/sandbox/test/conf/modules.conf b/modules/http2/sandbox/test/conf/modules.conf new file mode 100644 index 0000000000..ea920283a0 --- /dev/null +++ b/modules/http2/sandbox/test/conf/modules.conf @@ -0,0 +1,99 @@ +# +# Dynamic Shared Object (DSO) Support +# +# To be able to use the functionality of a module which was built as a DSO you +# have to place corresponding `LoadModule' lines at this location so the +# directives contained in it are actually available _before_ they are used. +# Statically compiled modules (those listed by `httpd -l') do not need +# to be loaded here. +# +# Example: +# LoadModule foo_module modules/mod_foo.so +# + +LoadModule authn_file_module modules/mod_authn_file.so +#LoadModule authn_dbm_module modules/mod_authn_dbm.so +#LoadModule authn_anon_module modules/mod_authn_anon.so +#LoadModule authn_dbd_module modules/mod_authn_dbd.so +#LoadModule authn_socache_module modules/mod_authn_socache.so +LoadModule authn_core_module modules/mod_authn_core.so +LoadModule authz_host_module modules/mod_authz_host.so +LoadModule authz_groupfile_module modules/mod_authz_groupfile.so +LoadModule authz_user_module modules/mod_authz_user.so +#LoadModule authz_dbm_module modules/mod_authz_dbm.so +#LoadModule authz_owner_module modules/mod_authz_owner.so +#LoadModule authz_dbd_module modules/mod_authz_dbd.so +LoadModule authz_core_module modules/mod_authz_core.so +LoadModule access_compat_module modules/mod_access_compat.so +LoadModule auth_basic_module modules/mod_auth_basic.so +#LoadModule auth_form_module modules/mod_auth_form.so +#LoadModule auth_digest_module modules/mod_auth_digest.so +#LoadModule allowmethods_module modules/mod_allowmethods.so +#LoadModule file_cache_module modules/mod_file_cache.so +#LoadModule cache_module modules/mod_cache.so +#LoadModule cache_disk_module modules/mod_cache_disk.so +#LoadModule cache_socache_module modules/mod_cache_socache.so +LoadModule socache_shmcb_module modules/mod_socache_shmcb.so +#LoadModule socache_dbm_module modules/mod_socache_dbm.so +#LoadModule socache_memcache_module modules/mod_socache_memcache.so +#LoadModule macro_module modules/mod_macro.so +#LoadModule dbd_module modules/mod_dbd.so +#LoadModule dumpio_module modules/mod_dumpio.so +#LoadModule buffer_module modules/mod_buffer.so +#LoadModule ratelimit_module modules/mod_ratelimit.so +LoadModule reqtimeout_module modules/mod_reqtimeout.so +#LoadModule ext_filter_module modules/mod_ext_filter.so +#LoadModule request_module modules/mod_request.so +#LoadModule include_module modules/mod_include.so +LoadModule filter_module modules/mod_filter.so +#LoadModule substitute_module modules/mod_substitute.so +#LoadModule sed_module modules/mod_sed.so +#LoadModule deflate_module modules/mod_deflate.so +LoadModule mime_module modules/mod_mime.so +LoadModule log_config_module modules/mod_log_config.so +#LoadModule log_debug_module modules/mod_log_debug.so +LoadModule logio_module modules/mod_logio.so +LoadModule env_module modules/mod_env.so +#LoadModule expires_module modules/mod_expires.so +LoadModule headers_module modules/mod_headers.so +#LoadModule unique_id_module modules/mod_unique_id.so +LoadModule setenvif_module modules/mod_setenvif.so +LoadModule version_module modules/mod_version.so +#LoadModule remoteip_module modules/mod_remoteip.so +LoadModule proxy_module modules/mod_proxy.so +#LoadModule proxy_connect_module modules/mod_proxy_connect.so +#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so +LoadModule proxy_http_module modules/mod_proxy_http.so +LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so +#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so +#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so +#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so +#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so +#LoadModule proxy_express_module modules/mod_proxy_express.so +#LoadModule session_module modules/mod_session.so +#LoadModule session_cookie_module modules/mod_session_cookie.so +#LoadModule session_crypto_module modules/mod_session_crypto.so +#LoadModule session_dbd_module modules/mod_session_dbd.so +#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so +LoadModule ssl_module modules/mod_ssl.so +#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so +#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so +#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so +#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so +LoadModule unixd_module modules/mod_unixd.so +#LoadModule dav_module modules/mod_dav.so +LoadModule status_module modules/mod_status.so +LoadModule autoindex_module modules/mod_autoindex.so +#LoadModule info_module modules/mod_info.so +LoadModule cgid_module modules/mod_cgid.so +#LoadModule dav_fs_module modules/mod_dav_fs.so +#LoadModule vhost_alias_module modules/mod_vhost_alias.so +#LoadModule negotiation_module modules/mod_negotiation.so +LoadModule dir_module modules/mod_dir.so +#LoadModule actions_module modules/mod_actions.so +#LoadModule speling_module modules/mod_speling.so +#LoadModule userdir_module modules/mod_userdir.so +LoadModule alias_module modules/mod_alias.so +LoadModule rewrite_module modules/mod_rewrite.so + +#LoadModule fcgid_module modules/mod_fcgid.so diff --git a/modules/http2/sandbox/test/conf/sites/aaa-noh2.example.org.conf b/modules/http2/sandbox/test/conf/sites/aaa-noh2.example.org.conf new file mode 100644 index 0000000000..81f092eef4 --- /dev/null +++ b/modules/http2/sandbox/test/conf/sites/aaa-noh2.example.org.conf @@ -0,0 +1,48 @@ +################################################################################ +# +# noh2.example.org +# +# a host reachable in clear/https that allow http/1.1 and *not* h2/h2c +# +################################################################################ + + ServerName noh2.example.org + DocumentRoot "SUBST_SERVER_ROOT_SUBST/htdocs/test.example.org" + + SSLEngine on + SSLCertificateFile SUBST_SERVER_ROOT_SUBST/conf/ssl/noh2.example.org.pem + SSLCertificateKeyFile SUBST_SERVER_ROOT_SUBST/conf/ssl/noh2.example.org.key + + RewriteEngine on + RewriteRule ^/latest.tar.gz$ /xxx-1.0.2a.tar.gz [R=302,NC] + + + H2Engine off + + + + SSLOptions +StdEnvVars + + + + ProxyPass http://www.greenbytes.de/ + ProxyPassReverse http://www.greenbytes.de/ + Order allow,deny + Allow from all + + ProxyPass /zeit http://www.zeit.de:80 max=20 ttl=120 retry=300 + + + + + ServerName noh2.example.org:SUBST_PORT_HTTP_SUBST + DocumentRoot "SUBST_SERVER_ROOT_SUBST/htdocs/test.example.org" + + RewriteEngine on + RewriteRule ^/latest.tar.gz$ /xxx-1.0.2a.tar.gz [R=302,NC] + + + H2Engine off + + + diff --git a/modules/http2/sandbox/test/conf/sites/test-ser.example.org.conf b/modules/http2/sandbox/test/conf/sites/test-ser.example.org.conf new file mode 100644 index 0000000000..867ff95e4a --- /dev/null +++ b/modules/http2/sandbox/test/conf/sites/test-ser.example.org.conf @@ -0,0 +1,81 @@ +################################################################################ +# +# test-ser.example.org +# +# a host reachable in clear/https that allow http/1.1 and h2/h2c +# with H2Serialize On +# +################################################################################ + + + ServerName test-ser.example.org + DocumentRoot "SUBST_SERVER_ROOT_SUBST/htdocs/test.example.org" + + SSLEngine on + SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 + SSLCipherSuite HIGH:!aNULL:!MD5 + SSLHonorCipherOrder on + SSLCertificateFile SUBST_SERVER_ROOT_SUBST/conf/ssl/test-ser.example.org.pem + SSLCertificateKeyFile SUBST_SERVER_ROOT_SUBST/conf/ssl/test-ser.example.org.key + + RewriteEngine on + RewriteRule ^/latest.tar.gz$ /xxx-1.0.2a.tar.gz [R=302,NC] + + + H2Engine on + H2SerializeHeaders on + H2AltSvc h2=test-ser.example.org:SUBST_PORT_HTTPS_SUBST + H2AltSvc h2c=:12345 + H2AltSvc h2=mod-h2.greenbytes.de:SUBST_PORT_HTTPS_SUBST + + + + SSLOptions +StdEnvVars + + + SSLProxyEngine on + SSLProxyProtocol +TLSv1 +TLSv1.1 +TLSv1.2 + SSLProxyCipherSuite HIGH:!aNULL:!MD5 + + ProxyPass https://test-ser.example.org:SUBST_PORT_HTTPS_SUBST/ + ProxyPassReverse https://test-ser.example.org:SUBST_PORT_HTTPS_SUBST/ + Order allow,deny + Allow from all + + RewriteRule /rewrite(.*) https://test-ser.example.org:SUBST_PORT_HTTPS_SUBST$1 [P] + + + ProxyPass http://www.greenbytes.de/ + ProxyPassReverse http://www.greenbytes.de/ + Order allow,deny + Allow from all + + ProxyPass /zeit http://www.zeit.de:80 max=20 ttl=120 retry=300 + + + SetHandler server-status + + + + + + ServerName test-ser.example.org:SUBST_PORT_HTTP_SUBST + DocumentRoot "SUBST_SERVER_ROOT_SUBST/htdocs/test.example.org" + + RewriteEngine on + RewriteRule ^/latest.tar.gz$ /xxx-1.0.2a.tar.gz [R=302,NC] + + + H2Engine on + H2SerializeHeaders on + + + + ProxyPass http://test-ser.example.org:SUBST_PORT_HTTP_SUBST/ + ProxyPassReverse http://test-ser.example.org:SUBST_PORT_HTTP_SUBST/ + Order allow,deny + Allow from all + + RewriteRule /rewrite(.*) http://test-ser.example.org:SUBST_PORT_HTTP_SUBST$1 [P] + + diff --git a/modules/http2/sandbox/test/conf/sites/test.example.org.conf b/modules/http2/sandbox/test/conf/sites/test.example.org.conf new file mode 100644 index 0000000000..bbf0444986 --- /dev/null +++ b/modules/http2/sandbox/test/conf/sites/test.example.org.conf @@ -0,0 +1,91 @@ +################################################################################ +# +# test.example.org +# +# a host reachable in clear/https that allow http/1.1 and h2/h2c +# +################################################################################ + + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + + AddHandler cgi-script .py + Options +ExecCGI + + + FcgidWrapper SUBST_SERVER_ROOT_SUBST/bin/php-wrapper .php + + + + + + ServerName test.example.org + DocumentRoot "SUBST_SERVER_ROOT_SUBST/htdocs/test.example.org" + + SSLEngine on + SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 + SSLCipherSuite HIGH:!aNULL:!MD5 + SSLHonorCipherOrder on + SSLCertificateFile SUBST_SERVER_ROOT_SUBST/conf/ssl/test.example.org.pem + SSLCertificateKeyFile SUBST_SERVER_ROOT_SUBST/conf/ssl/test.example.org.key + + RewriteEngine on + RewriteRule ^/latest.tar.gz$ /xxx-1.0.2a.tar.gz [R=302,NC] + + + H2Engine on + H2AltSvc h2=test.example.org:12346 + H2AltSvc h2c=:12345 + H2AltSvc h2=mod-h2.greenbytes.de:12346 + + + + SSLOptions +StdEnvVars + + + SSLProxyEngine on + SSLProxyProtocol +TLSv1 +TLSv1.1 +TLSv1.2 + SSLProxyCipherSuite HIGH:!aNULL:!MD5 + + ProxyPass https://test.example.org:SUBST_PORT_HTTPS_SUBST/ + ProxyPassReverse https://test.example.org:SUBST_PORT_HTTPS_SUBST/ + Order allow,deny + Allow from all + + RewriteRule /rewrite(.*) https://test.example.org:SUBST_PORT_HTTPS_SUBST$1 [P] + + + ProxyPass http://www.greenbytes.de/ + ProxyPassReverse http://www.greenbytes.de/ + Order allow,deny + Allow from all + + ProxyPass /zeit http://www.zeit.de:80 max=20 ttl=120 retry=300 + + + SetHandler server-status + + + + + + ServerName test.example.org:SUBST_PORT_HTTP_SUBST + DocumentRoot "SUBST_SERVER_ROOT_SUBST/htdocs/test.example.org" + + RewriteEngine on + RewriteRule ^/latest.tar.gz$ /xxx-1.0.2a.tar.gz [R=302,NC] + + + H2Engine on + + + + ProxyPass http://test.example.org:SUBST_PORT_HTTP_SUBST/ + ProxyPassReverse http://test.example.org:SUBST_PORT_HTTP_SUBST/ + Order allow,deny + Allow from all + + RewriteRule /rewrite(.*) http://test.example.org:SUBST_PORT_HTTP_SUBST$1 [P] + + diff --git a/modules/http2/sandbox/test/conf/ssl/.gitignore b/modules/http2/sandbox/test/conf/ssl/.gitignore new file mode 100644 index 0000000000..c996e507d1 --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/.gitignore @@ -0,0 +1 @@ +*.key diff --git a/modules/http2/sandbox/test/conf/ssl/ca.pem b/modules/http2/sandbox/test/conf/ssl/ca.pem new file mode 100644 index 0000000000..960f2657be --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/ca.pem @@ -0,0 +1,44 @@ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg +Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 +MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi +U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh +cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk +pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf +OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C +Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT +Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi +HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM +Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w ++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ +Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 +Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B +26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID +AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j +ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js +LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM +BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy +dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh +cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh +YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg +dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp +bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ +YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT +TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ +9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 +jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW +FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz +ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 +ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L +EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu +L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC +O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V +um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh +NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= +-----END CERTIFICATE----- diff --git a/modules/http2/sandbox/test/conf/ssl/cacerts.pem b/modules/http2/sandbox/test/conf/ssl/cacerts.pem new file mode 100644 index 0000000000..4a894c7b9d --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/cacerts.pem @@ -0,0 +1,36 @@ +-----BEGIN CERTIFICATE----- +MIIGNDCCBBygAwIBAgIBGDANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg +Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDcxMDI0MjA1NDE3WhcNMTcxMDI0MjA1NDE3WjCB +jDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzApBgNVBAsT +IlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNVBAMTL1N0 +YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgU2VydmVyIENBMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtonGrO8JUngHrJJj0PREGBiE +gFYfka7hh/oyULTTRwbw5gdfcA4Q9x3AzhA2NIVaD5Ksg8asWFI/ujjo/OenJOJA +pgh2wJJuniptTT9uYSAK21ne0n1jsz5G/vohURjXzTCm7QduO3CHtPn66+6CPAVv +kvek3AowHpNz/gfK11+AnSJYUq4G2ouHI2mw5CrY6oPSvfNx23BaKA+vWjhwRRI/ +ME3NO68X5Q/LoKldSKqxYVDLNM08XMML6BDAjJvwAwNi/rJsPnIO7hxDKslIDlc5 +xDEhyBDBLIf+VJVSH1I8MRKbf+fAoKVZ1eKPPvDVqOHXcDGpxLPPr21TLwb0pwID +AQABo4IBrTCCAakwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFOtCNNCYsKuf9BtrCPfMZC7vDixFMB8GA1UdIwQYMBaAFE4L7xqkQFul +F2mHMMo0aEPQQa7yMGYGCCsGAQUFBwEBBFowWDAnBggrBgEFBQcwAYYbaHR0cDov +L29jc3Auc3RhcnRzc2wuY29tL2NhMC0GCCsGAQUFBzAChiFodHRwOi8vd3d3LnN0 +YXJ0c3NsLmNvbS9zZnNjYS5jcnQwWwYDVR0fBFQwUjAnoCWgI4YhaHR0cDovL3d3 +dy5zdGFydHNzbC5jb20vc2ZzY2EuY3JsMCegJaAjhiFodHRwOi8vY3JsLnN0YXJ0 +c3NsLmNvbS9zZnNjYS5jcmwwgYAGA1UdIAR5MHcwdQYLKwYBBAGBtTcBAgEwZjAu +BggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjA0 +BggrBgEFBQcCARYoaHR0cDovL3d3dy5zdGFydHNzbC5jb20vaW50ZXJtZWRpYXRl +LnBkZjANBgkqhkiG9w0BAQUFAAOCAgEAIQlJPqWIbuALi0jaMU2P91ZXouHTYlfp +tVbzhUV1O+VQHwSL5qBaPucAroXQ+/8gA2TLrQLhxpFy+KNN1t7ozD+hiqLjfDen +xk+PNdb01m4Ge90h2c9W/8swIkn+iQTzheWq8ecf6HWQTd35RvdCNPdFWAwRDYSw +xtpdPvkBnufh2lWVvnQce/xNFE+sflVHfXv0pQ1JHpXo9xLBzP92piVH0PN1Nb6X +t1gW66pceG/sUzCv6gRNzKkC4/C2BBL2MLERPZBOVmTX3DxDX3M570uvh+v2/miI +RHLq0gfGabDBoYvvF0nXYbFFSF87ICHpW7LM9NfpMfULFWE7epTj69m8f5SuauNi +YpaoZHy4h/OZMn6SolK+u/hlz8nyMPyLwcKmltdfieFcNID1j0cHL7SRv7Gifl9L +WtBbnySGBVFaaQNlQ0lxxeBvlDRr9hvYqbBMflPrj0jfyjO1SPo2ShpTpjMM0InN +SRXNiTE8kMBy12VLUjWKRhFEuT2OKGWmPnmeXAhEKa2wNREuIU640ucQPl2Eg7PD +wuTSxv0JS3QJ3fGz0xk+gA2iCxnwOOfFwq/iI9th4p1cbiCJSS4jarJiwUW0n6+L +p/EiO/h94pDQehn7Skzj0n1fSoMD7SfWI55rjbRZotnvbIIp3XUZPD9MEI3vu3Un +0q6Dp6jOW6c= +-----END CERTIFICATE----- diff --git a/modules/http2/sandbox/test/conf/ssl/extensions.conf b/modules/http2/sandbox/test/conf/ssl/extensions.conf new file mode 100644 index 0000000000..4995e09994 --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/extensions.conf @@ -0,0 +1,5 @@ +[ ssl_client ] +basicConstraints = CA:FALSE +nsCertType = client +keyUsage = digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth \ No newline at end of file diff --git a/modules/http2/sandbox/test/conf/ssl/mod-h2.greenbytes.de.pem b/modules/http2/sandbox/test/conf/ssl/mod-h2.greenbytes.de.pem new file mode 100644 index 0000000000..036f6ce762 --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/mod-h2.greenbytes.de.pem @@ -0,0 +1,77 @@ +-----BEGIN CERTIFICATE----- +MIIHTTCCBjWgAwIBAgIHBSitLk6z1TANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UE +BhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBE +aWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNVBAMTL1N0YXJ0Q29tIENs +YXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgU2VydmVyIENBMB4XDTE1MDIwMzIx +MTMyOVoXDTE2MDIwNTA2MTUwM1owVTELMAkGA1UEBhMCREUxHTAbBgNVBAMTFG1v +ZC1oMi5ncmVlbmJ5dGVzLmRlMScwJQYJKoZIhvcNAQkBFhhwb3N0bWFzdGVyQGdy +ZWVuYnl0ZXMuZGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDqHjd2 +TvnN6nNBN/NegHLDN92gXhoakmommEASCMJQpWNGBWAkL2il4EiuJxMaGjEfIxUJ +t94Wc7CH7DZvEkTzsjElopdmOTRaCnL+OIZG6LGTS9vLnnG0t4/4AahUqi9CRetM +T6J+PodnFsJ1BhpnBPmGxei794MAQ4QuY/yQfd5Msh3/vs9gYix7dm6TRYY5+L6y +/Ts6WmaBpnx1wMKRYyTPPmL1lHAjBGLaQtSD5TFgv9cno/YHngVfZrZRu+u2u+I2 +K83Qw60U16FWXChCCNAAEoHyXNN9Ulu08Nz0HIMowIajN36tzMq+CbLRbO+9RqP5 +RmxcPD0Ckpd0RkwflMaFIVOaTdXFnPQ+GFO1iRYgFdUQfIgDifnLaz5Q3Rqot5DQ +pYZdlhOSI9uCPbyoJLXFERjqu15HWeyF1bQhmKWISEHBxl/rP2k1E+B3u4+V6Qli +uaverlwqFIc0CEqbp3El68ZUoLwHYWmbhlW2VNQdzQ3p2yqABulcZuBDn0lpEy/q +kJUao/gfwiZ+S/RiwQk866MvPHGa2INo5fQjm0IMXqWZpr+DHx4OT1I2+Y0y5Up0 +zRheHuxvNYDLJVb2891MGhgEbrADNApYOojdLsqAzYZaq+K1Xl2DzYKTV0uoT4x9 +6DMIKxEnJaSsVLUmSRZdxwwW2JAKhm/5C8BUfwIDAQABo4IC6DCCAuQwCQYDVR0T +BAIwADALBgNVHQ8EBAMCA6gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYE +FFbumVYSCnUb68JUNXqgNT0Y+ymUMB8GA1UdIwQYMBaAFOtCNNCYsKuf9BtrCPfM +ZC7vDixFMC4GA1UdEQQnMCWCFG1vZC1oMi5ncmVlbmJ5dGVzLmRlgg1ncmVlbmJ5 +dGVzLmRlMIIBVgYDVR0gBIIBTTCCAUkwCAYGZ4EMAQIBMIIBOwYLKwYBBAGBtTcB +AgMwggEqMC4GCCsGAQUFBwIBFiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xp +Y3kucGRmMIH3BggrBgEFBQcCAjCB6jAnFiBTdGFydENvbSBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTADAgEBGoG+VGhpcyBjZXJ0aWZpY2F0ZSB3YXMgaXNzdWVkIGFj +Y29yZGluZyB0byB0aGUgQ2xhc3MgMSBWYWxpZGF0aW9uIHJlcXVpcmVtZW50cyBv +ZiB0aGUgU3RhcnRDb20gQ0EgcG9saWN5LCByZWxpYW5jZSBvbmx5IGZvciB0aGUg +aW50ZW5kZWQgcHVycG9zZSBpbiBjb21wbGlhbmNlIG9mIHRoZSByZWx5aW5nIHBh +cnR5IG9ibGlnYXRpb25zLjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vY3JsLnN0 +YXJ0c3NsLmNvbS9jcnQxLWNybC5jcmwwgY4GCCsGAQUFBwEBBIGBMH8wOQYIKwYB +BQUHMAGGLWh0dHA6Ly9vY3NwLnN0YXJ0c3NsLmNvbS9zdWIvY2xhc3MxL3NlcnZl +ci9jYTBCBggrBgEFBQcwAoY2aHR0cDovL2FpYS5zdGFydHNzbC5jb20vY2VydHMv +c3ViLmNsYXNzMS5zZXJ2ZXIuY2EuY3J0MCMGA1UdEgQcMBqGGGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tLzANBgkqhkiG9w0BAQsFAAOCAQEAhoTjVHYMOHJGkRMV5NPX +pm4/gaGT29UXN/XGqk8Qfvi8w7C38Ypc8UFisOhl7eHMkIKy4rua/t5aYve/RgFA +zEwAV79UKDwn6KkaHn2EFbNt8LXLpuUujc43gVX0Me+CAL/NQV9OS97ltS6BBBgj +UdEmqBzbvYyAus1xDLbZnzhDG1CMBgcxAhEZn40v3ii0iMuQ+sMCO2oy3e23wQ7I +FKhEI28r1hk9s0ASRHLMGOW15wccm2SI/cMVPuNapoj1hSEo2Gpcmb3KQtrsG6PA +kq8x/8W1pDVuaQV992nkYgCzjMhVP6ZahtET0r6Kth5JaJgThuRacXLvyg8ltKmF +Rg== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIHFxU9nqs/vzANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQG +EwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp +Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDcxMDE0MjA1NDE3WhcNMjIxMDE0MjA1 +NDE3WjCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp +BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNV +BAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgU2VydmVy +IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtonGrO8JUngHrJJj +0PREGBiEgFYfka7hh/oyULTTRwbw5gdfcA4Q9x3AzhA2NIVaD5Ksg8asWFI/ujjo +/OenJOJApgh2wJJuniptTT9uYSAK21ne0n1jsz5G/vohURjXzTCm7QduO3CHtPn6 +6+6CPAVvkvek3AowHpNz/gfK11+AnSJYUq4G2ouHI2mw5CrY6oPSvfNx23BaKA+v +WjhwRRI/ME3NO68X5Q/LoKldSKqxYVDLNM08XMML6BDAjJvwAwNi/rJsPnIO7hxD +KslIDlc5xDEhyBDBLIf+VJVSH1I8MRKbf+fAoKVZ1eKPPvDVqOHXcDGpxLPPr21T +Lwb0pwIDAQABo4IBTDCCAUgwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E +BAMCAQYwHQYDVR0OBBYEFOtCNNCYsKuf9BtrCPfMZC7vDixFMB8GA1UdIwQYMBaA +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGkGCCsGAQUFBwEBBF0wWzAnBggrBgEFBQcw +AYYbaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL2NhMDAGCCsGAQUFBzAChiRodHRw +Oi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0cy9jYS5jcnQwMgYDVR0fBCswKTAnoCWg +I4YhaHR0cDovL2NybC5zdGFydHNzbC5jb20vc2ZzY2EuY3JsMEMGA1UdIAQ8MDow +OAYEVR0gADAwMC4GCCsGAQUFBwIBFiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9w +b2xpY3kucGRmMA0GCSqGSIb3DQEBCwUAA4ICAQCBnsOw7dxamNbdJb/ydkh4Qb6E +qgEU+G9hCCIGXwhWRZMYczNJMrpVvyLq5mNOmrFPC7bJrqYV+vEOYHNXrzthLyOG +FFOVQe2cxbmQecFOvbkWVlYAIaTG42sHKVi+RFsG2jRNZcFhHnsFnLPMyE6148lZ +wVdZGsxZvpeHReNUpW0jh7uq90sShFzHs4f7wJ5XmiHOL7fZbnFV6uE/OoFnBWif +CRnd9+RE3uCospESPCRPdbG+Q4GQ+MBS1moXDTRB6DcNoHvqC6eU3r8/Fn/DeA9w +9JHPXUfrAhZYKyOQUIqcfE5bvssaY+oODVxji6BMk8VSVHsJ4FSC1/7Pkt/UPoQp +FVh38wIJnvEUeNVmVl3HHFYTd50irdKYPBC63qi2V/YYI6bJKmbrjfP9Vhyt9uNr +y3Kh4W22ktDuCCvWC7n/gqerdq+VlTRfNt7D/mB0irnaKjEVNCXBXm9V/978J+Ez +8aplGZccQ9jnc9kiPtUp5dj45E3V8vKqzp9srSSI5Xapdg+ZcPY+6HNuVB+MadRp +ZW2One/Qnzg9B4GnVX7MOETImdoP4kXpostFuxoY/5LxCU1LJAIENV4txvT50lX2 +GBXCkxllRLWOgdyll11ift/4IO1aCOGDijGIfh498YisM1LGxytmGcxvbJERVri+ +gGpWAZ5J6dvtf0s+bA== +-----END CERTIFICATE----- \ No newline at end of file diff --git a/modules/http2/sandbox/test/conf/ssl/noh2.example.org.x509.input b/modules/http2/sandbox/test/conf/ssl/noh2.example.org.x509.input new file mode 100644 index 0000000000..450cc115ad --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/noh2.example.org.x509.input @@ -0,0 +1,9 @@ +DE +NRW +Muenster +greenbytes GmbH +. +noh2.example.org +. +. +. diff --git a/modules/http2/sandbox/test/conf/ssl/test-ser.example.org.x509.input b/modules/http2/sandbox/test/conf/ssl/test-ser.example.org.x509.input new file mode 100644 index 0000000000..55c5e9967b --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/test-ser.example.org.x509.input @@ -0,0 +1,9 @@ +DE +NRW +Muenster +greenbytes GmbH +. +test-ser.example.org +. +. +. diff --git a/modules/http2/sandbox/test/conf/ssl/test.example.org.x509.input b/modules/http2/sandbox/test/conf/ssl/test.example.org.x509.input new file mode 100644 index 0000000000..aeb6c95fb4 --- /dev/null +++ b/modules/http2/sandbox/test/conf/ssl/test.example.org.x509.input @@ -0,0 +1,9 @@ +DE +NRW +Muenster +greenbytes GmbH +. +test.example.org +. +. +. diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/001.html b/modules/http2/sandbox/test/htdocs/test.example.org/001.html new file mode 100755 index 0000000000..184952d28c --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/001.html @@ -0,0 +1,10 @@ + + + + HTML/2.0 Test File: 001 + + +

HTML/2.0 Test File: 001

+

This file only contains a simple HTML structure with plain text.

+ + diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/002.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/002.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3feefb070a78be4b79512578c62768d01f8145bf GIT binary patch literal 90364 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 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/003.html b/modules/http2/sandbox/test/htdocs/test.example.org/003.html new file mode 100755 index 0000000000..d5b08c52bb --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/003.html @@ -0,0 +1,11 @@ + + + + HTML/2.0 Test File: 003 + + +

HTML/2.0 Test File: 003

+

This is a text HTML file with a big image:

+

GSMA Logo

+ + diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/003/003_img.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/003/003_img.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3feefb070a78be4b79512578c62768d01f8145bf GIT binary patch literal 90364 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 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004.html b/modules/http2/sandbox/test/htdocs/test.example.org/004.html new file mode 100755 index 0000000000..768cb825b4 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/004.html @@ -0,0 +1,23 @@ + + + HTML/2.0 Test File: 004 + + +

HTML/2.0 Test File: 004

+ This file contains plain text with a bunch of images.
+
+
+
+
+
+
+
+
+
+
+
+
+
This page is developed using this template:
HTTP/2 demo server +

+ + \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e45ac3b02bb8974d7a8c0fde9c61e1bb16203b9f GIT binary patch literal 742 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+udK9eq=)lwTFm&PCc6LX`W-9x zKNRm3fA{vwy2EdN@5^1i{a4_Vmi%4&&CdpX6s~obna(e}$Y;OS^Za{1vs`2ESJq8c zx3Ap4r{X`u*Wjt;+Ic_2f8TvQ;a6YKZs*-Uwr$VKcAHnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&#=BWTjkf1 z@@?OFHow)lsDDCY>Km;&+C{xauZ+xR{gvM}$^Ki^v&SF9PXSe&+FzOa_^I+<(>E2s2&CT_dwQWN9#`A%u}|bjo$2Q7eY$oYNfHUs@BfAVbbaW(`#%F`*2X)x z+X5tOj^45>;47SbX@5|C>i$l#dzKg9+L1wGe6|mSgqyC Ky}sY@|4jhai*N-1 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_003.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_003.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a26648f69688836eaa5f043ea16c29972a4f6890 GIT binary patch literal 697 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v17#_#(_ zGEaZ6-?R8f=EW8NUR~bz{15x$@Tb@8_l3CqJwN@@oYNaud^&$Ge)slS()QE8EKPdD z-FyH1rMbsX?|z!q8~rSQ*4*v&_u^+HCYT Lue`p%|NkZcc=!2W literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_004.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_004.jpg new file mode 100755 index 0000000000000000000000000000000000000000..1d2db983733e936806758ce38e265787aab6ef3b GIT binary patch literal 725 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xPF-jV2a zS3~axnW+C~*tk|x_dmm))!R3&h;*uxKl(m?X4U+AUUPyrxtjL>`x&?8?e6fWKUd}M zH~+rk)4$x)+hi2%1{v(rD{{Kw?7sUgY literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_005.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_005.jpg new file mode 100755 index 0000000000000000000000000000000000000000..05a298c1719ed1b57e54c055d943c2b90ea1f42d GIT binary patch literal 837 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&#-L!?5R`# z<$PUpyOSk)`tPlw`TZZm>~^kGZQXO7=k_+ehhN{uP0i}k+}y5r&}*;9<)+* zSzWQa|0ugHex`Duz#prBTbt!i+@7{@*30KRCWZf;dt)>ITCV$h?%vw3wcb2z&9Yzf zZ&#LyCTy6p;q)6<{oVCPzIyjoDE)o)`My}i?B8ClTf2NOXy=vv`?%ic!}|k&>yQ7F z-Lqrsj^Dh8j_nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y}GjoJM2 zyt_M2u2jD8$bZl7)k{9PUA?t8^E5};@4H2ZpRPZ*cTNA>9jPVBTl`}8Xp6l4UiR+1 zZT1yA{yz>oenfsdZzgG~U9X+HciEfV33L95o?X?yYkzM<|L+xB9(S%}FFCX7NrjD1 zrIxe%jn>4U(fN0O-+y;`mf-GEPpS5>@SmY|`O|-_Nc*`j>}UP0b;&PwM%+D|^`AjF hcpH!~KO0n8{p8N=vi}TK{W|sBHM@6Rh;sjb696>W8;Ae^ literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_007.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_007.jpg new file mode 100755 index 0000000000000000000000000000000000000000..526f850772c972272ccfdbaa5c6a2f9f650785ba GIT binary patch literal 747 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zAA?~=LG z%YQG7Ul04xjBWm?h3NN$12Q+4XV- zhiwGsWjk5h&n~-luGG|O!w&1CUdL+8e%Iez9eAj0-ThnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y}E;?J@x z-TD6+YObDmD1Udge7gJxwe{y?&cCU6_rIq@@7`Xz+IyDG{y)_}vZk!j4EB}( Ge-i+$BJQ*R literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_009.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_009.jpg new file mode 100755 index 0000000000000000000000000000000000000000..96ec2b8d388e83c5b0a9a38a89eaecd2769b023f GIT binary patch literal 704 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNae$Sb+ zpX;VPd+B?3|NGqA|IS+0-^x9^{rCQ|J-Dzi<01nt8u+dij|v z4EK$HMCaMxT)2Pt_u9ryr+=(9 RKjZ)K=k|JGT_*egHv#3v`zQba literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_010.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_010.jpg new file mode 100755 index 0000000000000000000000000000000000000000..95a95092d6bf6259db19c6087de264ac9a63d1de GIT binary patch literal 994 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zm7BiDJG zKivP#8+GiNX?M-_@{doCbR3z^ye-;v>E9Kzmd($%5!gB>*j4n1ztr=Bv;!>HFWLludC@z~ z;$pAop54-8@Kx3|?k=~pl-H>Xm95_H$F2un|Hq=0QSzTb$-1R-&(SpLvX8r5ANtwN z3HQEoR9&q4iIH}Ud)4YEPq#~K&k_91z;05}?Y-gSwf4fq)lsW%PrJv`Q@cL6L&Nj}EDPJ9UV@m$LJ35(vG*iM2hhE?)vKN^D% z{?ps{;Z$bUHbISP_ae%3CilnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zm9W3ip= ze^h4WgcZfyiLvRsd|LJ7-+OG~88&=#wI{a6{b%sm(e(KHgxuCEdB1o6c(mkW+S*mw zb~;z=?#oY3P2Z;>xcElIJeGF*rQsXf?w^jB8RZ&rYSQWE1Mh!azmX{2YcjLq#_?PG zg8YTD=ij&|yyw39S)KTuZcpCdJ~cn;`9J9sbyu_gGw2lmXIQ0Ld~tW()aFNTi@g7O z~K#FEG5)ql^-J~m7C?7FRmX>aXMDu!mCG~cc8vqAmVj`_kBvtpI* zt_||n`_J&M{gvghh`-v-kIavp_?lZB5N&&%|Jjt!DNi)xjOYE~dYpXr@A3IM*(&?1 zb>F{^^ZCqGqUrXxKWSccv}EM5d22VD`?h(nJ+ryy)zOx-FYokMz1Z40?Vq>F*0AUb vCC<nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+tl5=aTN4 z{|qH7I^LbUxH#7pAW5=_-D5JsoQlq@>OU1LnbOlN}c2QekzGA<5)X@e}uM$PqR4V`((BG`yd-(_1~6@a&0Q-9J?+aq<=Rqu$t$ZUv5s$ L%4KiP|GxnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zk}Y3VHM z)zz_Qd1m`$-AO5x?@fIj6@72Zy%58bd1rUHobD9g$H=~7t*>hD+kM~i)hesrz1&;- z%6qk-_{@Udo$^1X?hKF9{<1QA;iJ`eo|f42+&!vv>R;8`EsYnWf9&UXj{V;J_2nBo z^@^~oW@igUnuXS%so9>_5>jQm!@J|^lg~@TMY^Pmb!8y`7TtB{l0(YwxP# zd#9h$32guFRy_H2aK*~px23CBtbO}-O~SS_K?lTUd{pGIx*#=l<`_Ix|B&i_!IlK6aK>G18n)8fr6r)i2$ az2#u@t1u$GyX49AwEU*nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&v0YUm3=pj zD}ySv*4SmL+?#*e=Bnk|z{ROX?%YNDqSgtze{Wx#wr*)|zRa0@EY_Wz4or>y;|DtOthu2;4%Rx7W1 z8#>9!Y0g)LFx@Y=m!;;Cd{0$|ie^7HvBc_gro3mbv0@gWU5rSK4Rv{LDMus4i*K zH#NzhYfoI#x~0s@$=`$Bzk5h3Ej;)1=pp^+nPwk4Q_?b}&(88as{C_ez;~PCs9u>u zZDY^k9h$kf%hc?pvNklPMJ8{VRA*Oj)7YOFX*FfK)S@kMUdJzXzWv#kJ#%aEPS>+# I?*DHB0L?8?Pyhe` literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_015.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_015.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a27076d74a61998e580cd4da089e3070b6888a0e GIT binary patch literal 702 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+p#_g@) zPgi{B-*xss17nm*?CgEJMyhq$e+K^2 O#eeTlmwn~%|0V!mqV$RY literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_016.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_016.jpg new file mode 100755 index 0000000000000000000000000000000000000000..04b20db1651e9cd0f7383a8343084171e9e882a3 GIT binary patch literal 703 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNaHRPv% zm1LRz_x(2)XXfwT-v2(htmQvL=IX=l8@PLKPcM5_&ilFQ>uulP{~0PX@4St@9hy18 zy#43wXa5<}T7U1q`=6nzE%(jtx_Ga$yRWyu56dogTrK}Qr0~;bz55RrpXRz<-~D?_ P;rD%CGrYs>|K9`v-ir0; literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_017.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_017.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9b6e44bcb96795b100866cad0c1899acae37db00 GIT binary patch literal 707 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNeO}hT- zwpZE7Pvhg(`rWbnZ1zn4$X$&)<+-=x6mPljSoQYPw~J5T{G3^rRrH@h`0eeNPX8IU ztDm{TsQ%$?=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+a#PU0F zdtW?%xBl+3b>+GL8N%N?oBd~)UUusPe@@Z*d!g|w7Zz_X4i4A+`^wUH_3meXwJyxs zCH?Q*``^#ztf~9{)M>-rPutIacRzirf5-07?MC01Y};`7eco+%>3#3sZppo~-{|7` PyP^LX8cj{u|K9`vavJ$| literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_019.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_019.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3bc23a3cacef754bfcf201427c7ceec389fdb016 GIT binary patch literal 1013 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wD~z^|=a zTj%uZ9$RU$bkAa$-j+;ui?DNASFiV&>{!1&;;gdq_V>E^Q#*q%Gd!0Ry%6!k-D}sz zjZGEb&aa3Tjs6{JmOIhIBGvZq+2mL8ykD(XORDB(zYWN-OWL$zVvGTcxwL=O-^lH? z{PTjA-MzVV$sPAcwz|usEA-dKb{TDYJIQdKncR)Uqh{AVvv0qDtFiC$Ub|q`c|Mce zti*1AZ{KDd`o$vs!_(Cfu7z6nk7|4ho$8QaX>s5=kGyPd2rP6EVJoe0;_tv$` zel%p=id}P>CwpCVl&7$((!}SvHcS;K613O#Ju2B68ut4}n}_r|(QQ5QF{XiS7OK(h e-l03@*&MP`JdysON_OkC-aD7)ZcVHIe-i-FtcnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+tJkVD0DH ztN$7Ht+EuU%>8#ZB7gR?)c*{}cT2Uo>Py#`U)yi#{yn49a z@^{BPU%cK)Qu#ka!+(a&0Vj6vUzqQ;<5cvI@~YfbZ>87Yi=Vo3SnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+sezTkglw z{|p^}!X-8T#kUN%@WE17F7NxqtX`&DPKUZ@M2juk>739)Z*Qe3YMj z{L%HxyZr2@ZBM_fIQvp7;?_iO?`~#u8=GjE+j745($BhE@BbG6KDeCsetG$ClRWGC zUHhg!p4a$sJt`c3BiQ|oX3zWQPQoA?E<>_1F) z*7@ZAt=jeOj889a$|PLB8{Kz*ZLM0}q+{0k$!AZ0S(tdgunP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;4yT9+J z?%%WJ?%}6*KkHhb{->6jmX-JLbM7DCn%lM;?-iu|6wm*C<^H#Quj{7N&;OqB>Dc?d z+kbSdWIVO_M_vB+jHlbR>)uvho>~59%iR@!wEiq!Yrcaw&AzfOb-7u&{@L9>dd+|A Qzqxq+?DEGB^8arF0B$Aw;{X5v literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_023.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_023.jpg new file mode 100755 index 0000000000000000000000000000000000000000..7e83a7ebd453a841c91953ab96be6e1fea73ccac GIT binary patch literal 905 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v%I^7i|5|Xu2er|7x66rN%q9q(yMwd*X-A=RnzD67iE{!|H1zBW?XtSV`#{-ztzS! zmR!|&^fT&}?fy4gt?mbOeSX@MI{9k$vwDddpR0RpdCH_pXUD|a)ogoV_%7@Cq5I+$ zZI6#gMZF66X)f%iWLSEK^Vz<-ZJvH2supKItJbyOepsfc&<)#z)t^Z7RfQw)Em3L^fUh8dvrM9-@WUS^;@~7 zw%xJ|x*>SZzx-e5^L_GHc;|O+xmjL&^J2a6`OoX?GR@5I-P-#3=P|7{x{lVa?`rq+ TCKP-XKI$1)c>CA8`u{fp1Y=pD literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_024.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_024.jpg new file mode 100755 index 0000000000000000000000000000000000000000..87c711b7207fe0de62a40e325dff046a7e195250 GIT binary patch literal 980 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vYaaINV2 z4r$-tVOKNku5FH9=h9N(Zu;VujzNU4>K}p4HW!!QQrYpJA>xvq)8iM5cGw0xPxk&; z-u`a+#F}M2QFm4M-)X&Bb+sq2kNsj#iU%E0zD`;ovK5mASxefHcry)fQjxqnRG z)#{^iD%G4i4?geNE|3#Gu`Vo?c~0MB-Tw@=;geq9)7v>e?6&N#EfY`v+n09i&Bx0> zuO55J>3Z@-evQvZ1%K{4QAf8~CVsZRR`9!D^2^J!F(3MmwCws&J15R-%|-{&Z5ud_ zE6hKiTPfeMHL-rB$Gh9xZ%L$lHagE&)w^%Un*CgNJ;i1hY;Ep;!4v1QBe|zaU)HzCDC_d6-BZhJ?q!7K*xT)V>DzY4d-0j= v+oR__GWwUbI_LEqxhu7;@@Go&@0g!|{!Xa4uZuscU3KRY%}*uv|8D{SW43;+ literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_025.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_025.jpg new file mode 100755 index 0000000000000000000000000000000000000000..c42eb3cb5c944bef18c00f9a9a3415fdb640e9cc GIT binary patch literal 708 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNcN9)gh zqyG$>13&DQTzTKxxL$m7q1*e1x3@ogwkLRvx#yo)YhBaXKW6{?x!nB3{p#%C%DX$G zCh*;gFF&=r`qzd1nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zjr|F>1TdHwgO z31_}0eqZG}nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNm|GnAU zE4ligbMwFNzP#`G+3m%_mA`M#zVn}nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zTM!MoeL zpZ-4l>|e=yi+W+R_q#uRS@ZYk%zd$|U*22tnfcFtv-j`5trz$;TZ-G@_v&r_*VeeJ zpZ;F|z~}08nfZry*Tp}InwZl6W9sa?y8?_=m;GnRnzNaAzj9vI&$`#&8a`T|Ra$bb zd+V;X8-A{ub6;*xy#A?OEdl=-b~9b)J{IhL?{IT5r^=nh-}isATl2a3@B7(*Z*7!0 z|3_#4yR9{C_oeqlo&C?Cm>F4rH}J2P{g0S=+Q0ALp8W1VL%QsL2Cn|~&YP{oS(A5N L>3{ss{r^n>5uPpS literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_029.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_029.jpg new file mode 100755 index 0000000000000000000000000000000000000000..dac302b56cc929ed3bf4a6416865505f09bb4342 GIT binary patch literal 978 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y~fZ|D78 zk1T_ZdBkaQ8Lj&Kbn@w(z+YXL+7E9ldfWBfH+$LKvf~AtCWP>v;^VZBy0viLghLCe@z*E**inin^NySE6y&ozngsQYVz&B&C#}-dJn!u#;ojDjMRB&<-%Hu`9(Vk!-L?4QEQkL$0cqiZ4gdfE literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_030.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_030.jpg new file mode 100755 index 0000000000000000000000000000000000000000..42990716284dc17b54c4ff53bfdafa26fb42174d GIT binary patch literal 707 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wPy_TTq= z|GvuC{j}CP^Y@zj=D$sfy1%bJYISVYzH6bmYyX{7fdPXB%XaJg~K{;C=5(%WlJf4aCs|IFImPaj6j VJ^y|B{g=LXWVh>GTfqPSCIBr>{BQsO literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_031.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_031.jpg new file mode 100755 index 0000000000000000000000000000000000000000..739924fe50f87ec771d557d354b6d917871d0bf2 GIT binary patch literal 1060 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+uVy@o}+# zl5Or=Gi%mfyzBkEG{Nnm)bG$(bN9V_H_m$Xa@KV}!JMXh=Z$<73ZEHTKFH;b{AJ%z zXC>2eQSFWKI_^y|rogi4P~gbs8x3E>&~#-@i1|Qe*XLmx4pVleayedh5n3tN8XW zcipPZu56V)!8%1-IgjU3n$P1OGbT@tJNe=Gx8jd#oA%$b)0m|#t(n~TcuS1UM5~74 zK6lyGclM}%xPEv(UvA>0h{sp9N~nBJG8cT}Jpbo2ejlzIS4@xW*pc0_ZfWm4+htnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z-_#@)~E ze!3L&;lBCZWpCxbpZEI6?_n-``#(ebR$jIL4Bz)=-ue5=T=e(q{|vPOhHKT&ey{uf zeMS8AXUp@rzt@F*S@zCE$U5)+?6PNze@xG=zaMgUxBboY!Oj|PKlgoQmH&Se0HOl! ACIA2c literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_033.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_033.jpg new file mode 100755 index 0000000000000000000000000000000000000000..26ea0e1b3c986532909d0a02d400bdccbe6934c4 GIT binary patch literal 701 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;8kMei% zsmts6&;DnqH4YBfy8pf`%4YBVqkprX&wIW;;m+*3_`SYA>)V&gzm9&IcGvCl_xh;G zj;C9~e(uY=a)08#chBhUzX<>np810S literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_034.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_034.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f02930e6b5c274748983b4fc4c22fc47b17b049e GIT binary patch literal 898 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+tXxNTu)5 zqu7l{Hr0L8xcy^upZnJpX*cUDHl5CYx<@BUGMuI4ec#rk-=~_6y|l|n<&j(*dLn=M zwawQ=BJ$+RPwN@~KKyC^%lHKzKX2$gnfCGB)?1g|x$mn*dX+d{Ebqz{<}*~ow%=azcR9HnyiI<)U%aoB~G@dZ?)))9+|JR zds&`pZ_$kZ3=LQ6JbmxwPko{m6&~++a`hyi*U7SnV$G*=iwkSLzhivPoxR^H=h{ba zp7L#3_ky;)Om3|&SCad&_I|Re-m$thC;xTt|66&=EBT*dQ@HZIh1r#PYu|0t+2k@Y z$M)27cCGBhlAETxPgg8$&k;Au>w9LSkW(^b literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_035.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_035.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8b6bde8205713488266329cd2657f99089444fb7 GIT binary patch literal 986 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&oKM3`dh`! z2fS*Z?r~0g95Kyk!?FFJ&h|5GtubGpJzZ+s&TlKrP8Jp{d_HmW?&dkau2$-;FZFo8 zK6R2=`MpPxv+EvN&C8lMd+D9nnCNq-rDJ^AXNz>*(PLMawdeZ%W;Y`bueEN<_jEI3 zah;HNUp(H~us_n&&6_FbHtAl(p&7sWr+n=BzTU0v^_#b*v)4=)6Lw2&s<liV-u)!cqFE4o}~+Nuq^-R1v$O{&XZ_+@=i-t%_T z_j2W>59j}IUpDLTnaJfo#mpzmMSJ|b$G-f-<(!hrlDm=nt`_XSdELnVEWe%O!wt0z zt8YEM+O}Awe&2rvA5WHz?{bzM{C9ohqa_!65EBmo7P+o>*HVb*=2Tjr@+8;p*Axs>R=D$S&KJ@g_(&=+(nKl}T#TQ*KYUj&-nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNce)sNc za}RI7yZFcSthfIevKB|qe|Gyv_>|H~dH-JhxpMdX_V=}!dz9Y(+lbX=<>qTG|1mG~HP%bPLIrpEnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&rsf_o1T$3 zNfj7~NoV$aVeVfab?~Ez=CYUDRu*o5cH`{UqVNKh=ht@gM!l}Nlph)v?R2ST@9h@( zrAa@Ugsq*moi4}ba-BNe(lhnELiusg-#w{I`_IOd+LZa~Rj>72w`b~}d1;#BGvx($ z{bxAsrreXXxh6LI5&!1fH*dJJ*c)bwcRZXR^E|)q>r1cgnX=DktCR;X&e7&yA@lBW zW6Zvt3-4{+)33Kw>z=3Hj~sLDB@X-n_T86uO_}?ruVd@ZFUn4 z>(Y-1+^#vRby6ws-oNMN)+jBDR7A@KtFXSQRDY*99%jAH2 zA$OGRYT4to&o6tQ&E<9W&XcbkIr_TSG~X?1Q#qYl3{9*4bN?esVv(|q|x(#pHKTig1Tb=Q0s Z&}q-zVmSToJIA;0V^`X>d1d^+2>`K}c5MIv literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_038.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_038.jpg new file mode 100755 index 0000000000000000000000000000000000000000..aea11a3f061dd545d28552b3f3818474d4d8fcad GIT binary patch literal 936 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yVjdZF00 ztl!cP{N~F}Z+#Q}^u9@5vHADz;&{H7+v9iMj*qDk{FqWMCw@8p%&m*Zlv4jQl=r`k z&!4sJrRt^s3=4nu^Iq&e;`cf_qgGb_uBh6p&+;AjCBDpW{m;Pr^}WQap0kOIZ%MBV zvfr;}5i0-QFfd;DPx{}zbqW>g5A&P$saMn=*(Y#ijg6~@`-eq`_f@-UMYA5xQ!Q*i zA+f$=Ui-@rEo=Jpj%!Q(x%xt$zfQsPq4u$^u>TCs6Svpzdj2Q-eD3FMYs~82-M#ZlC%%ai7hD z)%v?O1jo;odj3ZF@n7@!N!;9Lxq~)j+W9)aeI$DO)r-Rgb_>$>&7Jf(U~}xY?LMpj z-n3j(-D%@!GvD-x*ZzA?{!RTDF=w-|WZhe}z5X`}DxdjxEU$5yqk8N5?=|)RZvp^# C<8564 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_039.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_039.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bb54d13f027901a4ed5ae78ad3d52667f15bfcd7 GIT binary patch literal 700 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wP+r+ohR z>1)l)p8dYPf2!xHn)}s%Z{@w8TKu1(=6X+Q(?jv!XYRkbyglz{=(bf~7Z>`^tnZq2 zvM{k;8S_TO8Q N{@?e#k7D?L698$K_!9sC literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_040.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_040.jpg new file mode 100755 index 0000000000000000000000000000000000000000..91591af53501cfdf3cd2c57ed0d0607dc675f319 GIT binary patch literal 784 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 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_045.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_045.jpg new file mode 100755 index 0000000000000000000000000000000000000000..03f5413cfde9861b793e93fd8787afb1f722ccd3 GIT binary patch literal 978 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v;oVEYE& zi?yr#6|dLs@>Jwhl6U*M{@j0tTelDIlfP)E7Il^kK@y`qhS>&-7d@{%M@A`gttZt2XZQ+v)Myd-j&y*F7?SPuX|N*Rhs- zOlviNhppLNZr5yarc%)buam? zUvY!soUpI!+tM$u{d4biYQ9_QBc}|^(b1iFgjOyCnuf02xw^=-qxP7BF=gQqR02^Ontl#Xc7mv#9|K9`vh;4*; literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_046.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_046.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8353e242a68f085be41483e7b5e0db40704f8a6b GIT binary patch literal 752 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+s>RiMnX$ zR*uO(R_&R7a9`eOuW*O0`kn@{`@Xt;dj7p4Z>ry;2mcxPo_)C;Srjk!`~K0GPqk-5 z@($T%>P>(8bM7nGUG>w8^U~hNiGTRd@aWt8N75Dd&xNH1EPr-fZ7-L-uy|@o?#;Zd zFRm|n^wn_jd)4F>`>v>TKaJlLow4RW!*=ga?{9D0lzeT^wTbgmL*nMXynl=H>HADE QQ|+UbLAD%D&;Q>90QZm&c>n+a literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_047.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_047.jpg new file mode 100755 index 0000000000000000000000000000000000000000..86e4d8837e9264be21cc06af639d9e58743d6a5b GIT binary patch literal 751 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y~@Z!wGM zS;u|<9p$@U{*N`b{O0#{cXx;XXILM&b>)AC^wPT0w<-0xHtS|Zxjeak_~oDYs>S)d z%dVw{rmZ{t=6876z5RC==GNuT*INI3=jv~p-=%$8rC%|NSK`yRcRx>E$(295{U3`~ zcE`D^p})`i_BtK^x4G=;vz>Xhs_PeWyOr16*V-PsaH`qcf6DjPX#KtRPk)!)lxx4& P?%bF5+CwI<{{Kw?gcuXW literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_048.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_048.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8f308ed63cdbbdb3a858329e456fd2d92511aec6 GIT binary patch literal 737 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yA}`qO`J zx&JfN)^80my7=_Z)?b2u{)(NrnI&noHFJ7y=GhAj+PgovA6h+M)NT9rO{PmbfA7~nukmlHXqH>ov)LE+*hy8)ED8!w|9=wzS||cs literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_049.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_049.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bf22844dbdabda5f0144c0d31759935bcc25e898 GIT binary patch literal 992 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z-v=OZ1r zL(_iF|9y3S>H6qXYjGkid7tIpX3|Ad)mKV^z*)j zA6NTq>Ye$1QJ-Jo=k%Z9uD|VG{MvuKU(j>4%BABEYt0IG<#m>;6>q8L`+DX>vFDXp zn_|6JhD|Z?d-J32y1$q>cgdzoUB2k=IgXQDEp9D-9X*S0Wug9z>EExH`xh$~rR7iJ z-JxcGM0CCBN3n(VYwo*eKb&2!r=6p+Y1Q1G;`4s{mTg_K`AXdR-=?KUKVPl8TClCa zP^hWwt;EwJtLyJJH%(hBKlT2!dtdi`-goKYrmLnM>Hkh|3klUx>hsxcX1ulW1%F`t zvi}U5zBj)8BmLpJ|1@7SUG;#yJvJW>e_FrI!QyP4zwesp%v)ckhke|%b>9*5tlO6= z84d)oTS%Ta{k8SCb;Y81ks8B``Kgo7l(p!cle{i}k0C+oN1SF*n;e(+-JM@7bwZw- Ko3HKve-i*?;*eed literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_050.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_050.jpg new file mode 100755 index 0000000000000000000000000000000000000000..65adddee24247057e5ed1f817bab9187d447bfe0 GIT binary patch literal 688 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xms_<62$ z|J~Ttud-~<|FQp@Wmg_Qb87v~sGnxFrS0`weSgl}UUUE5g|%)Ew?F$Cer>|x!n@mx zE`F}BTKxD&*{Tb-<=^YQV)M9EbH8k1rulyc{ literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_051.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_051.jpg new file mode 100755 index 0000000000000000000000000000000000000000..aabb52bcee49dfc3a9a13d8617c46ed84671ac06 GIT binary patch literal 697 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vQmY0cfw zUi-z=@Akb@|G@s<^4f3z^uMou7I%DqLjL@BYb~RTw%tFs_>Sbh*t5?1r?>8|FWV%M zD_{Pf!SPw|!u?;QEN=gOmCyOdG`~Rh)Viy`SO2}$|NQRmzfu1gyvp9*e{;Dm?e~6N KZNB6GZvp@m<@E9Z literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_052.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_052.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3d4bad88d2de903c1d799b9dc13d4e799ca41b7e GIT binary patch literal 699 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wPw)9HHg zKWuYPZU4jm?sDbtv!8wi?1hi2%bW^+x9RPd#dGhM7YCR1@BL%DJ!DSa M@6+2F<^SIV0P%J7;{X5v literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_053.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_053.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d30c4d000099c87e9f9dbb58fda71d49d8077fb0 GIT binary patch literal 1052 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+u~LwfzrG zKDJ)H`e#yodi3#cox0PCg4}Z6_Rl-KH|dYhkEO-SGxxukgs$?V$R6>B_N_(ZDyZGF7Y>Z99sy_JOzZ+Aplw@=Q=-QMO@e~qbj^~=wz z);_A8Q^)aUSHwpHk?_sWrfsU8@9+6B$ihZDe^pFO?)HlBtaraxJlZKQUeQ(S_51Ly zJ;Jr~qNi5Z-%ICdXZ8Fg_2_Nxqhh>s4E!SS~I$81brax=K^y<#@o19<0KRdrM{m`fSLxB%#%}eJV zX?{E5(1A+6Dg&1ODZj!`TOF~>JwCHOTjZk49`C2kO3zoUzq(#Jqimkqh5RkImqxCA zmt^SC`@*#@`o}Bl{j3$MBR*XHW3>9lohjl1Pu|KO@_2pX*_IO@wIw|tzSiFH{q27S zhBe3eUYrbFzNq@woV{z0$Z>qQx8#=E)p<{QHlH>BUahA+IX1(l_gk%(Md+2vX_p*i zJm-1dyDAgz$^ULJT<5P{^0L6wcnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z-wRee{Z>V|33rc^1QqM&YHLU-rwqR H@&8Q#3xoDP literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_055.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_055.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bac6e3f04dacdb31dc8f5f8efe95a2b5c0531b7e GIT binary patch literal 767 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wPyvtW4E zpZjkvZ)eXv`@L4n_O@N@?iHyz_su{2XW*?=k5qed_tU!ff2YmfVV##hrEbeT;UAf& z|5(?bT*gvw{(alCx!eCSE&j1eQcp-VQ+@L3&_ArncPnnYY{*@|GFqp7)z8`cr)G17 zYGrb4f8nxRqQ>vo_nDtAN4DL6U(d0Q@AqT#_63o$`BE>ZZ^{0%dgh)VKl6poyyRN7 g{LJpz^DphSigYtucjeaC3ynP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yl8lEdC? z`Ji1PVRyf0ty{WU!Y+SrOx?~$FRq#0xg9-!x#+Rklg*xPy7Dpp)+&$nHF~@2(mr4A z-T6L#&OV)8`s-r6^Y(d18}IZKuPNMTaHgIw`*r>;??+4Ltz1#tr1p8=x#K0;fBdf$ z$LrklwOh)!qF2V-ep=d%HSAM&B+n^79`(1rUDK~k>eH*5yyQT?z0;k)e)=5de~nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z-?jJKho zQT+w6xA%RQH#Lp;v;UW$Ak& z?@irR=2uSLc43Wu_kRYb6)B0k^FOSwf4F{@?S{wC{>guvwZpzAaB)SRNF|msasFG(Iq{jcL`wuH}JmW?34R{N2iVcvt%Wn*hyg BB(nej literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_058.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_058.jpg new file mode 100755 index 0000000000000000000000000000000000000000..71f602f1f0c404713e6f04f28a99b32c3d9034bc GIT binary patch literal 759 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNa?e=H$ zQ^)_#%D2Cp|AW`O{QKH4VuN{e9zSuS`9!b7|qX zXv?J;-*vKL-hNv)^_GY4&6wE*{6L2^m!7#j zFZb%1KOWckIv>mpdZl*jU)<69vPZkpdg}M~b;p%|-1IZ|kKBq^mvlDuwEolGbA9pj XOW$tn3i#~Kr&o8b<>{02|8D{S1fv%0 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_059.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_059.jpg new file mode 100755 index 0000000000000000000000000000000000000000..78b0dd12e16d13f2e6602461f48dd7aec33bca47 GIT binary patch literal 700 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+pVcqVE zfA6C#;@?-lTehY7hxnPSqWAyQey%=Zt9X0=?oV%*efrN}T(jEUzP#+s<(W;}uKrvh zDQ%cPJ8S!1>HVG4i{&4#xVf!f{Pg#X=Ral_{R&{-k^k`LtT{L0zZC|4{`b~0LjP{Q N@qdQY1&jaR1ON$l_Amed literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_060.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_060.jpg new file mode 100755 index 0000000000000000000000000000000000000000..b2c699c7281ee3ac2cc8c9a346026d864c42154d GIT binary patch literal 985 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zlUZ?M>G zW7VUZ)n`6u+`0YZ)i!?Kf4-)RJ54>;t$mh}H%Voh$8Gkas!e~d1>g9#Qs>#`uJh-; zt7liQJ$!bWYtSe5#{~*+a~^+Q>uYxG+_zsIvimPBXg;}PYIs7z&*!(b&(_Vk`8oGh zZqyp_uurkByUZpxY|{U;Sy^IT_rv{7Pp<4q%wBriS!?sd+F3TulfN)+t}%bO`*i#l z&M?oZS5$OPpJ}xG7y2dr&Etiq)ALI!i{;PN7e70(=Sk_~*Kusg@izjeOnY9&HG6fa zT8(w3+1&K3wfQFB-o29Yj+EFxS+9uw!u6~7H@!b(UEfi)ZEfM&m$}(2rEwX*jY4X+Oe$j@&7jg DtUiv4 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_061.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_061.jpg new file mode 100755 index 0000000000000000000000000000000000000000..082fe53aca928d79afc5fab84a8fa05b67a2b6a3 GIT binary patch literal 915 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vB1#k@;q zQ)iaDEZ5vJVW;KKRbrRxFD8CYxh=fy(OsK!md7fOmWgfhTytn!Rep!=Lf71V(b4I7 z)}?>5_I_`BuUm6`-Ye~=uD5*muvqo`2o%^&{qlDEA`9g}-N=3(qrG!_v)1Ob#B1bP z|7Xxz{ETh(n~$-%DL=h)EtBt0jP^~J3A0zfl~(+D+C&dm$tN2v)|EZVy!J8F?9J0D zMxV}9JO~T&)%BZI6nx`su9G)g+P2@mtM-X{8~)t&g(Yp~iz{=K1G#PWyZH(yap*3_JbL?RjS(9C-WY`Rvbs=W&PUPuWvp-Cp3EucUQZHOx`;|2F|g$6mJp literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_062.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_062.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9b3bd8af373a5625ae3a760e10a39ea43f337fb9 GIT binary patch literal 681 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vP9{;4%* zoi+21^)7#3v!${<|I}Lfy)_Ttwg2|L)))L^#U1mS{l@iG{om`Q*v$ViZ(Wi9J>$;r s`X96M@7>cQ^QW9S{l|9Yp4~O~tNL}c-sV4ADf#~<0Qi9GCIA2c literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_063.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_063.jpg new file mode 100755 index 0000000000000000000000000000000000000000..34bbfc5ed18d385273c241eb340a1b675a7a195d GIT binary patch literal 707 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vQl8Ls{J z^1rP-b@GqzXa0vP{xjSv`)q%6dGUXS8`sb8^)H!Nuy$wiohvnGKUdZpzVr>Nf4Aya z@V@82@84aay^!mj>(9EZ@)^PZX1-f-)$jh)eQ~ed9)6!?d;e{K*gMbNzt8Tz)OwWb V_P+Ob|9$0Fzn6D^u3F&#n*gFP{(k@f literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_064.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_064.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ac0ddc770f41e5044f4b8629d9af82759fff646a GIT binary patch literal 693 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+j#y` zqxuVOe|G=Rz_dK~=l;pTnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&v5kbjJ&PB z`caqP{=1o*w{%~0M~a$E`Gbj{tHWQgSbj>rt89MCuI!)IpQ{%hT9xg&ymXD%q?4bH zopLeW@N<$6-(1V@>o1&VyzjlT!rptw+|bAeJO@J>cD^x=J1!Ws=W%4|ou{YOD|XnP zn_T|ezE^s&|DOG(?mNwE?we_zI-GxM_uk*vkIB9KIs4&!+mwyfWk2`aS802mcX^J% zztHdO2jm5Ks}E-H@}4&Bp0mi>!v2}Zm)ov>5Xi%jS!8^jiNJr=Kkjx_f@f)ct=~ c*?)ZhZI$hncan9V^ZqkrFRd%9_56Pm01)v^c>n+a literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_066.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_066.jpg new file mode 100755 index 0000000000000000000000000000000000000000..616dd5c876d4b5ed21a9aad6c0ea85db636765c4 GIT binary patch literal 991 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y4)mY;xemx?2@DZeDb|;R>DGv@$&0<#~Sk=Z*w0>OQc5k-}PFqbGOK<>(%~j|K|S; zAEv+f6q8xD+Vqi2bh7)AhN5zdW4Hdi-E(#8ea`5c{}~S1t=izJ8M*EJUYmmlnfA@+ z*Rs4TpDC-Qd)-;{=+mo}@`o?{wb}adN;ucZDT`Dfa0U-NG*o2E|9%aannBeG`x;jintg{M8zv`wns5#uMftS>D6Me5h1 zOW(~_UGw_$u6fZD&#$e^{&)GF;MPljDy|i3ofUm7nJlJtIA`@SPnr3_@%8l?m200L zl%FZ|=jhB0_HkQ3)W7Zh=yA8=ldPh0tR1&S&obW|mE1h(eK*!?w`E^xQ`LBLZMk1@ zTl13Jc9Huo2k|<2b3V&WDoIIHnI!V*W*^6Qk^9@~)3bx4cHPdkY;jssm&ADB?)_Q! z+9S44&AGZ>;b(NRexQPU+~S{MdRtbCUY545Pz;}*T(iTEts;3+-PYec$t5-N#(u~D G-vj_efPyOk literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_067.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_067.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bbbaecf969e6d4d7c6a8f8536f3d419905bc84e5 GIT binary patch literal 1056 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yy&Se(`N z4}bUH%vIi&eJr?T*M!9<9Nsp@%f6Z~r0_BSh;P#Qw_MwH)$Eo&Gylxf4G+Wj-T7v# zebLUa#%Yho!yU1vDc;XK_Pnl{8g#rrI?Z&4CZ* z=FH3YR_)Pk`OlD9Ds?+~b;l}=#H-ftcP{DATUXOpC(Yp;8oMaHF_etud~U6!?S@BY>lf1!xeD>DrbKRv(gTIjK3@`w9_<6Uah ze`GKI@t@&n)Y6{+47n+nA90s-A2F(IUYK~o^w-&{jfaE3O}Z&RQ%h^jr2gO&eemad()509uYkAa`~1E?w{TB@`$9$0_reak-a?!)ugH+Po({2u?Zym-~)GZS|v|7ERV|84e1 zcJq(rk6(vf(^uWGX?uEQ|E(0yg){xaPc!#fO^&awm>jX?!?VenP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vO;L_K%u zt1a5B@zdX3j`DwKuWLU2_x{$Jg+j J65Id(CIEhG^Q8a) literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_069.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_069.jpg new file mode 100755 index 0000000000000000000000000000000000000000..27e1abc66b44b1edaef742ea95531a83e3fef571 GIT binary patch literal 1066 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yl4N9sTQ zQ~SJsY+bUv#U{6qg?rnnk98Lr{=M^);9t0I^S9i;E8gtS*x&N4PPgg&Z@rJ{lTQ6Q zUiOgZWmDO_R|i {+bS>Wg?(Tld!OeqyfQkF#w#t$j*jtK4^+HNRO_C8!2@N4#qL zV|JOn+a`MX4g0gqhST!DhtI#ZZ~Nx0efLCNLPNP5SZgYO+y0oOT`%ji?!Ng=zPtCo zUPu@HT4MFdXx+8faqCjewK~ge^5hpv1eOY2-GAcGe}*5-i(l^Fy!}vgJ4Wv$FLtR-&R={&H+}CFUEaHA&&+nz zVYCQ&-hAcy#I~mg!|N{Jn;#u@`XA@lnQOArZlucS@ASNN{a(E4<lBp;68J lGPd-i$j3=rZPlio-*|ZHgH@@8fkz`R=X>h)pI`a^CID3Awu1lw literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_070.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_070.jpg new file mode 100755 index 0000000000000000000000000000000000000000..de1a15e0a7606ff2cef714ca025b0cbbb400771b GIT binary patch literal 1024 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+w^oPp;Z* z)x+_3bTl?DpUiZEe}<(>^Zjd!`;SLW+i7xclhMu&(?wt8&13!=#??RSl=~+(Ep$uk z(wib-r~3`-@(Sml+p1@>Q|QzEHydwf{_1vk`+UoDp&kZ<<*mu_7v35EoIlg5EZq8~ zjYnt2w*L%!_moXgpDO=hPO18W)t9r_-@KYv61ML3r?)YGE8o>kJ#cH~wWxci!!Nx{ zocs8$ROCvz#Fx_w{IW0AanzlgXZ>UITJ4N7bF*JQK@!Wan7X<5CO=4wzI`ElYS&yV z!BQnu&u_%a?q`+h z?=m|+b@$Wf>unzG<(j3J7P{_=|APMvDerGC^6!h&pY`Z{ikcUB5^s;1?VrT5 r+w=FUtT8%s{Mz2M{gP)lem-`+>i6o@U%%$3HXlAVMP%)2`~NoqP#m1e literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_071.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_071.jpg new file mode 100755 index 0000000000000000000000000000000000000000..40912e34025d07f693afade56c8703d0c0243990 GIT binary patch literal 784 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+uExQ~pPm zq*~Rw>zv!)*B@B5=92!j`)|wFv;2w+>*iIwb>?>DZmGp4t)f$<*9Tp>xlXXYb^n7< zzwF-s3~%fAhG~m0*}-@J?(I*lt2V``y*+b#^|>cMK0f%nX7yVAKWt{_KdmaNsrXQT z_usX&ue!|gFJo4%5x?cW`)~J5`=9Oe|1q6+*|A4@dtUC@Kh_niieva6{l1-jF73z1 yhx)VssrlUAt;1u#G;sFg?JfIqw@=>upW!;&TG6chw@Ujr8teaJpMK~3|C<2DTOs@a literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_072.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_072.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ef01d06ec0340166040e67bc73474e07bafd7350 GIT binary patch literal 698 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wPw@BNQ8 z``=uiuCf1Z{RnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&v4^o%EZc^ z>*DfzZ`HZ}dufw${ro?Rp4fQje4G0jk?HrJ9^2vCS-`3CJN!bN!q%?O=gK}kIrQ(1 zxvQ4(1)5Ryo#OTBu?b@R#8uD}YIU~z|FV^3F;U20|6O!|uedjCrP5C`~CGuUj zw)JM4>{i%f7PO~}A$P&1O^^RE&ySzBZ^piTxvA0B-UUau=ihF)cjx-)`pxleU+0=X zQk%8u_J4-O$M;3=)cwzJ^|)kzR@?b|Mb+0Y-D+FOvRx?p$bKVpjn)6wRL}ZUxUxEX z-H8`XyLQ{0`i$pjc0M`^w=f z&$_0RS-d_LqHU@xW%d5%GVAio-&UP`cH8Y^<=L4m2R_fe-(U4Db4$e1h<~^Lb-h$O zRvLV@T|)G^JwwU%?H^fgmF~&qox5t!CZ*5PZUxEqafR>W?q-{KmVWEJer}H0jfZ*M V<|{=XCoj!fcih+Vv#b37n*dxGlraDR literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_074.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_074.jpg new file mode 100755 index 0000000000000000000000000000000000000000..28fb75cb1a73322eba230dd5437b022d6366f92a GIT binary patch literal 969 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+tS4h?s8S z3g>U}iVJ?9=E<=+YWw;1temQ>`n64F+fz@QSZ}hlc(iZd#=m_f{~6x=c&Gnv=2qAA zBNIMI$|QQ6mz2#uUE})O_{aW3zn<=j@VGv0?fz3cqLcjY{JDK0J-cq|ulg+uEqB|0 zvT2RfxI0hZeA=~Dug;phR)1f%UWeb-`byTu2=_uE{a@?)<$0T5*=k?fm>Uxl_4L_e)ngWZ_Ud5r?Pqb#Hov?XKg<#GB-v3&11HmGsQx8 zrB+-ssh^%68nxPFUhN*EyLF#`aIdM}+g5A0XkXUDH|xr$M=hIodKY)ZvmLH?C1=*v zPhTGM`DKiMkDc6)`eT8|woBDrm;P7!)9&Nxl9QJ2BR<@o9o?zmDdp1ruWs``AnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+ykMHgSfb zTjqp%nF{4EE8fkrz7ZK)=N`LOT3_bt`pIA7yJq#bzEjSwUKaYEXU_7cac>{WcTU@9 zbUEyiTEugCoelpPO1ggjIu}w}bm6PU<GS#jI9|$M&}RQ;_UjpTC$>+k za282;F2mQ-m;KaUtnSc0?*~2mj(- znV;h9u4P8&PdoeFtz!LzlImLb@T*JQ@8)e-_gGsmTKV^)eKUU4Kk6*m9r5VSZ9(@x z9FO-_{CIUL@JYAbV%BL_mcKXM`DM~Qj__=qtowJPmRHuC+5cO&^6mUy-)rwp%Qlrq fZRGFOeL8XCzu5hH?^mps(%tKKy`|vV@&7jgC4^$C literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_076.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_076.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d929f536e0acbb83477977b2f51ffc95a0797941 GIT binary patch literal 784 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wbONdIHa zmHQU;Tz~H0%W6OGzxV03S2hR!GyI)eGw~bCy~KY~WiRa?*uVSxYW=hNtzTE%+?RWM z=Jf4n9o~fgE~$Oi{dz}8{Vf6G+{#7ysfqtge_sB(we)+~BiFB~6D~&w?ezayHT~Z| z`H$Leg40s`cLsc)L(4Q68pXXy8hoU_Q(3)YM18EdZfGmJZtvf%c>MFyulp72SIB=A{Le7yKf^)$|2F|3$tofM literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_077.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_077.jpg new file mode 100755 index 0000000000000000000000000000000000000000..49c8ca11d1050969775a23c0b11f9ea993e57684 GIT binary patch literal 697 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wP!KSN{9 z-WQ+#GwlApBI5kLyMCcMTOY~3$*$S2UHkr9=6(AQ>)wA`5qjfx-TSq23Hdv}*Jh|> z9sgXvWq&XCwD{RSR#^VAzq!)pQ1`#H4CejsmP*gP{_JP?#f;E9x9dN?Dtfv-_hnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+t2P4)#d2lXU^<@8^ALE&EHpc?mr{9{R*jWzxR9f-&d0R_x@+74PgI& F69C=7^rQd) literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_079.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_079.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bfbd4c2522875ef19758724880194d091377fdcb GIT binary patch literal 702 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vQoY3aJq z<;GTjuim+PUR0j%c3tk4cXjXHu6%Lz!Mq#h=f7{)TFbTkecsQEyW9URU7r49+dok& z5$El{w>&%lQSbftRi^(Ls-M2u^7N-&TKo_0;JgEtDL<#@pWZcR?dQDwnJahi-~DN; Q_4D|h+w)7;9Qc0|06SUwI{*Lx literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_080.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_080.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6ff068c28725ad3d880cfac97255b772312a11a1 GIT binary patch literal 725 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yx@=s!d0 z?AxV2`>TKKzxO_*=Fr>EMj!up2e~W!`~J^5PNcu?=+pd1xoh^X^?WA3cWY?Y`Wf^4 z*IF0+Q_E^xlCnBCe)h93D{UU_e`^}}dE55y(SK*nvSdGX_Oo%xvW!KU?uxFzPrtjH n<(m7S!PxBCe})TLb9Bo7?5=+hni&22%-NSO1HNb-|9=wz8sGzw literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_081.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_081.jpg new file mode 100755 index 0000000000000000000000000000000000000000..dd615c72693c88836cf533e91ff56beba6fe4e92 GIT binary patch literal 877 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&v1DAkKRZ2 ztcR6e7U^7DbF@cy&bq1xU6UVuf3tQ~P5AY-UwMmU&3uDOdZcg1UOaJnyY}vl$M<>` zE?=^G%etp|TX_$?);GzS^=&D)(%T;0lRvBLwZ4Al*=9O_%hDygc5gm^qGIx^!fz7$ zt2i^?EzjR~eAbWrgYh5E*;(~j^NLw+{m-DV>HbN}$)|hw#m(K^^@Y#i@NkEmslaAf|_v&r@x9sy%0^bI$u515)696XfTr&Uw literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_082.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_082.jpg new file mode 100755 index 0000000000000000000000000000000000000000..0c283825d48b76839114b94fa2408340b0a56f69 GIT binary patch literal 743 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z3x!w=Q> zhx`Rz?($pt_;1-gZA`U|EnLrebJ-S*kickP_S+qaJcR*GaX z1lYDlFJtrxy|Fv<$lFz$W9rK`Pg!HK&Sz8Z?nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+ys0*2$ZD zX;)~Ps@vt=@(LDDhOMRE!s6TCe``IUFhQd$HJ=d@OXW-bM zQqNqYwY{%wqi=oqE%W#+FO{7Bcg?fDOFZ@n3=|Dzci6-A+b6A7>`uYOpZh=Aa7pH_ z)#{H|ejeW*&#Kgu?<=!6$p60y02);l>i_@% literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_084.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_084.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d08ac7b8500cb920d6760bd5c88ea1f7857b5991 GIT binary patch literal 690 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wPw_NR4U zfA04x|Gi)TwC~T^fA7D$ylr~^_ti&i4fk99xnF*7_EY(H{~5LhRpx%5{UOTC{N7&; zhOqm-PbJGudCqUo);7Aly}tbEf(4I@{=VI}#r&snP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vQl-}x7( z%~lruz5n}F^WObcvp+5WK5bvXuZ5=;=imF!&~S0b->W~%>#Js+k$?7cN!}M@@!wZ? z%;mrDeR;e8!{7VgR nr(XZMQ{Dc3RdBS%?ee@V`}3y*KkxnnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v2qp-*ZP zm)|^Hy6voDvW7>*zH2%m&zXNO?UkziaDB_R9ody{Zh6m?t3H-6uV~}zbJhG==dZ5G zkMrDj(dgzLUHM)? z)q9z|PQ>%9$@Bb8Kk)6?_CCKdKVOA6EAKzU#V0w_GR+!}%zIEGx%NEQkJI5F;yc#7 z+mdN_xH9n*=eNE!hP&DA%kS-}InAt&*H5|ILi*!5yR0w$qP3g; zGx%P-bUknP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+u!NW&ekN z@Bhv!pS%58+0W{Caa#Q|BDei#c)U8Y&fs^q9e-zQH>4C-0C?%(o9TPqeD?YW$( zUaPx(vE78o{Vn?cY=fN5j{OY(_*^?Ad4lHKGSI``b;rV##JcmDEL_Rd?Vx3c8A(Dw7nd8TjTCD+Z?9W&A|8D{S&puZG literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_088.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_088.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e211d21bbb880e1c530c05ff98f092097c97b647 GIT binary patch literal 702 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+Y^wZlv zFPF34-u*PI{NBIszpvE1{u90bR@TpFRWB@3|1-?Xe(7BMe)smvx$@ON%FWlBxBQ%* zwf+07C9C_wc&`^-uD|;!mA9>+HF?HTKHAB@1$2?7#b;p=|b+`s!!z{qC68 P+&2z5)9tZ4;{QzmFPHma literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_089.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_089.jpg new file mode 100755 index 0000000000000000000000000000000000000000..00c4730a92510908a20044612a83046d64ae7b30 GIT binary patch literal 693 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xN1y#DUW z#qqzNtv)~>-T>4yY=6*Qe(H=HtwnFi=X_X?yL0n?PvCP2Ty;Wd-vakW!ukgt^58vRPDt7 Fn*ca5@~Z#< literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_090.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_090.jpg new file mode 100755 index 0000000000000000000000000000000000000000..7203f103b26ee275ad9bc50851b654c9dead6e03 GIT binary patch literal 947 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yC1UbMb+ z+xpxsxBF!)rDskr{`H@sBK*v@dg(1E6T^I+Y!|OglYbmi+TR~#yK2?8rA)icKYG5t zv?ESz?VCsExAbqy`tE-5QpN3>o{RO>KW3XwSMM=9`T4}E@cld2PcPNK}<^*qVTPp+GKM_Y5+ojc_FpP@uvTc*Um`nu?^EgQaHyKZkY)mLtLp!(tH zqmxpaJRjd?-u`}u@cw_1>*en)+`})k?OWB9@JqMu*eUG2v#+3EJ&)td{a@irBhTdN znYvtE*7Z2#E{}1g4QJx{Uk5LI{2b=jzwBsgw(8z16C&?87k_KpcDL!M5xe?(=2;?1 NyJX^S)t>)<69D(*aE1T? literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_091.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_091.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f57baa9cf40d89ac1558885965bbb7b0dc338327 GIT binary patch literal 959 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y&5I=t!X zT)kPTeJmc%=EX0pHiz1J88fZ%E!4R#7yn+)RZrRCWn+|gWwGehJ)SbY)(7I;KYb9b zICwlJIDgH(*Uy{WE1QDjQEOubk&macK3O^z!RW zJ7c50yG}>!*t~gjv{)Dao!C2O$7g(s*uH$7_NHv%<-W?d@3_jW?>Bpw$yusW!hCJ@ zJs%s#{K9SbBBzGFJ#)M0?T&;Nx#bI%pL_I0b;;>Tweudm&fY$G@5H6k(r%<2_hZjr zYaX?+>)*A9Qn{DRqEuf#GY`5`&#}(V*88n=Z)>fE8sHT$>dug!T9y?ooJ2pz-cr^}?vo_wu38{MgI^7YfQ z_(}e|rRL~G^F;5oT|GA<<-@-DrhE7FD(~4>vi?u*c^&(y#rxDgn!f8?zU_A8+so(N bdfaYKoKWC-+$lRVa`l{#OVxh*|GxnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wss-~RHf zyu0t+d2UC)mp?XZzty|nYlHO6*4^KKr*7)ct>@nd?mxWy$G)%J0`)Uz|DAhxv)^QS zqxJXRZojqo&ivvZzkj7o4_YG^;k&>3>GHyDzNbISO?jI1_S2tL`wf<@uH2Lx`dRw& z@B3bEy}W7MyG-+qm!G}YalJb4-|PDOCRYQsjrH&SzH;rSa_;@|caIuh^#8vJ0CIB; ALI3~& literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_093.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_093.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6d4c1a522da2d7bd1cd60f30e9b4de3c3add0e9b GIT binary patch literal 806 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vMGKK~8> zfFJ80aoVIlSg%={-v3wc;11y({}hU^?Q{HL|C{5F=XIOPYjUFUN~3kQRW8W z1WOCs*Wa457w-PC?R!*CHnaKZ?{(i^Jt(y-v0gMu<%8WM6M6odFYg~@NmAHQVCFTW9-Tif&lDZLaCHufOkqkb06K5^Zqnhqn1kr#s@mXNOnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+uC*%`W}k z@2yK8S|4OvxpiOaRIkRrk8f>wHu>4_+xu^>xR$)T=+ADug!^6}{g>H#J6}?Xw(f5D z=W}_xQOOdUFFZ+-Js zGbP$&lI^QJk;i9b1Sg(Yz1G#s%r)qF(X-nB49=G#y2&UL#a{c8l@ZYyr z?S=p3r)@UUG3MQWFZ7?>)!C2KTtB=yU8?pvyJGIP?LO(s%CEzA*NfeH{-?C!+dt`D kw|DuQ3mW}4JX-p2%Brwd)2r*xoLaI|;rUJb6aQ}l0KA?vIRF3v literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_095.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_095.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d213fe57cf8654b6c611c746cc832c65ec832847 GIT binary patch literal 918 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+x0-`Gef@ zkF(=Gt*iNK@6>7Ye#@%=3~QfD#9UumVgD`V!~AxAQ}=myx4Q0$ot?My(_`fs$G28p zUAreNV2yy=h6CLP`WyDQ23`9)<pK5{k0P0T*Jc;5dYATG?nqdD-@fbLUZ0qn-kXrS@r#mQnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vQWrq|nl z)P}Vks#*KFez$Y|ZugV_zW?6(Ip_NYz2iUky|vu@y}oVM&ise}8TPHX{rA<$jct$r z1gnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xmrJ@nSu z_d)vqtpDD<`DfLx$3JGy+|4z+Na@f0U;ID9&&j)Z?lgP*b6>CD?alAr{>okPUG47u z>VM3Bk%Dz;sdxXK^*Ckt{C(c-{`Vohg`#_^pHB?6o|Y3X{YYOb`o*Q%X?Lf+`o8O( zweqju*Okpy7O(Q%_bP2>zu&>SroDUQLc>L-+?)8vf99DV&HU51``LZ@T@ttE%j)$~ znb+QKmGW-;&#nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+p#@+8L zcYFV5;Qzzcd-&b@y9=k(@BPofw0^GbF`0U{XZhbUQuFs*s=4z1Ta@qWmw}s>y=rjY yv*kZSRsa4!)+nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+n|IB^g zmsjQA`@L$*+vEQ#-~MN449Wd$e((0%c$4bI+vY#|&#*75_wbLpsQf?N#et`{|2AQG z_MgFS%6)@+p|{`uedW4u{xNTH`EPskEcP^MuX?fjKln2D*UecKTlf8;?;Yv#d;b}# Kmhv6{e-i*GH}cp3 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_100.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_100.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8687873012b3cf425f6865cbfce9125979ffb3f3 GIT binary patch literal 686 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vP7!QFpX zdG6oMJ?r-V-}ck)GlGBY|9InP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;7Ki1uU zXNkt{`+nLt)ir*v+xzM7Yxdt=&vf1PG~e(43`ckMPyV~UZ1F$lPnRRxfA70GcDjJ)7!hBzGs=&e_e6+PyAue-G6^E{J#kR_>b`| literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_102.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_102.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d888f6c2dd370a6d4b31911b7b00040d7af2eaa4 GIT binary patch literal 682 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNajo uegCIy_KrViu1vVsaKAhwe)`{8We>l5=PrK!v)uf&JNIYvvp(+sZvp_<4eQ4M literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_103.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_103.jpg new file mode 100755 index 0000000000000000000000000000000000000000..4ebf13d68173785f8562c0f6f8a3baaf69c864da GIT binary patch literal 703 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+WF?dupSBk} zt^6lHYne0a&+^r{DO{_dYw87jNC=bDCB=f>~8yYh7ZqucJk PPwlR^nwb-1|NkZcME3Nd literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_104.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_104.jpg new file mode 100755 index 0000000000000000000000000000000000000000..b4dc05163ca4ac610b48033dbbd1924288706f07 GIT binary patch literal 698 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z-^zVDy! zT)BI=*!;uA?N9%yru_=sp?>DYUad+C?{Z(yA_pARi$gY`~QeR&FVRMMi?Yh^dp33#pR=qX5|84)> LtSi&%|K9`vh3)kg literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_105.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_105.jpg new file mode 100755 index 0000000000000000000000000000000000000000..4f3c5a18410a2bf3d6b9cd8c204322420ff61f48 GIT binary patch literal 702 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;8kJPrN+;iwO`r%>nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+u31%Iv5A z8LHRT)%?2`$7>aTq?i4On2`JOUcZYEckK+jkuu39S^awE`n_8{_vJqdjry_uAD8Hg z$lE`{59Jr~Ov=Bqq$Bq~!@5Y@{-t4_p_h(3-7WdUw7!=x4^g@?Z3zqju6O8>k|CwHl* zsVbF8#C(_T_q%$zBJOwW#r3necb84}o@JL8y5~fcgI$9CuDeI;)~YWzDYsJ#d|K}Q zs`c0s)!hA+d$pg~-+pxMcI1cr_Jp~qvAZUwPBZ(@5cV(f;G=y_|L*-Pubf~0>~6fk zzZ>%Qv|ICQ`{GWu%r8D!vO9jG zr&8RV+D)3uE`lfSzgCufAh-ARvdg9XKitJ~CD$$4v2~X6lf}tKF77Pyk8fZ2F515A zY<}UAHT!%f=jVRhQc<*|Tym}VTD{{zTYFR6Pj7eqoEZ8bFOOUCpYZM#>#y9O`61}e G|C<1nMT-dl literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_107.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_107.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ef986b7dd195ebeb64281c3f8b8b3d014a61af7c GIT binary patch literal 720 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+x%)!sgod ztJZ%Ej&lBEU%G#9;5zgAs<}IIf3E)g`FGoi@)`db?)_&-Ynz>{C!JkiwK$A-=U%B< zm)TQucSkklbk2USclGD~y#XiooBzIV`0L8;?f)4LWSQkp|9#3T@7E>MNiW=YKl{Bq i`ueTeJC>jRKD+$hitnnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v1-_tkac zM*?;k-L2;d?`;Z6|GoA5^f#9uzn97^GusvWthsn)CjV#MvwPUTSH3gSe(}Eb{-*Rp z{~1~~=3V@wom#lU%;v7sFGZVkb!!j&(Y~Sk_R-ef9?$-r|1fWnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zNfxjUKH zJ|38_<+9N3ePY;l@t;%oKM3_Le|uNC_T7~ChW{D%Zoi*o%x4uhyPtw z_T)c9_TP6`ee2$z{hpQapP^*;zSz}&Y*&gV+kLwF<#t{Jr_T{|u=sPq)TTtruIRt&(%U Uv~Fu+igf*tbyLH&j{m<205f(Jxc~qF literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_110.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_110.jpg new file mode 100755 index 0000000000000000000000000000000000000000..35d542ce6c7e20fa9e2615bbcba94c61012c4d7d GIT binary patch literal 703 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xnY{onVq z=AO>I{b{ZH4&&PQv*z6V&rr2Tt$Lcw8vFK=?w5Xd|316@);H2FcK>W$%LwJ#_j~WI z}&PydC5-oAfrVf^>0#ebq#xgNiJ Q`#%HI-N=29?f>5d0EaO4hyVZp literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_111.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_111.jpg new file mode 100755 index 0000000000000000000000000000000000000000..0ec9641d040fef4385d6b17b314615056aa6b66c GIT binary patch literal 815 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+uiXeeQei ztZC))H;ZEL#~l|;{@43-AOCm3j{AK-p6%IxbpF<~))kxfhzH-z`F-K1klN#yCqy5t zO=kYHR%-j%KiYvO^TofH*YAy=dur2k=if~I?1>xReVqTG?Z@j!%R6l{&2CrJZ%(>X z_gQ#Ht#$a^^(}R2mGu?J*H*Dyd%3ml{k_*eLMwIM@7?}fzu7ZvQdnR6YMFL!-rV}& z=rh{SjMksNwK(T({`7bM8LH;0+3f$eS4;HFn)_x~ONKNtUA fer-v{{U0;S{xf`ixk>Z){qlU@`==W0|K9`vIifaX literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_112.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_112.jpg new file mode 100755 index 0000000000000000000000000000000000000000..530739ab6107cb32cef62c9134e63914cc906c1b GIT binary patch literal 780 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v2q@%zFy z(T`s|=?>f%@u2k9$J@s@pZW7S&g-7|zRR=C#3vuyJ8`!1*Y#eXod4WEylruG$h5PC|pR3=p$1`PjY}f<-M=vt(f0&ll{r$_&`UkqP zU#6}6^zVJH>6%CX8RnJVmASV5)|H>X=7_dW{(IMLzx;(upN^l}a;+yX{?VUTsc~mN w{kps}e|H??ul-t@o3?+fy>}(o{_yuz$3N!g@BVj|Ywi^#a0NBhcM*si- literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_113.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_113.jpg new file mode 100755 index 0000000000000000000000000000000000000000..0537d7f74eee021f38f7fd34ff2ba341da4917b1 GIT binary patch literal 992 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 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_118.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_118.jpg new file mode 100755 index 0000000000000000000000000000000000000000..246d055fd0f1be506769cf9b6badff9074f9edbe GIT binary patch literal 905 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+u1u@%YF9{G;{pYJJ8R zxz(lH9);zu=Jwq3FE;z8sXqU$_&;amuK)W}BlT1M+o~V-kEHLKma0wM>Z^B|Col1* zdPn+%Qx=KuV=HsHL^lTXDTVd^`z#acHF2@JZ|wZY*Z*`c{n7uNHLG=Lk7`}mjw$N4 zzb?Jlr*~WT%I<9{g!v8a{)I>hK8-F2I+ulFqG48su UEAi>}v){8Dw-=|ZssDcy03JD8x&QzG literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_119.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_119.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8d92e15e92180df8506cb82be2e104717c220025 GIT binary patch literal 808 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+shjs?yJi znHP_T*=*jr;#1V#&b9o^{JN!<@*QV49Xnc^YJX}+{TBJ%e{5G@wTXNXn|w6N+JDKd zzZ<_it?pbH_Vdr0gsHM0U&dK&=K6EqqB~-z`IGwO4{S5c^&r4_1j9D&pKJt4%Vd|4~|!PeaT^; z%2m7b+u!_W$ew-b_T{|CT`%@&#MtiJD?im_nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xm+lkNWQ z?LR}yQvT^r&2pPidw*|eO5)Q$tGD0Vt5a|YMkrBx1}{#pCVwD;YzK9$}jQ*URreqDCQ z@b}v9)^GnQN6+JIyZzfUZ)sXs>%P$c3{sQJtF80O_Q`!%ySz>Dckb)T?a}3_`c%h;z0-B@+*@Mh%T+JZIp7C dpURWnu-7WMbj{wo`^^e|OZwib-hbl%O#mXYG?oAW literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_121.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_121.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e7a37724f9b0cf63c7cadbc4dea6db632f418c10 GIT binary patch literal 832 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yHk@888) z>K!)9i|@Iv)tg*s(y{rr&wU%;oy^ZauQ&dXe|#<9>8OvXM?N_&c{Q!7_0V~tZC7^p zpZU+w-y+MI|48)He})f`8zvTL)X+MJ`Bs}&96!z7=eqP@-U)09=qjNz17GKqUv%fEHomxD< z>iN~lW%s9-%Ei6Ce`@F4NV#jmZ67Q&t9?`coO(UwKSSlp+jXz?Pu+j$n?E`4?peRz yAGbYy{QGp|{4kGI!A0Bdp1!%_^ERVR|Ex3bAGv?`&x_DI`>S7A1$bZie-i*#K0}NE literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_122.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_122.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6a57fc8f78953560fdbe6fd99f88f2a8a8791cdf GIT binary patch literal 704 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vQokNr2_ zUAdOL`|08zb>AOcshod!XWi6K&o3@P3h zs_fFX?LWh#-&@SAa__#_a`*6$y0m{^&CBk8-@n&q%OsV@dC&fcW|;;4XJ8U}dhhkl S@bXW~KJU)Iw?el6|4jhp`u?5( literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_123.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_123.jpg new file mode 100755 index 0000000000000000000000000000000000000000..b941523a214a558ffbb2c4b00a87fdff876229ab GIT binary patch literal 741 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v2pNxj|s z|Aunwe|Y<|`s&)Hb@`uv2AB0e`n`AcXXW2}51OQ%P3t+cZ|c&A_QKioSg(rxXK>y( z=~(nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v0;c-s9c zvv@< literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_125.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_125.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d2e479e0cd3bca7839f85f4c12572b5dff6207ec GIT binary patch literal 950 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+s*0q{eV! zc+sH?OL!uj?z9~*d>vyqy|j4gS(BhGK~{zlm-Ec41+w4hdWr064V@Yx*SlRl>eGG6 z3bxZBlh1}WiN(*>K3aKY^R12FvtHH4Y+7MjRVC+Kx|)B}&!A1K?CR>~{AEpBGco!w z*X`}M^(>1%dlc+^`IGC~$MWX)COhgcM&>EqF>iaGvEDddGCK2C%Qd;8V;}3+x&`j7 z+xq(Qu}eo@i=}J`)y(VPsq^)$-J`q9J*Pb^7nF!|KYgs;YI)&GhugDCBd3ZN#_mbl zRKx#pW{vIQ8@KMiogCQ2@$b^Vxbuc5Bo(VuSDVN5x&CK}S30)4JLl!@JJ+92y?5rf zmdIoC#dpqs4E?(G=x)0k$~P};dQxlgK7RgxhHdPfCa*g>Ott|Uy Q_0c3$OV2ZQFaQ6W0BetQ`v3p{ literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_126.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_126.jpg new file mode 100755 index 0000000000000000000000000000000000000000..32fc518ea69264115c34a133af80ca7f3d06cea5 GIT binary patch literal 770 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z3%%HPjs zZ_h**rv1~pw>f`mcK@ZcyW5MyBa@cxcV6zQy6}f=jLUMhCtuAJf4+LOHgs!nl;GOn z{^aR1w^iyjE&TRw-D%(7-7$VmS6{{R|52}g%>8ux)}Ki}mD_p0C!a0x3tY}uX)Ey1 zYiZT0xvFI+*FLtc?^@^1fBMt)Jul=rN_frg+1p)zd+F`d=lL(Aw%7C4SeJ4uXBHge h|L8nL`^(XqKcB0-!aV0E`nPTjYQ1x*cB}pWn*h)h74ZN7 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_127.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_127.jpg new file mode 100755 index 0000000000000000000000000000000000000000..c5f71cc9c7a992b339135fbbe4610766179b52d3 GIT binary patch literal 749 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNme)p%p zkN>`!JpK3n>c6Y{<=-29zwP#L`_sF-_AFk>mp^s?x2*gRZ*OnExa;z^{|v%Lmm}MM zTW3W{@Yeg1lI-DCHU(|Xq&-*-4< z+YIB}zjvA~*ZsPo<0gA+jnq$>EgwZ*z2;O-e!tbS;6H=@z1#N|-`RiY?B{y1S7lHB OGq9~wURrMd|0VzzNEDF( literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_128.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_128.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d899e3d515464bd99e93046dd88a762b22ad3828 GIT binary patch literal 942 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zqpn>|O$ zCDYZt!69uIC;8ZTsu~Gfx#`bX0uXmwJYm zy7`IO+pdW!*dA%~s}-bm8yJQ7rSKItB0|5ncS=yOHT0i&H1wS^yx~wi-lVM z-i61$R;l?p!)A5b#KVx;$$z!S#*85nIstIsCA585?x+v(j~YL|R_wlE^O>+H06 z{j;wB8Dh7;Yd&Z3I@oWz(q>N2678)IKJQsE`^l%%$0n72Rel{BWh~OW>v7K7&n**+ z3a>BU8<*?hE%k0L1qFCcS){wt1TB=Q$pN-VUC*Hy;+x`DYpwHI=hy H{{Nc*NZ@S` literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_129.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_129.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3508872c04044c38de89c5eae6618e44152ac3d4 GIT binary patch literal 997 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+x-fa?$2V z*WVg!$q7k%7_L}x-sHxg6SGra>l~XLjxAJ9jvzP+3&_w&e4&+ST7o`9dn@ymFa%T>R#>Lly77*Pph&*QqR5 z;Qzh&!qrZj-#7P{Tt3#xJTuDdM9{|P?WS87+}QhXa&2;@`dL0H@3KQ2kHQ@I<*qJ$ zbh@mb_twn_w@a}$6BqurKc^b!VfUwO<&-&M%Ve&X*=j#>fAe|Ok9g0CCZ78rDqNHc zx)kjzZyKfUAApB3-ISFJ10wcGmWu)(ZL%U0aK@oDkH+tTZ| z>VCa!?4EatW#-z)$7ek#oWH#4rM_v#+mgF{v6m0CF8z|T`R$_sOP1;~(--p$en_u+ zdEI;2(WJ|n#mC-VpSH2>(_Oy;#}^#$nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;9-}_VR z_xt^42-#m*_Mf42nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+w~p$-mEe zaaZN%el|9L81iIx&FuR2zq7LLTGwyd`bge0E$(x7&6)e!=BDR=9Ik$;{nY%=R=I@y zN1_W=58VE2T)#W!KSR$tvy8QWv{EEq&-!X~v?f>eS)WeYjI4P*SAGY?&zf~TUjKAl zvifm-F8fp4C#`C|6Pb|Jy3e{I{$Jg?>TOZXapqf>|2gsN{u`U~{~Diums@h3XTJHp z{|s3h{vGF5Q22-h037*8dExUmup<{{4Dd{@#BJt{Bx+d^mb^Psjf3-2V*v lzxGGHI`rt}h4ox>PP^?l*7{>TD{Q$&ZCupy%P0Qd1OR4=H@E-* literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_132.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_132.jpg new file mode 100755 index 0000000000000000000000000000000000000000..b34a2f0b4264e637260a3ff7e4866053b69675fe GIT binary patch literal 849 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wP!j@kOt zfgkRdKl`#g_n+FGErr|P=jBhS&3Qa2vcyt-O1!o7U`gMwtkyw-)RmBw$@dOuEY z-Llt7+VZQ$cW(uM^D`1JCuK+b|5*62H|XQq+|mw}sdeA3{S5!OenRxa`K@1GJg&a+ znP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y^y?ti(v zi=F=TZr$HD=j`X2wcGQf^4{yzIG dZo7MX>a-;jBkQ~KSFE@#do?uk-qVQxHvzn!0>J

nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+Uq2JH? z?)Q9C?%6+Ic0WtJ{_dUK)p_d$zTL=`o;ka?{=n)J|7>Dqx0QV~e}Bp7VSQtD_&W2` z-}j}(pW0*pt?%lB%ZoRcrQUriX1(LFP56Z;T0ef(+n@OO**!<+U;NCsx3}s4_S)ZT z-SYds;lH=$XY9@H|9&<5nP}{p)w_S+Uj4j3qg-cq{oY&qqW`Ye>;2Erp}4_wX5CpK zOV|Gl)7ovgesxAy8=K!-Kex^*Q@`}_(y4#8eopY$`6{pG|2#hQa9G5b`)M`*ic4GS IR{XyS0LH;7;Q#;t literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_135.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_135.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f0c27c8ead273e8dde88619ff4aacf44f756efcc GIT binary patch literal 869 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+tW~lrweL z_P@_hojz4kaekfMR@uXq0w;xy^CoT==8yRK;A&`Q?lsBithc#KXUp#i?0+4$Y}PHc z{NY(nq^NPrOrh7WAtP842p05quwYBS!{pLTb^S7r(_7xrY zP%m|FX8Got`-kSW7<^T}w&IS{bm?ijYd)SZ+WT>W_5#hzD@^BS=Wks&vj`|&zW&}`+lD*O?$T3|GxnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&tM|`_>ny4 zi|_tVO%J*^s2X?j!85`m;d2jS~vUfkELCwU;2G7+x*qdCUe@J z-PT8fvMv_oR@nxAQGfHAry#>TyxaVizTRS&X{s@~T%Mx$vL|utI(aW`O)L%G6)8RS zPJ!Xy?8E;V(xuP3oqy!EGF@k0>dMRiuGE(~xhu;UurCk%D*7sF+fJGP3@_gAobhLW z`t9$P@4dz5WS@HX{A^&?6k(4a{)cvb{!x7-tlaz4kx6ym_dT)AzGzdpCOW3ZcGs0P z=CQ6^(>tZ--^)91_w{kE!tdSN&40&Tt#Ab8QR)!RjY6QYriDFd45;ZjaQSGevUUeGd(R+e8%I+ z{mM6#xxR2NoBKFl%e1$rwdIoMv)uEx?pYu1-`rbjeP24(aoK-{Wtrj|i}^0}XPhYV zu3EW1>tpJ=#i^xF^I~^zTeJGmx+)pIpX;w^JzAM0zjd+p%B=opRXnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNmM*Z&Z zD^GvUezxrGe};yw()+&MfAmjmy};X?a{0TzE*`#I@$daV+oP7Vf7I^{=~QfcWWD0* zgVc%A&+e_AHF1f?e(jpGe@s8_fAjg{uhX7=5?f!ty;pwf%-KoHZ3`-oKa5X^d?og) zcTIU%x!@f~rT5`+!J=={EOUMKtylRPE4$s|!;Te?R({r%Pda`#e)flj`@Wyr9X0#A WUHqf}3>Px)l-E98uPWRA|0V!-{}{9Y literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_138.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_138.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5a0024e3a2f09889c29a17ac6c9021c22fa64105 GIT binary patch literal 991 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&v0Ybz4P8} zo=N#%uJvr_^ZENZICGy#qt300ZJYb2IqsfnD{UGlFA#S(#`9aP9rw~n#!okE%0=2X zzK^-PuDvi@^~v|wGUl9mXD|F`5PW_4_THM37bjm`{Ow{G68$vitFQhe*QH0SziaD6 z1XYE7YhUSEzar{nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+j*?)#d zKQm9O=kI>GZSkGepVr+fpCMSkXVD(Bb=AuIZnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z+o(eB*% z-G5&d{k=c?-R1g^R~Hxlllb=gdRu=^v0?4*@TF${v!CYgcE1z<-nd@WwBSF3+51B? zE@<=K*FST=;@xtc`Nqa|qH+(n=e?i(drRIw<<9|zXAYO&yX*EOGnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+x1;e+*XybHFtyWxANQDlQw(`k=w)nI)1I@?c_s~a_(J9`(5|Ceb%j) z6U$t`ol!pAcl7%D>!MkiOSa#6ZEWnZ+yA|ttL?UFk3X%MZ7pecm3zsAh|L=_1Ct|J zI;^+*?)j-m~d(SzPow(W+mJ2)P4M_ zduiEk-Tw?XANyOsS*@I#k#o&xen*aQtjMj1>WX(t8P^K-EM0BL!@fY_THI2_+xs}) zMU~~TK4z4fc!!5){#sVeZ^jR!GjmgJTt3$PFWNZuM&Irtt6HsV^VJsXT-L6g_37l| zyZI~gB+ol7`NI2k)wk`_s-|Q!$9fl5n(PZ{j6ONhJ#e#yber+}C@CFtvo+VU&1YOY ayXnDk`9C$nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z->#y|Gu zm*(!UKehVb$t<(~3|l`3?*6^zzW(Vr-gi|C_TRhvX{~(yvwxz?3qKp1U(C4u>0QnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zTU)kixf zn*Geyi!qsh$UjeO?G>eK_e7f{lv84l&McR|w$0?mJ2^|GF6m53>0*_$+Y4-ei1Hq3 zQk@tYotbBzp7pWGZt5@P71y4h)6mSCc;@fCOW*FL&AVRo?%}sLIrAQiyeLlDaGKd& zP5Qez&*7)G92PH+Z_SOqards9l>SLPT6y;2e+K1qC9_Vs-u``L`(4GH za^2pY>mskFeO%7BJY$#bvB`P+iq@FD{FI;e_cPzt$=|HouWWa%eeTc|QM=gs=Npbk zyZWW#RIlziwPwvlvupMTmdhH)*v-!_E|ty=3yE8wuU1~)%U2r_+nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+tpi;&Mnt z(!9*DJ7%BG{%6qTtF8`va>?av5wjNjXT zgjj7`G3l`Cn&>?Fyp!`pj|faY#?Gt~?wI|JwLc}iSM~6pM#(-gyEV0|=55T&PmXS# zWRV*>muXGHH0C~Qt$)jQs(i6tFgcx{ckP*=m^jnxGfRsl;x#J;d#=7Uk1NdxVw;wG zCOYNxzYY4#eTR0;_?rEjQ?0AI?RUz=sd)!Gn3ol3J9}T{y>wjY_|v1?pQSy|cz?F! z%B;+mjFUO#0zYQzD^5&kof=q|8R{nSq=)Bn@-@|6p})0G=B>D0b9zmB-;Su~|E|g& wDN^0FS*zw=cH!yD?VOMS1?h3s-)FM57Cg&?p(`TnL-nWWnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNm=k2Zi zTHlww3(Z~a`=24RF2Aa1gX^I`Xa8NTcpg!7_H*E|_q$eaYd!b&etE9+g851OQ?{_L%?x literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_146.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_146.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f2f049b5941d6c30afe33e6127a147df2c7e6773 GIT binary patch literal 711 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;9{5`LC zU*2k7_@7~3y>Z}<{|w?EOQIwviodTpzO?4(`5g0{tp2CJcW>KXRqVd`-S)FDeeZ7n zd;fiq#>^S!XHI|mwru! Z$obD8Z2pIB*8cKmX+P`t1{wdq2>_d6{UHDV literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_147.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_147.jpg new file mode 100755 index 0000000000000000000000000000000000000000..06fc73884077cf1583fad46f1b1786cd5b380ebe GIT binary patch literal 817 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+wNeQ*ht= zd;b~IW^ey}cK6>~#mPVRt1eq7{_fAte^MWFO4|dgZ($q%I6gY7e`s5M#@-zf;TH>hEB@{L_&NGoo)|yZ zi`>fmXF1bemmS#myI=Ip!=gQYy2Z!L`pXwtWIxupP_wCgdg^N1hei93ey*wx4sG6k z=Jww5@a7voP9Hbh_Fd?-*}T)|r}7^8eXj6MW7pn?_Wg%G2lRVhdlPl<;SxdP+Jh30 hC%^H{4A)rAm+luhcl+k+@6@JQ32&MblYi&`O#m5%IPCxc literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_148.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_148.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e094d962c1aeadf3f2f48aa3feedd3864a50327b GIT binary patch literal 966 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yVTzboqB zo=w`XF8SQAoEW;X=X2k&O;4_?HramnI+hhI!CUu*g?(Em z9`=#>_Ss7P+fvpRN`If|X2`6xJYaE{e{IUi^>JC#!`4j~yJU9vw@QG##1jTf)2~}r z9Dn5AuUEdC~w&Dk+r|$>MYBYGe(s~B9gC`Jns6@9&q8_wcO516$9U* iSI1JHSIDmZHfOQy*Hc`zRlnv-cQ5@~wP!E?|C<0Ncz$01 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_149.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_149.jpg new file mode 100755 index 0000000000000000000000000000000000000000..26ab8d728bb711f27202e5b06e162a7b64bd4355 GIT binary patch literal 1002 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&(MBc{L-@K z75N#De>=T#kKeb-Qf(Li&GK(8lOOK=y0&ep*?YeDQxm-|oAEB`{j@rv?CW~NYwPA8 zxmA-h*`zB;$L7U{o~p;&CDz4xhy3O}K3V29>p3CwRLLiEHrjrS-{H^8^+i@{w($ea z@RBUe!^K~_`~}>f9@h!dnSH%2u7|%cSifV@zi(H){@nf{|2s7PkLBgG56?TKo`-#S z+VanL>!04)vsK?L|9#5e>w9gOhhL{N{4e>t6h> zlDK0V@mkyN%m;aasQ(P9H`d6fr)`RKpDkWm_Tcf2S&#oDnoPQJ*D-r%`u4-lI=M$~ zhZpNvGtFOHW!|e(cagV8F6zW-&1Y_hG?*v3*QD*RoK?EDPj!1neYvtj^n?}5S!(6W zgU{B@WG|^JuQomvb??#PfZx%z>)&iI?p2-XV>d1@2IwYx8hQQUghER_p-NF`SaeI8n5|YGU?Nk#GUT% SzUvkEmX++hes<~k|2F{{^Ntq) literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_150.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_150.jpg new file mode 100755 index 0000000000000000000000000000000000000000..02ca417fc714dfad7966ad3248488e734b0a936d GIT binary patch literal 900 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yL1UPixA z%B1VI;WO6Y&%&40_xi5Lj!&57A-FGoPn4aQP1VF-;WJM@R@r*RrgcyJ=A)k_%XzlT zuKG6rafYd``3bkqNa^V@!q*q9`x+W`{IWm0eb+77ww0^x)-F7@!DQ9zYq3W}kH7LQ z{IzX*ZsG6Sf1N`A-ssS0&iZ=NcD2*}Bh#+^vfXt$|LKvp%KS$Dd%}0BU)w1!lzr)L z=9_aH*KAI7(q`VV;jw7lRo5(68|^u3`dbozG_Je#=k%(Wx3{;yPyc!KwSJGB^5t@! zs41)XLvQiDdY*joou2gHSWolzJp0}87ORixht;xQE!@=m@NDu0#UBqK*qp+FlvIAG&HQjw&?!#v@OO^!2dD(|jKK%Jz_clCNtn~M)d;9g*=By5$ PwnonP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vQZ%JQ|4uxn?UYyl|0V$3AOM;G literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_152.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_152.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9cfa47a68b3a2b6f898dbe06c9274048fc385a97 GIT binary patch literal 1043 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+y5PVTDr{+xAzVp?@AHUqECm;W}vEugGh^^Ok-zSEZ-EIBp|Ks|( ze|kS!SGj(y_P$(WpU<{1eMQZ!*2DfAZYmo@oZ{=D$n#CU zZqC-zFWyXZ+-e3?2B-GuDu32dEqA@8cinE*-w7$xgW9e~eq{aZspY;$y6xu^g#<(P zd3$)SUzV!xTXZd7f6MmS=bBDVJ~jKt&7XDqm)52K&_6y;{e$b5%q3?|i=NJ(elDg> z`%~|c&&RjcDt_=kc5C(@m(3gY&eB|TCAaJJ->;?Y%rENVvL6^)n!2A2j5;0sHuKq+ NS%Fi3ZnOV?69B?7ui5|r literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_153.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_153.jpg new file mode 100755 index 0000000000000000000000000000000000000000..0a677318dfbe1d4f1cfd52cb40b0e2e1490ef0a9 GIT binary patch literal 702 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;AX}$aU zr(b2B{d+a{-juty_obyRTlJqoXx*FZ9c68A-|h@Q9e1Uk@BW|awem-H*L}KN_gMez z=YUA%{M+C6r7b&g^!C%=tFO&Ez5VH}{r8T_|9ByCLiSVbmEU)7%{sgJea)4E{|x3& Q_G+G;68~nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+v9(_Uf{H zrH4zJ^k+_TyQQpq{i#i|%(ZK?dETZM+|T+{-=yBodRw;P4S&@6>pCghx9*rKT2@)F zz3Jlwhv(OCt-SARyXNAZ-2S$EVt)LmkLSlc7yY)*>v+$D?`~he%~rj-r>rnywb!RY zneOSw*L^T(z4y72{<}X< ze_okq{C3Mnx0UNM!=rr4zWZFnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yUq{=Glu z!BOdV?%xwJ|DGkgyIgzy+1*`#p32{yvm)E){b%!gEB-wDy?g(IkZZ}?i?;vaTAX(O z%W9)Sx8}6jYQaTsf395n_x!`#e?ryXPcPbjYHzm6uGv$|{+!wWLD|`DcDeq&mHVEb WeY)!T=M^cppVe$#^e*k<|C;~?N&dh9 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_156.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_156.jpg new file mode 100755 index 0000000000000000000000000000000000000000..809d5f9feec5e6beebdd60cfd719673e3c9fe167 GIT binary patch literal 699 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&(L=_>(Fr* z!#`UKlSO|S{@B0J&%1E@-&M;C<)?DjS8d(4HgHFO-P`+Ri_%>!BVWa|?u(!Oaiz`K zseY1d_ou%PYhAl?M}P75XSF^=99z)yiR?Zr*meZ}fBi+rVu%qyI+z*?)Is MM&PVB_5W`I0Q2hf7ytkO literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_157.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_157.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8c852e22c3dd3566304b0d103ca9e5afa756b5fc GIT binary patch literal 834 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z@}?E0U- zue`T@`uo)VH`l68NdLZfZ>rK6yVtq5|GxUjzjEWLKUuT?>HfW3IeVjtz5m`g`GqIS z^ZsVvvNQ6qf5^Bee%G;x!v74l;jJ$|85#Y#J#F80h4PlY_0FH=^qam-{PNd-so3N4 zdz0pDXN-QIyT14Kqwn3S@v~!g#@@es;NO%Nb-ERsi`M^95wEVlC;u>hc5NB=V*6#` zEXlg{+46s8|LI?}&m=zg!`Z#Nw*PuP;b`p?;W+PQ>(6YRz5K`I(2sJ{WqvLFvc31& zZue*P91rBLgdLkL|Ia#pSxVr4hP0k<&#wH-ejMe`Ju~Exm*=iB-?i&={r}$t0P5L7 AHvj+t literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_158.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_158.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5ef80f72cf66773d548d1ee23a6d883d25bc7dfa GIT binary patch literal 702 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vP3#y|a; zzyDl$dtdMV%=){peIH(bwo?4*@3lKuKkKjMO}(*u_gUkNx-uCD0-&bbyALUP*dfH?1e+IeRe|!Vq$sgIh_vNbH`@74R QpY_X8{}{Aes`LL%0EbZg+yDRo literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_159.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_159.jpg new file mode 100755 index 0000000000000000000000000000000000000000..2fe485ffe66a338145249475c0748db784f0183d GIT binary patch literal 880 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&!C*rl_~x7 zPI%R{lR8yA{aIxTj$M;@bX#Qh^|@=OCtts|r0?FTLzYUew|1A?+^+j(d*hnz(}Po| zE^4iN&$otMzO^dmx^24jCh6|_$A2%|yLo-&1JD^9LbirRGh_`iwV z5*yAKPkv_|u5O>aHz<}@ZTm#EyU$#?{@%D4ZIgWc!c|M1x~nA@txXSk>^8U~Gta;< v;%(uI)1OX%zy8cRe2$#9vu{ZEvt79twLWW`%g1M(y}EJN!qk%U|8D{S47g0N literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_160.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_160.jpg new file mode 100755 index 0000000000000000000000000000000000000000..072cfc6a5e7f2012d2568a4d29b58be2ce542e95 GIT binary patch literal 701 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vP4LHzFB z`QI~7&;K62?^XZ&N4fi^yuJOOp*w%wtB?FS6C?gJh~NDhHMxKHAM3i$A=>lztoP9v(~Y6E9URIy&{wSZt030 OE5rZJYO|LAe-i)%^!8-{ literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_161.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_161.jpg new file mode 100755 index 0000000000000000000000000000000000000000..cd66e837a670cdd14afb5f8af62e191d8728cbcb GIT binary patch literal 688 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z->%zdBr z?*E;&_}2VKSKi*&d%xTF`Fq_8_f?h!_qDd&k20^>U!Kdg|NB|X+39D_e!5c1aC`6m zJ$qNKxo=#v<^7KRr)J%V-97umT8RmTe|$ez1y9{pbH8f#@$YrJGk$Kn^2+%CO#nOc B^7H@z literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_162.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_162.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6af87e8cbf3eba345f7cc4a72a3ac7d92f53d4fe GIT binary patch literal 853 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xM}kJt0L z)XBcj&sJZ{{np(P{60TnX}wJN^FH$n|IU6pWtjWLw%UEW*ss_*@#QJW_Q5Crm0rr+ zIDhva-PkGfIfD*AJpb);jQMS)8=qYNNJ}&}emPrQRihf6U4P&7cU*YbR4*@+vcCC6 z_UG@Z^(jTXnz~W?N?!KGlk+uK*WA~?yEd0EVb;;^?RSM1*SVW^Z+Z8hA#Hu;=h}In z#Q%v-sJHr4G%_?%LO7eY|H$z{#tf zl2OmzMA%*a6Z&iy-~3G7OLtAOE^o6-i}(7%Yvw=wect-(MQcnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;4Ir$@3 z@^0nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+u8g{#J8* z_o2_3+p2uR%r~vOvgfmTNA1rAQDU+w?j1OR^L8>s*Q literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_165.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_165.jpg new file mode 100755 index 0000000000000000000000000000000000000000..084c64ae965ce393105aef381661cdaac3d5251f GIT binary patch literal 831 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vK1yT#kD zEcqRBnnz$`=Jx^vhlA_4+A;p98S^W3zzWJu^hyT7mH1|`@?bVO{7uoUtV1H;`Fa0MgbVvW&uqvC(f}}~tpH5%4 zUj1(EiPc-H%d$Sk-#q?sPaOA$GqbinssCtp&AwLqtF^UmwYuKw{@rowQagSftu^bL v|E%Dl#&4}m+nZTt_U}zi)AAqvto?np_O|5y_J6E?k^J{kqdxUL{(lny>GnEu literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_166.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_166.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6554740908d2fcdf66ea492a69d0dc9384f2db93 GIT binary patch literal 732 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&ybzPT7PrZ zr!4m0_w|>iZvF7@Yxt}WdB5*}(E4@r%%4y5WWSk7{iv^gw(LJcM$SL2!`c1cR_@QT z-oH1-Xzs;Vmk-}Ko$I0gF%M`$b7{f;50m*HWvy55WWW1ad)m^9eao*pYt8>O_xra^ udEXXpP4S;yT6zDEN@IQ3tb1xk+m7bX{<}`QFQQ}d<>gcSyhD@!-vj^^?g*&> literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_167.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_167.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ef2d248fed2d89cea9b7add110decf92fbd477ce GIT binary patch literal 955 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+x1Iae2qm zt7@13D5maQXDa!)D|g3>vkm*Beognd^x)!_-QL`#A=|fgCiaH+i6re)_#n1qpZVVv zUqp5PwTqsap7Zv!NyqY({sucY2O3aT<};LE4`Tcpy)%f`VIRJ?zR^`xlX?& zcge0yp4}?XOjVx0yFP7e@4Vx_kCv8gwX6Q2_{hVgzVDx;`G!5kcWfrOzu4W#ZXdjD zzvI+>QGa%SOj~N-`XsmL>MUEYv#m!w_LnKN$kcj1+wWK>^2cM-kLeF&`HzGZ<$2#u zDR+Cgc(O!-`^NR_&wsd-Cwl2}{=Dby(?a*8`o7Vod10eHQN)GzxO{w XZSdk<9{V4}zJ6*M<-YaQ`TsWoDM*56 literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_168.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_168.jpg new file mode 100755 index 0000000000000000000000000000000000000000..fda563651a4b4df77def0ea1aa1067b86263f7dc GIT binary patch literal 1043 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+t3@k$AVb zZ=}ucrJ13{TdTHK=*+X4A97XMEv-FgzV>=0C(DED*?-9Yj*W=weqG;T9&Thl?alT{ zdWjF_iIkrFzCPzdDX(()r&3?FSGOMB*_eArVDEnhtID?Ec+TK^QSy<~(kiN^tl6%U z6{T@?YsY)Z)X3QWlQ;ci9_^ejXtK@so3_Qb)ta$Ad)E1Rvftb5efZbZ-7i1B3Ou%* zQ`w^_Y(iya9LJ+Q@sGrhdgrsLPO~j+>7Jhs7>3Q>arPq_p($$&oFUyjy?*41-eq|D;`fu4|s_|bYOV!qMy<4*J z-?d4P?tMF6A{V`9k;Q?}hI2|(zJ6V2_u6s)hRwfa&mKQ3_3xF$hm_D);*-1n^%eBY zTlM@w$g6#Q$6uPinZ4}vntx~aiBDbF z$`t4Ix`nJ+dFp!8AJ)Hnb?dlltT%qh@365iUlILst+H!nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+zcsN7mU! zN7M6nnoW^^^L*ktEm{7ZweG%Q+|KnGAI=}R@-uyI_?aBNqd!@z)m#6t zXD0GwZCJJ8mDs+bZP^m_yzy85idoeClDBzb&-S(Zbp5?;SKgF8F2A-f_U|$q?nnNt z_dWHNs&2ZuIj1q_`OO`rKPOwBt=pFQPkQ^OvQ4X2eZL*A_3xe>yZCw)QO9EK7Rar>&si)#HQnK#r`ww%iXW_?&-EZ)|%_TZC~vF z(DNtg$CS5)qF3jwUUzau)XClT@9r6Rd}WO>>x+1|-7dQWWI7xef2 zchB{bf0r-ZAK&`xa`fG3x3ip%-&XWbKQD1U=la^LsI9v^pKibVZq;$^IQNf>kKU@0 n6TY%GUvEK#o>Iw~?nyi4+SjK0TAX;j&@X6CRBZUO`u{fp9`A{_ literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_170.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_170.jpg new file mode 100755 index 0000000000000000000000000000000000000000..271c69d2a1348a6075f5e1548cf4ad47d7dfaf7a GIT binary patch literal 701 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z-=_Wumk zxo&65-u?UTWtYF#*(18_-Q4MWYkq!VG16T1R^eyZlF9P=|C+8!n}1k$>mp;}#y`5- z?=7CV{m+>z*K*I?U-qicfAZ7(Sqr6ZNH+gD`@QaK_{44N@7|ub<=NzCxBoLRnez0M P{e3_C_tk~!|8D{Sp0D@B literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_171.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_171.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a52ac34ccfc1019709b2e3111ae3238987781291 GIT binary patch literal 755 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+t1sZr{Hv zm-3W)w`(WMw-)RxJC^!;cXrV0kccHAceg2DFD{;UShVeu`i%QWu70*C`&nwYZ;NGQ zmGz?k4CViRt+aXk$LH$oXY%j0^?#cxZOZ!@{w(U%#&Zd`?|RpB?RmB8&C!nD>Z?m9 z|2}m;>TD$Y_ig_f__Q*f{CiznP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+xERbN}W% zNxKW%!`tnGD`!qz{Az*lbyM}`uPoV?(>|Zsnz`g&Vhr=kEzh@luC8z|T~k;4d}h5& zTH@1nhZ`GPO(#FBH9Hr%WXFyjzg>I|PM!W^--0hkvu#}acejZdFW-A}Z)u5sN_h2( zhoQL}ou!(T3+Hjl)=N$H4xPF-=+i6JIp#w8r;OYjj;5WIUF2EvZO!dtsvYZ<`}Zt= z9j?5u>)*rtw`;H2&y+c`S3E!P*EN2jQ@@%#j_>&>I&X76x86dgEjOlVw@!Xvv-dBb zcJt*wiRnvU1=-(Ln50>>sWSJ|_N<@bC-=MlXNa}>&v2mE`J4CFf0|a$-^*=19Td3o z+OaJkLo;5y*j8I>-oIu0ot3pRma&IibJ)KA&FDWmZGL*#ze`;nPxEA#NIYL}`icL> qyZz4>*WXW@TJrl??5dQMFLw$fEL{ICUS!!DH>3Rf{!jM*Zvp_0!D)E_ literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_173.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_173.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d91d538a9fc45cfc580b123526d1a3321529dd22 GIT binary patch literal 958 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+uN)eye_- z+N5g9(6l7GFupGKrwv)QVxH-rE@@lp#@b)sa{9@;+s94sME%fv_f6v4&A+YnPiJrW z&+yv#ZX?s;c;=IdJm*VQc5TYLwP{VZjP=Rmr{`6CUB4rE-}838&?S-0g{wUiw)g5D z@lDOUy|Bw}_Hidai}Tkuyf^KxK3$O>yD3Ilc4;)fWZr^n$96vat!tJ#O;ay#lK(Vk znTF%@<{DrAu;{q&rmbzRpAzmr6%Bn6Z6CMQXujFeV}fn#i!aVT8hF#}`;P36t`Aa< z9Vh>Z#y_(A+AZI);7XXs_S#hpw`Z2U)qdSn!Td7dZ0+u6*|FP-3^JDN`28>H`LhGh zpV?fiDXYsltv^{?CBDqU{5|lj33J-JmgU7EdAjeCwoZH-y0F9S)0~|Am9Kn@w@Y0;Y|OqR Y|E*}xjxC=>*x36R7U>i%E&hKK0C0zPQvd(} literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_174.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_174.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3901ca5c2dcd59afa47f5b8b95075e609985c34d GIT binary patch literal 998 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+yl0vUL6K zm~$IWygGF|vhHQrKmD~e2Osm_R*wC+_Wco#I-&LL>vZ<;tTWYhJ|eX5^v;R0v#d+~ zy37ndORs#id4H|;kszr+v2Jc zm0vRd8II_R*>nGKn{w0#}xAv-i-*|W0!+-0wHhO#iYk#u*$oZS`kHTAPYS%hG zyleM8?xOy?lnVVXJNJ2aM0T@I$&*knS8T0S{jF1DZ@;;}d29FCtXE=zP((MsmJ&JA!Eh*Mf>iG-JkYI^*=*) zX^r}0?UOlMW|SH0y)2u%M~-ow{qLan|LWB9ztvoh<4f-dS^e8&i>Lg859c}k%}-ym R3f&nq`_lEB?|1&c2>=xLlJ)=q literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_175.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_175.jpg new file mode 100755 index 0000000000000000000000000000000000000000..106900d9c71660a3d5ea63b1f5c12ddfd8f2e5c9 GIT binary patch literal 702 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+vP9-hYPK z*Lshaf6v^%`|j=^`**E9%5|y!zWvcS#aDfI-hSWzepR`A^}FA??*G18|JeUy7DH>w zKiU0nWw*TlQ~h`9vJd-@?%coE?^gJaeOX*ykEc0*-}Yz!-R1RrzgN%7x1L`1baC(P QncK~Ohnih`D*yi`00>C@LI3~& literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_176.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_176.jpg new file mode 100755 index 0000000000000000000000000000000000000000..c4a54bf500a14050cf45831cbb3810430b928f8a GIT binary patch literal 760 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+s!ZbDQV( zcYluezxy3r^Y%Z(yX&bRxkEmb_r6=V^*mRM>D=qHcfI!A)txxItiD#vZoa{K``_-T z|1oa1BGO410u1CN6m%P2Q_gmAH_gh5Q?B7yz<^5LvhgoNpci&n( z@lx_6PO*5y?d#p*vO@$T-fIh*qT Y>F!&YB^vZq>Cf72o6?ht(*NHC0EM#@MF0Q* literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_177.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_177.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d214f2627c9b964ef76889d7fe0d42ed72ec0433 GIT binary patch literal 732 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+uXI;_|b* zGhY4($yGo7xxT8;TxnP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+u;B9i{jF zUn)e)rawM2`KE(tvj3&z?RRbdGh}X`dZX@T#LjR387xKH|`5m=p8;PCHu7fmyfxy`;iOhPHuk{()=U*Sk?A+ z_l7^7>TUVY`p<7ab+nS-uI!PA(AS^)wthP{f351eYo3y^pQofvPQNa(p7-w(lj!Q7 zYfJs7Np~0>eVa4$%*_Y+6DD*S|F|Bm2SadY9W=<~oGgIz~?!n2jd)>4< zch8&Ly3NWXzgy?*bCa&R;_VhWb@fxzf2_JzTYSho&|z22udH&dv#gU!#el)seAUk`?m1qD#gpyoB!Vg0E%61p8x;= literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_179.jpg b/modules/http2/sandbox/test/htdocs/test.example.org/004/gophertiles_179.jpg new file mode 100755 index 0000000000000000000000000000000000000000..516faa1aa18cef56c476588a02061c09a46eb0fc GIT binary patch literal 712 zcmex=nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+z;A`)zM; z?+u;SSHJh)iRG2e@0Q=of3Is^_Uz97>b({1RZ^>7e>Ok+=E~cn|I+f8n(p(Tx$pb; zjJtoL>mP*hOfI~=RlMkX*}`T2MB`Uxm7o9gHuU!G{IAP4Tj`(u9N=(&;_R|(S?2YX Z(fQvq(xk(){#?nP38T>!MAjrX>z@Wg)sKme|$jB_n z`2PswA_fLVRz@&jfC5G)p!?X^IXJnv1sIqZnVFebm_e=us;mXdF|Y`-3Mm>ovIz$! zvMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyo zA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D`;VW$ z7#Wx$-T{&j4Gc)#w^HS&+s#JiF{6W z$Fk_?6S>WQS3TU!b2DZE1M>-+>&t8OH(s`XsQ2O3lDg#B4Q?6NIgV_ww7b2!_2T21 z%A0r1&0W7XX`1Pcn};4-s0bOKF3>Li?G>whH1PiIlg}JJ?pnJgw|{f-L5bsqxAs@8 zx$9w}xBTF(OZM4+WR1KRM819bwDnJGet1*eS$olhkJB4Vwr5WBjAFgpA7J@9?yl^c z{N2yiAK56f)NjdTyHmX`k0$;wUUK_1+x&u68*+Q=%T}%NX|^~lH+#mM=YMDAfAigY z<=Vg8&mMnP9lEUPYXA9+oLzo!d`3n7H_4CBcCL(z%(73p{N;7%ZIt<> z1$D|F*x!5oKLcNl&zep3M;1jq&ir#`MdQZi_(k*i>olS&+P&MJriI}iGhu8Ki z*CZ}~WtOYD_vzjiMDhJ-7BBmNeOKmv8O8cY-TV?tcay gKD+n(O`koh;CM89wQKhEGcOKbE4kG3YySV606JZpC;$Ke literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/005.txt b/modules/http2/sandbox/test/htdocs/test.example.org/005.txt new file mode 100755 index 0000000000000000000000000000000000000000..5630165e4a6c588e6657164f014b0afc169f29e4 GIT binary patch literal 10000000 zcmeFtfdBvi0Dz$VsTV1P3IhfV7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjm>oJ0000000P=rrgaii; z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=0qxKM2><{9fS~`c+Y#sl4Hz(Bz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM a7%*VKfB^#r3>YwAz<>b*1`HT5a2p7pXaE5K literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/006.html b/modules/http2/sandbox/test/htdocs/test.example.org/006.html new file mode 100755 index 0000000000..6b730255a1 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/006.html @@ -0,0 +1,23 @@ + + + + HTML/2.0 Test File: 006 + + + + +

HTML/2.0 Test File: 006

+
This page contains: +
    +
  • HTML +
  • CSS +
  • JavaScript +
+
+
+ +
+ + \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/006/006.css b/modules/http2/sandbox/test/htdocs/test.example.org/006/006.css new file mode 100755 index 0000000000..de6aa5fd18 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/006/006.css @@ -0,0 +1,21 @@ +@CHARSET "ISO-8859-1"; +body{ + background:HoneyDew; +} +p{ +color:#0000FF; +text-align:left; +} + +h1{ +color:#FF0000; +text-align:center; +} + +.listTitle{ + font-size:large; +} + +.listElements{ + color:#3366FF +} \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/006/006.js b/modules/http2/sandbox/test/htdocs/test.example.org/006/006.js new file mode 100755 index 0000000000..b450067b53 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/006/006.js @@ -0,0 +1,31 @@ +/** + * JavaScript Functions File + */ +function returnDate() +{ + var currentDate; + currentDate=new Date(); + var dateString=(currentDate.getMonth()+1)+'/'+currentDate.getDate()+'/'+currentDate.getFullYear(); + return dateString; +} + +function returnHour() +{ + var currentDate; + currentDate=new Date(); + var hourString=currentDate.getHours()+':'+currentDate.getMinutes()+':'+currentDate.getSeconds(); + return hourString; +} + +function javaScriptMessage(){ + return 'This section is generated under JavaScript:
'; +} + +function mainJavascript(){ + document.write(javaScriptMessage()) + document.write('
    '); + document.write('
  • Current date (dd/mm/yyyy): ' + returnDate()); + document.write('
    '); + document.write('
  • Current time (hh:mm:ss): '+returnHour()); + document.write('
'); +} \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/007.html b/modules/http2/sandbox/test/htdocs/test.example.org/007.html new file mode 100755 index 0000000000..4db93e4c5a --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/007.html @@ -0,0 +1,21 @@ + + + + +HTML/2.0 Test File: 007 + + +

HTML/2.0 Test File: 007

+

This page is used to send data from the client to the server:

+
+ + Name:
+ Age:
+ Gender: Male + Female
+ + +
+
+ + \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/007/007.py b/modules/http2/sandbox/test/htdocs/test.example.org/007/007.py new file mode 100755 index 0000000000..02b5466f96 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/007/007.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import cgi, sys +import cgitb; cgitb.enable() + +print "Content-Type: text/html;charset=UTF-8" +print + +print """\ + + HTML/2.0 Test File: 007 (received data) +

HTML/2.0 Test File: 007

""" + +# alternative output: parsed form params <-> plain POST body +parseContent = True # <-> False + +if parseContent: + print '

Data processed:

    ' + form = cgi.FieldStorage() + for name in form: + print '
  • ', name, ': ', form[name].value, '
  • ' + print '
' +else: + print '

POST data output:

'
+	data = sys.stdin.read()
+	print data
+	print '
' + +print '' \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/009.py b/modules/http2/sandbox/test/htdocs/test.example.org/009.py new file mode 100755 index 0000000000..8fd9095af3 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/009.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import cgi, sys, time +import cgitb; cgitb.enable() + +print "Content-Type: text/html;charset=UTF-8" +print + +print """\ + + HTML/2.0 Test File: 009 (server time) +

HTML/2.0 Test File: 009

+

60 seconds of server time, one by one.

""" + +for i in range(60): + s = time.strftime("%Y-%m-%d %H:%M:%S") + print "
", s, "
" + sys.stdout.flush() + time.sleep(1) + +print "

done.

" \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/files/empty.txt b/modules/http2/sandbox/test/htdocs/test.example.org/files/empty.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/funky.png b/modules/http2/sandbox/test/htdocs/test.example.org/funky.png new file mode 100755 index 0000000000000000000000000000000000000000..8d6ba15bafaa7caec6db2422e0d3b339e1e3bff0 GIT binary patch literal 7526 zcmYjWbyOQ)u!iEnEx5b8ySvjOO@UA-RssYl4kZ+KDDLi3tT?4;`@^9?k>U`fMH0Ng zOW!~5?K!)5ckY?pxp!yoo%z04V?!-M04)Fw4UJGoTiq1Zo}tb*+-ImO$D`x`s=@Qr zw(>?p!zcfDqNC;JQ=^19J~{>(IE(lc0BMoqsR9s6#NeZ0>7(Z1?(PWjK~sY|f_)qv znEhOQoSDs?9htRs42(}5I3Q?f^lLimD(3zxzYBu==N)sem1HCZ-0|F_E88RaGprXf8{i8PTJz1eqIwnmeCa3YFB+U+EqPFPR?BgHcf@NeOCE3Z zXC20drbLmZFLB%24q3zv=EWzyp2md?{-c1i=%ioWf|RYX)5I z@JYPjzYO?(>t@InF=;||v0Q>>E%&{gPS$(LBG@H{MEq~gTBXuJ@=V_MyYi2LJu_|0 z+psI?YQDkX{80rTYL22P>v+kcRU1YmYg6NgJ|k_t(Fs++BL1oxiIs}qV(Tf-kuL0- z9o~8A*z$*A`>*vq56%m)6yB~~X% zZJa7wlsXA1-HL|`w}dmo#7zyc-{+o;$$;2U889b^wPWw4FDV_nLgSp;`SV255zU;5 z_4~8aJ0+ddf1^7)KS1pBfXP2C|JCqy*dm zOc5SuWr?^Tq>NskJ^F-&Ryn5GrqP*Q9n>y=}sk_Vb41RMh)Ow!T?4NwKWTTYs+`X zdE`y`&~g!F8{slgtb;RyI zQo{GkbnqQVum-8g+U8Y<7;}m3Yf8aJPmOqC>&z zr-zKIz$A{$lME{KA71uOJr*@CmfFUJ;*lT3y6>vaU{u-*j0!9#V640@ok=O@Iwifx zBzEq&k`@NG9)k}nc~g6}wEJ@APwg8<)_or)t?^{rZuPBHrbNFDp{Dl_PFA9a(te&r zgls0?Y!>#qbYRH@I^VMIN6W;~a2&N8qH-t3MhU5C3?eXDTEFy$+sTLfrDW^Laq z>IXb4t(uCwg9K^oiF|Gd!L_EU!GeVLZI z-|`%299Y#GRYmGWimBt$o-O(R8vbOfgQysovabazd%HU+RGQXGVL2+KT+9_h5=Qa^ z(}2?ke{Y45Risz`Key#5dz#S8H#Q>S>HI(0XEPuVo(TKn!3R zbd)8G4i}Fw5Hx}E!VuwZ6L>2R} zQmerpPfvAY3#1gj7Yr~pW_|WUqL!i_r9%Xwd9nGFN53L<)i%30{n@F4P8e*K-?=9? zS*$#KKy$iI1zcmlG-N8$bHWPjo$ln9ClV||2`t@|qf`^8BUbk$3HXDwiFURRLs=hghaH28_s*@UJ zDr+A^&Yk~RMu<&tp|d>r9eLG;;}dUxZ&93Ysje%(5TJt3L(>w|ePt~6vady=v_~Bk z1>Q2zHk&&H{rq3eSGdeHNa*5Kl^VvH^HlS3XG3!0e3u1>cX{eJRCa9IZcUvzTaB|> zKQY6_G0tUcc%aTMvR}?OX3m~>_LoBXmB2gkLXW#wof0j7M#R+IC;aKN`GhTu?|H}% zM1H$$k;Mk8)U|Uq6X#%A}c5+W*YX$|~oF zYhUnf%g?up3;93O5QsC~hQ<#HM#gspTv8wQS~zjTi{}Z#u|V)6pPc^DA2gXB`x~I_ zVhm3GY!W7>Q)m}j(X>;C&tly{w1U@y%b?{%3DqqEqx9C^To4fCO8XqLn`s+m7v=5e z^%(EjbwEM8K>jycFO&b=U*2u0(cQztqQ-o_(m+pFw^W3ct8=VZ@shLkMfxl8;$bfp zcFcl&ty-115c9APTajD+U0tyK3*k^1tC{QTA*RQ({X7o{1d{pRo{Ni10QuYen72## zVW7%D@~;1Kq_dC#tPg?ZScKFs^mM2yTS$5X9+J)g)esz))}Y?~fPV+NSlLx;s>_aj zWASf_ofhh>5dk4QCvCXUL{sm@cRPIuN2O@DerG-V0pan{Pw?()@~3>fB`HLgNCxyz zGB^2|?76h3wU@Q0b+r)qiI;wo&HHB8=qhMVEXML=SsT;<#DX@mxbg#WySQD7jh)6({MLxNHvWm<=;2 zR^wgM&3VqtYSCVn>1|7q`lPWQhsoyAagZATFFG}`()-vUu|(dDua^3nET8+?C4UnI zt&4vU#pa0b>Le_7b}PC7MNs}MVk-8s#m%3=lkG9Hxk$XNp3SS@>USx$lJchn*Ve5N z+J2z~PgdChtD_#aYt^BdB92%aIRc{Q(W5C*ul%ZfjJv$x=aTKfEks9@ zJNK(-n-#^a-z{ElexpsdMK|3Y%^7%&xA+nmMOd6CDby@IOh7qDR(|+#%lcB4+cVX_(N4BS+vBkQ-Q(O+jRj=TGgNJV0L3yNhRD@bD zUJ=K8>SJPsEQM*yI1&a$K?;BU#oupa6ZD1W_CG8+{7MAzWc}wT`Yrgv-?88@ECLF$ zG|DG@#H)?yk5B3EUP`QpQxj@=2u&DaJ(it-VM98zCL+`5O0HThb%WT~L3MtEG+alp9O;i96-IK>e-(YmZqGG>=d5adA*6R8~&TQPe6h zu={b8Uw0@a$Q*A&J33DpCu+RYIbo!Y9(<=;sl*42-y&@T>HL9C^>Vpmw&g`}J2MML z{%m>%T8j&mFNDxHbjsrRP&VCu_(ohhGdwm%M}X}zhrB)OR<)I#z{;4xHYU>A)JYM& zeNMu(AAVGSFcWY7kjG6;#+W{otW>f9p@o#ZwA=UIRnP?ipb}m+)#(`b4oy0@LedW% z<~_D8j(wJHGM7&-D@@yF&k51ThKQO6<2F|)T3AIv3Rr4}9u!f&+D^_&3V0Ql91cLD z?jAJtN(yywXvDT`$083te>3Z5;WBRmMY*^Vt=ycx> z6PkLLOB{8K^ih*o_!8QzJC$fV$aoWS8ZGdiCzU}eD=~hxvooln^q~oO)zr-KDz=J5DaH69*k5n*Ixn+8E0c$x&jU<`w}f{NlZ*o*fYJb*VhdFpLV032 zFi-s-E23w9Di<+HCG)HtGOzwJy%~@k^%Ef~b4mG>J?GS%H*P)rl{o6pUZ><0_V=gM zE7yErw?L=6fA>&3&MctfjBo+#)LWS{7@JO+IQgqyUr`!{5{(Vi)LCcT?#gXfQT$C` zkXk{B0uk-CF21|FVs2Y=qA}-2NHqSc^png!U>DGB{griZDC947D8`V`p8d?%V`JP9 zD1Legci;kly1e0iVQB-|0~zNOL&R;h8l_LPh-I)+t8g!uVaD(-j*d{Vy}*GI@requ zhce139LWxQr-p%qR%dTMU&fR4r)T^S+M-rDgoM-R+MczU_m4zAy_sst`TLp$9=^44 zb68ZUW)q7PO0CnG)B7E1IACBF@TG~BF0=B9m2?5S$`1eS`(W-5*Y~%=DY)~S=iKzh zOyg$(aN(AF()#uZ5G4kptp`5{gGh`KN0jDVHVqmDl%cIHu9MQiv5IH?3@{ljv;96C zVD3?Rr}oy@zrbHXt*G|CwhOc4OI3075|{^mAF}vLm}5J%Tg7E1+B~82!krAld_6W> zcX;LDBBOt7@-L4a{h0*PSrM49k`rJ0nF5Slq*WZy$Yo=4rw?~*A5#e;^j)o4i&>2t zqseZ@xqVgm$J|{`H>9K{mDPGLqN6--k(7|GUBcps%_BB5S+!5xR!}(N#*j)2=tran|#Y!nXd3Ix74~JPUnBMrC}e> zWdkhrny`W@MU>o4z}MFF$w^iajeFZ`)oaz$@72NK^`KzqXjzM$=C$%+UX2ALRrVhElFC8oEpD`9@f?n z+HeVI{WBVfonCe!pzoN?=V^VHpM=Ta(wfr`-96Ux?>>~C9ubmxkhGB!l~I&};6UX5 zOt}Tf5Pf~YQ@jzWy z8f%Yyrf(AdZV%1s{=gAGsqE8iQSOC+UaTe6y|MoMWdJ7$@$AXoa@fL){I(%xSf_l7 z)fcGTOSH}~x5#)bllyEWBKK=9)E4m^mn^i`^fhj(1sO z6DaM2@c92ZWaKlw>XBpY6IVwR<5Xce^_Vk`TgTT>AiS)T30Jy4x-$C$@noS{Ws7sr z7>t49|1hBrq7G08fP-#Jd^X~a&(#tdQ5@;xSl<~EmUb9irb)9dwXpWl-8Zw!&Y zpLdvh?JLj@RMzoO2cAiL`fd3p=`#(-)L3zH*^IIIZUy3-(JXp!#9mv5ga*ATNzJ$W zuI}Sknzu3F)>Rib%zPZg?vNsyj;Ds?ex)(PpqbRKdcXl?wEG@+d|KSd2flwu z+d6lC{W0lJ#VhgOReiamA*O#poMY}|$6wbaWDQ8en%%zxfWaiQheKf_N%NYaPlFQf z&P`&?y?u;=bVVDiKku(Sl7E%v+HfWPXE`+!9D~S<*e_m6oK9>F!E9+9Qc%F~djg-Z z`-1xJs(DE-Z^FCVDP2zpO%vDagUbADQ}n}mQ_Ja5g~*i|*<5Pfd6%bE>Nk@lwG8RB zhitXKj*gpbDr22=DSU^nqw|TX3d_bCZ%MlghR#K@Eefx3(?gYm2&q2XuNVbMFyhp* z^N8;pjvmKdCB-gT1A|ne$}-43JhurKtlP}AbH3fwIPfz&?!!S61PX&s0L7^k{wk(m zhVKkkse|(dP6|X~RZ>uwEOCW<`5XDpw<0HGsdX4KZsFCUiWKMUzqE71^BCFsnAbQe z?agKmBwG<$v;Exk@Z5a@)UFy#|B|5)^1lYmN1|qc?$W!1pz9g46AivnaZSD;dF4af z^KECmedx_(?Rfy4NqOLd`U8Bqhmuvrqel4h-=%J*TJK_!{h3Q*F%8Y&$cN|tzS+Oa6mZ}nQFb(Zloq2!Y}}Yi>I4wZ>*E-Y5!ZH#4m z!tNR9b=FZ!k*E?Ium9MoF$zjRIi6vfW-bg1nGULCwF{^F-Z@tOHrLEL zR0;HPOr)M@691(ecUYmGTm;WTdX~t&L>i)WV7G?Er~0tIs__F6n*ok<(H_D%AJ>@iWC4p>4bKHI8NBjetQgMzNZ8{qxLg*TX;ZSZ!Ksh2YwoLJ zG_`wYlrvI3qHnGLU4Mcy{~^ZALpOPnzuYdwQgjF<2u@!yipaIO0sGw5Miy&XuT8ys zOXVd#Z=O^a(V;6?M3B9N&Np(Pk)a)kPJWPzK#NT`#=Mg6eoG&S+LQz=(pnQ>mtZ{m zRTSuZHaVcH^K~V-CM5#}F(MZ-P?(MEG5Vid_JphV1Ac)Xa!yk#)qwu-NNP(}OP)C`iH z6b8gJ;lSoPEHt*g*+0COL^(q>nb%KY$l-u73c9qjT=Q&NkgX2YVh>dk3mg4FGbaI- z7TAa^#(GE>RpX7@K8>PzsMXg>F{N3Idq z#|<}W;|9LXnLR|X*OfK0_v#HXUKFv1Fy43@fBw+9QA2{XblR3DYh~~0sQPGPNs~2F z&QVQP0gYzRWN}u3&+Lm`OU-$WbZa9qviNdt#Y6!WwkF@~QGMFq1k+SE7HMmh;%4%$ zkkIDEgp(s<+(2>Bdx^s@=D;r7*^iWS=i$%Us$E#%Caya74}OxbcU2j0jnb@QK(YTS zz&WToYOYwtT})T`vINN9v@wO{Mk}$bGP%;=2^Eqcohgyp9}A2mFdG=cp4kn%6SKf) zV?Z+YkvN<}JB3Etb8Hr_p7@5r?l&%Cg!HW+;Lf9-5u z;L%=#c`IC$+%uNAH`w%(Ox&UV^lV)P!$tPFuZCwWDt?r#50_BY{2HD($d>j{&M*`z z+B}H{Eyw+SCW-~6-0|2>lF}J4bM0ioREW|i(&Ec(WxM5Bu;!e4J$Rq3E7ObZMrepX zx%cshuweXJbawBFbp_RtpQk^eKs3hZb^q?J;572%Ev%ZLsCDfPGs+#MP4VHzU(8>Yi3R9j%@>7N(`HY2Z_xfsyQ-j*7xwTA(a187}hPf2aOj0?Oh%c;?xrX|(qSb!V(I zmu`hS`Z&=)J0oTx;#}%X0!Rggm^zR6RG<#XAQGvMZ0K~r6pnt6R$2S}v zvMiVbIUZP1?;c|AsW!q3=Y~^}q7QTaG)ZiaT2Gz@2_6P5x_-My?|chd(YZwoG8q4Z zZorld^Me{F*G>9Ybe0QL;K^1#xSttuNg>JKeG|0biUuD71u+G1(H|GNdKmjJLc^vf zLc6Y$^=&v&1GPWWl}0d5?qTp!6Ok1wXTsU-$2`J-Irbgz9Z|&;@~p#`R~srnx@3DdVdoD~P-73Y>1lrWU`RI=0~3 zWCcdToJUTtrSC~EF{)@f8iwkPs&=sd0VUdAH2?qr literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/hello.py b/modules/http2/sandbox/test/htdocs/test.example.org/hello.py new file mode 100644 index 0000000000..c96c78c9d1 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/hello.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import os + +print "Content-Type: text/html" +print +print """\ + + +

Hello World!

""" +print "SSL_PROTOCOL=" + os.getenv('SSL_PROTOCOL', '') +print """ +""" \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/index.html b/modules/http2/sandbox/test/htdocs/test.example.org/index.html new file mode 100644 index 0000000000..aa11d4f1ae --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/index.html @@ -0,0 +1,45 @@ + + + mod_h2 test site + + +

mod_h2 test site

+

+

served directly

+
+

mod_proxyied

+ +

mod_rewritten

+ + + \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/info.php b/modules/http2/sandbox/test/htdocs/test.example.org/info.php new file mode 100644 index 0000000000..640e4f2f83 --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/info.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/necho.py b/modules/http2/sandbox/test/htdocs/test.example.org/necho.py new file mode 100644 index 0000000000..787c996cbf --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/necho.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +import cgi, os +import cgitb; cgitb.enable() + +status = '200 Ok' + +try: + form = cgi.FieldStorage() + + # A nested FieldStorage instance holds the file + count = form['count'] + text = form['text'] + + # Test if the file was uploaded + if int(count.value): + print "Status: 200" + print """\ +Content-Type: text/plain\n""" + i = 0; + for i in range(0, int(count.value)): + print """%s""" % (text.value,) + + else: + print "Status: 400 Parameter Missing" + print """\ + Content-Type: text/html\n + +

No count was specified: %s

+ """ % (count.value,) + +except KeyError: + print "Status: 200 Ok" + print """\ + Content-Type: text/html\n + + Echo
+ + +
+ """ + pass + diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/sei.png b/modules/http2/sandbox/test/htdocs/test.example.org/sei.png new file mode 100644 index 0000000000000000000000000000000000000000..91ad9e124b3260809b545f844541f9dfa20a37cb GIT binary patch literal 4310 zcmV;{5Gn78P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXZ5 z2N?~M6PAbo01#G5L_t(|+U;9ubX8TB{`NWd-ZzCLFB1unkO2~g0AUhB*-*>EiYSdZ zKo#u*2XH`XSCuYHOWR&;FRivqTP(+-Xpyp1N~#@7%c3nC6jZ_-6v7Y&AwcGk*d{h?!E7xz0bG5v-dtbz@>JnU22!wrFN0==tknM2TchoQS|TLoFj22IyHEvbK+URd(k?oA)H zCjQ3q6)W)a3om>(6_D5phGstHB6+{Zki-lC3}%1?K?s6vD+El-XOXtmCb{NVt?yl+ z!va8qv$LtOp+V*6<>5qa?RSF%uDYTCN55{5o~6B(B*gOUR3{M;q#z~|kU|0wq-+AQ zfT3v)w-h5tSqqXqa*o53)X~+|UEST)#Q@OW(Sf4ELbSEDeRmM>!LxPM6dVT7(McTeONQlSW|E{S1eLkV2jjk`x-*{vK)&0J z6Mp}|R=|X@>GI3!R(n)Q?%Y=&^L;RV76F~iH{PYFvC)CdOcURmYNC9iz>J9z5HbKF zprwuR#U7jAcvs@kAvZa64ME#Nw?*r+h7{bneb?5`0nGsuCzPP-%fkRF+^;{iedkT{ zFa}Hv9b|_TYU^wi6lx3y0bvkKFc=io0U!Xl0CX#QWxdHOf1L!6;Ud!x1bNdXRFKFHFu?){MBu3S46x0l z0w6&GlcsBwksP9TJ|fOYc2H+9FrvLX@T;b#ral|5=pW0^_grxq-&QmNKnM&lL`+VT zAq1dFKnOx)MM%UXK}Z5K0|8*+e1Xv=0SbnI6sMk_mX$rLFGt#^3gDeh$wDu6t_C+^(?689z>oo0T==|%_lUqhmqve;Uaq`0KCvgzCoWVptQ6U0Fap) z7+;jDfH0WoT!@3Y=Q}Qa^bg0GpywNaLyxFMDFvxi2>`5Ev7%4Lto5Y=nwy&e0HIK5 zbm1@wn9*sb9*9KbVv3zp1RhLCfJqz%0BpwLjF|u{fD9t&(V3>G!CL^rpafHin-dv?Q(r5*_mNI1NrElg?(>zaPfg$#Pd*cY ztiwUj2)+)5K$p#s3^KsAwF>LrV!X6k;n|mL{N*DBzfS>19Q1ME+je9*{Kbn5Uz;03 zMnDn@o1Ftv0h1?B#={TY2LQ;813F{vI~E>&hOzN;U`G|> z-hZ|*bCHFkM{JN0w+b*bG#8=mw1uy#4S1Xa%zzXUq#MTo;JN3X8(1cgl9Cd0W<;Ye zx2)MW3LM%;<)yW(YaSp#_}MbT71Mm!QSF4Sblh;YA7|<%x&y9rfK3Jg2IJrUU7@4h z35Q1T`x%N9e5Sbx0Pel_-hmVE`+IzI?STg#_)}w3D>E|(P3BckeV_TDuJ~v&?|sjs zRz3eS)zZ?gm|5-GwOy@yE>H1Mx3Uj-Ssh4abs$yo@l^H9gM(CocZe#@8Kx!|WvW@@ zy*w&6ts(ZJE3aO9@ddA{szP2~Ui`eQtnAut+qN+?b4N#q+Vc5MuB_awHmxD%1Dg8f zy**t}FW8?_Q(Q(y^3ZFcNFmyol<3mH6m$rY=9j;Q+n%wxpwVlI~v`qP8xZs*flv zU*w>SEJ9nGw12Z+ybbv32ShNGmX?-LUtgawWy+K-!C>%gQj$koe%IaOylKN}^E-db z*GxZ-L4%U$vt2<<80|vEb&pYIW+v+Dnn5HnA!i-Up4v*6Pj>SBMGlM}DJjj($V?04 zC$|cGu*pI&%t%fm&K@f0vmIRXAOAW1Ux35bfCz_|E?ugB^2sOHNhx=EJf2B=zdYPr zJZi$vm&~cFcw~hSaA^!((dIvgS&A?nuOG}u>vK`LeIL%Yb>i(`xp3^1h9nPY+EfiH zzz`n7?%gKF7HMefU{oKoIS^D-Ugp3J_ZdsKY-?OIU{YdLRaMI6a+%rL*;B*euqR{> zc3x4oXWrBI`!j_!SamT`2%MiUX~&m_b{Wo`IdgISfO+%gVe8hdsH>~1sjI82 ziS$k%a^EdUqh+!Hf`HJ0P9M{jT^4S4aAH*u+4if>IBrt=)OhQP! zxxsk!)5@mD0bt>Rd0794_b)yI4j(?8=mSLC3~N}<@mXZqdG(EoKHYBdq2r1sj+UI3 zA_!rC!wiH03KPt3h6;nEP7DPQ5eb7(-=I+6tSBo<;F;gzlQ;g@wiEy+j7i3(&0h`7 zlvv5Au{eCF8US$nk1{sgxgc=W*pWIrT|^)-tVqy8M%b^^ehtFP-*;rl!sPHelXv1LRq zeq5Bx(1cBHw}3wY)#+ye1{zx#TdOQg7$xx!cSm9Y_V&k+zwS2LIiL`@r?dkq@_;DKc+dlz3TCnOgO zMjI1!py9ZUcmK=6^1pK+mJne^G&ckWfqY%EU$=?-$pi=|PJE3QU;H!fx#u1Lz{=m} z-f*`4^t##8%&Bj_FKmXAEv*t|r35$ubf23(i!6eKy2kK#f1mv2zmFXanVPI;@VJ~j zdvaa@r|UWV#}|^APe#MwgI=W$c$p7+nGbm_e^mbC;%RV~B_YfdDKU zu#`^YMpzhCV6%wgu(O+Rv{ul;;}T8>pb3i|P8Y)A5Qqp4hl8S>Nnv!GtghC_enj(j8vtdZ+x8r5M$|rf`U??&$mz4^@w*H-wKR0 z(==gOR-Da=2%4r*;>w|vLNFMF$K&ZucuYhwB&=>}X}JRcm6w-uWo6~XBf(c+eHAq| zH4*@PKHnossW@3B@B=e5>$=Wvx0_-gm&-+(ro~g|i0vcy>?CtSxBzBmDJ1~hK6vop zg#fs+vJ#_5j~);lFwwT{FD%P)Nhvuxt90Jw@jQKr$ALfqnx;Y5^@Ny#V<&06Jl~UINa3vN;#P1-?$#V zN7FP7%)BfwFK;pcBQ@edD8)f?*i2EQ@;A z9L1_lESt!-6%0d<<>k}`SHQMy+W-KTrLHwC369r+M9N@d2;g3&VTl}&c)hntI2;ay zLZLWPgb-|60%tp52ZKQfL8}`Y8t(!k^$Hh_1El0?kJFEarZBp?RkR$g$7Z8s#tG|r zB1+<97(0$#*EGpWDGr7dw|9iNp*c*F!dy|_&F?%L!W|3j=6Kw>d-sJ8hi8`O(U!_u zo^v@ju2^KD`l!jjev8GC)5M0(iRN$~D4&06K6km4WEhgOQrnT7q%du~hLOX8ip!II7^(gQMNK4|@RMi6@@8a0nWnYdt>q+po2q)-qT@O4AxIQ}sH7*M%(?QeVPkNaBz zWh0wVQv(1a3U0fuWl3fx02>T}ZG5C7EX6)jfLc3<{Q)pcP)54oF+~y{ zCs1A{;gB6308mzY|0`h9q)CyKS3&wuZk|um$we{GEV3C&;6Wa+vKhUcobv@ki6QSf zK~bW!1Tcss>YF2YVVmJ}5eq$1S72MF7Ri>F-%5u622~Uzcc+Osi~s-t07*qoM6N<$ Eg4x*a-~a#s literal 0 HcmV?d00001 diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/upload.py b/modules/http2/sandbox/test/htdocs/test.example.org/upload.py new file mode 100644 index 0000000000..71880f1f2a --- /dev/null +++ b/modules/http2/sandbox/test/htdocs/test.example.org/upload.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +import cgi, os +import cgitb; cgitb.enable() + +status = '200 Ok' + +try: # Windows needs stdio set for binary mode. + import msvcrt + msvcrt.setmode (0, os.O_BINARY) # stdin = 0 + msvcrt.setmode (1, os.O_BINARY) # stdout = 1 +except ImportError: + pass + +form = cgi.FieldStorage() + +# Test if the file was uploaded +if 'file' in form: + # A nested FieldStorage instance holds the file + fileitem = form['file'] + + # strip leading path from file name to avoid directory traversal attacks + fn = os.path.basename(fileitem.filename) + open('./files/' + fn, 'wb').write(fileitem.file.read()) + message = 'The file "' + fn + '" was uploaded successfully' + +elif 'remove' in form: + remove = form['remove'].value + try: + fn = os.path.basename(remove) + os.remove('./files/' + fn) + message = 'The file "' + fn + '" was removed successfully' + except OSError, e: + message = 'Error removing ' + fn + ': ' + e.strerror + status = '404 File Not Found' +else: + message = '''\ + Upload File
+ +
+ ''' + +print "Status: %s" % (status,) +print """\ + Content-Type: text/html\n + +

%s

+ """ % (message,) diff --git a/modules/http2/sandbox/test/htdocs/test.example.org/xxx-1.0.2a.tar.gz b/modules/http2/sandbox/test/htdocs/test.example.org/xxx-1.0.2a.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..f025d437b0c610d1a863744a8273317a8b4ba676 GIT binary patch literal 489 zcmV##sWJP#*SKdO=MYqON?shUV0mYt%u!$ z7Av)fQX5-g>1`ilpKzaJkL}>brDTSYjllB*VM*5CuX?CW=h5j+Z z^u<%_iDi9|3-a+Z`9ikpIqMlT4(%5-7@xcxcFD`@>rZX3N&JNND;z~n8MyaAI-(0*@!7R{?7H#)mXO*EZFQtSNt zIJ-?%nHiNtrIN{5ZPa3I)VLle*{5E9oq{P=ex!b)$>O2yM z$(l-Eyr z!%{vq8`FjSVWFUZt6*3v?5DzEscAno9hREWA}zYm?2(YLyFV`M?S6qhQE$WlT?_~z fgb+dqA%qY@2qA + +$MISDIR_STATUS + +

Misdirected Request

+

The client needs to use a new connection for this +request as it does not match the SNI name used.

+ +EOF + diff --git a/modules/http2/sandbox/test/test_common.sh b/modules/http2/sandbox/test/test_common.sh new file mode 100644 index 0000000000..e940160de5 --- /dev/null +++ b/modules/http2/sandbox/test/test_common.sh @@ -0,0 +1,249 @@ +#!/bin/bash +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# common test functions +# + +URL_PREFIX="$1" +OPT_DIRECT="$2" +AUTH="${URL_PREFIX#*://}" +HOST="${AUTH%%:*}" +URL_SCHEME="${URL_PREFIX%%:*}" +URL_PATH="/${AUTH#*/}" +if [ "$URL_PATH" = "/$AUTH" ]; then + URL_PATH="" +fi + +INSTALL_DIR="../install" +BIN_DIR="${INSTALL_DIR}/bin" +if [ "${HOST#*.}" = 'example.org' ]; then + DOC_ROOT="htdocs/test.example.org" +else + DOC_ROOT="htdocs/${HOST}" +fi + +GEN="gen" +TMP="$GEN/tmp" + +CURL="${BIN_DIR}/curl -sk --resolv ${HOST#*://}:127.0.0.1" +NGHTTP="${BIN_DIR}/nghttp" + + +fail() { + echo "$@" + exit 1 +} + +case "$OPT_DIRECT" in + "direct") + ARG_UPGRADE="" + ;; + *) + ARG_UPGRADE=" -u" + ;; +esac + +curl_check_doc() { + DOC="$1"; shift; + MSG="$1"; shift; + ARGS="$@" + echo -n " * curl /$DOC: $MSG..." + rm -rf $TMP + mkdir -p $TMP + ${CURL} $ARGS $URL_PREFIX/$DOC > $TMP/$DOC 2>&1 || fail + diff $DOC_ROOT/$DOC $TMP/$DOC || fail + echo ok. +} + +nghttp_check_doc() { + DOC="$1"; shift; + MSG="$1"; shift; + ARGS="$@"$ARG_UPGRADE + echo -n " * nghttp /$DOC: $MSG..." + rm -rf $TMP && + mkdir -p $TMP && + ${NGHTTP} $ARGS $URL_PREFIX/$DOC > $TMP/$DOC 2>&1 || fail + diff $DOC_ROOT/$DOC $TMP/$DOC || fail + echo ok. +} + +nghttp_check_assets() { + DOC="$1"; shift; + MSG="$1"; shift; + ARGS="$@"$ARG_UPGRADE + echo -n " * nghttp /$DOC: $MSG..." + rm -rf $TMP && + mkdir -p $TMP && + sort > $TMP/reference + ${NGHTTP} -ans $ARGS $URL_PREFIX/$DOC > $TMP/out 2>&1 || fail + fgrep " /" $TMP/out | while read id begin end dur stat size path; do + echo "$path $size $stat" + done | sort > $TMP/output || fail + diff $TMP/reference $TMP/output || fail + echo ok. +} + +nghttp_check_content() { + DOC="$1"; shift; + MSG="$1"; shift; + rm -rf $TMP + mkdir -p $TMP + cat > $TMP/expected + echo -n " * nghttp /$DOC: $MSG..." + ${NGHTTP} "$@" $URL_PREFIX/$DOC > $TMP/$DOC 2>&1 || fail + diff $TMP/expected $TMP/$DOC || fail + echo ok. +} + + +curl_check_content() { + DOC="$1"; shift; + MSG="$1"; shift; + rm -rf $TMP + mkdir -p $TMP + cat > $TMP/expected + echo -n " * curl /$DOC: $MSG..." + ${CURL} "$@" $URL_PREFIX/$DOC > $TMP/$DOC 2>&1 || fail + diff $TMP/expected $TMP/$DOC || fail + echo ok. +} + +curl_check_redir() { + DOC="$1"; shift; + REF_DOC="$1"; shift; + MSG="$1"; shift; + ARGS="$@" + echo -n " * curl redir /$DOC: $MSG..." + rm -rf $TMP + mkdir -p $TMP + ${CURL} -D - $ARGS $URL_PREFIX/$DOC >$TMP/redir.out || fail + LOCATION=$( fgrep -i 'location:' $TMP/redir.out | sed -e "s,.*$URL_PREFIX/,," | tr -d '\r\n' ) + test "$REF_DOC" != "$LOCATION" && fail "expected redirect to >>>$REF_DOC<<<, found >>>$LOCATION<<<" + ${CURL} $ARGS $URL_PREFIX/$LOCATION >$TMP/$LOCATION || fail + diff $DOC_ROOT/$REF_DOC $TMP/$LOCATION || fail + echo ok. +} + +curl_check_necho() { + COUNT="$1"; shift; + TEXT="$1"; shift; + REF="$1"; shift; + MSG="$1"; shift; + ARGS="$@" + rm -rf $TMP + mkdir -p $TMP + echo -n " * curl /necho.py?count=$COUNT&text=$TEXT..." + ${CURL} $ARGS -F count="$COUNT" -F text="$TEXT" $URL_PREFIX/necho.py > $TMP/echo 2>&1 || fail + diff $REF $TMP/echo || fail + echo ok. +} + +curl_post_file() { + DOC="$1"; shift; + FILE="$1"; shift; + MSG="$1"; shift; + ARGS="$@" + fname="$(basename $FILE)" + rm -rf $TMP + mkdir -p $TMP + echo -n " * curl /$DOC: $MSG..." + ${CURL} $ARGS --form file=@"$FILE" $URL_PREFIX/$DOC > $TMP/$DOC 2>&1 || fail "error uploading $fname" + ${CURL} $ARGS $URL_PREFIX/files/"$fname" > $TMP/data.down 2>&1 || fail "error downloding $fname" + diff $FILE $TMP/data.down || fail + echo ok. +} + +curl_post_data() { + DOC="$1"; shift; + FILE="$1"; shift; + MSG="$1"; shift; + ARGS="$@" + fname="$(basename $FILE)" + rm -rf $TMP + mkdir -p $TMP + echo -n " * curl /$DOC: $MSG..." + ${CURL} $ARGS --form file=@"$FILE" $URL_PREFIX/$DOC > $TMP/$DOC 2>&1 || fail + ${CURL} $ARGS $URL_PREFIX/files/"$fname" > $TMP/data.down 2>&1 || fail + diff $FILE $TMP/data.down || fail + echo ok. +} + +nghttp_remove_file() { + DOC="$1"; shift; + FILE="$1"; shift; + MSG="$1"; shift; + ARGS="$@"$ARG_UPGRADE + fname="$(basename $FILE)" + rm -rf $TMP + mkdir -p $TMP + cat > $TMP/updata < $TMP/$DOC || fail "error removing $fname" + echo ok. +} + +nghttp_post_file() { + DOC="$1"; shift; + FILE="$1"; shift; + MSG="$1"; shift; + ARGS="$@"$ARG_UPGRADE + fname="$(basename $FILE)" + rm -rf $TMP + mkdir -p $TMP + cat > $TMP/updata <> $TMP/updata || fail "error reading $FILE" + echo >> $TMP/updata < $TMP/$DOC || fail "error uploading $fname" + + ${NGHTTP} $ARG_UPGRADE $URL_PREFIX/files/"$fname" > $TMP/data.down || fail "error downloding $fname" + diff $FILE $TMP/data.down || fail + echo ok. +} + +curl_check_altsvc() { + DOC="$1"; shift; + EXP_ALT_SVC="$1"; shift; + MSG="$1"; shift; + mkdir -p $TMP + echo -n " * curl check alt_svc at /$DOC..." + ${CURL} "$@" -D $TMP/headers $URL_PREFIX/$DOC > /dev/null 2>&1 || fail + alt_svc="$( fgrep -i 'Alt-Svc: ' $TMP/headers | tr -d "\r\n" )" + alt_svc="${alt_svc#*: }" + test "$EXP_ALT_SVC" = "$alt_svc" || fail "failed. Expected '$EXP_ALT_SVC', got '$alt_svc'" + echo ok. +} + diff --git a/modules/http2/sandbox/test/test_curl_altsvc.sh b/modules/http2/sandbox/test/test_curl_altsvc.sh new file mode 100644 index 0000000000..e2e24f32c7 --- /dev/null +++ b/modules/http2/sandbox/test/test_curl_altsvc.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +HTTP_URL="$1" +HTTPS_URL="$2" + +source test_common.sh +echo "curl ALT-SVC on: $@" + +URL_PREFIX="$HTTP_URL" +curl_check_altsvc index.html '' --http1.1 +curl_check_altsvc index.html '' "http/1.1, signal used" --http1.1 -H'Alt-Svc-Used: 1' +curl_check_altsvc index.html '' "http/2" --http2 + +URL_PREFIX="$HTTPS_URL" +curl_check_altsvc index.html 'h2=":12346", h2c=":12345", h2="mod-h2.greenbytes.de:12346"' "http/1.1" --http1.1 +curl_check_altsvc index.html '' "http/2" --http2 diff --git a/modules/http2/sandbox/test/test_curl_get.sh b/modules/http2/sandbox/test/test_curl_get.sh new file mode 100644 index 0000000000..7f76872eaa --- /dev/null +++ b/modules/http2/sandbox/test/test_curl_get.sh @@ -0,0 +1,132 @@ +#!/bin/bash +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +source test_common.sh +echo "curl GET on: $@" + +################################################################################ +# check content of resources via different methods +################################################################################ +curl_check_doc index.html "default" +curl_check_doc index.html "http/1.1" --http1.1 +curl_check_doc index.html "http2" --http2 + +################################################################################ +# check some redir handling +################################################################################ +curl_check_doc xxx-1.0.2a.tar.gz "http2" --http2 + +if [ "$URL_PATH" = "" ]; then + curl_check_redir latest.tar.gz xxx-1.0.2a.tar.gz "http2" --http2 +fi + +################################################################################ +# check cgi generated content +################################################################################ +if [ "$URL_SCHEME" = "https" ]; then + CONTENT=" + +

Hello World!

+SSL_PROTOCOL=TLSv1.2 + +" +else + CONTENT=" + +

Hello World!

+SSL_PROTOCOL= + +" +fi + +curl_check_content hello.py "default" < +

Upload File

+ +
+

+ +EOF + +curl_check_content upload.py "http2" --http2 < +

Upload File

+ +
+

+ +EOF + + +################################################################################ +# check chunked content from cgi +################################################################################ + +if [ ! -f $GEN/necho-100 ]; then +i=0; while [ $i -lt 10 ]; do +echo "0123456789" +i=$[ i + 1 ] +done > $GEN/necho-100 +fi + +if [ ! -f $GEN/necho-1k ]; then +i=0; while [ $i -lt 10 ]; do +cat $GEN/necho-100 +i=$[ i + 1 ] +done > $GEN/necho-1k +fi + +if [ ! -f $GEN/necho-10k ]; then +i=0; while [ $i -lt 10 ]; do +cat $GEN/necho-1k +i=$[ i + 1 ] +done > $GEN/necho-10k +fi + +if [ ! -f $GEN/necho-100k ]; then +i=0; while [ $i -lt 10 ]; do +cat $GEN/necho-10k +i=$[ i + 1 ] +done > $GEN/necho-100k +fi + +if [ ! -f $GEN/necho-1m ]; then +i=0; while [ $i -lt 10 ]; do +cat $GEN/necho-100k +i=$[ i + 1 ] +done > $GEN/necho-1m +fi + +curl_check_necho 10 "0123456789" $GEN/necho-100 "http/2" --http2 +curl_check_necho 100 "0123456789" $GEN/necho-1k "http/2" --http2 +curl_check_necho 1000 "0123456789" $GEN/necho-10k "http/2" --http2 +curl_check_necho 10000 "0123456789" $GEN/necho-100k "http/2" --http2 +curl_check_necho 100000 "0123456789" $GEN/necho-1m "http/2" --http2 + + diff --git a/modules/http2/sandbox/test/test_curl_post.sh b/modules/http2/sandbox/test/test_curl_post.sh new file mode 100644 index 0000000000..a8b275d51d --- /dev/null +++ b/modules/http2/sandbox/test/test_curl_post.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +source test_common.sh +echo "curl POST on: $@" + +CHR100="012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 +" + +if [ ! -f $GEN/data-1k ]; then + i=0; while [ $i -lt 10 ]; do + echo -n "$CHR100" + i=$[ i + 1 ] + done > $GEN/data-1k +fi + +if [ ! -f $GEN/data-10k ]; then + i=0; while [ $i -lt 10 ]; do + cat $GEN/data-1k + i=$[ i + 1 ] + done > $GEN/data-10k +fi + +if [ ! -f $GEN/data-100k ]; then + i=0; while [ $i -lt 10 ]; do + cat $GEN/data-10k + i=$[ i + 1 ] + done > $GEN/data-100k +fi + +if [ ! -f $GEN/data-1m ]; then + i=0; while [ $i -lt 10 ]; do + cat $GEN/data-100k + i=$[ i + 1 ] + done > $GEN/data-1m +fi + +# just a check that things are working +curl_post_data upload.py $GEN/data-1k "file upload via http/1.1" --http1.1 + +# on curl 7.40.0 and earlier, there will be a delay before the upload +# commences. Fix is underway, thanks @badger! +# Caveat: on h2c, the connection will not be upgraded, since curl sends +# the POST as first request and mod_h2 does not upgrade on requests with +# content. Currently we have no means to check that his is happening. +# on curl 7.41.0 and earlier, the transfer of the upload data will be +# extremely slow. Fix will be in 7.42.0, thanks @bagder! +# +# disable until 7.42.0 arrives.... +#curl_post_data upload.py $GEN/data-1k "1k file upload via http/2" --http2 +#curl_post_data upload.py $GEN/data-10k "10k file upload via http/2" --http2 +#curl_post_data upload.py $GEN/data-100k "100k file upload via http/2" --http2 +#curl_post_data upload.py $GEN/data-1m "1m file upload via http/2" --http2 + + + + + diff --git a/modules/http2/sandbox/test/test_nghttp_get.sh b/modules/http2/sandbox/test/test_nghttp_get.sh new file mode 100644 index 0000000000..8769ef7282 --- /dev/null +++ b/modules/http2/sandbox/test/test_nghttp_get.sh @@ -0,0 +1,279 @@ +#!/bin/bash +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +source test_common.sh +echo "nghttp GET on: $@" + +################################################################################ +# check content of resources via different methods +################################################################################ +nghttp_check_doc index.html "default" +nghttp_check_doc 003.html "detault" + + +################################################################################ +# check retrieving multiple resources from inside a page +################################################################################ +nghttp_check_assets 001.html "with assets" < $GEN/data-1k +fi + +if [ ! -f $GEN/data-10k ]; then + i=0; while [ $i -lt 10 ]; do + cat $GEN/data-1k + i=$[ i + 1 ] + done > $GEN/data-10k +fi + +if [ ! -f $GEN/data-100k ]; then + i=0; while [ $i -lt 10 ]; do + cat $GEN/data-10k + i=$[ i + 1 ] + done > $GEN/data-100k +fi + +if [ ! -f $GEN/data-1m ]; then + i=0; while [ $i -lt 10 ]; do + cat $GEN/data-100k + i=$[ i + 1 ] + done > $GEN/data-1m +fi + +# Tests witht the nghttp client that *requires* h2/h2c. Sends "OPTIONS *" +# on h2c which is a good test. +# +nghttp_remove_file upload.py data-1k "rm data-1k" +nghttp_post_file upload.py $GEN/data-1k "1k upload" +nghttp_remove_file upload.py data-10k "rm data-10k" +nghttp_post_file upload.py $GEN/data-10k "10k upload" +nghttp_remove_file upload.py data-100k "rm data-100k" +nghttp_post_file upload.py $GEN/data-100k "100k upload" +nghttp_remove_file upload.py data-1m "rm data-1m" +nghttp_post_file upload.py $GEN/data-1m "1m upload" + +# Tests without content-length announced +nghttp_remove_file upload.py data-1k "rm data-1k" +nghttp_post_file upload.py $GEN/data-1k "1k upload w/o c-len" --no-content-length +nghttp_remove_file upload.py data-10k "rm data-10k" +nghttp_post_file upload.py $GEN/data-10k "10k upload w/o c-len" --no-content-length +nghttp_remove_file upload.py data-100k "rm data-100k" +nghttp_post_file upload.py $GEN/data-100k "100k upload w/o c-len" --no-content-length +nghttp_remove_file upload.py data-1m "rm data-1m" +nghttp_post_file upload.py $GEN/data-1m "1m upload w/o c-len" --no-content-length + + + + diff --git a/modules/http2/setup/Makefile.am b/modules/http2/setup/Makefile.am new file mode 100644 index 0000000000..da197f9171 --- /dev/null +++ b/modules/http2/setup/Makefile.am @@ -0,0 +1,29 @@ +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +SUBDIRS = + +EXTRA_DIST = \ + h2.load \ + h2.conf \ + install-config.sh + + +ACLOCAL_AMFLAGS = -I m4 + +SYSCONF_DIR = @SYSCONF_DIR@ + +# overwrite install target +install: + @bash install-config.sh $(SYSCONF_DIR) $(DESTDIR) diff --git a/modules/http2/setup/h2.conf b/modules/http2/setup/h2.conf new file mode 100644 index 0000000000..c38cc661d8 --- /dev/null +++ b/modules/http2/setup/h2.conf @@ -0,0 +1 @@ +H2Engine on diff --git a/modules/http2/setup/h2.load b/modules/http2/setup/h2.load new file mode 100644 index 0000000000..f4639db441 --- /dev/null +++ b/modules/http2/setup/h2.load @@ -0,0 +1 @@ +LoadModule h2_module modules/mod_h2.so diff --git a/modules/http2/setup/install-config.sh b/modules/http2/setup/install-config.sh new file mode 100644 index 0000000000..8a7ec1e634 --- /dev/null +++ b/modules/http2/setup/install-config.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de) +# +# Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +SYSCONF="$1" +DESTDIR="$2" +A2ENMOD="$( type -p a2enmod )" + +INSTALL_LOC="" + +if [ -d "$DESTDIR" ]; then + INSTALL_LOC="$DESTDIR/$SYSCONF" +else + INSTALL_LOC="$SYSCONF" +fi +echo "[DEBUG] Install location is assumed to be $INSTALL_LOC" +if [ -d "$SYSCONF/mods-available" ]; then + echo -n "Debian layout assumed, installing mod_h2 config in $INSTALL_LOC..." + cp h2.conf h2.load "$INSTALL_LOC/mods-available" + echo "done." + if [ -x "$A2ENMOD" ] && [ ! -d "$DESTDIR" ]; then + echo -n "enabling mod_h2..." + "$A2ENMOD" mod_h2 + echo "done." + fi +elif [ -d "$SYSCONF/../conf.d" ] && [ -d "$SYSCONF/../conf.modules.d" ]; then + # Odds are this is a Fedora box! + echo -n "RHEL/Fedora layout assumed, installing mod_h2 config in $INSTALL_LOC..." + cp h2.conf "$INSTALL_LOC/../conf.d" + cp h2.load "$INSTALL_LOC/../conf.modules.d/10-h2.conf" + echo "done." +else + cat <

%7AGkdyy3FD_s2!gn9u4J0a5xb=(@l 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%0AEi5b9(i=q24J>_jZOV1OY`=D1dq_~!Ye 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�tPrcx>KW<*+*eKcWHR0$-6y-p)cTu7lgxaQj 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