MythTV  master
bufferedsocketdevice.h
Go to the documentation of this file.
1 // Program Name: bufferedsocketdevice.h
3 // Created : Oct. 1, 2005
4 //
5 // Purpose :
6 //
7 // Copyright (c) 2005 David Blain <dblain@mythtv.org>
8 //
9 // Licensed under the GPL v2 or later, see LICENSE for details
10 //
12 
13 #ifndef BUFFEREDSOCKETDEVICE_H
14 #define BUFFEREDSOCKETDEVICE_H
15 
16 // C++ headers
17 #include <deque>
18 
19 // Qt headers
20 #include <QString>
21 #include <QByteArray>
22 #include <QHostAddress>
23 
24 // MythTV headers
25 #include "libmythbase/compat.h"
26 
27 #include "mmembuf.h"
28 #include "msocketdevice.h"
29 
32 //
33 //
34 //
37 
39 {
40  protected:
41 
42  MSocketDevice *m_pSocket {nullptr};
43 
44  qulonglong m_nMaxReadBufferSize {0};
45  qint64 m_nWriteSize {0};
46  qint64 m_nWriteIndex {0};
47 
48  bool m_bHandleSocketDelete {true};
49 
50  QHostAddress m_destHostAddress;
51  quint16 m_nDestPort {0};
52 
53  MMembuf m_bufRead;
54  std::deque<QByteArray*> m_bufWrite;
55 
56  int ReadBytes ( );
57  bool ConsumeWriteBuf( qulonglong nbytes );
58 
59  public:
60 
61  explicit BufferedSocketDevice( int nSocket );
62  explicit BufferedSocketDevice( MSocketDevice *pSocket = nullptr,
63  bool bTakeOwnership = false );
64 
65  virtual ~BufferedSocketDevice( );
66 
67  MSocketDevice *SocketDevice ();
68  void SetSocketDevice ( MSocketDevice *pSocket );
69 
70  void SetDestAddress ( QHostAddress hostAddress,
71  quint16 nPort );
72 
73  bool Connect ( const QHostAddress &addr,
74  quint16 port );
75  void Close ();
76  void Flush ();
77  qint64 Size ();
78  static qint64 At () ;
79  bool At ( qlonglong index );
80  bool AtEnd ();
81 
82  qulonglong BytesAvailable ();
83  qulonglong WaitForMore ( std::chrono::milliseconds msecs,
84  bool *timeout = nullptr );
85 
86  qulonglong BytesToWrite () const;
87  void ClearPendingData ();
88  void ClearReadBuffer ();
89 
90  qlonglong ReadBlock ( char *data,
91  qulonglong maxlen );
92  qlonglong WriteBlock ( const char *data,
93  qulonglong len );
94  qlonglong WriteBlockDirect ( const char *data,
95  qulonglong len );
96 
97  int Getch ();
98  int Putch ( int ch );
99  int Ungetch ( int ch );
100 
101  bool CanReadLine ();
102  QString ReadLine ();
103  QString ReadLine ( std::chrono::milliseconds msecs );
104  qlonglong ReadLine ( char *data,
105  qulonglong maxlen );
106 
107  quint16 Port () const;
108  quint16 PeerPort () const;
109  QHostAddress Address () const;
110  QHostAddress PeerAddress () const;
111 
112  void SetReadBufferSize ( qulonglong bufSize );
113  qulonglong ReadBufferSize () const;
114 
115  bool IsValid () { return( ( m_pSocket ) ? m_pSocket->isValid() : false ); }
116  int socket () { return( ( m_pSocket ) ? m_pSocket->socket() : 0 ); }
117 };
118 
119 #endif // BUFFEREDSOCKETDEVICE_H
BufferedSocketDevice::m_bHandleSocketDelete
bool m_bHandleSocketDelete
Definition: bufferedsocketdevice.h:48
hardwareprofile.smolt.timeout
float timeout
Definition: smolt.py:102
BufferedSocketDevice::BytesAvailable
qulonglong BytesAvailable()
Definition: bufferedsocketdevice.cpp:373
BufferedSocketDevice::Putch
int Putch(int ch)
Definition: bufferedsocketdevice.cpp:572
BufferedSocketDevice
Definition: bufferedsocketdevice.h:38
BufferedSocketDevice::Connect
bool Connect(const QHostAddress &addr, quint16 port)
Definition: bufferedsocketdevice.cpp:101
BufferedSocketDevice::m_pSocket
MSocketDevice * m_pSocket
Definition: bufferedsocketdevice.h:42
BufferedSocketDevice::SetReadBufferSize
void SetReadBufferSize(qulonglong bufSize)
Definition: bufferedsocketdevice.cpp:147
BufferedSocketDevice::WriteBlock
qlonglong WriteBlock(const char *data, qulonglong len)
Definition: bufferedsocketdevice.cpp:493
BufferedSocketDevice::m_bufRead
MMembuf m_bufRead
Definition: bufferedsocketdevice.h:53
BufferedSocketDevice::m_destHostAddress
QHostAddress m_destHostAddress
Definition: bufferedsocketdevice.h:50
BufferedSocketDevice::m_nMaxReadBufferSize
qulonglong m_nMaxReadBufferSize
Definition: bufferedsocketdevice.h:44
BufferedSocketDevice::Address
QHostAddress Address() const
Definition: bufferedsocketdevice.cpp:697
BufferedSocketDevice::ClearPendingData
void ClearPendingData()
Definition: bufferedsocketdevice.cpp:447
BufferedSocketDevice::Port
quint16 Port() const
Definition: bufferedsocketdevice.cpp:673
BufferedSocketDevice::ReadBlock
qlonglong ReadBlock(char *data, qulonglong maxlen)
Definition: bufferedsocketdevice.cpp:470
BufferedSocketDevice::~BufferedSocketDevice
virtual ~BufferedSocketDevice()
Definition: bufferedsocketdevice.cpp:67
BufferedSocketDevice::Ungetch
int Ungetch(int ch)
Definition: bufferedsocketdevice.cpp:583
BufferedSocketDevice::SetDestAddress
void SetDestAddress(QHostAddress hostAddress, quint16 nPort)
Definition: bufferedsocketdevice.cpp:136
BufferedSocketDevice::CanReadLine
bool CanReadLine()
Definition: bufferedsocketdevice.cpp:592
BufferedSocketDevice::m_nDestPort
quint16 m_nDestPort
Definition: bufferedsocketdevice.h:51
BufferedSocketDevice::ReadLine
QString ReadLine()
Definition: bufferedsocketdevice.cpp:603
compat.h
BufferedSocketDevice::WriteBlockDirect
qlonglong WriteBlockDirect(const char *data, qulonglong len)
Definition: bufferedsocketdevice.cpp:528
BufferedSocketDevice::WaitForMore
qulonglong WaitForMore(std::chrono::milliseconds msecs, bool *timeout=nullptr)
Definition: bufferedsocketdevice.cpp:385
BufferedSocketDevice::BufferedSocketDevice
BufferedSocketDevice(int nSocket)
Definition: bufferedsocketdevice.cpp:29
BufferedSocketDevice::PeerAddress
QHostAddress PeerAddress() const
Definition: bufferedsocketdevice.cpp:711
BufferedSocketDevice::SocketDevice
MSocketDevice * SocketDevice()
Definition: bufferedsocketdevice.cpp:113
BufferedSocketDevice::AtEnd
bool AtEnd()
Definition: bufferedsocketdevice.cpp:358
BufferedSocketDevice::IsValid
bool IsValid()
Definition: bufferedsocketdevice.h:115
BufferedSocketDevice::Flush
void Flush()
Definition: bufferedsocketdevice.cpp:254
BufferedSocketDevice::Close
void Close()
Definition: bufferedsocketdevice.cpp:76
BufferedSocketDevice::Getch
int Getch()
Definition: bufferedsocketdevice.cpp:549
BufferedSocketDevice::Size
qint64 Size()
Definition: bufferedsocketdevice.cpp:323
BufferedSocketDevice::At
static qint64 At()
Definition: bufferedsocketdevice.cpp:332
BufferedSocketDevice::ConsumeWriteBuf
bool ConsumeWriteBuf(qulonglong nbytes)
Definition: bufferedsocketdevice.cpp:218
BufferedSocketDevice::socket
int socket()
Definition: bufferedsocketdevice.h:116
BufferedSocketDevice::PeerPort
quint16 PeerPort() const
Definition: bufferedsocketdevice.cpp:685
BufferedSocketDevice::m_nWriteSize
qint64 m_nWriteSize
write total buf size
Definition: bufferedsocketdevice.h:45
BufferedSocketDevice::m_nWriteIndex
qint64 m_nWriteIndex
write index
Definition: bufferedsocketdevice.h:46
BufferedSocketDevice::ReadBytes
int ReadBytes()
Definition: bufferedsocketdevice.cpp:165
BufferedSocketDevice::ReadBufferSize
qulonglong ReadBufferSize() const
Definition: bufferedsocketdevice.cpp:156
BufferedSocketDevice::ClearReadBuffer
void ClearReadBuffer()
Definition: bufferedsocketdevice.cpp:461
BufferedSocketDevice::SetSocketDevice
void SetSocketDevice(MSocketDevice *pSocket)
Definition: bufferedsocketdevice.cpp:122
BufferedSocketDevice::m_bufWrite
std::deque< QByteArray * > m_bufWrite
Definition: bufferedsocketdevice.h:54
BufferedSocketDevice::BytesToWrite
qulonglong BytesToWrite() const
Definition: bufferedsocketdevice.cpp:437