]> git.saurik.com Git - wxWidgets.git/commitdiff
added support for POST method and alternate ports (part of patch 649438)
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 Jul 2003 22:22:47 +0000 (22:22 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 Jul 2003 22:22:47 +0000 (22:22 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21819 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/protocol/http.h
src/common/http.cpp

index 45e927310e7965ca9186c2d1495cf4177cdf6770..4f37b4e8e9c5c14231e703c85737c41f3dfc21a5 100644 (file)
@@ -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:
 
index 71fd1df60eface0f948c6e8b7da287210a7d8840..4abcaf5951db5a7788cccc1c6860b0928ef04afc 100644 (file)
@@ -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);
index bc1583ab90ff1344b907082eba0aea76c8686a8e..71db1b5e851f2a393ee6412783e6955fd0fb8fef 100644 (file)
@@ -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);