bool Beacon::StartActiveSession(const IpAddr &remoteAddr, const IpAddr &localAddr) { Session *session = NULL; LogAssert(m_scheduler->IsMainThread()); session = findInSourceMap(remoteAddr, localAddr); if (session) { if (session->IsActiveSession()) return true; if (!session->UpgradeToActiveSession()) { LogOptional(Log::Session, "Failed to upgrade Session id=%u for %s to %s is to an active session.", session->GetId(), localAddr.ToString(), remoteAddr.ToString() ); return false; } LogOptional(Log::Session, "Session id=%u for %s to %s is now an active session.", session->GetId(), localAddr.ToString(), remoteAddr.ToString() ); return true; } else { session = addSession(remoteAddr, localAddr); if (!session) return false; LogOptional(Log::Session, "Manually added new session for %s to %s id=%u.", localAddr.ToString(), remoteAddr.ToString(), session->GetId()); if (!session->StartActiveSession(remoteAddr, localAddr)) { LogOptional(Log::Session, "Failed to start active session id=%u for %s to %s.", session->GetId(), localAddr.ToString(), remoteAddr.ToString() ); return false; } LogOptional(Log::Session, "Session id=%u for %s to %s is started as an active session.", session->GetId(), localAddr.ToString(), remoteAddr.ToString() ); return true; } }