Merge branch 'master' into careminster-presence-refactor
commit
89a003c6fc
|
@ -0,0 +1,324 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using log4net;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Statistics;
|
||||||
|
|
||||||
|
using OpenSim.Services.Connectors;
|
||||||
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
|
||||||
|
{
|
||||||
|
public class RemoteXInventoryServicesConnector : BaseInventoryConnector, ISharedRegionModule, IInventoryService
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log =
|
||||||
|
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private bool m_Enabled = false;
|
||||||
|
private bool m_Initialized = false;
|
||||||
|
private Scene m_Scene;
|
||||||
|
private XInventoryServicesConnector m_RemoteConnector;
|
||||||
|
|
||||||
|
public Type ReplaceableInterface
|
||||||
|
{
|
||||||
|
get { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get { return "RemoteXInventoryServicesConnector"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public RemoteXInventoryServicesConnector()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public RemoteXInventoryServicesConnector(IConfigSource source)
|
||||||
|
{
|
||||||
|
Init(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Init(IConfigSource source)
|
||||||
|
{
|
||||||
|
m_RemoteConnector = new XInventoryServicesConnector(source);
|
||||||
|
base.Init(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#region ISharedRegionModule
|
||||||
|
|
||||||
|
public void Initialise(IConfigSource source)
|
||||||
|
{
|
||||||
|
IConfig moduleConfig = source.Configs["Modules"];
|
||||||
|
if (moduleConfig != null)
|
||||||
|
{
|
||||||
|
string name = moduleConfig.GetString("InventoryServices", "");
|
||||||
|
if (name == Name)
|
||||||
|
{
|
||||||
|
Init(source);
|
||||||
|
m_Enabled = true;
|
||||||
|
|
||||||
|
m_log.Info("[XINVENTORY CONNECTOR]: Remote XInventory enabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PostInitialise()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRegion(Scene scene)
|
||||||
|
{
|
||||||
|
m_Scene = scene;
|
||||||
|
//m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
|
if (!m_Enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!m_Initialized)
|
||||||
|
{
|
||||||
|
m_Initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
scene.RegisterModuleInterface<IInventoryService>(this);
|
||||||
|
m_cache.AddRegion(scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveRegion(Scene scene)
|
||||||
|
{
|
||||||
|
if (!m_Enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_cache.RemoveRegion(scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegionLoaded(Scene scene)
|
||||||
|
{
|
||||||
|
if (!m_Enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_log.InfoFormat("[XINVENTORY CONNECTOR]: Enabled remote XInventory for region {0}", scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion ISharedRegionModule
|
||||||
|
|
||||||
|
#region IInventoryService
|
||||||
|
|
||||||
|
public override bool CreateUserInventory(UUID user)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
|
||||||
|
{
|
||||||
|
return new List<InventoryFolderBase>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override InventoryCollection GetUserInventory(UUID userID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_RemoteConnector.GetUserInventory(userID, callback);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (StatsManager.SimExtraStats != null)
|
||||||
|
StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();
|
||||||
|
|
||||||
|
m_log.ErrorFormat("[XINVENTORY CONNECTOR]: Request inventory operation failed, {0} {1}",
|
||||||
|
e.Source, e.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// inherited. See base class
|
||||||
|
// public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
|
||||||
|
|
||||||
|
public override Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID)
|
||||||
|
{
|
||||||
|
return m_RemoteConnector.GetSystemFolders(userID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override InventoryCollection GetFolderContent(UUID userID, UUID folderID)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return m_RemoteConnector.GetFolderContent(userID, folderID);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat("[XINVENTORY CONNECTOR]: GetFolderContent operation failed, {0} {1}",
|
||||||
|
e.Source, e.Message);
|
||||||
|
}
|
||||||
|
InventoryCollection nullCollection = new InventoryCollection();
|
||||||
|
nullCollection.Folders = new List<InventoryFolderBase>();
|
||||||
|
nullCollection.Items = new List<InventoryItemBase>();
|
||||||
|
nullCollection.UserID = userID;
|
||||||
|
return nullCollection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
|
||||||
|
{
|
||||||
|
return m_RemoteConnector.GetFolderItems(userID, folderID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool AddFolder(InventoryFolderBase folder)
|
||||||
|
{
|
||||||
|
if (folder == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.AddFolder(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UpdateFolder(InventoryFolderBase folder)
|
||||||
|
{
|
||||||
|
if (folder == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.UpdateFolder(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool MoveFolder(InventoryFolderBase folder)
|
||||||
|
{
|
||||||
|
if (folder == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.MoveFolder(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
|
||||||
|
{
|
||||||
|
if (folderIDs == null)
|
||||||
|
return false;
|
||||||
|
if (folderIDs.Count == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.DeleteFolders(ownerID, folderIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override bool PurgeFolder(InventoryFolderBase folder)
|
||||||
|
{
|
||||||
|
if (folder == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.PurgeFolder(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
// public bool AddItem(InventoryItemBase item) inherited
|
||||||
|
// Uses AddItemPlain
|
||||||
|
|
||||||
|
protected override bool AddItemPlain(InventoryItemBase item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.AddItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UpdateItem(InventoryItemBase item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.UpdateItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
|
||||||
|
{
|
||||||
|
if (items == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_RemoteConnector.MoveItems(ownerID, items);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
|
||||||
|
{
|
||||||
|
if (itemIDs == null)
|
||||||
|
return false;
|
||||||
|
if (itemIDs.Count == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return m_RemoteConnector.DeleteItems(ownerID, itemIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override InventoryItemBase GetItem(InventoryItemBase item)
|
||||||
|
{
|
||||||
|
if (item == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return m_RemoteConnector.GetItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override InventoryFolderBase GetFolder(InventoryFolderBase folder)
|
||||||
|
{
|
||||||
|
if (folder == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return m_RemoteConnector.GetFolder(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool HasInventoryForUser(UUID userID)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override List<InventoryItemBase> GetActiveGestures(UUID userId)
|
||||||
|
{
|
||||||
|
return new List<InventoryItemBase>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetAssetPermissions(UUID userID, UUID assetID)
|
||||||
|
{
|
||||||
|
return m_RemoteConnector.GetAssetPermissions(userID, assetID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -144,6 +144,8 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
return HandleGetActiveGestures(request);
|
return HandleGetActiveGestures(request);
|
||||||
case "GETASSETPERMISSIONS":
|
case "GETASSETPERMISSIONS":
|
||||||
return HandleGetAssetPermissions(request);
|
return HandleGetAssetPermissions(request);
|
||||||
|
case "GETSYSTEMFOLDERS":
|
||||||
|
return HandleGetSystemFolders(request);
|
||||||
}
|
}
|
||||||
m_log.DebugFormat("[XINVENTORY HANDLER]: unknown method request: {0}", method);
|
m_log.DebugFormat("[XINVENTORY HANDLER]: unknown method request: {0}", method);
|
||||||
}
|
}
|
||||||
|
@ -540,6 +542,24 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
return encoding.GetBytes(xmlString);
|
return encoding.GetBytes(xmlString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte[] HandleGetSystemFolders(Dictionary<string, object> request)
|
||||||
|
{
|
||||||
|
Dictionary<string, object> result = new Dictionary<string, object>();
|
||||||
|
UUID principal = UUID.Zero;
|
||||||
|
UUID.TryParse(request["PRINCIPAL"].ToString(), out principal);
|
||||||
|
|
||||||
|
Dictionary<AssetType, InventoryFolderBase> sfolders = GetSystemFolders(principal);
|
||||||
|
|
||||||
|
if (sfolders != null)
|
||||||
|
foreach (KeyValuePair<AssetType, InventoryFolderBase> kvp in sfolders)
|
||||||
|
result[kvp.Key.ToString()] = EncodeFolder(kvp.Value);
|
||||||
|
|
||||||
|
string xmlString = ServerUtils.BuildXmlResponse(result);
|
||||||
|
m_log.DebugFormat("[XXX]: resp string: {0}", xmlString);
|
||||||
|
UTF8Encoding encoding = new UTF8Encoding();
|
||||||
|
return encoding.GetBytes(xmlString);
|
||||||
|
}
|
||||||
|
|
||||||
private Dictionary<string, object> EncodeFolder(InventoryFolderBase f)
|
private Dictionary<string, object> EncodeFolder(InventoryFolderBase f)
|
||||||
{
|
{
|
||||||
Dictionary<string, object> ret = new Dictionary<string, object>();
|
Dictionary<string, object> ret = new Dictionary<string, object>();
|
||||||
|
@ -623,5 +643,31 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Extra
|
||||||
|
private Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID)
|
||||||
|
{
|
||||||
|
InventoryFolderBase root = m_InventoryService.GetRootFolder(userID);
|
||||||
|
if (root != null)
|
||||||
|
{
|
||||||
|
InventoryCollection content = m_InventoryService.GetFolderContent(userID, root.ID);
|
||||||
|
if (content != null)
|
||||||
|
{
|
||||||
|
Dictionary<AssetType, InventoryFolderBase> folders = new Dictionary<AssetType, InventoryFolderBase>();
|
||||||
|
foreach (InventoryFolderBase folder in content.Folders)
|
||||||
|
{
|
||||||
|
if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown))
|
||||||
|
folders[(AssetType)folder.Type] = folder;
|
||||||
|
}
|
||||||
|
// Put the root folder there, as type Folder
|
||||||
|
folders[AssetType.Folder] = root;
|
||||||
|
return folders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_log.WarnFormat("[INVENTORY SERVICE]: System folders for {0} not found", userID);
|
||||||
|
return new Dictionary<AssetType, InventoryFolderBase>();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,9 @@ namespace OpenSim.Server.Handlers.Login
|
||||||
string last = requestData["last"].ToString();
|
string last = requestData["last"].ToString();
|
||||||
string passwd = requestData["passwd"].ToString();
|
string passwd = requestData["passwd"].ToString();
|
||||||
string startLocation = string.Empty;
|
string startLocation = string.Empty;
|
||||||
|
UUID scopeID = UUID.Zero;
|
||||||
|
if (requestData["scope_id"] != null)
|
||||||
|
scopeID = new UUID(requestData["scope_id"].ToString());
|
||||||
if (requestData.ContainsKey("start"))
|
if (requestData.ContainsKey("start"))
|
||||||
startLocation = requestData["start"].ToString();
|
startLocation = requestData["start"].ToString();
|
||||||
|
|
||||||
|
@ -83,7 +86,7 @@ namespace OpenSim.Server.Handlers.Login
|
||||||
m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion);
|
m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion);
|
||||||
|
|
||||||
LoginResponse reply = null;
|
LoginResponse reply = null;
|
||||||
reply = m_LocalService.Login(first, last, passwd, startLocation, remoteClient);
|
reply = m_LocalService.Login(first, last, passwd, startLocation, scopeID, remoteClient);
|
||||||
|
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
response.Value = reply.ToHashtable();
|
response.Value = reply.ToHashtable();
|
||||||
|
@ -109,10 +112,15 @@ namespace OpenSim.Server.Handlers.Login
|
||||||
if (map.ContainsKey("start"))
|
if (map.ContainsKey("start"))
|
||||||
startLocation = map["start"].AsString();
|
startLocation = map["start"].AsString();
|
||||||
|
|
||||||
|
UUID scopeID = UUID.Zero;
|
||||||
|
|
||||||
|
if (map.ContainsKey("scope_id"))
|
||||||
|
scopeID = new UUID(map["scope_id"].AsString());
|
||||||
|
|
||||||
m_log.Info("[LOGIN]: LLSD Login Requested for: '" + map["first"].AsString() + "' '" + map["last"].AsString() + "' / " + startLocation);
|
m_log.Info("[LOGIN]: LLSD Login Requested for: '" + map["first"].AsString() + "' '" + map["last"].AsString() + "' / " + startLocation);
|
||||||
|
|
||||||
LoginResponse reply = null;
|
LoginResponse reply = null;
|
||||||
reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, remoteClient);
|
reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, scopeID, remoteClient);
|
||||||
return reply.ToOSDMap();
|
return reply.ToOSDMap();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -455,6 +455,35 @@ namespace OpenSim.Services.Connectors
|
||||||
return int.Parse(ret["RESULT"].ToString());
|
return int.Parse(ret["RESULT"].ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Dictionary<AssetType, InventoryFolderBase> GetSystemFolders(UUID userID)
|
||||||
|
{
|
||||||
|
Dictionary<string, object> ret = MakeRequest("GETSYSTEMFOLDERS",
|
||||||
|
new Dictionary<string, object> {
|
||||||
|
{ "PRINCIPAL", userID.ToString() },
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ret == null)
|
||||||
|
return new Dictionary<AssetType,InventoryFolderBase>();
|
||||||
|
|
||||||
|
Dictionary<AssetType, InventoryFolderBase> sfolders = new Dictionary<AssetType, InventoryFolderBase>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (KeyValuePair<string, object> kvp in ret)
|
||||||
|
{
|
||||||
|
InventoryFolderBase folder = BuildFolder((Dictionary<string, object>)(kvp.Value));
|
||||||
|
short type = 0;
|
||||||
|
if (Int16.TryParse(kvp.Key, out type))
|
||||||
|
sfolders.Add((AssetType)type, folder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[XINVENTORY CONNECTOR STUB]: exception {0}", e.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sfolders;
|
||||||
|
}
|
||||||
|
|
||||||
// These are either obsolete or unused
|
// These are either obsolete or unused
|
||||||
//
|
//
|
||||||
|
|
|
@ -31,6 +31,7 @@ using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Services.Interfaces
|
namespace OpenSim.Services.Interfaces
|
||||||
{
|
{
|
||||||
|
@ -46,7 +47,7 @@ namespace OpenSim.Services.Interfaces
|
||||||
|
|
||||||
public interface ILoginService
|
public interface ILoginService
|
||||||
{
|
{
|
||||||
LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, IPEndPoint clientIP);
|
LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, IPEndPoint clientIP)
|
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
UUID session = UUID.Random();
|
UUID session = UUID.Random();
|
||||||
|
@ -157,7 +157,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
//
|
//
|
||||||
// Get the account and check that it exists
|
// Get the account and check that it exists
|
||||||
//
|
//
|
||||||
UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, firstName, lastName);
|
UserAccount account = m_UserAccountService.GetUserAccount(scopeID, firstName, lastName);
|
||||||
if (account == null)
|
if (account == null)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found");
|
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found");
|
||||||
|
@ -170,6 +170,22 @@ namespace OpenSim.Services.LLLoginService
|
||||||
return LLFailedLoginResponse.LoginBlockedProblem;
|
return LLFailedLoginResponse.LoginBlockedProblem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a scope id is requested, check that the account is in
|
||||||
|
// that scope, or unscoped.
|
||||||
|
//
|
||||||
|
if (scopeID != UUID.Zero)
|
||||||
|
{
|
||||||
|
if (account.ScopeID != scopeID && account.ScopeID != UUID.Zero)
|
||||||
|
{
|
||||||
|
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found");
|
||||||
|
return LLFailedLoginResponse.UserProblem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scopeID = account.ScopeID;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Authenticate this user
|
// Authenticate this user
|
||||||
//
|
//
|
||||||
|
@ -219,7 +235,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
// Get the home region
|
// Get the home region
|
||||||
if ((presence.HomeRegionID != UUID.Zero) && m_GridService != null)
|
if ((presence.HomeRegionID != UUID.Zero) && m_GridService != null)
|
||||||
{
|
{
|
||||||
home = m_GridService.GetRegionByUUID(account.ScopeID, presence.HomeRegionID);
|
home = m_GridService.GetRegionByUUID(scopeID, presence.HomeRegionID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +246,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
Vector3 position = Vector3.Zero;
|
Vector3 position = Vector3.Zero;
|
||||||
Vector3 lookAt = Vector3.Zero;
|
Vector3 lookAt = Vector3.Zero;
|
||||||
GridRegion gatekeeper = null;
|
GridRegion gatekeeper = null;
|
||||||
GridRegion destination = FindDestination(account, presence, session, startLocation, out gatekeeper, out where, out position, out lookAt);
|
GridRegion destination = FindDestination(account, scopeID, presence, session, startLocation, out gatekeeper, out where, out position, out lookAt);
|
||||||
if (destination == null)
|
if (destination == null)
|
||||||
{
|
{
|
||||||
m_PresenceService.LogoutAgent(session, presence.Position, presence.LookAt);
|
m_PresenceService.LogoutAgent(session, presence.Position, presence.LookAt);
|
||||||
|
@ -286,7 +302,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected GridRegion FindDestination(UserAccount account, PresenceInfo pinfo, UUID sessionID, string startLocation, out GridRegion gatekeeper, out string where, out Vector3 position, out Vector3 lookAt)
|
protected GridRegion FindDestination(UserAccount account, UUID scopeID, PresenceInfo pinfo, UUID sessionID, string startLocation, out GridRegion gatekeeper, out string where, out Vector3 position, out Vector3 lookAt)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[LLOGIN SERVICE]: FindDestination for start location {0}", startLocation);
|
m_log.DebugFormat("[LLOGIN SERVICE]: FindDestination for start location {0}", startLocation);
|
||||||
|
|
||||||
|
@ -318,7 +334,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
region = m_GridService.GetRegionByUUID(account.ScopeID, pinfo.HomeRegionID);
|
region = m_GridService.GetRegionByUUID(scopeID, pinfo.HomeRegionID);
|
||||||
|
|
||||||
if (null == region)
|
if (null == region)
|
||||||
{
|
{
|
||||||
|
@ -332,7 +348,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
|
|
||||||
if (tryDefaults)
|
if (tryDefaults)
|
||||||
{
|
{
|
||||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -342,7 +358,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[LLOGIN SERVICE]: User {0} {1} does not have a valid home and this grid does not have default locations. Attempting to find random region",
|
m_log.WarnFormat("[LLOGIN SERVICE]: User {0} {1} does not have a valid home and this grid does not have default locations. Attempting to find random region",
|
||||||
account.FirstName, account.LastName);
|
account.FirstName, account.LastName);
|
||||||
defaults = m_GridService.GetRegionsByName(account.ScopeID, "", 1);
|
defaults = m_GridService.GetRegionsByName(scopeID, "", 1);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -363,9 +379,9 @@ namespace OpenSim.Services.LLLoginService
|
||||||
|
|
||||||
GridRegion region = null;
|
GridRegion region = null;
|
||||||
|
|
||||||
if (pinfo.RegionID.Equals(UUID.Zero) || (region = m_GridService.GetRegionByUUID(account.ScopeID, pinfo.RegionID)) == null)
|
if (pinfo.RegionID.Equals(UUID.Zero) || (region = m_GridService.GetRegionByUUID(scopeID, pinfo.RegionID)) == null)
|
||||||
{
|
{
|
||||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -374,7 +390,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[LLOGIN SERVICE]: Last Region Not Found Attempting to find random region");
|
m_log.Info("[LLOGIN SERVICE]: Last Region Not Found Attempting to find random region");
|
||||||
defaults = m_GridService.GetRegionsByName(account.ScopeID, "", 1);
|
defaults = m_GridService.GetRegionsByName(scopeID, "", 1);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -414,11 +430,11 @@ namespace OpenSim.Services.LLLoginService
|
||||||
{
|
{
|
||||||
if (!regionName.Contains("@"))
|
if (!regionName.Contains("@"))
|
||||||
{
|
{
|
||||||
List<GridRegion> regions = m_GridService.GetRegionsByName(account.ScopeID, regionName, 1);
|
List<GridRegion> regions = m_GridService.GetRegionsByName(scopeID, regionName, 1);
|
||||||
if ((regions == null) || (regions != null && regions.Count == 0))
|
if ((regions == null) || (regions != null && regions.Count == 0))
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[LLLOGIN SERVICE]: Got Custom Login URI {0}, can't locate region {1}. Trying defaults.", startLocation, regionName);
|
m_log.InfoFormat("[LLLOGIN SERVICE]: Got Custom Login URI {0}, can't locate region {1}. Trying defaults.", startLocation, regionName);
|
||||||
regions = m_GridService.GetDefaultRegions(UUID.Zero);
|
regions = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (regions != null && regions.Count > 0)
|
if (regions != null && regions.Count > 0)
|
||||||
{
|
{
|
||||||
where = "safe";
|
where = "safe";
|
||||||
|
@ -461,7 +477,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
where = "safe";
|
where = "safe";
|
||||||
|
|
Loading…
Reference in New Issue