Skip to content

Commit d3e08f9

Browse files
committed
fixing long session name
1 parent 744e84e commit d3e08f9

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

src/AppleMIDI.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ void AppleMIDISession<UdpClass, Settings, Platform>::parseControlPackets()
3838
#endif
3939
controlBuffer.pop_front();
4040
}
41+
else if (retVal == parserReturn::SessionNameVeryLong)
42+
{
43+
// purge the rest of the data in controlPort
44+
while (controlPort.read() >= 0) {}
45+
}
4146
}
4247
}
4348

src/AppleMIDI_Parser.h

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,17 @@ class AppleMIDIParser
8989
while ((i < buffer.size()) && (buffer[i] != 0x00))
9090
i++;
9191
#endif
92-
// session name is optional.
93-
// If i > minimum size (16), then a sessionName was provided and must include 0x00
94-
if (i > minimumLen)
95-
if (i == buffer.size() || buffer[i++] != 0x00)
96-
return parserReturn::NotEnoughData;
92+
parserReturn parserReturn = parserReturn::Processed;
93+
94+
if (i > minimumLen && i == buffer.size() && buffer[i] != 0x00)
95+
parserReturn = parserReturn::SessionNameVeryLong;
9796

9897
while (i--)
9998
buffer.pop_front(); // consume all the bytes that made up this message
10099

101100
session->ReceivedInvitation(invitation, portType);
102101

103-
return parserReturn::Processed;
102+
return parserReturn;
104103
}
105104
else if (0 == memcmp(command, amEndSession, sizeof(amEndSession)))
106105
{
@@ -278,18 +277,23 @@ class AppleMIDIParser
278277
while ((i < buffer.size()) && (buffer[i] != 0x00))
279278
i++;
280279
#endif
281-
// session name is optional.
282-
// If i > minimum size (16), then a sessionName was provided and must include 0x00
283-
if (i > minimumLen)
284-
if (i == buffer.size() || buffer[i++] != 0x00)
285-
return parserReturn::NotEnoughData;
280+
//// session name is optional.
281+
//// If i > minimum size (16), then a sessionName was provided and must include 0x00
282+
//if (i > minimumLen)
283+
// if (i == buffer.size() || buffer[i++] != 0x00)
284+
// return parserReturn::NotEnoughData;
285+
286+
parserReturn parserReturn = parserReturn::Processed;
287+
288+
if (i > minimumLen && i == buffer.size() && buffer[i] != 0x00)
289+
parserReturn = parserReturn::SessionNameVeryLong;
286290

287291
while (i--)
288292
buffer.pop_front(); // consume all the bytes that made up this message
289293

290294
session->ReceivedInvitationAccepted(invitationAccepted, portType);
291295

292-
return parserReturn::Processed;
296+
return parserReturn;
293297
}
294298
else if (0 == memcmp(command, amInvitationRejected, sizeof(amInvitationRejected)))
295299
{

0 commit comments

Comments
 (0)