#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; }