};
-class VirtualProtocol : public IInternetProtocol
+class VirtualProtocol : public IInternetProtocol, public IInternetProtocolInfo
{
protected:
ULONG m_refCount;
ULARGE_INTEGER* WXUNUSED(plibNewPosition))
{ return E_FAIL; }
HRESULT STDMETHODCALLTYPE UnlockRequest() { return S_OK; }
+
+ //IInternetProtocolInfo
+ HRESULT STDMETHODCALLTYPE CombineUrl(LPCWSTR pwzBaseUrl,
+ LPCWSTR pwzRelativeUrl,
+ DWORD dwCombineFlags,
+ LPWSTR pwzResult, DWORD cchResult,
+ DWORD *pcchResult, DWORD dwReserved);
+ HRESULT STDMETHODCALLTYPE CompareUrl(LPCWSTR pwzUrl1, LPCWSTR pwzUrl2,
+ DWORD dwCompareFlags)
+ { return INET_E_DEFAULT_ACTION; }
+ HRESULT STDMETHODCALLTYPE ParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction,
+ DWORD dwParseFlags, LPWSTR pwzResult,
+ DWORD cchResult, DWORD *pcchResult,
+ DWORD dwReserved);
+ HRESULT STDMETHODCALLTYPE QueryInfo(LPCWSTR pwzUrl,
+ QUERYOPTION OueryOption,
+ DWORD dwQueryFlags, LPVOID pBuffer,
+ DWORD cbBuffer, DWORD *pcbBuf,
+ DWORD dwReserved);
};
class ClassFactory : public IClassFactory
IInternetSession* session;
if(CoInternetGetSession(0, &session, 0) != S_OK)
return false;
- HRESULT hr = session->RegisterNameSpace(cf, CLSID_FileProtocol, L"file", 0, NULL, 0);
+ HRESULT hr = session->RegisterNameSpace(cf, CLSID_FileProtocol, L"test", 0, NULL, 0);
if(FAILED(hr))
return false;
HRESULT VirtualProtocol::QueryInterface(REFIID riid, void **ppvObject)
{
- if ((riid == IID_IUnknown) || (riid == IID_IInternetProtocol)
- || (riid == IID_IInternetProtocolRoot))
+ if(riid == IID_IUnknown || riid == IID_IInternetProtocol
+ || riid == IID_IInternetProtocolRoot)
{
- *ppvObject = this;
+ *ppvObject = (IInternetProtocol*)this;
+ AddRef();
+ return S_OK;
+ }
+ else if(riid == IID_IInternetProtocolInfo)
+ {
+ *ppvObject = (IInternetProtocolInfo*)this;
AddRef();
return S_OK;
}
wxString path = wxString(szUrl).BeforeFirst(':') + ":" +
EscapeFileNameCharsInURL(wxString(szUrl).AfterFirst(':'));
path.Replace("///", "/");
+ path.Replace("test", "file");
m_file = m_fileSys->OpenFile(path);
if(!m_file)
//We return the stream length for current and total size as we can always
//read the whole file from the stream
+ wxFileOffset length = m_file->GetStream()->GetLength();
m_protocolSink->ReportData(BSCF_FIRSTDATANOTIFICATION |
BSCF_DATAFULLYAVAILABLE |
BSCF_LASTDATANOTIFICATION,
- m_file->GetStream()->GetLength(),
- m_file->GetStream()->GetLength());
+ length, length);
return S_OK;
}
}
}
+HRESULT VirtualProtocol::CombineUrl(LPCWSTR pwzBaseUrl, LPCWSTR pwzRelativeUrl,
+ DWORD dwCombineFlags, LPWSTR pwzResult,
+ DWORD cchResult, DWORD *pcchResult,
+ DWORD dwReserved)
+{
+ return INET_E_DEFAULT_ACTION;
+}
+
+HRESULT VirtualProtocol::ParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction,
+ DWORD dwParseFlags, LPWSTR pwzResult,
+ DWORD cchResult, DWORD *pcchResult,
+ DWORD dwReserved)
+{
+ return INET_E_DEFAULT_ACTION;
+}
+
+HRESULT VirtualProtocol::QueryInfo(LPCWSTR pwzUrl, QUERYOPTION OueryOption,
+ DWORD dwQueryFlags, LPVOID pBuffer,
+ DWORD cbBuffer, DWORD *pcbBuf,
+ DWORD dwReserved)
+{
+ return INET_E_DEFAULT_ACTION;
+}
+
HRESULT ClassFactory::CreateInstance(IUnknown* pUnkOuter, REFIID riid,
void ** ppvObject)
{