BadVPN – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 include_guard "network_control_server"
2  
3 template network_control_server {
4 alias("_arg0") socket_path;
5 alias("_arg1") template_list_port_forwardings;
6 alias("_arg2") template_add_port_forwarding;
7 alias("_arg3") template_remove_port_forwarding;
8  
9 # Start request server.
10 sys.request_server({"unix", socket_path}, "network_control_server__request_handler", {});
11 }
12  
13 template network_control_server__request_handler {
14 alias("_caller") server;
15  
16 value(_request.data) data;
17  
18 try("network_control_server__try", {});
19  
20 _request->reply({"error", "Bad request."});
21 _request->finish();
22 }
23  
24 template network_control_server__try {
25 alias("_caller._request") request;
26 alias("_caller.server") server;
27 alias("_caller.data") data;
28  
29 val_equal(data.type, "list") a1;
30 _try->assert(a1);
31  
32 num_greater_equal(data.length, "1") a2;
33 _try->assert(a2);
34  
35 data->get("0") request_cmd;
36  
37 val_equal(request_cmd, "list-port-forwardings") is_list_port_forwardings;
38 val_equal(request_cmd, "add-port-forwarding") is_add_port_forwarding;
39 val_equal(request_cmd, "remove-port-forwarding") is_remove_port_forwarding;
40 or(is_add_port_forwarding, is_remove_port_forwarding) is_add_remove_port_forwarding;
41  
42 If (is_list_port_forwardings) {
43 num_equal(data.length, "1") a3;
44 _try->assert(a3);
45  
46 call_with_caller_target(server.template_list_port_forwardings, {}, "server._caller") call;
47 request->reply({"ok", call.port_forwardings});
48 }
49 Elif (is_add_remove_port_forwarding) {
50 num_equal(data.length, "5") a4;
51 _try->assert(a4);
52  
53 data->get("1") req_protocol;
54 data->get("2") req_port_start;
55 data->get("3") req_port_end;
56 data->get("4") req_dest_addr;
57  
58 val_equal(req_protocol, "tcp") is_tcp;
59 val_equal(req_protocol, "udp") is_udp;
60 or(is_tcp, is_udp) a5;
61 _try->assert(a5);
62  
63 parse_number(req_port_start) port_start;
64 _try->assert(port_start.succeeded);
65  
66 parse_number(req_port_end) port_end;
67 _try->assert(port_end.succeeded);
68  
69 num_lesser_equal(port_start, port_end) a6;
70 _try->assert(a6);
71  
72 parse_ipv4_addr(req_dest_addr) dest_addr;
73 _try->assert(dest_addr.succeeded);
74  
75 If (is_add_port_forwarding) {
76 call_with_caller_target(server.template_add_port_forwarding, {req_protocol, port_start, port_end, dest_addr}, "server._caller") call;
77 If (call.succeeded) {
78 request->reply({"ok", "Port forwarding added."});
79 } Else {
80 request->reply({"error", call.error_text});
81 };
82 } Else {
83 call_with_caller_target(server.template_remove_port_forwarding, {req_protocol, port_start, port_end, dest_addr}, "server._caller") call;
84 If (call.succeeded) {
85 request->reply({"ok", "Port forwarding removed."});
86 } Else {
87 request->reply({"error", call.error_text});
88 };
89 };
90 }
91 Else {
92 _try->assert("false");
93 };
94  
95 request->finish();
96 }