const wxString& data,
const wxMBConv& conv)
{
+#if wxUSE_UNICODE
wxScopedCharBuffer scb = data.mb_str(conv);
- if ( !scb.length() )
+ const size_t len = scb.length();
+ const char* const buf = scb.data();
+#else // !wxUSE_UNICODE
+ const size_t len = data.length();
+ const char* const buf = data.mb_str(conv);
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
+
+ if ( !len )
return false;
m_postBuffer.Clear();
- m_postBuffer.AppendData(scb.data(), scb.length());
+ m_postBuffer.AppendData(buf, len);
m_contentType = contentType;
return true;
SaveState();
// we may use non blocking sockets only if we can dispatch events from them
- SetFlags( wxIsMainThread() && wxApp::IsMainLoopRunning() ? wxSOCKET_NONE
- : wxSOCKET_BLOCK );
+ int flags = wxIsMainThread() && wxApp::IsMainLoopRunning() ? wxSOCKET_NONE
+ : wxSOCKET_BLOCK;
+ // and we must use wxSOCKET_WAITALL to ensure that all data is sent
+ flags |= wxSOCKET_WAITALL;
+ SetFlags(flags);
Notify(false);
wxString buf;
size_t m_httpsize;
unsigned long m_read_bytes;
- wxHTTPStream(wxHTTP *http) : wxSocketInputStream(*http), m_http(http) {}
+ wxHTTPStream(wxHTTP *http) : wxSocketInputStream(*http)
+ {
+ m_http = http;
+ m_httpsize = 0;
+ m_read_bytes = 0;
+ }
+
size_t GetSize() const { return m_httpsize; }
virtual ~wxHTTPStream(void) { m_http->Abort(); }