From cb802dc96c18f3a541fe8fd5a20e6b43ce14da46 Mon Sep 17 00:00:00 2001 From: mathiasdm <mathiasdm@mail.i2p> Date: Mon, 30 Aug 2010 14:01:34 +0000 Subject: [PATCH] Rewritten applications.html, added development guide for streaming applications. --- .../image_design/i2ptunnel_peertopeer.svg | 732 ++++++++++++++++++ .../image_design/i2ptunnel_serverclient.svg | 368 +++++++++ www.i2p2/pages/_menu.html | 4 +- www.i2p2/pages/applications.html | 445 ++++++++--- .../static/images/i2ptunnel_peertopeer.png | Bin 0 -> 14971 bytes .../static/images/i2ptunnel_serverclient.png | Bin 0 -> 6188 bytes 6 files changed, 1452 insertions(+), 97 deletions(-) create mode 100644 www.i2p2/image_design/i2ptunnel_peertopeer.svg create mode 100644 www.i2p2/image_design/i2ptunnel_serverclient.svg create mode 100644 www.i2p2/static/images/i2ptunnel_peertopeer.png create mode 100644 www.i2p2/static/images/i2ptunnel_serverclient.png diff --git a/www.i2p2/image_design/i2ptunnel_peertopeer.svg b/www.i2p2/image_design/i2ptunnel_peertopeer.svg new file mode 100644 index 000000000..626b03d91 --- /dev/null +++ b/www.i2p2/image_design/i2ptunnel_peertopeer.svg @@ -0,0 +1,732 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="7cm" + height="7cm" + viewBox="102 159 129 139" + id="svg3091" + version="1.1" + inkscape:version="0.47pre4 r22446" + sodipodi:docname="i2ptunnel_peertopeer.svg" + inkscape:export-filename="/home/mathias/Documents/I2P/i2p.www/www.i2p2/static/images/i2ptunnel_serverclient.png" + inkscape:export-xdpi="49.999134" + inkscape:export-ydpi="49.999134"> + <metadata + id="metadata3257"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs3255"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path4394" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 124.01575 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="248.03149 : 124.01575 : 1" + inkscape:persp3d-origin="124.01575 : 82.677165 : 1" + id="perspective3259" /> + <inkscape:perspective + id="perspective3524" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3597" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2900" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2900-5" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3011" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3036" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3036-4" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective5025" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1280" + inkscape:window-height="726" + id="namedview3253" + showgrid="false" + inkscape:zoom="0.95149207" + inkscape:cx="-64.635323" + inkscape:cy="179.6227" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="1" + inkscape:current-layer="svg3091" /> + <g + id="g3093" + transform="translate(-124.27542,48.29661)"> + <path + style="fill:#b7b79d" + d="m 170.897,186.814 39.968,0 0,7.386 -39.968,0 0,-7.386 z" + id="path3095" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 170.897,186.814 39.968,0 0,7.386 -39.968,0 0,-7.386" + id="path3097" /> + <path + style="fill:#c9c9b6" + d="m 170.897,186.814 4.238,-4.018 39.968,0 -4.238,4.018 -39.968,0 z" + id="path3099" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 170.897,186.814 4.238,-4.018 39.968,0 -4.238,4.018 -39.968,0" + id="path3101" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.11999989" + d="m 208.63,190.176 -9.591,0" + id="path3103" /> + <path + style="fill:#7a7a5a" + d="m 210.865,194.2 4.238,-4.25 0,-7.154 -4.238,4.018 0,7.386 z" + id="path3105" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 210.865,194.2 4.238,-4.25 0,-7.154 -4.238,4.018 0,7.386" + id="path3107" /> + <path + style="fill:#c9c9b6" + d="m 171.123,198.885 4.459,-5.585 30.819,0 -4.459,5.585 -30.819,0 z" + id="path3109" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 171.123,198.885 4.459,-5.585 30.819,0 -4.459,5.585 -30.819,0" + id="path3111" /> + <path + style="fill:#7a7a5a" + d="m 201.942,200 4.459,-4.685 0,-2.015 -4.459,5.585 0,1.115 z" + id="path3113" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 201.942,200 4.459,-4.685 0,-2.015 -4.459,5.585 0,1.115" + id="path3115" /> + <path + style="fill:#b7b79d" + d="m 171.123,198.885 30.819,0 0,1.115 -30.819,0 0,-1.115 z" + id="path3117" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 171.123,198.885 30.819,0 0,1.115 -30.819,0 0,-1.115" + id="path3119" /> + <path + style="fill:#000000" + d="m 176.923,185.926 3.357,-3.13 28.35,0 -3.117,3.13 -28.59,0 z" + id="path3121" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.02" + d="m 176.923,185.926 3.357,-3.13 28.35,0 -3.117,3.13 -28.59,0" + id="path3123" /> + <path + style="fill:#c9c9b6" + d="m 176.696,162.903 3.136,-2.903 28.363,0 -3.136,2.903 -28.363,0 z" + id="path3125" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 176.696,162.903 3.136,-2.903 28.363,0 -3.136,2.903 -28.363,0" + id="path3127" /> + <path + style="fill:#b7b79d" + d="m 176.696,162.903 28.59,0 0,22.569 -28.59,0 0,-22.569 z" + id="path3129" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 176.696,162.903 28.577,0 0,22.563 -28.577,0 0,-22.563" + id="path3131" /> + <path + style="fill:#ffffff" + d="m 179.152,165.8 23.672,0 0,17.437 -23.672,0 0,-17.437 z" + id="path3133" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 179.152,165.8 23.672,0 0,17.43 -23.672,0 0,-17.43" + id="path3135" /> + <path + style="fill:#7a7a5a" + d="m 205.059,185.258 3.136,-3.13 0,-22.128 -3.136,2.903 0,22.355 z" + id="path3137" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 205.059,185.258 3.136,-3.13 0,-22.128 -3.136,2.903 0,22.355" + id="path3139" /> + </g> + <g + id="g3219" + transform="translate(134.87712,28.099763)"> + <path + style="fill:#b7b79d" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0 z" + id="path3221" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0" + id="path3223" /> + <path + style="fill:#c9c9b6" + d="m 139.83,178.978 2.965,-2.978 21.875,0 -2.958,2.978 -21.882,0 z" + id="path3225" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 2.965,-2.978 21.731,0" + id="path3227" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 -21.882,0" + id="path3229" /> + <path + style="fill:#c9c9b6" + d="m 141.178,181.132 9.995,0 0,4.857 -9.995,0 0,-4.857 z" + id="path3231" /> + <path + style="fill:none;stroke:#626248;stroke-width:0.02" + d="m 141.178,181.132 9.989,0 0,4.85 -9.989,0 0,-4.85" + id="path3233" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 142.527,183.567 7.01,0" + id="path3235" /> + <path + style="fill:#7a7a5a" + d="m 161.712,216 2.958,-2.985 0,-37.015 -2.958,2.978 0,37.022 z" + id="path3237" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 161.712,216 2.814,-2.834" + id="path3239" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 0,37.022" + id="path3241" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 140.105,213.559 21.6,0" + id="path3243" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 140.105,193.837 21.6,0" + id="path3245" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.60000002" + d="m 139.83,213.29 21.855,0" + id="path3247" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 139.83,193.562 21.855,0" + id="path3249" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.02" + d="m 141.178,185.727 0,-4.595 9.72,0" + id="path3251" /> + </g> + <text + xml:space="preserve" + style="font-size:6.16453981px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="52.2197" + y="266.53781" + id="text3232"><tspan + sodipodi:role="line" + id="tspan3234" + x="52.2197" + y="266.53781" + style="font-size:11.20825386px">Client</tspan></text> + <text + xml:space="preserve" + style="font-size:16.81238174px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="268.38885" + y="267.14429" + id="text3236"><tspan + sodipodi:role="line" + id="tspan3238" + x="268.38885" + y="267.14429" + style="font-size:11.20825386px">Peers</tspan></text> + <g + transform="matrix(0.75311128,0,0,0.75311128,66.977055,17.740053)" + id="g3183"> + <path + style="fill:#0078aa" + d="m 171.824,286.241 -0.049,-0.589 -0.13,-0.599 -0.22,-0.589 -0.309,-0.579 -0.4,-0.589 -0.479,-0.579 -0.569,-0.559 -0.639,-0.549 -0.738,-0.539 -0.809,-0.519 -0.888,-0.52 -0.969,-0.499 -1.038,-0.479 -1.108,-0.469 -1.178,-0.439 -1.228,-0.42 -1.297,-0.399 -1.368,-0.369 -1.408,-0.37 -1.457,-0.309 -1.507,-0.309 -1.558,-0.27 -1.587,-0.26 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.139 -1.717,-0.11 -1.737,-0.08 -1.747,-0.03 -1.767,-0.03 0,0 -1.747,0.03 -1.737,0.03 -1.737,0.08 -1.717,0.11 -1.707,0.139 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.26 -1.558,0.27 -1.517,0.309 -1.447,0.309 -1.408,0.37 -1.368,0.369 -1.297,0.399 -1.228,0.42 -1.178,0.439 -1.108,0.469 -1.038,0.479 -0.979,0.499 -0.878,0.52 -0.819,0.519 -0.728,0.539 -0.639,0.549 -0.569,0.559 -0.479,0.579 -0.4,0.589 -0.309,0.579 -0.23,0.589 -0.12,0.599 -0.049,0.589 0,0 0.049,0.609 0.12,0.588 0.23,0.589 0.309,0.589 0.4,0.579 0.479,0.579 0.569,0.559 0.639,0.549 0.728,0.54 0.819,0.529 0.878,0.499 0.979,0.519 1.038,0.479 1.108,0.459 1.178,0.429 1.228,0.43 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.329 1.517,0.3 1.558,0.269 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.17 1.707,0.119 1.717,0.11 1.737,0.08 1.737,0.05 1.747,0.01 0,0 1.767,-0.01 1.747,-0.05 1.737,-0.08 1.717,-0.11 1.707,-0.119 1.697,-0.17 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.269 1.507,-0.3 1.457,-0.329 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.43 1.178,-0.429 1.108,-0.459 1.038,-0.479 0.969,-0.519 0.888,-0.499 0.809,-0.529 0.738,-0.54 0.639,-0.549 0.569,-0.559 0.479,-0.579 0.4,-0.579 0.309,-0.589 0.22,-0.589 0.13,-0.588 0.049,-0.609 z" + id="path3185" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,286.061 -0.05,-0.599 -0.129,-0.569 -0.22,-0.589 -0.3,-0.569 -0.399,-0.579 -0.489,-0.559 -0.539,-0.549 -0.659,-0.549 -0.729,-0.529 -0.808,-0.529 -0.879,-0.489 -0.968,-0.49 -1.018,-0.489 -1.098,-0.449 -1.178,-0.439 -1.238,-0.399 -1.288,-0.4 -1.347,-0.369 -1.388,-0.34 -1.467,-0.329 -1.508,-0.289 -1.527,-0.27 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.16 -1.687,-0.139 -1.707,-0.08 -1.737,-0.09 -1.737,-0.05 -1.747,0 0,0 -1.737,0 -1.747,0.05 -1.727,0.09 -1.707,0.08 -1.697,0.139 -1.677,0.16 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.27 -1.518,0.289 -1.447,0.329 -1.388,0.34 -1.357,0.369 -1.308,0.4 -1.238,0.399 -1.158,0.439 -1.108,0.449 -1.028,0.489 -0.949,0.49 -0.868,0.489 -0.819,0.529 -0.738,0.529 -0.639,0.549 -0.559,0.549 -0.499,0.559 -0.37,0.579 -0.319,0.569 -0.22,0.589 -0.12,0.569 -0.049,0.599 0,0 0.049,0.589 0.12,0.579 0.22,0.579 0.319,0.569 0.37,0.579 0.499,0.559 0.559,0.549 0.639,0.529 0.738,0.549 0.819,0.529 0.868,0.499 0.949,0.479 1.028,0.48 1.108,0.459 1.158,0.429 1.238,0.409 1.308,0.38 1.357,0.389 1.388,0.339 1.447,0.32 1.518,0.309 1.527,0.26 1.577,0.239 1.627,0.23 1.647,0.18 1.677,0.149 1.697,0.15 1.707,0.09 1.727,0.08 1.747,0.04 1.737,0.02 0,0 1.747,-0.02 1.737,-0.04 1.737,-0.08 1.707,-0.09 1.687,-0.15 1.687,-0.149 1.647,-0.18 1.618,-0.23 1.587,-0.239 1.527,-0.26 1.508,-0.309 1.467,-0.32 1.388,-0.339 1.347,-0.389 1.288,-0.38 1.238,-0.409 1.178,-0.429 1.098,-0.459 1.018,-0.48 0.968,-0.479 0.879,-0.499 0.808,-0.529 0.729,-0.549 0.659,-0.529 0.539,-0.549 0.489,-0.559 0.399,-0.579 0.3,-0.569 0.22,-0.579 0.129,-0.579 0.05,-0.589" + id="path3187" /> + <path + style="fill:#0078aa" + d="m 102.676,269.969 0,16.491 68.749,0 0,-16.491 -68.749,0 z" + id="path3189" /> + <path + style="fill:#00b4ff" + d="m 171.824,269.739 -0.049,-0.579 -0.13,-0.598 -0.22,-0.589 -0.309,-0.589 -0.4,-0.589 -0.479,-0.569 -0.569,-0.559 -0.639,-0.559 -0.738,-0.53 -0.809,-0.529 -0.888,-0.509 -0.969,-0.519 -1.038,-0.469 -1.108,-0.469 -1.178,-0.439 -1.228,-0.41 -1.297,-0.399 -1.368,-0.379 -1.408,-0.35 -1.457,-0.329 -1.507,-0.31 -1.558,-0.259 -1.587,-0.27 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.119 -1.717,-0.11 -1.737,-0.08 -1.747,-0.06 -1.767,0 0,0 -1.747,0 -1.737,0.06 -1.737,0.08 -1.717,0.11 -1.707,0.119 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.27 -1.558,0.259 -1.517,0.31 -1.447,0.329 -1.408,0.35 -1.368,0.379 -1.297,0.399 -1.228,0.41 -1.178,0.439 -1.108,0.469 -1.038,0.469 -0.979,0.519 -0.878,0.509 -0.819,0.529 -0.728,0.53 -0.639,0.559 -0.569,0.559 -0.479,0.569 -0.4,0.589 -0.309,0.589 -0.23,0.589 -0.12,0.598 -0.049,0.579 0,0 0.049,0.609 0.12,0.599 0.23,0.589 0.309,0.579 0.4,0.589 0.479,0.559 0.569,0.579 0.639,0.549 0.728,0.539 0.819,0.529 0.878,0.51 0.979,0.509 1.038,0.479 1.108,0.439 1.178,0.459 1.228,0.42 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.319 1.517,0.309 1.558,0.27 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.16 1.707,0.119 1.717,0.11 1.737,0.09 1.737,0.05 1.747,0 0,0 1.767,0 1.747,-0.05 1.737,-0.09 1.717,-0.11 1.707,-0.119 1.697,-0.16 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.27 1.507,-0.309 1.457,-0.319 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.42 1.178,-0.459 1.108,-0.439 1.038,-0.479 0.969,-0.509 0.888,-0.51 0.809,-0.529 0.738,-0.539 0.639,-0.549 0.569,-0.579 0.479,-0.559 0.4,-0.589 0.309,-0.579 0.22,-0.589 0.13,-0.599 0.049,-0.609 z" + id="path3191" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 -0.05,-0.599 -0.129,-0.589 -0.22,-0.559 -0.3,-0.589 -0.399,-0.569 -0.489,-0.559 -0.539,-0.539 -0.659,-0.559 -0.729,-0.519 -0.808,-0.539 -0.879,-0.5 -0.968,-0.499 -1.018,-0.469 -1.098,-0.439 -1.178,-0.459 -1.238,-0.4 -1.288,-0.389 -1.347,-0.369 -1.388,-0.34 -1.467,-0.339 -1.508,-0.29 -1.527,-0.269 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.14 -1.687,-0.139 -1.707,-0.1 -1.737,-0.09 -1.737,-0.04 -1.747,-0.02 0,0 -1.737,0.02 -1.747,0.04 -1.727,0.09 -1.707,0.1 -1.697,0.139 -1.677,0.14 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.269 -1.518,0.29 -1.447,0.339 -1.388,0.34 -1.357,0.369 -1.308,0.389 -1.238,0.4 -1.158,0.459 -1.108,0.439 -1.028,0.469 -0.949,0.499 -0.868,0.5 -0.819,0.539 -0.738,0.519 -0.639,0.559 -0.559,0.539 -0.499,0.559 -0.37,0.569 -0.319,0.589 -0.22,0.559 -0.12,0.589 -0.049,0.599 0,0 0.049,0.579 0.12,0.589 0.22,0.559 0.319,0.579 0.37,0.579 0.499,0.559 0.559,0.559 0.639,0.549 0.738,0.529 0.819,0.519 0.868,0.509 0.949,0.469 1.028,0.489 1.108,0.45 1.158,0.439 1.238,0.409 1.308,0.389 1.357,0.37 1.388,0.339 1.447,0.33 1.518,0.309 1.527,0.25 1.577,0.259 1.627,0.21 1.647,0.189 1.677,0.17 1.697,0.14 1.707,0.08 1.727,0.08 1.747,0.05 1.737,0.01 0,0 1.747,-0.01 1.737,-0.05 1.737,-0.08 1.707,-0.08 1.687,-0.14 1.687,-0.17 1.647,-0.189 1.618,-0.21 1.587,-0.259 1.527,-0.25 1.508,-0.309 1.467,-0.33 1.388,-0.339 1.347,-0.37 1.288,-0.389 1.238,-0.409 1.178,-0.439 1.098,-0.45 1.018,-0.489 0.968,-0.469 0.879,-0.509 0.808,-0.519 0.729,-0.529 0.659,-0.549 0.539,-0.559 0.489,-0.559 0.399,-0.579 0.3,-0.579 0.22,-0.559 0.129,-0.589 0.05,-0.579" + id="path3193" /> + <path + style="fill:#000000" + d="m 137.874,267.074 5.041,1.657 12.169,-4.961 5.44,1.657 -2.955,-4.123 -14.225,0 5.85,1.248 -11.32,4.522 z" + id="path3195" /> + <path + style="fill:#000000" + d="m 135.768,271.626 -5.002,-1.657 -11.749,4.961 -5.86,-1.667 2.935,4.542 14.674,0 -6.299,-1.657 11.301,-4.522 z" + id="path3197" /> + <path + style="fill:#000000" + d="m 114.405,262.552 5.031,-1.657 12.149,4.532 5.46,-1.228 -2.925,4.113 -14.265,0 5.86,-1.238 -11.31,-4.522 z" + id="path3199" /> + <path + style="fill:#000000" + d="m 159.676,276.568 -5.021,1.647 -11.74,-4.952 -5.87,1.667 2.935,-4.132 14.675,0 -6.299,1.217 11.32,4.553 z" + id="path3201" /> + <path + style="fill:#ffffff" + d="m 138.293,267.483 5.051,1.648 12.149,-4.932 5.451,1.657 -2.935,-4.142 -14.265,0 5.879,1.237 -11.33,4.532 z" + id="path3203" /> + <path + style="fill:#ffffff" + d="m 136.217,272.015 -5.051,-1.637 -11.73,4.952 -5.87,-1.657 2.935,4.542 14.665,0 -6.269,-1.647 11.32,-4.553 z" + id="path3205" /> + <path + style="fill:#ffffff" + d="m 114.834,262.951 5.021,-1.647 12.159,4.552 5.451,-1.258 -2.935,4.133 -14.255,0 5.879,-1.248 -11.32,-4.532 z" + id="path3207" /> + <path + style="fill:#ffffff" + d="m 160.105,276.977 -5.021,1.657 -11.74,-4.961 -5.879,1.657 2.925,-4.113 14.694,0 -6.289,1.228 11.31,4.532 z" + id="path3209" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 102.676,269.57 0,16.471" + id="path3211" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 0,16.471" + id="path3213" /> + <path + style="fill:#000000" + d="m 124.467,283.995 7.547,0 4.612,3.713 4.602,-3.713 7.128,0 0,-1.648 5.041,2.456 -5.041,2.486 0,-1.647 -6.279,0 -4.203,2.885 4.203,3.284 6.279,0 0,-2.037 5.041,2.875 -5.041,2.486 0,-1.667 -7.128,0 -4.602,-3.694 -4.612,3.694 -7.547,0 0,1.667 -5.031,-2.486 5.031,-2.875 0,2.037 6.699,0 4.202,-2.875 -4.202,-3.294 -6.699,0 0,1.647 -5.031,-2.486 5.031,-2.456 0,1.648 z" + id="path3215" /> + <path + style="fill:#ffffff" + d="m 124.897,284.394 7.536,0 4.612,3.703 4.602,-3.703 7.148,0 0,-1.647 5.011,2.485 -5.011,2.476 0,-1.647 -6.299,0 -4.203,2.875 4.203,3.294 6.299,0 0,-2.056 5.011,2.885 -5.011,2.475 0,-1.657 -7.148,0 -4.602,-3.703 -4.612,3.703 -7.536,0 0,1.657 -5.042,-2.475 5.042,-2.885 0,2.056 6.688,0 4.183,-2.885 -4.183,-3.284 -6.688,0 0,1.647 -5.042,-2.476 5.042,-2.485 0,1.647 z" + id="path3217" /> + </g> + <text + xml:space="preserve" + style="font-size:6.16453981px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="143.47925" + y="266.56204" + id="text3232-1"><tspan + sodipodi:role="line" + id="tspan3234-7" + x="143.47925" + y="266.56204" + style="font-size:11.20825386px">I2PTunnel</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m -23.12158,114.55692 106.149072,0" + id="path3614" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 176.56479,114.55692 140.83144,0" + id="path4836" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> + <g + id="g3219-0" + transform="translate(134.85585,-107.12416)"> + <path + style="fill:#b7b79d" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0 z" + id="path3221-3" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0" + id="path3223-4" /> + <path + style="fill:#c9c9b6" + d="m 139.83,178.978 2.965,-2.978 21.875,0 -2.958,2.978 -21.882,0 z" + id="path3225-0" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 2.965,-2.978 21.731,0" + id="path3227-3" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 -21.882,0" + id="path3229-9" /> + <path + style="fill:#c9c9b6" + d="m 141.178,181.132 9.995,0 0,4.857 -9.995,0 0,-4.857 z" + id="path3231-1" /> + <path + style="fill:none;stroke:#626248;stroke-width:0.02" + d="m 141.178,181.132 9.989,0 0,4.85 -9.989,0 0,-4.85" + id="path3233-9" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 142.527,183.567 7.01,0" + id="path3235-6" /> + <path + style="fill:#7a7a5a" + d="m 161.712,216 2.958,-2.985 0,-37.015 -2.958,2.978 0,37.022 z" + id="path3237-9" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 161.712,216 2.814,-2.834" + id="path3239-3" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 0,37.022" + id="path3241-3" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 140.105,213.559 21.6,0" + id="path3243-8" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 140.105,193.837 21.6,0" + id="path3245-0" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.60000002" + d="m 139.83,213.29 21.855,0" + id="path3247-5" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 139.83,193.562 21.855,0" + id="path3249-6" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.02" + d="m 141.178,185.727 0,-4.595 9.72,0" + id="path3251-6" /> + </g> + <g + id="g3219-6" + transform="translate(134.38113,-56.133163)"> + <path + style="fill:#b7b79d" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0 z" + id="path3221-9" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0" + id="path3223-8" /> + <path + style="fill:#c9c9b6" + d="m 139.83,178.978 2.965,-2.978 21.875,0 -2.958,2.978 -21.882,0 z" + id="path3225-7" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 2.965,-2.978 21.731,0" + id="path3227-2" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 -21.882,0" + id="path3229-8" /> + <path + style="fill:#c9c9b6" + d="m 141.178,181.132 9.995,0 0,4.857 -9.995,0 0,-4.857 z" + id="path3231-2" /> + <path + style="fill:none;stroke:#626248;stroke-width:0.02" + d="m 141.178,181.132 9.989,0 0,4.85 -9.989,0 0,-4.85" + id="path3233-99" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 142.527,183.567 7.01,0" + id="path3235-60" /> + <path + style="fill:#7a7a5a" + d="m 161.712,216 2.958,-2.985 0,-37.015 -2.958,2.978 0,37.022 z" + id="path3237-2" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 161.712,216 2.814,-2.834" + id="path3239-7" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 0,37.022" + id="path3241-6" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 140.105,213.559 21.6,0" + id="path3243-1" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 140.105,193.837 21.6,0" + id="path3245-3" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.60000002" + d="m 139.83,213.29 21.855,0" + id="path3247-2" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 139.83,193.562 21.855,0" + id="path3249-1" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.02" + d="m 141.178,185.727 0,-4.595 9.72,0" + id="path3251-5" /> + </g> + <text + xml:space="preserve" + style="font-size:6.16453981px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="280.74731" + y="181.24799" + id="text3232-2"><tspan + sodipodi:role="line" + id="tspan3234-0" + x="280.74731" + y="181.24799" + style="font-size:11.20825386px">...</tspan></text> + <g + transform="matrix(0.75311128,0,0,0.75311128,66.155046,-65.60384)" + id="g3183-0"> + <path + style="fill:#0078aa" + d="m 171.824,286.241 -0.049,-0.589 -0.13,-0.599 -0.22,-0.589 -0.309,-0.579 -0.4,-0.589 -0.479,-0.579 -0.569,-0.559 -0.639,-0.549 -0.738,-0.539 -0.809,-0.519 -0.888,-0.52 -0.969,-0.499 -1.038,-0.479 -1.108,-0.469 -1.178,-0.439 -1.228,-0.42 -1.297,-0.399 -1.368,-0.369 -1.408,-0.37 -1.457,-0.309 -1.507,-0.309 -1.558,-0.27 -1.587,-0.26 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.139 -1.717,-0.11 -1.737,-0.08 -1.747,-0.03 -1.767,-0.03 0,0 -1.747,0.03 -1.737,0.03 -1.737,0.08 -1.717,0.11 -1.707,0.139 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.26 -1.558,0.27 -1.517,0.309 -1.447,0.309 -1.408,0.37 -1.368,0.369 -1.297,0.399 -1.228,0.42 -1.178,0.439 -1.108,0.469 -1.038,0.479 -0.979,0.499 -0.878,0.52 -0.819,0.519 -0.728,0.539 -0.639,0.549 -0.569,0.559 -0.479,0.579 -0.4,0.589 -0.309,0.579 -0.23,0.589 -0.12,0.599 -0.049,0.589 0,0 0.049,0.609 0.12,0.588 0.23,0.589 0.309,0.589 0.4,0.579 0.479,0.579 0.569,0.559 0.639,0.549 0.728,0.54 0.819,0.529 0.878,0.499 0.979,0.519 1.038,0.479 1.108,0.459 1.178,0.429 1.228,0.43 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.329 1.517,0.3 1.558,0.269 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.17 1.707,0.119 1.717,0.11 1.737,0.08 1.737,0.05 1.747,0.01 0,0 1.767,-0.01 1.747,-0.05 1.737,-0.08 1.717,-0.11 1.707,-0.119 1.697,-0.17 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.269 1.507,-0.3 1.457,-0.329 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.43 1.178,-0.429 1.108,-0.459 1.038,-0.479 0.969,-0.519 0.888,-0.499 0.809,-0.529 0.738,-0.54 0.639,-0.549 0.569,-0.559 0.479,-0.579 0.4,-0.579 0.309,-0.589 0.22,-0.589 0.13,-0.588 0.049,-0.609 z" + id="path3185-2" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,286.061 -0.05,-0.599 -0.129,-0.569 -0.22,-0.589 -0.3,-0.569 -0.399,-0.579 -0.489,-0.559 -0.539,-0.549 -0.659,-0.549 -0.729,-0.529 -0.808,-0.529 -0.879,-0.489 -0.968,-0.49 -1.018,-0.489 -1.098,-0.449 -1.178,-0.439 -1.238,-0.399 -1.288,-0.4 -1.347,-0.369 -1.388,-0.34 -1.467,-0.329 -1.508,-0.289 -1.527,-0.27 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.16 -1.687,-0.139 -1.707,-0.08 -1.737,-0.09 -1.737,-0.05 -1.747,0 0,0 -1.737,0 -1.747,0.05 -1.727,0.09 -1.707,0.08 -1.697,0.139 -1.677,0.16 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.27 -1.518,0.289 -1.447,0.329 -1.388,0.34 -1.357,0.369 -1.308,0.4 -1.238,0.399 -1.158,0.439 -1.108,0.449 -1.028,0.489 -0.949,0.49 -0.868,0.489 -0.819,0.529 -0.738,0.529 -0.639,0.549 -0.559,0.549 -0.499,0.559 -0.37,0.579 -0.319,0.569 -0.22,0.589 -0.12,0.569 -0.049,0.599 0,0 0.049,0.589 0.12,0.579 0.22,0.579 0.319,0.569 0.37,0.579 0.499,0.559 0.559,0.549 0.639,0.529 0.738,0.549 0.819,0.529 0.868,0.499 0.949,0.479 1.028,0.48 1.108,0.459 1.158,0.429 1.238,0.409 1.308,0.38 1.357,0.389 1.388,0.339 1.447,0.32 1.518,0.309 1.527,0.26 1.577,0.239 1.627,0.23 1.647,0.18 1.677,0.149 1.697,0.15 1.707,0.09 1.727,0.08 1.747,0.04 1.737,0.02 0,0 1.747,-0.02 1.737,-0.04 1.737,-0.08 1.707,-0.09 1.687,-0.15 1.687,-0.149 1.647,-0.18 1.618,-0.23 1.587,-0.239 1.527,-0.26 1.508,-0.309 1.467,-0.32 1.388,-0.339 1.347,-0.389 1.288,-0.38 1.238,-0.409 1.178,-0.429 1.098,-0.459 1.018,-0.48 0.968,-0.479 0.879,-0.499 0.808,-0.529 0.729,-0.549 0.659,-0.529 0.539,-0.549 0.489,-0.559 0.399,-0.579 0.3,-0.569 0.22,-0.579 0.129,-0.579 0.05,-0.589" + id="path3187-9" /> + <path + style="fill:#0078aa" + d="m 102.676,269.969 0,16.491 68.749,0 0,-16.491 -68.749,0 z" + id="path3189-4" /> + <path + style="fill:#00b4ff" + d="m 171.824,269.739 -0.049,-0.579 -0.13,-0.598 -0.22,-0.589 -0.309,-0.589 -0.4,-0.589 -0.479,-0.569 -0.569,-0.559 -0.639,-0.559 -0.738,-0.53 -0.809,-0.529 -0.888,-0.509 -0.969,-0.519 -1.038,-0.469 -1.108,-0.469 -1.178,-0.439 -1.228,-0.41 -1.297,-0.399 -1.368,-0.379 -1.408,-0.35 -1.457,-0.329 -1.507,-0.31 -1.558,-0.259 -1.587,-0.27 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.119 -1.717,-0.11 -1.737,-0.08 -1.747,-0.06 -1.767,0 0,0 -1.747,0 -1.737,0.06 -1.737,0.08 -1.717,0.11 -1.707,0.119 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.27 -1.558,0.259 -1.517,0.31 -1.447,0.329 -1.408,0.35 -1.368,0.379 -1.297,0.399 -1.228,0.41 -1.178,0.439 -1.108,0.469 -1.038,0.469 -0.979,0.519 -0.878,0.509 -0.819,0.529 -0.728,0.53 -0.639,0.559 -0.569,0.559 -0.479,0.569 -0.4,0.589 -0.309,0.589 -0.23,0.589 -0.12,0.598 -0.049,0.579 0,0 0.049,0.609 0.12,0.599 0.23,0.589 0.309,0.579 0.4,0.589 0.479,0.559 0.569,0.579 0.639,0.549 0.728,0.539 0.819,0.529 0.878,0.51 0.979,0.509 1.038,0.479 1.108,0.439 1.178,0.459 1.228,0.42 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.319 1.517,0.309 1.558,0.27 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.16 1.707,0.119 1.717,0.11 1.737,0.09 1.737,0.05 1.747,0 0,0 1.767,0 1.747,-0.05 1.737,-0.09 1.717,-0.11 1.707,-0.119 1.697,-0.16 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.27 1.507,-0.309 1.457,-0.319 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.42 1.178,-0.459 1.108,-0.439 1.038,-0.479 0.969,-0.509 0.888,-0.51 0.809,-0.529 0.738,-0.539 0.639,-0.549 0.569,-0.579 0.479,-0.559 0.4,-0.589 0.309,-0.579 0.22,-0.589 0.13,-0.599 0.049,-0.609 z" + id="path3191-3" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 -0.05,-0.599 -0.129,-0.589 -0.22,-0.559 -0.3,-0.589 -0.399,-0.569 -0.489,-0.559 -0.539,-0.539 -0.659,-0.559 -0.729,-0.519 -0.808,-0.539 -0.879,-0.5 -0.968,-0.499 -1.018,-0.469 -1.098,-0.439 -1.178,-0.459 -1.238,-0.4 -1.288,-0.389 -1.347,-0.369 -1.388,-0.34 -1.467,-0.339 -1.508,-0.29 -1.527,-0.269 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.14 -1.687,-0.139 -1.707,-0.1 -1.737,-0.09 -1.737,-0.04 -1.747,-0.02 0,0 -1.737,0.02 -1.747,0.04 -1.727,0.09 -1.707,0.1 -1.697,0.139 -1.677,0.14 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.269 -1.518,0.29 -1.447,0.339 -1.388,0.34 -1.357,0.369 -1.308,0.389 -1.238,0.4 -1.158,0.459 -1.108,0.439 -1.028,0.469 -0.949,0.499 -0.868,0.5 -0.819,0.539 -0.738,0.519 -0.639,0.559 -0.559,0.539 -0.499,0.559 -0.37,0.569 -0.319,0.589 -0.22,0.559 -0.12,0.589 -0.049,0.599 0,0 0.049,0.579 0.12,0.589 0.22,0.559 0.319,0.579 0.37,0.579 0.499,0.559 0.559,0.559 0.639,0.549 0.738,0.529 0.819,0.519 0.868,0.509 0.949,0.469 1.028,0.489 1.108,0.45 1.158,0.439 1.238,0.409 1.308,0.389 1.357,0.37 1.388,0.339 1.447,0.33 1.518,0.309 1.527,0.25 1.577,0.259 1.627,0.21 1.647,0.189 1.677,0.17 1.697,0.14 1.707,0.08 1.727,0.08 1.747,0.05 1.737,0.01 0,0 1.747,-0.01 1.737,-0.05 1.737,-0.08 1.707,-0.08 1.687,-0.14 1.687,-0.17 1.647,-0.189 1.618,-0.21 1.587,-0.259 1.527,-0.25 1.508,-0.309 1.467,-0.33 1.388,-0.339 1.347,-0.37 1.288,-0.389 1.238,-0.409 1.178,-0.439 1.098,-0.45 1.018,-0.489 0.968,-0.469 0.879,-0.509 0.808,-0.519 0.729,-0.529 0.659,-0.549 0.539,-0.559 0.489,-0.559 0.399,-0.579 0.3,-0.579 0.22,-0.559 0.129,-0.589 0.05,-0.579" + id="path3193-5" /> + <path + style="fill:#000000" + d="m 137.874,267.074 5.041,1.657 12.169,-4.961 5.44,1.657 -2.955,-4.123 -14.225,0 5.85,1.248 -11.32,4.522 z" + id="path3195-1" /> + <path + style="fill:#000000" + d="m 135.768,271.626 -5.002,-1.657 -11.749,4.961 -5.86,-1.667 2.935,4.542 14.674,0 -6.299,-1.657 11.301,-4.522 z" + id="path3197-7" /> + <path + style="fill:#000000" + d="m 114.405,262.552 5.031,-1.657 12.149,4.532 5.46,-1.228 -2.925,4.113 -14.265,0 5.86,-1.238 -11.31,-4.522 z" + id="path3199-4" /> + <path + style="fill:#000000" + d="m 159.676,276.568 -5.021,1.647 -11.74,-4.952 -5.87,1.667 2.935,-4.132 14.675,0 -6.299,1.217 11.32,4.553 z" + id="path3201-3" /> + <path + style="fill:#ffffff" + d="m 138.293,267.483 5.051,1.648 12.149,-4.932 5.451,1.657 -2.935,-4.142 -14.265,0 5.879,1.237 -11.33,4.532 z" + id="path3203-1" /> + <path + style="fill:#ffffff" + d="m 136.217,272.015 -5.051,-1.637 -11.73,4.952 -5.87,-1.657 2.935,4.542 14.665,0 -6.269,-1.647 11.32,-4.553 z" + id="path3205-4" /> + <path + style="fill:#ffffff" + d="m 114.834,262.951 5.021,-1.647 12.159,4.552 5.451,-1.258 -2.935,4.133 -14.255,0 5.879,-1.248 -11.32,-4.532 z" + id="path3207-6" /> + <path + style="fill:#ffffff" + d="m 160.105,276.977 -5.021,1.657 -11.74,-4.961 -5.879,1.657 2.925,-4.113 14.694,0 -6.289,1.228 11.31,4.532 z" + id="path3209-9" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 102.676,269.57 0,16.471" + id="path3211-4" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 0,16.471" + id="path3213-2" /> + <path + style="fill:#000000" + d="m 124.467,283.995 7.547,0 4.612,3.713 4.602,-3.713 7.128,0 0,-1.648 5.041,2.456 -5.041,2.486 0,-1.647 -6.279,0 -4.203,2.885 4.203,3.284 6.279,0 0,-2.037 5.041,2.875 -5.041,2.486 0,-1.667 -7.128,0 -4.602,-3.694 -4.612,3.694 -7.547,0 0,1.667 -5.031,-2.486 5.031,-2.875 0,2.037 6.699,0 4.202,-2.875 -4.202,-3.294 -6.699,0 0,1.647 -5.031,-2.486 5.031,-2.456 0,1.648 z" + id="path3215-2" /> + <path + style="fill:#ffffff" + d="m 124.897,284.394 7.536,0 4.612,3.703 4.602,-3.703 7.148,0 0,-1.647 5.011,2.485 -5.011,2.476 0,-1.647 -6.299,0 -4.203,2.875 4.203,3.294 6.299,0 0,-2.056 5.011,2.885 -5.011,2.475 0,-1.657 -7.148,0 -4.602,-3.703 -4.612,3.703 -7.536,0 0,1.657 -5.042,-2.475 5.042,-2.885 0,2.056 6.688,0 4.183,-2.885 -4.183,-3.284 -6.688,0 0,1.647 -5.042,-2.476 5.042,-2.485 0,1.647 z" + id="path3217-6" /> + </g> + <g + transform="matrix(0.75311128,0,0,0.75311128,66.040764,-121.3287)" + id="g3183-1"> + <path + style="fill:#0078aa" + d="m 171.824,286.241 -0.049,-0.589 -0.13,-0.599 -0.22,-0.589 -0.309,-0.579 -0.4,-0.589 -0.479,-0.579 -0.569,-0.559 -0.639,-0.549 -0.738,-0.539 -0.809,-0.519 -0.888,-0.52 -0.969,-0.499 -1.038,-0.479 -1.108,-0.469 -1.178,-0.439 -1.228,-0.42 -1.297,-0.399 -1.368,-0.369 -1.408,-0.37 -1.457,-0.309 -1.507,-0.309 -1.558,-0.27 -1.587,-0.26 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.139 -1.717,-0.11 -1.737,-0.08 -1.747,-0.03 -1.767,-0.03 0,0 -1.747,0.03 -1.737,0.03 -1.737,0.08 -1.717,0.11 -1.707,0.139 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.26 -1.558,0.27 -1.517,0.309 -1.447,0.309 -1.408,0.37 -1.368,0.369 -1.297,0.399 -1.228,0.42 -1.178,0.439 -1.108,0.469 -1.038,0.479 -0.979,0.499 -0.878,0.52 -0.819,0.519 -0.728,0.539 -0.639,0.549 -0.569,0.559 -0.479,0.579 -0.4,0.589 -0.309,0.579 -0.23,0.589 -0.12,0.599 -0.049,0.589 0,0 0.049,0.609 0.12,0.588 0.23,0.589 0.309,0.589 0.4,0.579 0.479,0.579 0.569,0.559 0.639,0.549 0.728,0.54 0.819,0.529 0.878,0.499 0.979,0.519 1.038,0.479 1.108,0.459 1.178,0.429 1.228,0.43 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.329 1.517,0.3 1.558,0.269 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.17 1.707,0.119 1.717,0.11 1.737,0.08 1.737,0.05 1.747,0.01 0,0 1.767,-0.01 1.747,-0.05 1.737,-0.08 1.717,-0.11 1.707,-0.119 1.697,-0.17 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.269 1.507,-0.3 1.457,-0.329 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.43 1.178,-0.429 1.108,-0.459 1.038,-0.479 0.969,-0.519 0.888,-0.499 0.809,-0.529 0.738,-0.54 0.639,-0.549 0.569,-0.559 0.479,-0.579 0.4,-0.579 0.309,-0.589 0.22,-0.589 0.13,-0.588 0.049,-0.609 z" + id="path3185-28" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,286.061 -0.05,-0.599 -0.129,-0.569 -0.22,-0.589 -0.3,-0.569 -0.399,-0.579 -0.489,-0.559 -0.539,-0.549 -0.659,-0.549 -0.729,-0.529 -0.808,-0.529 -0.879,-0.489 -0.968,-0.49 -1.018,-0.489 -1.098,-0.449 -1.178,-0.439 -1.238,-0.399 -1.288,-0.4 -1.347,-0.369 -1.388,-0.34 -1.467,-0.329 -1.508,-0.289 -1.527,-0.27 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.16 -1.687,-0.139 -1.707,-0.08 -1.737,-0.09 -1.737,-0.05 -1.747,0 0,0 -1.737,0 -1.747,0.05 -1.727,0.09 -1.707,0.08 -1.697,0.139 -1.677,0.16 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.27 -1.518,0.289 -1.447,0.329 -1.388,0.34 -1.357,0.369 -1.308,0.4 -1.238,0.399 -1.158,0.439 -1.108,0.449 -1.028,0.489 -0.949,0.49 -0.868,0.489 -0.819,0.529 -0.738,0.529 -0.639,0.549 -0.559,0.549 -0.499,0.559 -0.37,0.579 -0.319,0.569 -0.22,0.589 -0.12,0.569 -0.049,0.599 0,0 0.049,0.589 0.12,0.579 0.22,0.579 0.319,0.569 0.37,0.579 0.499,0.559 0.559,0.549 0.639,0.529 0.738,0.549 0.819,0.529 0.868,0.499 0.949,0.479 1.028,0.48 1.108,0.459 1.158,0.429 1.238,0.409 1.308,0.38 1.357,0.389 1.388,0.339 1.447,0.32 1.518,0.309 1.527,0.26 1.577,0.239 1.627,0.23 1.647,0.18 1.677,0.149 1.697,0.15 1.707,0.09 1.727,0.08 1.747,0.04 1.737,0.02 0,0 1.747,-0.02 1.737,-0.04 1.737,-0.08 1.707,-0.09 1.687,-0.15 1.687,-0.149 1.647,-0.18 1.618,-0.23 1.587,-0.239 1.527,-0.26 1.508,-0.309 1.467,-0.32 1.388,-0.339 1.347,-0.389 1.288,-0.38 1.238,-0.409 1.178,-0.429 1.098,-0.459 1.018,-0.48 0.968,-0.479 0.879,-0.499 0.808,-0.529 0.729,-0.549 0.659,-0.529 0.539,-0.549 0.489,-0.559 0.399,-0.579 0.3,-0.569 0.22,-0.579 0.129,-0.579 0.05,-0.589" + id="path3187-8" /> + <path + style="fill:#0078aa" + d="m 102.676,269.969 0,16.491 68.749,0 0,-16.491 -68.749,0 z" + id="path3189-9" /> + <path + style="fill:#00b4ff" + d="m 171.824,269.739 -0.049,-0.579 -0.13,-0.598 -0.22,-0.589 -0.309,-0.589 -0.4,-0.589 -0.479,-0.569 -0.569,-0.559 -0.639,-0.559 -0.738,-0.53 -0.809,-0.529 -0.888,-0.509 -0.969,-0.519 -1.038,-0.469 -1.108,-0.469 -1.178,-0.439 -1.228,-0.41 -1.297,-0.399 -1.368,-0.379 -1.408,-0.35 -1.457,-0.329 -1.507,-0.31 -1.558,-0.259 -1.587,-0.27 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.119 -1.717,-0.11 -1.737,-0.08 -1.747,-0.06 -1.767,0 0,0 -1.747,0 -1.737,0.06 -1.737,0.08 -1.717,0.11 -1.707,0.119 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.27 -1.558,0.259 -1.517,0.31 -1.447,0.329 -1.408,0.35 -1.368,0.379 -1.297,0.399 -1.228,0.41 -1.178,0.439 -1.108,0.469 -1.038,0.469 -0.979,0.519 -0.878,0.509 -0.819,0.529 -0.728,0.53 -0.639,0.559 -0.569,0.559 -0.479,0.569 -0.4,0.589 -0.309,0.589 -0.23,0.589 -0.12,0.598 -0.049,0.579 0,0 0.049,0.609 0.12,0.599 0.23,0.589 0.309,0.579 0.4,0.589 0.479,0.559 0.569,0.579 0.639,0.549 0.728,0.539 0.819,0.529 0.878,0.51 0.979,0.509 1.038,0.479 1.108,0.439 1.178,0.459 1.228,0.42 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.319 1.517,0.309 1.558,0.27 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.16 1.707,0.119 1.717,0.11 1.737,0.09 1.737,0.05 1.747,0 0,0 1.767,0 1.747,-0.05 1.737,-0.09 1.717,-0.11 1.707,-0.119 1.697,-0.16 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.27 1.507,-0.309 1.457,-0.319 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.42 1.178,-0.459 1.108,-0.439 1.038,-0.479 0.969,-0.509 0.888,-0.51 0.809,-0.529 0.738,-0.539 0.639,-0.549 0.569,-0.579 0.479,-0.559 0.4,-0.589 0.309,-0.579 0.22,-0.589 0.13,-0.599 0.049,-0.609 z" + id="path3191-2" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 -0.05,-0.599 -0.129,-0.589 -0.22,-0.559 -0.3,-0.589 -0.399,-0.569 -0.489,-0.559 -0.539,-0.539 -0.659,-0.559 -0.729,-0.519 -0.808,-0.539 -0.879,-0.5 -0.968,-0.499 -1.018,-0.469 -1.098,-0.439 -1.178,-0.459 -1.238,-0.4 -1.288,-0.389 -1.347,-0.369 -1.388,-0.34 -1.467,-0.339 -1.508,-0.29 -1.527,-0.269 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.14 -1.687,-0.139 -1.707,-0.1 -1.737,-0.09 -1.737,-0.04 -1.747,-0.02 0,0 -1.737,0.02 -1.747,0.04 -1.727,0.09 -1.707,0.1 -1.697,0.139 -1.677,0.14 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.269 -1.518,0.29 -1.447,0.339 -1.388,0.34 -1.357,0.369 -1.308,0.389 -1.238,0.4 -1.158,0.459 -1.108,0.439 -1.028,0.469 -0.949,0.499 -0.868,0.5 -0.819,0.539 -0.738,0.519 -0.639,0.559 -0.559,0.539 -0.499,0.559 -0.37,0.569 -0.319,0.589 -0.22,0.559 -0.12,0.589 -0.049,0.599 0,0 0.049,0.579 0.12,0.589 0.22,0.559 0.319,0.579 0.37,0.579 0.499,0.559 0.559,0.559 0.639,0.549 0.738,0.529 0.819,0.519 0.868,0.509 0.949,0.469 1.028,0.489 1.108,0.45 1.158,0.439 1.238,0.409 1.308,0.389 1.357,0.37 1.388,0.339 1.447,0.33 1.518,0.309 1.527,0.25 1.577,0.259 1.627,0.21 1.647,0.189 1.677,0.17 1.697,0.14 1.707,0.08 1.727,0.08 1.747,0.05 1.737,0.01 0,0 1.747,-0.01 1.737,-0.05 1.737,-0.08 1.707,-0.08 1.687,-0.14 1.687,-0.17 1.647,-0.189 1.618,-0.21 1.587,-0.259 1.527,-0.25 1.508,-0.309 1.467,-0.33 1.388,-0.339 1.347,-0.37 1.288,-0.389 1.238,-0.409 1.178,-0.439 1.098,-0.45 1.018,-0.489 0.968,-0.469 0.879,-0.509 0.808,-0.519 0.729,-0.529 0.659,-0.549 0.539,-0.559 0.489,-0.559 0.399,-0.579 0.3,-0.579 0.22,-0.559 0.129,-0.589 0.05,-0.579" + id="path3193-8" /> + <path + style="fill:#000000" + d="m 137.874,267.074 5.041,1.657 12.169,-4.961 5.44,1.657 -2.955,-4.123 -14.225,0 5.85,1.248 -11.32,4.522 z" + id="path3195-8" /> + <path + style="fill:#000000" + d="m 135.768,271.626 -5.002,-1.657 -11.749,4.961 -5.86,-1.667 2.935,4.542 14.674,0 -6.299,-1.657 11.301,-4.522 z" + id="path3197-8" /> + <path + style="fill:#000000" + d="m 114.405,262.552 5.031,-1.657 12.149,4.532 5.46,-1.228 -2.925,4.113 -14.265,0 5.86,-1.238 -11.31,-4.522 z" + id="path3199-6" /> + <path + style="fill:#000000" + d="m 159.676,276.568 -5.021,1.647 -11.74,-4.952 -5.87,1.667 2.935,-4.132 14.675,0 -6.299,1.217 11.32,4.553 z" + id="path3201-8" /> + <path + style="fill:#ffffff" + d="m 138.293,267.483 5.051,1.648 12.149,-4.932 5.451,1.657 -2.935,-4.142 -14.265,0 5.879,1.237 -11.33,4.532 z" + id="path3203-3" /> + <path + style="fill:#ffffff" + d="m 136.217,272.015 -5.051,-1.637 -11.73,4.952 -5.87,-1.657 2.935,4.542 14.665,0 -6.269,-1.647 11.32,-4.553 z" + id="path3205-8" /> + <path + style="fill:#ffffff" + d="m 114.834,262.951 5.021,-1.647 12.159,4.552 5.451,-1.258 -2.935,4.133 -14.255,0 5.879,-1.248 -11.32,-4.532 z" + id="path3207-3" /> + <path + style="fill:#ffffff" + d="m 160.105,276.977 -5.021,1.657 -11.74,-4.961 -5.879,1.657 2.925,-4.113 14.694,0 -6.289,1.228 11.31,4.532 z" + id="path3209-3" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 102.676,269.57 0,16.471" + id="path3211-3" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 0,16.471" + id="path3213-8" /> + <path + style="fill:#000000" + d="m 124.467,283.995 7.547,0 4.612,3.713 4.602,-3.713 7.128,0 0,-1.648 5.041,2.456 -5.041,2.486 0,-1.647 -6.279,0 -4.203,2.885 4.203,3.284 6.279,0 0,-2.037 5.041,2.875 -5.041,2.486 0,-1.667 -7.128,0 -4.602,-3.694 -4.612,3.694 -7.547,0 0,1.667 -5.031,-2.486 5.031,-2.875 0,2.037 6.699,0 4.202,-2.875 -4.202,-3.294 -6.699,0 0,1.647 -5.031,-2.486 5.031,-2.456 0,1.648 z" + id="path3215-0" /> + <path + style="fill:#ffffff" + d="m 124.897,284.394 7.536,0 4.612,3.703 4.602,-3.703 7.148,0 0,-1.647 5.011,2.485 -5.011,2.476 0,-1.647 -6.299,0 -4.203,2.875 4.203,3.294 6.299,0 0,-2.056 5.011,2.885 -5.011,2.475 0,-1.657 -7.148,0 -4.602,-3.703 -4.612,3.703 -7.536,0 0,1.657 -5.042,-2.475 5.042,-2.885 0,2.056 6.688,0 4.183,-2.885 -4.183,-3.284 -6.688,0 0,1.647 -5.042,-2.476 5.042,-2.485 0,1.647 z" + id="path3217-4" /> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="M -24.172561,102.99613 83.027492,-13.662752" + id="path3144" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="M -35.733351,87.231415 81.976511,-112.45496" + id="path3146" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 175.51381,-125.06673 139.78046,0" + id="path3148" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 173.41185,-27.325504 141.88242,0" + id="path3150" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> + <text + xml:space="preserve" + style="font-size:6.16453981px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="165.27502" + y="181.54456" + id="text3232-2-6"><tspan + sodipodi:role="line" + id="tspan3234-0-7" + x="165.27502" + y="181.54456" + style="font-size:11.20825386px">...</tspan></text> +</svg> diff --git a/www.i2p2/image_design/i2ptunnel_serverclient.svg b/www.i2p2/image_design/i2ptunnel_serverclient.svg new file mode 100644 index 000000000..473be273b --- /dev/null +++ b/www.i2p2/image_design/i2ptunnel_serverclient.svg @@ -0,0 +1,368 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="7cm" + height="7cm" + viewBox="102 159 129 139" + id="svg3091" + version="1.1" + inkscape:version="0.47pre4 r22446" + sodipodi:docname="i2ptunnel_serverclient.svg" + inkscape:export-filename="/home/mathias/Documents/I2P/i2p.www/www.i2p2/static/images/i2ptunnel_serverclient.png" + inkscape:export-xdpi="49.999134" + inkscape:export-ydpi="49.999134"> + <metadata + id="metadata3257"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs3255"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path4394" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 124.01575 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="248.03149 : 124.01575 : 1" + inkscape:persp3d-origin="124.01575 : 82.677165 : 1" + id="perspective3259" /> + <inkscape:perspective + id="perspective3524" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective3597" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1280" + inkscape:window-height="726" + id="namedview3253" + showgrid="false" + inkscape:zoom="0.95149207" + inkscape:cx="124.01575" + inkscape:cy="124.01575" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="1" + inkscape:current-layer="svg3091" /> + <g + id="g3093" + transform="translate(-124.27542,48.29661)"> + <path + style="fill:#b7b79d" + d="m 170.897,186.814 39.968,0 0,7.386 -39.968,0 0,-7.386 z" + id="path3095" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 170.897,186.814 39.968,0 0,7.386 -39.968,0 0,-7.386" + id="path3097" /> + <path + style="fill:#c9c9b6" + d="m 170.897,186.814 4.238,-4.018 39.968,0 -4.238,4.018 -39.968,0 z" + id="path3099" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 170.897,186.814 4.238,-4.018 39.968,0 -4.238,4.018 -39.968,0" + id="path3101" /> + <path + style="fill:none;stroke:#000000;stroke-width:2.11999989" + d="m 208.63,190.176 -9.591,0" + id="path3103" /> + <path + style="fill:#7a7a5a" + d="m 210.865,194.2 4.238,-4.25 0,-7.154 -4.238,4.018 0,7.386 z" + id="path3105" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 210.865,194.2 4.238,-4.25 0,-7.154 -4.238,4.018 0,7.386" + id="path3107" /> + <path + style="fill:#c9c9b6" + d="m 171.123,198.885 4.459,-5.585 30.819,0 -4.459,5.585 -30.819,0 z" + id="path3109" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 171.123,198.885 4.459,-5.585 30.819,0 -4.459,5.585 -30.819,0" + id="path3111" /> + <path + style="fill:#7a7a5a" + d="m 201.942,200 4.459,-4.685 0,-2.015 -4.459,5.585 0,1.115 z" + id="path3113" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 201.942,200 4.459,-4.685 0,-2.015 -4.459,5.585 0,1.115" + id="path3115" /> + <path + style="fill:#b7b79d" + d="m 171.123,198.885 30.819,0 0,1.115 -30.819,0 0,-1.115 z" + id="path3117" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 171.123,198.885 30.819,0 0,1.115 -30.819,0 0,-1.115" + id="path3119" /> + <path + style="fill:#000000" + d="m 176.923,185.926 3.357,-3.13 28.35,0 -3.117,3.13 -28.59,0 z" + id="path3121" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.02" + d="m 176.923,185.926 3.357,-3.13 28.35,0 -3.117,3.13 -28.59,0" + id="path3123" /> + <path + style="fill:#c9c9b6" + d="m 176.696,162.903 3.136,-2.903 28.363,0 -3.136,2.903 -28.363,0 z" + id="path3125" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 176.696,162.903 3.136,-2.903 28.363,0 -3.136,2.903 -28.363,0" + id="path3127" /> + <path + style="fill:#b7b79d" + d="m 176.696,162.903 28.59,0 0,22.569 -28.59,0 0,-22.569 z" + id="path3129" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 176.696,162.903 28.577,0 0,22.563 -28.577,0 0,-22.563" + id="path3131" /> + <path + style="fill:#ffffff" + d="m 179.152,165.8 23.672,0 0,17.437 -23.672,0 0,-17.437 z" + id="path3133" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 179.152,165.8 23.672,0 0,17.43 -23.672,0 0,-17.43" + id="path3135" /> + <path + style="fill:#7a7a5a" + d="m 205.059,185.258 3.136,-3.13 0,-22.128 -3.136,2.903 0,22.355 z" + id="path3137" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 205.059,185.258 3.136,-3.13 0,-22.128 -3.136,2.903 0,22.355" + id="path3139" /> + </g> + <g + id="g3219" + transform="translate(134.87712,28.099763)"> + <path + style="fill:#b7b79d" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0 z" + id="path3221" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 0,37.022 21.882,0 0,-37.022 -21.882,0" + id="path3223" /> + <path + style="fill:#c9c9b6" + d="m 139.83,178.978 2.965,-2.978 21.875,0 -2.958,2.978 -21.882,0 z" + id="path3225" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 139.83,178.978 2.965,-2.978 21.731,0" + id="path3227" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 -21.882,0" + id="path3229" /> + <path + style="fill:#c9c9b6" + d="m 141.178,181.132 9.995,0 0,4.857 -9.995,0 0,-4.857 z" + id="path3231" /> + <path + style="fill:none;stroke:#626248;stroke-width:0.02" + d="m 141.178,181.132 9.989,0 0,4.85 -9.989,0 0,-4.85" + id="path3233" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 142.527,183.567 7.01,0" + id="path3235" /> + <path + style="fill:#7a7a5a" + d="m 161.712,216 2.958,-2.985 0,-37.015 -2.958,2.978 0,37.022 z" + id="path3237" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 161.712,216 2.814,-2.834" + id="path3239" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.02" + d="m 164.526,176.151 -2.814,2.827 0,37.022" + id="path3241" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.60000002" + d="m 140.105,213.559 21.6,0" + id="path3243" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 140.105,193.837 21.6,0" + id="path3245" /> + <path + style="fill:none;stroke:#494936;stroke-width:0.60000002" + d="m 139.83,213.29 21.855,0" + id="path3247" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.60000002" + d="m 139.83,193.562 21.855,0" + id="path3249" /> + <path + style="fill:none;stroke:#ecece7;stroke-width:0.02" + d="m 141.178,185.727 0,-4.595 9.72,0" + id="path3251" /> + </g> + <text + xml:space="preserve" + style="font-size:6.16453981px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="52.2197" + y="266.53781" + id="text3232"><tspan + sodipodi:role="line" + id="tspan3234" + x="52.2197" + y="266.53781" + style="font-size:11.20825386px">Client</tspan></text> + <text + xml:space="preserve" + style="font-size:16.81238174px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="268.38885" + y="267.14429" + id="text3236"><tspan + sodipodi:role="line" + id="tspan3238" + x="268.38885" + y="267.14429" + style="font-size:11.20825386px">Server</tspan></text> + <g + transform="matrix(0.75311128,0,0,0.75311128,66.977055,17.740053)" + id="g3183"> + <path + style="fill:#0078aa" + d="m 171.824,286.241 -0.049,-0.589 -0.13,-0.599 -0.22,-0.589 -0.309,-0.579 -0.4,-0.589 -0.479,-0.579 -0.569,-0.559 -0.639,-0.549 -0.738,-0.539 -0.809,-0.519 -0.888,-0.52 -0.969,-0.499 -1.038,-0.479 -1.108,-0.469 -1.178,-0.439 -1.228,-0.42 -1.297,-0.399 -1.368,-0.369 -1.408,-0.37 -1.457,-0.309 -1.507,-0.309 -1.558,-0.27 -1.587,-0.26 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.139 -1.717,-0.11 -1.737,-0.08 -1.747,-0.03 -1.767,-0.03 0,0 -1.747,0.03 -1.737,0.03 -1.737,0.08 -1.717,0.11 -1.707,0.139 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.26 -1.558,0.27 -1.517,0.309 -1.447,0.309 -1.408,0.37 -1.368,0.369 -1.297,0.399 -1.228,0.42 -1.178,0.439 -1.108,0.469 -1.038,0.479 -0.979,0.499 -0.878,0.52 -0.819,0.519 -0.728,0.539 -0.639,0.549 -0.569,0.559 -0.479,0.579 -0.4,0.589 -0.309,0.579 -0.23,0.589 -0.12,0.599 -0.049,0.589 0,0 0.049,0.609 0.12,0.588 0.23,0.589 0.309,0.589 0.4,0.579 0.479,0.579 0.569,0.559 0.639,0.549 0.728,0.54 0.819,0.529 0.878,0.499 0.979,0.519 1.038,0.479 1.108,0.459 1.178,0.429 1.228,0.43 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.329 1.517,0.3 1.558,0.269 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.17 1.707,0.119 1.717,0.11 1.737,0.08 1.737,0.05 1.747,0.01 0,0 1.767,-0.01 1.747,-0.05 1.737,-0.08 1.717,-0.11 1.707,-0.119 1.697,-0.17 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.269 1.507,-0.3 1.457,-0.329 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.43 1.178,-0.429 1.108,-0.459 1.038,-0.479 0.969,-0.519 0.888,-0.499 0.809,-0.529 0.738,-0.54 0.639,-0.549 0.569,-0.559 0.479,-0.579 0.4,-0.579 0.309,-0.589 0.22,-0.589 0.13,-0.588 0.049,-0.609 z" + id="path3185" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,286.061 -0.05,-0.599 -0.129,-0.569 -0.22,-0.589 -0.3,-0.569 -0.399,-0.579 -0.489,-0.559 -0.539,-0.549 -0.659,-0.549 -0.729,-0.529 -0.808,-0.529 -0.879,-0.489 -0.968,-0.49 -1.018,-0.489 -1.098,-0.449 -1.178,-0.439 -1.238,-0.399 -1.288,-0.4 -1.347,-0.369 -1.388,-0.34 -1.467,-0.329 -1.508,-0.289 -1.527,-0.27 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.16 -1.687,-0.139 -1.707,-0.08 -1.737,-0.09 -1.737,-0.05 -1.747,0 0,0 -1.737,0 -1.747,0.05 -1.727,0.09 -1.707,0.08 -1.697,0.139 -1.677,0.16 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.27 -1.518,0.289 -1.447,0.329 -1.388,0.34 -1.357,0.369 -1.308,0.4 -1.238,0.399 -1.158,0.439 -1.108,0.449 -1.028,0.489 -0.949,0.49 -0.868,0.489 -0.819,0.529 -0.738,0.529 -0.639,0.549 -0.559,0.549 -0.499,0.559 -0.37,0.579 -0.319,0.569 -0.22,0.589 -0.12,0.569 -0.049,0.599 0,0 0.049,0.589 0.12,0.579 0.22,0.579 0.319,0.569 0.37,0.579 0.499,0.559 0.559,0.549 0.639,0.529 0.738,0.549 0.819,0.529 0.868,0.499 0.949,0.479 1.028,0.48 1.108,0.459 1.158,0.429 1.238,0.409 1.308,0.38 1.357,0.389 1.388,0.339 1.447,0.32 1.518,0.309 1.527,0.26 1.577,0.239 1.627,0.23 1.647,0.18 1.677,0.149 1.697,0.15 1.707,0.09 1.727,0.08 1.747,0.04 1.737,0.02 0,0 1.747,-0.02 1.737,-0.04 1.737,-0.08 1.707,-0.09 1.687,-0.15 1.687,-0.149 1.647,-0.18 1.618,-0.23 1.587,-0.239 1.527,-0.26 1.508,-0.309 1.467,-0.32 1.388,-0.339 1.347,-0.389 1.288,-0.38 1.238,-0.409 1.178,-0.429 1.098,-0.459 1.018,-0.48 0.968,-0.479 0.879,-0.499 0.808,-0.529 0.729,-0.549 0.659,-0.529 0.539,-0.549 0.489,-0.559 0.399,-0.579 0.3,-0.569 0.22,-0.579 0.129,-0.579 0.05,-0.589" + id="path3187" /> + <path + style="fill:#0078aa" + d="m 102.676,269.969 0,16.491 68.749,0 0,-16.491 -68.749,0 z" + id="path3189" /> + <path + style="fill:#00b4ff" + d="m 171.824,269.739 -0.049,-0.579 -0.13,-0.598 -0.22,-0.589 -0.309,-0.589 -0.4,-0.589 -0.479,-0.569 -0.569,-0.559 -0.639,-0.559 -0.738,-0.53 -0.809,-0.529 -0.888,-0.509 -0.969,-0.519 -1.038,-0.469 -1.108,-0.469 -1.178,-0.439 -1.228,-0.41 -1.297,-0.399 -1.368,-0.379 -1.408,-0.35 -1.457,-0.329 -1.507,-0.31 -1.558,-0.259 -1.587,-0.27 -1.637,-0.219 -1.647,-0.19 -1.697,-0.16 -1.707,-0.119 -1.717,-0.11 -1.737,-0.08 -1.747,-0.06 -1.767,0 0,0 -1.747,0 -1.737,0.06 -1.737,0.08 -1.717,0.11 -1.707,0.119 -1.697,0.16 -1.647,0.19 -1.637,0.219 -1.587,0.27 -1.558,0.259 -1.517,0.31 -1.447,0.329 -1.408,0.35 -1.368,0.379 -1.297,0.399 -1.228,0.41 -1.178,0.439 -1.108,0.469 -1.038,0.469 -0.979,0.519 -0.878,0.509 -0.819,0.529 -0.728,0.53 -0.639,0.559 -0.569,0.559 -0.479,0.569 -0.4,0.589 -0.309,0.589 -0.23,0.589 -0.12,0.598 -0.049,0.579 0,0 0.049,0.609 0.12,0.599 0.23,0.589 0.309,0.579 0.4,0.589 0.479,0.559 0.569,0.579 0.639,0.549 0.728,0.539 0.819,0.529 0.878,0.51 0.979,0.509 1.038,0.479 1.108,0.439 1.178,0.459 1.228,0.42 1.297,0.399 1.368,0.379 1.408,0.35 1.447,0.319 1.517,0.309 1.558,0.27 1.587,0.26 1.637,0.219 1.647,0.19 1.697,0.16 1.707,0.119 1.717,0.11 1.737,0.09 1.737,0.05 1.747,0 0,0 1.767,0 1.747,-0.05 1.737,-0.09 1.717,-0.11 1.707,-0.119 1.697,-0.16 1.647,-0.19 1.637,-0.219 1.587,-0.26 1.558,-0.27 1.507,-0.309 1.457,-0.319 1.408,-0.35 1.368,-0.379 1.297,-0.399 1.228,-0.42 1.178,-0.459 1.108,-0.439 1.038,-0.479 0.969,-0.509 0.888,-0.51 0.809,-0.529 0.738,-0.539 0.639,-0.549 0.569,-0.579 0.479,-0.559 0.4,-0.589 0.309,-0.579 0.22,-0.589 0.13,-0.599 0.049,-0.609 z" + id="path3191" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 -0.05,-0.599 -0.129,-0.589 -0.22,-0.559 -0.3,-0.589 -0.399,-0.569 -0.489,-0.559 -0.539,-0.539 -0.659,-0.559 -0.729,-0.519 -0.808,-0.539 -0.879,-0.5 -0.968,-0.499 -1.018,-0.469 -1.098,-0.439 -1.178,-0.459 -1.238,-0.4 -1.288,-0.389 -1.347,-0.369 -1.388,-0.34 -1.467,-0.339 -1.508,-0.29 -1.527,-0.269 -1.587,-0.25 -1.618,-0.219 -1.647,-0.19 -1.687,-0.14 -1.687,-0.139 -1.707,-0.1 -1.737,-0.09 -1.737,-0.04 -1.747,-0.02 0,0 -1.737,0.02 -1.747,0.04 -1.727,0.09 -1.707,0.1 -1.697,0.139 -1.677,0.14 -1.647,0.19 -1.627,0.219 -1.577,0.25 -1.527,0.269 -1.518,0.29 -1.447,0.339 -1.388,0.34 -1.357,0.369 -1.308,0.389 -1.238,0.4 -1.158,0.459 -1.108,0.439 -1.028,0.469 -0.949,0.499 -0.868,0.5 -0.819,0.539 -0.738,0.519 -0.639,0.559 -0.559,0.539 -0.499,0.559 -0.37,0.569 -0.319,0.589 -0.22,0.559 -0.12,0.589 -0.049,0.599 0,0 0.049,0.579 0.12,0.589 0.22,0.559 0.319,0.579 0.37,0.579 0.499,0.559 0.559,0.559 0.639,0.549 0.738,0.529 0.819,0.519 0.868,0.509 0.949,0.469 1.028,0.489 1.108,0.45 1.158,0.439 1.238,0.409 1.308,0.389 1.357,0.37 1.388,0.339 1.447,0.33 1.518,0.309 1.527,0.25 1.577,0.259 1.627,0.21 1.647,0.189 1.677,0.17 1.697,0.14 1.707,0.08 1.727,0.08 1.747,0.05 1.737,0.01 0,0 1.747,-0.01 1.737,-0.05 1.737,-0.08 1.707,-0.08 1.687,-0.14 1.687,-0.17 1.647,-0.189 1.618,-0.21 1.587,-0.259 1.527,-0.25 1.508,-0.309 1.467,-0.33 1.388,-0.339 1.347,-0.37 1.288,-0.389 1.238,-0.409 1.178,-0.439 1.098,-0.45 1.018,-0.489 0.968,-0.469 0.879,-0.509 0.808,-0.519 0.729,-0.529 0.659,-0.549 0.539,-0.559 0.489,-0.559 0.399,-0.579 0.3,-0.579 0.22,-0.559 0.129,-0.589 0.05,-0.579" + id="path3193" /> + <path + style="fill:#000000" + d="m 137.874,267.074 5.041,1.657 12.169,-4.961 5.44,1.657 -2.955,-4.123 -14.225,0 5.85,1.248 -11.32,4.522 z" + id="path3195" /> + <path + style="fill:#000000" + d="m 135.768,271.626 -5.002,-1.657 -11.749,4.961 -5.86,-1.667 2.935,4.542 14.674,0 -6.299,-1.657 11.301,-4.522 z" + id="path3197" /> + <path + style="fill:#000000" + d="m 114.405,262.552 5.031,-1.657 12.149,4.532 5.46,-1.228 -2.925,4.113 -14.265,0 5.86,-1.238 -11.31,-4.522 z" + id="path3199" /> + <path + style="fill:#000000" + d="m 159.676,276.568 -5.021,1.647 -11.74,-4.952 -5.87,1.667 2.935,-4.132 14.675,0 -6.299,1.217 11.32,4.553 z" + id="path3201" /> + <path + style="fill:#ffffff" + d="m 138.293,267.483 5.051,1.648 12.149,-4.932 5.451,1.657 -2.935,-4.142 -14.265,0 5.879,1.237 -11.33,4.532 z" + id="path3203" /> + <path + style="fill:#ffffff" + d="m 136.217,272.015 -5.051,-1.637 -11.73,4.952 -5.87,-1.657 2.935,4.542 14.665,0 -6.269,-1.647 11.32,-4.553 z" + id="path3205" /> + <path + style="fill:#ffffff" + d="m 114.834,262.951 5.021,-1.647 12.159,4.552 5.451,-1.258 -2.935,4.133 -14.255,0 5.879,-1.248 -11.32,-4.532 z" + id="path3207" /> + <path + style="fill:#ffffff" + d="m 160.105,276.977 -5.021,1.657 -11.74,-4.961 -5.879,1.657 2.925,-4.113 14.694,0 -6.289,1.228 11.31,4.532 z" + id="path3209" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 102.676,269.57 0,16.471" + id="path3211" /> + <path + style="fill:none;stroke:#aae6ff;stroke-width:0.02" + d="m 171.425,269.57 0,16.471" + id="path3213" /> + <path + style="fill:#000000" + d="m 124.467,283.995 7.547,0 4.612,3.713 4.602,-3.713 7.128,0 0,-1.648 5.041,2.456 -5.041,2.486 0,-1.647 -6.279,0 -4.203,2.885 4.203,3.284 6.279,0 0,-2.037 5.041,2.875 -5.041,2.486 0,-1.667 -7.128,0 -4.602,-3.694 -4.612,3.694 -7.547,0 0,1.667 -5.031,-2.486 5.031,-2.875 0,2.037 6.699,0 4.202,-2.875 -4.202,-3.294 -6.699,0 0,1.647 -5.031,-2.486 5.031,-2.456 0,1.648 z" + id="path3215" /> + <path + style="fill:#ffffff" + d="m 124.897,284.394 7.536,0 4.612,3.703 4.602,-3.703 7.148,0 0,-1.647 5.011,2.485 -5.011,2.476 0,-1.647 -6.299,0 -4.203,2.875 4.203,3.294 6.299,0 0,-2.056 5.011,2.885 -5.011,2.475 0,-1.657 -7.148,0 -4.602,-3.703 -4.612,3.703 -7.536,0 0,1.657 -5.042,-2.475 5.042,-2.885 0,2.056 6.688,0 4.183,-2.885 -4.183,-3.284 -6.688,0 0,1.647 -5.042,-2.476 5.042,-2.485 0,1.647 z" + id="path3217" /> + </g> + <text + xml:space="preserve" + style="font-size:6.16453981px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="143.47925" + y="266.56204" + id="text3232-1"><tspan + sodipodi:role="line" + id="tspan3234-7" + x="143.47925" + y="266.56204" + style="font-size:11.20825386px">I2PTunnel</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m -23.12158,114.55692 106.149072,0" + id="path3614" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 176.56479,114.55692 140.83144,0" + id="path4836" + transform="matrix(0.5604127,0,0,0.5604127,97,159)" /> +</svg> diff --git a/www.i2p2/pages/_menu.html b/www.i2p2/pages/_menu.html index 5088a73af..36bba9c71 100644 --- a/www.i2p2/pages/_menu.html +++ b/www.i2p2/pages/_menu.html @@ -108,7 +108,7 @@ <br /><b>Documentation</b><br /> <img src="/_static/images/sqbullet.png" /> <a href="how.html">Hoe werkt het?</a><br /> <img src="/_static/images/sqbullet.png" /> <a href="techintro.html">Tech intro</a><br /> -<img src="/_static/images/sqbullet.png" /> <a href="applications.html">Applicaties</a><br /> +<img src="/_static/images/sqbullet.png" /> <a href="applications.html">Apps ontwikkelen</a><br /> <br /><b>Development</b><br /> <img src="/_static/images/sqbullet.png" /> <a href="api.html">API</a><br /> <img src="/_static/images/sqbullet.png" /> <a href="licenses.html">Licenties</a><br /> @@ -310,7 +310,7 @@ <br /><b>Documentation</b><br /> <img src="/_static/images/sqbullet.png" /> <a href="how.html">How does it work?</a><br /> <img src="/_static/images/sqbullet.png" /> <a href="techintro.html">Tech intro</a><br /> -<img src="/_static/images/sqbullet.png" /> <a href="applications.html">Applications</a><br /> +<img src="/_static/images/sqbullet.png" /> <a href="applications.html">App Dev</a><br /> <br /><b>Development</b><br /> <img src="/_static/images/sqbullet.png" /> <a href="api.html">API</a><br /> <img src="/_static/images/sqbullet.png" /> <a href="licenses.html">Licenses</a><br /> diff --git a/www.i2p2/pages/applications.html b/www.i2p2/pages/applications.html index 3036b8f02..b0d235027 100644 --- a/www.i2p2/pages/applications.html +++ b/www.i2p2/pages/applications.html @@ -3,78 +3,93 @@ {% block content %} <h1>Application Development Guide</h1> -<h2>Why write I2P specific code?</h2> - -<p>Using mihi's <a href="i2ptunnel">I2PTunnel</a> application, you can hook up -application instances and have them talk to each other over standard TCP -sockets. In plain client-server scenarios, this is an effective technique for -many simple protocols, but for distributed systems where each peer may contact -a number of other peers (instead of just a single server), or for systems that -expose TCP or IP information within the communication protocols themselves, -there are problems.</p> - -<p>With I2PTunnel, you need to explicitly instantiate an I2PTunnel for each peer -you want to contact - if you are building a distributed instant messenger -application, that means you need to have each peer create an I2PTunnel 'client' -pointing at each peer it wants to contact, plus a single I2PTunnel 'server' to -receive other peer's connections. This process can of course be automated, but -there are nontrivial overheads involved in running more than just a few I2PTunnel -instances. In addition, with many protocols you will need to force everyone to -use the same set of ports for all peers - e.g. if you want to reliably run DCC -chat, everyone needs to agree that port 10001 is Alice, port 10002 is Bob, port -10003 is Charlie, and so on, since the protocol includes TCP/IP specific information -(host and port).</p> - -<p>Applications that are designed to work with I2P can take advantage of its -built in data security and optional pseudonymous authentication. All data sent -over the network is transparently end to end encrypted (not even the routers -get the cleartext), and any application using the streaming or datagram -functionality has all of that data authenticated by the sending destination's -public key. As an aside, environments where anonymity instead of pseudonymity -is required are trivially accommodated by either using the I2CP directly, SAM RAW -sessions, or by simply creating a new sending destination whenever needed).</p> - -<p>Another important thing to remember is that I2P is simply a communication -system - what data is sent and what is done with that data is outside of its scope. -Applications that are used on top of I2P should be carefully sanitized of any -insecure or identifying data or protocols (hostnames, port numbers, time zone, -character set, etc). This in and of itself is often a daunting task, as -analyzing the safety of a system that has had anonymity and security strapped on to -it is no small feat, giving significant incentive to learn from the experiences of -the traditional application base, but design the application and its communication -protocols with I2P's anonymity and security in mind.</p> - -<p>There are also efficiency considerations to review when determining how to -interact on top of I2P. The streaming library and things built on top of it -operate with handshakes similar to TCP, while the core I2P protocols (I2NP and I2CP) -are strictly message based (like UDP or in some instances raw IP). The important -distinction is that with I2P, communication is operating over a long fat network - -each end to end message will have nontrivial latencies, but may contain payloads -of up to 32KB. An application that needs a simple request and response can get rid -of any state and drop the latency incurred by the startup and teardown handshakes -by using (best effort) datagrams without having to worry about MTU detection or -fragmentation of messages under 32KB. +<h2>Contents</h2> +<ul> + <li><a href="#why">Why write I2P-specific code?</a></li> + <li><a href="#concepts">Important concepts</a></li> + <li><a href="#options">Development options</a></li> + <li><a href="#start"><b>Start developing - a simple guide</b></a></li> +</ul> + +<h2 id="why">Why write I2P-specific code?</h2> + +<p> + There are multiple ways to use applications in I2P. + Using <a href="/i2ptunnel.html">I2PTunnel</a>, + you can use regular applications without needing to program explicit I2P support. + This is very effective for client-server scenario's, + where you need to connect to a single website. + You can simply create a tunnel using I2PTunnel to connect to that website. </p> + <center> + <div class="box"> + <img src="_static/images/i2ptunnel_serverclient.png" alt="Creating a server-client connection using I2PTunnel only requires creating a single tunnel." title="Creating a server-client connection using I2PTunnel only requires creating a single tunnel." /> + <br /><br /> + Figure 1: Creating a server-client connection using I2PTunnel only requires creating a single tunnel. + </div> + </center><br/> +<p> + If your application is distributed, it will require connections to a large amount of peers. + Using I2PTunnel, you will need to create a new tunnel for each peer you want to contact. + This process can of course be automated, but running a lot of I2PTunnel instances creates a large amount of overhead. + In addition, with many protocols you will need to force everyone to + use the same set of ports for all peers - e.g. if you want to reliably run DCC + chat, everyone needs to agree that port 10001 is Alice, port 10002 is Bob, port + 10003 is Charlie, and so on, since the protocol includes TCP/IP specific information + (host and port). +</p> + <center> + <div class="box"> + <img src="_static/images/i2ptunnel_peertopeer.png" alt="Setting up connections for a peer-to-peer applications requires a very large amount of tunnels." title="Setting up connections for a peer-to-peer applications requires a very large amount of tunnels." /> + <br /><br /> + Figure 2: Setting up connections for a peer-to-peer applications requires a very large amount of tunnels. + </div> + </center><br/> <p> -The ministreaming library itself uses a -functional but inefficient scheme for dealing with reliable and in order delivery -by requiring the equivalent of an ACK after each message which must traverse the -network end to end again (though there are plans for improving this with a more -efficient and robust algorithm). With ministreaming, an application -that uses one of the I2P message oriented protocols could in some situations get -substantially better performance. -However with the full streaming library now the standard interface, -it isn't clear if that is still the case. + General network applications often send a lot of additional data that could be used to identify users. + Hostnames, port numbers, time zones, character sets, etc. are often sent without informing the user. + As such, designing the network protocol specifically with anonymity in mind + can avoid compromising user identities. +</p> +<p> + There are also efficiency considerations to review when determining how to + interact on top of I2P. The streaming library and things built on top of it + operate with handshakes similar to TCP, while the core I2P protocols (I2NP and I2CP) + are strictly message based (like UDP or in some instances raw IP). The important + distinction is that with I2P, communication is operating over a long fat network - + each end to end message will have nontrivial latencies, but may contain payloads + of up to 32KB. An application that needs a simple request and response can get rid + of any state and drop the latency incurred by the startup and teardown handshakes + by using (best effort) datagrams without having to worry about MTU detection or + fragmentation of messages under 32KB. +</p> +<p> + In summary, a number of reasons to write I2P-specific code: + <ul> + <li> + Creating a large amount of I2PTunnel instances consumes a non-trivial amount of resources, + which is problematic for distributed applications (a new tunnel is required for each peer). + </li> + <li> + General network protocols often send a lot of additional data that can be used to identify users. + Programming specifically for I2P allows the creation of a network protocol + that does not leak such information, keeping users anonymous and secure. + </li> + <li> + Network protocols designed for use on the regular internet can be inefficient + on I2P, which is a network with a much higher latency. + </li> + </ul> </p> <p> -Applications written in Java and accessible/runnable -using an HTML interface via the standard webapps/app.war -may be considered for inclusion in the i2p distribution. + Applications written in Java and accessible/runnable + using an HTML interface via the standard webapps/app.war + may be considered for inclusion in the i2p distribution. </p> -<h2>Important ideas</h2> +<h2>Important concepts</h2> <p>There are a few changes that require adjusting to when using I2P:</p> @@ -93,26 +108,30 @@ location of the end point signed as if there were universal deployment of DNSSEC to another (or with some special software, it can even operate on multiple routers at once). This is quite different from the TCP or UDP world where a single end point (port) must stay on a single host.</li> -<li>I2P destinations are ugly and large - behind the scenes, they contain a 2048bit ElGamal +<li> +<p> +I2P destinations are ugly and large - behind the scenes, they contain a 2048bit ElGamal public key for encryption, a 1024bit DSA public key for signing, and a variable size -certificate (currently this is the null type, but may contain proof of work, blinded -data, or other information to increase the 'cost' of a destination in an effort to fight -Sybil). <p>There are existing ways to refer to these large and ugly destinations by short +certificate, which may contain proof of work or blinded data. +</p> +<p> +There are existing ways to refer to these large and ugly destinations by short and pretty names (e.g. "irc.duck.i2p"), but at the moment those techniques do not guarantee globally uniqueness (since they're stored locally at each person's machine as "hosts.txt") -and the current mechanism is not especially scalable nor secure (updates to one host file is +and the current mechanism is not especially scalable nor secure (updates to one host file are manually managed within Monotone, and as such, anyone with commit rights on the repository can change the destinations). There may be some secure, human readable, scalable, and globally unique, naming system some day, but applications shouldn't depend upon it being in place, since there are those who don't think such a beast is possible. <a href="naming.html">Further information on the naming system</a> is available. +</p> </li> </ul> <h3>Anonymity and confidentiality</h3> <p>A useful thing to remember is that I2P has transparent end to end encryption -and authentication for all data passed over the network - if Bob sends Alice's destination, +and authentication for all data passed over the network - if Bob sends to Alice's destination, only Alice's destination can receive it, and if Bob is using the datagrams or streaming library, Alice knows for certain that Bob's destination is the one who sent the data. </p> @@ -132,7 +151,7 @@ UDP, applications don't need to worry about MTU detection and can simply fire of entire request or response, allowing them to transparently operate in I2P as a UDP-like application without having to write fragmentation, resends, etc.</p> -<h2>Integration techniques</h2> +<h2 id="options">Development options</h2> <p>There are several means of sending data over I2P, each with their own pros and cons. The streaming lib is the recommended interface, used by the majority of I2P applications. @@ -141,8 +160,7 @@ The streaming lib is the recommended interface, used by the majority of I2P appl <h3>Streaming Lib</h3> <p> The <a href="streaming.html">full streaming library</a> is now the standard -interface. Ministreaming and SAM are not recommended. -The streaming lib interface is similar to the ministreaming lib interface described below. +interface. It allows programming using TCP-like sockets, as explained in the <a href="#start.streaming">Streaming development guide</a>. </p> <h3>SAM, SAM V2, SAM V3</h3> @@ -185,43 +203,280 @@ their own unique I2P destination and their own set of tunnels, keys, etc.</p> <h3>Ministreaming</h3> <p><i>Not recommended</i></p> -<p>For applications written in Java, the simplest way to go is to use the libraries that the SAM -bridge and I2PTunnel applications use. The streaming functionality is exposed in the 'ministreaming' -library, which is centered on the -<a href="http://www.i2p.net/javadoc/net/i2p/client/streaming/package-summary.html">I2PSocketManager</a>, -the <a href="http://www.i2p.net/javadoc/net/i2p/client/streaming/I2PSocket.html">I2PSocket</a>, and the -<a href="http://www.i2p.net/javadoc/net/i2p/client/streaming/I2PServerSocket.html">I2PServerSocket</a>.</p> +<p> +It was possible to write I2P applications in Java using the ministreaming library. +However, the Streaming library has superceded this, and provides better functionality. +</p> <h3>Datagrams</h3> <p><i>Not recommended</i></p> -<p>For applications that want to use repliable datagrams, they can be built with the -<a href="http://www.i2p.net/javadoc/net/i2p/client/datagram/I2PDatagramMaker.html">I2PDatagramMaker</a> -and parsed on the receiving side by the -<a href="http://www.i2p.net/javadoc/net/i2p/client/datagram/I2PDatagramDissector.html">I2PDatagramDissector</a>. -In turn, these are sent and received through an - -<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSession.html">I2PSession</a>.</p> - -<p>Applications that want to use raw datagrams simply send directly through the I2PSession's -<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSession.html#sendMessage(net.i2p.data.Destination,%20byte[])">sendMessage(...)</a> -method, receiving notification of available messages through the -<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSessionListener.html">I2PSessionListener</a> and -then fetching those messages by calling -<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSession.html#receiveMessage(int)">receiveMessage(...)</a>.</p> +The <a href="datagrams">Datagram library</a> allows sending UDP-like packets. +It's possible to use: +<ul> + <li>Repliable datagrams</li> + <li>Raw datagrams</li> +</ul> <h3>I2CP</h3> -<p><i>Not easy</i></p> +<p><i>Not recommended</i></p> <p><a href="i2cp">I2CP</a> itself is a language independent protocol, but to implement an I2CP library in something other than Java there is a significant amount of code to be written (encryption routines, object marshalling, asynchronous message handling, etc). While someone could write an I2CP library in C or something else, it would most likely be more useful to use the C SAM library instead. -I2CP also <a href="i2cp">needs documentation</a>. </p> <h3>Web Applications</h3> I2P comes with the Jetty webserver, and configuring to use the Apache server instead is straightforward. Any standard web app technology should work. +<h2 id="start">Start developing - a simple guide</h2> +Developing using I2P requires a working I2P installation and a development environment of your own choice. +If you are using Java, you can start development with the <a href="#start.streaming">streaming library</a> or datagram library. +Using another programming language, SAM or BOB can be used. + +<h3 id="start.streaming">Developing with the streaming library</h3> + +<p> + Development using the streaming library requires the following libraries in your classpath: + <ul> + <li>$I2P/lib/streaming.jar: the streaming library itself.</li> + <li>$I2P/lib/mstreaming.jar: the ministreaming library is used as the base for the streaming library.</li> + <li>$I2P/lib/i2p.jar: some standard I2P classes (like the Destination class) are very convenient when developing.</li> + </ul> +</p> +<p> + Network communication requires the usage of I2P network sockets. + To demonstrate this, we will create an application where a client can send text messages to a server, + who will print the messages and send them back to the client. In other words, the server will function as an echo. +</p> +<p> + We will start by initializing the server application. This requires getting an I2PSocketManager + and creating an I2PServerSocket. + In addition, we will ask the I2PSocketManager for an I2PSession, so we can find out the Destination we use. +</p> +<div class="box"> + <pre> + package i2p.echoserver; + + import net.i2p.client.I2PSession; + import net.i2p.client.streaming.I2PServerSocket; + import net.i2p.client.streaming.I2PSocketManager; + import net.i2p.client.streaming.I2PSocketManagerFactory; + + public class Main { + + public static void main(String[] args) { + //Initialize application + I2PSocketManager manager = I2PSocketManagerFactory.createManager(); + I2PServerSocket serverSocket = manager.getServerSocket(); + I2PSession session = manager.getSession(); + System.out.println(session.getMyDestination().toBase64()); //Print the base64 string, the regular string would look like garbage. + //The additional main method code comes here... + } + + } + </pre> + <br /><br /> + <center>Code example 1: initializing the server application.</center> +</div> +<p> + Once we have an I2PServerSocket, we can create I2PSocket instances to accept connections from clients. + In this example, we will create a single I2PSocket instance, that can only handle one client at a time. + A real server would have to be able to handle multiple clients. + To do this, multiple I2PSocket instances would have to be created, each in separate threads. + Once we have created the I2PSocket instance, we read data, print it and send it back to the client. + The bold code is the new code we add. +</p> +<div class="box"> + <pre> + package i2p.echoserver; + + </pre> + <b><pre> + import java.io.IOException; + import java.io.InputStream; + import java.io.OutputStream; + import java.net.ConnectException; + import java.net.SocketTimeoutException; + import net.i2p.I2PException; + import net.i2p.client.streaming.I2PSocket; + import net.i2p.util.I2PThread; + </pre></b> + <pre> + import net.i2p.client.I2PSession; + import net.i2p.client.streaming.I2PServerSocket; + import net.i2p.client.streaming.I2PSocketManager; + import net.i2p.client.streaming.I2PSocketManagerFactory; + + public class Main { + + public static void main(String[] args) { + I2PSocketManager manager = I2PSocketManagerFactory.createManager(); + I2PServerSocket serverSocket = manager.getServerSocket(); + I2PSession session = manager.getSession(); + System.out.println(session.getMyDestination().toBase64()); //Print the base64 string, the regular string would look like garbage. +</pre> +<b><pre> + + //Create socket to handle clients + I2PThread t = new I2PThread(new ClientHandler(serverSocket)); + t.setName("clienthandler1"); + t.setDaemon(false); + t.start(); + } + + private static class ClientHandler implements Runnable { + + public ClientHandler(I2PServerSocket socket) { + this.socket = socket; + } + + public void run() { + while(true) { + try { + I2PSocket sock = this.socket.accept(); + if(sock != null) { + BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream())); //Receive from clients + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())); //Send to clients + String line = br.readLine(); + if(line != null) { + System.out.println("Received from client: " + line); + bw.write(line); + bw.flush(); //Flush to make sure everything got sent + } + sock.close(); + } + } catch (I2PException ex) { + System.out.println("General I2P exception!"); + } catch (ConnectException ex) { + System.out.println("Error connecting!"); + } catch (SocketTimeoutException ex) { + System.out.println("Timeout!"); + } catch (IOException ex) { + System.out.println("General read/write-exception!"); + } + } + } + + private I2PServerSocket socket; + + } + + } + </pre></b> + <br /><br /> + <center>Code example 2: accepting connections from clients and handling messages.</center> +</div> + +<p> + When you run the above server code, it should print something like this (but without the line endings, it should just be + one huge block of characters): + <pre id="start.streaming.destination"> + y17s~L3H9q5xuIyyynyWahAuj6Jeg5VC~Klu9YPquQvD4vlgzmxn4yy~5Z0zVvKJiS2Lk + poPIcB3r9EbFYkz1mzzE3RYY~XFyPTaFQY8omDv49nltI2VCQ5cx7gAt~y4LdWqkyk3au + 6HdfYSLr45zxzWRGZnTXQay9HPuYcHysZHJP1lY28QsPz36DHr6IZ0vwMENQsnQ5rhq20 + jkB3iheYJeuO7MpL~1xrjgKzteirkCNHvXN8PjxNmxe-pj3QgOiow-R9rEYKyPAyGd2pe + qMD-J12CGfB6MlnmH5qPHGdZ13bUuebHiyZ1jqSprWL-SVIPcynAxD2Uu85ynxnx31Fth + nxFMk07vvggBrLM2Sw82pxNjKDbtO8reawe3cyksIXBBkuobOZdyOxp3NT~x6aLOxwkEq + BOF6kbxV7NPRPnivbNekd1E1GUq08ltDPVMO1pKJuGMsFyZC4Q~osZ8nI59ryouXgn97Q + 5ZDEO8-Iazx50~yUQTRgLMOTC5hqnAAAA + </pre> + This is the base64-representation of the server Destination. The client will need this string to reach the server. +</p> +<p> + Now, we will create the client application. Again, a number of steps are required for initialization. + Again, we will need to start by getting an I2PSocketManager. + We won't use an I2PSession and an I2PServerSocket this time. + Instead, we will use the server Destination string to start our connection. + We will ask the user for the Destination string, and create an I2PSocket using this string. + Once we have an I2PSocket, we can start sending and receiving data to and from the server. +</p> +<div class="box"> + <pre> + package i2p.echoclient; + + import java.io.BufferedReader; + import java.io.BufferedWriter; + import java.io.IOException; + import java.io.InputStreamReader; + import java.io.InterruptedIOException; + import java.io.OutputStream; + import java.io.OutputStreamWriter; + import java.net.ConnectException; + import java.net.NoRouteToHostException; + import java.util.logging.Level; + import java.util.logging.Logger; + import net.i2p.I2PException; + import net.i2p.client.streaming.I2PSocket; + import net.i2p.client.streaming.I2PSocketManager; + import net.i2p.client.streaming.I2PSocketManagerFactory; + import net.i2p.data.DataFormatException; + import net.i2p.data.Destination; + + public class Main { + + public static void main(String[] args) { + I2PSocketManager manager = I2PSocketManagerFactory.createManager(); + System.out.println("Please enter a Destination:"); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String destinationString = null; + try { + destinationString = br.readLine(); + } catch (IOException ex) { + System.out.println("Failed to get a Destination string."); + return; + } + Destination destination = null; + try { + destination = new Destination(destinationString); + } catch (DataFormatException ex) { + System.out.println("Destination string incorrectly formatted."); + return; + } + I2PSocket socket = null; + try { + socket = manager.connect(destination); + } catch (I2PException ex) { + System.out.println("General I2P exception occurred!"); + } catch (ConnectException ex) { + System.out.println("Failed to connect!"); + } catch (NoRouteToHostException ex) { + System.out.println("Couldn't find host!"); + } catch (InterruptedIOException ex) { + System.out.println("Sending/receiving was interrupted!"); + } + try { + //Write to server + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); + bw.write("Hello I2P!\n"); + bw.flush(); //Flush to make sure everything got sent + //Read from server + BufferedReader br2 = new BufferedReader(new InputStreamReader(socket.getInputStream())); + String s = null; + while ((s = br2.readLine()) != null) { + System.out.println("Received from server: " + s); + } + socket.close(); + } catch (IOException ex) { + System.out.println("Error occurred while sending/receiving!"); + } + } + + } + </pre> + <br /><br /> + <center>Code example 3: starting the client and connecting it to the server application.</center> +</div> +<p> + Finally, you can run both the server and the client application. + First, start the server application. It will print a Destination string (like shown <a href="#start.streaming.destination">above</a>). + Next, start the client application. When it requests a Destination string, you can enter the string printed by the server. + The client will then send 'Hello I2P!' (along with a newline) to the server, who will print the message and send it back to the client. +</p> +<p> + Congratulations, you have successfully communicated over I2P! +</p> + <h2>Existing Applications in Development</h2> Contact us if you would like to help. <ul> diff --git a/www.i2p2/static/images/i2ptunnel_peertopeer.png b/www.i2p2/static/images/i2ptunnel_peertopeer.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd19f99a115fa8232590e9e81ae8464dc5e30d8 GIT binary patch literal 14971 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 FV1he7aDV^+ literal 0 HcmV?d00001 diff --git a/www.i2p2/static/images/i2ptunnel_serverclient.png b/www.i2p2/static/images/i2ptunnel_serverclient.png new file mode 100644 index 0000000000000000000000000000000000000000..282a656f7b8b8fe21e7e268b7950f00f3755d0a3 GIT binary patch literal 6188 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 KMNUMnLSTZ-{r|53 literal 0 HcmV?d00001 -- GitLab