259 lines
5.7 KiB
C++
259 lines
5.7 KiB
C++
|
/*++
|
|||
|
|
|||
|
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_
|
|||
|
|
|||
|
|