BadVPN – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | include_guard "onoff_server" |
2 | |||
3 | template onoff_server_main { |
||
4 | alias("_arg0") socket_path; |
||
5 | |||
6 | depend_scope() depsc; |
||
7 | process_manager() mgr; |
||
8 | |||
9 | sys.request_server({"unix", socket_path}, "onoff_server__request_handler", {}); |
||
10 | } |
||
11 | |||
12 | template onoff_server_onoff { |
||
13 | alias(_arg0) main; |
||
14 | alias("_arg1") onoff_id; |
||
15 | alias("_arg2") default_state; |
||
16 | |||
17 | main.mgr->start(onoff_id, "onoff_server__id_proc", {onoff_id, default_state}); |
||
18 | main.depsc->depend({onoff_id}) id_proc; |
||
19 | |||
20 | id_proc.blk->use(); |
||
21 | } |
||
22 | |||
23 | template onoff_server__id_proc { |
||
24 | alias("_caller") main; |
||
25 | alias("_arg0") onoff_id; |
||
26 | alias("_arg1") default_state; |
||
27 | |||
28 | blocker() blk; |
||
29 | If (default_state) { |
||
30 | blk->up(); |
||
31 | }; |
||
32 | main.depsc->provide(onoff_id); |
||
33 | } |
||
34 | |||
35 | template onoff_server__request_handler { |
||
36 | alias("_caller") main; |
||
37 | |||
38 | try("onoff_server__try_request", {}); |
||
39 | |||
40 | _request->reply({"error", "Bad request."}); |
||
41 | _request->finish(); |
||
42 | } |
||
43 | |||
44 | template onoff_server__try_request { |
||
45 | alias("_caller.main") main; |
||
46 | alias("_caller._request") request; |
||
47 | |||
48 | value(request.data) data; |
||
49 | |||
50 | val_equal(data.type, "list") a; |
||
51 | _try->assert(a); |
||
52 | |||
53 | num_greater_equal(data.length, "1") a; |
||
54 | _try->assert(a); |
||
55 | |||
56 | data->get("0") request_cmd; |
||
57 | val_equal(request_cmd, "set_onoff") is_set_onoff; |
||
58 | |||
59 | If (is_set_onoff) { |
||
60 | num_equal(data.length, "3") a; |
||
61 | _try->assert(a); |
||
62 | |||
63 | data->get("1") onoff_id; |
||
64 | data->get("2") new_state; |
||
65 | |||
66 | main.mgr->start(onoff_id, "onoff_server__id_proc", {onoff_id, new_state}); |
||
67 | main.depsc->depend({onoff_id}) id_proc; |
||
68 | |||
69 | val_equal(new_state, "true") is_on; |
||
70 | If (is_on) { |
||
71 | id_proc.blk->up(); |
||
72 | } Else { |
||
73 | id_proc.blk->down(); |
||
74 | }; |
||
75 | } |
||
76 | Else { |
||
77 | _try->assert("false"); |
||
78 | }; |
||
79 | |||
80 | request->reply({"OK", "state has been set"}); |
||
81 | request->finish(); |
||
82 | } |