//****************************************************************************
//
//  Module:     ULS.DLL
//  File:       ulsldap.h
//  Content:    This file contains the declaration for LDAP function calls
//  History:
//      Tue 08-Oct-1996 08:54:45  -by-  Lon-Chan Chu [lonchanc]
//
//  Copyright (c) Microsoft Corporation 1996-1997
//
//****************************************************************************

#ifndef _ILS_LDAP_H_
#define _ILS_LDAP_H_

#include <pshpack8.h>

//
// Asynchronous request result:
//
// **********************************************************************************
//      Message                                                 wParam  lParam
// **********************************************************************************
//
#define WM_ILS_ASYNC_RES                (WM_USER+0x1001)

// client object
#define WM_ILS_REGISTER_CLIENT          (WM_ILS_ASYNC_RES+0) // uMsgID  hResult
#define WM_ILS_UNREGISTER_CLIENT        (WM_ILS_ASYNC_RES+1) // uMsgID  hResult
#define WM_ILS_SET_CLIENT_INFO          (WM_ILS_ASYNC_RES+2) // uMsgID  hResult
#define WM_ILS_RESOLVE_CLIENT           (WM_ILS_ASYNC_RES+3)// uMsgID  PLDAP_USERINFO_RES
#define WM_ILS_ENUM_CLIENTS             (WM_ILS_ASYNC_RES+4)// uMsgID  PLDAP_ENUM
#define WM_ILS_ENUM_CLIENTINFOS         (WM_ILS_ASYNC_RES+5)// uMsgID  PLDAP_ENUM

// protocol object
#define WM_ILS_REGISTER_PROTOCOL        (WM_ILS_ASYNC_RES+6) // uMsgID  hResult
#define WM_ILS_UNREGISTER_PROTOCOL      (WM_ILS_ASYNC_RES+7) // uMsgID  hResult
#define WM_ILS_SET_PROTOCOL_INFO        (WM_ILS_ASYNC_RES+8) // uMsgID  hResult
#define WM_ILS_RESOLVE_PROTOCOL         (WM_ILS_ASYNC_RES+9)// uMsgID  PLDAP_PROTINFO_RES
#define WM_ILS_ENUM_PROTOCOLS           (WM_ILS_ASYNC_RES+10)// uMsgID  PLDAP_ENUM

#ifdef ENABLE_MEETING_PLACE
// meeting object
#define WM_ILS_REGISTER_MEETING         (WM_ILS_ASYNC_RES+11)
#define WM_ILS_UNREGISTER_MEETING       (WM_ILS_ASYNC_RES+12)
#define WM_ILS_SET_MEETING_INFO         (WM_ILS_ASYNC_RES+13)
#define WM_ILS_RESOLVE_MEETING          (WM_ILS_ASYNC_RES+14)
#define WM_ILS_ENUM_MEETINGINFOS        (WM_ILS_ASYNC_RES+15)
#define WM_ILS_ENUM_MEETINGS            (WM_ILS_ASYNC_RES+16)
#define WM_ILS_ADD_ATTENDEE             (WM_ILS_ASYNC_RES+17)
#define WM_ILS_REMOVE_ATTENDEE          (WM_ILS_ASYNC_RES+18)
#define WM_ILS_ENUM_ATTENDEES           (WM_ILS_ASYNC_RES+19)
#define WM_ILS_CANCEL                   (WM_ILS_ASYNC_RES+20)
#else
#define WM_ILS_CANCEL                   (WM_ILS_ASYNC_RES+11)
#endif

#define WM_ILS_LAST_ONE                 WM_ILS_CANCEL

// client notification
#define WM_ILS_CLIENT_NEED_RELOGON      (WM_ILS_ASYNC_RES+51)// fPrimary  pszServerName
#define WM_ILS_CLIENT_NETWORK_DOWN      (WM_ILS_ASYNC_RES+52)// fPrimary  pszServerName

#ifdef ENABLE_MEETING_PLACE
// meeting notification
#define WM_ILS_MEETING_NEED_RELOGON     (WM_ILS_ASYNC_RES+61)
#define WM_ILS_MEETING_NETWORK_DOWN     (WM_ILS_ASYNC_RES+62)
#endif


//
// Constants
//
#define INVALID_OFFSET			0
#define INVALID_USER_FLAGS		-1	// used in LDAP_USERINFO dwFlags

