230 lines
5.1 KiB
C
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
|
||
|
||
|