Initial commit
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.idea*
|
||||||
22
Readme.md
Normal file
22
Readme.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
This whole project is still a major WIP. Details to follow.
|
||||||
|
|
||||||
|
Basically, this is supposed to be a modernized BBS for radio,
|
||||||
|
but exchanging binary messages (which can be compressed automatically)
|
||||||
|
rather than human-typed text.
|
||||||
|
|
||||||
|
I'm planning several features like:
|
||||||
|
|
||||||
|
- automatic compression for all RF communication
|
||||||
|
- messages for other users
|
||||||
|
- RF beacon
|
||||||
|
- administration over RF
|
||||||
|
- object storage/retrieval
|
||||||
|
- running user-scripts scripts or shell commands on the server in containers with podman/docker
|
||||||
|
- possibly a cron system (again in containers for safety)
|
||||||
|
- maybe an e-mail or an sms gateway (though clever user uploaded scripts could do this instead)
|
||||||
|
- maybe APRS integration through APRS-IS
|
||||||
|
|
||||||
|
I may also add a TCP/IP interface to this later, since that shouldn't be too difficult. We'll see.
|
||||||
|
|
||||||
|
I'm envisioning using a couple of python CLI clients with this for now, or possibly an android or
|
||||||
|
PC GUI, assuming an AGWPE TNC is available on the network.
|
||||||
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
pyham_pe
|
||||||
|
msgpack
|
||||||
|
pyham_ax25
|
||||||
|
ZODB
|
||||||
0
src/packetserver/__init__.py
Normal file
0
src/packetserver/__init__.py
Normal file
2
src/packetserver/client/__init__.py
Normal file
2
src/packetserver/client/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
class Client:
|
||||||
|
pass
|
||||||
34
src/packetserver/common/__init__.py
Normal file
34
src/packetserver/common/__init__.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
from pe.connect import Connection
|
||||||
|
from threading import Lock
|
||||||
|
from msgpack import Unpacker
|
||||||
|
|
||||||
|
|
||||||
|
class PacketServerConnection(Connection):
|
||||||
|
|
||||||
|
connection_subscribers = []
|
||||||
|
receive_subscribers = []
|
||||||
|
|
||||||
|
def __init__(self, port, call_from, call_to, incoming=False):
|
||||||
|
super().__init__(port, call_from, call_to, incoming=incoming)
|
||||||
|
# Now perform any initialization of your own that you might need
|
||||||
|
self.data = Unpacker()
|
||||||
|
self.data_lock = Lock()
|
||||||
|
|
||||||
|
def connected(self):
|
||||||
|
print("connected")
|
||||||
|
for fn in PacketServerConnection.connection_subscribers:
|
||||||
|
fn(self)
|
||||||
|
|
||||||
|
def disconnected(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def data_received(self, pid, data):
|
||||||
|
with self.data_lock:
|
||||||
|
self.data.feed(data)
|
||||||
|
for fn in PacketServerConnection.receive_subscribers:
|
||||||
|
fn(self)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def query_accept(cls, port, call_from, call_to):
|
||||||
|
return True
|
||||||
|
|
||||||
22
src/packetserver/server/__init__.py
Normal file
22
src/packetserver/server/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import pe
|
||||||
|
from ..common import PacketServerConnection
|
||||||
|
import ax25
|
||||||
|
from configparser import ConfigParser
|
||||||
|
from pathlib import Path
|
||||||
|
import ZODB, transaction
|
||||||
|
|
||||||
|
class Server:
|
||||||
|
def __init__(self, pe_server: str, port: int, server_callsign: str, data_dir: str = None):
|
||||||
|
if not ax25.Address.valid_call(server_callsign):
|
||||||
|
raise ValueError(f"Provided callsign '{server_callsign}' is invalid.")
|
||||||
|
self.callsign = server_callsign
|
||||||
|
self.pe_server = pe_server
|
||||||
|
self.pe_port = port
|
||||||
|
if data_dir:
|
||||||
|
if Path.is_dir(data_dir):
|
||||||
|
self.home_dir = data_dir
|
||||||
|
|
||||||
|
|
||||||
|
def server_receiver(self, conn: PacketServerConnection):
|
||||||
|
pass
|
||||||
|
pass
|
||||||
Reference in New Issue
Block a user