1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
__
/\ \__
_ __ __ \ \ ,_\ ___ __ _
/\`'__/'__`\\ \ \/ / __`\/\ \/'\
\ \ \/\ \L\.\\ \ \_/\ \L\ \/> </
\ \_\ \__/.\_\ \__\ \____//\_/\_\
\/_/\/__/\/_/\/__/\/___/ \//\/_/
-- by sin and FRIGN
======================================================
What is it?
===========
ratox is a client implementation of the rather popular tox protocol[0].
Unlike other clients relying on GUIs as an interface to the user, ratox is
developed with the UNIX-philosophy in mind and allows complete
interaction through named pipes.
There's also a set of scripts[1] developed by various people that build on
top of the FIFO interface.
Getting started
===============
Get the latest version from the git-repository; build and install it.
Run ratox in an empty directory and it will create a set of files and
folders allowing you to control the client.
File structure
==============
A typical filesystem structure is shown below along with some comments
to help explain the semantics of the individual files.
.
|-- .ratox.data # ratox save file
|
|-- 0A734CBA717CEB7883D.... # friend's ID excluding nospam + checksum
| |-- call_in # 'arecord -r 48000 -c 1 -f S16_LE > call_in' to initiate a call
| |-- call_out # 'aplay -r 48000 -c 1 -f S16_LE - < call_out' to answer a call
| |-- call_state # (none, pending, active)
| |-- file_in # 'cat foo > file_in' to send a file
| |-- file_out # 'cat file_out > bar' to receive a file
| |-- file_pending # contains filename if transfer pending, empty otherwise
| |-- name # friend's nickname
| |-- online # 1 if friend online, 0 otherwise
| |-- remove # 'echo 1 > remove' to remove a friend
| |-- state # friend's user state; could be any of {none,away,busy}
| |-- status # friend's status message
| |-- text_in # 'echo yo dude > text_in' to send a text to this friend
| `-- text_out # 'tail -f text_out' to dump to stdout any text received
|
|-- id # 'cat id' to show your own ID, you can give this to your friends
|
|-- name # changing your nick
| |-- err # nickname related errors
| |-- in # 'echo my-new-nick > in' to change your name
| `-- out # 'cat out' to show your name
|
|-- nospam # changing your nospam
| |-- err # nospam related errors
| |-- in # 'echo AABBCCDD > in' to change your nospam
| `-- out # 'cat out' to show your nospam
|
|-- request # send and accept friend requests
| |-- err # request related errors
| |-- in # 'echo LONGASSID yo dude add me > in' to send a friend request
| `-- out # 'echo 1 > out/LONGASSID' to accept the friend request
|
|-- state # changing your user state
| |-- err # user status related errors
| |-- in # 'echo away > in' to change your user state; could be any of {none,away,busy}
| `-- out # 'cat out' to show your user state
|
`-- status # changing your status message
|-- err # status message related errors
|-- in # 'cat I am bored to death > in' to change your status message
`-- out # 'cat out' to show your status message
Features
========
1 v 1 messaging: Yes
File transfer: Yes
Group chat: No
Audio: Yes
Video: No
DNS discovery: No
Chat logs: Yes
Proxy support: Yes
Offline message: Yes
Offline transfers: Yes
Contact aliases: No
Contact blocking: No
Save file encryption: Yes
Multilingual: No
Multiprofile: Yes
Typing notification: No
Audio notifications: No
Emoticons: No
Spell check: No
Desktop sharing: No
Inline images: No
File resuming: No
Read receipts: No
Message splitting: Yes
Changing nospam: Yes
toxi URI: No
NOTE: Some of these features are not intended to be developed
in ratox itself but rather in external scripts that are built upon
ratox.
Examples
========
SSH over TOX for the practical paranoid
---------------------------------------
On the sender side (the client):
1) cd into the friend's directory (the server)
2) nc -lv 1234 > file_in < file_out
On the receiver side (the server):
1) cd into the friend's directory (the client)
2) cat < file_out | nc localhost 22 > file_in
Now on the client run the following:
ssh -o ProxyCommand="nc %h 1234" user@localhost
Screencasting using ffmpeg and mplayer
--------------------------------------
On the sender side:
ffmpeg -f x11grab -r 10 -s 1366x768 -i :0.0 -vcodec libx264 \
-pix_fmt yuv420p -preset fast -tune zerolatency -b:v 500k \
-f flv pipe: > file_in
On the receiver side:
mplayer -cache 1024 file_out
You may have to play about with the cache size.
Portability
===========
Builds and works on *BSD and Linux. To build on OSX you need
to apply a patch[2].
Contact
=======
You can reach us through the freenode IRC network at #2f30.
If you have any patches, ideas or feedback feel free to join.
[0] https://tox.im/
[1] http://git.2f30.org/ratox-nuggets/
[2] http://u.2f30.org/sin/patches/ratox/0001-Add-OSX-replacements-for-certain-functions.patch
|