From c229ef97dfba4dee7d2fc0a098e0343dc87dc004 Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 12 Jan 2003 15:10:27 +0000 Subject: [PATCH] The logging module now contains a local copy of cfg too. git-svn-id: svn://svn.tartarus.org/sgt/putty@2566 cda61777-01e9-0310-a592-d414129be87e --- logging.c | 48 +++++++++++++++++++++++++++++++++++------------- plink.c | 2 +- psftp.c | 2 +- putty.h | 3 ++- scp.c | 2 +- unix/pterm.c | 2 +- unix/uxplink.c | 2 +- window.c | 9 +++------ 8 files changed, 45 insertions(+), 25 deletions(-) diff --git a/logging.c b/logging.c index c2c4ff15..c4b43558 100644 --- a/logging.c +++ b/logging.c @@ -12,6 +12,7 @@ struct LogContext { FILE *lgfp; char currlogfilename[FILENAME_MAX]; void *frontend; + Config cfg; }; static void xlatlognam(char *d, char *s, char *hostname, struct tm *tm); @@ -22,8 +23,8 @@ static void xlatlognam(char *d, char *s, char *hostname, struct tm *tm); void logtraffic(void *handle, unsigned char c, int logmode) { struct LogContext *ctx = (struct LogContext *)handle; - if (cfg.logtype > 0) { - if (cfg.logtype == logmode) { + if (ctx->cfg.logtype > 0) { + if (ctx->cfg.logtype == logmode) { /* deferred open file from pgm start? */ if (!ctx->lgfp) logfopen(ctx); @@ -49,7 +50,7 @@ void log_eventlog(void *handle, char *event) fprintf(stderr, "%s\n", event); fflush(stderr); } - if (cfg.logtype != LGTYP_PACKETS) + if (ctx->cfg.logtype != LGTYP_PACKETS) return; if (!ctx->lgfp) logfopen(ctx); @@ -67,7 +68,7 @@ void log_packet(void *handle, int direction, int type, int i, j; char dumpdata[80], smalldata[5]; - if (cfg.logtype != LGTYP_PACKETS) + if (ctx->cfg.logtype != LGTYP_PACKETS) return; if (!ctx->lgfp) logfopen(ctx); @@ -104,7 +105,7 @@ void logfopen(void *handle) if (ctx->lgfp) return; - if (!cfg.logtype) + if (!ctx->cfg.logtype) return; sprintf(writemod, "wb"); /* default to rewrite */ @@ -112,21 +113,21 @@ void logfopen(void *handle) tm = *localtime(&t); /* substitute special codes in file name */ - xlatlognam(ctx->currlogfilename, cfg.logfilename,cfg.host, &tm); + xlatlognam(ctx->currlogfilename, ctx->cfg.logfilename,ctx->cfg.host, &tm); ctx->lgfp = fopen(ctx->currlogfilename, "r"); /* file already present? */ if (ctx->lgfp) { int i; fclose(ctx->lgfp); - if (cfg.logxfovr != LGXF_ASK) { - i = ((cfg.logxfovr == LGXF_OVR) ? 2 : 1); + if (ctx->cfg.logxfovr != LGXF_ASK) { + i = ((ctx->cfg.logxfovr == LGXF_OVR) ? 2 : 1); } else i = askappend(ctx->frontend, ctx->currlogfilename); if (i == 1) writemod[0] = 'a'; /* set append mode */ else if (i == 0) { /* cancelled */ ctx->lgfp = NULL; - cfg.logtype = 0; /* disable logging */ + ctx->cfg.logtype = 0; /* disable logging */ return; } } @@ -141,9 +142,9 @@ void logfopen(void *handle) sprintf(buf, "%s session log (%s mode) to file: ", (writemod[0] == 'a') ? "Appending" : "Writing new", - (cfg.logtype == LGTYP_ASCII ? "ASCII" : - cfg.logtype == LGTYP_DEBUG ? "raw" : - cfg.logtype == LGTYP_PACKETS ? "SSH packets" : "")); + (ctx->cfg.logtype == LGTYP_ASCII ? "ASCII" : + ctx->cfg.logtype == LGTYP_DEBUG ? "raw" : + ctx->cfg.logtype == LGTYP_PACKETS ? "SSH packets" : "")); /* Make sure we do not exceed the output buffer size */ strncat(buf, ctx->currlogfilename, 128); buf[strlen(buf)] = '\0'; @@ -160,14 +161,35 @@ void logfclose(void *handle) } } -void *log_init(void *frontend) +void *log_init(void *frontend, Config *cfg) { struct LogContext *ctx = smalloc(sizeof(struct LogContext)); ctx->lgfp = NULL; ctx->frontend = frontend; + ctx->cfg = *cfg; /* STRUCTURE COPY */ return ctx; } +void log_reconfig(void *handle, Config *cfg) +{ + struct LogContext *ctx = (struct LogContext *)handle; + int reset_logging; + + if (strcmp(ctx->cfg.logfilename, cfg->logfilename) || + ctx->cfg.logtype != cfg->logtype) + reset_logging = TRUE; + else + reset_logging = FALSE; + + if (reset_logging) + logfclose(logctx); + + ctx->cfg = *cfg; /* STRUCTURE COPY */ + + if (reset_logging) + logfopen(logctx); +} + /* * translate format codes into time/date strings * and insert them into log file name diff --git a/plink.c b/plink.c index f9271519..2ed3e033 100644 --- a/plink.c +++ b/plink.c @@ -545,7 +545,7 @@ int main(int argc, char **argv) fprintf(stderr, "Unable to open connection:\n%s", error); return 1; } - logctx = log_init(NULL); + logctx = log_init(NULL, &cfg); back->provide_logctx(backhandle, logctx); sfree(realhost); } diff --git a/psftp.c b/psftp.c index f8d1f799..28060e28 100644 --- a/psftp.c +++ b/psftp.c @@ -1833,7 +1833,7 @@ static int psftp_connect(char *userhost, char *user, int portnumber) fprintf(stderr, "ssh_init: %s\n", err); return 1; } - logctx = log_init(NULL); + logctx = log_init(NULL, &cfg); back->provide_logctx(backhandle, logctx); ssh_sftp_init(); if (verbose && realhost != NULL) diff --git a/putty.h b/putty.h index 65a99ebe..c15f8e3e 100644 --- a/putty.h +++ b/putty.h @@ -529,7 +529,8 @@ void term_provide_logctx(Terminal *term, void *logctx); /* * Exports from logging.c. */ -void *log_init(void *frontend); +void *log_init(void *frontend, Config *cfg); +void log_reconfig(void *logctx, Config *cfg); void logfopen(void *logctx); void logfclose(void *logctx); void logtraffic(void *logctx, unsigned char c, int logmode); diff --git a/scp.c b/scp.c index 20f97dd7..9dda0672 100644 --- a/scp.c +++ b/scp.c @@ -577,7 +577,7 @@ static void do_cmd(char *host, char *user, char *cmd) err = back->init(NULL, &backhandle, &cfg, cfg.host, cfg.port, &realhost,0); if (err != NULL) bump("ssh_init: %s", err); - logctx = log_init(NULL); + logctx = log_init(NULL, &cfg); back->provide_logctx(backhandle, logctx); ssh_scp_init(); if (verbose && realhost != NULL) diff --git a/unix/pterm.c b/unix/pterm.c index 9fea217c..91893850 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -2407,7 +2407,7 @@ int main(int argc, char **argv) show_mouseptr(inst, 1); inst->term = term_init(&cfg, inst); - inst->logctx = log_init(inst); + inst->logctx = log_init(inst, &cfg); term_provide_logctx(inst->term, inst->logctx); inst->back = &pty_backend; diff --git a/unix/uxplink.c b/unix/uxplink.c index 295e80b3..15650760 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -544,7 +544,7 @@ int main(int argc, char **argv) /* * Start up the connection. */ - logctx = log_init(NULL); + logctx = log_init(NULL, &cfg); { char *error; char *realhost; diff --git a/window.c b/window.c index cfb8eae4..0a9cf414 100644 --- a/window.c +++ b/window.c @@ -507,7 +507,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) hwnd = NULL; term = term_init(&cfg, NULL); - logctx = log_init(NULL); + logctx = log_init(NULL, &cfg); term_provide_logctx(term, logctx); cfgtopalette(); @@ -1760,11 +1760,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, } } - if (strcmp(prev_cfg.logfilename, cfg.logfilename) || - prev_cfg.logtype != cfg.logtype) { - logfclose(logctx); /* reset logging */ - logfopen(logctx); - } + /* Pass new config data to the logging module */ + log_reconfig(logctx, &cfg); sfree(logpal); /* -- 2.11.0