Index: netwerk/protocol/http/src/nsHttpConnection.cpp =================================================================== RCS file: /cvsroot/mozilla/netwerk/protocol/http/src/nsHttpConnection.cpp,v retrieving revision 1.62 diff -p -u -8 -r1.62 nsHttpConnection.cpp --- netwerk/protocol/http/src/nsHttpConnection.cpp 8 Jul 2007 07:08:39 -0000 1.62 +++ netwerk/protocol/http/src/nsHttpConnection.cpp 8 Apr 2008 10:26:13 -0000 @@ -447,16 +447,27 @@ nsHttpConnection::CreateTransport() // NOTE: these create cyclical references, which we break inside // nsHttpConnection::Close rv = strans->SetEventSink(this, nsnull); if (NS_FAILED(rv)) return rv; rv = strans->SetSecurityCallbacks(this); if (NS_FAILED(rv)) return rv; + PRUint32 connectTimeout = gHttpHandler->ConnectTimeout(); + if (connectTimeout) { + rv = strans->SetTimeout(nsISocketTransport::TIMEOUT_CONNECT, connectTimeout); + if (NS_FAILED(rv)) return rv; + } + PRUint32 requestTimeout = gHttpHandler->RequestTimeout(); + if (requestTimeout) { + rv = strans->SetTimeout(nsISocketTransport::TIMEOUT_READ_WRITE, requestTimeout); + if (NS_FAILED(rv)) return rv; + } + // next open the socket streams nsCOMPtr sout; rv = strans->OpenOutputStream(nsITransport::OPEN_UNBUFFERED, 0, 0, getter_AddRefs(sout)); if (NS_FAILED(rv)) return rv; nsCOMPtr sin; rv = strans->OpenInputStream(nsITransport::OPEN_UNBUFFERED, 0, 0, getter_AddRefs(sin)); Index: netwerk/protocol/http/src/nsHttpHandler.cpp =================================================================== RCS file: /cvsroot/mozilla/netwerk/protocol/http/src/nsHttpHandler.cpp,v retrieving revision 1.133 diff -p -u -8 -r1.133 nsHttpHandler.cpp --- netwerk/protocol/http/src/nsHttpHandler.cpp 7 Feb 2008 04:04:56 -0000 1.133 +++ netwerk/protocol/http/src/nsHttpHandler.cpp 8 Apr 2008 10:26:13 -0000 @@ -154,16 +154,18 @@ nsHttpHandler *gHttpHandler = nsnull; nsHttpHandler::nsHttpHandler() : mConnMgr(nsnull) , mHttpVersion(NS_HTTP_VERSION_1_1) , mProxyHttpVersion(NS_HTTP_VERSION_1_1) , mCapabilities(NS_HTTP_ALLOW_KEEPALIVE) , mProxyCapabilities(NS_HTTP_ALLOW_KEEPALIVE) , mReferrerLevel(0xff) // by default we always send a referrer , mIdleTimeout(10) + , mConnectTimeout(0) + , mRequestTimeout(0) , mMaxRequestAttempts(10) , mMaxRequestDelay(10) , mMaxConnections(24) , mMaxConnectionsPerServer(8) , mMaxPersistentConnectionsPerServer(2) , mMaxPersistentConnectionsPerProxy(4) , mMaxPipelinedRequests(2) , mRedirectionLimit(10) @@ -877,16 +879,28 @@ nsHttpHandler::PrefsChanged(nsIPrefBranc // if (PREF_CHANGED(HTTP_PREF("keep-alive.timeout"))) { rv = prefs->GetIntPref(HTTP_PREF("keep-alive.timeout"), &val); if (NS_SUCCEEDED(rv)) mIdleTimeout = (PRUint16) CLAMP(val, 1, 0xffff); } + if (PREF_CHANGED(HTTP_PREF("connect.timeout"))) { + rv = prefs->GetIntPref(HTTP_PREF("connect.timeout"), &val); + if (NS_SUCCEEDED(rv)) + mConnectTimeout = (PRUint16) CLAMP(val, 0, 0xffff); + } + + if (PREF_CHANGED(HTTP_PREF("request.timeout"))) { + rv = prefs->GetIntPref(HTTP_PREF("request.timeout"), &val); + if (NS_SUCCEEDED(rv)) + mRequestTimeout = (PRUint16) CLAMP(val, 0, 0xffff); + } + if (PREF_CHANGED(HTTP_PREF("request.max-attempts"))) { rv = prefs->GetIntPref(HTTP_PREF("request.max-attempts"), &val); if (NS_SUCCEEDED(rv)) mMaxRequestAttempts = (PRUint16) CLAMP(val, 1, 0xffff); } if (PREF_CHANGED(HTTP_PREF("request.max-start-delay"))) { rv = prefs->GetIntPref(HTTP_PREF("request.max-start-delay"), &val); Index: netwerk/protocol/http/src/nsHttpHandler.h =================================================================== RCS file: /cvsroot/mozilla/netwerk/protocol/http/src/nsHttpHandler.h,v retrieving revision 1.54 diff -p -u -8 -r1.54 nsHttpHandler.h --- netwerk/protocol/http/src/nsHttpHandler.h 7 Feb 2008 04:04:56 -0000 1.54 +++ netwerk/protocol/http/src/nsHttpHandler.h 8 Apr 2008 10:26:13 -0000 @@ -96,16 +96,18 @@ public: const nsAFlatCString &UserAgent(); nsHttpVersion HttpVersion() { return mHttpVersion; } nsHttpVersion ProxyHttpVersion() { return mProxyHttpVersion; } PRUint8 ReferrerLevel() { return mReferrerLevel; } PRBool SendSecureXSiteReferrer() { return mSendSecureXSiteReferrer; } PRUint8 RedirectionLimit() { return mRedirectionLimit; } PRUint16 IdleTimeout() { return mIdleTimeout; } + PRUint16 ConnectTimeout() { return mConnectTimeout; } + PRUint16 RequestTimeout() { return mRequestTimeout; } PRUint16 MaxRequestAttempts() { return mMaxRequestAttempts; } const char *DefaultSocketType() { return mDefaultSocketType.get(); /* ok to return null */ } nsIIDNService *IDNConverter() { return mIDNConverter; } PRUint32 PhishyUserPassLength() { return mPhishyUserPassLength; } PRBool CanCacheAllSSLContent() { return mEnablePersistentHttpsCaching; } nsHttpAuthCache *AuthCache() { return &mAuthCache; } @@ -237,16 +239,18 @@ private: PRUint8 mHttpVersion; PRUint8 mProxyHttpVersion; PRUint8 mCapabilities; PRUint8 mProxyCapabilities; PRUint8 mReferrerLevel; PRUint16 mIdleTimeout; + PRUint16 mConnectTimeout; + PRUint16 mRequestTimeout; PRUint16 mMaxRequestAttempts; PRUint16 mMaxRequestDelay; PRUint16 mMaxConnections; PRUint8 mMaxConnectionsPerServer; PRUint8 mMaxPersistentConnectionsPerServer; PRUint8 mMaxPersistentConnectionsPerProxy; PRUint8 mMaxPipelinedRequests;