2025-04-27 07:49:33 -04:00

251 lines
13 KiB
C++

#ifndef __ASYNCCALL_H
#define __ASYNCCALL_H
#include "unk.h"
#include "idavinet.h"
#include "iasyncwnt.h"
// prototype
class CQXML;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
class CAsyncWntCallbackImpl : public CCOMBase, public IAsyncWntCallback {
public:
// IAsyncWntCallback methods
// this method is called when a response is received from the DAV server.
// it dispatches to one of the internal response handlers.
//
// simple handlers are found in acallsmp.cpp, propfind and proppatch are in acallfnd.cpp
//
virtual STDMETHODIMP Respond(LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
virtual STDMETHODIMP OnAuthChallenge(
/* [out][in] */ TCHAR __RPC_FAR szUserName[ 255 ],
/* [out][in] */ TCHAR __RPC_FAR szPassword[ 255 ]);
public:
// CAsyncWntCallback methods
virtual STDMETHODIMP Init (IDavCallback* pcallback,
DWORD dwParam,
LPWSTR pwszUserName,
LPWSTR pwszPassword,
BOOL fNoRoot);
private:
// Internal helper methods
// implemented in acallsmp.cpp
void _ParseDAVVerbs (LPWSTR pwsz, DWORD* pdw);
STDMETHODIMP _RespondHandleGET(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandleHEAD(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandleOPTIONS(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandlePUT(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandlePOST(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandlePUTPOST(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandleDELETE(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandleMKCOL(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandleCOPY(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
STDMETHODIMP _RespondHandleMOVE(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
// implemented in acallfnd.cpp
LPWSTR _XMLNSExtend (LPWSTR pwszNamespace, LPWSTR pwszXMLPath);
STDMETHODIMP _InitQXMLFromMessyBuffer(CQXML* pqxml,
LPSTR pszXML,
WCHAR wszDAVAlias[]);
LPWSTR _GetHREF (CQXML* pqxml,
WCHAR wszDavPrefix[]);
// PROPFIND-specific code to plug into _RespondHandlePROPFINDPATCH
STDMETHODIMP _RespondHandlePROPFINDHelper(DAVRESPONSE* pdavResponse,
LPWSTR pwszPath,
LPWSTR pwszDavPrefix,
CQXML* pqxml);
// PROPPATCH-specific code to plug into _RespondHandlePROPFINDPATCH
STDMETHODIMP _RespondHandlePROPPATCHHelper(DAVRESPONSE* pdavResponse,
LPWSTR pwszPath,
LPWSTR pwszDavPrefix,
CQXML* pqxml);
// simply calls _RespondHandlePROPFINDPATCH with fFind == TRUE
STDMETHODIMP _RespondHandlePROPFIND(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
// simply calls _RespondHandlePROPFINDPATCH with fFind == FALSE
STDMETHODIMP _RespondHandlePROPPATCH(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse);
// shared handler for PROPFIND and PROPPATCH
STDMETHODIMP _RespondHandlePROPFINDPATCH(DAVRESPONSE* pdavResponse,
LPWSTR pwszVerb,
LPWSTR pwszPath,
DWORD cchHeaders,
LPWSTR pwszHeaders,
DWORD dwStatusCode,
LPWSTR pwszStatusCode,
LPWSTR pwszContentType,
DWORD cbSent,
LPBYTE pbResponse,
DWORD cbResponse,
BOOL fFind); // find: true, patch: false
private:
////////////////////////////////////////////////////////////////
// Member variables
////////////////////////////////////////////////////////////////
IDavCallback* _pcallback;
DWORD _dwParam;
WCHAR _wszUserName[255];
WCHAR _wszPassword[255];
BOOL _fNoRoot; // used for PROPFIND
};
typedef CUnkTmpl<CAsyncWntCallbackImpl> CAsyncWntCallback;
#endif // __ASYNCCALL_H