Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
michael@0 | 1 | // StreamBinder.h |
michael@0 | 2 | |
michael@0 | 3 | #ifndef __STREAMBINDER_H |
michael@0 | 4 | #define __STREAMBINDER_H |
michael@0 | 5 | |
michael@0 | 6 | #include "../IStream.h" |
michael@0 | 7 | #include "../../Windows/Synchronization.h" |
michael@0 | 8 | |
michael@0 | 9 | class CStreamBinder |
michael@0 | 10 | { |
michael@0 | 11 | NWindows::NSynchronization::CManualResetEvent *_allBytesAreWritenEvent; |
michael@0 | 12 | NWindows::NSynchronization::CManualResetEvent *_thereAreBytesToReadEvent; |
michael@0 | 13 | NWindows::NSynchronization::CManualResetEvent *_readStreamIsClosedEvent; |
michael@0 | 14 | UInt32 _bufferSize; |
michael@0 | 15 | const void *_buffer; |
michael@0 | 16 | public: |
michael@0 | 17 | // bool ReadingWasClosed; |
michael@0 | 18 | UInt64 ProcessedSize; |
michael@0 | 19 | CStreamBinder(): |
michael@0 | 20 | _allBytesAreWritenEvent(NULL), |
michael@0 | 21 | _thereAreBytesToReadEvent(NULL), |
michael@0 | 22 | _readStreamIsClosedEvent(NULL) |
michael@0 | 23 | {} |
michael@0 | 24 | ~CStreamBinder(); |
michael@0 | 25 | void CreateEvents(); |
michael@0 | 26 | |
michael@0 | 27 | void CreateStreams(ISequentialInStream **inStream, |
michael@0 | 28 | ISequentialOutStream **outStream); |
michael@0 | 29 | HRESULT Read(void *data, UInt32 size, UInt32 *processedSize); |
michael@0 | 30 | void CloseRead(); |
michael@0 | 31 | |
michael@0 | 32 | HRESULT Write(const void *data, UInt32 size, UInt32 *processedSize); |
michael@0 | 33 | void CloseWrite(); |
michael@0 | 34 | void ReInit(); |
michael@0 | 35 | }; |
michael@0 | 36 | |
michael@0 | 37 | #endif |