diff -up kdelibs/kioslave/http/http.cpp.orig kdelibs/kioslave/http/http.cpp --- kdelibs/kioslave/http/http.cpp.orig 2008-06-12 17:23:34.000000000 +0200 +++ kdelibs/kioslave/http/http.cpp 2008-06-12 17:36:29.000000000 +0200 @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -259,9 +260,11 @@ void HTTPProtocol::resetSessionSettings( // Do not reset the URL on redirection if the proxy // URL, username or password has not changed! KUrl proxy ( config()->readEntry("UseProxy") ); + QNetworkProxy::ProxyType proxyType = QNetworkProxy::NoProxy; if ( m_strProxyRealm.isEmpty() || !proxy.isValid() || m_proxyURL.host() != proxy.host() || + m_proxyURL.port() != proxy.port() || (!proxy.user().isNull() && proxy.user() != m_proxyURL.user()) || (!proxy.pass().isNull() && proxy.pass() != m_proxyURL.pass()) ) { @@ -272,6 +275,21 @@ void HTTPProtocol::resetSessionSettings( kDebug(7113) << "Using proxy:" << m_bUseProxy << "URL: " << m_proxyURL.url() << "Realm: " << m_strProxyRealm; + + if ( m_bUseProxy ) + { + if ( m_proxyURL.protocol() == "socks" ) + proxyType = QNetworkProxy::Socks5Proxy; + else if ( isAutoSsl() ) + proxyType = QNetworkProxy::HttpProxy; + + m_request.proxyURL = proxy; + } + else + m_request.proxyURL = KUrl(); + + QNetworkProxy::setApplicationProxy(QNetworkProxy(proxyType,m_proxyURL.host(),m_proxyURL.port(),m_proxyURL.user(),m_proxyURL.pass())); + } m_bPersistentProxyConnection = config()->readEntry("PersistentProxyConnection", false); @@ -1903,7 +1921,7 @@ void HTTPProtocol::httpCheckConnection() kDebug(7113) << "Connection lost!"; closeDown = true; } - else if ( m_request.method != HTTP_GET ) + else if ( m_request.method != HTTP_GET && m_request.method != HTTP_POST ) { closeDown = true; } @@ -1915,6 +1933,14 @@ void HTTPProtocol::httpCheckConnection() m_state.passwd != m_request.passwd) closeDown = true; } + else if ( m_state.doProxy || m_request.doProxy ) + { + if (m_state.proxyURL.host() != m_request.proxyURL.host() || + m_state.proxyURL.port() != m_request.proxyURL.port() || + m_state.proxyURL.user() != m_request.proxyURL.user() || + m_state.proxyURL.pass() != m_request.proxyURL.pass()) + closeDown = true; + } else { // Keep the connection to the proxy. @@ -1933,17 +1959,23 @@ void HTTPProtocol::httpCheckConnection() m_state.user = m_request.user; m_state.passwd = m_request.passwd; m_state.doProxy = m_request.doProxy; + m_state.proxyURL = m_request.proxyURL; } bool HTTPProtocol::httpOpenConnection() { + bool connResult; kDebug(7113); setBlocking( true ); - if ( !connectToHost(m_protocol, m_state.hostname, m_state.port ) ) - return false; + if ( m_state.doProxy && !isAutoSsl() && m_proxyURL.protocol() != "socks") + connResult = connectToHost(m_proxyURL.protocol(), m_proxyURL.host(), m_proxyURL.port() ); + else + connResult = connectToHost(m_protocol, m_state.hostname, m_state.port ); + if ( connResult ) + { #if 0 // QTcpSocket doesn't support this // Set our special socket option!! socket().setNoDelay(true); @@ -1952,7 +1984,8 @@ bool HTTPProtocol::httpOpenConnection() m_bFirstRequest = true; connected(); - return true; + } + return connResult; } diff -up kdelibs/kioslave/http/http.h.orig kdelibs/kioslave/http/http.h --- kdelibs/kioslave/http/http.h.orig 2008-06-12 17:36:35.000000000 +0200 +++ kdelibs/kioslave/http/http.h 2008-06-12 17:37:47.000000000 +0200 @@ -83,6 +83,7 @@ public: QString user; QString passwd; bool doProxy; + KUrl proxyURL; }; /** DAV-specific request elements for the current connection **/ @@ -145,6 +146,7 @@ public: QString id; DAVRequest davData; bool doProxy; + KUrl proxyURL; bool allowCompressedPage; bool disablePassDlg; bool bNoAuth; // Do not authenticate