Hi I am trying to run UrlDownloadToFile()
CBSCallbackImplPX callback;
::URLDownloadToFileA(NULL, "http://www.codeproject.com/KB/system/keyboard.aspx" ,"c:\\test\\a.html",NULL,&callback);
Where
class CBSCallbackImplPX : public IBindStatusCallback
It is working fine even in proxy.as it uses IE's credential.
But today when I am trying the same code under password protected proxy it is returning
E_ACCESSDENIED
.
I studied this link
http://www.ureader.com/msg/1510234.aspx[
^]
and came to know about
IAuthenticate
Interface.
but not able to implement.
below is my call back code
class CBSCallbackImplPX : public IBindStatusCallback
{
public:
CBSCallbackImplPX();
~CBSCallbackImplPX();
CString m_csData;
DWORD m_dwSize;
int nTitmeOut;
STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
STDMETHOD(OnStartBinding)(DWORD, IBinding *);
STDMETHOD(GetPriority)(LONG *);
STDMETHOD(OnLowResource)(DWORD);
STDMETHOD(OnProgress)(ULONG ulProgress,
ULONG ulProgressMax,
ULONG ulStatusCode,
LPCWSTR szStatusText);
STDMETHOD(OnStopBinding)(HRESULT, LPCWSTR);
STDMETHOD(GetBindInfo)(DWORD *, BINDINFO *);
STDMETHOD(OnDataAvailable)(DWORD, DWORD, FORMATETC *, STGMEDIUM *);
STDMETHOD(OnObjectAvailable)(REFIID, IUnknown *);
protected:
ULONG m_ulObjRefCount;
clock_t m_startDownload,m_endDownload;
};
#include "stdafx.h"
#include "BSCallbackImplPX.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CBSCallbackImplPX::CBSCallbackImplPX()
{
nTitmeOut=10;
m_ulObjRefCount = 1;
m_csData="";
m_dwSize=0;
m_startDownload,m_endDownload=0;
}
CBSCallbackImplPX::~CBSCallbackImplPX()
{
}
STDMETHODIMP CBSCallbackImplPX::QueryInterface(REFIID riid, void **ppvObject)
{
*ppvObject = NULL;
if (::IsEqualIID(riid, __uuidof(IUnknown)))
{
*ppvObject = this;
}
else if (::IsEqualIID(riid, __uuidof(IAuthenticate)))
{
AfxMessageBox("found something");
}
if (::IsEqualIID(riid, __uuidof(IUnknown)))
{}
if (*ppvObject)
{
this->AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
STDMETHODIMP_(ULONG) CBSCallbackImplPX::AddRef()
{
return ++m_ulObjRefCount;
}
STDMETHODIMP_(ULONG) CBSCallbackImplPX::Release()
{
return --m_ulObjRefCount;
}
STDMETHODIMP CBSCallbackImplPX::OnStartBinding(DWORD d, IBinding *ib)
{
m_startDownload=clock();
return S_OK;
}
STDMETHODIMP CBSCallbackImplPX::GetPriority(LONG *)
{
return E_NOTIMPL;
}
STDMETHODIMP CBSCallbackImplPX::OnLowResource(DWORD)
{
return S_OK;
}
STDMETHODIMP CBSCallbackImplPX::OnProgress(ULONG ulProgress,
ULONG ulProgressMax,
ULONG ulStatusCode,
LPCWSTR szStatusText)
{
m_endDownload=clock();
int nTimeTakenForThisDownload=0;
nTimeTakenForThisDownload=((int)( m_endDownload - m_startDownload)/CLOCKS_PER_SEC) ;
if(nTimeTakenForThisDownload>=nTitmeOut)
{
return E_ABORT;
}
return S_OK;
}
STDMETHODIMP CBSCallbackImplPX::OnStopBinding(HRESULT, LPCWSTR)
{
return S_OK;
}
STDMETHODIMP CBSCallbackImplPX::GetBindInfo(DWORD *d, BINDINFO * b)
{
return S_OK;
}
STDMETHODIMP CBSCallbackImplPX::OnDataAvailable(DWORD dww, DWORD dwSize,
FORMATETC *fww, STGMEDIUM *stgmed )
{
if ( stgmed ) {
if ( stgmed->pstm ) {
ULONG bytesRead = 0;
dwSize=dwSize-m_dwSize;
BYTE *data = new BYTE[ dwSize + 1 ];
HRESULT hRes = stgmed->pstm->Read( data, dwSize, &bytesRead );
data[dwSize] = '\0';
m_dwSize+=bytesRead;
m_csData +=(char *)data;
delete data;
data=NULL;
return hRes;
}
}
return S_OK;
}
STDMETHODIMP CBSCallbackImplPX::OnObjectAvailable(REFIID, IUnknown *)
{
return S_OK;
}
please help :(