This commit is contained in:
Lauri Kasanen
2022-07-26 10:38:14 +00:00
committed by Matthew McClaskey
parent ba902f8194
commit 3b40a92548
72 changed files with 3314 additions and 52 deletions

View File

@@ -17,6 +17,7 @@
* USA.
*/
#include <stdio.h>
#include <network/Udp.h>
#include <rdr/InStream.h>
#include <rdr/ZlibInStream.h>
@@ -96,6 +97,9 @@ void SMsgReader::readMsg()
case msgTypeQEMUClientMessage:
readQEMUMessage();
break;
case msgTypeUpgradeToUdp:
readUpgradeToUdp();
break;
default:
fprintf(stderr, "unknown message type %d\n", msgType);
throw Exception("unknown message type");
@@ -329,3 +333,27 @@ void SMsgReader::readQEMUKeyEvent()
}
handler->keyEvent(keysym, keycode, down);
}
void SMsgReader::readUpgradeToUdp()
{
char buf[4096], resp[4096];
rdr::U16 len = is->readU16();
if (len >= sizeof(buf)) {
vlog.error("Ignoring udp upgrade with too large payload");
is->skip(len);
return;
}
if (!len) {
handler->udpDowngrade();
return;
}
is->readBytes(buf, len);
buf[len] = '\0';
wuGotHttp(buf, len, resp);
handler->udpUpgrade(resp);
}