diff --git a/include/wx/sckaddr.h b/include/wx/sckaddr.h index 8f175f4f45..087b9510d0 100644 --- a/include/wx/sckaddr.h +++ b/include/wx/sckaddr.h @@ -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 diff --git a/src/common/http.cpp b/src/common/http.cpp index b98d6c83af..0853234490 100644 --- a/src/common/http.cpp +++ b/src/common/http.cpp @@ -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; } diff --git a/src/common/sckaddr.cpp b/src/common/sckaddr.cpp index 8e638c3537..4fd8ce90ed 100644 --- a/src/common/sckaddr.cpp +++ b/src/common/sckaddr.cpp @@ -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