summaryrefslogtreecommitdiff
path: root/doc/entwicklerdoku.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/entwicklerdoku.txt')
-rw-r--r--doc/entwicklerdoku.txt90
1 files changed, 45 insertions, 45 deletions
diff --git a/doc/entwicklerdoku.txt b/doc/entwicklerdoku.txt
index ce92eeb..b39f3b4 100644
--- a/doc/entwicklerdoku.txt
+++ b/doc/entwicklerdoku.txt
@@ -10,7 +10,7 @@ April 2013
[abstract]
--
Die Dokumentation ist zweigeteilt. Dieser Teil enthält eine technische Beschreibung.
-Die Bedienung und Funktionsweise ist in der 'Anwenderdokumentation' beschrieben.
+Die Bedienung und Funktionsweise ist in der 'Anwenderdokumentation' beschrieben.
--
Aufbau
@@ -48,7 +48,7 @@ Konfiguration
~~~~~~~~~~~~~
Die Tunnelkonfigurationen werden in einer SQLite Datenbank abgelegt. Es
existiert mit `.config.IodineConfiguration` ein leichtgewichtiger Proxy
-um die Android `ContentValues` Klasse. Die `.config.ConfigDatabase` Klasse
+um die Android `ContentValues` Klasse. Die `.config.ConfigDatabase` Klasse
ist ein `SQLiteOpenHelper` und kann mehrfach instanziert werden.
VPN-Service
@@ -58,11 +58,11 @@ Der VPN Service hat 5 Zustände die er über Broadcast Intents mitteilt.
Eine solche Mitteilung wird verschickt wenn sich der Zustand ändert oder
dies über ACTION_CONTROL_UPDATE angefordert wurde.
-Die Kommunikation der Oberfläche mit dem VPN Service erfolgt mit Broadcasts Intents.
+Die Kommunikation der Oberfläche mit dem VPN Service erfolgt mit Broadcasts Intents.
<<whiteboard-intents>> zeigt die Zustände des Iodine VPN-Service. Rot nummeriert sind die
Intents die der Service verschickt um über Statusänderungen zu informieren. Blau nummeriert
-sind Intents mit denen der Service gesteuert werden kann.
+sind Intents mit denen der Service gesteuert werden kann.
[[whiteboard-intents]]
.Status Informations und Steuerungs Intents des VPN Service
@@ -72,10 +72,10 @@ JNI
~~~
Die JNI Methoden für iodine befinden sich in der Klasse `.IodineClient`
-bzw. `/jni/iodine-client.c`. `IodineClient#connect` ersetzt dabei prinzipiell
+bzw. `/jni/iodine-client.c`. `IodineClient#connect` ersetzt dabei prinzipiell
die `main()` des ursprünglichen iodine Client.
-Weitere Methoden dienen dem Austausch der vom Server übermittelten Konfiguration
+Weitere Methoden dienen dem Austausch der vom Server übermittelten Konfiguration
und des im System eingestellten DNS Server.
@@ -150,7 +150,7 @@ Nachdem vom Server die IP-Konfiguration mitgeteilt wurde, wird diese im
int tun_fd = parcelFD.detachFd();
// pass the filedescriptor to iodine
- IodineClient.tunnel(tun_fd);
+ IodineClient.tunnel(tun_fd);
--------------------------------------------------------
iodine
@@ -162,7 +162,7 @@ Der folgende Text zeigt ein Beispiel für den Ablauf eines Handshake. Der genaue
variieren jenachdem wie die Verbindungsparameter gewählt werden.
Hier sind gewählt -m 768 fragment size und ein 9 Zeichen
-Passwort. Die Gegenstelle ist `t.yves.tw`. Eine Raw (direkte UDP) Verbindung
+Passwort. Die Gegenstelle ist `t.yves.tw`. Eine Raw (direkte UDP) Verbindung
wurde verhindert indem der Rechner zum Testzeitpunkt keine default Route hatte.
RX/TX aus der Sicht des Servers. Die "*" in den Hostnamen markieren Zeichen die
@@ -171,18 +171,18 @@ sich aus Random Daten ergeben.
[source,java]
---------------------------------------------------------------------
== Der Client testet die Qualitaet der Uebertragung
- <-- client.c:handshake_qtype_autodetect()
- -> handshake_qtypetest()
+ <-- client.c:handshake_qtype_autodetect()
+ -> handshake_qtypetest()
-> send_downenctest()
hostname[0] = "y"
hostanme[1] = downenc = 'r'
hostname[2] = variant = 1 = 'b' (b32)
hostname[3..5] = rand_seed++
RX: yrb***.t.yves.tw
-
+
--> 48 bytes aus encoding.h:DOWNCODECHECK
TX: yrb***.t.yves.tw, 48 bytes data
-
+
== Austausch der Versionsinformationen
<-- client.c:send_version()
VERSION=0x00 00 05 02
@@ -190,7 +190,7 @@ sich aus Random Daten ergeben.
hostname[1..6] = b32(0,0,5,2,random<<8,random)
hostname = "vAAAAKAR__"
RX: vaaaaka****.t.yves.tw
-
+
--> iodined.c:send_version_response()
der Server bestaetigt mit
data[0..8] = "VACK" b32(seed>>24, seed>>16, seed>>8, seed, userid)
@@ -206,7 +206,7 @@ sich aus Random Daten ergeben.
--> iodined.c:handle_null_request()
Sendet bei Erfolg die IP Einstellungen wie
- "172.16.0.1-172.16.0.2-1130-16"
+ "172.16.0.1-172.16.0.2-1130-16"
server="172.16.0.1"
client="172.16.0.2"
mtu=1130
@@ -214,11 +214,11 @@ sich aus Random Daten ergeben.
TX: lad24srn4ezmg21qjsfy13msagd0srfq.t.yves.tw
= 3137322e31362e302e312d3137322e31362e302e322d313133302d3136 (_16)
= 172.16.0.1-172.16.0.2-1130-16
-
+
== Senden der IP Adresse des Clients
<-- Request for IP address
RX: iamin.t.yves.tw
-
+
--> iodined.c:handle_null_request()
addr = externe IP Adresse des Server (-n Switch)
reply[0] = 'I';
@@ -228,28 +228,28 @@ sich aus Random Daten ergeben.
reply[4] = (addr >> 0) & 0xFF;
TX: iamin.t.yves.tw
= 494e2f737d (_16)
-
+
== Testen auf EDNS Erweiterung
<-- client.c:handshake_edns0_check()
-> send_downenctest()
- downenc = 'r' fuer T_NULL 't'
+ downenc = 'r' fuer T_NULL 't'
variant = 1 = 'b' (b32)
data[0..5] = "y" downenc variant rand_seed[0..2]
RX: yrb***.t.yves.tw
-
- --> iodined.c:handle_null_login() : 937
- -> write_dns( type='R')
+
+ --> iodined.c:handle_null_login() : 937
+ -> write_dns( type='R')
Der Server antwortet mit 48 bytes aus encoding.h:DOWNCODECHECK
TX: yrb***.t.yves.tw, 48 bytes data
-
-
+
+
== Testen der Kodierungen mit verschiedenen Patterns
<-- client.c:handshake_upenc_autodetect()
In den folgenden Tests testet der Client ob mit Base128
kodierte Nachrichten vom DNS Relay korrekt verarbeitet werden.
-
+
--> Der Server schickt die Patterns einfach wieder zurueck.
-
+
== Client legt Kodierung fest, Server bestaetigt
<-- client.c:handshake_switch_codec()
hostname[0] = command 's'
@@ -258,25 +258,25 @@ sich aus Random Daten ergeben.
hostname[3..5] = rand_seed++
rand_seed++;
RX: sahmiut.yves.tw
-
+
--> iodined.c:840
Schreibt den Namen des ausgewaehlten Codecs:
data="Base128" (kein encoding!)
- TX: sahmiut.yves.tw, 7 bytes of data
-
- == Anschalten lazy mode (an: Server beantwortet Anfragen nicht sofort)
+ TX: sahmiut.yves.tw, 7 bytes of data
+
+ == Anschalten lazy mode (an: Server beantwortet Anfragen nicht sofort)
<-- client.c:send_lazy_switch()
hostname[0] = 'o'
hostname[1] = b32(userid) = 'a'
hostname[2] = 'l' fuer lazy mode oder 'i'
hostname[3..5] = rand_seed++
RX: oalmiv.t.yves.tw
-
+
--> iodined.c:919
data="Lazy" (kein encoding!)
TX: oalmiv.t.yves.tw, 4 bytes of data
-
- ==
+
+ ==
<-- client.c:send_set_downstream_fragsize()
data[0] = userid;
data[1] = (fragsize & 0xff00) >> 8;
@@ -288,16 +288,16 @@ sich aus Random Daten ergeben.
--> iodined.c:1042
bestaetigt empfangene Framesize durch Wiederholung
-
- == Regelmaesige pings fragen den Server nach anstehenden Daten ab
+
+ == Regelmaesige pings fragen den Server nach anstehenden Daten ab
<-- client.c:send_ping()
data[0] = userid;
data[1] = ((inpkt.seqno & 7) << 4) | (inpkt.fragment & 15);
data[2] = (rand_seed >> 8) & 0xff;
data[3] = (rand_seed >> 0) & 0xff;
- hostname = 'p' + b32(data)
+ hostname = 'p' + b32(data)
RX: paaalcfy.t.yves.tw
-
+
--> iodined.c:1067
Der Server nutzt die regelmaessigen Pings um Daten an den Client zu liefern.
---------------------------------------------------------------------
@@ -305,16 +305,16 @@ sich aus Random Daten ergeben.
Der lazy Modus
^^^^^^^^^^^^^^
-Wie in der Anwenderdokumentation beschrieben erhöht der Lazy Modus den Durchsatz
+Wie in der Anwenderdokumentation beschrieben erhöht der Lazy Modus den Durchsatz
und senkt die Latenzzeit, wird aber nicht von allen DNS-Relays unterstützt.
Lazy bezieht sich auf das Verhalten des Servers. Der Server wird im Lazy-mode
alle Antworten auf Anfragen solange zurückhalten bis er neue Daten für den
Client erhalten hat. Im Idealfall also bis das Antwortpaket der getunnelten
-IP Verbindung angekommen ist.
+IP Verbindung angekommen ist.
Diese Verzögerung kann mit manchen DNS-Relays Probleme machen. Der Server kann dies jedoch
-anhand der Duplikate in den Anfragen erkennen und damit den lazy-mode ausschalten.
+anhand der Duplikate in den Anfragen erkennen und damit den lazy-mode ausschalten.
Ohne diesen Mechanismus müsste der Client jedoch viel häufiger nach neuen Daten
pollen (vgl. HTTP Long polling in Comet oder BOSH).
@@ -343,15 +343,15 @@ int main(int argc, char *argv[]) {
if (*argv[1] == 'd') {
int r = b32->decode(buf, &len, argv[2], strlen(argv[2]));
int i;
- printf("Decoded %d bytes:\n", r);
+ printf("Decoded %d bytes:\n", r);
for (i = 0; i< r; i++) {
printf("0x%02hhx (%c) ", buf[i], (buf[i] >= '0' && buf[i] <= 'z') ? buf[i] : ' ');
- }
+ }
printf("\n");
} else if (*argv[1] == 'e') {
int r = b32->encode(buf, &len, argv[2], strlen(argv[2]));
printf("Encoded %d bytes in %ld output bytes: >%s<\n", len, r, buf);
- }
+ }
return 0;
}
----------------------------------------------------------------------------------------------------
@@ -375,7 +375,7 @@ sondern 'Bionic libc'. Dies ist eine besonders kleine, auf die BSD libc zurückg
standard C Library. Es fehlen einige Features der glibc wie wide-character support,
volle POSIX Thread Unterstützung oder locale Unterstützung. Das Ziel von Bionic ist
nicht eine vollständige C Standardbibliothek sondern lediglich eine schlanke Implementierung
-aller für ein Android nötigen Funktionen.
+aller für ein Android nötigen Funktionen.
Im einfachsten Fall scheitert die Ausführung von iodine unter Android an einem `system()` Aufruf
mit dem iodine die IP-Konfiguration anwendet.
@@ -393,7 +393,7 @@ C-Quellen angestossen werden.
org.xapek.andiodine % ~/$NDK_ROOT/ndk-build clean
Clean: iodine-client [armeabi]
Clean: stdc++ [armeabi]
-org.xapek.andiodine % ~/$NDK_ROOT/ndk-build
+org.xapek.andiodine % ~/$NDK_ROOT/ndk-build
Compile thumb : iodine-client <= iodine-client.c
Compile thumb : iodine-client <= tun.c
Compile thumb : iodine-client <= dns.c
@@ -530,7 +530,7 @@ Anhang
------
[bibliography]
-- [[[vpnapi]]]
+- [[[vpnapi]]]
http://developer.android.com/reference/android/net/VpnService.html Dokumentation
zu den Android VPN Service API