#ifdef ENABLE_MEETING_PLACE
#define INVALID_MEETING_FLAGS	0	// used in LDAP_MEETINFO dwFlags
#define INVALID_MEETING_TYPE	0	// used in LDAP_MEETINFO lMeetingType
#define INVALID_ATTENDEE_TYPE	0	// used in LDAP_MEETINFO lAttendeeType
#endif

//
// Asynchronous response info structures
//
typedef struct tagLDAPAsyncInfo
{
    ULONG           uMsgID;
}
    LDAP_ASYNCINFO, *PLDAP_ASYNCINFO;

typedef struct tagLDAPEnum
{
    ULONG           uSize;
    HRESULT         hResult;
    ULONG           cItems;
    ULONG           uOffsetItems;
}
    LDAP_ENUM, *PLDAP_ENUM;

typedef struct tagLDAPClientInfo
{
    ULONG           uSize;
    // user object attributes
    ULONG           uOffsetCN;
    ULONG           uOffsetFirstName;
    ULONG           uOffsetLastName;
    ULONG           uOffsetEMailName;
    ULONG           uOffsetCityName;
    ULONG           uOffsetCountryName;
    ULONG           uOffsetComment;
    ULONG           uOffsetIPAddress;
    DWORD           dwFlags;        // 0, private; 1, public
    // app object attributes
    ULONG           uOffsetAppName;
    ULONG           uOffsetAppMimeType;
    GUID            AppGuid;
    // app extended attributes to add, modify, and remove
    ULONG           cAttrsToAdd;
    ULONG           uOffsetAttrsToAdd;
    ULONG           cAttrsToModify;
    ULONG           uOffsetAttrsToModify;
    ULONG           cAttrsToRemove;
    ULONG           uOffsetAttrsToRemove;
	// for notification of enum-user-infos
	ULONG			cAttrsReturned;
	ULONG			uOffsetAttrsReturned;
}
	LDAP_CLIENTINFO, *PLDAP_CLIENTINFO;


typedef struct tagLDAPClientInfoRes
{
    ULONG           uSize;
    HRESULT         hResult;
    LDAP_CLIENTINFO lci;
}
	LDAP_CLIENTINFO_RES, *PLDAP_CLIENTINFO_RES;

typedef struct tagLDAPProtocolInfo
{
    ULONG           uSize;
	// protocol standard attributes
    ULONG           uOffsetName;
    ULONG           uPortNumber;
    ULONG           uOffsetMimeType;
}
    LDAP_PROTINFO, *PLDAP_PROTINFO;

typedef struct tagLDAPProtInfoRes
{
    ULONG           uSize;
    HRESULT         hResult;
    LDAP_PROTINFO   lpi;
}
    LDAP_PROTINFO_RES, *PLDAP_PROTINFO_RES;

#ifdef ENABLE_MEETING_PLACE
typedef struct tagLDAPMeetingInfo
{
    ULONG           uSize;
	// meeting standard attributes
    LONG            lMeetingPlaceType;
    LONG            lAttendeeType;
    ULONG           uOffsetMeetingPlaceID;
    ULONG           uOffsetDescription;
    ULONG           uOffsetHostName;
    ULONG           uOffsetHostIPAddress;
    // meeting extended attributes to add, modify, and remove
    ULONG           cAttrsToAdd;
    ULONG           uOffsetAttrsToAdd;
    ULONG           cAttrsToModify;
    ULONG           uOffsetAttrsToModify;
    ULONG           cAttrsToRemove;
    ULONG           uOffsetAttrsToRemove;
	// for notification of enum-meeting-infos
	ULONG			cAttrsReturned;
	ULONG			uOffsetAttrsReturned;
}
    LDAP_MEETINFO, *PLDAP_MEETINFO;
#endif


#ifdef ENABLE_MEETING_PLACE
typedef struct tagLDAPMeetingInfoRes
{
    ULONG               uSize;
    HRESULT             hResult;
    LDAP_MEETINFO       lmi;
}
    LDAP_MEETINFO_RES, *PLDAP_MEETINFO_RES;
#endif


// Initialization

HRESULT UlsLdap_Initialize (
    HWND            hwndCallback);

HRESULT UlsLdap_Deinitialize (void);

HRESULT UlsLdap_Cancel (
    ULONG           uMsgID);


// Clients related

HRESULT UlsLdap_RegisterClient (
    DWORD_PTR           dwContext,
    SERVER_INFO         *pServer,
    PLDAP_CLIENTINFO    pCleintInfo,
    PHANDLE             phClient,
    PLDAP_ASYNCINFO     pAsyncInfo );

