update changelog
[debian/iodine.git] / doc / proto_00000402.txt
1 Detailed specification of protocol in version 00000402
2 ======================================================
3
4 CMC = 2 byte Cache Miss Counter, increased every time it is used
5
6 Version:
7 Client sends:
8         First byte v or V
9         Rest encoded with base32:
10         4 bytes big endian protocol version
11         CMC
12 Server replies:
13         4 chars:
14                 VACK (version ok), followed by login challenge
15                 VNAK (version differs), followed by server protocol version
16                 VFUL (server has no free slots), followed by max users
17         4 byte value: means login challenge/server protocol version/max users
18         1 byte userid of the new user, or any byte if not VACK
19         
20 Login:
21 Client sends:
22         First byte l or L
23         Rest encoded with base32:
24         1 byte userid
25         16 bytes MD5 hash of: (first 32 bytes of password) xor (8 repetitions of login challenge)
26         CMC
27 Server replies:
28         LNAK means not accepted
29         x.x.x.x-y.y.y.y-mtu means accepted (server ip, client ip, mtu)
30
31 Case check:
32 Client sends: 
33         First byte z or Z
34         Lots of data that should not be decoded
35 Server replies:
36         The requested domain copied raw
37
38 Data:
39 Data header:
40          321 0 
41         +---+-+
42         |UUU|L|
43         +---+-+
44
45 UUU = Userid
46 L = Last fragment in packet flag
47
48 First byte is the header, 4 bits coded as hex in ASCII. 
49 Followed by data encoded with Base32.
50
51 Ping:
52 Client sends:
53         First byte p or P
54         Rest encoded with Base32:
55         1 byte userid
56         CMC
57
58 The server response to Ping and Data packets is a DNS NULL type response:
59 If server has nothing to send, data length is 0 bytes.
60 If server has a packet to send, data length is set and the data is a full raw
61 unencoded ip packet, prefixed with 32 bits tun data.