slipstream/src/slipstream.c
2024-12-16 18:33:21 +08:00

64 lines
No EOL
1.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "slipstream.h"
static void usage(char const * sample_name)
{
fprintf(stderr, "Usage:\n");
fprintf(stderr, " %s client listen_port slipstream_server_name slipstream_server_port domain_name\n", sample_name);
fprintf(stderr, " %s server listen_port cert key target_server_name target_server_port domain_name\n", sample_name);
exit(1);
}
int get_port(char const* sample_name, char const* port_arg)
{
int server_port = atoi(port_arg);
if (server_port <= 0) {
fprintf(stderr, "Invalid port: %s\n", port_arg);
usage(sample_name);
}
return server_port;
}
int main(int argc, char** argv)
{
int exit_code = 0;
#ifdef _WINDOWS
WSADATA wsaData = { 0 };
(void)WSA_START(MAKEWORD(2, 2), &wsaData);
#endif
if (argc < 2) {
usage(argv[0]);
}
else if (strcmp(argv[1], "client") == 0) {
if (argc != 5) {
usage(argv[0]);
}
else {
int local_port = atoi(argv[2]);
char const* resolver_addresses_filename = argv[3];
const char* domain_name = argv[4];
exit_code = picoquic_slipstream_client(local_port, resolver_addresses_filename, domain_name);
}
}
else if (strcmp(argv[1], "server") == 0) {
if (argc != 8) {
usage(argv[0]);
}
else {
int server_port = get_port(argv[0], argv[2]);
int remote_port = get_port(argv[0], argv[6]);
const char* domain_name = argv[7];
exit_code = picoquic_slipstream_server(server_port, argv[3], argv[4], argv[5], remote_port, domain_name);
}
}
else
{
usage(argv[0]);
}
exit(exit_code);
}