60 lines
1.7 KiB
C
60 lines
1.7 KiB
C
#include "cli_parse.h"
|
|
#include "server_udp_relay.h"
|
|
|
|
static void udprelay_usage(FILE *out) {
|
|
fprintf(out, "usage: udprelay [-listen addr] [-upstream addr]\n");
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
const char *listen_addr = ":9003";
|
|
const char *upstream_addr = "127.0.0.1:9002";
|
|
udp_relay_t *relay = NULL;
|
|
int i;
|
|
int rc = 1;
|
|
|
|
for (i = 1; i < argc; ++i) {
|
|
const char *value = NULL;
|
|
int handled;
|
|
|
|
if ((handled = cli_parse_value_flag(argc, argv, &i, argv[i], "-listen", &value)) < 0) {
|
|
fprintf(stderr, "udprelay: flag -listen requires a value\n");
|
|
return 1;
|
|
} else if (handled) {
|
|
listen_addr = value;
|
|
continue;
|
|
}
|
|
if ((handled = cli_parse_value_flag(argc, argv, &i, argv[i], "-upstream", &value)) < 0) {
|
|
fprintf(stderr, "udprelay: flag -upstream requires a value\n");
|
|
return 1;
|
|
} else if (handled) {
|
|
upstream_addr = value;
|
|
continue;
|
|
}
|
|
if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
|
|
udprelay_usage(stdout);
|
|
return 0;
|
|
}
|
|
fprintf(stderr, "udprelay: unknown argument %s\n", argv[i]);
|
|
udprelay_usage(stderr);
|
|
return 1;
|
|
}
|
|
|
|
relay = udp_relay_open(listen_addr, upstream_addr);
|
|
if (relay == NULL) {
|
|
fprintf(stderr, "udprelay: open relay %s -> %s failed\n", listen_addr, upstream_addr);
|
|
goto cleanup;
|
|
}
|
|
|
|
fprintf(stderr, "udp relay listening on %s, upstream %s\n", listen_addr, upstream_addr);
|
|
if (udp_relay_serve(relay) != 0) {
|
|
fprintf(stderr, "udprelay: relay serve failed\n");
|
|
goto cleanup;
|
|
}
|
|
|
|
rc = 0;
|
|
|
|
cleanup:
|
|
udp_relay_free(relay);
|
|
return rc;
|
|
}
|