Add support for relaying unix sockets
This commit is contained in:
@@ -100,6 +100,12 @@ void SMsgReader::readMsg()
|
||||
case msgTypeUpgradeToUdp:
|
||||
readUpgradeToUdp();
|
||||
break;
|
||||
case msgTypeSubscribeUnixRelay:
|
||||
readSubscribeUnixRelay();
|
||||
break;
|
||||
case msgTypeUnixRelay:
|
||||
readUnixRelay();
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "unknown message type %d\n", msgType);
|
||||
throw Exception("unknown message type");
|
||||
@@ -357,3 +363,42 @@ void SMsgReader::readUpgradeToUdp()
|
||||
|
||||
handler->udpUpgrade(resp);
|
||||
}
|
||||
|
||||
void SMsgReader::readSubscribeUnixRelay()
|
||||
{
|
||||
const rdr::U8 namelen = is->readU8();
|
||||
char name[64];
|
||||
if (namelen >= sizeof(name)) {
|
||||
vlog.error("Ignoring subscribe with too large name");
|
||||
is->skip(namelen);
|
||||
return;
|
||||
}
|
||||
is->readBytes(name, namelen);
|
||||
name[namelen] = '\0';
|
||||
|
||||
handler->subscribeUnixRelay(name);
|
||||
}
|
||||
|
||||
void SMsgReader::readUnixRelay()
|
||||
{
|
||||
const rdr::U8 namelen = is->readU8();
|
||||
char name[64];
|
||||
if (namelen >= sizeof(name)) {
|
||||
vlog.error("Ignoring relay packet with too large name");
|
||||
is->skip(namelen);
|
||||
return;
|
||||
}
|
||||
is->readBytes(name, namelen);
|
||||
name[namelen] = '\0';
|
||||
|
||||
const rdr::U32 len = is->readU32();
|
||||
rdr::U8 buf[1024 * 1024];
|
||||
if (len >= sizeof(buf)) {
|
||||
vlog.error("Ignoring relay packet with too large data");
|
||||
is->skip(len);
|
||||
return ;
|
||||
}
|
||||
is->readBytes(buf, len);
|
||||
|
||||
handler->unixRelay(name, buf, len);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user