ratox

FIFO based tox client
git clone git://git.2f30.org/ratox.git
Log | Files | Refs | README | LICENSE

README (5725B)


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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
            __                    
           /\ \__                 
 _ __   __ \ \ ,_\   ___   __  _  
/\`'__/'__`\\ \ \/  / __`\/\ \/'\ 
\ \ \/\ \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
|
|-- 00000000
|   |-- members                 # list of people in the conference
|   |-- invite                  # 'echo 0A734CBA717CEB7883D.... >invite' to invite
|   |-- leave                   # 'echo 1 >leave' to leave the conference
|   |-- title_in                # 'echo new-title >title_in' to update the conference title
|   |-- title_out               # contains the current title
|   |-- text_in                 # 'echo blablahumbla >text_in' to message the other conference members
|   |-- text_out                # contains the messages sent so far in the conference
|
|-- id				# 'cat id' to show your own ID, you can give this to your friends
|
|-- conf			# managing conferences
|   |-- err			# conference related errors
|   |-- in			# 'echo "group title" >in' for creating a new group
|   |-- out			# 'echo 1 >out/ID_COOKIE' for joining a conference
|
|-- 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: Yes
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[1] that are built upon
ratox.

Group chats do not have audio yet.


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 or
through tech@lists.2f30.org.

[0] https://tox.chat/
[1] https://git.2f30.org/ratox-nuggets/
[2] https://ratox.2f30.org/ratox-os_x.patch