/*++ Copyright (c) 1994 Microsoft Corporation Module Name : tsvcinfo.hxx Abstract: Declares the Internet Publishing services information object. It was called as TSVC_INFO object. Later on this may be renamed as IPSVC_INFO object. This class provides the member function for all common functions exported from Internet Services DLL used by server dlls for internet services. Author: Murali R. Krishnan ( MuraliK ) 15-Nov-1994 Project: Internet Services Common DLL Revision History: MuraliK 08-March-1995 Added TS_XPORT_CONNECTIONS object MuraliK 28-July-1995 Derived IPSVC_INFO from ISVC_INFO --*/ # ifndef _TSVCINFO_HXX_ # define _TSVCINFO_HXX_ /************************************************************ * Include Headers ************************************************************/ # include "isvcinfo.hxx" # include "TsCache.hxx" # include "mimemap.hxx" # include "ipaccess.hxx" # include "xportcon.hxx" // define TS_XPORT_CONNECTIONS extern "C" { # include // required for SOCKADDR_IN # include "atq.h" }; /************************************************************ * Private Constants ************************************************************/ #define NULL_SERVICE_STATUS_HANDLE ( (SERVICE_STATUS_HANDLE ) NULL) #define SERVICE_START_WAIT_HINT ( 10000) // milliseconds #define SERVICE_STOP_WAIT_HINT ( 10000) // milliseconds #define DEF_ACCEPTEX_RECV_BUFFER_SIZE (2000) // 2000 bytes /************************************************************ * Type Definitions ************************************************************/ // // These functions get called back with the pointer to tsvcInfo object // as the context parameter. // typedef DWORD ( *PFN_SERVICE_SPECIFIC_INITIALIZE) ( LPVOID pContext); typedef DWORD ( *PFN_SERVICE_SPECIFIC_CLEANUP) ( LPVOID pContext); typedef VOID ( *PFN_SERVICE_CTRL_HANDLER) ( DWORD OpCode); class TSVC_INFO : public ISVC_INFO { public: // // Initialization/Tear down related methods // dllexp TSVC_INFO( IN LPCTSTR lpszServiceName, IN CHAR * lpszModuleName, IN CHAR * lpszRegParamKey, IN WCHAR * lpwszAnonPasswordSecretName, IN WCHAR * lpwszRootPasswordSecretName, IN DWORD dwServiceId, IN PFN_SERVICE_SPECIFIC_INITIALIZE pfnInitialize, IN PFN_SERVICE_SPECIFIC_CLEANUP pfnCleanup ); dllexp ~TSVC_INFO( VOID); // // VIRTUAL methods // dllexp virtual BOOL IsValid(VOID) const { return ( m_fValid && ISVC_INFO::IsValid() ); } dllexp virtual BOOL ReadParamsFromRegistry( IN FIELD_CONTROL fc); dllexp virtual BOOL SetConfiguration( IN PVOID pConfig); dllexp virtual BOOL GetConfiguration( IN OUT PVOID pConfig); dllexp virtual DWORD QueryCurrentServiceState( VOID) const { return ( m_svcStatus.dwCurrentState); } // // Parameter access methods. Note that string or non-trivial admin data // items must have the read lock taken. // dllexp WCHAR * QueryAnonPasswordSecretName( VOID ) const { return m_pchAnonPasswordSecretName; } dllexp WCHAR * QueryVirtualRootsSecretName( VOID ) const { return m_pchVirtualRootsSecretName; } dllexp CHAR * QueryRoot( VOID ) const { return "/"; } dllexp DWORD QueryAuthentication( VOID ) const { return m_dwAuthentication; } dllexp short QueryPort( VOID ) const { return m_sPort; } dllexp BOOL QueryLogAnonymous( VOID ) const { return m_fLogAnonymous; } dllexp BOOL QueryLogNonAnonymous( VOID ) const { return m_fLogNonAnonymous; } dllexp const CHAR * QueryAnonUserName( VOID ) const { TCP_ASSERT( m_cReadLocks ); return m_pchAnonUserName; } dllexp const CHAR * QueryAnonUserPwd( VOID ) const { TCP_ASSERT( m_cReadLocks ); return m_achAnonUserPwd; } dllexp LPCTSTR QueryDefaultLogonDomain(VOID) const { TCP_ASSERT( m_cReadLocks ); return m_pchDefaultLogonDomain; } dllexp DWORD QueryLogonMethod( VOID ) const { return m_dwLogonMethod; } dllexp DWORD QueryLogFileType( VOID ) const { return m_dwLogFileType; } dllexp CHAR * QueryLogFileDirectory( VOID ) { TCP_ASSERT( m_cReadLocks ); return m_pchLogFileDirectory; } dllexp CHAR * QueryLogFileName( VOID ) { TCP_ASSERT( m_cReadLocks ); return m_pchLogFileName; } // // IP Security related methods // dllexp BOOL IPAccessCheck( IN LPSOCKADDR_IN psockAddr, OUT BOOL * pfGranted ) { return ( (m_fNoIPAccessChecks) ? ((*pfGranted = TRUE), TRUE) : IPAccessCheckEx( psockAddr, pfGranted) ); } dllexp BOOL IPAccessCheckEx( IN LPSOCKADDR_IN psockAddr, OUT BOOL * pfGranted ); dllexp BOOL SetIPSecurity( IN HKEY hkey, IN INETA_CONFIG_INFO * pConfig ); // // Service control related methods // dllexp DWORD QueryServiceSpecificExitCode( VOID) const { return ( m_svcStatus.dwServiceSpecificExitCode); } dllexp VOID SetServiceSpecificExitCode( DWORD err) { m_svcStatus.dwServiceSpecificExitCode = err; } dllexp DWORD DelayCurrentServiceCtrlOperation( IN DWORD dwWaitHint) { return UpdateServiceStatus(m_svcStatus.dwCurrentState, m_svcStatus.dwWin32ExitCode, m_svcStatus.dwCheckPoint, dwWaitHint); } dllexp DWORD UpdateServiceStatus(IN DWORD State, IN DWORD Win32ExitCode, IN DWORD CheckPoint, IN DWORD WaitHint ); dllexp VOID ServiceCtrlHandler( IN DWORD dwOpCode); dllexp DWORD StartServiceOperation( IN PFN_SERVICE_CTRL_HANDLER pfnCtrlHandler ); // // Miscellaneous methods // dllexp TSVC_CACHE & GetTsvcCache( VOID) { return ( m_tsCache); } dllexp PMIME_MAP QueryMimeMap( VOID) const { return ( m_pMimeMap); } // // Transport independent connections related functions. // // InitializeConnections( VOID) // CleanupConnections( VOID) // // Both these functions will be made private to TSVC_INFO and // will be invoked as part of the initialization of service // StartServiceOperation() once all the services // ( ftp and web move to use GUID based connections) // Till then these functions should be called as part of user // supplied initialization functions. // dllexp BOOL InitializeConnections( IN PFN_CONNECT_CALLBACK pfnConnect, IN ATQ_COMPLETION pfnConnectEx, IN ATQ_COMPLETION pfnIOCompletion, IN USHORT AdditionalPort = 0, IN DWORD cbReceiveBuffSize = DEF_ACCEPTEX_RECV_BUFFER_SIZE, IN const CHAR * pszServiceDBName = NULL); dllexp BOOL CleanupConnections( VOID); dllexp TS_XPORT_CONNECTIONS * QueryTsConnections( VOID) { return &m_tsConnections; } // // Functions for initializing and cleaning up sockets and // InterProcessCommunication RPC listeners. // // These also can move into automatic initialization in // StartServiceOperation(). But that has to wait till other // services ( which are tcpsvcs.dll clients) are configured // to work perfectly. // dllexp DWORD InitializeSockets( VOID); dllexp DWORD CleanupSockets( VOID); # if DBG virtual VOID Print( VOID) const; # endif // DBG private: BOOL m_fValid; DWORD m_fSocketsInitialized : 1; SERVICE_STATUS m_svcStatus; SERVICE_STATUS_HANDLE m_hsvcStatus; HANDLE m_hShutdownEvent; TSVC_CACHE m_tsCache; PMIME_MAP m_pMimeMap; // read-only pointer to mimemap // // Call back functions for service specific data/function // PFN_SERVICE_SPECIFIC_INITIALIZE m_pfnInitialize; PFN_SERVICE_SPECIFIC_CLEANUP m_pfnCleanup; // // Used for IP based Security // IPAccessList m_ipaDenyList; IPAccessList m_ipaGrantList; BOOL m_fNoIPAccessChecks; // // Server common administrable parameters // DWORD m_dwAuthentication; // Types Accepted/Required SHORT m_sPort; // Socket port (host order) BOOL m_fLogAnonymous; BOOL m_fLogNonAnonymous; CHAR * m_pchAnonUserName; CHAR m_achAnonUserPwd[PWLEN + 1]; DWORD m_dwLogFileType; CHAR * m_pchLogFileDirectory; CHAR * m_pchLogFileName; // // Contains the anonymous user name // WCHAR * m_pchAnonPasswordSecretName; // // Contains the passwords for the virtual roots // WCHAR * m_pchVirtualRootsSecretName; // // logon method ( interactive or batch ) // DWORD m_dwLogonMethod; // // logon default domain // CHAR * m_pchDefaultLogonDomain; // // For transport independent connections // TS_XPORT_CONNECTIONS m_tsConnections; // // Per server Initialization methods to be called once for // each server // BOOL InitializeIPSecurity( VOID); // Temporary stubbing BOOL InitializeNTSecurity( VOID) const { return ( TRUE); } // // Per server Termination methods to be called when each // server is shutdown // VOID TerminateCommonParams( VOID); VOID TerminateIPSecurity( VOID); VOID TerminateNTSecurity( VOID) const { return; } // temporary DWORD ReportServiceStatus( VOID); VOID InterrogateService( VOID ); VOID StopService( VOID ); VOID PauseService( VOID ); VOID ContinueService( VOID ); VOID ShutdownService( VOID ); }; // class TSVC_INFO typedef TSVC_INFO FAR * LPTSVC_INFO; // // FROM 7/28/95 the object TSVC_INFO is renamed as IPSVC_INFO. // We will update elsewhere after beta on Aug 15, 1995 // - MuraliK // typedef TSVC_INFO IPSVC_INFO; typedef IPSVC_INFO FAR * PIPSVC_INFO; /************************************************************ * Macros ************************************************************/ // // // Use the following macro once in outer scope of the file // where we construct the global TsvcInfo object. // // Every client of TsvcInfo should define the following macro // passing as parameter their global pointer to TsvcInfo object // This is required to generate certain stub functions, since // the service controller call-back functions do not return // the context information. // // Also we define // the global g_pTsvcInfo variable // a static variable gs_pfnSch, // which is a pointer to the local service control handler function. // # define _INTERNAL_DEFINE_TSVCINFO_INTERFACE( pTsvcInfo) \ \ LPTSVC_INFO g_pTsvcInfo; \ \ static VOID ServiceCtrlHandler( DWORD OpCode) \ { \ ASSERT( pTsvcInfo != NULL); \ \ ( pTsvcInfo)->ServiceCtrlHandler( OpCode); \ \ } \ \ static PFN_SERVICE_CTRL_HANDLER gs_pfnSch = ServiceCtrlHandler; // // Since all the services should use the global variable called g_pTsvcInfo // this is a convenience macro for defining the interface for services // structure // Also required since a lot of macros depend upon the variable g_pTsvcInfo // # define DEFINE_TSVC_INFO_INTERFACE() \ _INTERNAL_DEFINE_TSVCINFO_INTERFACE( g_pTsvcInfo); // // Use the macro SERVICE_CTRL_HANDLER() to pass the parameter for // service control handler when we initialize the TsvcInfo object // ( in constructor for global TsvcInfo object) // # define SERVICE_CTRL_HANDLER() ( gs_pfnSch) # include "tssec.hxx" // for security related functions // // Virtual roots stuff // BOOL TsReadVirtualRoots( IN const TSVC_CACHE & TSvcCache, IN HKEY hKey, IN LPTSVC_INFO psi ); BOOL TsSetVirtualRootsW( IN const TSVC_CACHE & TSvcCache, HKEY hkey, IN INETA_CONFIG_INFO * pConfig ); // // Mime related functions // BOOL InitializeMimeMap( VOID); BOOL CleanupMimeMap( VOID); dllexp BOOL SelectMimeMappingForFileExt( IN const LPTSVC_INFO pTsvcInfo, IN const TCHAR * pchFilePath, OUT STR * pstrMimeType, // optional OUT STR * pstrIconFile = NULL); // optional // // Opens, Reads and caches the contents of the specified file // class CACHE_FILE_INFO { public: CACHE_FILE_INFO() { pbData = NULL; } BYTE * pbData; DWORD dwCacheFlags; }; typedef CACHE_FILE_INFO * PCACHE_FILE_INFO; dllexp BOOL CheckOutCachedFile( IN const CHAR * pchFile, IN TSVC_CACHE * pTsvcCache, IN HANDLE hToken, OUT BYTE * * ppbData, OUT DWORD * pcbData, #ifdef JAPAN OUT PCACHE_FILE_INFO pCacheFileInfo, IN int nCharset #else OUT PCACHE_FILE_INFO pCacheFileInfo #endif ); dllexp BOOL CheckInCachedFile( IN TSVC_CACHE * pTsvcCache, IN PCACHE_FILE_INFO pCacheFileInfo ); // // Object cache manager related stuff // BOOL InitializeCacheScavenger( VOID ); VOID TerminateCacheScavenger( VOID ); # endif // _TSVCINFO_HXX_ /************************ End of File ***********************/