using System;
using System.Collections.Generic;
using System.Net;
using System.Reflection;
using OpenSim.Services.Interfaces;
using OpenMetaverse;
using log4net;
using Nini.Config;
namespace OpenSim.Services.HypergridService
{
///
/// This service is for HG1.5 only, to make up for the fact that clients don't
/// keep any private information in themselves, and that their 'home service'
/// needs to do it for them.
/// Once we have better clients, this shouldn't be needed.
///
public class HomeUsersSecurityService : IHomeUsersSecurityService
{
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
//
// This is a persistent storage wannabe for dealing with the
// quirks of HG1.5. We don't really want to store this in a table.
// But this is the necessary information for securing clients
// coming home.
//
protected static Dictionary m_ClientEndPoints = new Dictionary();
public HomeUsersSecurityService(IConfigSource config)
{
m_log.DebugFormat("[HOME USERS SECURITY]: Starting...");
}
public void SetEndPoint(UUID sessionID, IPEndPoint ep)
{
m_log.DebugFormat("[HOME USERS SECURITY]: Set EndPoint {0} for session {1}", ep.ToString(), sessionID);
lock (m_ClientEndPoints)
m_ClientEndPoints[sessionID] = ep;
}
public IPEndPoint GetEndPoint(UUID sessionID)
{
lock (m_ClientEndPoints)
if (m_ClientEndPoints.ContainsKey(sessionID))
{
m_log.DebugFormat("[HOME USERS SECURITY]: Get EndPoint {0} for session {1}", m_ClientEndPoints[sessionID].ToString(), sessionID);
return m_ClientEndPoints[sessionID];
}
return null;
}
public void RemoveEndPoint(UUID sessionID)
{
m_log.DebugFormat("[HOME USERS SECURITY]: Remove EndPoint for session {0}", sessionID);
lock (m_ClientEndPoints)
if (m_ClientEndPoints.ContainsKey(sessionID))
m_ClientEndPoints.Remove(sessionID);
}
}
}