diff -r 000000000000 -r 6474c204b198 netwerk/protocol/ftp/nsFTPChannel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/netwerk/protocol/ftp/nsFTPChannel.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,112 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* vim:set ts=4 sw=4 sts=4 et cindent: */ +/* 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 nsFTPChannel_h___ +#define nsFTPChannel_h___ + +#include "nsBaseChannel.h" + +#include "nsString.h" +#include "nsCOMPtr.h" +#include "nsIFTPChannel.h" +#include "nsIUploadChannel.h" +#include "nsIProxyInfo.h" +#include "nsIProxiedChannel.h" +#include "nsIResumableChannel.h" + +class nsIURI; + +class nsFtpChannel : public nsBaseChannel, + public nsIFTPChannel, + public nsIUploadChannel, + public nsIResumableChannel, + public nsIProxiedChannel +{ +public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIUPLOADCHANNEL + NS_DECL_NSIRESUMABLECHANNEL + NS_DECL_NSIPROXIEDCHANNEL + + nsFtpChannel(nsIURI *uri, nsIProxyInfo *pi) + : mProxyInfo(pi) + , mStartPos(0) + , mResumeRequested(false) + , mLastModifiedTime(0) + , mForcePending(false) + { + SetURI(uri); + } + + nsIProxyInfo *ProxyInfo() { + return mProxyInfo; + } + + void SetProxyInfo(nsIProxyInfo *pi) + { + mProxyInfo = pi; + } + + NS_IMETHOD IsPending(bool *result) MOZ_OVERRIDE; + + // This is a short-cut to calling nsIRequest::IsPending(). + // Overrides Pending in nsBaseChannel. + bool Pending() const MOZ_OVERRIDE; + + // Were we asked to resume a download? + bool ResumeRequested() { return mResumeRequested; } + + // Download from this byte offset + uint64_t StartPos() { return mStartPos; } + + // ID of the entity to resume downloading + const nsCString &EntityID() { + return mEntityID; + } + void SetEntityID(const nsCSubstring &entityID) { + mEntityID = entityID; + } + + NS_IMETHODIMP GetLastModifiedTime(PRTime* lastModifiedTime) { + *lastModifiedTime = mLastModifiedTime; + return NS_OK; + } + + NS_IMETHODIMP SetLastModifiedTime(PRTime lastModifiedTime) { + mLastModifiedTime = lastModifiedTime; + return NS_OK; + } + + // Data stream to upload + nsIInputStream *UploadStream() { + return mUploadStream; + } + + // Helper function for getting the nsIFTPEventSink. + void GetFTPEventSink(nsCOMPtr &aResult); + +public: /* Internal Necko use only. */ + void ForcePending(bool aForcePending); + +protected: + virtual ~nsFtpChannel() {} + virtual nsresult OpenContentStream(bool async, nsIInputStream **result, + nsIChannel** channel); + virtual bool GetStatusArg(nsresult status, nsString &statusArg); + virtual void OnCallbacksChanged(); + +private: + nsCOMPtr mProxyInfo; + nsCOMPtr mFTPEventSink; + nsCOMPtr mUploadStream; + uint64_t mStartPos; + nsCString mEntityID; + bool mResumeRequested; + PRTime mLastModifiedTime; + bool mForcePending; +}; + +#endif /* nsFTPChannel_h___ */