mirror of
https://github.com/darkk/redsocks.git
synced 2025-08-25 11:15:30 +00:00
debug util: dumping list of connections on SIGUSR1.
This commit is contained in:
parent
c4c35981fd
commit
23a62f69c8
1
list.h
1
list.h
@ -4,6 +4,7 @@
|
||||
* I don't know what copyright to place here but that's GPLv2 code so
|
||||
* I assume I'm free to reuse it.
|
||||
*/
|
||||
#include "utils.h" // container_of
|
||||
|
||||
|
||||
/*
|
||||
|
39
redsocks.c
39
redsocks.c
@ -585,6 +585,33 @@ fail:
|
||||
close(client_fd);
|
||||
}
|
||||
|
||||
static const char *redsocks_evshut_str(unsigned short evshut)
|
||||
{
|
||||
return
|
||||
evshut == EV_READ ? "SHUT_RD" :
|
||||
evshut == EV_WRITE ? "SHUT_WR" :
|
||||
evshut == (EV_READ|EV_WRITE) ? "SHUT_RDWR" :
|
||||
evshut == 0 ? "" :
|
||||
"???";
|
||||
}
|
||||
|
||||
static void redsocks_debug_dump(int sig, short what, void *_arg)
|
||||
{
|
||||
redsocks_instance *self = _arg;
|
||||
redsocks_client *client = NULL;
|
||||
|
||||
log_error(LOG_DEBUG, "Dumping client list:");
|
||||
list_for_each_entry(client, &self->clients, list) {
|
||||
const char *s_client_evshut = redsocks_evshut_str(client->client_evshut);
|
||||
const char *s_relay_evshut = redsocks_evshut_str(client->relay_evshut);
|
||||
|
||||
redsocks_log_error(client, LOG_DEBUG, "client: %i%s%s, relay: %i%s%s",
|
||||
EVENT_FD(&client->client->ev_write), s_client_evshut[0] ? " " : "", s_client_evshut,
|
||||
EVENT_FD(&client->relay->ev_write), s_relay_evshut[0] ? " " : "", s_relay_evshut);
|
||||
}
|
||||
log_error(LOG_DEBUG, "End of client list.");
|
||||
}
|
||||
|
||||
static int redsocks_init()
|
||||
{
|
||||
int error;
|
||||
@ -629,6 +656,13 @@ static int redsocks_init()
|
||||
goto fail;
|
||||
}
|
||||
|
||||
signal_set(&instance.debug_dumper, SIGUSR1, redsocks_debug_dump, &instance);
|
||||
error = signal_add(&instance.debug_dumper, NULL);
|
||||
if (error) {
|
||||
log_errno(LOG_ERR, "signal_add");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
event_set(&instance.listener, fd, EV_READ | EV_PERSIST, redsocks_accept_client, &instance);
|
||||
error = event_add(&instance.listener, NULL);
|
||||
if (error) {
|
||||
@ -638,6 +672,11 @@ static int redsocks_init()
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
if (signal_initialized(&instance.debug_dumper)) {
|
||||
signal_del(&instance.debug_dumper);
|
||||
memset(&instance.debug_dumper, 0, sizeof(instance.debug_dumper));
|
||||
}
|
||||
|
||||
if (event_initialized(&instance.listener)) {
|
||||
event_del(&instance.listener);
|
||||
memset(&instance.listener, 0, sizeof(instance.listener));
|
||||
|
@ -39,6 +39,7 @@ typedef struct redsocks_config_t {
|
||||
typedef struct redsocks_instance_t {
|
||||
redsocks_config config;
|
||||
struct event listener;
|
||||
struct event debug_dumper;
|
||||
list_head clients;
|
||||
relay_subsys *relay_ss;
|
||||
} redsocks_instance;
|
||||
|
16
utils.h
16
utils.h
@ -1,10 +1,26 @@
|
||||
#ifndef UTILS_H_SAT_FEB__2_02_24_05_2008
|
||||
#define UTILS_H_SAT_FEB__2_02_24_05_2008
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
#define SIZEOF_ARRAY(arr) (sizeof(arr) / sizeof(arr[0]))
|
||||
#define FOREACH(ptr, array) for (ptr = array; ptr < array + SIZEOF_ARRAY(array); ptr++)
|
||||
#define FOREACH_REV(ptr, array) for (ptr = array + SIZEOF_ARRAY(array) - 1; ptr >= array; ptr--)
|
||||
|
||||
|
||||
/**
|
||||
* container_of - cast a member of a structure out to the containing structure
|
||||
* @ptr: the pointer to the member.
|
||||
* @type: the type of the container struct this is embedded in.
|
||||
* @member: the name of the member within the struct.
|
||||
*
|
||||
*/
|
||||
#define container_of(ptr, type, member) ({ \
|
||||
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
||||
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||
|
||||
|
||||
/* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
|
||||
/* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
|
||||
#endif /* UTILS_H_SAT_FEB__2_02_24_05_2008 */
|
||||
|
Loading…
Reference in New Issue
Block a user