Add a verbose switch
This commit is contained in:
parent
689b99cc25
commit
5a0e746e30
9 changed files with 32 additions and 17 deletions
|
@ -15,8 +15,11 @@ int main(int argc, char** argv) {
|
||||||
struct donar_params dp;
|
struct donar_params dp;
|
||||||
donar_init_params (&dp);
|
donar_init_params (&dp);
|
||||||
|
|
||||||
while ((dp.opt = getopt(argc, argv, "cse:r:o:a:bh")) != -1) {
|
while ((dp.opt = getopt(argc, argv, "vcse:r:o:a:bh")) != -1) {
|
||||||
switch(dp.opt) {
|
switch(dp.opt) {
|
||||||
|
case 'v':
|
||||||
|
dp.verbose++;
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
dp.is_server = 1;
|
dp.is_server = 1;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -76,7 +76,7 @@ void donar_client(struct donar_client_ctx* ctx, struct donar_params* dp) {
|
||||||
.is_healing = dp->is_healing
|
.is_healing = dp->is_healing
|
||||||
};
|
};
|
||||||
|
|
||||||
evt_core_init (&(ctx->evts));
|
evt_core_init (&(ctx->evts), dp->verbose);
|
||||||
init_algo(&ctx->evts, &algo, dp->algo, &ap);
|
init_algo(&ctx->evts, &algo, dp->algo, &ap);
|
||||||
socks5_init (&ctx->evts);
|
socks5_init (&ctx->evts);
|
||||||
init_socks5_sinks(ctx);
|
init_socks5_sinks(ctx);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
|
|
||||||
struct donar_params {
|
struct donar_params {
|
||||||
int opt, is_server, is_client, is_waiting_bootstrap, is_healing, errored;
|
int opt, is_server, is_client, is_waiting_bootstrap, is_healing, errored, verbose;
|
||||||
char *port, *onion_file, *algo;
|
char *port, *onion_file, *algo;
|
||||||
GPtrArray *remote_ports, *exposed_ports;
|
GPtrArray *remote_ports, *exposed_ports;
|
||||||
};
|
};
|
||||||
|
|
|
@ -58,7 +58,7 @@ void donar_server(struct donar_server_ctx* ctx, struct donar_params* dp) {
|
||||||
.is_healing = dp->is_healing
|
.is_healing = dp->is_healing
|
||||||
};
|
};
|
||||||
|
|
||||||
evt_core_init (&(ctx->evts));
|
evt_core_init (&(ctx->evts), dp->verbose);
|
||||||
init_algo(&ctx->evts, &algo, dp->algo, &ap);
|
init_algo(&ctx->evts, &algo, dp->algo, &ap);
|
||||||
evt_core_add_cat (&(ctx->evts), &(algo.on_tcp_co));
|
evt_core_add_cat (&(ctx->evts), &(algo.on_tcp_co));
|
||||||
evt_core_add_cat (&(ctx->evts), &(algo.on_udp_read));
|
evt_core_add_cat (&(ctx->evts), &(algo.on_udp_read));
|
||||||
|
|
|
@ -20,13 +20,13 @@ void free_cat(void* vcat) {
|
||||||
free(cat);
|
free(cat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void evt_core_init(struct evt_core_ctx* ctx) {
|
void evt_core_init(struct evt_core_ctx* ctx, uint8_t verbose) {
|
||||||
ctx->epollfd = epoll_create1(0);
|
ctx->epollfd = epoll_create1(0);
|
||||||
if (ctx->epollfd == -1) {
|
if (ctx->epollfd == -1) {
|
||||||
perror("Failed to create epoll file descriptor epoll_create1");
|
perror("Failed to create epoll file descriptor epoll_create1");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
ctx->verbose = verbose;
|
||||||
ctx->catlist = g_hash_table_new_full(g_str_hash, g_str_equal,NULL, free_cat);
|
ctx->catlist = g_hash_table_new_full(g_str_hash, g_str_equal,NULL, free_cat);
|
||||||
ctx->socklist = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, free_fdinfo);
|
ctx->socklist = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, free_fdinfo);
|
||||||
ctx->urltofd = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
|
ctx->urltofd = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
|
||||||
|
@ -65,7 +65,7 @@ void evt_core_add_cat(struct evt_core_ctx* ctx, struct evt_core_cat* cat) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void evt_core_mv_fd(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct evt_core_cat* to_cat) {
|
void evt_core_mv_fd(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct evt_core_cat* to_cat) {
|
||||||
printf("Moving fd=%d from cat=%s to cat=%s\n",fdinfo->fd, fdinfo->cat->name, to_cat->name);
|
if (ctx->verbose) printf("Moving fd=%d from cat=%s to cat=%s\n",fdinfo->fd, fdinfo->cat->name, to_cat->name);
|
||||||
|
|
||||||
// 1. Update old category
|
// 1. Update old category
|
||||||
for (int i = 0; i < fdinfo->cat->socklist->len; i++) {
|
for (int i = 0; i < fdinfo->cat->socklist->len; i++) {
|
||||||
|
@ -130,7 +130,7 @@ struct evt_core_fdinfo* evt_core_add_fd(struct evt_core_ctx* ctx, struct evt_cor
|
||||||
|
|
||||||
// 5. Add file descriptor to epoll
|
// 5. Add file descriptor to epoll
|
||||||
add_fd_to_epoll(ctx->epollfd, user_data->fd, cat->flags);
|
add_fd_to_epoll(ctx->epollfd, user_data->fd, cat->flags);
|
||||||
printf("Added fd=%d with url=%s in cat=%s\n", fdinfo->fd, fdinfo->url, fdinfo->cat->name);
|
if (ctx->verbose) printf("Added fd=%d with url=%s in cat=%s\n", fdinfo->fd, fdinfo->url, fdinfo->cat->name);
|
||||||
|
|
||||||
// 6. Ensure that events arrived before epoll registering are handled
|
// 6. Ensure that events arrived before epoll registering are handled
|
||||||
fdinfo->cat->cb(ctx, fdinfo);
|
fdinfo->cat->cb(ctx, fdinfo);
|
||||||
|
@ -145,7 +145,7 @@ struct evt_core_cat* evt_core_rm_fd(struct evt_core_ctx* ctx, int fd) {
|
||||||
struct evt_core_fdinfo* fdinfo = g_hash_table_lookup (ctx->socklist, &fd);
|
struct evt_core_fdinfo* fdinfo = g_hash_table_lookup (ctx->socklist, &fd);
|
||||||
if (fdinfo == NULL) return NULL;
|
if (fdinfo == NULL) return NULL;
|
||||||
cat = fdinfo->cat;
|
cat = fdinfo->cat;
|
||||||
printf("Closing fd=%d from cat=%s\n",fdinfo->fd, fdinfo->cat->name);
|
if (ctx->verbose) printf("Closing fd=%d from cat=%s\n",fdinfo->fd, fdinfo->cat->name);
|
||||||
|
|
||||||
// 2. Update category
|
// 2. Update category
|
||||||
for (int i = 0; i < cat->socklist->len; i++) {
|
for (int i = 0; i < cat->socklist->len; i++) {
|
||||||
|
@ -176,6 +176,8 @@ void evt_core_loop(struct evt_core_ctx* ctx) {
|
||||||
struct epoll_event current_event, events[EVT_CORE_MAX_EVENTS];
|
struct epoll_event current_event, events[EVT_CORE_MAX_EVENTS];
|
||||||
struct evt_core_fdinfo* fdinfo;
|
struct evt_core_fdinfo* fdinfo;
|
||||||
struct evt_core_cat* cat;
|
struct evt_core_cat* cat;
|
||||||
|
clock_t start, end;
|
||||||
|
double elapsed_in_cb;
|
||||||
|
|
||||||
printf("--- Start main loop\n");
|
printf("--- Start main loop\n");
|
||||||
int num_fd, n = 0;
|
int num_fd, n = 0;
|
||||||
|
@ -231,12 +233,18 @@ void evt_core_loop(struct evt_core_ctx* ctx) {
|
||||||
fprintf(stderr, "Ignoring file descriptor %d as it is not registered. This is a bug.\n", events[n].data.fd);
|
fprintf(stderr, "Ignoring file descriptor %d as it is not registered. This is a bug.\n", events[n].data.fd);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (ctx->verbose) start = clock();
|
||||||
while(fdinfo->cat->cb(ctx, fdinfo) == 0);
|
while(fdinfo->cat->cb(ctx, fdinfo) == 0);
|
||||||
|
if (ctx->verbose) {
|
||||||
|
end = clock();
|
||||||
|
elapsed_in_cb = ((double) (end - start)) / CLOCKS_PER_SEC;
|
||||||
|
printf("%s cb took %f seconds to execute.\n", fdinfo->url, elapsed_in_cb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
evt_core_free(ctx);
|
evt_core_free(ctx);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct evt_core_fdinfo* evt_core_get_from_fd(struct evt_core_ctx* ctx, int fd) {
|
struct evt_core_fdinfo* evt_core_get_from_fd(struct evt_core_ctx* ctx, int fd) {
|
||||||
|
|
|
@ -30,6 +30,7 @@ struct evt_core_cat {
|
||||||
|
|
||||||
struct evt_core_ctx {
|
struct evt_core_ctx {
|
||||||
int epollfd;
|
int epollfd;
|
||||||
|
uint8_t verbose;
|
||||||
GHashTable* catlist; // name -> category
|
GHashTable* catlist; // name -> category
|
||||||
GHashTable* socklist; // fd -> category
|
GHashTable* socklist; // fd -> category
|
||||||
GHashTable* urltofd; // url -> fd, like "tcp:127.0.0.1:7500"
|
GHashTable* urltofd; // url -> fd, like "tcp:127.0.0.1:7500"
|
||||||
|
@ -43,7 +44,7 @@ struct evt_core_fdinfo {
|
||||||
evt_core_free_app_ctx free_other;
|
evt_core_free_app_ctx free_other;
|
||||||
};
|
};
|
||||||
|
|
||||||
void evt_core_init(struct evt_core_ctx* ctx);
|
void evt_core_init(struct evt_core_ctx* ctx, uint8_t verbose);
|
||||||
void evt_core_add_cat(struct evt_core_ctx* ctx, struct evt_core_cat* cat);
|
void evt_core_add_cat(struct evt_core_ctx* ctx, struct evt_core_cat* cat);
|
||||||
void evt_core_mv_fd(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct evt_core_cat* to_cat);
|
void evt_core_mv_fd(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, struct evt_core_cat* to_cat);
|
||||||
void evt_core_mv_fd2(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, char* to_cat);
|
void evt_core_mv_fd2(struct evt_core_ctx* ctx, struct evt_core_fdinfo* fdinfo, char* to_cat);
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "socks5.h"
|
#include "socks5.h"
|
||||||
|
|
||||||
struct measlat_ctx {
|
struct measlat_ctx {
|
||||||
int count, size, interval;
|
int count, size, interval, verbose;
|
||||||
char *host, *port, *transport;
|
char *host, *port, *transport;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ int on_socks5_failed_measlat(struct evt_core_ctx* ctx, struct evt_core_fdinfo* f
|
||||||
void register_categories(struct evt_core_ctx* evts, struct measlat_ctx* mctx) {
|
void register_categories(struct evt_core_ctx* evts, struct measlat_ctx* mctx) {
|
||||||
struct evt_core_cat template = {0};
|
struct evt_core_cat template = {0};
|
||||||
template.app_ctx = mctx;
|
template.app_ctx = mctx;
|
||||||
evt_core_init(evts);
|
evt_core_init(evts, mctx->verbose);
|
||||||
|
|
||||||
template.cb = on_timer;
|
template.cb = on_timer;
|
||||||
template.name = "timer";
|
template.name = "timer";
|
||||||
|
@ -282,8 +282,11 @@ int main(int argc, char** argv) {
|
||||||
struct evt_core_ctx evts = {0};
|
struct evt_core_ctx evts = {0};
|
||||||
|
|
||||||
// 1. Parse parameters
|
// 1. Parse parameters
|
||||||
while ((opt = getopt(argc, argv, "h:p:c:s:i:t:")) != -1) {
|
while ((opt = getopt(argc, argv, "vh:p:c:s:i:t:")) != -1) {
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
|
case 'v':
|
||||||
|
mctx.verbose++;
|
||||||
|
break;
|
||||||
case 'h': // host
|
case 'h': // host
|
||||||
mctx.host = optarg;
|
mctx.host = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -110,7 +110,7 @@ int main(int argc, char** argv) {
|
||||||
.flags = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLRDHUP,
|
.flags = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLRDHUP,
|
||||||
.socklist = NULL
|
.socklist = NULL
|
||||||
};
|
};
|
||||||
evt_core_init(&evts);
|
evt_core_init(&evts, 0);
|
||||||
evt_core_add_cat(&evts, &tcp_co);
|
evt_core_add_cat(&evts, &tcp_co);
|
||||||
evt_core_add_cat(&evts, &tcp_all);
|
evt_core_add_cat(&evts, &tcp_all);
|
||||||
printf("--- Categories created\n");
|
printf("--- Categories created\n");
|
||||||
|
|
|
@ -41,7 +41,7 @@ int main(int argc, char** argv) {
|
||||||
while ((opt = getopt(argc, argv, "p:v")) != -1) {
|
while ((opt = getopt(argc, argv, "p:v")) != -1) {
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
case 'v':
|
case 'v':
|
||||||
verbose = 1;
|
verbose++;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
port = optarg;
|
port = optarg;
|
||||||
|
@ -61,7 +61,7 @@ int main(int argc, char** argv) {
|
||||||
.flags = EPOLLIN | EPOLLET,
|
.flags = EPOLLIN | EPOLLET,
|
||||||
.socklist = NULL
|
.socklist = NULL
|
||||||
};
|
};
|
||||||
evt_core_init(&evts);
|
evt_core_init(&evts, verbose);
|
||||||
evt_core_add_cat(&evts, &udp_read);
|
evt_core_add_cat(&evts, &udp_read);
|
||||||
|
|
||||||
// 3. Register UDP socket
|
// 3. Register UDP socket
|
||||||
|
|
Loading…
Reference in a new issue