home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-12-30 | 6.2 KB | 239 lines | [TEXT/CWIE] |
- // =================================================================================
- //
- // CBaseBindStatusCallback.cpp ©1996 Microsoft Corporation All rights reserved.
- //
- // =================================================================================
-
- #include "ocheaders.h"
- #include "CBaseBindStatusCallback.h"
- #include "urlmonsupport.h"
-
-
- static FORMATETC FileFormatEtc = {
- CF_NULL,
- NULL,
- DVASPECT_CONTENT,
- -1,
- TYMED_FSP
- };
-
-
- #pragma mark === CBaseBindStatusCallback::Construction & Destruction ===
-
- //
- // CBaseBindStatusCallback::CBindStatusCallback
- //
- // Constructor
- //
- CBaseBindStatusCallback::CBaseBindStatusCallback(void)
- {
- }
-
-
- //
- // CBaseBindStatusCallback::~CBaseBindStatusCallback
- //
- // Destructor
- //
- CBaseBindStatusCallback::~CBaseBindStatusCallback(void)
- {
- }
-
-
- #pragma mark === CBaseBindStatusCallback::IUnknown ===
-
- //
- // CBaseBindStatusCallback::IUnknown::QueryInterface
- //
- // Returns a pointer to the specified interface on a component to which a
- // client currently holds an interface pointer.
- //
- STDMETHODIMP
- CBaseBindStatusCallback::QueryInterface(REFIID inRefID, void** outObj)
- {
- ErrorCode Result = CBaseCOM::QueryInterface(inRefID, outObj);
-
- if ( Result == E_NOINTERFACE )
- {
- void* pv = nil;
-
- if ( inRefID == IID_IBindStatusCallback )
- pv = (void*)(IBindStatusCallback*) this;
-
- *outObj = pv;
-
- // if we got an interface, ref it and return ok
- if ( pv )
- {
- ((IUnknown*) pv)->AddRef();
- Result = S_OK;
- }
- }
-
- return Result;
- }
-
-
-
-
- #pragma mark === CBaseBindStatusCallback::IBindStatusCallback ===
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::OnStartBinding
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::OnStartBinding(Uint32 BSCOption, IBinding* Binding)
- {
- #pragma unused (BSCOption)
- mibP = Binding;
- mibP->AddRef();
- mTotalStreamLen = 0;
-
- return S_OK;
- }
-
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::GetPriority
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::GetPriority(Int32 *Priority)
- {
- *Priority = 0;
- return S_OK;
- }
-
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::OnLowResource
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::OnLowResource(Uint32 reserved)
- {
- #pragma unused (reserved)
- return S_OK;
- }
-
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::OnProgress
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::OnProgress(Uint32 Progress, Uint32 ProgressMax, Uint32 StatusCode, const Char8* StatusText)
- {
- #pragma unused (Progress, ProgressMax, StatusCode, StatusText)
- return S_OK;
- }
-
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::OnStopBinding
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::OnStopBinding(ErrorCode ErrCode, const char* Error)
- {
- #pragma unused (ErrCode, Error)
- if (mibP != NULL)
- mibP->Release();
- mibP = NULL;
-
- return S_OK;
- }
-
-
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::GetBindInfo
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::GetBindInfo(Uint32* BINDF, BINDINFO *BindInfo)
- {
- *BINDF = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE;
- BindInfo->dwBindVerb = BINDVERB_GET;
- return S_OK;
- }
-
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::OnDataAvailable
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::OnDataAvailable(Uint32 BSCF, Uint32 Size, FORMATETC* FormatEtc, STGMEDIUM* StgMedium)
- {
- #pragma unused (BSCF, Size, FormatEtc, StgMedium)
- mDataSize = BSCF == BSCF_LASTDATANOTIFICATION ? 0 : Size;
- mTotalStreamLen += mDataSize;
-
- return S_OK;
- }
-
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::IBindStatusCallback::OnObjectAvailable
- //=--------------------------------------------------------------------------=
- //
- STDMETHODIMP
- CBaseBindStatusCallback::OnObjectAvailable(REFIID RefID, IUnknown* Unknown)
- {
- #pragma unused (RefID, Unknown)
- return S_OK;
- }
-
-
- #pragma mark === CBaseBindStatusCallback::Protected Methods ===
-
- //=--------------------------------------------------------------------------=
- // CBaseBindStatusCallback::OpenStream
- //=--------------------------------------------------------------------------=
- //
- ErrorCode
- CBaseBindStatusCallback::OpenStream(IContainerSite* inContainerSiteP, LPOLESTR URLString, Boolean BindFile)
- {
- ErrorCode Result = E_FAIL;
- #pragma unused(BindFile)
-
- LPBINDHOST BindSiteP;
- LPENUMFORMATETC pEnum = NULL;
- LPMONIKER URLMoniker = NULL;
- LPBINDCTX BindContext = NULL;
-
- inContainerSiteP->QueryInterface(IID_IBindHost, (LPVOID *) &BindSiteP);
-
- if (BindSiteP)
- {
- Result = BindSiteP->CreateMoniker((LPOLESTR)URLString, NULL, &URLMoniker, 0);
- if(SUCCEEDED(Result) && URLMoniker)
- {
- void* Dummy;
-
- // if BindFile, register enumerator so we get a file
- if(BindFile)
- {
- Result = CreateBindCtx( 0, &BindContext);
- if(SUCCEEDED(Result))
- Result = CreateFormatEnumerator(1, &FileFormatEtc, &pEnum);
- if(SUCCEEDED(Result))
- RegisterFormatEnumerator(BindContext, pEnum, 0);
- }
- Result = BindSiteP->MonikerBindToStorage(URLMoniker, BindContext,
- (IBindStatusCallback*)this, IID_IStream, &Dummy);
- if(Result == E_PENDING)
- Result = S_OK;
- if(BindContext)
- BindContext->Release();
- if(pEnum)
- pEnum->Release();
- URLMoniker->Release();
- }
- }
-
- return Result;
- }
-