/*++ Copyright (c) 1994 Microsoft Corporation Module Name: svcinfo.hxx Abstract: contains class definitions for service location classes. Author: Madan Appiah (madana) 15-May-1995 Environment: User Mode - Win32 Revision History: Sean Woodward (t-seanwo) 26-October-1997 ADSI Update --*/ #ifndef _SVCINFO_ #define _SVCINFO_ /*++ Class Description: Class definition for internet service info. Private Member functions: ComputeServiceInfoSize : computes the size of embedded service info buffer. CopyServiceInfo : copies the service info structure to emdedded service info buffer. Public Member functions: EMBED_SERVICE_INFO : constructs a service info object. ~EMBED_SERVICE_INFO : destructs a service info object. GetStatus : returns status of the object. SetServiceInfo : updates the service info object. SetServiceState :updates service state in the service info object. GetServiceMask : retrieves service mask. GetServiceInfoLength : retrieves the size of the embedded service info. GetServiceInfoBuffer : retrieves the buffer pointer of the embedded service info. GetServiceInfo : unmarshells the embedded buffer and retrieves service info structure. --*/ class EMBED_SERVICE_INFO { private: DWORD _Status; DWORD _ServiceInfoLength; LPBYTE _ServiceInfoBuffer; DWORD _AllottedBufferSize; INET_SERVICE_STATE *_ServiceState; LPSTR _ServiceComment; ULONGLONG UNALIGNED *_ServiceMask; CRITICAL_SECTION _ServiceObjCritSect; DWORD ComputeServiceInfoSize( LPINET_SERVICE_INFO ServiceInfo ); VOID CopyServiceInfo( LPINET_SERVICE_INFO ServiceInfo ); VOID LockServiceObj( VOID ) { EnterCriticalSection( &_ServiceObjCritSect ); } VOID UnlockServiceObj( VOID ) { LeaveCriticalSection( &_ServiceObjCritSect ); } public: EMBED_SERVICE_INFO( LPINET_SERVICE_INFO ServiceInfo ); EMBED_SERVICE_INFO( LPBYTE InfoBuffer, DWORD InfoBufferLength ); ~EMBED_SERVICE_INFO( VOID ); DWORD GetStatus( VOID ) { return( _Status ); } DWORD SetServiceInfo( LPINET_SERVICE_INFO ServiceInfo ); VOID SetServiceState( INET_SERVICE_STATE SvcState ) { *_ServiceState = SvcState; return; } ULONGLONG GetServiceMask( VOID ) { return( *_ServiceMask ); } DWORD GetServiceInfoLength( VOID ) { return( _ServiceInfoLength ); } DWORD GetServiceInfoBuffer( LPBYTE Buffer, DWORD BufferLength, DWORD *ReturnBufferLength ) { LockServiceObj(); if( BufferLength < _ServiceInfoLength ) { UnlockServiceObj(); return( ERROR_INSUFFICIENT_BUFFER ); } memcpy(Buffer, _ServiceInfoBuffer, _ServiceInfoLength ); *ReturnBufferLength = _ServiceInfoLength; UnlockServiceObj(); return( ERROR_SUCCESS ); } DWORD GetServiceInfo( LPINET_SERVICE_INFO *ServiceInfo ); } typedef EMBED_SERVICE_INFO, *LPSERVICE_OBJECT; // // service object list entry. // typedef struct _EMBED_SERVICE_ENTRY { LIST_ENTRY NextEntry ; LPSERVICE_OBJECT ServiceObject; } EMBED_SERVICE_ENTRY, *LPEMBED_SERVICE_ENTRY; /*++ Class Description: Class definition for internet server info. Private Member functions: IsServiceEntryExist : finds a service is in the server services list. Public Member functions: EMBED_SERVER_INFO : constructs a server info object. ~EMBED_SERVER_INFO : destructs a server info object. GetStatus : returns status of the object. SetServerLoad : sets server load value in the server info object. AddService : adds a new service or updates the info existing server in the server info object. RemoveService :removes a service from the server info object. SetServiceState : sets the state of the existing service in the server info object. ComputeResponseLength : computes the length of the response message (containing server info and all services info in the embeded formatted) sent to a client. MakeResponseMessage : makes a response message sent to a client. --*/ class EMBED_SERVER_INFO { private: DWORD _Status; DWORD _ServerInfoLength; LPBYTE _ServerInfoBuffer; DWORD _AllottedBufferSize; INET_VERSION_NUM *_VersionNum; DWORD *_ServerLoad; ULONGLONG UNALIGNED *_ServicesMask; LPSTR _ServerName; DWORD *_NumServices; LIST_ENTRY _ServicesList; CRITICAL_SECTION _ServerObjCritSect; BOOL IsServiceEntryExist( ULONGLONG ServiceMask, LPEMBED_SERVICE_ENTRY *ServiceEntry ); VOID LockServerObj( VOID ) { EnterCriticalSection( &_ServerObjCritSect ); } VOID UnlockServerObj( VOID ) { LeaveCriticalSection( &_ServerObjCritSect ); } public: EMBED_SERVER_INFO( WORD MajorVersion, WORD MinorVersion, LPSTR ServerName ); EMBED_SERVER_INFO( LPBYTE ResponseBuffer, DWORD ResponseBufferLength ); ~EMBED_SERVER_INFO( VOID ); DWORD GetStatus( VOID ) { return( _Status ); } VOID SetServerLoad ( DWORD SrvLoad ) { *_ServerLoad = SrvLoad; return; } ULONGLONG GetServicesMask( VOID ) { return(*_ServicesMask); } DWORD AddService ( LPINET_SERVICE_INFO ServiceInfo ); DWORD RemoveService( ULONGLONG ServiceMask ); DWORD SetServiceState( ULONGLONG ServiceMask, INET_SERVICE_STATE ServiceState ); DWORD ComputeResponseLength( VOID ); DWORD MakeResponseMessage( LPBYTE MessageBuffer, DWORD BufferLength ); DWORD GetServerInfo( LPINET_SERVER_INFO *ServerInfo ); }; #endif // _SVCINFO_