summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorSamuel Barney <samjbarney@gmail.com>2013-12-05 15:32:19 +0100
committerSamuel Barney <samjbarney@gmail.com>2013-12-05 15:32:19 +0100
commit8acfe21503f4b4fdccd03d0927ec8a11cd6457ec (patch)
tree1ea90086621fc11d433cd94ccd635d54c5a4380a /Tools
parentMade suggested changes (diff)
parentProtoProxy: Fixed metadata parsing. (diff)
downloadcuberite-8acfe21503f4b4fdccd03d0927ec8a11cd6457ec.tar
cuberite-8acfe21503f4b4fdccd03d0927ec8a11cd6457ec.tar.gz
cuberite-8acfe21503f4b4fdccd03d0927ec8a11cd6457ec.tar.bz2
cuberite-8acfe21503f4b4fdccd03d0927ec8a11cd6457ec.tar.lz
cuberite-8acfe21503f4b4fdccd03d0927ec8a11cd6457ec.tar.xz
cuberite-8acfe21503f4b4fdccd03d0927ec8a11cd6457ec.tar.zst
cuberite-8acfe21503f4b4fdccd03d0927ec8a11cd6457ec.zip
Diffstat (limited to 'Tools')
-rw-r--r--Tools/ProtoProxy/Connection.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/Tools/ProtoProxy/Connection.cpp b/Tools/ProtoProxy/Connection.cpp
index 385caa2ce..0b49859cb 100644
--- a/Tools/ProtoProxy/Connection.cpp
+++ b/Tools/ProtoProxy/Connection.cpp
@@ -260,6 +260,9 @@ void cConnection::Log(const char * a_Format, ...)
// Log to file:
cCSLock Lock(m_CSLog);
fputs(FullMsg.c_str(), m_LogFile);
+ #ifdef _DEBUG
+ fflush(m_LogFile);
+ #endif // _DEBUG
// Log to screen:
// std::cout << FullMsg;
@@ -2678,15 +2681,20 @@ bool cConnection::ParseMetadata(cByteBuffer & a_Buffer, AString & a_Metadata)
case 1: Length = 2; break; // short
case 2: Length = 4; break; // int
case 3: Length = 4; break; // float
- case 4: // string16
+ case 4: // UTF-8 string with VarInt length
{
- short Len = 0;
- if (!a_Buffer.ReadBEShort(Len))
+ UInt32 Len;
+ int rs = a_Buffer.GetReadableSpace();
+ if (!a_Buffer.ReadVarInt(Len))
{
return false;
}
- short NetLen = htons(Len);
- a_Metadata.append((char *)&NetLen, 2);
+ rs = rs - a_Buffer.GetReadableSpace();
+ cByteBuffer LenBuf(8);
+ LenBuf.WriteVarInt(Len);
+ AString VarLen;
+ LenBuf.ReadAll(VarLen);
+ a_Metadata.append(VarLen);
Length = Len;
break;
}
@@ -2766,11 +2774,21 @@ void cConnection::LogMetadata(const AString & a_Metadata, size_t a_IndentCount)
pos += 4;
break;
}
- case 4: // string16
+ case 4: // UTF-8 string with VarInt length
{
- short Length = (a_Metadata[pos + 1] << 8) | a_Metadata[pos + 2];
- Log("%sstring[%d] = \"%*s\"", Indent.c_str(), Index, Length, a_Metadata.c_str() + pos + 3);
- pos += Length + 2;
+ cByteBuffer bb(10);
+ int RestLen = (int)a_Metadata.size() - pos - 1;
+ if (RestLen > 8)
+ {
+ RestLen = 8;
+ }
+ bb.Write(a_Metadata.data() + pos + 1, RestLen);
+ UInt32 Length;
+ int rs = bb.GetReadableSpace();
+ bb.ReadVarInt(Length);
+ rs = rs - bb.GetReadableSpace();
+ Log("%sstring[%d] = \"%*s\"", Indent.c_str(), Index, Length, a_Metadata.c_str() + pos + rs + 1);
+ pos += Length + rs + 2;
break;
}
case 5: