|
|
/*
File Miscdb.c
Implementation of the miscellaneous settings database.
Paul Mayfield, 10/8/97 */
#include "rassrv.h"
#include "miscdb.h"
#include <stdlib.h>
// ===================================
// Definitions of the database objects
// ===================================
#define FLAG_MULTILINK 1
#define FLAG_SHOWICON 2
typedef struct _RASSRV_MISCDB { BOOL bMultilinkEnabled; BOOL bShowIcons; BOOL bFlushOnClose; BOOL bIsServer; DWORD dwOrigFlags; DWORD dwLogLevel; BOOL bLogLevelDirty; } RASSRV_MISCDB;
// Opens a handle to the database of general tab values
DWORD miscOpenDatabase(HANDLE * hMiscDatabase) { RASSRV_MISCDB * This; DWORD dwErr, i; if (!hMiscDatabase) return ERROR_INVALID_PARAMETER;
// Allocate the database cache
if ((This = RassrvAlloc (sizeof(RASSRV_MISCDB), TRUE)) == NULL) return ERROR_NOT_ENOUGH_MEMORY;
// Initialize the values from the system
miscReloadDatabase((HANDLE)This);
// Record the original flag state for efficiency
This->dwOrigFlags = 0; if (This->bMultilinkEnabled) This->dwOrigFlags |= FLAG_MULTILINK; if (This->bShowIcons) This->dwOrigFlags |= FLAG_SHOWICON;
// Return the handle
*hMiscDatabase = (HANDLE)This; This->bFlushOnClose = FALSE;
return NO_ERROR; }
// Closes the general database and flushes any changes
// to the system when bFlushOnClose is TRUE
DWORD miscCloseDatabase(HANDLE hMiscDatabase) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; // Flush if requested
if (This->bFlushOnClose) miscFlushDatabase(hMiscDatabase); // Free up the database cache
RassrvFree(This);
return NO_ERROR; }
BOOL miscFlagsAreSame(BOOL bVal, DWORD dwFlags, DWORD dwFlag) { if ((bVal != 0) && ((dwFlags & dwFlag) != 0)) return TRUE; if ((bVal == 0) && ((dwFlags & dwFlag) == 0)) return TRUE; return FALSE; }
//for whistler bug 143344 gangz
//
DWORD miscTrayNotifyIconChangeCleanUp( IN OUT LPHNPMParams pInfo) { HnPMParamsConnectionCleanUp(pInfo);
return NO_ERROR; }//miscTrayNotifyIconChangeCleanUp()
//Notify that the "Show Icon in Notification area" has changed
//Used by GenCommand() in GenTab.c
//
DWORD miscTrayNotifyIconChange() { INetConnectionSysTray * pSysTray = NULL; HNPMParams Info; LPHNPMParams pInfo; HRESULT hr; DWORD dwErr = NO_ERROR, i; static const CLSID CLSID_InboundConnection= {0xBA126AD9,0x2166,0x11D1,{0xB1,0xD0,0x00,0x80,0x5F,0xC1,0x27,0x0E}};
TRACE("miscTrayNotifyIconChanged");
ZeroMemory(&Info, sizeof(Info)); pInfo = &Info;
do{ dwErr = HnPMConnectionEnum(pInfo);
if ( NO_ERROR != dwErr ) { TRACE("miscTrayNotifyIconChange: HnPMConnectionEnum failed!"); break; }
TRACE1("miscTrayNotifyIconChange: %l Connections detected", pInfo->ConnCount);
//Set up PortMapping for each connection
//
for ( i = 0; i < pInfo->ConnCount; i++ ) { //won't do PortMapping for Incoming connections
//
if ( pInfo->ConnPropTable ) { //define the class id for Incoming connections
// reference to /nt/net/config/shell/wanui/rasui.cpp
if( IsEqualCLSID( &CLSID_InboundConnection, &(pInfo->ConnPropTable[i].clsidThisObject) ) ) { hr = INetConnection_QueryInterface( pInfo->ConnArray[i], &IID_INetConnectionSysTray, &pSysTray);
ASSERT(pSysTray);
if ( !SUCCEEDED(hr)) { TRACE("miscTrayNotifyIconChange: Query pSysTray failed!"); dwErr = ERROR_CAN_NOT_COMPLETE; break; }
if( !pSysTray ) { TRACE("miscTrayNotifyIconChange: pSysTray get NULL pointer!"); dwErr = ERROR_CAN_NOT_COMPLETE; break; }
INetConnectionSysTray_IconStateChanged(pSysTray); break; } } }//end of for(;;)
if(pSysTray) { INetConnectionSysTray_Release(pSysTray); }
} while(FALSE);
miscTrayNotifyIconChangeCleanUp(pInfo);
return dwErr; }//end of miscTrayNotifyIconChange()
// Commits any changes made to the general tab values
DWORD miscFlushDatabase(HANDLE hMiscDatabase) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; DWORD dwErr, dwRet = NO_ERROR;
// Flush out the multilink value
if (!miscFlagsAreSame(This->bMultilinkEnabled, This->dwOrigFlags, FLAG_MULTILINK)) { dwErr = RasSrvSetMultilink(This->bMultilinkEnabled); if (dwErr != NO_ERROR) { DbgOutputTrace("miscFlushDatabase: Can't commit multilink 0x%08x", dwErr); dwRet = dwErr; } }
// Flush the show icon setting
if (!miscFlagsAreSame(This->bShowIcons, This->dwOrigFlags, FLAG_SHOWICON)) { DWORD dwErr = NO_ERROR;
dwErr = RasSrvSetIconShow(This->bShowIcons); if (dwErr != NO_ERROR) { DbgOutputTrace("miscFlushDatabase: Can't commit show icons 0x%08x", dwErr); dwRet = dwErr; }
//for whistler bug 143344 gangz
//update the tray icon on the taskbar
//This notification should be done after RasSrvSetIconShow()
//
dwErr = miscTrayNotifyIconChange(); TRACE1("miscFlushDatabase: %s", NO_ERROR == dwErr ? "miscTrayNotifyIconChange succeeded!" : "miscTrayNotifyIconChange failed!"); }
// Flush the log level setting as appropriate
if (This->bLogLevelDirty) { RasSrvSetLogLevel(This->dwLogLevel); }
return dwRet; }
// Rollsback any changes made to the general tab values
DWORD miscRollbackDatabase(HANDLE hMiscDatabase) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; This->bFlushOnClose = FALSE; return NO_ERROR; }
// Reloads any values for the general tab from disk
DWORD miscReloadDatabase(HANDLE hMiscDatabase) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; DWORD dwRet = NO_ERROR, dwErr, dwFlags = 0;
// Initialize the product type
dwErr = RasSrvGetMachineFlags (&dwFlags); if (dwErr != NO_ERROR) { DbgOutputTrace("RasSrvGetMachineFlags: Failed %x", dwErr); dwRet = dwErr; }
// Initialize what we can from the flags
//
This->bIsServer = !!(dwFlags & RASSRVUI_MACHINE_F_Server);
// Initialize the show icons setting
//
dwErr = RasSrvGetIconShow(&This->bShowIcons); if (dwErr != NO_ERROR) { DbgOutputTrace("miscReloadDatabase: Can't get iconshow 0x%08x", dwErr); dwRet = dwErr; } // Initialize multilink setting
//
dwErr = RasSrvGetMultilink(&(This->bMultilinkEnabled)); if (dwErr != NO_ERROR) { DbgOutputTrace("miscReloadDatabase: Can't get encryption 0x%08x", dwErr); dwRet = dwErr; }
return dwRet; }
// Gets the multilink enable status
DWORD miscGetMultilinkEnable(HANDLE hMiscDatabase, BOOL * pbEnabled) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; if (!This || !pbEnabled) return ERROR_INVALID_PARAMETER; if (!pbEnabled) return ERROR_INVALID_HANDLE;
*pbEnabled = This->bMultilinkEnabled;
return NO_ERROR; }
// Sets the multilink enable status
DWORD miscSetMultilinkEnable(HANDLE hMiscDatabase, BOOL bEnable) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; if (!This) return ERROR_INVALID_PARAMETER;
This->bMultilinkEnabled = bEnable;
return NO_ERROR; }
// Gets the enable status of the "Show icons in the task bar" check box
DWORD miscGetIconEnable(HANDLE hMiscDatabase, BOOL * pbEnabled) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; if (!This || !pbEnabled) return ERROR_INVALID_PARAMETER;
*pbEnabled = This->bShowIcons;
return NO_ERROR; }
// Sets the enable status of the "Show icons in the task bar" check box
DWORD miscSetIconEnable(HANDLE hMiscDatabase, BOOL bEnable) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; if (!This) return ERROR_INVALID_PARAMETER;
This->bShowIcons = bEnable;
return NO_ERROR; }
// Tells whether this is nt workstation or nt server
DWORD miscGetProductType(HANDLE hMiscDatabase, PBOOL pbIsServer) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; if (!This || !pbIsServer) return ERROR_INVALID_PARAMETER;
*pbIsServer = This->bIsServer;
return NO_ERROR; }
// Turns on ras error and warning logging
DWORD miscSetRasLogLevel( IN HANDLE hMiscDatabase, IN DWORD dwLevel) { RASSRV_MISCDB * This = (RASSRV_MISCDB*)hMiscDatabase; if (!This) { return ERROR_INVALID_PARAMETER; }
This->dwLogLevel = dwLevel; This->bLogLevelDirty = TRUE;
return NO_ERROR; }
|