#include "TransportParser.hpp" #include "SPParser.hpp" #include "VoiceParser.hpp" #include "SessionParser.hpp" // DESCRIPTION: Identifies the parser, or parsers that are located in the DLL. // // NOTE: ParserAutoInstallInfo should be implemented in all parser DLLs. // // ARGUMENTS: NONE // // RETURNS: Success: PF_PARSERDLLINFO structure that describes the parsers in the DLL. // Failiure: NULL // DPLAYPARSER_API PPF_PARSERDLLINFO WINAPI ParserAutoInstallInfo( void ) // TODO: RIGHT NOW THIS SEEMS TO DO NOTHING!!! { enum { nNUM_OF_PROTOCOLS = 4 }; // Allocate memory for the parser info // NetMon will free this with HeapFree PPF_PARSERDLLINFO pParserDllInfo = reinterpret_cast( HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PF_PARSERDLLINFO) + nNUM_OF_PROTOCOLS * sizeof(PF_PARSERINFO)) ); if( pParserDllInfo == NULL) { return NULL; } // Number of parsers in the parser DLL. pParserDllInfo->nParsers = nNUM_OF_PROTOCOLS; //=============================================// // DPlay Service Provider parser specific info //=============================================================== //=============================================// // Defining a synonym reference for simpler access PF_PARSERINFO& rSPInfo = pParserDllInfo->ParserInfo[0]; // Name of the protocol that the parser detects strcpy(rSPInfo.szProtocolName, "DPLAYSP"); // Brief description of the protocol strcpy(rSPInfo.szComment, "DPlay v.8.0 - Service Provider protocol"); // Optional name of the protocol Help file strcpy(rSPInfo.szHelpFile, "\0"); // Specify the preceding protocols enum { nNUM_OF_PARSERS_SP_FOLLOWS = 2 }; // NetMon will free this with HeapFree PPF_FOLLOWSET pSPPrecedeSet = reinterpret_cast( HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PF_FOLLOWSET) + nNUM_OF_PARSERS_SP_FOLLOWS * sizeof(PF_FOLLOWENTRY)) ); if( pSPPrecedeSet == NULL ) { return pParserDllInfo; } // Fill in the follow set for preceding parsers pSPPrecedeSet->nEntries = nNUM_OF_PARSERS_SP_FOLLOWS; strcpy(pSPPrecedeSet->Entry[0].szProtocol, "UDP"); strcpy(pSPPrecedeSet->Entry[1].szProtocol, "IPX"); rSPInfo.pWhoCanPrecedeMe = pSPPrecedeSet; //==================================// // DPlay8 Transport parser specific info //========================================================================== //==================================// // Defining a synonym reference for simpler access PF_PARSERINFO& rTransportInfo = pParserDllInfo->ParserInfo[1]; // Name of the protocol that the parser detects strcpy(rTransportInfo.szProtocolName, "DPLAYTRANSPORT"); // Brief description of the protocol strcpy(rTransportInfo.szComment, "DPlay v.8.0 - Transport protocol"); // Optional name of the protocol Help file strcpy(rTransportInfo.szHelpFile, "\0"); //==================================// // DPlay Voice parser specific info //========================================================================== //==================================// // Defining a synonym reference for simpler access PF_PARSERINFO& rVoiceInfo = pParserDllInfo->ParserInfo[2]; // Name of the protocol that the parser detects strcpy(rVoiceInfo.szProtocolName, "DPLAYVOICE"); // Brief description of the protocol strcpy(rVoiceInfo.szComment, "DPlay v.8.0 - Voice protocol"); // Optional name of the protocol Help file strcpy(rVoiceInfo.szHelpFile, "\0"); //=================================// // DPlay Core parser specific info //=========================================================================== //=================================// // Defining a synonym reference for simpler access PF_PARSERINFO& rCoreInfo = pParserDllInfo->ParserInfo[3]; // Name of the protocol that the parser detects strcpy(rCoreInfo.szProtocolName, "DPLAYSESSION"); // Brief description of the protocol strcpy(rCoreInfo.szComment, "DPlay v.8.0 - Session protocol"); // Optional name of the protocol Help file strcpy(rCoreInfo.szHelpFile, "\0"); return pParserDllInfo; } // ParserAutoInstallInfo // DESCRIPTION: (Called by the OS) Tell the kernel about our entry points. // // ARGUMENTS: i_hInstance - Handle to an instance of the parser. // i_dwCommand - Indicator to determine why the function is called. // i_pReserved - Not used now. // // RETURNS: Success = TRUE; Failure = FALSE // BOOL WINAPI DllMain( HANDLE i_hInstance, ULONG i_dwCommand, LPVOID i_pReserved ) { static DWORD dwAttached = 0; // Process according to the calling context switch( i_dwCommand ) { case DLL_PROCESS_ATTACH: // Are we loading for the first time? if( dwAttached == 0 ) { // TODO: TEMPORARY: THIS SEEMS TO ADD THE PROTOCOLS TO PARSER.INI CreateTransportProtocol(); CreateSPProtocol(); CreateVoiceProtocol(); CreateSessionProtocol(); /* if ( !CreateTransportProtocol() || !CreateSPProtocol() || !CreateVoiceProtocol() || !CreateSessionProtocol() ) { // TODO: ADD DEBUGING MESSAGE HERE MessageBox(NULL, "Failed to create protocols", "FAILED", MB_OK); // return FALSE; // (?BUG?) NetMon won't update the INI file if DllMain returns FALSE. } */ } ++dwAttached; break; case DLL_PROCESS_DETACH: // Are we detaching our last instance? if( --dwAttached == 0 ) { // Last active instance of this parser needs to clean up DestroyTransportProtocol(); DestroySPProtocol(); DestroyVoiceProtocol(); DestroySessionProtocol(); } break; } return TRUE; } // DllMain