aboutsummaryrefslogtreecommitdiffstats
path: root/src/kvilib/net/KviHttpRequest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kvilib/net/KviHttpRequest.cpp')
-rw-r--r--src/kvilib/net/KviHttpRequest.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/kvilib/net/KviHttpRequest.cpp b/src/kvilib/net/KviHttpRequest.cpp
index ae1804921..390b686b5 100644
--- a/src/kvilib/net/KviHttpRequest.cpp
+++ b/src/kvilib/net/KviHttpRequest.cpp
@@ -717,9 +717,9 @@ bool KviHttpRequest::processHeader(KviCString & szHeader)
return false;
}
- KviCString * location = hdr.find("Location");
+ KviCString * headerLocation = hdr.find("Location");
- if(!location)
+ if(!headerLocation || headerLocation->isEmpty())
{
resetInternalStatus();
m_szLastError = __tr2qs("Bad redirect");
@@ -727,7 +727,18 @@ bool KviHttpRequest::processHeader(KviCString & szHeader)
return false;
}
- KviUrl url(location->ptr());
+ KviUrl url;
+ QString location(headerLocation->ptr());
+
+ if(location.startsWith('/'))
+ {
+ // relative redirect, use the old url and only update the path
+ url = m_connectionUrl;
+ url.setPath(location);
+ } else {
+ // absolute redirect
+ url.setUrl(location);
+ }
if(
(url.url() == m_connectionUrl.url()) || (url.url() == m_url.url()))
@@ -1044,7 +1055,7 @@ void KviHttpRequest::dnsLookupDone(KviDnsResolver *d)
{
m_szIp = d->firstIpAddress();
delete m_pDns;
- m_pDns = 0;
+ m_pDns = nullptr;
QString tmp;
tmp = QString(__tr2qs("Host %1 resolved to %2")).arg(m_connectionUrl.host(),m_szIp);
emit status(tmp);