Windows2003-3790/inetcore/outlookexpress/inetcomm/imnxport/propfind.h
2020-09-30 16:53:55 +02:00

235 lines
9.2 KiB
C++

// --------------------------------------------------------------------------------
// propfind.h
// Copyright (c)1998 Microsoft Corporation, All Rights Reserved
// Greg Friedman
// --------------------------------------------------------------------------------
#ifndef __PROPFIND_H
#define __PROPFIND_H
#include "mimeole.h" // for base IHashTable interface
#include "hash.h"
class CByteStream;
const DWORD c_dwMaxNamespaceID = DAVNAMESPACE_CONTACTS;
// --------------------------------------------------------------------------------
// class CStringArray
// Description : CStringArray is a simple utility class that maintains
// an list of strings that are retrievable by index.
// --------------------------------------------------------------------------------
class CStringArray
{
public:
CStringArray(void);
~CStringArray(void);
private:
CStringArray(const CStringArray& other);
CStringArray& operator=(const CStringArray& other);
public:
ULONG Length(void) { return m_ulLength; }
HRESULT Add(LPCSTR psz);
HRESULT Adopt(LPCSTR psz);
LPCSTR GetByIndex(ULONG ulIndex);
HRESULT RemoveByIndex(ULONG ulIndex);
private:
BOOL Expand(void);
private:
LPCSTR *m_rgpszValues;
ULONG m_ulLength;
ULONG m_ulCapacity;
};
// wrap a CHash to provide a destructor that deallocates
// string data.
class CStringHash : public CHash
{
public:
virtual ~CStringHash();
};
class CDAVNamespaceArbiterImp
{
public:
CDAVNamespaceArbiterImp(void);
~CDAVNamespaceArbiterImp(void);
HRESULT AddNamespace(LPCSTR pszNamespace, DWORD *pdwNamespaceID);
HRESULT GetNamespaceID(LPCSTR pszNamespace, DWORD *pdwNamespaceID);
HRESULT GetNamespacePrefix(DWORD dwNamespaceID, LPSTR *ppszNamespacePrefix);
LPSTR AllocExpandedName(DWORD dwNamespaceID, LPCSTR pszPropertyName);
HRESULT WriteNamespaces(IStream *pStream);
BOOL m_rgbNsUsed[c_dwMaxNamespaceID + 1]; // flags indicating whether the
// known namespaces are used
CStringArray m_saNamespaces; // string array of namespaces
private:
HRESULT _AppendXMLNamespace(IStream *pStream, LPCSTR pszNamespace, DWORD dwNamespaceID, BOOL fWhitespacePrefix);
};
class CPropPatchRequest : public IPropPatchRequest
{
public:
// ----------------------------------------------------------------------------
// Construction/Destruction
// ----------------------------------------------------------------------------
CPropPatchRequest(void);
// ----------------------------------------------------------------------------
// IUnknown methods
// ----------------------------------------------------------------------------
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// ----------------------------------------------------------------------------
// IDAVNamespaceArbiter methods
// ----------------------------------------------------------------------------
STDMETHODIMP AddNamespace(LPCSTR pszNamespace, DWORD *pdwNamespaceID);
STDMETHODIMP GetNamespaceID(LPCSTR pszNamespace, DWORD *pdwNamespaceID);
STDMETHODIMP GetNamespacePrefix(DWORD dwNamespaceID, LPSTR *ppszNamespacePrefix);
// ----------------------------------------------------------------------------
// IPropPatchRequest methods
// ----------------------------------------------------------------------------
STDMETHODIMP SetProperty(DWORD dwNamespaceID, LPCSTR pszPropertyName, LPCSTR pszNewValue);
STDMETHODIMP RemoveProperty(DWORD dwNamespaceID, LPCSTR pszPropertyName);
STDMETHODIMP GenerateXML(LPSTR *ppszXML);
// ----------------------------------------------------------------------------
// Internal Methods
// ----------------------------------------------------------------------------
void SpecifyWindows1252Encoding(BOOL fSpecify1252) { m_fSpecify1252 = fSpecify1252; }
STDMETHODIMP GenerateXML(LPHTTPTARGETLIST pTargets, LPSTR *ppszXML);
private:
BOOL m_fSpecify1252;
CDAVNamespaceArbiterImp m_dna;
ULONG m_cRef; // Reference Count
CStringArray m_saPropNames; // string array of property names
CStringArray m_saPropValues; // string array of property values
CStringArray m_saRemovePropNames;// string array of properties to remove
};
class CPropFindRequest : public IPropFindRequest
{
public:
// ----------------------------------------------------------------------------
// Construction/Destruction
// ----------------------------------------------------------------------------
CPropFindRequest(void);
// ----------------------------------------------------------------------------
// IUnknown methods
// ----------------------------------------------------------------------------
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// ----------------------------------------------------------------------------
// IDAVNamespaceArbiter methods
// ----------------------------------------------------------------------------
STDMETHODIMP AddNamespace(LPCSTR pszNamespace, DWORD *pdwNamespaceID);
STDMETHODIMP GetNamespaceID(LPCSTR pszNamespace, DWORD *pdwNamespaceID);
STDMETHODIMP GetNamespacePrefix(DWORD dwNamespaceID, LPSTR *ppszNamespacePrefix);
// ----------------------------------------------------------------------------
// IPropFindRequest methods
// ----------------------------------------------------------------------------
STDMETHODIMP AddProperty(DWORD dwNamespaceID, LPCSTR pszPropertyName);
STDMETHODIMP GenerateXML(LPSTR *ppszXML);
private:
HRESULT AppendXMLNamespace(CByteStream& bs, LPCSTR pszNamespace, DWORD dwNamespaceID);
private:
CDAVNamespaceArbiterImp m_dna;
ULONG m_cRef; // Reference Count
CStringArray m_saProperties; // string array of properties
};
class CPropFindMultiResponse : public IPropFindMultiResponse
{
public:
CPropFindMultiResponse(void);
~CPropFindMultiResponse(void);
// ----------------------------------------------------------------------------
// IUnknown methods
// ----------------------------------------------------------------------------
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// ----------------------------------------------------------------------------
// IPropFindMultiStatus methods
// ----------------------------------------------------------------------------
STDMETHODIMP_(BOOL) IsComplete(void);
STDMETHODIMP GetLength(ULONG *pulLength);
STDMETHODIMP GetResponse(ULONG ulIndex, IPropFindResponse **ppResponse);
// ----------------------------------------------------------------------------
// CPropFindMultiStatus methods
// ----------------------------------------------------------------------------
BOOL GetDone(void) { return m_bDone; }
void SetDone(BOOL bDone) { m_bDone = bDone; }
HRESULT HrAddResponse(IPropFindResponse *pResponse);
private:
ULONG m_cRef;
BOOL m_bDone;
ULONG m_ulResponseCapacity;
ULONG m_ulResponseLength;
IPropFindResponse **m_rgResponses;
};
class CPropFindResponse : public IPropFindResponse
{
public:
CPropFindResponse(void);
~CPropFindResponse(void);
// ----------------------------------------------------------------------------
// IUnknown methods
// ----------------------------------------------------------------------------
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// ----------------------------------------------------------------------------
// IPropFindResponse methods
// ----------------------------------------------------------------------------
STDMETHODIMP_(BOOL) IsComplete(void);
STDMETHODIMP GetHref(LPSTR *ppszHref);
STDMETHODIMP GetProperty(DWORD dwNamespaceID, LPSTR pszPropertyName, LPSTR *ppszPropertyValue);
public:
// ----------------------------------------------------------------------------
// CPropFindResponse methods
// ----------------------------------------------------------------------------
HRESULT HrInitPropFindResponse(IPropFindRequest *pRequest);
HRESULT HrAdoptHref(LPCSTR pszHref);
HRESULT HrAdoptProperty(LPCSTR pszKey, LPCSTR pszValue);
private:
ULONG m_cRef;
BOOL m_bDone;
LPCSTR m_pszHref;
IPropFindRequest *m_pRequest;
CStringHash m_shProperties;
DWORD m_dwCachedNamespaceID;
LPSTR m_pszCachedNamespacePrefix;
};
#endif // __PROPFIND_H