m_addr = NULL;
m_read = FALSE;
m_proxy_mode = FALSE;
+ m_post_buf = wxEmptyString;
SetNotify(wxSOCKET_LOST_FLAG);
}
m_proxy_mode = on;
}
+wxHTTP::wxHeaderIterator wxHTTP::FindHeader(const wxString& header) const
+{
+ // we can't convert between const_iterator to iterator otherwise...
+ wxStringToStringHashMap& headers = (wxStringToStringHashMap&)m_headers;
+
+ wxHeaderIterator it = headers.begin();
+ for ( wxHeaderIterator en = headers.end(); it != en; ++it )
+ {
+ if ( wxStricmp(it->first, header) == 0 )
+ break;
+ }
+
+ return it;
+}
+
void wxHTTP::SetHeader(const wxString& header, const wxString& h_data)
{
if (m_read) {
m_read = FALSE;
}
- wxStringToStringHashMap::iterator it = m_headers.find(header);
+ wxHeaderIterator it = FindHeader(header);
if (it != m_headers.end())
- it->second = h_data;
+ it->second = h_data;
else
- m_headers[header.Upper()] = h_data;
+ m_headers[header] = h_data;
}
-wxString wxHTTP::GetHeader(const wxString& header)
+wxString wxHTTP::GetHeader(const wxString& header) const
{
- wxStringToStringHashMap::iterator it = m_headers.find(header.Upper());
+ wxHeaderIterator it = FindHeader(header);
- if (it == m_headers.end())
- return wxEmptyString;
+ return it == m_headers.end() ? wxGetEmptyString() : it->second;
+}
- return it->second;
+void wxHTTP::SetPostBuffer(const wxString& post_buf)
+{
+ m_post_buf = post_buf;
}
void wxHTTP::SendHeaders()
#if defined(__VISAGECPP__)
// VA just can't stand while(1)
bool bOs2var = TRUE;
- while(bOs2var) {
+ while(bOs2var)
#else
- while (1) {
+ while (1)
#endif
+ {
m_perr = GetLine(this, line);
if (m_perr != wxPROTO_NOERR)
return FALSE;
break;
wxString left_str = line.BeforeFirst(':');
- left_str.MakeUpper();
-
m_headers[left_str] = line.AfterFirst(':').Strip(wxString::both);
}
return TRUE;
}
-bool wxHTTP::Connect(const wxString& host)
+bool wxHTTP::Connect(const wxString& host, unsigned short port)
{
wxIPV4address *addr;
return FALSE;
}
- if (!addr->Service(wxT("http")))
+ if ( port ) addr->Service(port);
+ else if (!addr->Service(wxT("http")))
addr->Service(80);
SetHeader(wxT("Host"), host);
case wxHTTP_GET:
request = wxT("GET");
break;
+ case wxHTTP_POST:
+ request = wxT("POST");
+ break;
default:
return FALSE;
}
SendHeaders();
Write("\r\n", 2);
+ if ( req == wxHTTP_POST ) {
+ Write(m_post_buf, m_post_buf.Len());
+ m_post_buf = wxEmptyString;
+ }
+
wxString tmp_str;
m_perr = GetLine(this, tmp_str);
if (m_perr != wxPROTO_NOERR) {
return NULL;
#endif
- if (!BuildRequest(path, wxHTTP_GET))
+ if (!BuildRequest(path, m_post_buf.IsEmpty() ? wxHTTP_GET : wxHTTP_POST))
return NULL;
inp_stream = new wxHTTPStream(this);