/************************************************************************
*																		*
*	INTEL CORPORATION PROPRIETARY INFORMATION							*
*																		*
*	This software is supplied under the terms of a license			   	*
*	agreement or non-disclosure agreement with Intel Corporation		*
*	and may not be copied or disclosed except in accordance	   			*
*	with the terms of that agreement.									*
*																		*
*	Copyright (C) 1997 Intel Corp.	All Rights Reserved					*
*																		*
*	$Archive:   S:\sturgeon\src\gki\vcs\debug.cpv  $
*																		*
*	$Revision:   1.5  $
*	$Date:   17 Jan 1997 09:01:50  $
*																		*
*	$Author:   CHULME  $
*																		*
*   $Log:   S:\sturgeon\src\gki\vcs\debug.cpv  $
// 
//    Rev 1.5   17 Jan 1997 09:01:50   CHULME
// No change.
// 
//    Rev 1.4   10 Jan 1997 16:13:52   CHULME
// Removed MFC dependency
// 
//    Rev 1.3   17 Dec 1996 18:22:20   CHULME
// Switch src and destination fields on ARQ for Callee
// 
//    Rev 1.2   22 Nov 1996 15:22:30   CHULME
// Added VCS log to the header
*************************************************************************/

// Debug.cpp : Contains conditional compiled debug dump routines
//

#include "precomp.h"

#include <winsock.h>
#include "GKICOM.H"
#include "dspider.h"

#ifdef _DEBUG
extern "C" WORD DLL_EXPORT
Dump_GKI_RegistrationRequest(long lVersion, 
							 SeqTransportAddr *pCallSignalAddr, 
							 EndpointType *pTerminalType,
							 SeqAliasAddr *pRgstrtnRqst_trmnlAls, 
							 HWND hWnd,
							 WORD wBaseMessage,
							 unsigned short usRegistrationTransport)
{
	SeqTransportAddr	*ps2;
	SeqAliasAddr		*ps4;
	unsigned short		len, us;
	char				*pc;
	char				szGKDebug[80];

	wsprintf(szGKDebug, "\tlVersion = %X\n", lVersion);
	OutputDebugString(szGKDebug);
	for (ps2 = pCallSignalAddr; ps2 != NULL; ps2 = ps2->next)
	{
		wsprintf(szGKDebug, "\tpCallSignalAddr->value.choice = %X\n", ps2->value.choice);
		OutputDebugString(szGKDebug);
		ASSERT((ps2->value.choice == ipAddress_chosen) || (ps2->value.choice == ipxAddress_chosen));
		switch (ps2->value.choice)
		{
		case ipAddress_chosen:
			len = (unsigned short) ps2->value.u.ipAddress.ip.length;
			wsprintf(szGKDebug, "\tpCallSignalAddr->value.u.ipAddress.ip.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpCallSignalAddr->value.u.ipAddress.ip.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%d.", ps2->value.u.ipAddress.ip.value[us]);
				OutputDebugString(szGKDebug);
			}
			wsprintf(szGKDebug, "\n\tpCallSignalAddr->value.u.ipAddress.port = %X\n",	
					ps2->value.u.ipAddress.port);
			OutputDebugString(szGKDebug);
			break;

		case ipxAddress_chosen:
			len = (unsigned short) ps2->value.u.ipxAddress.node.length;
			wsprintf(szGKDebug, "\tpCallSignalAddr->value.u.ipxAddress.node.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpCallSignalAddr->value.u.ipxAddress.node.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%02X", ps2->value.u.ipxAddress.node.value[us]);
				OutputDebugString(szGKDebug);
			}
			len = (unsigned short) ps2->value.u.ipxAddress.netnum.length;
			wsprintf(szGKDebug, "\n\tpCallSignalAddr->value.u.ipxAddress.netnum.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpCallSignalAddr->value.u.ipxAddress.netnum.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%02X", ps2->value.u.ipxAddress.netnum.value[us]);
				OutputDebugString(szGKDebug);
			}
			len = (unsigned short) ps2->value.u.ipxAddress.port.length;
			wsprintf(szGKDebug, "\n\tpCallSignalAddr->value.u.ipxAddress.port.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpCallSignalAddr->value.u.ipxAddress.port.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%02X", ps2->value.u.ipxAddress.port.value[us]);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		}
	}

	wsprintf(szGKDebug, "\tpTerminalType->bit_mask = %X\n", pTerminalType->bit_mask);
	OutputDebugString(szGKDebug);
	wsprintf(szGKDebug, "\tpTerminalType->mc = %X\n", pTerminalType->mc);
	OutputDebugString(szGKDebug);
	wsprintf(szGKDebug, "\tpTerminalType->undefinedNode = %X\n", pTerminalType->undefinedNode);
	OutputDebugString(szGKDebug);

	for (ps4 = pRgstrtnRqst_trmnlAls; ps4 != NULL; ps4 = ps4->next)
	{
		wsprintf(szGKDebug, "\tpRgstrtnRqst_trmnlAls->value.choice = %X\n", ps4->value.choice);
		OutputDebugString(szGKDebug);
		ASSERT((ps4->value.choice == e164_chosen) || (ps4->value.choice == h323_ID_chosen));
		switch (ps4->value.choice)
		{
		case e164_chosen:
			OutputDebugString("\tpRgstrtnRqst_trmnlAls->value.u.e164 = ");
			for (pc = ps4->value.u.e164; *pc != 0; pc++)
			{
				wsprintf(szGKDebug, "%c", *pc);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		case h323_ID_chosen:
			len = (unsigned short) ps4->value.u.h323_ID.length;
			wsprintf(szGKDebug, "\tpRgstrtnRqst_trmnlAls->value.u.h323ID.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpRgstrtnRqst_trmnlAls->value.u.h323ID.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%c", ps4->value.u.h323_ID.value[us]);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		}
	}
	wsprintf(szGKDebug, "\thWnd = %X\n", hWnd);
	OutputDebugString(szGKDebug);
	wsprintf(szGKDebug, "\twBaseMessage = %X\n", wBaseMessage);
	OutputDebugString(szGKDebug);
	wsprintf(szGKDebug, "\tRegistrationTransport = %X\n", usRegistrationTransport);
	OutputDebugString(szGKDebug);
	return (0);
}

