00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CPACKETSTREAMFILTER_H
00016 #define CPACKETSTREAMFILTER_H
00017
00018 #include "CStreamFilter.h"
00019 #include "CStreamBuffer.h"
00020 #include "CMutex.h"
00021
00023
00026 class CPacketStreamFilter : public CStreamFilter {
00027 public:
00028 CPacketStreamFilter(IStream* stream, bool adoptStream = true);
00029 ~CPacketStreamFilter();
00030
00031
00032 virtual void close();
00033 virtual UInt32 read(void* buffer, UInt32 n);
00034 virtual void write(const void* buffer, UInt32 n);
00035 virtual void shutdownInput();
00036 virtual bool isReady() const;
00037 virtual UInt32 getSize() const;
00038
00039 protected:
00040
00041 virtual void filterEvent(const CEvent&);
00042
00043 private:
00044 bool isReadyNoLock() const;
00045 void readPacketSize();
00046 bool readMore();
00047
00048 private:
00049 CMutex m_mutex;
00050 UInt32 m_size;
00051 CStreamBuffer m_buffer;
00052 bool m_inputShutdown;
00053 };
00054
00055 #endif