Fix so the Host: header in wxHTTP really works. With virtual hosts it
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
This commit is contained in:
parent
c79a329dcb
commit
ce22d615fe
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user