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
bool AnyAddress();
wxString Hostname();
bool AnyAddress();
wxString Hostname();
+ wxString OrigHostname() { return m_origHostname; }
unsigned short Service();
virtual int Type() { return wxSockAddress::IPV4; }
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;
if (!addr->Service(wxT("http")))
addr->Service(80);
if (!addr->Service(wxT("http")))
addr->Service(80);
SetHeader(wxT("Host"), host);
return TRUE;
SetHeader(wxT("Host"), host);
return TRUE;
wxIPV4address *ipv4addr = wxDynamicCast(&addr, wxIPV4address);
if (ipv4addr)
wxIPV4address *ipv4addr = wxDynamicCast(&addr, wxIPV4address);
if (ipv4addr)
- SetHeader(wxT("Host"), ipv4addr->Hostname());
+ SetHeader(wxT("Host"), ipv4addr->OrigHostname());
wxLogWarning( _("Trying to solve a NULL hostname: giving up") );
return FALSE;
}
wxLogWarning( _("Trying to solve a NULL hostname: giving up") );
return FALSE;
}
return (GAddress_INET_SetHostName(m_address, name.mb_str()) == GSOCK_NOERROR);
}
bool wxIPV4address::Hostname(unsigned long addr)
{
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)
}
bool wxIPV4address::Service(const wxString& name)
return GAddress_INET_GetPort(m_address);
}
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
#if 0
// ---------------------------------------------------------------------------
// wxIPV6address