feature: session manager support subscribe session free message
This commit is contained in:
@@ -56,7 +56,7 @@ static void session_debugger_log(int fd, const char *fmt, ...)
|
||||
char buf[PATH_MAX * 2] = {0};
|
||||
char *p = buf;
|
||||
char *end = buf + sizeof(buf);
|
||||
va_list args;
|
||||
va_list arg;
|
||||
struct tm local;
|
||||
|
||||
time_t t;
|
||||
@@ -67,9 +67,9 @@ static void session_debugger_log(int fd, const char *fmt, ...)
|
||||
weekday_str[local.tm_wday], month_str[local.tm_mon], local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec, local.tm_year + 1900);
|
||||
p += snprintf(p, end - p, "%lu ", pthread_self());
|
||||
p += snprintf(p, end - p, "(%s), ", module);
|
||||
va_start(args, fmt);
|
||||
p += vsnprintf(p, end - p, fmt, args);
|
||||
va_end(args);
|
||||
va_start(arg, fmt);
|
||||
p += vsnprintf(p, end - p, fmt, arg);
|
||||
va_end(arg);
|
||||
p += snprintf(p, end - p, "\n");
|
||||
|
||||
do
|
||||
@@ -107,20 +107,6 @@ static void session_debugger_exdata_free(struct session_debugger_exdata *exdata)
|
||||
{
|
||||
if (exdata)
|
||||
{
|
||||
char buff[PATH_MAX] = {0};
|
||||
session_to_str(exdata->sess, 0, buff, sizeof(buff) - 1);
|
||||
session_debugger_log(exdata->dbg->fd, "sess free: %s", buff);
|
||||
session_debugger_log(exdata->dbg->fd, "session %lu %s stat:\n"
|
||||
"C2S rx packets: %6lu, C2S rx bytes: %6lu\n"
|
||||
"S2C rx packets: %6lu, S2C rx bytes: %6lu\n"
|
||||
"C2S rx TCP segments: %6lu, C2S rx TCP bytes: %6lu\n"
|
||||
"S2C rx TCP segments: %6lu, S2C rx TCP bytes: %6lu\n",
|
||||
session_get_id(exdata->sess), session_get0_readable_addr(exdata->sess),
|
||||
exdata->c2s_rx_pkts, exdata->c2s_rx_bytes,
|
||||
exdata->s2c_rx_pkts, exdata->s2c_rx_bytes,
|
||||
exdata->c2s_rx_tcp_seg, exdata->c2s_rx_tcp_bytes,
|
||||
exdata->s2c_rx_tcp_seg, exdata->s2c_rx_tcp_bytes);
|
||||
|
||||
if (exdata->c2s_tcp_seg_hexdump_fd > 0)
|
||||
{
|
||||
close(exdata->c2s_tcp_seg_hexdump_fd);
|
||||
@@ -142,9 +128,29 @@ static void session_debugger_exdata_free_callback(int idx, void *ex_ptr, void *a
|
||||
session_debugger_exdata_free((struct session_debugger_exdata *)ex_ptr);
|
||||
}
|
||||
|
||||
static void on_sess_msg(struct session *sess, struct packet *pkt, void *args)
|
||||
static void on_sess_free(struct session *sess, void *arg)
|
||||
{
|
||||
struct session_debugger *dbg = (struct session_debugger *)args;
|
||||
struct session_debugger *dbg = (struct session_debugger *)arg;
|
||||
struct session_debugger_exdata *exdata = (struct session_debugger_exdata *)session_get_exdata(sess, dbg->sess_exdata_idx);
|
||||
|
||||
char buff[PATH_MAX] = {0};
|
||||
session_to_str(exdata->sess, 0, buff, sizeof(buff) - 1);
|
||||
session_debugger_log(exdata->dbg->fd, "sess free: %s", buff);
|
||||
session_debugger_log(exdata->dbg->fd, "session %lu %s stat:\n"
|
||||
"C2S rx packets: %6lu, C2S rx bytes: %6lu\n"
|
||||
"S2C rx packets: %6lu, S2C rx bytes: %6lu\n"
|
||||
"C2S rx TCP segments: %6lu, C2S rx TCP bytes: %6lu\n"
|
||||
"S2C rx TCP segments: %6lu, S2C rx TCP bytes: %6lu\n",
|
||||
session_get_id(exdata->sess), session_get0_readable_addr(exdata->sess),
|
||||
exdata->c2s_rx_pkts, exdata->c2s_rx_bytes,
|
||||
exdata->s2c_rx_pkts, exdata->s2c_rx_bytes,
|
||||
exdata->c2s_rx_tcp_seg, exdata->c2s_rx_tcp_bytes,
|
||||
exdata->s2c_rx_tcp_seg, exdata->s2c_rx_tcp_bytes);
|
||||
}
|
||||
|
||||
static void on_sess_packet(struct session *sess, struct packet *pkt, void *arg)
|
||||
{
|
||||
struct session_debugger *dbg = (struct session_debugger *)arg;
|
||||
|
||||
char buff[PATH_MAX];
|
||||
struct session_debugger_exdata *exdata = (struct session_debugger_exdata *)session_get_exdata(sess, dbg->sess_exdata_idx);
|
||||
@@ -178,9 +184,9 @@ static void on_sess_msg(struct session *sess, struct packet *pkt, void *args)
|
||||
pthread_spin_unlock(&dbg->lock);
|
||||
}
|
||||
|
||||
static void on_tcp_stream_msg(struct session *sess, const char *tcp_payload, uint32_t tcp_payload_len, void *args)
|
||||
static void on_tcp_stream(struct session *sess, const char *tcp_payload, uint32_t tcp_payload_len, void *arg)
|
||||
{
|
||||
struct session_debugger *dbg = (struct session_debugger *)args;
|
||||
struct session_debugger *dbg = (struct session_debugger *)arg;
|
||||
|
||||
char buff[PATH_MAX];
|
||||
struct session_debugger_exdata *exdata = (struct session_debugger_exdata *)session_get_exdata(sess, dbg->sess_exdata_idx);
|
||||
@@ -251,22 +257,27 @@ static struct session_debugger *session_debugger_new(struct session_manager *ses
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
if (session_manager_subscribe_tcp(sess_mgr, on_sess_msg, dbg) == -1)
|
||||
if (session_manager_subscribe_free(sess_mgr, on_sess_free, dbg) == -1)
|
||||
{
|
||||
session_debugger_log(STDERR_FILENO, "subscribe free failed\n");
|
||||
goto error_out;
|
||||
}
|
||||
if (session_manager_subscribe_tcp(sess_mgr, on_sess_packet, dbg) == -1)
|
||||
{
|
||||
session_debugger_log(STDERR_FILENO, "subscribe tcp failed\n");
|
||||
goto error_out;
|
||||
}
|
||||
if (session_manager_subscribe_udp(sess_mgr, on_sess_msg, dbg) == -1)
|
||||
if (session_manager_subscribe_udp(sess_mgr, on_sess_packet, dbg) == -1)
|
||||
{
|
||||
session_debugger_log(STDERR_FILENO, "subscribe udp failed\n");
|
||||
goto error_out;
|
||||
}
|
||||
if (session_manager_subscribe_control_packet(sess_mgr, on_sess_msg, dbg) == -1)
|
||||
if (session_manager_subscribe_control_packet(sess_mgr, on_sess_packet, dbg) == -1)
|
||||
{
|
||||
session_debugger_log(STDERR_FILENO, "subscribe control packet failed\n");
|
||||
goto error_out;
|
||||
}
|
||||
if (session_manager_subscribe_tcp_stream(sess_mgr, on_tcp_stream_msg, dbg) == -1)
|
||||
if (session_manager_subscribe_tcp_stream(sess_mgr, on_tcp_stream, dbg) == -1)
|
||||
{
|
||||
session_debugger_log(STDERR_FILENO, "subscribe tcp stream failed\n");
|
||||
goto error_out;
|
||||
|
||||
Reference in New Issue
Block a user