#ifndef SAPSOCKET_H #define SAPSOCKET_H #include #include #include #include "sapchannelinfo.h" class SAPConnection; class SAPPeer; class SAPSocket : public QObject { Q_OBJECT SAPSocket(SAPConnection *conn, int sessionId, const SAPChannelInfo &chanInfo); public: SAPPeer *peer(); SAPConnection *connection(); SAPChannelInfo channelInfo() const; bool isOpen() const; bool messageAvailable() const; QByteArray receive(); bool send(const QByteArray &data); signals: void connected(); void disconnected(); void messageReceived(); protected: void setOpen(bool open); void acceptIncomingData(const QByteArray &data); int sessionId() const; virtual void timerEvent(QTimerEvent *event) override; private: bool isReliable() const; bool isWithSeqNum() const; private: const int _sessionId; const SAPChannelInfo _info; bool _open; QQueue _in; QBasicTimer _timer; /** Outgoing sequence number */ quint16 _outLastSeqNum; /** Next expected incoming sequence number */ quint16 _inLastSeqNum; /** Last acknowledged sequence number */ quint16 _inLastAck; friend class SAPPeer; }; #endif // SAPSOCKET_H