diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 2c3c454b98fa6b1e3a2964e333a577315506a39f..098a4781a0a8bddec85450c031f9848f1bb2a989 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -190,7 +190,7 @@ int eprintf(int level, const char *fmt, ...) sbuf[sizeof(sbuf)-1]=0; va_end(argptr); strip_ctrl(sbuf); - return(startup->event_lputs(level,sbuf)); + return(startup->event_lputs(startup->event_cbdata,level,sbuf)); } SOCKET open_socket(int type, const char* protocol) @@ -669,7 +669,7 @@ js_log(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) rc=JS_SUSPENDREQUEST(cx); if(sbbs->online==ON_LOCAL) { if(startup!=NULL && startup->event_lputs!=NULL && level <= startup->log_level) - startup->event_lputs(level,JS_GetStringBytes(str)); + startup->event_lputs(startup->event_cbdata,level,JS_GetStringBytes(str)); } else lputs(level,JS_GetStringBytes(str)); JS_RESUMEREQUEST(cx, rc); diff --git a/src/sbbs3/ntsvcs.c b/src/sbbs3/ntsvcs.c index de7fe14b40ffa3b73decc225f5477c08081745e5..445b4b22b51fee2cbe3c891cb1ac3ffbc940836d 100644 --- a/src/sbbs3/ntsvcs.c +++ b/src/sbbs3/ntsvcs.c @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2009 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -280,6 +280,7 @@ static int svc_lputs(void* p, int level, const char* str) char fname[256]; DWORD len; DWORD wr; + log_msg_t msg; sbbs_ntsvc_t* svc = (sbbs_ntsvc_t*)p; /* Debug Logging */ @@ -291,6 +292,8 @@ static int svc_lputs(void* p, int level, const char* str) return(0); len = strlen(str); + SAFECOPY(msg.buf, str); + msg.level = level; /* Mailslot Logging (for sbbsctrl) */ if(svc->log_handle != INVALID_HANDLE_VALUE /* Invalid log handle? */ @@ -313,7 +316,8 @@ static int svc_lputs(void* p, int level, const char* str) ); } if(svc->log_handle != INVALID_HANDLE_VALUE) { - if(!WriteFile(svc->log_handle,str,len,&wr,NULL) || wr!=len) { + len=sizeof(msg); + if(!WriteFile(svc->log_handle,&msg,len,&wr,NULL) || wr!=len) { /* This most likely indicates the server closed the mailslot */ sprintf(debug,"!ERROR %d writing %u bytes to %s pipe (wr=%d)" ,GetLastError(),len,svc->name,wr); @@ -346,15 +350,6 @@ static int svc_lputs(void* p, int level, const char* str) return(0); } -/****************************************************************************/ -/* Event thread local/log print routine */ -/****************************************************************************/ -static int event_lputs(int level, const char *str) -{ - svc_lputs(&event,level,str); - return(0); -} - /************************************/ /* Shared Service Callback Routines */ /************************************/ @@ -1218,7 +1213,8 @@ int main(int argc, char** argv) bbs_startup.size=sizeof(bbs_startup); bbs_startup.cbdata=&bbs; bbs_startup.lputs=svc_lputs; - bbs_startup.event_lputs=event_lputs; + bbs_startup.event_cbdata=&event; + bbs_startup.event_lputs=svc_lputs; bbs_startup.started=svc_started; bbs_startup.recycle=svc_recycle; bbs_startup.terminated=svc_terminated; diff --git a/src/sbbs3/ntsvcs.h b/src/sbbs3/ntsvcs.h index 81d342548147597b8b844a9aa20361674df865ec..82d0d59c7e329fa1ba8dd3e631123e62d3d8f9af 100644 --- a/src/sbbs3/ntsvcs.h +++ b/src/sbbs3/ntsvcs.h @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2009 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -54,4 +54,9 @@ enum { ,SERVICE_CONTROL_SYSOP_UNAVAILABLE /* BBS service only */ }; +typedef struct { + char level; + char buf[1024]; +} log_msg_t; + #endif /* Don't add anything after this line */ \ No newline at end of file diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c index aef910af5a0c0a44b7ff53463c640cceb36c9c3e..1f4e5cea084e04fe24ef24d44f659a5697cf5ffe 100644 --- a/src/sbbs3/sbbscon.c +++ b/src/sbbs3/sbbscon.c @@ -835,7 +835,7 @@ static void services_terminated(void* p, int code) /****************************************************************************/ /* Event thread local/log print routine */ /****************************************************************************/ -static int event_lputs(int level, const char *str) +static int event_lputs(void* p, int level, const char *str) { char logline[512]; char tstr[64]; diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h index 0c7be71defc008f165d8dad5d2febf90d92cdfab..ee618972c99116df8300bc2a9b93065ae6e33a94 100644 --- a/src/sbbs3/startup.h +++ b/src/sbbs3/startup.h @@ -8,7 +8,7 @@ * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2009 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -88,10 +88,11 @@ typedef struct { sem_t** node_spysem; /* Spy output semaphore (each node) */ void* cbdata; /* Private data passed to callbacks */ + void* event_cbdata; /* Private data passed to event_lputs callback */ /* Callbacks (NULL if unused) */ - int (*lputs)(void*, int, const char*); /* Log - put string */ - int (*event_lputs)(int, const char*); /* Event log - put string */ + int (*lputs)(void*, int, const char*); /* Log - put string */ + int (*event_lputs)(void*, int, const char*); /* Event log - put string */ void (*status)(void*, const char*); void (*started)(void*); void (*recycle)(void*);