X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fde7d98ecdb04b84483288bdc269045eb51193fc..cc985face55ed02c310860afefc8e6d656fb849d:/src/common/http.cpp diff --git a/src/common/http.cpp b/src/common/http.cpp index a50e3ea140..b433e4f013 100644 --- a/src/common/http.cpp +++ b/src/common/http.cpp @@ -10,27 +10,25 @@ ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ -#pragma implementation "http.h" + #pragma implementation "http.h" #endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if wxUSE_SOCKETS -#ifndef WX_PRECOMP -#endif - #include #include #include "wx/string.h" #include "wx/tokenzr.h" #include "wx/socket.h" #include "wx/protocol/protocol.h" +#include "wx/url.h" #include "wx/protocol/http.h" #include "wx/sckstrm.h" @@ -116,6 +114,7 @@ void wxHTTP::SendHeaders() bool wxHTTP::ParseHeaders() { wxString line; + wxStringTokenizer tokenzr; m_headers.Clear(); m_read = TRUE; @@ -128,17 +127,12 @@ bool wxHTTP::ParseHeaders() if (line.Length() == 0) break; - wxPrintf(_T("Header: %s\n"), WXSTRINGCAST line); - int pos = line.Find(':'); - if (pos == -1) + tokenzr.SetString(line, " :\t\n\r"); + if (!tokenzr.HasMoreTokens()) return FALSE; - wxString left_str = line(0, pos); - wxString right_str = line(pos+1, line.Length()); - - right_str = right_str.Strip(wxString::leading); - - wxString *str = new wxString(right_str); + wxString left_str = tokenzr.GetNextToken(); + wxString *str = new wxString(tokenzr.GetNextToken()); m_headers.Append(left_str, (wxObject *) str); } @@ -185,29 +179,29 @@ bool wxHTTP::Connect(wxSockAddress& addr, bool WXUNUSED(wait)) bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) { - char *tmp_buf; - char buf[HTTP_BSIZE]; - const wxWX2MBbuf pathbuf = path.mb_str(); + wxChar *tmp_buf; + wxCharBuffer buf(""); + const wxWX2MBbuf pathbuf; + wxString tmp_str; switch (req) { case wxHTTP_GET: - tmp_buf = "GET"; + tmp_buf = _T("GET"); break; default: return FALSE; } SaveState(); + SetFlags(NONE); Notify(FALSE); - SetFlags(WAITALL); - sprintf(buf, "%s %s HTTP/1.0\n\r", tmp_buf, (const char*)pathbuf); - Write(buf, strlen(buf)); + tmp_str = wxURL::ConvertToValidURI(path); + wxSprintf(buf, _T("%s %s\n\r"), tmp_buf, tmp_str.GetData()); + pathbuf = wxConvLibc.cWX2MB(buf); + Write(pathbuf, strlen(pathbuf)); SendHeaders(); - sprintf(buf, "\n\r"); - Write(buf, strlen(buf)); - - wxString tmp_str; + Write("\n\r", 2); m_error = GetLine(this, tmp_str); if (m_error != wxPROTO_NOERR) { @@ -278,6 +272,7 @@ wxInputStream *wxHTTP::GetInputStream(const wxString& path) if (!GetHeader(_T("Content-Length")).IsEmpty()) inp_stream->m_httpsize = wxAtoi(WXSTRINGCAST GetHeader(_T("Content-Length"))); + SetFlags(WAITALL); return inp_stream; }