windows-nt/Source/XPSP1/NT/enduser/netmeeting/av/qos/debug.cpp
2020-09-26 16:20:57 +08:00

391 lines
9.6 KiB
C++

/*
- DEBUG.CPP
-
* Microsoft NetMeeting
* Quality of Service DLL
* Debug code
*
* Revision History:
*
* When Who What
* -------- ------------------ ---------------------------------------
* 10.23.96 Yoram Yaacovi Created
* 01.04.97 Robert Donner Added NetMeeting utility routines
* 01.09.97 Yoram Yaacovi Added DisplayRequestList
*
* Functions:
* DisplayQoSObject
* DisplayRequestList
* DisplayRequestListInt
*
*/
#include "precomp.h"
#ifdef DEBUG
int QoSDbgPrintf(LPCSTR lpszFormat, ...)
{
va_list v1;
va_start(v1, lpszFormat);
DbgPrintf("QoS:", lpszFormat, v1);
va_end(v1);
return 0;
}
/***************************************************************************
Name : DisplayParameters
Purpose : Displays parameters of a given function
Parameters: nFunctionID - ID of the function for which to display parameters
p1 - p5: up to 5 32-bit function parameters
Returns :
Comment :
***************************************************************************/
void CQoS::DisplayParameters(ULONG nFunctionID, ULONG_PTR p1, ULONG_PTR p2, ULONG_PTR p3, ULONG_PTR p4, ULONG_PTR p5)
{
BOOL fDisplay=FALSE;
TCHAR szGuid[40 /* CCHSZGUID */];
fDisplay = (m_bInNotify ?
(ZONE_THREAD && ZONE_PARAMETERS) :
ZONE_PARAMETERS);
if (!fDisplay)
return;
switch (nFunctionID)
{
case REQUEST_RESOURCES_ID:
GuidToSz((LPGUID) p1 /* lpClientGUID */, szGuid);
DEBUGMSG(fDisplay, ("Client: %s\n", szGuid));
DisplayRequestList((LPRESOURCEREQUESTLIST) p2 /* lpResourceRequestList */);
break;
case RELEASE_RESOURCES_ID:
GuidToSz((LPGUID) p1 /* lpClientGUID */, szGuid);
DEBUGMSG(fDisplay, ("Client: %s\n", szGuid));
DisplayRequestList((LPRESOURCEREQUESTLIST) p2 /* lpResourceRequestList */);
break;
case SET_RESOURCES_ID:
DisplayResourceList((LPRESOURCELIST) p1 /* lpResourceList */);
break;
case SET_CLIENTS_ID:
DisplayClientList((LPCLIENTLIST) p1 /* lpClientList */);
break;
default:
break;
}
}
/***************************************************************************
Name : DisplayClientList
Purpose : Displays a client list given a pointer to the list
Parameters: pCl - pointer to the list
Returns :
Comment :
***************************************************************************/
void CQoS::DisplayClientList(LPCLIENTLIST pcl)
{
BOOL fDisplay=FALSE;
ULONG i=0;
LPCLIENT pc=NULL;
TCHAR szGuid[40 /* CCHSZGUID */];
char szNoName[]="No Name";
PSTR pszClientName=szNoName;
fDisplay = (m_bInNotify ? (ZONE_THREAD && ZONE_PARAMETERS) : ZONE_PARAMETERS);
DEBUGMSG(fDisplay, ("Number of clients: %d\n", pcl->cClients));
DEBUGMSG(fDisplay, ("Client priority GUID\n"));
for (i=0; i < pcl->cClients; i++)
{
pc = &(pcl->aClients[i]);
GuidToSz(&(pc->guidClientGUID), szGuid);
// assuming DEBUGMSG always prints non-Unicode
if (*(pc->wszName) && (pszClientName = UnicodeToAnsi(pc->wszName)))
{
// display the client
DEBUGMSG(fDisplay, (" %-20s%-9d %s",
pszClientName,
pc->priority,
szGuid));
delete pszClientName;
}
else
{
pszClientName = szNoName;
// display the client
DEBUGMSG(fDisplay, (" %-20s%-9d %s",
pszClientName,
pc->priority,
szGuid));
}
}
}
/***************************************************************************
Name : DisplayResourceList
Purpose : Displays a resource list given a pointer to the list
Parameters: prl - pointer to the list
Returns :
Comment :
***************************************************************************/
void CQoS::DisplayResourceList(LPRESOURCELIST prl)
{
BOOL fDisplay=FALSE;
ULONG i=0;
LPRESOURCE pr=NULL;
fDisplay = (m_bInNotify ? (ZONE_THREAD && ZONE_PARAMETERS) : ZONE_PARAMETERS);
DEBUGMSG(fDisplay, ("Number of resources: %d\n", prl->cResources));
DEBUGMSG(fDisplay, ("Resource Flags MinUnits MaxUnits Level hResult\n"));
for (i=0; i < prl->cResources; i++)
{
pr = &(prl->aResources[i]);
// display the resource
DEBUGMSG(fDisplay, (" %-10d%-8x%-9d",
pr->resourceID,
pr->ulResourceFlags,
pr->nUnits));
}
}
/***************************************************************************
Name : DisplayRequestList
Purpose : Displays a request list given a pointer to the list
Parameters: prrl - pointer to the list
Returns :
Comment :
***************************************************************************/
void CQoS::DisplayRequestList(LPRESOURCEREQUESTLIST prrl)
{
BOOL fDisplay=FALSE;
ULONG i=0;
LPRESOURCEREQUEST prr=NULL;
fDisplay = (m_bInNotify ? (ZONE_THREAD && ZONE_PARAMETERS) : ZONE_PARAMETERS);
DEBUGMSG(fDisplay, ("Number of requests: %d\n", prrl->cRequests));
DEBUGMSG(fDisplay, ("Resource Flags MinUnits MaxUnits Level hResult\n"));
for (i=0; i < prrl->cRequests; i++)
{
prr = &(prrl->aRequests[i]);
// display the resource
DEBUGMSG(fDisplay, (" %-10d%-8x%-9d%-9d%-6d%-8x",
prr->resourceID,
prr->ulRequestFlags,
prr->nUnitsMin,
prr->nUnitsMax,
prr->levelOfGuarantee,
prr->hResult));
}
}
/***************************************************************************
Name : DisplayRequestListInt
Purpose : Displays an internal request list given a pointer to the list
Parameters: prr - pointer to the first request in the list
fDisplay - a flag to tell DisplayRequestListInt whether to display
or no. This might seem dumb, since why call DisplayRequestListInt
if it's not going to display, but this parameter really conveys
the zone information that thcaller wants.
Returns :
Comment :
***************************************************************************/
void CQoS::DisplayRequestListInt(LPRESOURCEREQUESTINT prr, BOOL fDisplay)
{
TCHAR szGuid[40 /* CCHSZGUID */];
while (prr)
{
GuidToSz(&(prr->guidClientGUID), szGuid);
// display the resource
DEBUGMSG(fDisplay, (" %-10x%-10x%-10d%-8x%-6d%-7d%-11x %s",
prr,
prr->fLink,
prr->sResourceRequest.resourceID,
prr->sResourceRequest.ulRequestFlags,
prr->sResourceRequest.levelOfGuarantee,
prr->sResourceRequest.nUnitsMin,
prr->pfnQoSNotify,
szGuid));
// next request
prr = prr->fLink;
}
}
/***************************************************************************
Name : DisplayQoSObject
Purpose : Displays the containing QoS object
Parameters: none
Returns : none
Comment :
***************************************************************************/
void CQoS::DisplayQoSObject(void)
{
LPRESOURCEINT pr=NULL;
LPRESOURCEREQUESTINT prr=NULL;
LPCLIENTINT pc=NULL;
BOOL fDisplay=FALSE;
// don't waste time if we are not going to print
fDisplay = (m_bInNotify ? (ZONE_THREAD && ZONE_STRUCTURES) : ZONE_STRUCTURES);
if (!fDisplay)
return;
DEBUGMSG(fDisplay, ("Start object display\n"));
DEBUGMSG(fDisplay, ("=========================================\n"));
/*
* Print resources and requests
*/
DEBUGMSG(fDisplay, ("Resources\n"));
DEBUGMSG(fDisplay, ("*********\n"));
pr = m_pResourceList;
if (!pr)
{
DEBUGMSG(fDisplay, ("No Resources\n"));
}
else
{
DEBUGMSG(fDisplay, ("Address fLink Resource Flags Units Avail\n"));
DEBUGMSG(fDisplay, (" Address fLink Resource Flags Level Units NotifyProc Client GUID\n"));
}
while (pr)
{
// display the resource
DEBUGMSG(fDisplay, ("Resource: %d\n", pr->resource.resourceID));
DEBUGMSG(fDisplay, ("%-10x%-10x%-10d%-8x%-7d%-7d\n",
pr,
pr->fLink,
pr->resource.resourceID,
pr->resource.ulResourceFlags,
pr->resource.nUnits,
pr->nNowAvailUnits));
// display the request list for this reasource
prr = pr->pRequestList;
DisplayRequestListInt(prr, fDisplay);
//next resource
pr = pr->fLink;
}
/*
* Print clients
*/
DEBUGMSG(fDisplay, ("\n"));
DEBUGMSG(fDisplay, ("Clients\n"));
DEBUGMSG(fDisplay, ("*******\n"));
pc = m_pClientList;
if (!pc)
{
DEBUGMSG(fDisplay, ("No Clients\n"));
}
else
{
DEBUGMSG(fDisplay, ("Address fLink Priority\n"));
DEBUGMSG(fDisplay, (" Address fLink Resource Flags Level Units NotifyProc Client GUID\n"));
}
while (pc)
{
TCHAR szGuid[40 /* CCHSZGUID */];
PSTR pszClientName=NULL;
GuidToSz(&(pc->client.guidClientGUID), szGuid);
// update the list of requests for this client
// doing this if in the notify thread is bad !!
if (!m_bInNotify)
UpdateRequestsForClient (&(pc->client.guidClientGUID));
// display the client
// assuming DEBUGMSG always prints non-Unicode
if (*(pc->client.wszName) &&
(pszClientName = UnicodeToAnsi(pc->client.wszName)))
{
DEBUGMSG(fDisplay, ("Client: %s %s", pszClientName, szGuid));
delete pszClientName;
}
else
{
DEBUGMSG(fDisplay, ("Client: %s", szGuid));
}
DEBUGMSG(fDisplay, ("%-10x%-10x%-10d",
pc, pc->fLink, pc->client.priority));
// display the request list for this reasource
prr = pc->pRequestList;
DisplayRequestListInt(prr, fDisplay);
//next resource
pc = pc->fLink;
}
DEBUGMSG(fDisplay, ("=========================================\n"));
DEBUGMSG(fDisplay, ("End object display\n"));
}
#else // DEBUG
void CQoS::DisplayQoSObject(void)
{}
void CQoS::DisplayRequestList(LPRESOURCEREQUESTLIST)
{}
void CQoS::DisplayRequestListInt(LPRESOURCEREQUESTINT, BOOL)
{}
void CQoS::DisplayResourceList(LPRESOURCELIST prl)
{}
void CQoS::DisplayParameters(ULONG nFunctionID, ULONG_PTR P1, ULONG_PTR P2, ULONG_PTR P3, ULONG_PTR P4, ULONG_PTR P5)
{}
#endif // DEBUG