extern "C" WORD DLL_EXPORT
Dump_GKI_AdmissionRequest(unsigned short		usCallTypeChoice,
						SeqAliasAddr		*pRemoteInfo,
						TransportAddress	*pRemoteCallSignalAddress,
						SeqAliasAddr		*pDestExtraCallInfo,
						BandWidth			bandWidth,
						ConferenceIdentifier	*pConferenceID,
						BOOL				activeMC,
						BOOL				answerCall,
						unsigned short		usCallTransport)
{
	TransportAddress	*ps2;
	SeqAliasAddr		*ps4;
	unsigned short		len, us;
	char				*pc;
	char				szGKDebug[80];

	wsprintf(szGKDebug, "\tusCallTypeChoice = %X\n", usCallTypeChoice);
	OutputDebugString(szGKDebug);

	for (ps4 = pRemoteInfo; ps4 != NULL; ps4 = ps4->next)
	{
		wsprintf(szGKDebug, "\tpRemoteInfo->value.choice = %X\n", ps4->value.choice);
		OutputDebugString(szGKDebug);
		ASSERT((ps4->value.choice == e164_chosen) || (ps4->value.choice == h323_ID_chosen));
		switch (ps4->value.choice)
		{
		case e164_chosen:
			OutputDebugString("\tpRemoteInfo->value.u.e164 = ");
			for (pc = ps4->value.u.e164; *pc != 0; pc++)
			{
				wsprintf(szGKDebug, "%c", *pc);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		case h323_ID_chosen:
			len = (unsigned short) ps4->value.u.h323_ID.length;
			wsprintf(szGKDebug, "\tpRemoteInfo->value.u.h323ID.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpRemoteInfo->value.u.h323ID.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%c", ps4->value.u.h323_ID.value[us]);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		}
	}

   ps2 = pRemoteCallSignalAddress;
   if (ps2)
   {
	    wsprintf(szGKDebug, "\tpRemoteCallSignalAddress->choice = %X\n", ps2->choice);
		OutputDebugString(szGKDebug);
	    ASSERT((ps2->choice == ipAddress_chosen) || (ps2->choice == ipxAddress_chosen));
	    switch (ps2->choice)
	    {
	    case ipAddress_chosen:
		    len = (unsigned short) ps2->u.ipAddress.ip.length;
		    wsprintf(szGKDebug, "\tpRemoteCallSignalAddress->u.ipAddress.ip.length = %X\n", len);
			OutputDebugString(szGKDebug);
		    OutputDebugString("\tpRemoteCallSignalAddress->u.ipAddress.ip.value = ");
		    for (us = 0; us < len; us++)
			{
			    wsprintf(szGKDebug, "%d.", ps2->u.ipAddress.ip.value[us]);
				OutputDebugString(szGKDebug);
			}
		    wsprintf(szGKDebug, "\n\tpRemoteCallSignalAddress->u.ipAddress.port = %X\n", 
					ps2->u.ipAddress.port);
			OutputDebugString(szGKDebug);
		    break;

	    case ipxAddress_chosen:
		    len = (unsigned short) ps2->u.ipxAddress.node.length;
		    wsprintf(szGKDebug, "\tpRemoteCallSignalAddress->u.ipxAddress.node.length = %X\n", len);
			OutputDebugString(szGKDebug);
		    OutputDebugString("\tpRemoteCallSignalAddress->u.ipxAddress.node.value = ");
		    for (us = 0; us < len; us++)
			{
			    wsprintf(szGKDebug, "%02X", ps2->u.ipxAddress.node.value[us]);
				OutputDebugString(szGKDebug);
			}
		    len = (unsigned short) ps2->u.ipxAddress.netnum.length;
		    wsprintf(szGKDebug, "\n\tpRemoteCallSignalAddress->u.ipxAddress.netnum.length = %X\n", len);
			OutputDebugString(szGKDebug);
		    OutputDebugString("\tpRemoteCallSignalAddress->u.ipxAddress.netnum.value = ");
		    for (us = 0; us < len; us++)
			{
			    wsprintf(szGKDebug, "%02X", ps2->u.ipxAddress.netnum.value[us]);
				OutputDebugString(szGKDebug);
			}
		    len = (unsigned short) ps2->u.ipxAddress.port.length;
		    wsprintf(szGKDebug, "\n\tpRemoteCallSignalAddress->u.ipxAddress.port.length = %X\n", len);
			OutputDebugString(szGKDebug);
		    OutputDebugString("\tpRemoteCallSignalAddress->u.ipxAddress.port.value = ");
		    for (us = 0; us < len; us++)
			{
			    wsprintf(szGKDebug, "%02X", ps2->u.ipxAddress.port.value[us]);
				OutputDebugString(szGKDebug);
			}
		    OutputDebugString("\n");
		    break;
	    }
    }

	for (ps4 = pDestExtraCallInfo; ps4 != NULL; ps4 = ps4->next)
	{
		wsprintf(szGKDebug, "\tpDestExtraCallInfo->value.choice = %X\n", ps4->value.choice);
		OutputDebugString(szGKDebug);
		ASSERT((ps4->value.choice == e164_chosen) || (ps4->value.choice == h323_ID_chosen));
		switch (ps4->value.choice)
		{
		case e164_chosen:
			OutputDebugString("\tpDestExtraCallInfo->value.u.e164 = ");
			for (pc = ps4->value.u.e164; *pc != 0; pc++)
			{
				wsprintf(szGKDebug, "%c", *pc);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		case h323_ID_chosen:
			len = (unsigned short) ps4->value.u.h323_ID.length;
			wsprintf(szGKDebug, "\tpDestinationInfo->value.u.h323ID.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpDestinationInfo->value.u.h323ID.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%c", ps4->value.u.h323_ID.value[us]);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		}
	}

	wsprintf(szGKDebug, "\tbandWidth = %X\n", bandWidth);
	OutputDebugString(szGKDebug);
    if (pConferenceID)
    {
	    wsprintf(szGKDebug, "\tpConferenceID->length = %X\n", pConferenceID->length);
		OutputDebugString(szGKDebug);
	    OutputDebugString("\tpConferenceID->value = ");
	    for (us = 0; us < pConferenceID->length; us++)
		{
		    wsprintf(szGKDebug, "%02X", pConferenceID->value[us]);
			OutputDebugString(szGKDebug);
		}
	    OutputDebugString("\n");
	}
	wsprintf(szGKDebug, "\tactiveMC = %X\n", activeMC);
	OutputDebugString(szGKDebug);
	wsprintf(szGKDebug, "\tanswerCall = %X\n", answerCall);
	OutputDebugString(szGKDebug);
	wsprintf(szGKDebug, "\tusCallTransport = %X\n", usCallTransport);
	OutputDebugString(szGKDebug);
	return (0);
}

extern "C" WORD DLL_EXPORT
Dump_GKI_LocationRequest(SeqAliasAddr *pLocationInfo)
{
	SeqAliasAddr		*ps4;
	unsigned short		len, us;
	char				*pc;
	char				szGKDebug[80];

	for (ps4 = pLocationInfo; ps4 != NULL; ps4 = ps4->next)
	{
		wsprintf(szGKDebug, "\tpLocationInfo->value.choice = %X\n", ps4->value.choice);
		OutputDebugString(szGKDebug);
		ASSERT((ps4->value.choice == e164_chosen) || (ps4->value.choice == h323_ID_chosen));
		switch (ps4->value.choice)
		{
		case e164_chosen:
			OutputDebugString("\tpLocationInfo->value.u.e164 = ");
			for (pc = ps4->value.u.e164; *pc != 0; pc++)
			{
				wsprintf(szGKDebug, "%c", *pc);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		case h323_ID_chosen:
			len = (unsigned short) ps4->value.u.h323_ID.length;
			wsprintf(szGKDebug, "\tpLocationInfo->value.u.h323ID.length = %X\n", len);
			OutputDebugString(szGKDebug);
			OutputDebugString("\tpLocationInfo->value.u.h323ID.value = ");
			for (us = 0; us < len; us++)
			{
				wsprintf(szGKDebug, "%c", ps4->value.u.h323_ID.value[us]);
				OutputDebugString(szGKDebug);
			}
			OutputDebugString("\n");
			break;
		}
	}
	return (0);
}

void
SpiderWSErrDecode(int nErr)
{

#ifdef _DEBUG
	char			szGKDebug[80];
#endif

	SPIDER_DEBUG(nErr);

	switch (nErr)
	{
	case WSAEINTR:
		OutputDebugString("WSAEINTR\n");
		break; 
	case WSAEBADF:
		OutputDebugString("WSAEBADF\n");
		break; 
	case WSAEACCES:
		OutputDebugString("WSAEACCES\n");
		break;
	case WSAEFAULT:
		OutputDebugString("WSAEFAULT\n");
		break;
	case WSAEINVAL:
		OutputDebugString("WSAEINVAL\n");
		break;
	case WSAEMFILE:
		OutputDebugString("WSAEMFILE\n");
		break;

	case WSAEWOULDBLOCK:
		OutputDebugString("WSAEWOULDBLOCK\n");
		break;    
	case WSAEINPROGRESS:
		OutputDebugString("WSAEINPROGRESS\n");
		break;    
	case WSAEALREADY:
		OutputDebugString("WSAEALREADY\n");
		break;       
	case WSAENOTSOCK:
		OutputDebugString("WSAENOTSOCK\n");
		break;       
	case WSAEDESTADDRREQ:
		OutputDebugString("WSAEDESTADDRREQ\n");
		break;   
	case WSAEMSGSIZE:
		OutputDebugString("WSAEMSGSIZE\n");
		break;       
	case WSAEPROTOTYPE:
		OutputDebugString("WSAEPROTOTYPE\n");
		break;     
	case WSAENOPROTOOPT:
		OutputDebugString("WSAENOPROTOOPT\n");
		break;    
	case WSAEPROTONOSUPPORT:
		OutputDebugString("WSAEPROTONOSUPPORT\n");
		break;
	case WSAESOCKTNOSUPPORT:
		OutputDebugString("WSAESOCKTNOSUPPORT\n");
		break;
	case WSAEOPNOTSUPP:
		OutputDebugString("WSAEOPNOTSUPP\n");
		break;     
	case WSAEPFNOSUPPORT:
		OutputDebugString("WSAEPFNOSUPPORT\n");
		break;   
	case WSAEAFNOSUPPORT:
		OutputDebugString("WSAEAFNOSUPPORT\n");
		break;   
	case WSAEADDRINUSE:
		OutputDebugString("WSAEADDRINUSE\n");
		break;     
	case WSAEADDRNOTAVAIL:
		OutputDebugString("WSAEADDRNOTAVAIL\n");
		break;  
	case WSAENETDOWN:
		OutputDebugString("WSAENETDOWN\n");
		break;       
	case WSAENETUNREACH:
		OutputDebugString("WSAENETUNREACH\n");
		break;    
	case WSAENETRESET:
		OutputDebugString("WSAENETRESET\n");
		break;      
	case WSAECONNABORTED:
		OutputDebugString("WSAECONNABORTED\n");
		break;   
	case WSAECONNRESET:
		OutputDebugString("WSAECONNRESET\n");
		break;     
	case WSAENOBUFS:
		OutputDebugString("WSAENOBUFS\n");
		break;        
	case WSAEISCONN:
		OutputDebugString("WSAEISCONN\n");
		break;        
	case WSAENOTCONN:
		OutputDebugString("WSAENOTCONN\n");
		break;       
	case WSAESHUTDOWN:
		OutputDebugString("WSAESHUTDOWN\n");
		break;      
	case WSAETOOMANYREFS:
		OutputDebugString("WSAETOOMANYREFS\n");
		break;   
	case WSAETIMEDOUT:
		OutputDebugString("WSAETIMEDOUT\n");
		break;      
	case WSAECONNREFUSED:
		OutputDebugString("WSAECONNREFUSED\n");
		break;   
	case WSAELOOP:
		OutputDebugString("WSAELOOP\n");
		break;          
	case WSAENAMETOOLONG:
		OutputDebugString("WSAENAMETOOLONG\n");
		break;   
	case WSAEHOSTDOWN:
		OutputDebugString("WSAEHOSTDOWN\n");
		break;      
	case WSAEHOSTUNREACH:
		OutputDebugString("WSAEHOSTUNREACH\n");
		break;   
	case WSAENOTEMPTY:
		OutputDebugString("WSAENOTEMPTY\n");
		break;      
	case WSAEPROCLIM:
		OutputDebugString("WSAEPROCLIM\n");
		break;       
	case WSAEUSERS:
		OutputDebugString("WSAEUSERS\n");
		break;         
	case WSAEDQUOT:
		OutputDebugString("WSAEDQUOT\n");
		break;         
	case WSAESTALE:
		OutputDebugString("WSAESTALE\n");
		break;         
	case WSAEREMOTE:
		OutputDebugString("WSAEREMOTE\n");
		break;        

	case WSAEDISCON:
		OutputDebugString("WSAEDISCON\n");
		break;        

	case WSASYSNOTREADY:
		OutputDebugString("WSASYSNOTREADY\n");
		break;
	case WSAVERNOTSUPPORTED:
		OutputDebugString("WSAVERNOTSUPPORTED\n");
		break;
	case WSANOTINITIALISED:
		OutputDebugString("WSANOTINITIALISED\n");
		break;
	case WSAHOST_NOT_FOUND:
		OutputDebugString("WSAHOST_NOT_FOUND\n");
		break;
	case WSATRY_AGAIN:
		OutputDebugString("WSATRY_AGAIN\n");
		break;
	case WSANO_RECOVERY:
		OutputDebugString("WSANO_RECOVERY\n");
		break;
	case WSANO_DATA:
		OutputDebugString("WSANO_DATA\n");
		break;
#if 0	// This one is a duplicate of WSANO_DATA
	case WSANO_ADDRESS:
		OutputDebugString("WSANO_ADDRESS\n");
		break;
#endif // 0
	}
}


void 
DumpMem(void *pv, int nLen)
{
	int n, nMax;
	struct {
		char szBytes[16][3];
		char c;
		char szAscii[17];
	} sRecord;
	unsigned char *puc;
	unsigned char uc;
	char				szGKDebug[80];

	puc = (unsigned char *)pv;
	while (nLen)
	{
		memset(&sRecord, ' ', sizeof(sRecord));
		sRecord.szBytes[15][2] = '\0';
		sRecord.szAscii[16] = '\0';

		nMax = (nLen < 16) ? nLen : 16;
		for (n = 0; n < nMax; n++)
		{
			uc = *(puc + n);
			wsprintf(&sRecord.szBytes[n][0], "%02X ", uc);
			sRecord.szAscii[n] = isprint(uc) ? uc : '.';
		}
		wsprintf(szGKDebug, "%X: %s '%s'\n", puc, &sRecord.szBytes[0][0], &sRecord.szAscii[0]);
		OutputDebugString(szGKDebug);
		puc += nMax;
		nLen -= nMax;
	}
}

#endif // _DEBUG