NT4/private/ntos/netbios/debug.c
2020-09-30 17:12:29 +02:00

230 lines
5.1 KiB
C

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
debug.c
Abstract:
This component of netbios runs in the kernel and logs through the
kernel debugger.
Author:
Colin Watson (ColinW) 24-Jun-91
Revision History:
--*/
#if DBG
#include <nb.h>
VOID
HexDumpLine(
PCHAR pch,
ULONG len,
PCHAR s,
PCHAR t
);
LONG NetbiosMaxDump = 128;
// Macro used in DisplayNcb
#define DISPLAY_COMMAND( cmd ) \
case cmd: NbPrint(( #cmd )); break;
VOID
NbDisplayNcb(
IN PDNCB pdncb
)
/*++
Routine Description:
This routine displays on the standard output stream the contents
of the Ncb.
Arguments:
IN PDNCB - Supplies the NCB to be displayed.
Return Value:
none.
--*/
{
NbPrint(( "PDNCB %#010lx\n", pdncb));
NbPrint(( "ncb_command %#04x ", pdncb->ncb_command));
switch ( pdncb->ncb_command & ~ASYNCH ) {
DISPLAY_COMMAND( NCBCALL );
DISPLAY_COMMAND( NCBLISTEN );
DISPLAY_COMMAND( NCBHANGUP );
DISPLAY_COMMAND( NCBSEND );
DISPLAY_COMMAND( NCBRECV );
DISPLAY_COMMAND( NCBRECVANY );
DISPLAY_COMMAND( NCBCHAINSEND );
DISPLAY_COMMAND( NCBDGSEND );
DISPLAY_COMMAND( NCBDGRECV );
DISPLAY_COMMAND( NCBDGSENDBC );
DISPLAY_COMMAND( NCBDGRECVBC );
DISPLAY_COMMAND( NCBADDNAME );
DISPLAY_COMMAND( NCBDELNAME );
DISPLAY_COMMAND( NCBRESET );
DISPLAY_COMMAND( NCBASTAT );
DISPLAY_COMMAND( NCBSSTAT );
DISPLAY_COMMAND( NCBCANCEL );
DISPLAY_COMMAND( NCBADDGRNAME );
DISPLAY_COMMAND( NCBENUM );
DISPLAY_COMMAND( NCBUNLINK );
DISPLAY_COMMAND( NCBSENDNA );
DISPLAY_COMMAND( NCBCHAINSENDNA );
DISPLAY_COMMAND( NCBLANSTALERT );
DISPLAY_COMMAND( NCBFINDNAME );
DISPLAY_COMMAND( NCBACTION );
DISPLAY_COMMAND( NCBQUICKADDNAME );
DISPLAY_COMMAND( NCBQUICKADDGRNAME );
DISPLAY_COMMAND( NCALLNIU );
case NCBADDRESERVED: NbPrint(( "Add reserved address(Internal)" )); break;
case NCBADDBROADCAST: NbPrint(( "Add Broadcast address(Internal)" )); break;
default: NbPrint(( " Unknown type")); break;
}
if ( pdncb->ncb_command & ASYNCH ) {
NbPrint(( " | ASYNCH"));
}
NbPrint(( "\nncb_retcode %#04x\n", pdncb->ncb_retcode));
NbPrint(( "ncb_lsn %#04x\n", pdncb->ncb_lsn));
NbPrint(( "ncb_num %#04x\n", pdncb->ncb_num));
NbPrint(( "ncb_buffer %#010lx\n",pdncb->ncb_buffer));
NbPrint(( "ncb_length %#06x\n", pdncb->ncb_length));
if ((( pdncb->ncb_command & ~ASYNCH ) == NCBCALL) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCALLNIU) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCBDGSEND) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCBDGRECV) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCBDGSENDBC) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCBDGRECVBC) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCBADDNAME) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCBADDGRNAME) ||
(( pdncb->ncb_command & ~ASYNCH ) == NCBLISTEN)) {
NbPrint(( "\nncb_callname and ncb->name\n"));
NbFormattedDump( pdncb->ncb_callname, NCBNAMSZ );
NbFormattedDump( pdncb->ncb_name, NCBNAMSZ );
NbPrint(( "ncb_rto %#04x\n", pdncb->ncb_rto));
NbPrint(( "ncb_sto %#04x\n", pdncb->ncb_sto));
}
NbPrint(( "ncb_post %lx\n", pdncb->ncb_post));
NbPrint(( "ncb_lana_num %#04x\n", pdncb->ncb_lana_num));
NbPrint(( "ncb_cmd_cplt %#04x\n\n", pdncb->ncb_cmd_cplt));
}
void
NbFormattedDump(
PCHAR far_p,
LONG len
)
/*++
Routine Description:
This routine outputs a buffer in lines of text containing hex and
printable characters.
Arguments:
IN far_p - Supplies buffer to be displayed.
IN len - Supplies the length of the buffer in bytes.
Return Value:
none.
--*/
{
ULONG l;
char s[80], t[80];
if ( len > NetbiosMaxDump ) {
len = NetbiosMaxDump;
}
while (len) {
l = len < 16 ? len : 16;
NbPrint( ("%lx ", far_p));
HexDumpLine (far_p, l, s, t);
NbPrint( ("%s%.*s%s\n", s, 1 + ((16 - l) * 3), "", t));
len -= l;
far_p += l;
}
}
VOID
HexDumpLine(
PCHAR pch,
ULONG len,
PCHAR s,
PCHAR t
)
/*++
Routine Description:
This routine builds a line of text containing hex and printable characters.
Arguments:
IN pch - Supplies buffer to be displayed.
IN len - Supplies the length of the buffer in bytes.
IN s - Supplies the start of the buffer to be loaded with the string
of hex characters.
IN t - Supplies the start of the buffer to be loaded with the string
of printable ascii characters.
Return Value:
none.
--*/
{
static UCHAR rghex[] = "0123456789ABCDEF";
UCHAR c;
UCHAR *hex, *asc;
hex = s;
asc = t;
*(asc++) = '*';
while (len--) {
c = *(pch++);
*(hex++) = rghex [c >> 4] ;
*(hex++) = rghex [c & 0x0F];
*(hex++) = ' ';
*(asc++) = (c < ' ' || c > '~') ? (CHAR )'.' : c;
}
*(asc++) = '*';
*asc = 0;
*hex = 0;
}
#endif