Base and main module is transport.py, it is abstraction for BSD Sockets with error correction, used algorithm is Hamming, its implementation can be found in hamming.py. For security I used Diffie Hellman its implementation can be found in diffie_hellman.py,
the key exchange is performed in func def handshake(self, data):
from server_abstr.py and client_abstr.py .
For application lvl I tried to make a protocol based on the workings (state machine) of a stationary telephone, it is composed of
client - server --- server2 - client2, client abstraction can be found in client_abstr.py and server abstraction in server_abstr.py.
client.py, client2.py, server.py and server2.py are just instance of their abstraction in which I define ports for sockets.
Order of running: client.py or client2.py and server.py or server2.py