36 qCDebug(lcTuioBundle) << data.toHex();
37 quint32 parsedBytes = 0;
41 if (!qt_readOscString(data, identifier, parsedBytes) || identifier !=
"#bundle")
47 if (parsedBytes > (quint32)data.size() || data.size() - parsedBytes < qsizetype(
sizeof(quint64)))
59 quint32 oscTimeEpoch = qFromBigEndian<quint32>(data.constData() + parsedBytes);
60 parsedBytes +=
sizeof(quint32);
61 quint32 oscTimePico = qFromBigEndian<quint32>(data.constData() + parsedBytes);
62 parsedBytes +=
sizeof(quint32);
64 bool isImmediate =
false;
66 if (oscTimeEpoch == 0 && oscTimePico == 1) {
73 while (parsedBytes < (quint32)data.size()) {
80 if (data.size() - parsedBytes < qsizetype(
sizeof(quint32)))
83 quint32 size = qFromBigEndian<quint32>((
const uchar*)data.constData() + parsedBytes);
84 parsedBytes +=
sizeof(quint32);
86 if (data.size() - parsedBytes < size)
92 qCWarning(lcTuioBundle,
"Empty bundle?");
94 m_immediate = isImmediate;
95 m_timeEpoch = oscTimeEpoch;
96 m_timePico = oscTimePico;
102 QByteArray subdata = data.mid(parsedBytes, size);
111 QByteArray bundleIdentifier = QByteArray(
"#bundle\0", 8);
112 if (subdata.startsWith(
'/')) {
114 QOscMessage subMessage(subdata);
115 if (subMessage.isValid()) {
117 m_immediate = isImmediate;
118 m_timeEpoch = oscTimeEpoch;
119 m_timePico = oscTimePico;
120 m_messages.append(subMessage);
122 qCWarning(lcTuioBundle,
"Invalid sub-message");
125 }
else if (subdata.startsWith(bundleIdentifier)) {
130 m_immediate = isImmediate;
131 m_timeEpoch = oscTimeEpoch;
132 m_timePico = oscTimePico;
133 m_bundles.append(subBundle);
136 qCWarning(lcTuioBundle,
"Malformed sub-data!");