Index: Shared/ProtocolImpl.inl |
=================================================================== |
--- a/Shared/ProtocolImpl.inl |
+++ b/Shared/ProtocolImpl.inl |
@@ -2,763 +2,779 @@ |
#define PASSTHROUGHAPP_PROTOCOLIMPL_INL |
#if _MSC_VER > 1000 |
- #pragma once |
+#pragma once |
#endif // _MSC_VER > 1000 |
#ifndef PASSTHROUGHAPP_PROTOCOLIMPL_H |
- #error ProtocolImpl.inl requires ProtocolImpl.h to be included first |
+#error ProtocolImpl.inl requires ProtocolImpl.h to be included first |
#endif |
namespace PassthroughAPP |
{ |
-namespace Detail |
-{ |
+ namespace Detail |
+ { |
#ifdef WIN64 |
- template <class T> |
-inline HRESULT WINAPI QIPassthrough<T>:: |
- QueryInterfacePassthroughT(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw) |
+ template <class T> |
+ inline HRESULT WINAPI QIPassthrough<T>:: |
+ QueryInterfacePassthroughT(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw) |
#else |
-template <class T> |
-inline HRESULT WINAPI QIPassthrough<T>:: |
- QueryInterfacePassthroughT(void* pv, REFIID riid, LPVOID* ppv, DWORD dw) |
+ template <class T> |
+ inline HRESULT WINAPI QIPassthrough<T>:: |
+ QueryInterfacePassthroughT(void* pv, REFIID riid, LPVOID* ppv, DWORD dw) |
#endif |
-{ |
- ATLASSERT(pv != 0); |
- T* pT = static_cast<T*>(pv); |
+ { |
+ ATLASSERT(pv != 0); |
+ T* pT = static_cast<T*>(pv); |
- IUnknown* punkTarget = pT->GetTargetUnknown(); |
- ATLASSERT(punkTarget != 0); |
- if (!punkTarget) |
- { |
- ATLTRACE(_T("Interface queried before target unknown is set")); |
- return E_UNEXPECTED; |
- } |
+ IUnknown* punkTarget = pT->GetTargetUnknown(); |
+ ATLASSERT(punkTarget != 0); |
+ if (!punkTarget) |
+ { |
+ ATLTRACE(_T("Interface queried before target unknown is set")); |
+ return E_UNEXPECTED; |
+ } |
- IUnknown* punkWrapper = pT->GetUnknown(); |
+ IUnknown* punkWrapper = pT->GetUnknown(); |
- typename T::ObjectLock lock(pT); |
- return QueryInterfacePassthrough( |
- pv, riid, ppv, dw, punkTarget, punkWrapper); |
-} |
+ typename T::ObjectLock lock(pT); |
+ return QueryInterfacePassthrough( |
+ pv, riid, ppv, dw, punkTarget, punkWrapper); |
+ } |
#ifdef WIN64 |
-template <class T> |
-inline HRESULT WINAPI QIPassthrough<T>:: |
- QueryInterfaceDebugT(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw) |
+ template <class T> |
+ inline HRESULT WINAPI QIPassthrough<T>:: |
+ QueryInterfaceDebugT(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw) |
#else |
-template <class T> |
-inline HRESULT WINAPI QIPassthrough<T>:: |
- QueryInterfaceDebugT(void* pv, REFIID riid, LPVOID* ppv, DWORD dw) |
+ template <class T> |
+ inline HRESULT WINAPI QIPassthrough<T>:: |
+ QueryInterfaceDebugT(void* pv, REFIID riid, LPVOID* ppv, DWORD dw) |
#endif |
-{ |
- ATLASSERT(pv != 0); |
- T* pT = static_cast<T*>(pv); |
+ { |
+ ATLASSERT(pv != 0); |
+ T* pT = static_cast<T*>(pv); |
- IUnknown* punkTarget = pT->GetTargetUnknown(); |
-// ATLASSERT(punkTarget != 0); |
- if (!punkTarget) |
- { |
-// ATLTRACE(_T("Interface queried before target unknown is set")); |
- return E_UNEXPECTED; |
- } |
+ IUnknown* punkTarget = pT->GetTargetUnknown(); |
+ // ATLASSERT(punkTarget != 0); |
+ if (!punkTarget) |
+ { |
+ // ATLTRACE(_T("Interface queried before target unknown is set")); |
+ return E_UNEXPECTED; |
+ } |
- typename T::ObjectLock lock(pT); |
+ typename T::ObjectLock lock(pT); |
- return QueryInterfaceDebug(pv, riid, ppv, dw, punkTarget); |
-} |
+ return QueryInterfaceDebug(pv, riid, ppv, dw, punkTarget); |
+ } |
#ifdef WIN64 |
-inline HRESULT WINAPI QueryInterfacePassthrough(void* pv, REFIID riid, |
- LPVOID* ppv, DWORD_PTR dw, IUnknown* punkTarget, IUnknown* punkWrapper) |
+ inline HRESULT WINAPI QueryInterfacePassthrough(void* pv, REFIID riid, |
+ LPVOID* ppv, DWORD_PTR dw, IUnknown* punkTarget, IUnknown* punkWrapper) |
#else |
-inline HRESULT WINAPI QueryInterfacePassthrough(void* pv, REFIID riid, |
- LPVOID* ppv, DWORD dw, IUnknown* punkTarget, IUnknown* punkWrapper) |
+ inline HRESULT WINAPI QueryInterfacePassthrough(void* pv, REFIID riid, |
+ LPVOID* ppv, DWORD dw, IUnknown* punkTarget, IUnknown* punkWrapper) |
#endif |
-{ |
- ATLASSERT(pv != 0); |
- ATLASSERT(ppv != 0); |
- ATLASSERT(dw != 0); |
- ATLASSERT(punkTarget != 0); |
+ { |
+ ATLASSERT(pv != 0); |
+ ATLASSERT(ppv != 0); |
+ ATLASSERT(dw != 0); |
+ ATLASSERT(punkTarget != 0); |
- const PassthroughItfData& data = |
- *reinterpret_cast<const PassthroughItfData*>(dw); |
+ const PassthroughItfData& data = |
+ *reinterpret_cast<const PassthroughItfData*>(dw); |
- IUnknown** ppUnk = reinterpret_cast<IUnknown**>( |
- static_cast<char*>(pv) + data.offsetUnk); |
+ IUnknown** ppUnk = reinterpret_cast<IUnknown**>( |
+ static_cast<char*>(pv) + data.offsetUnk); |
- HRESULT hr = S_OK; |
- if (!*ppUnk) |
- { |
- CComPtr<IUnknown> spUnk; |
- hr = punkTarget->QueryInterface(riid, |
- reinterpret_cast<void**>(&spUnk)); |
- ATLASSERT(FAILED(hr) || spUnk != 0); |
- if (SUCCEEDED(hr)) |
- { |
- *ppUnk = spUnk.Detach(); |
+ HRESULT hr = S_OK; |
+ if (!*ppUnk) |
+ { |
+ CComPtr<IUnknown> spUnk; |
+ hr = punkTarget->QueryInterface(riid, |
+ reinterpret_cast<void**>(&spUnk)); |
+ ATLASSERT(FAILED(hr) || spUnk != 0); |
+ if (SUCCEEDED(hr)) |
+ { |
+ *ppUnk = spUnk.Detach(); |
- // Need to QI for base interface to fill in base target pointer |
- if (data.piidBase) |
- { |
- ATLASSERT(punkWrapper != 0); |
- hr = punkWrapper->QueryInterface(*data.piidBase, |
- reinterpret_cast<void**>(&spUnk)); |
- // since QI for derived interface succeeded, |
- // QI for base interface must succeed, too |
- ATLASSERT(SUCCEEDED(hr)); |
- } |
- } |
- } |
- if (SUCCEEDED(hr)) |
- { |
- CComPtr<IUnknown> spItf = reinterpret_cast<IUnknown*>( |
- static_cast<char*>(pv) + data.offsetItf); |
- *ppv = spItf.Detach(); |
- } |
- else |
- { |
- ATLASSERT(_T("Interface not supported by target unknown")); |
- } |
- return hr; |
-} |
+ // Need to QI for base interface to fill in base target pointer |
+ if (data.piidBase) |
+ { |
+ ATLASSERT(punkWrapper != 0); |
+ hr = punkWrapper->QueryInterface(*data.piidBase, |
+ reinterpret_cast<void**>(&spUnk)); |
+ // since QI for derived interface succeeded, |
+ // QI for base interface must succeed, too |
+ ATLASSERT(SUCCEEDED(hr)); |
+ } |
+ } |
+ } |
+ if (SUCCEEDED(hr)) |
+ { |
+ CComPtr<IUnknown> spItf = reinterpret_cast<IUnknown*>( |
+ static_cast<char*>(pv) + data.offsetItf); |
+ *ppv = spItf.Detach(); |
+ } |
+ else |
+ { |
+ ATLASSERT(_T("Interface not supported by target unknown")); |
+ } |
+ return hr; |
+ } |
-inline HRESULT WINAPI QueryInterfaceDebug(void* pv, REFIID riid, |
- LPVOID* ppv, DWORD_PTR dw, IUnknown* punkTarget) |
-{ |
- ATLASSERT(pv != 0); |
- ATLASSERT(ppv != 0); |
- ATLASSERT(punkTarget != 0); |
+ inline HRESULT WINAPI QueryInterfaceDebug(void* pv, REFIID riid, |
+ LPVOID* ppv, DWORD_PTR dw, IUnknown* punkTarget) |
+ { |
+ ATLASSERT(pv != 0); |
+ ATLASSERT(ppv != 0); |
+ ATLASSERT(punkTarget != 0); |
- CComPtr<IUnknown> spUnk; |
- HRESULT hr = punkTarget->QueryInterface(riid, |
- reinterpret_cast<void**>(&spUnk)); |
- ATLASSERT(FAILED(hr) || spUnk != 0); |
- if (SUCCEEDED(hr)) |
- { |
- //Added by MH to display interface CLSID in debug |
- OLECHAR wszBuff[39]; |
- int i = StringFromGUID2(riid, wszBuff, 39); |
- USES_CONVERSION; |
- ATLTRACE(_T("=====>Unrecognized interface supported by target unknown=%s\n"), OLE2T(wszBuff)); |
- } |
+ CComPtr<IUnknown> spUnk; |
+ HRESULT hr = punkTarget->QueryInterface(riid, |
+ reinterpret_cast<void**>(&spUnk)); |
+ ATLASSERT(FAILED(hr) || spUnk != 0); |
+ if (SUCCEEDED(hr)) |
+ { |
+ //Added by MH to display interface CLSID in debug |
+ OLECHAR wszBuff[39]; |
+ int i = StringFromGUID2(riid, wszBuff, 39); |
+ USES_CONVERSION; |
+ ATLTRACE(_T("=====>Unrecognized interface supported by target unknown=%s\n"), OLE2T(wszBuff)); |
+ } |
- // We don't support this interface, so return an error. |
- // The operations above are for debugging purposes only, |
- // this function is not supposed to ever return success |
- return E_NOINTERFACE; |
-} |
+ // We don't support this interface, so return an error. |
+ // The operations above are for debugging purposes only, |
+ // this function is not supposed to ever return success |
+ return E_NOINTERFACE; |
+ } |
-inline HRESULT QueryServicePassthrough(REFGUID guidService, |
- IUnknown* punkThis, REFIID riid, void** ppv, |
- IServiceProvider* pClientProvider) |
-{ |
- ATLASSERT(punkThis != 0); |
- CComPtr<IUnknown> spDummy; |
- HRESULT hr = pClientProvider ? |
- pClientProvider->QueryService(guidService, riid, |
- reinterpret_cast<void**>(&spDummy)) : |
- E_NOINTERFACE; |
- if (SUCCEEDED(hr)) |
- { |
- hr = punkThis->QueryInterface(riid, ppv); |
- } |
- return hr; |
-} |
+ inline HRESULT QueryServicePassthrough(REFGUID guidService, |
+ IUnknown* punkThis, REFIID riid, void** ppv, |
+ IServiceProvider* pClientProvider) |
+ { |
+ ATLASSERT(punkThis != 0); |
+ CComPtr<IUnknown> spDummy; |
+ HRESULT hr = pClientProvider ? |
+ pClientProvider->QueryService(guidService, riid, |
+ reinterpret_cast<void**>(&spDummy)) : |
+ E_NOINTERFACE; |
+ if (SUCCEEDED(hr)) |
+ { |
+ hr = punkThis->QueryInterface(riid, ppv); |
+ } |
+ return hr; |
+ } |
-} // end namespace PassthroughAPP::Detail |
+ } // end namespace PassthroughAPP::Detail |
-// ===== IInternetProtocolImpl ===== |
+ // ===== IInternetProtocolImpl ===== |
-inline STDMETHODIMP IInternetProtocolImpl::SetTargetUnknown( |
- IUnknown* punkTarget) |
-{ |
- ATLASSERT(punkTarget != 0); |
- if (!punkTarget) |
- { |
- return E_POINTER; |
- } |
+ inline STDMETHODIMP IInternetProtocolImpl::SetTargetUnknown( |
+ IUnknown* punkTarget) |
+ { |
+ ATLASSERT(punkTarget != 0); |
+ if (!punkTarget) |
+ { |
+ return E_POINTER; |
+ } |
- // This method should only be called once, and be the only source |
- // of target interface pointers. |
- ATLASSERT(m_spInternetProtocolUnk == 0); |
- ATLASSERT(m_spInternetProtocol == 0); |
- if (m_spInternetProtocolUnk || m_spInternetProtocol) |
- { |
- return E_UNEXPECTED; |
- } |
+ // This method should only be called once, and be the only source |
+ // of target interface pointers. |
+ ATLASSERT(m_spInternetProtocolUnk == 0); |
+ ATLASSERT(m_spInternetProtocol == 0); |
+ if (m_spInternetProtocolUnk || m_spInternetProtocol) |
+ { |
+ return E_UNEXPECTED; |
+ } |
- // We expect the target unknown to implement at least IInternetProtocol |
- // Otherwise we reject it |
- HRESULT hr = punkTarget->QueryInterface(&m_spInternetProtocol); |
- ATLASSERT(FAILED(hr) || m_spInternetProtocol != 0); |
- if (FAILED(hr)) |
- { |
- return hr; |
- } |
+ // We expect the target unknown to implement at least IInternetProtocol |
+ // Otherwise we reject it |
+ HRESULT hr = punkTarget->QueryInterface(&m_spInternetProtocol); |
+ ATLASSERT(FAILED(hr) || m_spInternetProtocol != 0); |
+ if (FAILED(hr)) |
+ { |
+ return hr; |
+ } |
- ATLASSERT(m_spInternetProtocolInfo == 0); |
- ATLASSERT(m_spInternetPriority == 0); |
- ATLASSERT(m_spInternetThreadSwitch == 0); |
- ATLASSERT(m_spWinInetInfo == 0); |
- ATLASSERT(m_spWinInetHttpInfo == 0); |
+ ATLASSERT(m_spInternetProtocolInfo == 0); |
+ ATLASSERT(m_spInternetPriority == 0); |
+ ATLASSERT(m_spInternetThreadSwitch == 0); |
+ ATLASSERT(m_spWinInetInfo == 0); |
+ ATLASSERT(m_spWinInetHttpInfo == 0); |
- m_spInternetProtocolUnk = punkTarget; |
- return S_OK; |
-} |
+ m_spInternetProtocolUnk = punkTarget; |
+ return S_OK; |
+ } |
-inline void IInternetProtocolImpl::ReleaseAll() |
-{ |
- m_spInternetProtocolUnk.Release(); |
- m_spInternetProtocol.Release(); |
- m_spInternetProtocolInfo.Release(); |
- m_spInternetPriority.Release(); |
- m_spInternetThreadSwitch.Release(); |
- m_spWinInetInfo.Release(); |
- m_spWinInetHttpInfo.Release(); |
-} |
+ inline void IInternetProtocolImpl::ReleaseAll() |
+ { |
+ m_spInternetProtocolUnk.Release(); |
+ m_spInternetProtocol.Release(); |
+ m_spInternetProtocolInfo.Release(); |
+ m_spInternetPriority.Release(); |
+ m_spInternetThreadSwitch.Release(); |
+ m_spWinInetInfo.Release(); |
+ m_spWinInetHttpInfo.Release(); |
+ } |
-// IInternetProtocolRoot |
-inline STDMETHODIMP IInternetProtocolImpl::Start( |
- /* [in] */ LPCWSTR szUrl, |
- /* [in] */ IInternetProtocolSink *pOIProtSink, |
- /* [in] */ IInternetBindInfo *pOIBindInfo, |
- /* [in] */ DWORD grfPI, |
- /* [in] */ HANDLE_PTR dwReserved) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Start(szUrl, pOIProtSink, pOIBindInfo, grfPI, |
- dwReserved) : |
- E_UNEXPECTED; |
-} |
+ // IInternetProtocolRoot |
+ inline STDMETHODIMP IInternetProtocolImpl::Start( |
+ /* [in] */ LPCWSTR szUrl, |
+ /* [in] */ IInternetProtocolSink *pOIProtSink, |
+ /* [in] */ IInternetBindInfo *pOIBindInfo, |
+ /* [in] */ DWORD grfPI, |
+ /* [in] */ HANDLE_PTR dwReserved) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Start(szUrl, pOIProtSink, pOIBindInfo, grfPI, |
+ dwReserved) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::Continue( |
- /* [in] */ PROTOCOLDATA *pProtocolData) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Continue(pProtocolData) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::Continue( |
+ /* [in] */ PROTOCOLDATA *pProtocolData) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Continue(pProtocolData) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::Abort( |
- /* [in] */ HRESULT hrReason, |
- /* [in] */ DWORD dwOptions) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Abort(hrReason, dwOptions) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::Abort( |
+ /* [in] */ HRESULT hrReason, |
+ /* [in] */ DWORD dwOptions) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Abort(hrReason, dwOptions) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::Terminate( |
- /* [in] */ DWORD dwOptions) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Terminate(dwOptions) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::Terminate( |
+ /* [in] */ DWORD dwOptions) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Terminate(dwOptions) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::Suspend() |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Suspend() : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::Suspend() |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Suspend() : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::Resume() |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Resume() : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::Resume() |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Resume() : |
+ E_UNEXPECTED; |
+ } |
-// IInternetProtocol |
-inline STDMETHODIMP IInternetProtocolImpl::Read( |
- /* [in, out] */ void *pv, |
- /* [in] */ ULONG cb, |
- /* [out] */ ULONG *pcbRead) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Read(pv, cb, pcbRead) : |
- E_UNEXPECTED; |
-} |
+ // IInternetProtocol |
+ inline STDMETHODIMP IInternetProtocolImpl::Read( |
+ /* [in, out] */ void *pv, |
+ /* [in] */ ULONG cb, |
+ /* [out] */ ULONG *pcbRead) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Read(pv, cb, pcbRead) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::Seek( |
- /* [in] */ LARGE_INTEGER dlibMove, |
- /* [in] */ DWORD dwOrigin, |
- /* [out] */ ULARGE_INTEGER *plibNewPosition) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->Seek(dlibMove, dwOrigin, plibNewPosition) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::Seek( |
+ /* [in] */ LARGE_INTEGER dlibMove, |
+ /* [in] */ DWORD dwOrigin, |
+ /* [out] */ ULARGE_INTEGER *plibNewPosition) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->Seek(dlibMove, dwOrigin, plibNewPosition) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::LockRequest( |
- /* [in] */ DWORD dwOptions) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->LockRequest(dwOptions) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::LockRequest( |
+ /* [in] */ DWORD dwOptions) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->LockRequest(dwOptions) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::UnlockRequest() |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- return m_spInternetProtocol ? |
- m_spInternetProtocol->UnlockRequest() : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::UnlockRequest() |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ return m_spInternetProtocol ? |
+ m_spInternetProtocol->UnlockRequest() : |
+ E_UNEXPECTED; |
+ } |
-// IInternetProtocolInfo |
-inline STDMETHODIMP IInternetProtocolImpl::ParseUrl( |
- /* [in] */ LPCWSTR pwzUrl, |
- /* [in] */ PARSEACTION ParseAction, |
- /* [in] */ DWORD dwParseFlags, |
- /* [out] */ LPWSTR pwzResult, |
- /* [in] */ DWORD cchResult, |
- /* [out] */ DWORD *pcchResult, |
- /* [in] */ DWORD dwReserved) |
-{ |
- ATLASSERT(m_spInternetProtocolInfo != 0); |
- return m_spInternetProtocolInfo ? |
- m_spInternetProtocolInfo->ParseUrl(pwzUrl, ParseAction, dwParseFlags, |
- pwzResult, cchResult, pcchResult, dwReserved) : |
- E_UNEXPECTED; |
-} |
+ // IInternetProtocolInfo |
+ inline STDMETHODIMP IInternetProtocolImpl::ParseUrl( |
+ /* [in] */ LPCWSTR pwzUrl, |
+ /* [in] */ PARSEACTION ParseAction, |
+ /* [in] */ DWORD dwParseFlags, |
+ /* [out] */ LPWSTR pwzResult, |
+ /* [in] */ DWORD cchResult, |
+ /* [out] */ DWORD *pcchResult, |
+ /* [in] */ DWORD dwReserved) |
+ { |
+ ATLASSERT(m_spInternetProtocolInfo != 0); |
+ return m_spInternetProtocolInfo ? |
+ m_spInternetProtocolInfo->ParseUrl(pwzUrl, ParseAction, dwParseFlags, |
+ pwzResult, cchResult, pcchResult, dwReserved) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::CombineUrl( |
- /* [in] */ LPCWSTR pwzBaseUrl, |
- /* [in] */ LPCWSTR pwzRelativeUrl, |
- /* [in] */ DWORD dwCombineFlags, |
- /* [out] */ LPWSTR pwzResult, |
- /* [in] */ DWORD cchResult, |
- /* [out] */ DWORD *pcchResult, |
- /* [in] */ DWORD dwReserved) |
-{ |
- ATLASSERT(m_spInternetProtocolInfo != 0); |
- return m_spInternetProtocolInfo ? |
- m_spInternetProtocolInfo->CombineUrl(pwzBaseUrl, pwzRelativeUrl, |
- dwCombineFlags, pwzResult, cchResult, pcchResult, dwReserved) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::CombineUrl( |
+ /* [in] */ LPCWSTR pwzBaseUrl, |
+ /* [in] */ LPCWSTR pwzRelativeUrl, |
+ /* [in] */ DWORD dwCombineFlags, |
+ /* [out] */ LPWSTR pwzResult, |
+ /* [in] */ DWORD cchResult, |
+ /* [out] */ DWORD *pcchResult, |
+ /* [in] */ DWORD dwReserved) |
+ { |
+ ATLASSERT(m_spInternetProtocolInfo != 0); |
+ return m_spInternetProtocolInfo ? |
+ m_spInternetProtocolInfo->CombineUrl(pwzBaseUrl, pwzRelativeUrl, |
+ dwCombineFlags, pwzResult, cchResult, pcchResult, dwReserved) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::CompareUrl( |
- /* [in] */ LPCWSTR pwzUrl1, |
- /* [in] */ LPCWSTR pwzUrl2, |
- /* [in] */ DWORD dwCompareFlags) |
-{ |
- ATLASSERT(m_spInternetProtocolInfo != 0); |
- return m_spInternetProtocolInfo ? |
- m_spInternetProtocolInfo->CompareUrl(pwzUrl1,pwzUrl2, dwCompareFlags) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::CompareUrl( |
+ /* [in] */ LPCWSTR pwzUrl1, |
+ /* [in] */ LPCWSTR pwzUrl2, |
+ /* [in] */ DWORD dwCompareFlags) |
+ { |
+ ATLASSERT(m_spInternetProtocolInfo != 0); |
+ return m_spInternetProtocolInfo ? |
+ m_spInternetProtocolInfo->CompareUrl(pwzUrl1,pwzUrl2, dwCompareFlags) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::QueryInfo( |
- /* [in] */ LPCWSTR pwzUrl, |
- /* [in] */ QUERYOPTION QueryOption, |
- /* [in] */ DWORD dwQueryFlags, |
- /* [in, out] */ LPVOID pBuffer, |
- /* [in] */ DWORD cbBuffer, |
- /* [in, out] */ DWORD *pcbBuf, |
- /* [in] */ DWORD dwReserved) |
-{ |
- ATLASSERT(m_spInternetProtocolInfo != 0); |
- return m_spInternetProtocolInfo ? |
- m_spInternetProtocolInfo->QueryInfo(pwzUrl, QueryOption, dwQueryFlags, |
- pBuffer, cbBuffer, pcbBuf, dwReserved) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::QueryInfo( |
+ /* [in] */ LPCWSTR pwzUrl, |
+ /* [in] */ QUERYOPTION QueryOption, |
+ /* [in] */ DWORD dwQueryFlags, |
+ /* [in, out] */ LPVOID pBuffer, |
+ /* [in] */ DWORD cbBuffer, |
+ /* [in, out] */ DWORD *pcbBuf, |
+ /* [in] */ DWORD dwReserved) |
+ { |
+ ATLASSERT(m_spInternetProtocolInfo != 0); |
+ return m_spInternetProtocolInfo ? |
+ m_spInternetProtocolInfo->QueryInfo(pwzUrl, QueryOption, dwQueryFlags, |
+ pBuffer, cbBuffer, pcbBuf, dwReserved) : |
+ E_UNEXPECTED; |
+ } |
-// IInternetPriority |
-inline STDMETHODIMP IInternetProtocolImpl::SetPriority( |
- /* [in] */ LONG nPriority) |
-{ |
- ATLASSERT(m_spInternetPriority != 0); |
- return m_spInternetPriority ? |
- m_spInternetPriority->SetPriority(nPriority) : |
- E_UNEXPECTED; |
-} |
+ // IInternetPriority |
+ inline STDMETHODIMP IInternetProtocolImpl::SetPriority( |
+ /* [in] */ LONG nPriority) |
+ { |
+ ATLASSERT(m_spInternetPriority != 0); |
+ return m_spInternetPriority ? |
+ m_spInternetPriority->SetPriority(nPriority) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::GetPriority( |
- /* [out] */ LONG *pnPriority) |
-{ |
- ATLASSERT(m_spInternetPriority != 0); |
- return m_spInternetPriority ? |
- m_spInternetPriority->GetPriority(pnPriority) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::GetPriority( |
+ /* [out] */ LONG *pnPriority) |
+ { |
+ ATLASSERT(m_spInternetPriority != 0); |
+ return m_spInternetPriority ? |
+ m_spInternetPriority->GetPriority(pnPriority) : |
+ E_UNEXPECTED; |
+ } |
-// IInternetThreadSwitch |
-inline STDMETHODIMP IInternetProtocolImpl::Prepare() |
-{ |
- ATLASSERT(m_spInternetThreadSwitch != 0); |
- return m_spInternetThreadSwitch ? |
- m_spInternetThreadSwitch->Prepare() : |
- E_UNEXPECTED; |
-} |
+ // IInternetThreadSwitch |
+ inline STDMETHODIMP IInternetProtocolImpl::Prepare() |
+ { |
+ ATLASSERT(m_spInternetThreadSwitch != 0); |
+ return m_spInternetThreadSwitch ? |
+ m_spInternetThreadSwitch->Prepare() : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolImpl::Continue() |
-{ |
- ATLASSERT(m_spInternetThreadSwitch != 0); |
- return m_spInternetThreadSwitch ? |
- m_spInternetThreadSwitch->Continue() : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolImpl::Continue() |
+ { |
+ ATLASSERT(m_spInternetThreadSwitch != 0); |
+ return m_spInternetThreadSwitch ? |
+ m_spInternetThreadSwitch->Continue() : |
+ E_UNEXPECTED; |
+ } |
-// IWinInetInfo |
-inline STDMETHODIMP IInternetProtocolImpl::QueryOption( |
- /* [in] */ DWORD dwOption, |
- /* [in, out] */ LPVOID pBuffer, |
- /* [in, out] */ DWORD *pcbBuf) |
-{ |
- ATLASSERT(m_spWinInetInfo != 0); |
- return m_spWinInetInfo ? |
- m_spWinInetInfo->QueryOption(dwOption, pBuffer, pcbBuf) : |
- E_UNEXPECTED; |
-} |
+ // IWinInetInfo |
+ inline STDMETHODIMP IInternetProtocolImpl::QueryOption( |
+ /* [in] */ DWORD dwOption, |
+ /* [in, out] */ LPVOID pBuffer, |
+ /* [in, out] */ DWORD *pcbBuf) |
+ { |
+ ATLASSERT(m_spWinInetInfo != 0); |
+ return m_spWinInetInfo ? |
+ m_spWinInetInfo->QueryOption(dwOption, pBuffer, pcbBuf) : |
+ E_UNEXPECTED; |
+ } |
-// IWinInetHttpInfo |
-inline STDMETHODIMP IInternetProtocolImpl::QueryInfo( |
- /* [in] */ DWORD dwOption, |
- /* [in, out] */ LPVOID pBuffer, |
- /* [in, out] */ DWORD *pcbBuf, |
- /* [in, out] */ DWORD *pdwFlags, |
- /* [in, out] */ DWORD *pdwReserved) |
-{ |
- ATLASSERT(m_spWinInetHttpInfo != 0); |
- return m_spWinInetHttpInfo ? |
- m_spWinInetHttpInfo->QueryInfo(dwOption, pBuffer, pcbBuf, pdwFlags, |
- pdwReserved) : |
- E_UNEXPECTED; |
-} |
+ // IWinInetHttpInfo |
+ inline STDMETHODIMP IInternetProtocolImpl::QueryInfo( |
+ /* [in] */ DWORD dwOption, |
+ /* [in, out] */ LPVOID pBuffer, |
+ /* [in, out] */ DWORD *pcbBuf, |
+ /* [in, out] */ DWORD *pdwFlags, |
+ /* [in, out] */ DWORD *pdwReserved) |
+ { |
+ ATLASSERT(m_spWinInetHttpInfo != 0); |
+ return m_spWinInetHttpInfo ? |
+ m_spWinInetHttpInfo->QueryInfo(dwOption, pBuffer, pcbBuf, pdwFlags, |
+ pdwReserved) : |
+ E_UNEXPECTED; |
+ } |
-// ===== IInternetProtocolSinkImpl ===== |
+ // ===== IInternetProtocolSinkImpl ===== |
-inline HRESULT IInternetProtocolSinkImpl::OnStart(LPCWSTR szUrl, |
- IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, |
- DWORD grfPI, DWORD dwReserved, IInternetProtocol* pTargetProtocol) |
-{ |
- ATLASSERT(pOIProtSink != 0); |
- ATLASSERT(pOIBindInfo != 0); |
- ATLASSERT(pTargetProtocol != 0); |
- if (!pOIProtSink || !pOIBindInfo || !pTargetProtocol) |
- { |
- return E_POINTER; |
- } |
+ inline HRESULT IInternetProtocolSinkImpl::OnStart(LPCWSTR szUrl, |
+ IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, |
+ DWORD grfPI, DWORD dwReserved, IInternetProtocol* pTargetProtocol) |
+ { |
+ ATLASSERT(pOIProtSink != 0); |
+ ATLASSERT(pOIBindInfo != 0); |
+ ATLASSERT(pTargetProtocol != 0); |
+ if (!pOIProtSink || !pOIBindInfo || !pTargetProtocol) |
+ { |
+ return E_POINTER; |
+ } |
- // This method should only be called once, and be the only source |
- // of target interface pointers. |
- ATLASSERT(m_spInternetProtocolSink == 0); |
- ATLASSERT(m_spInternetBindInfo == 0); |
- ATLASSERT(m_spTargetProtocol == 0); |
- if (m_spInternetProtocolSink || m_spInternetBindInfo || m_spTargetProtocol) |
- { |
- return E_UNEXPECTED; |
- } |
+ // This method should only be called once, and be the only source |
+ // of target interface pointers. |
+ ATLASSERT(m_spInternetProtocolSink == 0); |
+ ATLASSERT(m_spInternetBindInfo == 0); |
+ ATLASSERT(m_spTargetProtocol == 0); |
+ if (m_spInternetProtocolSink || m_spInternetBindInfo || m_spTargetProtocol) |
+ { |
+ return E_UNEXPECTED; |
+ } |
- ATLASSERT(m_spServiceProvider == 0); |
+ ATLASSERT(m_spServiceProvider == 0); |
- m_spInternetProtocolSink = pOIProtSink; |
- m_spInternetBindInfo = pOIBindInfo; |
- m_spTargetProtocol = pTargetProtocol; |
- return S_OK; |
-} |
+ m_spInternetProtocolSink = pOIProtSink; |
+ m_spInternetBindInfo = pOIBindInfo; |
+ m_spTargetProtocol = pTargetProtocol; |
+ return S_OK; |
+ } |
-inline void IInternetProtocolSinkImpl::ReleaseAll() |
-{ |
- m_spInternetProtocolSink.Release(); |
- m_spServiceProvider.Release(); |
- m_spInternetBindInfo.Release(); |
- m_spTargetProtocol.Release(); |
-} |
+ inline void IInternetProtocolSinkImpl::ReleaseAll() |
+ { |
+ m_spInternetProtocolSink.Release(); |
+ m_spServiceProvider.Release(); |
+ m_spInternetBindInfo.Release(); |
+ m_spTargetProtocol.Release(); |
+ } |
-inline IServiceProvider* IInternetProtocolSinkImpl::GetClientServiceProvider() |
-{ |
- return m_spServiceProvider; |
-} |
+ inline IServiceProvider* IInternetProtocolSinkImpl::GetClientServiceProvider() |
+ { |
+ return m_spServiceProvider; |
+ } |
-inline HRESULT IInternetProtocolSinkImpl::QueryServiceFromClient( |
- REFGUID guidService, REFIID riid, void** ppvObject) |
-{ |
- HRESULT hr = S_OK; |
- CComPtr<IServiceProvider> spClientProvider = m_spServiceProvider; |
- if (!spClientProvider) |
- { |
- hr = m_spInternetProtocolSink->QueryInterface(&spClientProvider); |
- ATLASSERT(SUCCEEDED(hr) && spClientProvider != 0); |
- } |
- if (SUCCEEDED(hr)) |
- { |
- hr = spClientProvider->QueryService(guidService, riid, ppvObject); |
- } |
- return hr; |
-} |
+ inline HRESULT IInternetProtocolSinkImpl::QueryServiceFromClient( |
+ REFGUID guidService, REFIID riid, void** ppvObject) |
+ { |
+ HRESULT hr = S_OK; |
+ CComPtr<IServiceProvider> spClientProvider = m_spServiceProvider; |
+ if (!spClientProvider) |
+ { |
+ hr = m_spInternetProtocolSink->QueryInterface(&spClientProvider); |
+ ATLASSERT(SUCCEEDED(hr) && spClientProvider != 0); |
+ } |
+ if (SUCCEEDED(hr)) |
+ { |
+ hr = spClientProvider->QueryService(guidService, riid, ppvObject); |
+ } |
+ return hr; |
+ } |
-// IInternetProtocolSink |
-inline STDMETHODIMP IInternetProtocolSinkImpl::Switch( |
- /* [in] */ PROTOCOLDATA *pProtocolData) |
-{ |
- ATLASSERT(m_spInternetProtocolSink != 0); |
- return m_spInternetProtocolSink ? |
- m_spInternetProtocolSink->Switch(pProtocolData) : |
- E_UNEXPECTED; |
-} |
+ // IInternetProtocolSink |
+ inline STDMETHODIMP IInternetProtocolSinkImpl::Switch( |
+ /* [in] */ PROTOCOLDATA *pProtocolData) |
+ { |
+ ATLASSERT(m_spInternetProtocolSink != 0); |
+ return m_spInternetProtocolSink ? |
+ m_spInternetProtocolSink->Switch(pProtocolData) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolSinkImpl::ReportProgress( |
- /* [in] */ ULONG ulStatusCode, |
- /* [in] */ LPCWSTR szStatusText) |
-{ |
- ATLASSERT(m_spInternetProtocolSink != 0); |
- return m_spInternetProtocolSink ? |
- m_spInternetProtocolSink->ReportProgress(ulStatusCode, szStatusText) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolSinkImpl::ReportProgress( |
+ /* [in] */ ULONG ulStatusCode, |
+ /* [in] */ LPCWSTR szStatusText) |
+ { |
+ ATLASSERT(m_spInternetProtocolSink != 0); |
+ return m_spInternetProtocolSink ? |
+ m_spInternetProtocolSink->ReportProgress(ulStatusCode, szStatusText) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolSinkImpl::ReportData( |
- /* [in] */ DWORD grfBSCF, |
- /* [in] */ ULONG ulProgress, |
- /* [in] */ ULONG ulProgressMax) |
-{ |
- ATLASSERT(m_spInternetProtocolSink != 0); |
- return m_spInternetProtocolSink ? |
- m_spInternetProtocolSink->ReportData(grfBSCF, ulProgress, |
- ulProgressMax) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolSinkImpl::ReportData( |
+ /* [in] */ DWORD grfBSCF, |
+ /* [in] */ ULONG ulProgress, |
+ /* [in] */ ULONG ulProgressMax) |
+ { |
+ ATLASSERT(m_spInternetProtocolSink != 0); |
+ return m_spInternetProtocolSink ? |
+ m_spInternetProtocolSink->ReportData(grfBSCF, ulProgress, |
+ ulProgressMax) : |
+ E_UNEXPECTED; |
+ } |
-inline STDMETHODIMP IInternetProtocolSinkImpl::ReportResult( |
- /* [in] */ HRESULT hrResult, |
- /* [in] */ DWORD dwError, |
- /* [in] */ LPCWSTR szResult) |
-{ |
-// ATLASSERT(m_spInternetProtocolSink != 0); |
- return m_spInternetProtocolSink ? |
- m_spInternetProtocolSink->ReportResult(hrResult, dwError, szResult) : |
- E_UNEXPECTED; |
-} |
+ inline STDMETHODIMP IInternetProtocolSinkImpl::ReportResult( |
+ /* [in] */ HRESULT hrResult, |
+ /* [in] */ DWORD dwError, |
+ /* [in] */ LPCWSTR szResult) |
+ { |
+ ATLASSERT(m_spInternetProtocolSink != 0); |
-// IServiceProvider |
-inline STDMETHODIMP IInternetProtocolSinkImpl::QueryService( |
- /* [in] */ REFGUID guidService, |
- /* [in] */ REFIID riid, |
- /* [out] */ void** ppvObject) |
-{ |
- ATLASSERT(m_spServiceProvider != 0); |
- return m_spServiceProvider ? |
- m_spServiceProvider->QueryService(guidService, riid, ppvObject) : |
- E_UNEXPECTED; |
-} |
Oleksandr
2013/03/05 13:44:10
The actual fix is below. All other changes are jus
Wladimir Palant
2013/03/05 15:21:48
In general, it's a good idea to separate style cha
|
+ // On some websites there are broken requests, that keep on redirecting without a stop. |
+ // For example: http://telegrafua.com/ has a request to: http://www.ool.ua/webroot/delivery/images/ool-button.gif |
+ // which causes IE tab to crash in urlmon.dll. That request doesn't ever resolve, since it's constantly responding |
+ // with HTTP 302. |
-// IInternetBindInfo |
-inline STDMETHODIMP IInternetProtocolSinkImpl::GetBindInfo( |
- /* [out] */ DWORD *grfBINDF, |
- /* [in, out] */ BINDINFO *pbindinfo) |
-{ |
- ATLASSERT(m_spInternetBindInfo != 0); |
- return m_spInternetBindInfo ? |
- m_spInternetBindInfo->GetBindInfo(grfBINDF, pbindinfo) : |
- E_UNEXPECTED; |
-} |
+ // It seems like WinInet (urlmon.dll) doesn't expect anything like that to happen, and relies on APP to make sure it doesn't. |
+ // So here we detect if there has been too many redirects (ie INET_E_REDIRECT_FAILED) and we just notify WinInet |
+ // that there has been a generic problem, not redirect specific error. |
-inline STDMETHODIMP IInternetProtocolSinkImpl::GetBindString( |
- /* [in] */ ULONG ulStringType, |
- /* [in, out] */ LPOLESTR *ppwzStr, |
- /* [in] */ ULONG cEl, |
- /* [in, out] */ ULONG *pcElFetched) |
-{ |
- ATLASSERT(m_spInternetBindInfo != 0); |
- return m_spInternetBindInfo ? |
- m_spInternetBindInfo->GetBindString(ulStringType, ppwzStr, cEl, |
- pcElFetched) : |
- E_UNEXPECTED; |
-} |
+ if (hrResult == INET_E_REDIRECT_FAILED) |
+ hrResult = S_FALSE; |
Wladimir Palant
2013/03/05 15:21:48
Is that issue really specific to INET_E_REDIRECT_F
Oleksandr
2013/03/05 18:03:08
I have not seen anything like this for any other e
|
-// ===== CInternetProtocolSinkWithSP ===== |
+ return m_spInternetProtocolSink ? |
+ m_spInternetProtocolSink->ReportResult(hrResult, dwError, szResult) : |
+ E_UNEXPECTED; |
+ } |
-template <class T, class ThreadModel> |
-inline HRESULT CInternetProtocolSinkWithSP<T, ThreadModel>::OnStart( |
- LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, |
- IInternetBindInfo *pOIBindInfo, DWORD grfPI, DWORD dwReserved, |
- IInternetProtocol* pTargetProtocol) |
-{ |
- ATLASSERT(m_spServiceProvider == 0); |
- if (m_spServiceProvider) |
- { |
- return E_UNEXPECTED; |
- } |
- HRESULT hr = BaseClass::OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, |
- dwReserved, pTargetProtocol); |
- if (SUCCEEDED(hr)) |
- { |
- pOIProtSink->QueryInterface(&m_spServiceProvider); |
- } |
- return hr; |
-} |
+ // IServiceProvider |
+ inline STDMETHODIMP IInternetProtocolSinkImpl::QueryService( |
+ /* [in] */ REFGUID guidService, |
+ /* [in] */ REFIID riid, |
+ /* [out] */ void** ppvObject) |
+ { |
+ ATLASSERT(m_spServiceProvider != 0); |
+ return m_spServiceProvider ? |
+ m_spServiceProvider->QueryService(guidService, riid, ppvObject) : |
+ E_UNEXPECTED; |
+ } |
-template <class T, class ThreadModel> |
-inline HRESULT CInternetProtocolSinkWithSP<T, ThreadModel>:: |
- _InternalQueryService(REFGUID guidService, REFIID riid, void** ppvObject) |
-{ |
- return E_NOINTERFACE; |
-} |
+ // IInternetBindInfo |
+ inline STDMETHODIMP IInternetProtocolSinkImpl::GetBindInfo( |
+ /* [out] */ DWORD *grfBINDF, |
+ /* [in, out] */ BINDINFO *pbindinfo) |
+ { |
+ ATLASSERT(m_spInternetBindInfo != 0); |
+ return m_spInternetBindInfo ? |
+ m_spInternetBindInfo->GetBindInfo(grfBINDF, pbindinfo) : |
+ E_UNEXPECTED; |
+ } |
-template <class T, class ThreadModel> |
-inline STDMETHODIMP CInternetProtocolSinkWithSP<T, ThreadModel>::QueryService( |
- REFGUID guidService, REFIID riid, void** ppv) |
-{ |
- T* pT = static_cast<T*>(this); |
- HRESULT hr = pT->_InternalQueryService(guidService, riid, ppv); |
- if (FAILED(hr) && m_spServiceProvider) |
- { |
- hr = m_spServiceProvider->QueryService(guidService, riid, ppv); |
- } |
- return hr; |
-} |
+ inline STDMETHODIMP IInternetProtocolSinkImpl::GetBindString( |
+ /* [in] */ ULONG ulStringType, |
+ /* [in, out] */ LPOLESTR *ppwzStr, |
+ /* [in] */ ULONG cEl, |
+ /* [in, out] */ ULONG *pcElFetched) |
+ { |
+ ATLASSERT(m_spInternetBindInfo != 0); |
+ return m_spInternetBindInfo ? |
+ m_spInternetBindInfo->GetBindString(ulStringType, ppwzStr, cEl, |
+ pcElFetched) : |
+ E_UNEXPECTED; |
+ } |
-// ===== NoSinkStartPolicy ===== |
+ // ===== CInternetProtocolSinkWithSP ===== |
-inline HRESULT NoSinkStartPolicy::OnStart(LPCWSTR szUrl, |
- IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, |
- DWORD grfPI, DWORD dwReserved, IInternetProtocol* pTargetProtocol) |
-{ |
-// ATLASSERT(pTargetProtocol != 0); |
- return pTargetProtocol->Start(szUrl, pOIProtSink, pOIBindInfo, |
- grfPI, dwReserved); |
-} |
+ template <class T, class ThreadModel> |
+ inline HRESULT CInternetProtocolSinkWithSP<T, ThreadModel>::OnStart( |
+ LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, |
+ IInternetBindInfo *pOIBindInfo, DWORD grfPI, DWORD dwReserved, |
+ IInternetProtocol* pTargetProtocol) |
+ { |
+ ATLASSERT(m_spServiceProvider == 0); |
+ if (m_spServiceProvider) |
+ { |
+ return E_UNEXPECTED; |
+ } |
+ HRESULT hr = BaseClass::OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, |
+ dwReserved, pTargetProtocol); |
+ if (SUCCEEDED(hr)) |
+ { |
+ pOIProtSink->QueryInterface(&m_spServiceProvider); |
+ } |
+ return hr; |
+ } |
-// ===== CComObjectSharedRef ===== |
+ template <class T, class ThreadModel> |
+ inline HRESULT CInternetProtocolSinkWithSP<T, ThreadModel>:: |
+ _InternalQueryService(REFGUID guidService, REFIID riid, void** ppvObject) |
+ { |
+ return E_NOINTERFACE; |
+ } |
-template<class Base> |
-inline CComObjectSharedRef<Base>::CComObjectSharedRef(IUnknown* punkOuter) : |
- m_punkOuter(punkOuter) |
-{ |
- ATLASSERT(m_punkOuter != 0); |
-} |
+ template <class T, class ThreadModel> |
+ inline STDMETHODIMP CInternetProtocolSinkWithSP<T, ThreadModel>::QueryService( |
+ REFGUID guidService, REFIID riid, void** ppv) |
+ { |
+ T* pT = static_cast<T*>(this); |
+ HRESULT hr = pT->_InternalQueryService(guidService, riid, ppv); |
+ if (FAILED(hr) && m_spServiceProvider) |
+ { |
+ hr = m_spServiceProvider->QueryService(guidService, riid, ppv); |
+ } |
+ return hr; |
+ } |
-template<class Base> |
-inline STDMETHODIMP CComObjectSharedRef<Base>::QueryInterface(REFIID iid, |
- void** ppvObject) |
-{ |
- return _InternalQueryInterface(iid, ppvObject); |
-} |
+ // ===== NoSinkStartPolicy ===== |
-template<class Base> |
-inline STDMETHODIMP_(ULONG) CComObjectSharedRef<Base>::AddRef() |
-{ |
- if (m_punkOuter) |
- { |
- m_punkOuter->AddRef(); |
- } |
- return InternalAddRef(); |
-} |
+ inline HRESULT NoSinkStartPolicy::OnStart(LPCWSTR szUrl, |
+ IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, |
+ DWORD grfPI, DWORD dwReserved, IInternetProtocol* pTargetProtocol) |
+ { |
+ ATLASSERT(pTargetProtocol != 0); |
+ return pTargetProtocol->Start(szUrl, pOIProtSink, pOIBindInfo, |
+ grfPI, dwReserved); |
+ } |
-template<class Base> |
-inline STDMETHODIMP_(ULONG) CComObjectSharedRef<Base>::Release() |
-{ |
- ULONG l = InternalRelease(); |
- if (!l) |
- { |
- ReleaseAll(); |
- } |
- if (m_punkOuter) |
- { |
- m_punkOuter->Release(); |
- } |
- return l; |
-} |
+ // ===== CComObjectSharedRef ===== |
-// ===== CustomSinkStartPolicy ===== |
+ template<class Base> |
+ inline CComObjectSharedRef<Base>::CComObjectSharedRef(IUnknown* punkOuter) : |
+ m_punkOuter(punkOuter) |
+ { |
+ ATLASSERT(m_punkOuter != 0); |
+ } |
-template <class Sink> |
-inline CustomSinkStartPolicy<Sink>:: |
- CustomSinkStartPolicy(IUnknown* punkOuter) : |
- m_internetSink(punkOuter) |
-{ |
-} |
+ template<class Base> |
+ inline STDMETHODIMP CComObjectSharedRef<Base>::QueryInterface(REFIID iid, |
+ void** ppvObject) |
+ { |
+ HRESULT hr = _InternalQueryInterface(iid, ppvObject); |
-template <class Sink> |
-inline HRESULT CustomSinkStartPolicy<Sink>::OnStart(LPCWSTR szUrl, |
- IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, |
- DWORD grfPI, DWORD dwReserved, IInternetProtocol* pTargetProtocol) |
-{ |
- ATLASSERT(pTargetProtocol); |
- HRESULT hr = m_internetSink.OnStart(szUrl, pOIProtSink, pOIBindInfo, |
- grfPI, dwReserved, pTargetProtocol); |
+ return hr; |
- //We return INET_E_REDIRECT_FAILED in case we have iframe blocking. |
- if (hr == INET_E_REDIRECT_FAILED) |
- { |
- return S_OK; |
- } |
- CComPtr<IInternetProtocolSink> spSink; |
- CComPtr<IInternetBindInfo> spBindInfo; |
- if (SUCCEEDED(hr)) |
- { |
- hr = m_internetSink.QueryInterface(&spSink); |
- ATLASSERT(SUCCEEDED(hr) && spSink != 0); |
- } |
- if (SUCCEEDED(hr)) |
- { |
- hr = m_internetSink.QueryInterface(&spBindInfo); |
- ATLASSERT(SUCCEEDED(hr) && spBindInfo != 0); |
- } |
- if (SUCCEEDED(hr)) |
- { |
- hr = pTargetProtocol->Start(szUrl, spSink, spBindInfo, grfPI, |
- dwReserved); |
- } |
- else |
- { |
+ } |
- } |
- return hr; |
-} |
-template <class Sink> |
-inline HRESULT CustomSinkStartPolicy<Sink>::Read(/* [in, out] */ void *pv,/* [in] */ ULONG cb,/* [out] */ ULONG *pcbRead) |
-{ |
- return m_internetSink.Read(pv, cb, pcbRead); |
-} |
+ template<class Base> |
+ inline STDMETHODIMP_(ULONG) CComObjectSharedRef<Base>::AddRef() |
+ { |
+ if (m_punkOuter) |
+ { |
+ m_punkOuter->AddRef(); |
+ } |
+ return InternalAddRef(); |
+ } |
-// ===== CInternetProtocol ===== |
+ template<class Base> |
+ inline STDMETHODIMP_(ULONG) CComObjectSharedRef<Base>::Release() |
+ { |
+ ULONG l = InternalRelease(); |
+ if (!l) |
+ { |
+ ReleaseAll(); |
+ } |
+ if (m_punkOuter) |
+ { |
+ m_punkOuter->Release(); |
+ } |
+ return l; |
+ } |
-template <class StartPolicy, class ThreadModel> |
-inline CInternetProtocol<StartPolicy, ThreadModel>::CInternetProtocol() : |
- StartPolicy(GetUnknown()) |
-{ |
-} |
+ // ===== CustomSinkStartPolicy ===== |
-// IInternetProtocolRoot |
-template <class StartPolicy, class ThreadModel> |
-inline STDMETHODIMP CInternetProtocol<StartPolicy, ThreadModel>::Start( |
- LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, |
- IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved) |
-{ |
- ATLASSERT(m_spInternetProtocol != 0); |
- if (!m_spInternetProtocol) |
- { |
- return E_UNEXPECTED; |
- } |
+ template <class Sink> |
+ inline CustomSinkStartPolicy<Sink>:: |
+ CustomSinkStartPolicy(IUnknown* punkOuter) : |
+ m_internetSink(punkOuter) |
+ { |
+ } |
- return StartPolicy::OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, |
- dwReserved, m_spInternetProtocol); |
-} |
-template <class StartPolicy, class ThreadModel> |
-inline STDMETHODIMP CInternetProtocol<StartPolicy, ThreadModel>::Read( |
- /* [in, out] */ void *pv, |
- /* [in] */ ULONG cb, |
- /* [out] */ ULONG *pcbRead) |
-{ |
- return StartPolicy::Read(pv, cb, pcbRead); |
-} |
+ template <class Sink> |
+ inline HRESULT CustomSinkStartPolicy<Sink>::OnStart(LPCWSTR szUrl, |
+ IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, |
+ DWORD grfPI, DWORD dwReserved, IInternetProtocol* pTargetProtocol) |
+ { |
+ ATLASSERT(pTargetProtocol); |
+ HRESULT hr = m_internetSink.OnStart(szUrl, pOIProtSink, pOIBindInfo, |
+ grfPI, dwReserved, pTargetProtocol); |
+ |
+ //We return INET_E_REDIRECT_FAILED in case we have iframe blocking. |
+ if (hr == INET_E_REDIRECT_FAILED) |
+ { |
+ return hr; |
+ } |
+ CComPtr<IInternetProtocolSink> spSink; |
+ CComPtr<IInternetBindInfo> spBindInfo; |
+ if (SUCCEEDED(hr)) |
+ { |
+ hr = m_internetSink.QueryInterface(&spSink); |
+ ATLASSERT(SUCCEEDED(hr) && spSink != 0); |
+ } |
+ if (SUCCEEDED(hr)) |
+ { |
+ hr = m_internetSink.QueryInterface(&spBindInfo); |
+ ATLASSERT(SUCCEEDED(hr) && spBindInfo != 0); |
+ } |
+ if (SUCCEEDED(hr)) |
+ { |
+ hr = pTargetProtocol->Start(szUrl, spSink, spBindInfo, grfPI, |
+ dwReserved); |
+ } |
+ else |
+ { |
+ |
+ } |
+ return hr; |
+ } |
+ template <class Sink> |
+ inline HRESULT CustomSinkStartPolicy<Sink>::Read(/* [in, out] */ void *pv,/* [in] */ ULONG cb,/* [out] */ ULONG *pcbRead) |
+ { |
+ return m_internetSink.Read(pv, cb, pcbRead); |
+ } |
+ |
+ // ===== CInternetProtocol ===== |
+ |
+ template <class StartPolicy, class ThreadModel> |
+ inline CInternetProtocol<StartPolicy, ThreadModel>::CInternetProtocol() : |
+ StartPolicy(GetUnknown()) |
+ { |
+ } |
+ |
+ // IInternetProtocolRoot |
+ template <class StartPolicy, class ThreadModel> |
+ inline STDMETHODIMP CInternetProtocol<StartPolicy, ThreadModel>::Start( |
+ LPCWSTR szUrl, IInternetProtocolSink *pOIProtSink, |
+ IInternetBindInfo *pOIBindInfo, DWORD grfPI, HANDLE_PTR dwReserved) |
+ { |
+ ATLASSERT(m_spInternetProtocol != 0); |
+ if (!m_spInternetProtocol) |
+ { |
+ return E_UNEXPECTED; |
+ } |
+ |
+ return StartPolicy::OnStart(szUrl, pOIProtSink, pOIBindInfo, grfPI, |
+ dwReserved, m_spInternetProtocol); |
+ } |
+ template <class StartPolicy, class ThreadModel> |
+ inline STDMETHODIMP CInternetProtocol<StartPolicy, ThreadModel>::Read( |
+ /* [in, out] */ void *pv, |
+ /* [in] */ ULONG cb, |
+ /* [out] */ ULONG *pcbRead) |
+ { |
+ return StartPolicy::Read(pv, cb, pcbRead); |
+ } |
} // end namespace PassthroughAPP |
#endif // PASSTHROUGHAPP_PROTOCOLIMPL_INL |