diff -r 000000000000 -r 6474c204b198 netwerk/protocol/ftp/nsFtpProtocolHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netwerk/protocol/ftp/nsFtpProtocolHandler.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,91 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsFtpProtocolHandler_h__ +#define nsFtpProtocolHandler_h__ + +#include "nsFtpControlConnection.h" +#include "nsIProxiedProtocolHandler.h" +#include "nsTArray.h" +#include "nsITimer.h" +#include "nsIObserver.h" +#include "nsWeakReference.h" + +class nsICacheSession; + +//----------------------------------------------------------------------------- + +class nsFtpProtocolHandler : public nsIProxiedProtocolHandler + , public nsIObserver + , public nsSupportsWeakReference +{ +public: + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIPROTOCOLHANDLER + NS_DECL_NSIPROXIEDPROTOCOLHANDLER + NS_DECL_NSIOBSERVER + + nsFtpProtocolHandler(); + virtual ~nsFtpProtocolHandler(); + + nsresult Init(); + + // FTP Connection list access + nsresult InsertConnection(nsIURI *aKey, nsFtpControlConnection *aConn); + nsresult RemoveConnection(nsIURI *aKey, nsFtpControlConnection **aConn); + uint32_t GetSessionId() { return mSessionId; } + + uint8_t GetDataQoSBits() { return mDataQoSBits; } + uint8_t GetControlQoSBits() { return mControlQoSBits; } + +private: + // Stuff for the timer callback function + struct timerStruct { + nsCOMPtr timer; + nsFtpControlConnection *conn; + char *key; + + timerStruct() : conn(nullptr), key(nullptr) {} + + ~timerStruct() { + if (timer) + timer->Cancel(); + if (key) + nsMemory::Free(key); + if (conn) { + conn->Disconnect(NS_ERROR_ABORT); + NS_RELEASE(conn); + } + } + }; + + static void Timeout(nsITimer *aTimer, void *aClosure); + void ClearAllConnections(); + + nsTArray mRootConnectionList; + + nsCOMPtr mCacheSession; + int32_t mIdleTimeout; + + // When "clear active logins" is performed, all idle connection are dropped + // and mSessionId is incremented. When nsFtpState wants to insert idle + // connection we refuse to cache if its mSessionId is different (i.e. + // control connection had been created before last "clear active logins" was + // performed. + uint32_t mSessionId; + + uint8_t mControlQoSBits; + uint8_t mDataQoSBits; +}; + +//----------------------------------------------------------------------------- + +extern nsFtpProtocolHandler *gFtpHandler; + +#ifdef PR_LOGGING +extern PRLogModuleInfo* gFTPLog; +#endif + +#endif // !nsFtpProtocolHandler_h__