tox_wrapper/README.md

124 lines
5.0 KiB
Markdown
Raw Normal View History

2024-02-19 15:01:39 +01:00
# tox_wrapper
[ctypes](https://docs.python.org/3/library/ctypes.html)
wrapping of [Tox](https://tox.chat/)
[```libtoxcore```](https://github.com/TokTok/c-toxcore) into Python
using [ctypesgen](https://github.com/ctypesgen/ctypesgen)
2024-02-19 15:15:31 +01:00
The full c-toxcore library is covered, but it doesn't actually work yet -
dunno why.
2024-02-19 15:01:39 +01:00
The code is typed so that every call in ```tox*.py``` should have the
right signature.
It has been tested with UDP and TCP proxy (Tor). It has ***not*** been
tested on Windows, and there may be some minor breakage, which should be
easy to fix. There is a good coverage integration testsuite in
```tox_wrapper/tests```. Change to that directory and run
```tests_wrapper.py --help```; the test suite gives a good set of examples of usage.
## Install
Run ```make install``` or put the parent of the wrapper directory on
your PYTHONPATH and touch a file called `__init__.py` in its parent
directory.
Set the ```TOXCORE_LIBS``` environment variable to say where to find
your ```libtoxcore.so``` and ```libtoxav.so``` and ```libtoxencryptsave.so```
files. Link all 3 filenames to ```libtoxcore.so``` if you have only
```libtoxcore.so``` (which is usually the case if you built
```c-toxcore``` with ```cmake``` rather than
```autogen/configure```). The environment variable TOXCORE_LIBS overrides;
look in the file ```tox_wrapper/libtox.py``` for the details.
# Tests
To test, run ```python3 tox_wrapper/tests/tests_wrapper.py --help```
As is, the code in ```tox.py``` is very verbose. Edit the file to change
```
def LOG_ERROR(a): print('EROR> '+a)
def LOG_WARN(a): print('WARN> '+a)
def LOG_INFO(a): print('INFO> '+a)
def LOG_DEBUG(a): print('DBUG> '+a)
def LOG_TRACE(a): pass # print('TRAC> '+a)
```
to all ```pass #``` or use ```logging.logger``` to suite your tastes.
```logging.logger``` can be dangerous in callbacks in ```Qt``` applications,
so we use simple print statements as default. The same applies to
```tox_wrapper/tests/tests_wrapper.py```.
## Prerequisites
No prerequisites in Python3 other than ctypesgen.
## Other wrappers
There are a number of other wrappings into Python of Tox core.
This one uses [ctypes](https://docs.python.org/3/library/ctypes.html)
which has its merits - there is no need to recompile anything as with
Cython - change the Python file and it's done. And you can follow things
in a Python debugger, or with the utterly stupendous Python feature of
```gdb``` (```gdb -ex r --args /usr/bin/python3.11 <pyfile>```).
CTYPES code can be brittle, segfaulting if you've got things wrong,
but if your wrapping is right, it is very efficient and easy to work on.
The [faulthandler](https://docs.python.org/3/library/faulthandler.html)
module can be helpful in debugging crashes
(e.g. from segmentation faults produced by erroneous C library wrapping).
Others include:
2024-02-19 15:15:31 +01:00
* <https://git.plastiras.org/emdee/toxygen_wrapper> Ctypes bindings
originally from <https://github.com/toxygen-project/toxygen>
```next_gen``` branch by Ingvar. Those bindings work, unlike these.
Because it's ctypes you can follow things in a Python debugger,
or with the utterly stupendous Python feature of ```gdb```.
2024-02-19 15:01:39 +01:00
* <https://github.com/TokTok/py-toxcore-c> Cython bindings.
Incomplete and not really actively supported. Maybe it will get
worked on in the future, but TokTok seems to be working on
java, rust, scalla, go, etc. bindings instead.
No support for NGC groups or toxencryptsave.
* <https://github.com/oxij/PyTox>
forked from https://github.com/aitjcize/PyTox
by Wei-Ning Huang <aitjcize@gmail.com>.
Hardcore C wrapping which is not easy to keep up to date.
No support for NGC or toxencryptsave. Abandonned.
This was the basis for the TokTok/py-toxcore-c code until recently.
To our point of view, the ability of CTYPEs to follow code in the
debugger is a crucial advantage.
## Updates
2024-02-19 15:24:33 +01:00
To regerate the bindings to a new c-toxcore, install ctypesgen
```
make build
```
and exit the Makefile to set CTOXCORE to where your c-toxcore is. Then
```
make install
```
Then try patching the resulting file with:
```
patch -b -z .dst src/tox_wrapper/tox_ctypesgen.py \
< src/tox_wrapper/tox_ctypesgen.py.diff
```
You may need to resolve any rejections if the ctypesgen file has changed.
2024-02-19 15:01:39 +01:00
Although Tox works over Tor, we do not recommend its usage for
anonymity as it leaks DNS requests due to a 6-year old known security
issue: https://github.com/TokTok/c-toxcore/issues/469 unless your Tox client
does hostname lookups before calling Tox (like toxygen does). Otherwise,
do not use it for anonymous communication unless you have a firewall in place.
The Tox project does not follow semantic versioning of its main structures
so the project may break the underlying ctypes wrapper at any time, so
you should run ctypesgen each time you install a new version of c-toxcore.
Up-to-date code is on https://git.plastiras.org/emdee/tox_wrapper
Work on this project is suspended until the
[MultiDevice](https://git.plastiras.org/emdee/tox_profile/wiki/MultiDevice-Announcements-POC) problem is solved. Fork me!