From f9133b32002a600cb48dd05fbcce1ab3ed684dba Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 9 Jul 2003 22:22:47 +0000 Subject: [PATCH] added support for POST method and alternate ports (part of patch 649438) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 3 ++- include/wx/protocol/http.h | 5 ++++- src/common/http.cpp | 21 ++++++++++++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 45e927310e..4f37b4e8e9 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -55,7 +55,8 @@ All: - fixed bug with deleting entries at root level in wxFileConfig - chkconf.h now includes platform-specific versions (for MSW and Mac) which contain some tests that were in setup.h -- Added event sink argument to wxEvtHandler::Connect() +- added event sink argument to wxEvtHandler::Connect() +- added support for POST method and alt ports to wxHTTP (Roger Chickering) wxBase: diff --git a/include/wx/protocol/http.h b/include/wx/protocol/http.h index 71fd1df60e..4abcaf5951 100644 --- a/include/wx/protocol/http.h +++ b/include/wx/protocol/http.h @@ -28,11 +28,12 @@ protected: wxStringToStringHashMap m_headers; bool m_read, m_proxy_mode; wxSockAddress *m_addr; + wxString m_post_buf; public: wxHTTP(); ~wxHTTP(); - bool Connect(const wxString& host); + bool Connect(const wxString& host, unsigned short port = 0); bool Connect(wxSockAddress& addr, bool wait); bool Abort(); wxInputStream *GetInputStream(const wxString& path); @@ -41,12 +42,14 @@ public: void SetHeader(const wxString& header, const wxString& h_data); wxString GetHeader(const wxString& header); + void SetPostBuffer(const wxString& post_buf); void SetProxyMode(bool on); protected: typedef enum { wxHTTP_GET, + wxHTTP_POST, wxHTTP_HEAD } wxHTTP_Req; bool BuildRequest(const wxString& path, wxHTTP_Req req); diff --git a/src/common/http.cpp b/src/common/http.cpp index bc1583ab90..71db1b5e85 100644 --- a/src/common/http.cpp +++ b/src/common/http.cpp @@ -43,6 +43,7 @@ wxHTTP::wxHTTP() m_addr = NULL; m_read = FALSE; m_proxy_mode = FALSE; + m_post_buf = wxEmptyString; SetNotify(wxSOCKET_LOST_FLAG); } @@ -93,6 +94,11 @@ wxString wxHTTP::GetHeader(const wxString& header) return it->second; } +void wxHTTP::SetPostBuffer(const wxString& post_buf) +{ + m_post_buf = post_buf; +} + void wxHTTP::SendHeaders() { typedef wxStringToStringHashMap::iterator iterator; @@ -137,7 +143,7 @@ bool wxHTTP::ParseHeaders() return TRUE; } -bool wxHTTP::Connect(const wxString& host) +bool wxHTTP::Connect(const wxString& host, unsigned short port) { wxIPV4address *addr; @@ -156,7 +162,8 @@ bool wxHTTP::Connect(const wxString& host) 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); @@ -188,6 +195,9 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) case wxHTTP_GET: request = wxT("GET"); break; + case wxHTTP_POST: + tmp_buf = wxT("POST"); + break; default: return FALSE; } @@ -207,6 +217,11 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) 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) { @@ -309,7 +324,7 @@ wxInputStream *wxHTTP::GetInputStream(const wxString& path) 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);