2025-04-27 07:49:33 -04:00

212 lines
5.5 KiB
C++

/*==========================================================================
*
* Copyright (C) 1998-2000 Microsoft Corporation. All Rights Reserved.
*
* File: DebugUtils.cpp
* Content: Winsock service provider debug utility functions
*
*
* History:
* Date By Reason
* ==== == ======
* 11/25/98 jtk Created
***************************************************************************/
#include "dnwsocki.h"
#ifdef _DEBUG
#undef DPF_SUBCOMP
#define DPF_SUBCOMP DN_SUBCOMP_WSOCK
//**********************************************************************
// Constant definitions
//**********************************************************************
//**********************************************************************
// Macro definitions
//**********************************************************************
//**********************************************************************
// Structure definitions
//**********************************************************************
//**********************************************************************
// Variable definitions
//**********************************************************************
//**********************************************************************
// Function prototypes
//**********************************************************************
//**********************************************************************
// Function definitions
//**********************************************************************
//**********************************************************************
// ------------------------------
// HexDump - perform a hex dump of information
//
// Entry: Pointer to data
// Data size
//
// Exit: Nothing
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "HexDump"
void HexDump( PVOID pData, UINT32 uDataSize )
{
DWORD uIdx = 0;
// go through all data
while ( uIdx < uDataSize )
{
// output character
DPFX(DPFPREP, 0, "0x%2x ", ( (LPBYTE) pData )[ uIdx ] );
// increment index
uIdx++;
// are we off the end of a line?
if ( ( uIdx % 12 ) == 0 )
{
DPFX(DPFPREP, 0, "\n" );
}
}
}
//**********************************************************************
//**********************************************************************
// ------------------------------
// DumpSocketAddress - dump a socket address
//
// Entry: Debug level
// Pointer to socket address
// Socket family
//
// Exit: Nothing
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "DumpSocketAddress"
void DumpSocketAddress( const DWORD dwDebugLevel, const SOCKADDR *const pSocketAddress, const DWORD dwFamily )
{
switch ( dwFamily )
{
case AF_INET:
{
const SOCKADDR_IN *const pInetAddress = reinterpret_cast<const SOCKADDR_IN*>( pSocketAddress );
DPFX(DPFPREP, dwDebugLevel, "IP socket:\tAddress: %d.%d.%d.%d\tPort: %d",
pInetAddress->sin_addr.S_un.S_un_b.s_b1,
pInetAddress->sin_addr.S_un.S_un_b.s_b2,
pInetAddress->sin_addr.S_un.S_un_b.s_b3,
pInetAddress->sin_addr.S_un.S_un_b.s_b4,
p_ntohs( pInetAddress->sin_port )
);
break;
}
case AF_IPX:
{
const SOCKADDR_IPX *const pIPXAddress = reinterpret_cast<const SOCKADDR_IPX*>( pSocketAddress );
DPFX (DPFPREP, dwDebugLevel, "IPX socket:\tNet (hex) %x-%x-%x-%x\tNode (hex): %x-%x-%x-%x-%x-%x\tSocket: %d",
(BYTE)pIPXAddress->sa_netnum[ 0 ],
(BYTE)pIPXAddress->sa_netnum[ 1 ],
(BYTE)pIPXAddress->sa_netnum[ 2 ],
(BYTE)pIPXAddress->sa_netnum[ 3 ],
(BYTE)pIPXAddress->sa_nodenum[ 0 ],
(BYTE)pIPXAddress->sa_nodenum[ 1 ],
(BYTE)pIPXAddress->sa_nodenum[ 2 ],
(BYTE)pIPXAddress->sa_nodenum[ 3 ],
(BYTE)pIPXAddress->sa_nodenum[ 4 ],
(BYTE)pIPXAddress->sa_nodenum[ 5 ],
p_ntohs( pIPXAddress->sa_socket )
);
break;
}
default:
{
DPFX(DPFPREP, 0, "Unknown socket type!" );
DNASSERT( FALSE );
break;
}
}
}
//**********************************************************************
//**********************************************************************
// ------------------------------
// DumpAddress - convert an address to a URL and output via debugger
//
// Entry: Debug level
// Pointer to base message string
// Pointer to address
//
// Exit: Nothing
// ------------------------------
#undef DPF_MODNAME
#define DPF_MODNAME "DumpAddress"
void DumpAddress( const DWORD dwDebugLevel, const char *const pBaseString, IDirectPlay8Address *const pAddress )
{
HRESULT hr;
char *pURL;
DWORD dwURLSize;
DNASSERT( pBaseString != NULL );
DNASSERT( pAddress != NULL );
pURL = NULL;
dwURLSize = 0;
hr = IDirectPlay8Address_GetURLA( pAddress, pURL, &dwURLSize );
if ( hr != DPNERR_BUFFERTOOSMALL )
{
goto Failure;
}
pURL = static_cast<char*>( DNMalloc( dwURLSize ) );
if ( pURL == NULL )
{
hr = DPNERR_OUTOFMEMORY;
goto Failure;
}
hr = IDirectPlay8Address_GetURLA( pAddress, pURL, &dwURLSize );
if ( hr != DPN_OK )
{
goto Failure;
}
DNASSERT( pURL != NULL );
DPFX(DPFPREP, dwDebugLevel, "%s 0x%p - \"%s\"", pBaseString, pAddress, pURL );
Exit:
if ( pURL != NULL )
{
DNFree( pURL );
pURL = NULL;
}
return;
Failure:
DPFX(DPFPREP, dwDebugLevel, "Failing DumpAddress:" );
DisplayDNError( dwDebugLevel, hr );
goto Exit;
}
#endif // _DEBUG