From cc692f80bf50f52f761db53295215dec474c1c12 Mon Sep 17 00:00:00 2001 From: midipix Date: Jun 11 2020 08:54:09 +0000 Subject: logging: output the service request info. --- diff --git a/src/daemon/toks_daemon_loop.c b/src/daemon/toks_daemon_loop.c index 22aa770..b647def 100644 --- a/src/daemon/toks_daemon_loop.c +++ b/src/daemon/toks_daemon_loop.c @@ -68,10 +68,6 @@ int32_t __stdcall toks_daemon_loop(void * ctx) /* message loop */ do { - if (svcvtbl == toks_daemon_vtbl) - toks_log_lpc_request( - dctx,request); - switch (request->header.msg_type) { case NT_LPC_REQUEST: case NT_LPC_DATAGRAM: @@ -90,6 +86,12 @@ int32_t __stdcall toks_daemon_loop(void * ctx) /* dispatch */ dctx->opcode = opcode; + request->ipcinfo.ctrlsvc.keys.padding = 0; + + if (svcvtbl == toks_daemon_vtbl) + toks_log_lpc_request( + dctx,request); + ntapi->tt_aligned_block_memcpy( (uintptr_t *)reply, (uintptr_t *)request, diff --git a/src/log/toks_log_lpc_request.c b/src/log/toks_log_lpc_request.c index 1981da4..b007056 100644 --- a/src/log/toks_log_lpc_request.c +++ b/src/log/toks_log_lpc_request.c @@ -12,11 +12,27 @@ #include "toksvc_daemon_impl.h" #include "toksvc_log_impl.h" +#define TOKS_OPCODE_STR(IDX) [TOKS_DAEMON_ ## IDX - TOKS_DAEMON_OPCODE_BASE] + static const char toks_error_str[] = "#ERROR"; +static const char toks_unknown_str[] = "#UNKNOWN_OPCODE"; static const char toks_internal_msg[] = "internal LPC message"; static const char toks_external_msg[] = "external LPC message"; +static const char * toks_opcode_str[] = { + TOKS_OPCODE_STR(CONNECT) = "TOKS_DAEMON_CONNECT", + TOKS_OPCODE_STR(DISCONNECT) = "TOKS_DAEMON_DISCONNECT", + TOKS_OPCODE_STR(TTYSIGNAL) = "TOKS_DAEMON_TTYSIGNAL", + TOKS_OPCODE_STR(IPCSIGNAL) = "TOKS_DAEMON_IPCSIGNAL", + TOKS_OPCODE_STR(SIGCHLD) = "TOKS_DAEMON_SIGCHLD", + TOKS_OPCODE_STR(THREADEXIT) = "TOKS_DAEMON_THREADEXIT", + TOKS_OPCODE_STR(ACQUIRE) = "TOKS_DAEMON_ACQUIRE", + TOKS_OPCODE_STR(RELEASE) = "TOKS_DAEMON_RELEASE", + TOKS_OPCODE_STR(CANCEL) = "TOKS_DAEMON_CANCEL", + TOKS_OPCODE_STR(ABORT) = "TOKS_DAEMON_ABORT", +}; + static const char * toks_lpc_msg_str[] = { [NT_LPC_NEW_MESSAGE] = "NT_LPC_NEW_MESSAGE", [NT_LPC_REQUEST] = "NT_LPC_REQUEST", @@ -58,6 +74,43 @@ static const char * toks_lpc_msg_source_desc(uintptr_t syspid) : toks_external_msg; } +static const char * toks_lpc_opcode_desc(struct toks_daemon_ctx * dctx) +{ + if ((dctx->opcode >= TOKS_DAEMON_OPCODE_BASE) + && (dctx->opcode < TOKS_DAEMON_OPCODE_CAP)) + return toks_opcode_str[dctx->opcode-TOKS_DAEMON_OPCODE_BASE]; + + return toks_unknown_str; +} + +static void toks_log_lpc_request_desc( + struct toks_daemon_ctx * dctx, + const nt_tty_port_msg * msg, + char * desc) +{ + char * ch = desc; + + ch += ntapi->sprintf( + ch, + " ::: REQUEST INFO ::: " + "msgid=%u, " + "opcode=%s", + msg->ttyinfo.msgid, + toks_lpc_opcode_desc(dctx)); + + if (dctx->opcode == TOKS_DAEMON_ACQUIRE) + if (msg->ipcinfo.ctrlsvc.keys.reserved) + ch += ntapi->sprintf( + ch, + " (tokpid=%d)", + msg->ipcinfo.ctrlsvc.keys.reserved); + + if (msg->ipcinfo.ctrlsvc.keys.key[0]) + ntapi->sprintf( + ch,", refstr=``%s''", + (const char *)msg->ipcinfo.ctrlsvc.keys.key); +} + void toks_log_lpc_request( struct toks_daemon_ctx * dctx, const nt_tty_port_msg * msg) @@ -68,6 +121,7 @@ void toks_log_lpc_request( nt_cid cid; char path[2048]; + char desc[1024]; cid.process_id = msg->header.client_id.process_id; cid.thread_id = msg->header.client_id.thread_id; @@ -75,12 +129,22 @@ void toks_log_lpc_request( toks_log_get_arbitrary_process_name( &cid,path,sizeof(path)); + switch (msg->header.msg_type) { + case NT_LPC_REQUEST: + toks_log_lpc_request_desc( + dctx,msg,desc); + break; + + default: + desc[0] = 0; + } + toks_log_header( drvctx, TOKS_LOG_ENTRY_SERVER_INFO, "%s from %s (syspid %d, systid %d), " "data_size=%u, msg_size=%u, " - "msg_type=%u (%s), msg_id=%u\n", + "msg_type=%u (%s), msg_id=%u%s\n", toks_lpc_msg_source_desc(msg->header.client_id.process_id), toks_log_basename(path), cid.process_id, @@ -89,7 +153,9 @@ void toks_log_lpc_request( msg->header.msg_size, msg->header.msg_type, toks_lpc_msg_type_desc(msg->header.msg_type), - msg->header.msg_id); + msg->header.msg_id, + desc); + if (cid.process_id) toks_log_write(