Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf@nereid.pl>2022-10-27 00:21:17 +0300
committerBartosz Taudul <wolf@nereid.pl>2022-10-27 00:23:07 +0300
commit86f88714aecb691df960467a6ede69ed9bdaf8d9 (patch)
tree6525134fccfa5774a2b33d67df380d6c4222c7c0
parent544caef850020b90060ddddce204e0f49889b54a (diff)
Add compatibility with previous broadcast versions.
-rw-r--r--profiler/src/main.cpp73
-rw-r--r--public/common/TracyProtocol.hpp29
2 files changed, 92 insertions, 10 deletions
diff --git a/profiler/src/main.cpp b/profiler/src/main.cpp
index a579564b..59a647c7 100644
--- a/profiler/src/main.cpp
+++ b/profiler/src/main.cpp
@@ -293,18 +293,71 @@ static void DrawContents()
auto msg = broadcastListen->Read( len, addr, 0 );
if( !msg ) break;
if( len > sizeof( tracy::BroadcastMessage ) ) continue;
- tracy::BroadcastMessage bm;
- memcpy( &bm, msg, len );
-
- if( bm.broadcastVersion == tracy::BroadcastVersion )
+ uint16_t broadcastVersion;
+ memcpy( &broadcastVersion, msg, sizeof( uint16_t ) );
+ if( broadcastVersion <= tracy::BroadcastVersion )
{
- const uint32_t protoVer = bm.protocolVersion;
- const auto procname = bm.programName;
- const auto activeTime = bm.activeTime;
- const auto listenPort = bm.listenPort;
- const auto pid = bm.pid;
- auto address = addr.GetText();
+ uint32_t protoVer;
+ char procname[tracy::WelcomeMessageProgramNameSize];
+ int32_t activeTime;
+ uint16_t listenPort;
+ uint64_t pid;
+ switch( broadcastVersion )
+ {
+ case 3:
+ {
+ tracy::BroadcastMessage bm;
+ memcpy( &bm, msg, len );
+ protoVer = bm.protocolVersion;
+ strcpy( procname, bm.programName );
+ activeTime = bm.activeTime;
+ listenPort = bm.listenPort;
+ pid = bm.pid;
+ break;
+ }
+ case 2:
+ {
+ if( len > sizeof( tracy::BroadcastMessage_v2 ) ) continue;
+ tracy::BroadcastMessage_v2 bm;
+ memcpy( &bm, msg, len );
+ protoVer = bm.protocolVersion;
+ strcpy( procname, bm.programName );
+ activeTime = bm.activeTime;
+ listenPort = bm.listenPort;
+ pid = 0;
+ break;
+ }
+ case 1:
+ {
+ if( len > sizeof( tracy::BroadcastMessage_v1 ) ) continue;
+ tracy::BroadcastMessage_v1 bm;
+ memcpy( &bm, msg, len );
+ protoVer = bm.protocolVersion;
+ strcpy( procname, bm.programName );
+ activeTime = bm.activeTime;
+ listenPort = bm.listenPort;
+ pid = 0;
+ break;
+ }
+ case 0:
+ {
+ if( len > sizeof( tracy::BroadcastMessage_v0 ) ) continue;
+ tracy::BroadcastMessage_v0 bm;
+ memcpy( &bm, msg, len );
+ protoVer = bm.protocolVersion;
+ strcpy( procname, bm.programName );
+ activeTime = bm.activeTime;
+ listenPort = 8086;
+ pid = 0;
+ break;
+ }
+ default:
+ assert( false );
+ break;
+ }
+
+ auto address = addr.GetText();
const auto ipNumerical = addr.GetNumber();
const auto clientId = uint64_t( ipNumerical ) | ( uint64_t( listenPort ) << 32 );
auto it = clients.find( clientId );
diff --git a/public/common/TracyProtocol.hpp b/public/common/TracyProtocol.hpp
index d73840b2..dd30e539 100644
--- a/public/common/TracyProtocol.hpp
+++ b/public/common/TracyProtocol.hpp
@@ -131,7 +131,36 @@ struct BroadcastMessage
char programName[WelcomeMessageProgramNameSize];
};
+struct BroadcastMessage_v2
+{
+ uint16_t broadcastVersion;
+ uint16_t listenPort;
+ uint32_t protocolVersion;
+ int32_t activeTime;
+ char programName[WelcomeMessageProgramNameSize];
+};
+
+struct BroadcastMessage_v1
+{
+ uint32_t broadcastVersion;
+ uint32_t protocolVersion;
+ uint32_t listenPort;
+ uint32_t activeTime;
+ char programName[WelcomeMessageProgramNameSize];
+};
+
+struct BroadcastMessage_v0
+{
+ uint32_t broadcastVersion;
+ uint32_t protocolVersion;
+ uint32_t activeTime;
+ char programName[WelcomeMessageProgramNameSize];
+};
+
enum { BroadcastMessageSize = sizeof( BroadcastMessage ) };
+enum { BroadcastMessageSize_v2 = sizeof( BroadcastMessage_v2 ) };
+enum { BroadcastMessageSize_v1 = sizeof( BroadcastMessage_v1 ) };
+enum { BroadcastMessageSize_v0 = sizeof( BroadcastMessage_v0 ) };
#pragma pack( pop )