From 97c93d800287a21b971b763d58c1eebb30ece071 Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 13 Dec 2015 05:50:18 +0100 Subject: fix broken decoding of multiple-channel connection requests --- saprotocol.cc | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'saprotocol.cc') diff --git a/saprotocol.cc b/saprotocol.cc index 541f0af..c580f12 100644 --- a/saprotocol.cc +++ b/saprotocol.cc @@ -247,20 +247,30 @@ SAProtocol::ServiceConnectionRequestFrame SAProtocol::unpackServiceConnectionReq frame.profile = QString::fromUtf8(&data.constData()[offset], marker - offset); offset = marker + 1; - int num_sessions = read(data, offset); + const int num_sessions = read(data, offset); + frame.sessions.reserve(num_sessions); - while (num_sessions > 0) { + for (int i = 0; i < num_sessions; i++) { ServiceConnectionRequestSession session; session.sessionId = read(data, offset); + frame.sessions.append(session); + } + + for (int i = 0; i < num_sessions; i++) { + ServiceConnectionRequestSession &session = frame.sessions[i]; session.channelId = read(data, offset); + } + + for (int i = 0; i < num_sessions; i++) { + ServiceConnectionRequestSession &session = frame.sessions[i]; session.qosType = read(data, offset); session.qosDataRate = read(data, offset); session.qosPriority = read(data, offset); - session.payloadType = read(data, offset); - - frame.sessions.append(session); + } - num_sessions--; + for (int i = 0; i < num_sessions; i++) { + ServiceConnectionRequestSession &session = frame.sessions[i]; + session.payloadType = read(data, offset); } return frame; @@ -281,10 +291,19 @@ QByteArray SAProtocol::packServiceConnectionRequestFrame(const ServiceConnection foreach (const ServiceConnectionRequestSession &session, frame.sessions) { append(data, session.sessionId); + } + + foreach (const ServiceConnectionRequestSession &session, frame.sessions) { append(data, session.channelId); + } + + foreach (const ServiceConnectionRequestSession &session, frame.sessions) { append(data, session.qosType); append(data, session.qosDataRate); append(data, session.qosPriority); + } + + foreach (const ServiceConnectionRequestSession &session, frame.sessions) { append(data, session.payloadType); } -- cgit v1.2.3