summaryrefslogtreecommitdiffstats
path: root/private/net/svcdlls/rpl/rplinst/debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/net/svcdlls/rpl/rplinst/debug.c')
-rw-r--r--private/net/svcdlls/rpl/rplinst/debug.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/private/net/svcdlls/rpl/rplinst/debug.c b/private/net/svcdlls/rpl/rplinst/debug.c
new file mode 100644
index 000000000..468b04969
--- /dev/null
+++ b/private/net/svcdlls/rpl/rplinst/debug.c
@@ -0,0 +1,137 @@
+/*++
+
+Copyright (c) 1991-1993 Microsoft Corporation
+
+Module Name:
+
+ debug.c
+
+Abstract:
+
+ Debugging module. RpldDebugPrint() was adapted from TelnetDebugPrint()
+ in net\sockets\tcpcmd\telnet\debug.c.
+
+Author:
+
+ Vladimir Z. Vulovic 27 - July - 1993
+
+Environment:
+
+ User mode
+
+Revision History :
+
+--*/
+
+#include "local.h"
+#include "debug.h"
+
+#ifdef RPL_DEBUG
+
+#define RPL_PROMPT "[Rpl] "
+#define DEBUG_RECORD_SIZE 0x80
+#define DEBUG_BUFFER_SIZE 0x20000 // 2*64k, must be a power of 2
+#define DEBUG_BUFFER_MASK (DEBUG_BUFFER_SIZE - 1)
+
+// int RG_DebugLevel = -1; // max debugging
+// int RG_DebugLevel = 0; // no debugging, for public use
+
+int RG_DebugLevel; // needed by other modules
+int RG_Assert; // needed by other modules
+
+PCHAR RG_DebugBuffer;
+CRITICAL_SECTION RG_ProtectDebug;
+DWORD RG_DebugOffset;
+//
+// This buffer is used even when RG_DebugBuffer is not NULL.
+//
+char RG_DebugPublicBuffer[ 120];
+
+
+VOID RplDebugDelete( VOID)
+{
+ if ( RG_DebugBuffer != NULL) {
+ (VOID)GlobalFree( RG_DebugBuffer);
+ }
+ DeleteCriticalSection( &RG_ProtectDebug);
+}
+
+#define RPL_DEFAULT_DEBUG_LEVEL ( RPL_DEBUG_FLOW | \
+ RPL_DEBUG_SERVER | \
+ RPL_DEBUG_MAJOR )
+
+#define RPL_MAXIMUM_DEBUG_LEVEL (-1L)
+
+
+
+VOID RplDebugInitialize( VOID)
+{
+ //
+ // Set RG_Assert to 0. Without this the very first use of
+ // RplDump() will lead to an assert.
+ //
+ RG_Assert = 0;
+
+// RG_DebugLevel = RPL_DEFAULT_DEBUG_LEVEL;
+ RG_DebugLevel = RPL_MAXIMUM_DEBUG_LEVEL & ~RPL_DEBUG_MEMALLOC
+ & ~RPL_DEBUG_FLOWINIT & ~RPL_DEBUG_FDR & ~RPL_DEBUG_SFR;
+// RG_DebugLevel = RPL_MAXIMUM_DEBUG_LEVEL;
+
+
+ RG_DebugBuffer = (PCHAR)GlobalAlloc(
+ GMEM_FIXED,
+ DEBUG_BUFFER_SIZE + DEBUG_RECORD_SIZE
+ );
+ if ( RG_DebugBuffer != NULL) {
+ RtlFillMemory(
+ RG_DebugBuffer,
+ DEBUG_BUFFER_SIZE + DEBUG_RECORD_SIZE,
+ '*'
+ );
+ RG_DebugOffset = 0;
+ }
+ memcpy( RG_DebugPublicBuffer, RPL_PROMPT, sizeof( RPL_PROMPT) -1);
+
+ InitializeCriticalSection( &RG_ProtectDebug);
+}
+
+
+VOID _CRTAPI1 RplDebugPrint( CONST CHAR * format, ...)
+{
+ va_list arglist;
+
+ va_start( arglist, format);
+
+ EnterCriticalSection( &RG_ProtectDebug);
+
+ if ( RG_Assert == 0 && RG_DebugBuffer != NULL) {
+ RtlZeroMemory( RG_DebugBuffer + RG_DebugOffset, DEBUG_RECORD_SIZE);
+ vsprintf( RG_DebugBuffer + RG_DebugOffset, format, arglist);
+ RG_DebugOffset += DEBUG_RECORD_SIZE;
+ RG_DebugOffset &= DEBUG_BUFFER_MASK;
+ } else {
+ vsprintf( RG_DebugPublicBuffer + sizeof( RPL_PROMPT) - 1, format, arglist);
+ DbgPrint( "%s\n", RG_DebugPublicBuffer);
+ }
+
+ if ( RG_Assert != 0) {
+ ASSERT( FALSE); // break for checked build
+ KdPrint(( "[RplSvc] Running checked version of service on a free build.\n"));
+ }
+ while ( RG_Assert != 0) {
+ KdPrint(( "[RplSvc] Debug, then reset RG_Assert to 0.\n"));
+ DbgUserBreakPoint();
+ Sleep( RG_Assert * 30000); // sleep for 30 seconds
+ }
+
+ LeaveCriticalSection( &RG_ProtectDebug);
+
+ va_end( arglist);
+
+} // RplDebugPrint
+
+
+#endif // RPL_DEBUG
+
+
+