//****************************************************************************
//
//  Module:     ULS.DLL
//  File:       ulsapp.h
//  Content:    This file contains the Application object definition.
//  History:
//      Wed 17-Apr-1996 11:18:47  -by-  Viroon  Touranachun [viroont]
//
//  Copyright (c) Microsoft Corporation 1996-1997
//
//****************************************************************************

#ifndef _ULSAPP_H_
#define _ULSAPP_H_

#include "connpt.h"

//****************************************************************************
// CUlsApp definition
//****************************************************************************
//
class CUlsApp : public IULSApplication,
                public IConnectionPointContainer
{
private:
    ULONG                   cRef;
    LPTSTR                  szServer;
    LPTSTR                  szUser;
    GUID                    guid;
    LPTSTR                  szName;
    LPTSTR                  szMimeType;
    CAttributes             *pAttrs;
    CConnectionPoint        *pConnPt;

    // Private method
    //
    STDMETHODIMP    NotifySink (void *pv, CONN_NOTIFYPROC pfn);

public:
    // Constructor and destructor
    CUlsApp (void);
    ~CUlsApp (void);
    STDMETHODIMP            Init (LPTSTR szServerName,
                                  LPTSTR szUserName,
                                  PLDAP_APPINFO pai);

    // Asynchronous response
    //
    STDMETHODIMP    GetProtocolResult (ULONG uReqID,
                                       PLDAP_PROTINFO_RES plar);
    STDMETHODIMP    EnumProtocolsResult (ULONG uReqID,
                                         PLDAP_ENUM ple);

    // IUnknown
    STDMETHODIMP            QueryInterface (REFIID iid, void **ppv);
    STDMETHODIMP_(ULONG)    AddRef (void);
    STDMETHODIMP_(ULONG)    Release (void);

    // IULSApplication
    STDMETHODIMP    GetID (GUID *pGUID);
    STDMETHODIMP    GetName (BSTR *pbstrAppName);
    STDMETHODIMP    GetMimeType (BSTR *pbstrMimeType);
    STDMETHODIMP    GetAttributes (IULSAttributes **ppAttributes);
    STDMETHODIMP    GetProtocol (BSTR bstrProtocolID,
    							 IULSAttributes *pAttributes,
                                 ULONG *puReqID);
    STDMETHODIMP    EnumProtocols (ULONG *puReqID);

    // IConnectionPointContainer
    STDMETHODIMP    EnumConnectionPoints(IEnumConnectionPoints **ppEnum);
    STDMETHODIMP    FindConnectionPoint(REFIID riid,
                                        IConnectionPoint **ppcp);
};

#endif //_ULSAPP_H_