X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7ec698211d5d82a009ac80fb354059e9af497508..974c115dff4da4a370a3569a3576cacb00eef7bb:/src/msw/urlmsw.cpp diff --git a/src/msw/urlmsw.cpp b/src/msw/urlmsw.cpp index 6df72c6583..d081fc1956 100644 --- a/src/msw/urlmsw.cpp +++ b/src/msw/urlmsw.cpp @@ -18,6 +18,14 @@ #if wxUSE_URL_NATIVE +#ifndef WX_PRECOMP + #include "wx/list.h" + #include "wx/string.h" + #include "wx/utils.h" + #include "wx/module.h" + #include "wx/log.h" +#endif + #if !wxUSE_PROTOCOL_HTTP #include "wx/protocol/protocol.h" @@ -59,10 +67,6 @@ USE_PROTOCOL(wxHTTPDummyProto) #pragma comment(lib, "wininet.lib") #endif -#include "wx/string.h" -#include "wx/list.h" -#include "wx/utils.h" -#include "wx/module.h" #include "wx/url.h" #include @@ -118,7 +122,7 @@ class /*WXDLLIMPEXP_NET */ wxWinINetInputStream : public wxInputStream { public: wxWinINetInputStream(HINTERNET hFile=0); - ~wxWinINetInputStream(); + virtual ~wxWinINetInputStream(); void Attach(HINTERNET hFile); @@ -126,15 +130,28 @@ public: { return -1; } wxFileOffset TellI() const { return -1; } + size_t GetSize() const; protected: void SetError(wxStreamError err) { m_lasterror=err; } HINTERNET m_hFile; size_t OnSysRead(void *buffer, size_t bufsize); - DECLARE_NO_COPY_CLASS(wxWinINetInputStream) + wxDECLARE_NO_COPY_CLASS(wxWinINetInputStream); }; +size_t wxWinINetInputStream::GetSize() const +{ + DWORD contentLength = 0; + DWORD dwSize = sizeof(contentLength); + DWORD index = 0; + + if ( HttpQueryInfo( m_hFile, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &contentLength, &dwSize, &index) ) + return contentLength; + else + return 0; +} + size_t wxWinINetInputStream::OnSysRead(void *buffer, size_t bufsize) { DWORD bytesread = 0; @@ -199,11 +216,11 @@ wxURLNativeImp *wxURL::CreateNativeImpObject() wxInputStream *wxWinINetURL::GetInputStream(wxURL *owner) { DWORD service; - if ( owner->GetProtocolName() == wxT("http") ) + if ( owner->GetScheme() == wxT("http") ) { service = INTERNET_SERVICE_HTTP; } - else if ( owner->GetProtocolName() == wxT("ftp") ) + else if ( owner->GetScheme() == wxT("ftp") ) { service = INTERNET_SERVICE_FTP; }