X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=logging.c;h=b57888fd5169f044bebd0dd31dcb30c4ce04ed3f;hb=a063e522970946bf7d5dc052079d7773c0dee76d;hp=fc89db73a733128bfe59d0777c34df9090f00cff;hpb=36b8d450f0fa33b3f4a1d2cda9a4854ca2ab4eb6;p=PuTTY.git diff --git a/logging.c b/logging.c index fc89db73..b57888fd 100644 --- a/logging.c +++ b/logging.c @@ -22,7 +22,8 @@ struct LogContext { int logtype; /* cached out of conf */ }; -static Filename *xlatlognam(Filename *s, char *hostname, struct tm *tm); +static Filename *xlatlognam(Filename *s, char *hostname, int port, + struct tm *tm); /* * Internal wrapper function which must be called for _all_ output @@ -159,7 +160,8 @@ void logfopen(void *handle) filename_free(ctx->currlogfilename); ctx->currlogfilename = xlatlognam(conf_get_filename(ctx->conf, CONF_logfilename), - conf_get_str(ctx->conf, CONF_host), &tm); + conf_get_str(ctx->conf, CONF_host), + conf_get_int(ctx->conf, CONF_port), &tm); ctx->lgfp = f_open(ctx->currlogfilename, "r", FALSE); /* file already present? */ if (ctx->lgfp) { @@ -235,7 +237,8 @@ void log_eventlog(void *handle, const char *event) void log_packet(void *handle, int direction, int type, char *texttype, const void *data, int len, int n_blanks, const struct logblank_t *blanks, - const unsigned long *seq) + const unsigned long *seq, + unsigned downstream_id, const char *additional_log_text) { struct LogContext *ctx = (struct LogContext *)handle; char dumpdata[80], smalldata[5]; @@ -248,15 +251,21 @@ void log_packet(void *handle, int direction, int type, /* Packet header. */ if (texttype) { - if (seq) { - logprintf(ctx, "%s packet #0x%lx, type %d / 0x%02x (%s)\r\n", - direction == PKT_INCOMING ? "Incoming" : "Outgoing", - *seq, type, type, texttype); - } else { - logprintf(ctx, "%s packet type %d / 0x%02x (%s)\r\n", - direction == PKT_INCOMING ? "Incoming" : "Outgoing", - type, type, texttype); - } + logprintf(ctx, "%s packet ", + direction == PKT_INCOMING ? "Incoming" : "Outgoing"); + + if (seq) + logprintf(ctx, "#0x%lx, ", *seq); + + logprintf(ctx, "type %d / 0x%02x (%s)", type, type, texttype); + + if (downstream_id) { + logprintf(ctx, " on behalf of downstream #%u", downstream_id); + if (additional_log_text) + logprintf(ctx, " (%s)", additional_log_text); + } + + logprintf(ctx, "\r\n"); } else { /* * Raw data is logged with a timestamp, so that it's possible @@ -366,6 +375,7 @@ void log_free(void *handle) bufchain_clear(&ctx->queue); if (ctx->currlogfilename) filename_free(ctx->currlogfilename); + conf_free(ctx->conf); sfree(ctx); } @@ -400,9 +410,10 @@ void log_reconfig(void *handle, Conf *conf) * * "&Y":YYYY "&m":MM "&d":DD "&T":hhmmss "&h": "&&":& */ -static Filename *xlatlognam(Filename *src, char *hostname, struct tm *tm) +static Filename *xlatlognam(Filename *src, char *hostname, int port, + struct tm *tm) { - char buf[10], *bufp; + char buf[32], *bufp; int size; char *buffer; int buflen, bufsize; @@ -438,6 +449,9 @@ static Filename *xlatlognam(Filename *src, char *hostname, struct tm *tm) bufp = hostname; size = strlen(bufp); break; + case 'p': + size = sprintf(buf, "%d", port); + break; default: buf[0] = '&'; size = 1;