feat: Go转C

This commit is contained in:
2026-03-30 13:52:56 +08:00
parent fd0270084b
commit d5ef84200e
46 changed files with 14830 additions and 1 deletions

59
c/cmd/udprelay.c Normal file
View File

@@ -0,0 +1,59 @@
#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;
}