void CoreConnection::solidNetworkStatusChanged(Solid::Networking::Status status) { CoreConnectionSettings s; if (s.networkDetectionMode() != CoreConnectionSettings::UseSolid) return; switch (status) { case Solid::Networking::Unknown: case Solid::Networking::Connected: //qDebug() << "Solid: Network status changed to connected or unknown"; if (state() == Disconnected) { if (_wantReconnect && s.autoReconnect()) { reconnectToCore(); } } break; case Solid::Networking::Disconnecting: case Solid::Networking::Unconnected: if (state() != Disconnected && !isLocalConnection()) disconnectFromCore(tr("Network is down"), true); break; default: break; } }
void NetConnection::checkMaxRate() { // Enforce some minimum limits to the network settings. gPacketRateToServer = getMax( gPacketRateToServer, (U32)8 ); gPacketRateToClient = getMax( gPacketRateToClient, (U32)1 ); gPacketSize = getMax( gPacketSize, (U32)100 ); U32 packetRateToServer = gPacketRateToServer; U32 packetRateToClient = gPacketRateToClient; U32 packetSize = gPacketSize; if (isLocalConnection()) { packetRateToServer = 128; packetRateToClient = 128; packetSize = 1024; } gPacketUpdateDelayToServer = 1024 / packetRateToServer; U32 toClientUpdateDelay = 1024 / packetRateToClient; if(mMaxRate.updateDelay != toClientUpdateDelay || mMaxRate.packetSize != packetSize) { mMaxRate.updateDelay = toClientUpdateDelay; mMaxRate.packetSize = packetSize; mMaxRate.changed = true; } }
void GhostConnection::objectInScope(NetObject *obj) { if (!mScoping || !doesGhostFrom()) return; if (!obj->isGhostable() || (obj->isScopeLocal() && !isLocalConnection())) return; S32 index = obj->getHashId() & GhostLookupTableMask; // check if it's already in scope // the object may have been cleared out without the lookupTable being cleared // so validate that the object pointers are the same. for(GhostInfo *walk = mGhostLookupTable[index ]; walk; walk = walk->nextLookupInfo) { if(walk->obj != obj) continue; walk->flags |= GhostInfo::InScope; return; } if (mGhostFreeIndex == MaxGhostCount) return; GhostInfo *giptr = mGhostArray[mGhostFreeIndex]; ghostPushFreeToZero(giptr); giptr->updateMask = 0xFFFFFFFF; ghostPushNonZero(giptr); giptr->flags = GhostInfo::NotYetGhosted | GhostInfo::InScope; giptr->obj = obj; giptr->lastUpdateChain = NULL; giptr->updateSkipCount = 0; giptr->connection = this; giptr->nextObjectRef = obj->mFirstObjectRef; if(obj->mFirstObjectRef) obj->mFirstObjectRef->prevObjectRef = giptr; giptr->prevObjectRef = NULL; obj->mFirstObjectRef = giptr; giptr->nextLookupInfo = mGhostLookupTable[index]; mGhostLookupTable[index] = giptr; //TNLAssert(validateGhostArray(), "Invalid ghost array!"); }
void CoreConnection::onlineStateChanged(bool isOnline) { CoreConnectionSettings s; if (s.networkDetectionMode() != CoreConnectionSettings::UseQNetworkConfigurationManager) return; if(isOnline) { // qDebug() << "QNetworkConfigurationManager reports Online"; if (state() == Disconnected) { if (_wantReconnect && s.autoReconnect()) { reconnectToCore(); } } } else { // qDebug() << "QNetworkConfigurationManager reports Offline"; if (state() != Disconnected && !isLocalConnection()) disconnectFromCore(tr("Network is down"), true); } }
static void web(SOCKET fd){ // This gets run after we fork() for the client request long rc; char buffer[BUFSIZE+1]; rc = read(fd, buffer, BUFSIZE); if (rc < 0){ logMsg(LOG_ERR, "read() returned %d, %s", rc, strerror(errno)); exit(1); } else if (rc == 0){ logMsg(LOG_ERR, "read() returned 0"); exit(1); } else if(rc > BUFSIZE){ logMsg(LOG_ERR, "read() returned %d which is larger than buffer size of %d", rc, BUFSIZE); exit(1); } int allowAdmin = isLocalConnection(fd) || allowRemoteAdmin; processRequest(fd, buffer, allowAdmin); exit(0); }