Blob Blame History Raw
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 <QtCore/QDate>
 #include <QtDBus/QtDBus>
 #include <QtNetwork/QTcpSocket>
+#include <QtNetwork/QNetworkProxy>
 #include <QtNetwork/QHostInfo>
 
 #include <kurl.h>
@@ -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