HRESULT UlsLdap_UnRegisterClient (
    HANDLE              hClient,
    PLDAP_ASYNCINFO     pAsyncInfo );

HRESULT UlsLdap_SetClientInfo (
    HANDLE              hClient,
    PLDAP_CLIENTINFO    pInfo,
    PLDAP_ASYNCINFO     pAsyncInfo );

HRESULT UlsLdap_EnumClients (
    SERVER_INFO         *pServer,
    LPTSTR              pszFilter,
    PLDAP_ASYNCINFO     pAsyncInfo );

HRESULT UlsLdap_ResolveClient (
    SERVER_INFO         *pServer,
    LPTSTR              pszUserName,
    LPTSTR              pszAppName,
    LPTSTR              pszProtName,
    LPTSTR              pszAttrNameList,
    ULONG               cAttrNames,
    PLDAP_ASYNCINFO     pAsyncInfo );

HRESULT UlsLdap_EnumClientInfos (
    SERVER_INFO         *pServer,
    LPTSTR              pszAttrNameList,
    ULONG               cAttrNames,
    LPTSTR              pszFilter,
    PLDAP_ASYNCINFO     pAsyncInfo );


// Protocols related

HRESULT UlsLdap_RegisterProtocol (
    HANDLE          hApp,
    PLDAP_PROTINFO  pProtInfo,
    PHANDLE         phProt,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_UnRegisterProtocol (
    HANDLE          hProt,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_VirtualUnRegisterProtocol (
    HANDLE          hProt );

HRESULT UlsLdap_SetProtocolInfo (
    HANDLE          hProt,
    PLDAP_PROTINFO  pInfo,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_EnumProtocols (
    SERVER_INFO     *pServer,
    LPTSTR          pszUserName,
    LPTSTR          pszAppName,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_ResolveProtocol (
    SERVER_INFO     *pServer,
    LPTSTR          pszUserName,
    LPTSTR          pszAppName,
    LPTSTR          pszProtName,
    LPTSTR          pszAnyAttrNameList,
    ULONG           cAttrNames,
    PLDAP_ASYNCINFO pAsyncInfo );


#ifdef ENABLE_MEETING_PLACE
// Meetings related

HRESULT UlsLdap_RegisterMeeting(
    DWORD           dwContext,
    SERVER_INFO     *pServer,
    PLDAP_MEETINFO  pMeetInfo,
    PHANDLE         phMeeting,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_UnRegisterMeeting(
    HANDLE          hMeeting,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_EnumMeetingInfos(
    SERVER_INFO     *pServer,
    LPTSTR          pszAnyAttrNameList,
    ULONG           cAnyAttrNames,
    LPTSTR          pszFilter,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_EnumMeetings(
    SERVER_INFO     *pServer,
    LPTSTR          pszFilter,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_ResolveMeeting(
    SERVER_INFO     *pServer,
    LPTSTR          pszMeetingID,
    LPTSTR          pszAnyAttrNameList,
    ULONG           cAnyAttrNames,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_SetMeetingInfo(
    SERVER_INFO     *pServer,
    LPTSTR          pszMeetingID,
    PLDAP_MEETINFO  pMeetInfo,
    PLDAP_ASYNCINFO pAsyncInfo );

HRESULT UlsLdap_AddAttendee(
    SERVER_INFO     *pServer,
    LPTSTR          pszMeetingID,
    ULONG           cAttendees,
    LPTSTR          pszAttendeeID,
    PLDAP_ASYNCINFO pAsyncInfo  );

HRESULT UlsLdap_RemoveAttendee(
    SERVER_INFO     *pServer,
    LPTSTR          pszMeetingID,
    ULONG           cAttendees,
    LPTSTR          pszAttendeeID,
    PLDAP_ASYNCINFO pAsyncInfo  );

HRESULT UlsLdap_EnumAttendees(
    SERVER_INFO     *pServer,
    LPTSTR          pszMeetingID,
    LPTSTR          pszFilter,
    PLDAP_ASYNCINFO pAsyncInfo  );

#endif // ENABLE_MEETING_PLACE



const TCHAR *UlsLdap_GetStdAttrNameString (
    ILS_STD_ATTR_NAME StdName );

const TCHAR *UlsLdap_GetExtAttrNamePrefix ( VOID );


#include <poppack.h>

#endif // _ILS_LDAP_H_