/*++

Copyright (c) 2000  Microsoft Corporation

Module Name:

    pastdbg.c

Abstract:

    This module contains code for the PAST transparent proxy's DEBUG
    outputing code.

Author:

    Savas Guven  (savasg)        25-Jul-2000

Revision History:

--*/
#include "stdafx.h"



extern ULONG NhpTraceId;



//****************************************************************************
//  Global Parameters
//****************************************************************************
TCHAR g_tszDebugKey[] = _T("SOFTWARE\\Microsoft\\Tracing\\ICQPRX\\Debug");


DEBUG_MODULE_INFO gDebugInfo[] = {
    {TM_DEFAULT,  TL_DUMP, _T("<default>"),  _T("DebugLevel")},   // 0
    {TM_BUF,      TL_INFO, _T("BUF"),        _T("BufDebugLevel")}, // 1
    {TM_API,      TL_INFO, _T("API"),        _T("ApiDebugLevel")}, // 2
    {TM_IO,       TL_INFO, _T("IO"),         _T("IoDebugLevel")}, // 3
    {TM_MSG,      TL_INFO, _T("MSG"),        _T("MsgDebugLevel")},// 4
    {TM_REF,      TL_INFO, _T("REF"),        _T("RefDebugLevel")},// 5 
    {TM_TEST,     TL_INFO, _T("TEST"),       _T("TestDebugLevel")},// 6
    {TM_CON,      TL_INFO, _T("CON"),        _T("ConDebugLevel")}, // 7
    {TM_IF,       TL_INFO, _T("IF"),         _T("IfDebugLevel")}, //8
    {TM_PRX,      TL_INFO, _T("PRX"),        _T("PrxDebugLevel")}, //9
	{TM_SYNC,     TL_INFO, _T("SYNC"),       _T("SyncDebugLevel")}, // 10
	{TM_DISP,     TL_INFO, _T("DISP"),       _T("DispDebugLevel")},
	{TM_SOCK,     TL_INFO, _T("SOCK"),       _T("SockDebugLevel")},
	{TM_LIST,     TL_INFO, _T("LIST"),       _T("ListDebugLevel")}, // 13
    {TM_PROF,     TL_INFO, _T("PROFILE"),    _T("ProfileDebugLevel")}, // 14
    {TM_TIMER,    TL_INFO, _T("TIMER"),      _T("TimerDebugLevel")} // 15
};

char g_szModule[] = SZ_MODULE;

HANDLE g_EventLogHandle = NULL;
ULONG  g_TraceId		= INVALID_TRACEID;



void DestroyDebuger(VOID) {
    TraceDeregister(g_TraceId);
    g_TraceId = INVALID_TRACEID;

}

//****************************************************************************
// VOID GetDebugLevel()
//
// This function gets the current debug level from the registry
//
//****************************************************************************

void InitDebuger()
/*++

Routine Description:

    R

Arguments:

    A

Return Value:

    R

Notes:

    N

--*/

{
    HKEY        hkey;
    DWORD       dwType, cb;
    DWORD       dwLevel;
    int         iModule;         
    int         nModules;         

    
    // Init the Trace Manager
    g_TraceId = TraceRegisterA("ICQPRX");
    
    //
    // Open the registry key that contains the debug configuration info
    //
    if (RegOpenKeyEx((HKEY) HKEY_LOCAL_MACHINE,
                     g_tszDebugKey,
                     0,
                     KEY_READ,
                     &hkey) == ERROR_SUCCESS) 
	{

        cb = sizeof(dwLevel);

        //
        // Initialize all the modules to the base value or their custom value
        //
        nModules = (sizeof(gDebugInfo)/sizeof(DEBUG_MODULE_INFO));

        for (iModule = 0; iModule < nModules; iModule++) 
		{

            //
            // Open each custom debug level if present
            //
            if ((RegQueryValueEx(hkey, 
                                 gDebugInfo[iModule].szDebugKey,
                                 NULL, 
                                 &dwType, 
                                 (PUCHAR) 
                                 &dwLevel, 
                                 &cb) == ERROR_SUCCESS) && (dwType == REG_DWORD)) 
			{
                gDebugInfo[iModule].dwLevel = dwLevel; 
            } 
			else 
			{
                //gDebugInfo[iModule].dwLevel = gDebugInfo[TM_DEFAULT].dwLevel; 
            }
#ifndef _UNICODE
            DBG_TRACE(TM_IF, TL_INFO, ("ModuleKey: %s, DebugLevel: %d", 
                                       gDebugInfo[iModule].szModuleName,
                                       gDebugInfo[iModule].dwLevel));
#endif

        }

        RegCloseKey(hkey);
    } 
	else 
	{
       // NhTrace(TRACE_FLAG_PAST, "Couldn't open Reg\n");
		printf("DEBUG key doesn't exist\n");
    }

    return;
}



void  DbgPrintX(LPCSTR pszMsg, ...)
{
    va_list VaList;
    /*
	char temp[100];
    char msg[1024];
    int len = 0;

	len = sprintf(temp, "%s ", g_szModule);
    
    lstrcpy(msg, temp);
    wvsprintf(&msg[len], pszMsg, (va_list)(&pszMsg + 1));
    lstrcat(msg,"\r\n");
    OutputDebugString(msg);
    */
    if(g_TraceId is INVALID_TRACEID)
         InitDebuger();
    va_start(VaList, pszMsg);
    TraceVprintfExA(g_TraceId, 
                    TRACE_FLAG_ICQ,
                    pszMsg,
                    VaList); 
    va_end(VaList);

}

// DBG_TRACE(TM_MSG, TL_INFO, ("nvnat_control_one > xtcp_port\n"));