badvpn/ncd/examples/router/list-port-forwardings
2013-10-13 21:02:10 +00:00

62 lines
1.5 KiB
Plaintext

#!/usr/bin/badvpn-ncd
process main {
getargs() args;
value(args) args;
num_different(args.length, "0") bad_args;
If (bad_args) {
println("Usage: list-port-forwardings");
exit("1");
};
var("0") exit_status;
sys.request_client({"unix", "/run/ncd-control.socket"}) client;
var({"list-port-forwardings"}) request_data;
client->request(request_data, "reply_handler", "finished_handler", {});
}
template reply_handler {
value(_reply.data) reply_data;
reply_data->get("0") status;
reply_data->get("1") arg;
val_equal(status, "ok") is_ok;
If (is_ok) {
println("Protocol Start End Destination");
Foreach (arg As entry) {
value(entry) entry;
entry->get("0") protocol;
entry->get("1") port_start;
entry->get("2") port_end;
entry->get("3") dest_addr;
call("append_spaces", {port_start, "5"}) fixed_start;
call("append_spaces", {port_end, "5"}) fixed_end;
println(protocol, " ", fixed_start.result, " ", fixed_end.result, " ", dest_addr);
};
} Else {
_caller.exit_status->set("1");
println("Error: ", arg);
};
}
template finished_handler {
exit(_caller.exit_status);
}
template append_spaces {
alias("_arg0") input;
alias("_arg1") min_length;
value(input) result;
backtrack_point() point;
num_lesser(result.length, min_length) more;
If (more) {
result->append(" ");
point->go();
};
}