improve unique host ID creation

This commit is contained in:
badaix 2017-06-05 22:23:45 +02:00
parent fa3f78b08d
commit 5bf78eb874
5 changed files with 22 additions and 8 deletions

View file

@ -182,9 +182,12 @@ void Controller::worker()
{
clientConnection_->start();
msg::Hello hello(clientConnection_->getMacAddress(), instance_);
/// Say hello to the server
string macAddress = clientConnection_->getMacAddress();
msg::Hello hello(macAddress, ::getHostId(macAddress), instance_);
clientConnection_->send(&hello);
/// Do initial time sync with the server
msg::Time timeReq;
for (size_t n=0; n<50 && active_; ++n)
{
@ -197,6 +200,7 @@ void Controller::worker()
}
logO << "diff to server [ms]: " << (float)TimeProvider::getInstance().getDiffToServer<chronos::usec>().count() / 1000.f << "\n";
/// Main loop
while (active_)
{
for (size_t n=0; n<10 && active_; ++n)

View file

@ -39,7 +39,8 @@
/// Forwards PCM data to the audio player
/**
* Sets up a connection to the server (using ClientConnection)
* Sets up the audio decoder and player. Decodes audio feeds PCM to the audio stream buffer
* Sets up the audio decoder and player.
* Decodes audio (message_type::kWireChunk) and feeds PCM to the audio stream buffer
* Does timesync with the server
*/
class Controller : public MessageReceiver

View file

@ -308,10 +308,12 @@ static std::string getMacAddress(int sock)
}
static std::string getClientId(const std::string defaultId = "")
static std::string getHostId(const std::string defaultId = "")
{
std::string result = defaultId;
if (!result.empty())
/// the Android API will return "02:00:00:00:00:00" for WifiInfo.getMacAddress().
/// Maybe this could also happen with native code
if (!result.empty() && (result != "02:00:00:00:00:00") && (result != "00:00:00:00:00:00"))
return result;
#ifdef ANDROID
@ -320,6 +322,7 @@ static std::string getClientId(const std::string defaultId = "")
return result;
#endif
/// The host name should be unique enough in a LAN
return getHostName();
}

View file

@ -35,7 +35,7 @@ public:
{
}
Hello(const std::string& macAddress, size_t instance) : JsonMessage(message_type::kHello)
Hello(const std::string& macAddress, const std::string& id, size_t instance) : JsonMessage(message_type::kHello)
{
msg["MAC"] = macAddress;
msg["HostName"] = ::getHostName();
@ -44,6 +44,7 @@ public:
msg["OS"] = ::getOS();
msg["Arch"] = ::getArch();
msg["Instance"] = instance;
msg["ID"] = id;
msg["SnapStreamProtocolVersion"] = 2;
}
@ -91,9 +92,14 @@ public:
return get("SnapStreamProtocolVersion", 1);
}
std::string getClientId() const
std::string getId() const
{
std::string id = getMacAddress();
return get("ID", getMacAddress());
}
std::string getUniqueId() const
{
std::string id = getId();
int instance = getInstance();
if (instance != 1)
{

View file

@ -467,7 +467,7 @@ void StreamServer::onMessageReceived(StreamSession* connection, const msg::BaseM
{
msg::Hello helloMsg;
helloMsg.deserialize(baseMessage, buffer);
connection->clientId = helloMsg.getClientId();
connection->clientId = helloMsg.getUniqueId();
logO << "Hello from " << connection->clientId << ", host: " << helloMsg.getHostName() << ", v" << helloMsg.getVersion()
<< ", ClientName: " << helloMsg.getClientName() << ", OS: " << helloMsg.getOS() << ", Arch: " << helloMsg.getArch()
<< ", Protocol version: " << helloMsg.getProtocolVersion() << "\n";