HRESULT CRssReader::ReadSync(LPCWSTR pwszUrl)
{
    HRESULT hr = S_OK;

    IBindCtx* spBindCtx = NULL;
    IMoniker* spMoniker = NULL;
    IStream*  spStream = NULL;

    _bAsync = false;

    CHKHR(URLOpenBlockingStream(NULL, pwszUrl, &spStream, NULL, NULL));
    CHKHR(::CreateXmlReader(IID_IXmlReader, (void**) &_spXmlReader, NULL));
    CHKHR(_spXmlReader->SetInput(spStream));
    
    CHKHR(Parse());

CleanUp:
    SAFE_RELEASE(spBindCtx);
    SAFE_RELEASE(spMoniker);
    SAFE_RELEASE(spStream);
    SAFE_RELEASE(_spXmlReader);
    return hr;
}
CString CHttpRequest::Download1 (CString strURL, int nMethod, CString strHeaders, CString strData,
	CString strFilename,
	bool* pbCancelDownload, DWORD dwDownloadId, int& nError, int nApproxContentLength,									   
	HWND hwndProgress, HWND hwndStatus, CString strMsg)
{
	gl_stkDownloads.push_back (dwDownloadId);

	CBindStatusCallback callback (nMethod == 1 ? BINDVERB_GET : BINDVERB_POST, strHeaders, strData,
		dwDownloadId, &gl_stkDownloads, GetCurrentTime (), hwndProgress, hwndStatus);

	// show the UI controls
	if (hwndStatus != NULL)
		::PostMessage (hwndStatus, SB_SETTEXT, 1, (LPARAM) strStatusMsg.GetBuffer (0));

	CString strRetData;

	if (!strFilename.IsEmpty ())
	{
		// download to file
		HRESULT hr = URLDownloadToFile (NULL, strURL, strFilename, 0, &callback);
	}
	else
	{
		IStream* pStream;
		char szBuffer[0x100];
		DWORD dwGot;
		HRESULT hr = NOERROR;

		// Open a blocking type stream to the Web site.
		hr = URLOpenBlockingStream (NULL, strURL, &pStream, 0, &callback);
		if (hr != S_OK)
		{
			CString strMsg;
			strMsg.Format (IDS_ERROR_ACCESSING_URL, strURL.GetBuffer (-1));
			AfxMessageBox (strMsg, MB_ICONERROR);
		}
		else
		{
			do
			{
				hr = pStream->Read (szBuffer, sizeof (szBuffer) - 1, &dwGot);
				szBuffer[dwGot] = 0;
				strRetData += szBuffer;
			} while (SUCCEEDED (hr) && hr != S_FALSE);

			pStream->Release();
		}
	}

	// hide UI controls
	if (dwDownloadId == gl_stkDownloads.back ())
	{
		if (hwndProgress != NULL)
			::ShowWindow (hwndProgress, SW_HIDE);
		if (hwndStatus != NULL)
			for (int i = 1; i <= 4; i++)
				::PostMessage (hwndStatus, SB_SETTEXT, i, (LPARAM) "");
	}

	gl_stkDownloads.remove (dwDownloadId);
	return strRetData;
}