//---------------------------------------------------------------------------- // BOOL CAnchoBackgroundAPI::GetURL(CStringW & sURL) { CString s; DWORD dwLength = INTERNET_MAX_URL_LENGTH; BOOL b = InternetCombineUrlW(m_sRootURL, sURL, s.GetBuffer(INTERNET_MAX_URL_LENGTH), &dwLength, 0); s.ReleaseBuffer(); if (b) { sURL = s; } return b; }
CImage* HTMLImageElement::GetImage() { if (m_pImage == NULL) { if (false) { String src = get_src(); if (src.GetLength()) { WCHAR result[2048]; { String documentUrl = m_ownerDocument->get_url(); // documentUrl = _bstr_t(bdocumentUrl, false); String baseUrl = documentUrl; ASSERT(0); #if 0 DWORD resultLen = sizeof(result) - sizeof(result[0]); InternetCombineUrlW(baseUrl->c_str(), src->c_str(), result, &resultLen, 0); #endif } // StringA localfilename = DownloadFile(result); m_pImage = new CImage;//LXML::g_Images.OpenImage(Convert2W(result)); m_pImage->m_url = string_copy(result); DWORD threadId; ::CreateThread(NULL, 0, ThreadFunc, this, 0, &threadId); } } } return m_pImage; }
Response * WinHTTPSession::receive(HINTERNET wrequest, const Request & request, std::basic_string<WCHAR> & redirect) { if(!WinHttpReceiveResponse(wrequest, NULL)) { return new Response("Error receiving response: " + errorString()); } DWORD status = 0; DWORD statusSize = sizeof(status); if(!WinHttpQueryHeaders(wrequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_HEADER_NAME_BY_INDEX, &status, &statusSize, WINHTTP_NO_HEADER_INDEX)) { return new Response("Error getting status code: " + errorString()); } std::string url; if(!request.followRedirects()) { DWORD urlSize = 0; WinHttpQueryHeaders(wrequest, WINHTTP_QUERY_LOCATION, WINHTTP_HEADER_NAME_BY_INDEX, WINHTTP_NO_OUTPUT_BUFFER, &urlSize, WINHTTP_NO_HEADER_INDEX); if(GetLastError() == ERROR_INSUFFICIENT_BUFFER && urlSize % sizeof(WCHAR) == 0) { platform::WideString redirect; redirect.allocate(urlSize / sizeof(WCHAR)); if(WinHttpQueryHeaders(wrequest, WINHTTP_QUERY_LOCATION, WINHTTP_HEADER_NAME_BY_INDEX, redirect.data(), &urlSize, WINHTTP_NO_HEADER_INDEX)) { redirect.resize(urlSize / sizeof(WCHAR)); platform::WideString base(request.url()); platform::WideString wurl; wurl.allocate(2 * (base.size() + redirect.size())); urlSize = wurl.size(); if(InternetCombineUrlW(base, redirect, wurl.data(), &urlSize, ICU_BROWSER_MODE)) { wurl.resize(urlSize); url = wurl.toUTF8(); } } } } else { url = redirect.empty() ? request.url() : platform::WideString::toUTF8(redirect); } std::string data; DWORD size; for(;;) { // Check for available data. size = 0; if(!WinHttpQueryDataAvailable(wrequest, &size)) { return new Response("Error reading response: " + errorString()); } if(!size) { break; } size_t oldsize = data.size(); data.resize(oldsize + size); if(!WinHttpReadData(wrequest, &data[oldsize], size, &size)) { return new Response("Error reading response: " + errorString()); } data.resize(oldsize + size); } return new Response(status, data, url); }