Ejemplo n.º 1
0
  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;
    }
  }