#include "wx/url.h"
#include "wx/protocol/http.h"
#include "wx/sckstrm.h"
+#include "wx/thread.h"
+
+
+// ----------------------------------------------------------------------------
+// wxHTTP
+// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxHTTP, wxProtocol)
IMPLEMENT_PROTOCOL(wxHTTP, wxT("http"), wxT("80"), true)
void wxHTTP::ClearHeaders()
{
- m_headers.clear();
+ m_headers.clear();
}
-wxString wxHTTP::GetContentType()
+wxString wxHTTP::GetContentType() const
{
return GetHeader(wxT("Content-Type"));
}
for ( ;; )
{
- m_perr = ReadLine(this, line);
- if (m_perr != wxPROTO_NOERR)
+ m_lastError = ReadLine(this, line);
+ if (m_lastError != wxPROTO_NOERR)
return false;
if (line.length() == 0)
if (!addr->Hostname(host)) {
delete m_addr;
m_addr = NULL;
- m_perr = wxPROTO_NETERR;
+ m_lastError = wxPROTO_NETERR;
return false;
}
SetHeader(wxT("Host"), host);
+ m_lastError = wxPROTO_NOERR;
return true;
}
-bool wxHTTP::Connect(wxSockAddress& addr, bool WXUNUSED(wait))
+bool wxHTTP::Connect(const wxSockAddress& addr, bool WXUNUSED(wait))
{
if (m_addr) {
delete m_addr;
if (ipv4addr)
SetHeader(wxT("Host"), ipv4addr->OrigHostname());
+ m_lastError = wxPROTO_NOERR;
return true;
}
}
wxString tmp_str;
- m_perr = ReadLine(this, tmp_str);
- if (m_perr != wxPROTO_NOERR) {
+ m_lastError = ReadLine(this, tmp_str);
+ if (m_lastError != wxPROTO_NOERR) {
RestoreState();
return false;
}
if (!tmp_str.Contains(wxT("HTTP/"))) {
// TODO: support HTTP v0.9 which can have no header.
// FIXME: tmp_str is not put back in the in-queue of the socket.
+ m_lastError = wxPROTO_NOERR;
SetHeader(wxT("Content-Length"), wxT("-1"));
SetHeader(wxT("Content-Type"), wxT("none/none"));
RestoreState();
break;
default:
- m_perr = wxPROTO_NOFILE;
+ m_lastError = wxPROTO_NOFILE;
RestoreState();
return false;
}
+ m_lastError = wxPROTO_NOERR;
ret_value = ParseHeaders();
RestoreState();
return ret_value;
}
+bool wxHTTP::Abort(void)
+{
+ return wxSocketClient::Close();
+}
+
+// ----------------------------------------------------------------------------
+// wxHTTPStream and wxHTTP::GetInputStream
+// ----------------------------------------------------------------------------
+
class wxHTTPStream : public wxSocketInputStream
{
public:
// which is equivalent to getting a READ_ERROR, for clients however this
// must be translated into EOF, as it is the expected way of signalling
// end end of the content
- m_lasterror = wxSTREAM_EOF ;
+ m_lasterror = wxSTREAM_EOF;
}
return ret;
}
-bool wxHTTP::Abort(void)
-{
- return wxSocketClient::Close();
-}
-
wxInputStream *wxHTTP::GetInputStream(const wxString& path)
{
wxHTTPStream *inp_stream;
wxString new_path;
- m_perr = wxPROTO_CONNERR;
+ m_lastError = wxPROTO_CONNERR; // all following returns share this type of error
if (!m_addr)
return NULL;
Notify(false);
SetFlags(wxSOCKET_BLOCK | wxSOCKET_WAITALL);
+ // no error; reset m_lastError
+ m_lastError = wxPROTO_NOERR;
return inp_stream;
}