From 183e3420eae753b1ba938256b75445601409c58c Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 6 Jan 2024 10:47:21 -0500 Subject: [PATCH] Update protocol stack picture svg fixup courtesy drzed, used with permission --- design/image_design/protocol_stack.svg | 206 ++------------------ i2p2www/pages/site/docs/protocol/index.html | 7 +- i2p2www/static/images/protocol_stack.png | Bin 7135 -> 21911 bytes 3 files changed, 19 insertions(+), 194 deletions(-) diff --git a/design/image_design/protocol_stack.svg b/design/image_design/protocol_stack.svg index 61a6db2d..01f4134a 100644 --- a/design/image_design/protocol_stack.svg +++ b/design/image_design/protocol_stack.svg @@ -1,190 +1,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + +Streaming +Datagrams +I2CP +Garlic Encryption +NTCP2SSU2 +TCP +UDP +IP +Tunnel Messages + \ No newline at end of file diff --git a/i2p2www/pages/site/docs/protocol/index.html b/i2p2www/pages/site/docs/protocol/index.html index 22685cf1..c919705a 100644 --- a/i2p2www/pages/site/docs/protocol/index.html +++ b/i2p2www/pages/site/docs/protocol/index.html @@ -1,7 +1,7 @@ {% extends "global/layout.html" %} {% block title %}{% trans %}Protocol Stack{% endtrans %}{% endblock %} -{% block lastupdated %}2021-12{% endblock %} -{% block accuratefor %}0.9.52{% endblock %} +{% block lastupdated %}2024-01{% endblock %} +{% block accuratefor %}0.9.61{% endblock %} {% block content %}

{% trans docs=site_url('docs') -%} @@ -86,8 +86,7 @@ However, each of these layers adds additional functionality, to allow applicatio
I2PTunnel
- SAM/SAMv2/SAMv3(*), - BOB + SAMv3

  • {% trans %}I2P Application Proxy Layer: proxy systems.{% endtrans %} diff --git a/i2p2www/static/images/protocol_stack.png b/i2p2www/static/images/protocol_stack.png index d9392225c6ce7923547d3dc9376be6f74ae36c75..5a4011fed3ff7bb3944e8a10cca2d6628798ceb7 100644 GIT binary patch literal 21911 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 literal 7135 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 R(yyI69ZiEfnAV-B