Backed out changeset 71dafccc22ae (bug 1353956) Backed out changeset f1f29fe519cf (bug 1353956) Backed out changeset 4978556a66f6 (bug 1353956) Backed out changeset bc0b91abce9b (bug 1353956) Backed out changeset 6b8412db5a05 (bug 1353956) Backed out changeset 3d326cfcd002 (bug 1353956)
57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
//* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* 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 nsCheckSummedOutputStream_h__
|
|
#define nsCheckSummedOutputStream_h__
|
|
|
|
#include "nsIFile.h"
|
|
#include "nsIOutputStream.h"
|
|
#include "nsICryptoHash.h"
|
|
#include "nsNetCID.h"
|
|
#include "nsNetUtil.h"
|
|
#include "nsString.h"
|
|
#include "../../../netwerk/base/nsBufferedStreams.h"
|
|
#include "prio.h"
|
|
|
|
class nsCheckSummedOutputStream : public nsBufferedOutputStream {
|
|
public:
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
|
|
// Size of MD5 hash in bytes
|
|
static const uint32_t CHECKSUM_SIZE = 16;
|
|
static const uint32_t MAX_BUFFER_SIZE = 64 * 1024;
|
|
|
|
nsCheckSummedOutputStream() {}
|
|
|
|
NS_IMETHOD Finish() override;
|
|
NS_IMETHOD Write(const char *buf, uint32_t count, uint32_t *result) override;
|
|
NS_IMETHOD Init(nsIOutputStream *stream, uint32_t bufferSize) override;
|
|
|
|
protected:
|
|
virtual ~nsCheckSummedOutputStream() { nsBufferedOutputStream::Close(); }
|
|
|
|
nsCOMPtr<nsICryptoHash> mHash;
|
|
nsCString mCheckSum;
|
|
};
|
|
|
|
// returns a file output stream which can be QI'ed to nsIFileOutputStream.
|
|
inline nsresult NS_NewCheckSummedOutputStream(nsIOutputStream **result,
|
|
nsIFile *file) {
|
|
nsCOMPtr<nsIOutputStream> localOutFile;
|
|
nsresult rv =
|
|
NS_NewSafeLocalFileOutputStream(getter_AddRefs(localOutFile), file,
|
|
PR_WRONLY | PR_TRUNCATE | PR_CREATE_FILE);
|
|
NS_ENSURE_SUCCESS(rv, rv);
|
|
|
|
nsCOMPtr<nsIBufferedOutputStream> out = new nsCheckSummedOutputStream();
|
|
rv = out->Init(localOutFile, nsCheckSummedOutputStream::CHECKSUM_SIZE);
|
|
if (NS_SUCCEEDED(rv)) {
|
|
out.forget(result);
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
#endif
|