]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix so the Host: header in wxHTTP really works. With virtual hosts it
authorRobin Dunn <robin@alldunn.com>
Thu, 21 Feb 2002 00:01:32 +0000 (00:01 +0000)
committerRobin Dunn <robin@alldunn.com>
Thu, 21 Feb 2002 00:01:32 +0000 (00:01 +0000)
is vital that the original host name given in the URL is used in the
Host: header so the sever will use the right vhost config.  Previously
it was using the value returned from gethostbyaddr which will often
not be the same as the hostname in the URL.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14332 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/sckaddr.h
src/common/http.cpp
src/common/sckaddr.cpp

index 8f175f4f45f1d63dc44f35a154968bd8af2be5cb..087b9510d09bbccfd444521d4103325759760917 100644 (file)
@@ -64,10 +64,14 @@ public:
   bool AnyAddress();
 
   wxString Hostname();
+  wxString OrigHostname() { return m_origHostname; }
   unsigned short Service();
 
   virtual int Type() { return wxSockAddress::IPV4; }
-  virtual wxSockAddress *Clone() const { return new wxIPV4address(*this); }
+  virtual wxSockAddress *Clone() const;
+
+private:
+  wxString m_origHostname;
 };
 
 #ifdef ENABLE_IPV6
index b98d6c83af9c3a6dae459c1a4c3bf2b7d66607f7..085323449051120ac128370645794b78f234891e 100644 (file)
@@ -181,7 +181,7 @@ bool wxHTTP::Connect(const wxString& host)
 
   if (!addr->Service(wxT("http")))
     addr->Service(80);
-    
+
   SetHeader(wxT("Host"), host);
 
   return TRUE;
@@ -198,7 +198,7 @@ bool wxHTTP::Connect(wxSockAddress& addr, bool WXUNUSED(wait))
 
   wxIPV4address *ipv4addr = wxDynamicCast(&addr, wxIPV4address);
   if (ipv4addr)
-      SetHeader(wxT("Host"), ipv4addr->Hostname());
+      SetHeader(wxT("Host"), ipv4addr->OrigHostname());
 
   return TRUE;
 }
index 8e638c353710d87a4a61db2ffa37eea61e009bcd..4fd8ce90ed68eafbef0ce493172d39f036c9da92 100644 (file)
@@ -108,13 +108,18 @@ bool wxIPV4address::Hostname(const wxString& name)
     wxLogWarning( _("Trying to solve a NULL hostname: giving up") );
     return FALSE;
   }
-
+  m_origHostname = name;
   return (GAddress_INET_SetHostName(m_address, name.mb_str()) == GSOCK_NOERROR);
 }
 
 bool wxIPV4address::Hostname(unsigned long addr)
 {
-  return (GAddress_INET_SetHostAddress(m_address, addr) == GSOCK_NOERROR);
+  bool rv = (GAddress_INET_SetHostAddress(m_address, addr) == GSOCK_NOERROR);
+  if (rv)
+      m_origHostname = Hostname();
+  else
+      m_origHostname = "";
+  return rv;
 }
 
 bool wxIPV4address::Service(const wxString& name)
@@ -151,6 +156,13 @@ unsigned short wxIPV4address::Service()
   return GAddress_INET_GetPort(m_address);
 }
 
+wxSockAddress *wxIPV4address::Clone() const
+{
+    wxIPV4address *addr = new wxIPV4address(*this);
+    addr->m_origHostname = m_origHostname;
+    return addr;
+}
+
 #if 0
 // ---------------------------------------------------------------------------
 // wxIPV6address