Add bound IP
This commit is contained in:
parent
f05477cd56
commit
a3d2b4a4b0
5 changed files with 20 additions and 8 deletions
12
src/donar.c
12
src/donar.c
|
@ -14,7 +14,7 @@ int main(int argc, char** argv) {
|
||||||
struct donar_params dp = {0};
|
struct donar_params dp = {0};
|
||||||
donar_init_params (&dp);
|
donar_init_params (&dp);
|
||||||
|
|
||||||
while ((dp.opt = getopt(argc, argv, "vcse:r:o:a:bhl:d:f:")) != -1) {
|
while ((dp.opt = getopt(argc, argv, "vcse:r:o:a:bhl:d:f:i:")) != -1) {
|
||||||
switch(dp.opt) {
|
switch(dp.opt) {
|
||||||
case 'v':
|
case 'v':
|
||||||
dp.verbose++;
|
dp.verbose++;
|
||||||
|
@ -53,6 +53,9 @@ int main(int argc, char** argv) {
|
||||||
case 'd':
|
case 'd':
|
||||||
sscanf(optarg, "%d,%d", &dp.fresh_data, &dp.redundant_data);
|
sscanf(optarg, "%d,%d", &dp.fresh_data, &dp.redundant_data);
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
dp.bound_ip = strdup(optarg);
|
||||||
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
dp.capture_file = strdup(optarg);
|
dp.capture_file = strdup(optarg);
|
||||||
break;
|
break;
|
||||||
|
@ -63,6 +66,7 @@ int main(int argc, char** argv) {
|
||||||
|
|
||||||
if (!(dp.is_server ^ dp.is_client)) goto in_error;
|
if (!(dp.is_server ^ dp.is_client)) goto in_error;
|
||||||
if (dp.algo == NULL) goto in_error;
|
if (dp.algo == NULL) goto in_error;
|
||||||
|
if (dp.bound_ip == NULL) dp.bound_ip = strdup("127.0.0.1");
|
||||||
|
|
||||||
if (dp.is_server) {
|
if (dp.is_server) {
|
||||||
struct donar_server_ctx ctx;
|
struct donar_server_ctx ctx;
|
||||||
|
@ -77,15 +81,17 @@ int main(int argc, char** argv) {
|
||||||
|
|
||||||
in_error:
|
in_error:
|
||||||
dp.errored = 1;
|
dp.errored = 1;
|
||||||
fprintf(stderr, "Usage as client : %s -c -a <algo> -o <onion service file> [-h] [-b] [-f <dump packets>] [-l <links>] [-d <fresh>,<red>] [-e <exposed udp port>]* [-r <remote udp port>]*\n", argv[0]);
|
fprintf(stderr, "Usage as client : %s -c -a <algo> -o <onion service file> [-h] [-b] [-i <bound ip>] [-f <dump packets>] [-l <links>] [-d <fresh>,<red>] [-e <exposed udp port>]* [-r <remote udp port>]*\n", argv[0]);
|
||||||
fprintf(stderr, "Usage as server : %s -s -a <algo> [-h] [-b] [-l <links>] [-f <dump_packets>] [-d <fresh>,<red>] [-e <exposed udp port>]* [-r <remote udp port>]*\n\n", argv[0]);
|
fprintf(stderr, "Usage as server : %s -s -a <algo> [-h] [-b] [-i <bound ip>] [-l <links>] [-f <dump_packets>] [-d <fresh>,<red>] [-e <exposed udp port>]* [-r <remote udp port>]*\n\n", argv[0]);
|
||||||
fprintf(stderr, "Passed parameters: client=%d, server=%d, algo=%s, exposed_ports=%d, remote_ports=%d, onion_file=%s, links=%d, duplication=%d,%d\n",
|
fprintf(stderr, "Passed parameters: client=%d, server=%d, algo=%s, exposed_ports=%d, remote_ports=%d, onion_file=%s, links=%d, duplication=%d,%d\n",
|
||||||
dp.is_client, dp.is_server, dp.algo, dp.exposed_ports->len, dp.remote_ports->len, dp.onion_file, dp.links, dp.fresh_data, dp.redundant_data);
|
dp.is_client, dp.is_server, dp.algo, dp.exposed_ports->len, dp.remote_ports->len, dp.onion_file, dp.links, dp.fresh_data, dp.redundant_data);
|
||||||
|
|
||||||
terminate:
|
terminate:
|
||||||
|
// @FIXME: Should be refactored in free_donar_params()
|
||||||
if (dp.onion_file != NULL) free(dp.onion_file);
|
if (dp.onion_file != NULL) free(dp.onion_file);
|
||||||
if (dp.algo != NULL) free(dp.algo);
|
if (dp.algo != NULL) free(dp.algo);
|
||||||
if (dp.capture_file != NULL) free(dp.capture_file);
|
if (dp.capture_file != NULL) free(dp.capture_file);
|
||||||
|
if (dp.bound_ip != NULL) free(dp.bound_ip);
|
||||||
|
|
||||||
g_ptr_array_free(dp.exposed_ports, TRUE);
|
g_ptr_array_free(dp.exposed_ports, TRUE);
|
||||||
g_ptr_array_free(dp.remote_ports, TRUE);
|
g_ptr_array_free(dp.remote_ports, TRUE);
|
||||||
|
|
|
@ -103,7 +103,9 @@ void donar_client(struct donar_client_ctx* ctx, struct donar_params* dp) {
|
||||||
g_ptr_array_foreach (dp->remote_ports, (void(*)(void*, void*))init_udp_remote, &(ctx->evts));
|
g_ptr_array_foreach (dp->remote_ports, (void(*)(void*, void*))init_udp_remote, &(ctx->evts));
|
||||||
printf("--- Remote ports are binded locally\n");
|
printf("--- Remote ports are binded locally\n");
|
||||||
|
|
||||||
g_ptr_array_foreach (dp->exposed_ports, (void(*)(void*, void*))init_udp_exposed, &(ctx->evts));
|
for (int i = 0; i < dp->exposed_ports->len; i++) {
|
||||||
|
init_udp_exposed(dp->bound_ip, g_ptr_array_index (dp->exposed_ports, i), &(ctx->evts));
|
||||||
|
}
|
||||||
printf("--- Local UDP services are exposed\n");
|
printf("--- Local UDP services are exposed\n");
|
||||||
|
|
||||||
evt_core_loop(&(ctx->evts));
|
evt_core_loop(&(ctx->evts));
|
||||||
|
|
|
@ -99,7 +99,7 @@ socket_failed:
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_udp_exposed(char* port, struct evt_core_ctx* evts) {
|
void init_udp_exposed(char* bound_ip, char* port, struct evt_core_ctx* evts) {
|
||||||
int sock1, sock2;
|
int sock1, sock2;
|
||||||
char url[1024];
|
char url[1024];
|
||||||
|
|
||||||
|
@ -147,6 +147,7 @@ void donar_init_params(struct donar_params* dp) {
|
||||||
dp->onion_file = NULL;
|
dp->onion_file = NULL;
|
||||||
dp->algo = NULL;
|
dp->algo = NULL;
|
||||||
dp->capture_file = NULL;
|
dp->capture_file = NULL;
|
||||||
|
dp->bound_ip = NULL;
|
||||||
dp->is_server = 0;
|
dp->is_server = 0;
|
||||||
dp->is_client = 0;
|
dp->is_client = 0;
|
||||||
dp->is_healing = 0;
|
dp->is_healing = 0;
|
||||||
|
|
|
@ -10,11 +10,11 @@
|
||||||
|
|
||||||
struct donar_params {
|
struct donar_params {
|
||||||
int opt, is_server, is_client, is_waiting_bootstrap, is_healing, errored, verbose, links, fresh_data, redundant_data;
|
int opt, is_server, is_client, is_waiting_bootstrap, is_healing, errored, verbose, links, fresh_data, redundant_data;
|
||||||
char *port, *onion_file, *algo, *capture_file;
|
char *bound_ip, *port, *onion_file, *algo, *capture_file;
|
||||||
GPtrArray *remote_ports, *exposed_ports;
|
GPtrArray *remote_ports, *exposed_ports;
|
||||||
};
|
};
|
||||||
|
|
||||||
void signal_init(struct evt_core_ctx* evts);
|
void signal_init(struct evt_core_ctx* evts);
|
||||||
void init_udp_remote(char* port, struct evt_core_ctx* evts);
|
void init_udp_remote(char* port, struct evt_core_ctx* evts);
|
||||||
void init_udp_exposed(char* port, struct evt_core_ctx* evts);
|
void init_udp_exposed(char *bound_ip, char* port, struct evt_core_ctx* evts);
|
||||||
void donar_init_params(struct donar_params* dp);
|
void donar_init_params(struct donar_params* dp);
|
||||||
|
|
|
@ -82,8 +82,11 @@ void donar_server(struct donar_server_ctx* ctx, struct donar_params* dp) {
|
||||||
g_ptr_array_foreach (dp->remote_ports, (void(*)(void*, void*))init_udp_remote, &(ctx->evts));
|
g_ptr_array_foreach (dp->remote_ports, (void(*)(void*, void*))init_udp_remote, &(ctx->evts));
|
||||||
printf("--- Remote ports are binded locally\n");
|
printf("--- Remote ports are binded locally\n");
|
||||||
|
|
||||||
g_ptr_array_foreach (dp->exposed_ports, (void(*)(void*, void*))init_udp_exposed, &(ctx->evts));
|
for (int i = 0; i < dp->exposed_ports->len; i++) {
|
||||||
|
init_udp_exposed(dp->bound_ip, g_ptr_array_index (dp->exposed_ports, i), &(ctx->evts));
|
||||||
|
}
|
||||||
printf("--- Local UDP services are exposed\n");
|
printf("--- Local UDP services are exposed\n");
|
||||||
|
|
||||||
evt_core_loop (&(ctx->evts));
|
evt_core_loop (&(ctx->evts));
|
||||||
|
|
||||||
destroy_resources (&(ctx->tos), &(ctx->tctl));
|
destroy_resources (&(ctx->tos), &(ctx->tctl));
|
||||||
|
|
Loading…
Reference in a new issue