summaryrefslogtreecommitdiff
path: root/sapsocket.cc
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2015-12-16 02:10:10 +0100
committerJavier <dev.git@javispedro.com>2015-12-16 02:10:10 +0100
commit309947a4316a94f4c5d43c9b39b733cc3bbab459 (patch)
treea339058f8e1c3045240d71ab961c7ec1effdd947 /sapsocket.cc
parentaabf2deebb9619e21f1ebac0690c6b206b16b251 (diff)
downloadsapd-309947a4316a94f4c5d43c9b39b733cc3bbab459.tar.gz
sapd-309947a4316a94f4c5d43c9b39b733cc3bbab459.zip
implement session termination requests
Diffstat (limited to 'sapsocket.cc')
-rw-r--r--sapsocket.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/sapsocket.cc b/sapsocket.cc
index e7376d9..e9a69ec 100644
--- a/sapsocket.cc
+++ b/sapsocket.cc
@@ -6,10 +6,11 @@
#include "sapsocket.h"
#define DELAYED_ACK_TIME 1000
+#define WINDOW_SIZE_MSGS 10
SAPSocket::SAPSocket(SAPConnection *conn, int sessionId, const SAPChannelInfo &chanInfo) :
QObject(conn), _sessionId(sessionId), _info(chanInfo), _open(false),
- _outLastSeqNum(0), _inLastSeqNum(0), _inLastAck(0)
+ _outLastSeqNum(0), _outLastAck(0), _inLastSeqNum(0), _inLastAck(0)
{
}
@@ -56,13 +57,23 @@ bool SAPSocket::send(const QByteArray &data)
return false;
}
+ if (data.size() > 65000) {
+ qWarning() << "Fragmentation is not yet supported";
+ return false;
+ }
+
+ if (_out.size() > WINDOW_SIZE_MSGS) {
+ // Send buffer is not empty; enqueue
+ // TODO Realiability
+ }
+
frame.withSeqNum = isWithSeqNum();
if (isReliable()) {
frame.seqNum = ++_outLastSeqNum;
} else {
frame.seqNum = 0;
}
- frame.unk_1 = 0;
+ frame.unk_1 = 0; // Is this related to fragmentation?
frame.data = data;
peer()->writeDataToSession(_sessionId, SAProtocol::packDataFrame(frame));