X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1ac3b56e6b5b7342d69aa3b33744c345edb3d1e..71a660a3128c6c2a9262225136907e57dab33183:/src/common/http.cpp diff --git a/src/common/http.cpp b/src/common/http.cpp index eca6160a5e..bc1583ab90 100644 --- a/src/common/http.cpp +++ b/src/common/http.cpp @@ -6,7 +6,7 @@ // Created: August 1997 // RCS-ID: $Id$ // Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -38,8 +38,7 @@ IMPLEMENT_PROTOCOL(wxHTTP, wxT("http"), wxT("80"), TRUE) #define HTTP_BSIZE 2048 wxHTTP::wxHTTP() - : wxProtocol(), - m_headers(wxKEY_STRING) + : wxProtocol() { m_addr = NULL; m_read = FALSE; @@ -57,17 +56,7 @@ wxHTTP::~wxHTTP() void wxHTTP::ClearHeaders() { - // wxString isn't a wxObject - wxNode *node = m_headers.First(); - wxString *string; - - while (node) { - string = (wxString *)node->Data(); - delete string; - node = node->Next(); - } - - m_headers.Clear(); + m_headers.clear(); } wxString wxHTTP::GetContentType() @@ -87,45 +76,34 @@ void wxHTTP::SetHeader(const wxString& header, const wxString& h_data) m_read = FALSE; } - wxNode *node = m_headers.Find(header); - - if (!node) - m_headers.Append(header, (wxObject *)(new wxString(h_data))); - else { - wxString *str = (wxString *)node->Data(); - (*str) = h_data; - } + wxStringToStringHashMap::iterator it = m_headers.find(header); + if (it != m_headers.end()) + it->second = h_data; + else + m_headers[header.Upper()] = h_data; } wxString wxHTTP::GetHeader(const wxString& header) { - wxNode *node; - wxString upper_header; - - upper_header = header.Upper(); + wxStringToStringHashMap::iterator it = m_headers.find(header.Upper()); - node = m_headers.Find(upper_header); - if (!node) + if (it == m_headers.end()) return wxEmptyString; - return *((wxString *)node->Data()); + return it->second; } void wxHTTP::SendHeaders() { - wxNode *head = m_headers.First(); + typedef wxStringToStringHashMap::iterator iterator; + wxString buf; - while (head) + for (iterator it = m_headers.begin(), en = m_headers.end(); it != en; ++it ) { - wxString *str = (wxString *)head->Data(); - - wxString buf; - buf.Printf(wxT("%s: %s\r\n"), head->GetKeyString(), str->GetData()); + buf.Printf(wxT("%s: %s\r\n"), it->first.c_str(), it->second.c_str()); const wxWX2MBbuf cbuf = buf.mb_str(); Write(cbuf, strlen(cbuf)); - - head = head->Next(); } } @@ -152,10 +130,9 @@ bool wxHTTP::ParseHeaders() break; wxString left_str = line.BeforeFirst(':'); - wxString *str = new wxString(line.AfterFirst(':').Strip(wxString::both)); left_str.MakeUpper(); - m_headers.Append(left_str, (wxObject *) str); + m_headers[left_str] = line.AfterFirst(':').Strip(wxString::both); } return TRUE; } @@ -287,19 +264,22 @@ public: protected: size_t OnSysRead(void *buffer, size_t bufsize); + + DECLARE_NO_COPY_CLASS(wxHTTPStream) }; size_t wxHTTPStream::OnSysRead(void *buffer, size_t bufsize) { - size_t ret; - - if (m_httpsize > 0 && m_read_bytes >= m_httpsize) - return 0; + if (m_httpsize > 0 && m_read_bytes >= m_httpsize) + { + m_lasterror = wxSTREAM_EOF; + return 0; + } - ret = wxSocketInputStream::OnSysRead(buffer, bufsize); - m_read_bytes += ret; + size_t ret = wxSocketInputStream::OnSysRead(buffer, bufsize); + m_read_bytes += ret; - return ret; + return ret; } bool wxHTTP::Abort(void)