227 lines
6.3 KiB
C
227 lines
6.3 KiB
C
|
/* ----------------------------------------------------------------------
|
|||
|
|
|||
|
Module: ULS.DLL (Service Provider)
|
|||
|
File: spclient.h
|
|||
|
Content: This file contains the client object definition.
|
|||
|
History:
|
|||
|
10/15/96 Chu, Lon-Chan [lonchanc]
|
|||
|
Created.
|
|||
|
|
|||
|
Copyright (c) Microsoft Corporation 1996-1997
|
|||
|
|
|||
|
---------------------------------------------------------------------- */
|
|||
|
|
|||
|
#ifndef _ILS_SP_CLIENTOBJ_H_
|
|||
|
#define _ILS_SP_CLIENTOBJ_H_
|
|||
|
|
|||
|
#include <pshpack8.h>
|
|||
|
|
|||
|
// Enumeration constants to represent client object members
|
|||
|
//
|
|||
|
enum
|
|||
|
{
|
|||
|
/* -- the following is for user -- */
|
|||
|
|
|||
|
ENUM_CLIENTATTR_CN,
|
|||
|
ENUM_CLIENTATTR_FIRST_NAME,
|
|||
|
ENUM_CLIENTATTR_LAST_NAME,
|
|||
|
ENUM_CLIENTATTR_EMAIL_NAME,
|
|||
|
ENUM_CLIENTATTR_CITY_NAME,
|
|||
|
ENUM_CLIENTATTR_COMMENT,
|
|||
|
ENUM_CLIENTATTR_IP_ADDRESS,
|
|||
|
ENUM_CLIENTATTR_FLAGS,
|
|||
|
ENUM_CLIENTATTR_C,
|
|||
|
|
|||
|
/* -- the following is for app -- */
|
|||
|
|
|||
|
ENUM_CLIENTATTR_APP_NAME,
|
|||
|
ENUM_CLIENTATTR_APP_MIME_TYPE,
|
|||
|
ENUM_CLIENTATTR_APP_GUID,
|
|||
|
|
|||
|
ENUM_CLIENTATTR_PROT_NAME,
|
|||
|
ENUM_CLIENTATTR_PROT_MIME,
|
|||
|
ENUM_CLIENTATTR_PROT_PORT,
|
|||
|
|
|||
|
/* -- the above are resolvable -- */
|
|||
|
|
|||
|
ENUM_CLIENTATTR_CLIENT_SIG,
|
|||
|
ENUM_CLIENTATTR_TTL,
|
|||
|
|
|||
|
/* -- the above are changeable standard attributes for RTPerson -- */
|
|||
|
|
|||
|
/* --- DO NOT ADD NEW ATTRIBUTES BELOW THIS LINE --- */
|
|||
|
/* --- COUNT_ENUM_REG_USER relies on this ---- */
|
|||
|
|
|||
|
ENUM_CLIENTATTR_OBJECT_CLASS,
|
|||
|
ENUM_CLIENTATTR_O,
|
|||
|
COUNT_ENUM_CLIENTATTR
|
|||
|
};
|
|||
|
|
|||
|
// Derived constants
|
|||
|
//
|
|||
|
#define COUNT_ENUM_REG_APP 6
|
|||
|
#define COUNT_ENUM_SET_APP_INFO 16
|
|||
|
#define COUNT_ENUM_SKIP_APP_ATTRS COUNT_ENUM_REG_APP
|
|||
|
|
|||
|
#define COUNT_ENUM_CLIENT_INFO (ENUM_CLIENTATTR_TTL + 1)
|
|||
|
#define COUNT_ENUM_REG_USER (COUNT_ENUM_CLIENTATTR - 2 - COUNT_ENUM_SKIP_APP_ATTRS) // excluding o and objectClass
|
|||
|
#define COUNT_ENUM_SET_USER_INFO (ENUM_CLIENTATTR_C + 1)
|
|||
|
|
|||
|
#define COUNT_ENUM_DIR_CLIENT_INFO (ENUM_CLIENTATTR_C + 1) // count of attrs in dir dlg
|
|||
|
#define COUNT_ENUM_RES_CLIENT_INFO (ENUM_CLIENTATTR_CLIENT_SIG - 1) // count of attrs resolvable
|
|||
|
|
|||
|
|
|||
|
// Shorthands for commonly used names
|
|||
|
//
|
|||
|
extern const TCHAR *c_apszClientStdAttrNames[];
|
|||
|
#define STR_CLIENT_CN (TCHAR *) c_apszClientStdAttrNames[ENUM_CLIENTATTR_CN]
|
|||
|
#define STR_CLIENT_O (TCHAR *) c_apszClientStdAttrNames[ENUM_CLIENTATTR_O]
|
|||
|
#define STR_CLIENT_C (TCHAR *) c_apszClientStdAttrNames[ENUM_CLIENTATTR_C]
|
|||
|
#define STR_CLIENT_IP_ADDR (TCHAR *) c_apszClientStdAttrNames[ENUM_CLIENTATTR_IP_ADDRESS]
|
|||
|
#define STR_CLIENT_TTL (TCHAR *) c_apszClientStdAttrNames[ENUM_CLIENTATTR_TTL]
|
|||
|
#define STR_CLIENT_APP_NAME (TCHAR *) c_apszClientStdAttrNames[ENUM_CLIENTATTR_APP_NAME]
|
|||
|
|
|||
|
// Flags to indicate which fields are valid in CLIENT_INFO
|
|||
|
//
|
|||
|
#define CLIENTOBJ_F_CN 0x0001
|
|||
|
#define CLIENTOBJ_F_FIRST_NAME 0x0002
|
|||
|
#define CLIENTOBJ_F_LAST_NAME 0x0004
|
|||
|
#define CLIENTOBJ_F_EMAIL_NAME 0x0008
|
|||
|
#define CLIENTOBJ_F_CITY_NAME 0x0010
|
|||
|
#define CLIENTOBJ_F_C 0x0020
|
|||
|
#define CLIENTOBJ_F_COMMENT 0x0040
|
|||
|
#define CLIENTOBJ_F_IP_ADDRESS 0x0080
|
|||
|
#define CLIENTOBJ_F_FLAGS 0x0100
|
|||
|
|
|||
|
#define CLIENTOBJ_F_APP_NAME 0x1000
|
|||
|
#define CLIENTOBJ_F_APP_MIME_TYPE 0x2000
|
|||
|
#define CLIENTOBJ_F_APP_GUID 0x4000
|
|||
|
|
|||
|
#define CLIENTOBJ_F_USER_MASK 0x0FFF
|
|||
|
#define CLIENTOBJ_F_APP_MASK 0xF000
|
|||
|
|
|||
|
// Client Info structure
|
|||
|
//
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
DWORD dwFlags;
|
|||
|
// the following is to cache attributes
|
|||
|
TCHAR *apszStdAttrValues[COUNT_ENUM_CLIENTATTR];
|
|||
|
ANY_ATTRS AnyAttrs;
|
|||
|
// the following is scratch buffers
|
|||
|
TCHAR szIPAddress[INTEGER_STRING_LENGTH];
|
|||
|
TCHAR szFlags[INTEGER_STRING_LENGTH];
|
|||
|
TCHAR szTTL[INTEGER_STRING_LENGTH];
|
|||
|
TCHAR szClientSig[INTEGER_STRING_LENGTH];
|
|||
|
TCHAR szGuid[sizeof (GUID) * 2 + 2];
|
|||
|
}
|
|||
|
CLIENT_INFO;
|
|||
|
|
|||
|
// A flag to indicate that this client object is valid
|
|||
|
//
|
|||
|
#define CLIENTOBJ_SIGNATURE ((ULONG) 0x12345678UL)
|
|||
|
|
|||
|
|
|||
|
// Client class
|
|||
|
//
|
|||
|
class SP_CClient
|
|||
|
{
|
|||
|
friend class SP_CRefreshScheduler;
|
|||
|
friend class SP_CProtocol;
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
SP_CClient ( DWORD_PTR dwContext );
|
|||
|
~SP_CClient ( VOID );
|
|||
|
|
|||
|
ULONG AddRef ( VOID );
|
|||
|
ULONG Release ( VOID );
|
|||
|
|
|||
|
HRESULT Register ( ULONG uRespID, SERVER_INFO *pServerInfo, LDAP_CLIENTINFO *pInfo );
|
|||
|
HRESULT UnRegister ( ULONG uRespID );
|
|||
|
|
|||
|
HRESULT SetAttributes ( ULONG uRespID, LDAP_CLIENTINFO *pInfo );
|
|||
|
HRESULT UpdateIPAddress ( VOID );
|
|||
|
|
|||
|
VOID SetRegNone ( VOID ) { m_RegStatus = ILS_REG_STATUS_NONE; }
|
|||
|
VOID SetRegLocally ( VOID ) { m_RegStatus = ILS_REG_STATUS_LOCALLY; }
|
|||
|
VOID SetRegRemotely ( VOID ) { m_RegStatus = ILS_REG_STATUS_REMOTELY; }
|
|||
|
|
|||
|
BOOL IsRegistered ( VOID ) { return (m_RegStatus > ILS_REG_STATUS_NONE); }
|
|||
|
BOOL IsRegLocally ( VOID ) { return (m_RegStatus == ILS_REG_STATUS_LOCALLY); }
|
|||
|
BOOL IsRegRemotely ( VOID ) { return (m_RegStatus == ILS_REG_STATUS_REMOTELY); }
|
|||
|
|
|||
|
BOOL IsValidObject ( VOID ) { return m_uSignature == CLIENTOBJ_SIGNATURE; }
|
|||
|
|
|||
|
SERVER_INFO *GetServerInfo ( VOID ) { return &m_ServerInfo; }
|
|||
|
|
|||
|
ULONG GetTTL ( VOID ) { return m_uTTL; }
|
|||
|
DWORD_PTR GetContext ( VOID ) { return m_dwContext; }
|
|||
|
|
|||
|
protected:
|
|||
|
|
|||
|
HRESULT AddProtocol ( ULONG uNotifyMsg, ULONG uRespID, SP_CProtocol *pProt );
|
|||
|
HRESULT RemoveProtocol ( ULONG uNotifyMsg, ULONG uRespID, SP_CProtocol *pProt );
|
|||
|
HRESULT UpdateProtocols ( ULONG uNotifyMsg, ULONG uRespID, SP_CProtocol *pProt );
|
|||
|
|
|||
|
TCHAR *GetDN ( VOID ) { return m_pszDN; }
|
|||
|
|
|||
|
ULONG GetAppPrefixCount ( VOID ) { return 2; }
|
|||
|
TCHAR *GetAppPrefixString ( VOID ) { return m_pszAppPrefix; }
|
|||
|
|
|||
|
HRESULT SendRefreshMsg ( VOID );
|
|||
|
|
|||
|
private:
|
|||
|
|
|||
|
HRESULT RegisterUser ( VOID );
|
|||
|
HRESULT RegisterApp ( VOID );
|
|||
|
HRESULT UnRegisterUser ( VOID );
|
|||
|
HRESULT UnRegisterApp ( VOID );
|
|||
|
|
|||
|
HRESULT SetUserAttributes ( VOID );
|
|||
|
HRESULT SetAppAttributes ( VOID );
|
|||
|
|
|||
|
HRESULT CacheClientInfo ( LDAP_CLIENTINFO *pInfo );
|
|||
|
|
|||
|
HRESULT CreateRegUserModArr ( LDAPMod ***pppMod );
|
|||
|
HRESULT CreateRegAppModArr ( LDAPMod ***pppMod );
|
|||
|
|
|||
|
HRESULT CreateSetUserAttrsModArr ( LDAPMod ***pppMod );
|
|||
|
HRESULT CreateSetAppAttrsModArr ( LDAPMod ***pppMod );
|
|||
|
|
|||
|
HRESULT CreateSetProtModArr ( LDAPMod ***pppMod );
|
|||
|
|
|||
|
VOID FillModArrAttr ( LDAPMod *pMod, INT nIndex );
|
|||
|
|
|||
|
BOOL IsOverAppAttrLine ( LONG i ) { return (ENUM_CLIENTATTR_APP_NAME <= (i)); }
|
|||
|
|
|||
|
BOOL IsExternalIPAddressPassedIn ( VOID ) { return (m_ClientInfo.dwFlags & CLIENTOBJ_F_IP_ADDRESS); }
|
|||
|
|
|||
|
LONG m_cRefs;
|
|||
|
ULONG m_uSignature;
|
|||
|
|
|||
|
SERVER_INFO m_ServerInfo;
|
|||
|
CLIENT_INFO m_ClientInfo;
|
|||
|
CList m_Protocols;
|
|||
|
|
|||
|
TCHAR *m_pszDN;
|
|||
|
TCHAR *m_pszAppPrefix;
|
|||
|
|
|||
|
TCHAR *m_pszRefreshFilter;
|
|||
|
|
|||
|
REG_STATUS m_RegStatus;
|
|||
|
|
|||
|
BOOL m_fExternalIPAddress;
|
|||
|
DWORD m_dwIPAddress;
|
|||
|
ULONG m_uTTL;
|
|||
|
|
|||
|
DWORD_PTR m_dwContext; // COM layer context
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
#include <poppack.h>
|
|||
|
|
|||
|
#endif // _ILS_SP_USEROBJ_H_
|
|||
|
|
|||
|
|
|||
|
|