MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / acceptConnection

Method acceptConnection

source/game/StarUniverseServer.cpp:1602–1877  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1600}
1601
1602void UniverseServer::acceptConnection(UniverseConnection connection, Maybe<HostAddress> remoteAddress) {
1603 auto& root = Root::singleton();
1604 auto assets = root.assets();
1605 auto configuration = root.configuration();
1606 auto versioningDatabase = root.versioningDatabase();
1607
1608 int clientWaitLimit = assets->json("/universe_server.config:clientWaitLimit").toInt();
1609 String serverAssetsMismatchMessage = assets->json("/universe_server.config:serverAssetsMismatchMessage").toString();
1610 String clientAssetsMismatchMessage = assets->json("/universe_server.config:clientAssetsMismatchMessage").toString();
1611 auto connectionSettings = configuration->get("connectionSettings");
1612
1613 RecursiveMutexLocker mainLocker(m_mainLock, false);
1614
1615 connection.receiveAny(clientWaitLimit);
1616 auto protocolRequest = as<ProtocolRequestPacket>(connection.pullSingle());
1617 if (!protocolRequest) {
1618 Logger::warn("UniverseServer: client connection aborted, expected ProtocolRequestPacket");
1619 return;
1620 }
1621
1622 bool legacyClient = protocolRequest->compressionMode() != PacketCompressionMode::Enabled;
1623 if (legacyClient)
1624 connection.packetSocket().setNetRules(LegacyVersion);
1625
1626 auto protocolResponse = make_shared<ProtocolResponsePacket>();
1627 protocolResponse->setCompressionMode(PacketCompressionMode::Enabled); // Signal that we're OpenStarbound
1628 if (protocolRequest->requestProtocolVersion != StarProtocolVersion) {
1629 Logger::warn("UniverseServer: client connection aborted, unsupported protocol version {}, supported version {}",
1630 protocolRequest->requestProtocolVersion, StarProtocolVersion);
1631 protocolResponse->allowed = false;
1632 connection.pushSingle(protocolResponse);
1633 connection.sendAll(clientWaitLimit);
1634 mainLocker.lock();
1635 m_deadConnections.append({std::move(connection), Time::monotonicMilliseconds()});
1636 return;
1637 }
1638
1639 bool useCompressionStream = false;
1640 protocolResponse->allowed = true;
1641 if (!legacyClient) {
1642 auto compressionName = connectionSettings.getString("compression", "None");
1643 auto compressionMode = NetCompressionModeNames.maybeLeft(compressionName).value(NetCompressionMode::None);
1644 useCompressionStream = compressionMode == NetCompressionMode::Zstd;
1645 protocolResponse->info = JsonObject{
1646 {"compression", NetCompressionModeNames.getRight(compressionMode)},
1647 {"openProtocolVersion", OpenProtocolVersion}
1648 };
1649 }
1650 connection.pushSingle(protocolResponse);
1651 connection.sendAll(clientWaitLimit);
1652
1653 if (auto compressedSocket = as<CompressedPacketSocket>(&connection.packetSocket()))
1654 compressedSocket->setCompressionStreamEnabled(useCompressionStream);
1655
1656 String remoteAddressString = remoteAddress ? toString(*remoteAddress) : "local";
1657 Logger::info("UniverseServer: Awaiting connection info from {} ({} client)", remoteAddressString, legacyClient ? "vanilla" : "custom");
1658
1659 connection.receiveAny(clientWaitLimit);

Callers

nothing calls this directly

Calls 15

singletonClass · 0.85
toStringFunction · 0.85
strfFunction · 0.85
StringClass · 0.85
sha256Function · 0.85
errorFunction · 0.85
makeLeftFunction · 0.85
makeRightFunction · 0.85
InstanceWorldIdClass · 0.85
parseWarpActionFunction · 0.85
assetsMethod · 0.80
configurationMethod · 0.80

Tested by

no test coverage detected