#!/usr/bin/python3
# coding=utf8
# hal.hh.cz
# /usr/local/bin/dejsem.py
# /usr/local/dejsem/ssl
#
# FVWM shotcuts Ctrl-Alt-B Ctrl-Alt-C Ctrl-Alt-V
# Key B A CM Exec ACT=PUSHCLIP CHAN=N dejsem.py # copy local --> shared clipboard
# Key C A CM Exec ACT=PUSHCLIP CHAN=N dejsem.py # copy local --> shared clipboard
# Key V A CM Exec ACT=PULLCLIP CHAN=N dejsem.py # copy shared --> local clipboard
#
# server side
# ● akceptuje cmd-connection na základním portu kanálu a přijímá z ní příkazy
# ● po provedení příkazu
# PULLCLIP
# PULLHIST
# PUSHCLIP
# GETPEER
# SETPEER
# EXPOSE
# EXPOSEUP
# FREE
# LONGTASK
# se connection uzavře
# ● po provedení příkazu
# PULLFILE
# PUSHFILE
# PULLLIST
# MOVE
# DELETE
# CREATDIR
# RECKON
# zůstává connection otevřená a pokračuje čtením dalšího příkazu, protože tyto příkazy mohou být dávkové
# timeouts
# conn_TO connection retry wait TO - wait before next connect try (try <connThreshold> times)
# block_TO blocking net operations TO
# long_run_accept_TO accept TO on ports binded dynamicaly for long duration operations
# peer_accept_TO accept TO waiting for connection from peer when receiving peer files (PULLPEER)
import sys, os, random, time, signal
def stop(sign, frame):
for pid in pids:
os.kill(pid, signal.SIGTERM)
pids = set() # seznam subthreads pro účely mimořádného ukončení
if __name__ == '__main__':
from parms import Parms
Parms.setup()
random.seed(Parms.random_seed) if Parms.random_seed else random.seed()
from d import D
D.t0 = time.time()
d = D(Parms.applName)
d.log("{}, ver. {:.2f}".format(sys.argv[0], Parms.version), sev=1)
if Parms.action == 'SRV':
from server import Server
pid = os.fork()
if not pid: # child
from meter import Meter
Meter(d).run()
sys.exit(0)
else: # parent
pids.add(pid)
d.log("Meter spawned in process {}".format(pid), sev=1)
for chan in range(1, 99):
if "{:02d}".format(chan) in os.listdir(Parms.srv_homedir):
pid = os.fork()
if not pid: # child
Server(d, chan)
sys.exit(0)
else: # parent
pids.add(pid)
d.log("server node SSL {:02d} started in process {}".format(chan, pid), sev=4)
d.log("all server nodes spawned", sev=1)
signal.signal(signal.SIGINT, stop)
signal.signal(signal.SIGTERM, stop)
signal.pthread_sigmask(signal.SIG_UNBLOCK, {signal.SIGINT, signal.SIGTERM})
signal.pause()
d.log("KeyboardInterrupt")
else:
from client import Client
Client(d)