|
1 #!/usr/bin/python3 |
|
2 # coding=utf8 |
|
3 |
|
4 # hal.hh.cz |
|
5 # /usr/local/bin/dejsem.py |
|
6 # /usr/local/dejsem/ssl |
|
7 # |
|
8 # FVWM shotcuts Ctrl-Alt-B Ctrl-Alt-C Ctrl-Alt-V |
|
9 # Key B A CM Exec ACT=PUSHCLIP CHAN=N dejsem.py # copy local --> shared clipboard |
|
10 # Key C A CM Exec ACT=PUSHCLIP CHAN=N dejsem.py # copy local --> shared clipboard |
|
11 # Key V A CM Exec ACT=PULLCLIP CHAN=N dejsem.py # copy shared --> local clipboard |
|
12 # |
|
13 # server side |
|
14 # ● akceptuje cmd-connection na základním portu kanálu a přijímá z ní příkazy |
|
15 # ● po provedení příkazu |
|
16 # PULLCLIP |
|
17 # PULLHIST |
|
18 # PUSHCLIP |
|
19 # GETPEER |
|
20 # SETPEER |
|
21 # EXPOSE |
|
22 # EXPOSEUP |
|
23 # FREE |
|
24 # LONGTASK |
|
25 # se connection uzavře |
|
26 # ● po provedení příkazu |
|
27 # PULLFILE |
|
28 # PUSHFILE |
|
29 # PULLLIST |
|
30 # MOVE |
|
31 # DELETE |
|
32 # CREATDIR |
|
33 # RECKON |
|
34 # 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é |
|
35 # timeouts |
|
36 # conn_TO connection retry wait TO - wait before next connect try (try <connThreshold> times) |
|
37 # block_TO blocking net operations TO |
|
38 # long_run_accept_TO accept TO on ports binded dynamicaly for long duration operations |
|
39 # peer_accept_TO accept TO waiting for connection from peer when receiving peer files (PULLPEER) |
|
40 |
|
41 import sys, os, random, time, signal |
|
42 |
|
43 def stop(sign, frame): |
|
44 for pid in pids: |
|
45 os.kill(pid, signal.SIGTERM) |
|
46 |
|
47 pids = set() # seznam subthreads pro účely mimořádného ukončení |
|
48 |
|
49 if __name__ == '__main__': |
|
50 from parms import Parms |
|
51 Parms.setup() |
|
52 random.seed(Parms.random_seed) if Parms.random_seed else random.seed() |
|
53 |
|
54 from d import D |
|
55 D.t0 = time.time() |
|
56 d = D(Parms.applName) |
|
57 d.log("{}, ver. {:.2f}".format(sys.argv[0], Parms.version), sev=1) |
|
58 |
|
59 if Parms.action == 'SRV': |
|
60 from server import Server |
|
61 pid = os.fork() |
|
62 if not pid: # child |
|
63 from meter import Meter |
|
64 Meter(d).run() |
|
65 sys.exit(0) |
|
66 else: # parent |
|
67 pids.add(pid) |
|
68 d.log("Meter spawned in process {}".format(pid), sev=1) |
|
69 for chan in range(1, 99): |
|
70 if "{:02d}".format(chan) in os.listdir(Parms.srv_homedir): |
|
71 pid = os.fork() |
|
72 if not pid: # child |
|
73 Server(d, chan) |
|
74 sys.exit(0) |
|
75 else: # parent |
|
76 pids.add(pid) |
|
77 d.log("server node SSL {:02d} started in process {}".format(chan, pid), sev=4) |
|
78 d.log("all server nodes spawned", sev=1) |
|
79 signal.signal(signal.SIGINT, stop) |
|
80 signal.signal(signal.SIGTERM, stop) |
|
81 signal.pthread_sigmask(signal.SIG_UNBLOCK, {signal.SIGINT, signal.SIGTERM}) |
|
82 signal.pause() |
|
83 d.log("KeyboardInterrupt") |
|
84 else: |
|
85 from client import Client |
|
86 Client(d) |