Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
d0dfb744b2
OpenSim
Addons
OfflineIM/Remote
Capabilities
Handlers
AvatarPickerSearch
GetTexture
Region
Application
ClientStack/Linden/Caps
CoreModules
Avatar
Framework/Caps
World/Estate
Framework/Scenes
OptionalModules
Materials
ViewerSupport
World/WorldView
Physics
BulletSPlugin
OdePlugin
Server/Handlers
Authentication
Authorization
Friends
GridUser
Neighbour
Presence
Simulation
UserAccounts
Services/HypergridService
|
@ -485,7 +485,7 @@ namespace OpenSim.Groups
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//// 16 bytes are the UUID. Maybe.
|
//// 16 bytes are the UUID. Maybe.
|
||||||
UUID folderID = new UUID(im.binaryBucket, 0);
|
// UUID folderID = new UUID(im.binaryBucket, 0);
|
||||||
UUID noticeID = new UUID(im.imSessionID);
|
UUID noticeID = new UUID(im.imSessionID);
|
||||||
|
|
||||||
GroupNoticeInfo notice = m_groupData.GetGroupNotice(remoteClient.AgentId.ToString(), noticeID);
|
GroupNoticeInfo notice = m_groupData.GetGroupNotice(remoteClient.AgentId.ToString(), noticeID);
|
||||||
|
|
|
@ -543,7 +543,6 @@ namespace OpenSim.Groups
|
||||||
List<string> urls = new List<string>();
|
List<string> urls = new List<string>();
|
||||||
foreach (GroupMembersData m in members)
|
foreach (GroupMembersData m in members)
|
||||||
{
|
{
|
||||||
UUID userID = UUID.Zero;
|
|
||||||
if (!m_UserManagement.IsLocalGridUser(m.AgentID))
|
if (!m_UserManagement.IsLocalGridUser(m.AgentID))
|
||||||
{
|
{
|
||||||
string gURL = m_UserManagement.GetUserServerURL(m.AgentID, "GroupsServerURI");
|
string gURL = m_UserManagement.GetUserServerURL(m.AgentID, "GroupsServerURI");
|
||||||
|
|
|
@ -47,7 +47,6 @@ namespace OpenSim.Groups
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private HGGroupsService m_GroupsService;
|
private HGGroupsService m_GroupsService;
|
||||||
private string m_HomeURI = string.Empty;
|
|
||||||
private string m_ConfigName = "Groups";
|
private string m_ConfigName = "Groups";
|
||||||
|
|
||||||
// Called by Robust shell
|
// Called by Robust shell
|
||||||
|
@ -113,7 +112,7 @@ namespace OpenSim.Groups
|
||||||
m_GroupsService = service;
|
m_GroupsService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
@ -209,7 +208,6 @@ namespace OpenSim.Groups
|
||||||
UUID groupID = new UUID(request["GroupID"].ToString());
|
UUID groupID = new UUID(request["GroupID"].ToString());
|
||||||
string agentID = request["AgentID"].ToString();
|
string agentID = request["AgentID"].ToString();
|
||||||
string token = request["AccessToken"].ToString();
|
string token = request["AccessToken"].ToString();
|
||||||
string reason = string.Empty;
|
|
||||||
|
|
||||||
m_GroupsService.RemoveAgentFromGroup(agentID, agentID, groupID, token);
|
m_GroupsService.RemoveAgentFromGroup(agentID, agentID, groupID, token);
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ namespace OpenSim.Groups
|
||||||
m_GroupsService = service;
|
m_GroupsService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
@ -269,7 +269,6 @@ namespace OpenSim.Groups
|
||||||
UUID groupID = new UUID(request["GroupID"].ToString());
|
UUID groupID = new UUID(request["GroupID"].ToString());
|
||||||
string agentID = request["AgentID"].ToString();
|
string agentID = request["AgentID"].ToString();
|
||||||
string requestingAgentID = request["RequestingAgentID"].ToString();
|
string requestingAgentID = request["RequestingAgentID"].ToString();
|
||||||
string reason = string.Empty;
|
|
||||||
|
|
||||||
m_GroupsService.RemoveAgentFromGroup(requestingAgentID, agentID, groupID);
|
m_GroupsService.RemoveAgentFromGroup(requestingAgentID, agentID, groupID);
|
||||||
}
|
}
|
||||||
|
@ -500,7 +499,6 @@ namespace OpenSim.Groups
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string op = request["OP"].ToString();
|
string op = request["OP"].ToString();
|
||||||
string reason = string.Empty;
|
|
||||||
|
|
||||||
bool success = false;
|
bool success = false;
|
||||||
if (op == "ADD")
|
if (op == "ADD")
|
||||||
|
@ -568,7 +566,6 @@ namespace OpenSim.Groups
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string op = request["OP"].ToString();
|
string op = request["OP"].ToString();
|
||||||
string reason = string.Empty;
|
|
||||||
|
|
||||||
if (op == "GROUP")
|
if (op == "GROUP")
|
||||||
{
|
{
|
||||||
|
@ -631,7 +628,6 @@ namespace OpenSim.Groups
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string op = request["OP"].ToString();
|
string op = request["OP"].ToString();
|
||||||
string reason = string.Empty;
|
|
||||||
|
|
||||||
if (op == "ADD" && request.ContainsKey("GroupID") && request.ContainsKey("RoleID") && request.ContainsKey("AgentID"))
|
if (op == "ADD" && request.ContainsKey("GroupID") && request.ContainsKey("RoleID") && request.ContainsKey("AgentID"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,7 +75,7 @@ namespace OpenSim.OfflineIM
|
||||||
m_OfflineIMService = service;
|
m_OfflineIMService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -143,8 +143,8 @@ namespace OpenSim.Framework.Capabilities
|
||||||
/// <param name="handler"></param>
|
/// <param name="handler"></param>
|
||||||
public void RegisterHandler(string capName, IRequestHandler handler)
|
public void RegisterHandler(string capName, IRequestHandler handler)
|
||||||
{
|
{
|
||||||
m_capsHandlers[capName] = handler;
|
|
||||||
//m_log.DebugFormat("[CAPS]: Registering handler for \"{0}\": path {1}", capName, handler.Path);
|
//m_log.DebugFormat("[CAPS]: Registering handler for \"{0}\": path {1}", capName, handler.Path);
|
||||||
|
m_capsHandlers[capName] = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace OpenSim.Framework.Capabilities
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class CapsHandlers
|
public class CapsHandlers
|
||||||
{
|
{
|
||||||
private Dictionary <string, IRequestHandler> m_capsHandlers = new Dictionary<string, IRequestHandler>();
|
private Dictionary<string, IRequestHandler> m_capsHandlers = new Dictionary<string, IRequestHandler>();
|
||||||
private IHttpServer m_httpListener;
|
private IHttpServer m_httpListener;
|
||||||
private string m_httpListenerHostName;
|
private string m_httpListenerHostName;
|
||||||
private uint m_httpListenerPort;
|
private uint m_httpListenerPort;
|
||||||
|
@ -184,5 +184,17 @@ namespace OpenSim.Framework.Capabilities
|
||||||
|
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a copy of the dictionary of all the HTTP cap handlers
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>
|
||||||
|
/// The dictionary copy. The key is the capability name, the value is the HTTP handler.
|
||||||
|
/// </returns>
|
||||||
|
public Dictionary<string, IRequestHandler> GetCapsHandlers()
|
||||||
|
{
|
||||||
|
lock (m_capsHandlers)
|
||||||
|
return new Dictionary<string, IRequestHandler>(m_capsHandlers);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -56,7 +56,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
m_PeopleService = peopleService;
|
m_PeopleService = peopleService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// Try to parse the texture ID from the request URL
|
// Try to parse the texture ID from the request URL
|
||||||
NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
|
NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
|
||||||
|
|
|
@ -64,7 +64,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
m_assetService = assService;
|
m_assetService = assService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// Try to parse the texture ID from the request URL
|
// Try to parse the texture ID from the request URL
|
||||||
NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
|
NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
|
||||||
|
|
|
@ -48,7 +48,7 @@ namespace OpenSim.Framework.Capabilities
|
||||||
m_method = method;
|
m_method = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
//Encoding encoding = Util.UTF8;
|
//Encoding encoding = Util.UTF8;
|
||||||
|
|
|
@ -132,10 +132,6 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
List<string> keysToRemove = null;
|
List<string> keysToRemove = null;
|
||||||
|
|
||||||
// Hard-coded special case that needs to be removed in the future. Normally, modules themselves should
|
|
||||||
// handle reading data from old locations
|
|
||||||
bool osMaterialsMigrationRequired = false;
|
|
||||||
|
|
||||||
OSDMap namespacesMap = daMap.m_map;
|
OSDMap namespacesMap = daMap.m_map;
|
||||||
|
|
||||||
foreach (string key in namespacesMap.Keys)
|
foreach (string key in namespacesMap.Keys)
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* 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 System.IO;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Base handler for writing to an output stream
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Inheriting classes should override ProcessRequest() rather than Handle()
|
||||||
|
/// </remarks>
|
||||||
|
public abstract class BaseOutputStreamHandler : BaseRequestHandler, IRequestHandler
|
||||||
|
{
|
||||||
|
protected BaseOutputStreamHandler(string httpMethod, string path) : this(httpMethod, path, null, null) {}
|
||||||
|
|
||||||
|
protected BaseOutputStreamHandler(string httpMethod, string path, string name, string description)
|
||||||
|
: base(httpMethod, path, name, description) {}
|
||||||
|
|
||||||
|
public virtual void Handle(
|
||||||
|
string path, Stream request, Stream response, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
|
{
|
||||||
|
RequestsReceived++;
|
||||||
|
|
||||||
|
ProcessRequest(path, request, response, httpRequest, httpResponse);
|
||||||
|
|
||||||
|
RequestsHandled++;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void ProcessRequest(
|
||||||
|
string path, Stream request, Stream response, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,6 +31,10 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
public abstract class BaseRequestHandler
|
public abstract class BaseRequestHandler
|
||||||
{
|
{
|
||||||
|
public int RequestsReceived { get; protected set; }
|
||||||
|
|
||||||
|
public int RequestsHandled { get; protected set; }
|
||||||
|
|
||||||
public virtual string ContentType
|
public virtual string ContentType
|
||||||
{
|
{
|
||||||
get { return "application/xml"; }
|
get { return "application/xml"; }
|
||||||
|
|
|
@ -29,14 +29,35 @@ using System.IO;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Servers.HttpServer
|
namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Base streamed request handler.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Inheriting classes should override ProcessRequest() rather than Handle()
|
||||||
|
/// </remarks>
|
||||||
public abstract class BaseStreamHandler : BaseRequestHandler, IStreamedRequestHandler
|
public abstract class BaseStreamHandler : BaseRequestHandler, IStreamedRequestHandler
|
||||||
{
|
{
|
||||||
public abstract byte[] Handle(string path, Stream request,
|
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse);
|
|
||||||
|
|
||||||
protected BaseStreamHandler(string httpMethod, string path) : this(httpMethod, path, null, null) {}
|
protected BaseStreamHandler(string httpMethod, string path) : this(httpMethod, path, null, null) {}
|
||||||
|
|
||||||
protected BaseStreamHandler(string httpMethod, string path, string name, string description)
|
protected BaseStreamHandler(string httpMethod, string path, string name, string description)
|
||||||
: base(httpMethod, path, name, description) {}
|
: base(httpMethod, path, name, description) {}
|
||||||
|
|
||||||
|
public virtual byte[] Handle(
|
||||||
|
string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
|
{
|
||||||
|
RequestsReceived++;
|
||||||
|
|
||||||
|
byte[] result = ProcessRequest(path, request, httpRequest, httpResponse);
|
||||||
|
|
||||||
|
RequestsHandled++;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual byte[] ProcessRequest(
|
||||||
|
string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -45,7 +45,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
m_method = binaryMethod;
|
m_method = binaryMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
byte[] data = ReadFully(request);
|
byte[] data = ReadFully(request);
|
||||||
string param = GetParam(path);
|
string param = GetParam(path);
|
||||||
|
|
|
@ -32,7 +32,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
public interface IRequestHandler
|
public interface IRequestHandler
|
||||||
{
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Name for this handler.
|
/// Name for this handler.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -59,6 +58,19 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
// Return path
|
// Return path
|
||||||
string Path { get; }
|
string Path { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Number of requests received by this handler
|
||||||
|
/// </summary>
|
||||||
|
int RequestsReceived { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Number of requests handled.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Should be equal to RequestsReceived unless requested are being handled slowly or there is deadlock.
|
||||||
|
/// </remarks>
|
||||||
|
int RequestsHandled { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IStreamedRequestHandler : IRequestHandler
|
public interface IStreamedRequestHandler : IRequestHandler
|
||||||
|
@ -69,7 +81,6 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
public interface IStreamHandler : IRequestHandler
|
public interface IStreamHandler : IRequestHandler
|
||||||
{
|
{
|
||||||
// Handle request stream, return byte array
|
|
||||||
void Handle(string path, Stream request, Stream response, IOSHttpRequest httpReqbuest, IOSHttpResponse httpResponse);
|
void Handle(string path, Stream request, Stream response, IOSHttpRequest httpReqbuest, IOSHttpResponse httpResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
{
|
{
|
||||||
public delegate TResponse RestDeserialiseMethod<TRequest, TResponse>(TRequest request);
|
public delegate TResponse RestDeserialiseMethod<TRequest, TResponse>(TRequest request);
|
||||||
|
|
||||||
public class RestDeserialiseHandler<TRequest, TResponse> : BaseRequestHandler, IStreamHandler
|
public class RestDeserialiseHandler<TRequest, TResponse> : BaseOutputStreamHandler, IStreamHandler
|
||||||
where TRequest : new()
|
where TRequest : new()
|
||||||
{
|
{
|
||||||
private RestDeserialiseMethod<TRequest, TResponse> m_method;
|
private RestDeserialiseMethod<TRequest, TResponse> m_method;
|
||||||
|
@ -48,7 +48,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
m_method = method;
|
m_method = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(string path, Stream request, Stream responseStream,
|
protected override void ProcessRequest(string path, Stream request, Stream responseStream,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
TRequest deserial;
|
TRequest deserial;
|
||||||
|
|
|
@ -183,7 +183,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
public delegate bool CheckIdentityMethod(string sid, string aid);
|
public delegate bool CheckIdentityMethod(string sid, string aid);
|
||||||
|
|
||||||
public class RestDeserialiseSecureHandler<TRequest, TResponse> : BaseRequestHandler, IStreamHandler
|
public class RestDeserialiseSecureHandler<TRequest, TResponse> : BaseOutputStreamHandler, IStreamHandler
|
||||||
where TRequest : new()
|
where TRequest : new()
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log
|
private static readonly ILog m_log
|
||||||
|
@ -201,7 +201,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
m_method = method;
|
m_method = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(string path, Stream request, Stream responseStream,
|
protected override void ProcessRequest(string path, Stream request, Stream responseStream,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
RestSessionObject<TRequest> deserial = default(RestSessionObject<TRequest>);
|
RestSessionObject<TRequest> deserial = default(RestSessionObject<TRequest>);
|
||||||
|
@ -237,7 +237,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
|
|
||||||
public delegate bool CheckTrustedSourceMethod(IPEndPoint peer);
|
public delegate bool CheckTrustedSourceMethod(IPEndPoint peer);
|
||||||
|
|
||||||
public class RestDeserialiseTrustedHandler<TRequest, TResponse> : BaseRequestHandler, IStreamHandler
|
public class RestDeserialiseTrustedHandler<TRequest, TResponse> : BaseOutputStreamHandler, IStreamHandler
|
||||||
where TRequest : new()
|
where TRequest : new()
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log
|
private static readonly ILog m_log
|
||||||
|
@ -260,7 +260,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
m_method = method;
|
m_method = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(string path, Stream request, Stream responseStream,
|
protected override void ProcessRequest(string path, Stream request, Stream responseStream,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
TRequest deserial = default(TRequest);
|
TRequest deserial = default(TRequest);
|
||||||
|
@ -293,5 +293,4 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -48,7 +48,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
m_restMethod = restMethod;
|
m_restMethod = restMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
Encoding encoding = Encoding.UTF8;
|
Encoding encoding = Encoding.UTF8;
|
||||||
StreamReader streamReader = new StreamReader(request, encoding);
|
StreamReader streamReader = new StreamReader(request, encoding);
|
||||||
|
|
|
@ -766,7 +766,7 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
public SimStatusHandler() : base("GET", "/simstatus", "SimStatus", "Simulator Status") {}
|
public SimStatusHandler() : base("GET", "/simstatus", "SimStatus", "Simulator Status") {}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
return Util.UTF8.GetBytes("OK");
|
return Util.UTF8.GetBytes("OK");
|
||||||
|
@ -792,7 +792,7 @@ namespace OpenSim
|
||||||
m_opensim = sim;
|
m_opensim = sim;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
|
return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
|
||||||
|
@ -810,7 +810,7 @@ namespace OpenSim
|
||||||
/// If the request contains a key, "callback" the response will be wrappend in the
|
/// If the request contains a key, "callback" the response will be wrappend in the
|
||||||
/// associated value for jsonp used with ajax/javascript
|
/// associated value for jsonp used with ajax/javascript
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class UXSimStatusHandler : BaseStreamHandler
|
protected class UXSimStatusHandler : BaseStreamHandler
|
||||||
{
|
{
|
||||||
OpenSimBase m_opensim;
|
OpenSimBase m_opensim;
|
||||||
|
|
||||||
|
@ -820,7 +820,7 @@ namespace OpenSim
|
||||||
m_opensim = sim;
|
m_opensim = sim;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
|
return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
|
||||||
|
|
|
@ -207,9 +207,15 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_HostCapsObj.RegisterHandler("UpdateNotecardAgentInventory", req);
|
m_HostCapsObj.RegisterHandler("UpdateNotecardAgentInventory", req);
|
||||||
m_HostCapsObj.RegisterHandler("UpdateScriptAgentInventory", req);
|
m_HostCapsObj.RegisterHandler("UpdateScriptAgentInventory", req);
|
||||||
m_HostCapsObj.RegisterHandler("UpdateScriptAgent", req);
|
m_HostCapsObj.RegisterHandler("UpdateScriptAgent", req);
|
||||||
IRequestHandler getObjectPhysicsDataHandler = new RestStreamHandler("POST", capsBase + m_getObjectPhysicsDataPath, GetObjectPhysicsData);
|
|
||||||
|
IRequestHandler getObjectPhysicsDataHandler
|
||||||
|
= new RestStreamHandler(
|
||||||
|
"POST", capsBase + m_getObjectPhysicsDataPath, GetObjectPhysicsData, "GetObjectPhysicsData", null);
|
||||||
m_HostCapsObj.RegisterHandler("GetObjectPhysicsData", getObjectPhysicsDataHandler);
|
m_HostCapsObj.RegisterHandler("GetObjectPhysicsData", getObjectPhysicsDataHandler);
|
||||||
IRequestHandler UpdateAgentInformationHandler = new RestStreamHandler("POST", capsBase + m_UpdateAgentInformationPath, UpdateAgentInformation);
|
|
||||||
|
IRequestHandler UpdateAgentInformationHandler
|
||||||
|
= new RestStreamHandler(
|
||||||
|
"POST", capsBase + m_UpdateAgentInformationPath, UpdateAgentInformation, "UpdateAgentInformation", null);
|
||||||
m_HostCapsObj.RegisterHandler("UpdateAgentInformation", UpdateAgentInformationHandler);
|
m_HostCapsObj.RegisterHandler("UpdateAgentInformation", UpdateAgentInformationHandler);
|
||||||
|
|
||||||
m_HostCapsObj.RegisterHandler(
|
m_HostCapsObj.RegisterHandler(
|
||||||
|
|
|
@ -366,7 +366,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
// EventQueueGet when it receive capability information, but then we replace the rest handler immediately
|
// EventQueueGet when it receive capability information, but then we replace the rest handler immediately
|
||||||
// afterwards with the poll service. So for now, we'll pass a null instead to simplify code reading, but
|
// afterwards with the poll service. So for now, we'll pass a null instead to simplify code reading, but
|
||||||
// really it should be possible to directly register the poll handler as a capability.
|
// really it should be possible to directly register the poll handler as a capability.
|
||||||
caps.RegisterHandler("EventQueueGet", new RestHTTPHandler("POST", eventQueueGetPath, null));
|
caps.RegisterHandler(
|
||||||
|
"EventQueueGet", new RestHTTPHandler("POST", eventQueueGetPath, null, "EventQueueGet", null));
|
||||||
// delegate(Hashtable m_dhttpMethod)
|
// delegate(Hashtable m_dhttpMethod)
|
||||||
// {
|
// {
|
||||||
// return ProcessQueue(m_dhttpMethod, agentID, caps);
|
// return ProcessQueue(m_dhttpMethod, agentID, caps);
|
||||||
|
|
|
@ -176,7 +176,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_isGod = m_scene.Permissions.IsGod(agentID);
|
m_isGod = m_scene.Permissions.IsGod(agentID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader reader = new StreamReader(request);
|
StreamReader reader = new StreamReader(request);
|
||||||
string message = reader.ReadToEnd();
|
string message = reader.ReadToEnd();
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
||||||
m_FriendsModule = fmodule;
|
m_FriendsModule = fmodule;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(
|
protected override byte[] ProcessRequest(
|
||||||
string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -122,9 +122,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||||
{
|
{
|
||||||
string uri = "/CAPS/" + UUID.Random();
|
string uri = "/CAPS/" + UUID.Random();
|
||||||
|
|
||||||
caps.RegisterHandler("UntrustedSimulatorMessage",
|
caps.RegisterHandler(
|
||||||
new RestStreamHandler("POST", uri,
|
"UntrustedSimulatorMessage",
|
||||||
HandleUntrustedSimulatorMessage));
|
new RestStreamHandler("POST", uri, HandleUntrustedSimulatorMessage, "UntrustedSimulatorMessage", null));
|
||||||
}
|
}
|
||||||
|
|
||||||
private string HandleUntrustedSimulatorMessage(string request,
|
private string HandleUntrustedSimulatorMessage(string request,
|
||||||
|
|
|
@ -304,7 +304,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
}
|
}
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(targetID, out serverURI);
|
// bool foreign = GetUserProfileServerURI(targetID, out serverURI);
|
||||||
UUID creatorId = UUID.Zero;
|
UUID creatorId = UUID.Zero;
|
||||||
|
|
||||||
OSDMap parameters= new OSDMap();
|
OSDMap parameters= new OSDMap();
|
||||||
|
@ -369,7 +369,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
}
|
}
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(target, out serverURI);
|
// bool foreign = GetUserProfileServerURI(target, out serverURI);
|
||||||
|
|
||||||
object Ad = (object)ad;
|
object Ad = (object)ad;
|
||||||
if(!JsonRpcRequest(ref Ad, "classifieds_info_query", serverURI, UUID.Random().ToString()))
|
if(!JsonRpcRequest(ref Ad, "classifieds_info_query", serverURI, UUID.Random().ToString()))
|
||||||
|
@ -438,10 +438,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
Vector3 pos = remoteClient.SceneAgent.AbsolutePosition;
|
Vector3 pos = remoteClient.SceneAgent.AbsolutePosition;
|
||||||
ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y);
|
ILandObject land = s.LandChannel.GetLandObject(pos.X, pos.Y);
|
||||||
ScenePresence p = FindPresence(remoteClient.AgentId);
|
ScenePresence p = FindPresence(remoteClient.AgentId);
|
||||||
Vector3 avaPos = p.AbsolutePosition;
|
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
|
|
||||||
if (land == null)
|
if (land == null)
|
||||||
{
|
{
|
||||||
|
@ -488,7 +487,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
public void ClassifiedDelete(UUID queryClassifiedID, IClientAPI remoteClient)
|
public void ClassifiedDelete(UUID queryClassifiedID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
|
|
||||||
UUID classifiedId;
|
UUID classifiedId;
|
||||||
OSDMap parameters= new OSDMap();
|
OSDMap parameters= new OSDMap();
|
||||||
|
@ -538,7 +537,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
}
|
}
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(targetId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(targetId, out serverURI);
|
||||||
|
|
||||||
OSDMap parameters= new OSDMap();
|
OSDMap parameters= new OSDMap();
|
||||||
parameters.Add("creatorId", OSD.FromUUID(targetId));
|
parameters.Add("creatorId", OSD.FromUUID(targetId));
|
||||||
|
@ -589,7 +588,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
UUID targetID;
|
UUID targetID;
|
||||||
UUID.TryParse(args[0], out targetID);
|
UUID.TryParse(args[0], out targetID);
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(targetID, out serverURI);
|
// bool foreign = GetUserProfileServerURI(targetID, out serverURI);
|
||||||
IClientAPI remoteClient = (IClientAPI)sender;
|
IClientAPI remoteClient = (IClientAPI)sender;
|
||||||
|
|
||||||
UserProfilePick pick = new UserProfilePick();
|
UserProfilePick pick = new UserProfilePick();
|
||||||
|
@ -657,7 +656,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
m_log.DebugFormat("[PROFILES]: Start PickInfoUpdate Name: {0} PickId: {1} SnapshotId: {2}", name, pickID.ToString(), snapshotID.ToString());
|
m_log.DebugFormat("[PROFILES]: Start PickInfoUpdate Name: {0} PickId: {1} SnapshotId: {2}", name, pickID.ToString(), snapshotID.ToString());
|
||||||
UserProfilePick pick = new UserProfilePick();
|
UserProfilePick pick = new UserProfilePick();
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
ScenePresence p = FindPresence(remoteClient.AgentId);
|
ScenePresence p = FindPresence(remoteClient.AgentId);
|
||||||
|
|
||||||
Vector3 avaPos = p.AbsolutePosition;
|
Vector3 avaPos = p.AbsolutePosition;
|
||||||
|
@ -717,7 +716,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
public void PickDelete(IClientAPI remoteClient, UUID queryPickID)
|
public void PickDelete(IClientAPI remoteClient, UUID queryPickID)
|
||||||
{
|
{
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
|
|
||||||
OSDMap parameters= new OSDMap();
|
OSDMap parameters= new OSDMap();
|
||||||
parameters.Add("pickId", OSD.FromUUID(queryPickID));
|
parameters.Add("pickId", OSD.FromUUID(queryPickID));
|
||||||
|
@ -752,7 +751,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
|
|
||||||
IClientAPI remoteClient = (IClientAPI)sender;
|
IClientAPI remoteClient = (IClientAPI)sender;
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
note.TargetId = remoteClient.AgentId;
|
note.TargetId = remoteClient.AgentId;
|
||||||
UUID.TryParse(args[0], out note.UserId);
|
UUID.TryParse(args[0], out note.UserId);
|
||||||
|
|
||||||
|
@ -788,7 +787,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
note.Notes = queryNotes;
|
note.Notes = queryNotes;
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
|
|
||||||
object Note = note;
|
object Note = note;
|
||||||
if(!JsonRpcRequest(ref Note, "avatar_notes_update", serverURI, UUID.Random().ToString()))
|
if(!JsonRpcRequest(ref Note, "avatar_notes_update", serverURI, UUID.Random().ToString()))
|
||||||
|
@ -833,7 +832,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
prop.Language = languages;
|
prop.Language = languages;
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
|
|
||||||
object Param = prop;
|
object Param = prop;
|
||||||
if(!JsonRpcRequest(ref Param, "avatar_interests_update", serverURI, UUID.Random().ToString()))
|
if(!JsonRpcRequest(ref Param, "avatar_interests_update", serverURI, UUID.Random().ToString()))
|
||||||
|
@ -955,7 +954,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
prop.FirstLifeText = newProfile.FirstLifeAboutText;
|
prop.FirstLifeText = newProfile.FirstLifeAboutText;
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(remoteClient.AgentId, out serverURI);
|
||||||
|
|
||||||
object Prop = prop;
|
object Prop = prop;
|
||||||
|
|
||||||
|
@ -994,7 +993,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
}
|
}
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(properties.UserId, out serverURI);
|
// bool foreign = GetUserProfileServerURI(properties.UserId, out serverURI);
|
||||||
|
|
||||||
// This is checking a friend on the home grid
|
// This is checking a friend on the home grid
|
||||||
// Not HG friend
|
// Not HG friend
|
||||||
|
@ -1247,7 +1246,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] buf = new byte[8192];
|
|
||||||
Stream rstream = webResponse.GetResponseStream();
|
Stream rstream = webResponse.GetResponseStream();
|
||||||
OSDMap mret = (OSDMap)OSDParser.DeserializeJson(rstream);
|
OSDMap mret = (OSDMap)OSDParser.DeserializeJson(rstream);
|
||||||
|
|
||||||
|
@ -1313,7 +1311,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] buf = new byte[8192];
|
|
||||||
Stream rstream = webResponse.GetResponseStream();
|
Stream rstream = webResponse.GetResponseStream();
|
||||||
|
|
||||||
OSDMap response = new OSDMap();
|
OSDMap response = new OSDMap();
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
@ -37,6 +38,7 @@ using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Console;
|
using OpenSim.Framework.Console;
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using Caps=OpenSim.Framework.Capabilities.Caps;
|
using Caps=OpenSim.Framework.Capabilities.Caps;
|
||||||
|
@ -57,8 +59,9 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected Dictionary<UUID, Caps> m_capsObjects = new Dictionary<UUID, Caps>();
|
protected Dictionary<UUID, Caps> m_capsObjects = new Dictionary<UUID, Caps>();
|
||||||
|
|
||||||
protected Dictionary<UUID, string> capsPaths = new Dictionary<UUID, string>();
|
protected Dictionary<UUID, string> m_capsPaths = new Dictionary<UUID, string>();
|
||||||
protected Dictionary<UUID, Dictionary<ulong, string>> childrenSeeds
|
|
||||||
|
protected Dictionary<UUID, Dictionary<ulong, string>> m_childrenSeeds
|
||||||
= new Dictionary<UUID, Dictionary<ulong, string>>();
|
= new Dictionary<UUID, Dictionary<ulong, string>>();
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
|
@ -70,9 +73,24 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
m_scene.RegisterModuleInterface<ICapabilitiesModule>(this);
|
m_scene.RegisterModuleInterface<ICapabilitiesModule>(this);
|
||||||
|
|
||||||
MainConsole.Instance.Commands.AddCommand("Comms", false, "show caps",
|
MainConsole.Instance.Commands.AddCommand(
|
||||||
"show caps",
|
"Comms", false, "show caps list",
|
||||||
"Shows all registered capabilities for users", HandleShowCapsCommand);
|
"show caps list",
|
||||||
|
"Shows list of registered capabilities for users.", HandleShowCapsListCommand);
|
||||||
|
|
||||||
|
MainConsole.Instance.Commands.AddCommand(
|
||||||
|
"Comms", false, "show caps stats by user",
|
||||||
|
"show caps stats [<first-name> <last-name>]",
|
||||||
|
"Shows statistics on capabilities use by user.",
|
||||||
|
"If a user name is given, then prints a detailed breakdown of caps use ordered by number of requests received.",
|
||||||
|
HandleShowCapsStatsByUserCommand);
|
||||||
|
|
||||||
|
MainConsole.Instance.Commands.AddCommand(
|
||||||
|
"Comms", false, "show caps stats by cap",
|
||||||
|
"show caps stats by cap [<cap-name>]",
|
||||||
|
"Shows statistics on capabilities use by capability.",
|
||||||
|
"If a capability name is given, then prints a detailed breakdown of use by each user.",
|
||||||
|
HandleShowCapsStatsByCapCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegionLoaded(Scene scene)
|
public void RegionLoaded(Scene scene)
|
||||||
|
@ -105,35 +123,42 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||||
if (m_scene.RegionInfo.EstateSettings.IsBanned(agentId))
|
if (m_scene.RegionInfo.EstateSettings.IsBanned(agentId))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Caps caps;
|
||||||
String capsObjectPath = GetCapsPath(agentId);
|
String capsObjectPath = GetCapsPath(agentId);
|
||||||
|
|
||||||
if (m_capsObjects.ContainsKey(agentId))
|
lock (m_capsObjects)
|
||||||
{
|
{
|
||||||
Caps oldCaps = m_capsObjects[agentId];
|
if (m_capsObjects.ContainsKey(agentId))
|
||||||
|
{
|
||||||
|
Caps oldCaps = m_capsObjects[agentId];
|
||||||
|
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[CAPS]: Recreating caps for agent {0}. Old caps path {1}, new caps path {2}. ",
|
"[CAPS]: Recreating caps for agent {0}. Old caps path {1}, new caps path {2}. ",
|
||||||
agentId, oldCaps.CapsObjectPath, capsObjectPath);
|
agentId, oldCaps.CapsObjectPath, capsObjectPath);
|
||||||
// This should not happen. The caller code is confused. We need to fix that.
|
// This should not happen. The caller code is confused. We need to fix that.
|
||||||
// CAPs can never be reregistered, or the client will be confused.
|
// CAPs can never be reregistered, or the client will be confused.
|
||||||
// Hence this return here.
|
// Hence this return here.
|
||||||
//return;
|
//return;
|
||||||
|
}
|
||||||
|
|
||||||
|
caps = new Caps(MainServer.Instance, m_scene.RegionInfo.ExternalHostName,
|
||||||
|
(MainServer.Instance == null) ? 0: MainServer.Instance.Port,
|
||||||
|
capsObjectPath, agentId, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
|
m_capsObjects[agentId] = caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
Caps caps = new Caps(MainServer.Instance, m_scene.RegionInfo.ExternalHostName,
|
|
||||||
(MainServer.Instance == null) ? 0: MainServer.Instance.Port,
|
|
||||||
capsObjectPath, agentId, m_scene.RegionInfo.RegionName);
|
|
||||||
|
|
||||||
m_capsObjects[agentId] = caps;
|
|
||||||
|
|
||||||
m_scene.EventManager.TriggerOnRegisterCaps(agentId, caps);
|
m_scene.EventManager.TriggerOnRegisterCaps(agentId, caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveCaps(UUID agentId)
|
public void RemoveCaps(UUID agentId)
|
||||||
{
|
{
|
||||||
if (childrenSeeds.ContainsKey(agentId))
|
lock (m_childrenSeeds)
|
||||||
{
|
{
|
||||||
childrenSeeds.Remove(agentId);
|
if (m_childrenSeeds.ContainsKey(agentId))
|
||||||
|
{
|
||||||
|
m_childrenSeeds.Remove(agentId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lock (m_capsObjects)
|
lock (m_capsObjects)
|
||||||
|
@ -168,16 +193,22 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||||
|
|
||||||
public void SetAgentCapsSeeds(AgentCircuitData agent)
|
public void SetAgentCapsSeeds(AgentCircuitData agent)
|
||||||
{
|
{
|
||||||
capsPaths[agent.AgentID] = agent.CapsPath;
|
lock (m_capsPaths)
|
||||||
childrenSeeds[agent.AgentID]
|
m_capsPaths[agent.AgentID] = agent.CapsPath;
|
||||||
= ((agent.ChildrenCapSeeds == null) ? new Dictionary<ulong, string>() : agent.ChildrenCapSeeds);
|
|
||||||
|
lock (m_childrenSeeds)
|
||||||
|
m_childrenSeeds[agent.AgentID]
|
||||||
|
= ((agent.ChildrenCapSeeds == null) ? new Dictionary<ulong, string>() : agent.ChildrenCapSeeds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetCapsPath(UUID agentId)
|
public string GetCapsPath(UUID agentId)
|
||||||
{
|
{
|
||||||
if (capsPaths.ContainsKey(agentId))
|
lock (m_capsPaths)
|
||||||
{
|
{
|
||||||
return capsPaths[agentId];
|
if (m_capsPaths.ContainsKey(agentId))
|
||||||
|
{
|
||||||
|
return m_capsPaths[agentId];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -186,17 +217,24 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||||
public Dictionary<ulong, string> GetChildrenSeeds(UUID agentID)
|
public Dictionary<ulong, string> GetChildrenSeeds(UUID agentID)
|
||||||
{
|
{
|
||||||
Dictionary<ulong, string> seeds = null;
|
Dictionary<ulong, string> seeds = null;
|
||||||
if (childrenSeeds.TryGetValue(agentID, out seeds))
|
|
||||||
return seeds;
|
lock (m_childrenSeeds)
|
||||||
|
if (m_childrenSeeds.TryGetValue(agentID, out seeds))
|
||||||
|
return seeds;
|
||||||
|
|
||||||
return new Dictionary<ulong, string>();
|
return new Dictionary<ulong, string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DropChildSeed(UUID agentID, ulong handle)
|
public void DropChildSeed(UUID agentID, ulong handle)
|
||||||
{
|
{
|
||||||
Dictionary<ulong, string> seeds;
|
Dictionary<ulong, string> seeds;
|
||||||
if (childrenSeeds.TryGetValue(agentID, out seeds))
|
|
||||||
|
lock (m_childrenSeeds)
|
||||||
{
|
{
|
||||||
seeds.Remove(handle);
|
if (m_childrenSeeds.TryGetValue(agentID, out seeds))
|
||||||
|
{
|
||||||
|
seeds.Remove(handle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,53 +242,275 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||||
{
|
{
|
||||||
Dictionary<ulong, string> seeds;
|
Dictionary<ulong, string> seeds;
|
||||||
string returnval;
|
string returnval;
|
||||||
if (childrenSeeds.TryGetValue(agentID, out seeds))
|
|
||||||
|
lock (m_childrenSeeds)
|
||||||
{
|
{
|
||||||
if (seeds.TryGetValue(handle, out returnval))
|
if (m_childrenSeeds.TryGetValue(agentID, out seeds))
|
||||||
return returnval;
|
{
|
||||||
|
if (seeds.TryGetValue(handle, out returnval))
|
||||||
|
return returnval;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetChildrenSeed(UUID agentID, Dictionary<ulong, string> seeds)
|
public void SetChildrenSeed(UUID agentID, Dictionary<ulong, string> seeds)
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat(" !!! Setting child seeds in {0} to {1}", m_scene.RegionInfo.RegionName, seeds.Count);
|
//m_log.DebugFormat(" !!! Setting child seeds in {0} to {1}", m_scene.RegionInfo.RegionName, seeds.Count);
|
||||||
childrenSeeds[agentID] = seeds;
|
|
||||||
|
lock (m_childrenSeeds)
|
||||||
|
m_childrenSeeds[agentID] = seeds;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DumpChildrenSeeds(UUID agentID)
|
public void DumpChildrenSeeds(UUID agentID)
|
||||||
{
|
{
|
||||||
m_log.Info("================ ChildrenSeed "+m_scene.RegionInfo.RegionName+" ================");
|
m_log.Info("================ ChildrenSeed "+m_scene.RegionInfo.RegionName+" ================");
|
||||||
foreach (KeyValuePair<ulong, string> kvp in childrenSeeds[agentID])
|
|
||||||
|
lock (m_childrenSeeds)
|
||||||
{
|
{
|
||||||
uint x, y;
|
foreach (KeyValuePair<ulong, string> kvp in m_childrenSeeds[agentID])
|
||||||
Utils.LongToUInts(kvp.Key, out x, out y);
|
{
|
||||||
x = x / Constants.RegionSize;
|
uint x, y;
|
||||||
y = y / Constants.RegionSize;
|
Utils.LongToUInts(kvp.Key, out x, out y);
|
||||||
m_log.Info(" >> "+x+", "+y+": "+kvp.Value);
|
x = x / Constants.RegionSize;
|
||||||
|
y = y / Constants.RegionSize;
|
||||||
|
m_log.Info(" >> "+x+", "+y+": "+kvp.Value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleShowCapsCommand(string module, string[] cmdparams)
|
private void HandleShowCapsListCommand(string module, string[] cmdParams)
|
||||||
{
|
{
|
||||||
|
if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
|
||||||
|
return;
|
||||||
|
|
||||||
StringBuilder caps = new StringBuilder();
|
StringBuilder caps = new StringBuilder();
|
||||||
caps.AppendFormat("Region {0}:\n", m_scene.RegionInfo.RegionName);
|
caps.AppendFormat("Region {0}:\n", m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
foreach (KeyValuePair<UUID, Caps> kvp in m_capsObjects)
|
lock (m_capsObjects)
|
||||||
{
|
{
|
||||||
caps.AppendFormat("** User {0}:\n", kvp.Key);
|
foreach (KeyValuePair<UUID, Caps> kvp in m_capsObjects)
|
||||||
|
|
||||||
for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false, null).GetEnumerator(); kvp2.MoveNext(); )
|
|
||||||
{
|
{
|
||||||
Uri uri = new Uri(kvp2.Value.ToString());
|
caps.AppendFormat("** User {0}:\n", kvp.Key);
|
||||||
caps.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (KeyValuePair<string, string> kvp3 in kvp.Value.ExternalCapsHandlers)
|
for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false, null).GetEnumerator(); kvp2.MoveNext(); )
|
||||||
caps.AppendFormat(m_showCapsCommandFormat, kvp3.Key, kvp3.Value);
|
{
|
||||||
|
Uri uri = new Uri(kvp2.Value.ToString());
|
||||||
|
caps.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (KeyValuePair<string, string> kvp3 in kvp.Value.ExternalCapsHandlers)
|
||||||
|
caps.AppendFormat(m_showCapsCommandFormat, kvp3.Key, kvp3.Value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MainConsole.Instance.Output(caps.ToString());
|
MainConsole.Instance.Output(caps.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void HandleShowCapsStatsByCapCommand(string module, string[] cmdParams)
|
||||||
|
{
|
||||||
|
if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (cmdParams.Length != 5 && cmdParams.Length != 6)
|
||||||
|
{
|
||||||
|
MainConsole.Instance.Output("Usage: show caps stats by cap [<cap-name>]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.AppendFormat("Region {0}:\n", m_scene.Name);
|
||||||
|
|
||||||
|
if (cmdParams.Length == 5)
|
||||||
|
{
|
||||||
|
BuildSummaryStatsByCapReport(sb);
|
||||||
|
}
|
||||||
|
else if (cmdParams.Length == 6)
|
||||||
|
{
|
||||||
|
BuildDetailedStatsByCapReport(sb, cmdParams[5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
MainConsole.Instance.Output(sb.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildDetailedStatsByCapReport(StringBuilder sb, string capName)
|
||||||
|
{
|
||||||
|
sb.AppendFormat("Capability name {0}\n", capName);
|
||||||
|
|
||||||
|
ConsoleDisplayTable cdt = new ConsoleDisplayTable();
|
||||||
|
cdt.AddColumn("User Name", 34);
|
||||||
|
cdt.AddColumn("Req Received", 12);
|
||||||
|
cdt.AddColumn("Req Handled", 12);
|
||||||
|
cdt.Indent = 2;
|
||||||
|
|
||||||
|
Dictionary<string, int> receivedStats = new Dictionary<string, int>();
|
||||||
|
Dictionary<string, int> handledStats = new Dictionary<string, int>();
|
||||||
|
|
||||||
|
m_scene.ForEachScenePresence(
|
||||||
|
sp =>
|
||||||
|
{
|
||||||
|
Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
|
||||||
|
|
||||||
|
if (caps == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
|
||||||
|
|
||||||
|
IRequestHandler reqHandler;
|
||||||
|
if (capsHandlers.TryGetValue(capName, out reqHandler))
|
||||||
|
{
|
||||||
|
receivedStats[sp.Name] = reqHandler.RequestsReceived;
|
||||||
|
handledStats[sp.Name] = reqHandler.RequestsHandled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach (KeyValuePair<string, int> kvp in receivedStats.OrderByDescending(kp => kp.Value))
|
||||||
|
{
|
||||||
|
cdt.AddRow(kvp.Key, kvp.Value, handledStats[kvp.Key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.Append(cdt.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildSummaryStatsByCapReport(StringBuilder sb)
|
||||||
|
{
|
||||||
|
ConsoleDisplayTable cdt = new ConsoleDisplayTable();
|
||||||
|
cdt.AddColumn("Name", 34);
|
||||||
|
cdt.AddColumn("Req Received", 12);
|
||||||
|
cdt.AddColumn("Req Handled", 12);
|
||||||
|
cdt.Indent = 2;
|
||||||
|
|
||||||
|
Dictionary<string, int> receivedStats = new Dictionary<string, int>();
|
||||||
|
Dictionary<string, int> handledStats = new Dictionary<string, int>();
|
||||||
|
|
||||||
|
m_scene.ForEachScenePresence(
|
||||||
|
sp =>
|
||||||
|
{
|
||||||
|
Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
|
||||||
|
|
||||||
|
if (caps == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
|
||||||
|
|
||||||
|
foreach (IRequestHandler reqHandler in capsHandlers.Values)
|
||||||
|
{
|
||||||
|
string reqName = reqHandler.Name ?? "";
|
||||||
|
|
||||||
|
if (!receivedStats.ContainsKey(reqName))
|
||||||
|
{
|
||||||
|
receivedStats[reqName] = reqHandler.RequestsReceived;
|
||||||
|
handledStats[reqName] = reqHandler.RequestsHandled;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
receivedStats[reqName] += reqHandler.RequestsReceived;
|
||||||
|
handledStats[reqName] += reqHandler.RequestsHandled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach (KeyValuePair<string, int> kvp in receivedStats.OrderByDescending(kp => kp.Value))
|
||||||
|
cdt.AddRow(kvp.Key, kvp.Value, handledStats[kvp.Key]);
|
||||||
|
|
||||||
|
sb.Append(cdt.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HandleShowCapsStatsByUserCommand(string module, string[] cmdParams)
|
||||||
|
{
|
||||||
|
if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (cmdParams.Length != 5 && cmdParams.Length != 7)
|
||||||
|
{
|
||||||
|
MainConsole.Instance.Output("Usage: show caps stats by user [<first-name> <last-name>]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.AppendFormat("Region {0}:\n", m_scene.Name);
|
||||||
|
|
||||||
|
if (cmdParams.Length == 5)
|
||||||
|
{
|
||||||
|
BuildSummaryStatsByUserReport(sb);
|
||||||
|
}
|
||||||
|
else if (cmdParams.Length == 7)
|
||||||
|
{
|
||||||
|
string firstName = cmdParams[5];
|
||||||
|
string lastName = cmdParams[6];
|
||||||
|
|
||||||
|
ScenePresence sp = m_scene.GetScenePresence(firstName, lastName);
|
||||||
|
|
||||||
|
if (sp == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BuildDetailedStatsByUserReport(sb, sp);
|
||||||
|
}
|
||||||
|
|
||||||
|
MainConsole.Instance.Output(sb.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildDetailedStatsByUserReport(StringBuilder sb, ScenePresence sp)
|
||||||
|
{
|
||||||
|
sb.AppendFormat("Avatar name {0}, type {1}\n", sp.Name, sp.IsChildAgent ? "child" : "root");
|
||||||
|
|
||||||
|
ConsoleDisplayTable cdt = new ConsoleDisplayTable();
|
||||||
|
cdt.AddColumn("Cap Name", 34);
|
||||||
|
cdt.AddColumn("Req Received", 12);
|
||||||
|
cdt.AddColumn("Req Handled", 12);
|
||||||
|
cdt.Indent = 2;
|
||||||
|
|
||||||
|
Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
|
||||||
|
|
||||||
|
if (caps == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
|
||||||
|
|
||||||
|
foreach (IRequestHandler reqHandler in capsHandlers.Values.OrderByDescending(rh => rh.RequestsReceived))
|
||||||
|
{
|
||||||
|
cdt.AddRow(reqHandler.Name, reqHandler.RequestsReceived, reqHandler.RequestsHandled);
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.Append(cdt.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildSummaryStatsByUserReport(StringBuilder sb)
|
||||||
|
{
|
||||||
|
ConsoleDisplayTable cdt = new ConsoleDisplayTable();
|
||||||
|
cdt.AddColumn("Name", 32);
|
||||||
|
cdt.AddColumn("Type", 5);
|
||||||
|
cdt.AddColumn("Req Received", 12);
|
||||||
|
cdt.AddColumn("Req Handled", 12);
|
||||||
|
cdt.Indent = 2;
|
||||||
|
|
||||||
|
m_scene.ForEachScenePresence(
|
||||||
|
sp =>
|
||||||
|
{
|
||||||
|
Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
|
||||||
|
|
||||||
|
if (caps == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
|
||||||
|
|
||||||
|
int totalRequestsReceived = 0;
|
||||||
|
int totalRequestsHandled = 0;
|
||||||
|
|
||||||
|
foreach (IRequestHandler reqHandler in capsHandlers.Values)
|
||||||
|
{
|
||||||
|
totalRequestsReceived += reqHandler.RequestsReceived;
|
||||||
|
totalRequestsHandled += reqHandler.RequestsHandled;
|
||||||
|
}
|
||||||
|
|
||||||
|
cdt.AddRow(sp.Name, sp.IsChildAgent ? "child" : "root", totalRequestsReceived, totalRequestsHandled);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
sb.Append(cdt.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -55,7 +55,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
m_EstateModule = fmodule;
|
m_EstateModule = fmodule;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -55,7 +55,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private object m_lockObject = new object();
|
private object m_lockObject = new object();
|
||||||
private object m_timerLock = new object();
|
private object m_timerLock = new object();
|
||||||
private const double m_tickDuration = 50.0;
|
private const double m_tickDuration = 50.0;
|
||||||
private Scene m_scene;
|
|
||||||
|
|
||||||
public double TickDuration
|
public double TickDuration
|
||||||
{
|
{
|
||||||
|
@ -69,8 +68,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_timer.AutoReset = true;
|
m_timer.AutoReset = true;
|
||||||
m_timer.Elapsed += OnTimer;
|
m_timer.Elapsed += OnTimer;
|
||||||
|
|
||||||
m_scene = scene;
|
|
||||||
|
|
||||||
m_timer.Start();
|
m_timer.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,13 +91,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m.OnTimer(TickDuration);
|
m.OnTimer(TickDuration);
|
||||||
}
|
}
|
||||||
catch (Exception inner)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
// Don't stop processing
|
// Don't stop processing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
// Keep running no matter what
|
// Keep running no matter what
|
||||||
}
|
}
|
||||||
|
@ -157,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class KeyframeMotion
|
public class KeyframeMotion
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public enum PlayMode : int
|
public enum PlayMode : int
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,7 +63,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
osXStatsURI = Util.SHA1Hash(regionInfo.osSecret);
|
osXStatsURI = Util.SHA1Hash(regionInfo.osSecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(
|
protected override byte[] ProcessRequest(
|
||||||
string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
return Util.UTF8.GetBytes(Report());
|
return Util.UTF8.GetBytes(Report());
|
||||||
|
|
|
@ -354,8 +354,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private UUID m_collisionSound;
|
private UUID m_collisionSound;
|
||||||
private float m_collisionSoundVolume;
|
private float m_collisionSoundVolume;
|
||||||
|
|
||||||
private KeyframeMotion m_keyframeMotion = null;
|
|
||||||
|
|
||||||
public KeyframeMotion KeyframeMotion
|
public KeyframeMotion KeyframeMotion
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
|
|
|
@ -139,18 +139,21 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
||||||
{
|
{
|
||||||
string capsBase = "/CAPS/" + caps.CapsObjectPath;
|
string capsBase = "/CAPS/" + caps.CapsObjectPath;
|
||||||
|
|
||||||
IRequestHandler renderMaterialsPostHandler = new RestStreamHandler("POST", capsBase + "/", RenderMaterialsPostCap);
|
IRequestHandler renderMaterialsPostHandler
|
||||||
caps.RegisterHandler("RenderMaterials", renderMaterialsPostHandler);
|
= new RestStreamHandler("POST", capsBase + "/", RenderMaterialsPostCap, "RenderMaterialsPost", null);
|
||||||
|
caps.RegisterHandler("RenderMaterialsPost", renderMaterialsPostHandler);
|
||||||
|
|
||||||
// OpenSimulator CAPs infrastructure seems to be somewhat hostile towards any CAP that requires both GET
|
// OpenSimulator CAPs infrastructure seems to be somewhat hostile towards any CAP that requires both GET
|
||||||
// and POST handlers, (at least at the time this was originally written), so we first set up a POST
|
// and POST handlers, (at least at the time this was originally written), so we first set up a POST
|
||||||
// handler normally and then add a GET handler via MainServer
|
// handler normally and then add a GET handler via MainServer
|
||||||
|
|
||||||
IRequestHandler renderMaterialsGetHandler = new RestStreamHandler("GET", capsBase + "/", RenderMaterialsGetCap);
|
IRequestHandler renderMaterialsGetHandler
|
||||||
|
= new RestStreamHandler("GET", capsBase + "/", RenderMaterialsGetCap, "RenderMaterialsGet", null);
|
||||||
MainServer.Instance.AddStreamHandler(renderMaterialsGetHandler);
|
MainServer.Instance.AddStreamHandler(renderMaterialsGetHandler);
|
||||||
|
|
||||||
// materials viewer seems to use either POST or PUT, so assign POST handler for PUT as well
|
// materials viewer seems to use either POST or PUT, so assign POST handler for PUT as well
|
||||||
IRequestHandler renderMaterialsPutHandler = new RestStreamHandler("PUT", capsBase + "/", RenderMaterialsPostCap);
|
IRequestHandler renderMaterialsPutHandler
|
||||||
|
= new RestStreamHandler("PUT", capsBase + "/", RenderMaterialsPostCap, "RenderMaterialsPut", null);
|
||||||
MainServer.Instance.AddStreamHandler(renderMaterialsPutHandler);
|
MainServer.Instance.AddStreamHandler(renderMaterialsPutHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,7 +397,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
||||||
m_log.Debug("[MaterialsDemoModule]: null SOP for localId: " + matLocalID.ToString());
|
m_log.Debug("[MaterialsDemoModule]: null SOP for localId: " + matLocalID.ToString());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//var te = sop.Shape.Textures;
|
|
||||||
var te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length);
|
var te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length);
|
||||||
|
|
||||||
if (te == null)
|
if (te == null)
|
||||||
|
@ -413,14 +415,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
|
||||||
if (te.DefaultTexture == null)
|
if (te.DefaultTexture == null)
|
||||||
m_log.Debug("[MaterialsDemoModule]: te.DefaultTexture is null");
|
m_log.Debug("[MaterialsDemoModule]: te.DefaultTexture is null");
|
||||||
else
|
else
|
||||||
{
|
te.DefaultTexture.MaterialID = id;
|
||||||
if (te.DefaultTexture.MaterialID == null)
|
|
||||||
m_log.Debug("[MaterialsDemoModule]: te.DefaultTexture.MaterialID is null");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
te.DefaultTexture.MaterialID = id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -281,7 +281,7 @@ namespace OpenSim.Region.OptionalModules.ViewerSupport
|
||||||
m_module = module;
|
m_module = module;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader reader = new StreamReader(request);
|
StreamReader reader = new StreamReader(request);
|
||||||
string requestBody = reader.ReadToEnd();
|
string requestBody = reader.ReadToEnd();
|
||||||
|
|
|
@ -55,7 +55,7 @@ namespace OpenSim.Region.OptionalModules.World.WorldView
|
||||||
m_WorldViewModule = fmodule;
|
m_WorldViewModule = fmodule;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
httpResponse.ContentType = "image/jpeg";
|
httpResponse.ContentType = "image/jpeg";
|
||||||
|
|
|
@ -125,33 +125,12 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
static readonly float PIOverFour = ((float)Math.PI) / 4f;
|
static readonly float PIOverFour = ((float)Math.PI) / 4f;
|
||||||
static readonly float PIOverTwo = ((float)Math.PI) / 2f;
|
static readonly float PIOverTwo = ((float)Math.PI) / 2f;
|
||||||
|
|
||||||
// For debugging, flags to turn on and off individual corrections.
|
|
||||||
public bool enableAngularVerticalAttraction;
|
|
||||||
public bool enableAngularDeflection;
|
|
||||||
public bool enableAngularBanking;
|
|
||||||
|
|
||||||
public BSDynamics(BSScene myScene, BSPrim myPrim, string actorName)
|
public BSDynamics(BSScene myScene, BSPrim myPrim, string actorName)
|
||||||
: base(myScene, myPrim, actorName)
|
: base(myScene, myPrim, actorName)
|
||||||
{
|
{
|
||||||
ControllingPrim = myPrim;
|
ControllingPrim = myPrim;
|
||||||
Type = Vehicle.TYPE_NONE;
|
Type = Vehicle.TYPE_NONE;
|
||||||
m_haveRegisteredForSceneEvents = false;
|
m_haveRegisteredForSceneEvents = false;
|
||||||
SetupVehicleDebugging();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stopgap debugging enablement. Allows source level debugging but still checking
|
|
||||||
// in changes by making enablement of debugging flags from INI file.
|
|
||||||
public void SetupVehicleDebugging()
|
|
||||||
{
|
|
||||||
enableAngularVerticalAttraction = true;
|
|
||||||
enableAngularDeflection = true;
|
|
||||||
enableAngularBanking = true;
|
|
||||||
if (BSParam.VehicleDebuggingEnable)
|
|
||||||
{
|
|
||||||
enableAngularVerticalAttraction = true;
|
|
||||||
enableAngularDeflection = false;
|
|
||||||
enableAngularBanking = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return 'true' if this vehicle is doing vehicle things
|
// Return 'true' if this vehicle is doing vehicle things
|
||||||
|
@ -556,10 +535,10 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
}
|
}
|
||||||
|
|
||||||
m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale, m_linearMotorDecayTimescale, 1f);
|
m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale, m_linearMotorDecayTimescale, 1f);
|
||||||
m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
// m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
||||||
|
|
||||||
m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, m_angularMotorDecayTimescale, 1f);
|
m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale, m_angularMotorDecayTimescale, 1f);
|
||||||
m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
// m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)
|
||||||
|
|
||||||
/* Not implemented
|
/* Not implemented
|
||||||
m_verticalAttractionMotor = new BSVMotor("VerticalAttraction", m_verticalAttractionTimescale,
|
m_verticalAttractionMotor = new BSVMotor("VerticalAttraction", m_verticalAttractionTimescale,
|
||||||
|
@ -926,6 +905,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
return VehicleVelocity * Quaternion.Inverse(Quaternion.Normalize(VehicleOrientation));
|
return VehicleVelocity * Quaternion.Inverse(Quaternion.Normalize(VehicleOrientation));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private float VehicleForwardSpeed
|
private float VehicleForwardSpeed
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -1061,26 +1041,37 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
Vector3 linearDeflectionV = Vector3.Zero;
|
Vector3 linearDeflectionV = Vector3.Zero;
|
||||||
Vector3 velocityV = VehicleForwardVelocity;
|
Vector3 velocityV = VehicleForwardVelocity;
|
||||||
|
|
||||||
// Velocity in Y and Z dimensions is movement to the side or turning.
|
if (BSParam.VehicleEnableLinearDeflection)
|
||||||
// Compute deflection factor from the to the side and rotational velocity
|
{
|
||||||
linearDeflectionV.Y = SortedClampInRange(0, (velocityV.Y * m_linearDeflectionEfficiency) / m_linearDeflectionTimescale, velocityV.Y);
|
// Velocity in Y and Z dimensions is movement to the side or turning.
|
||||||
linearDeflectionV.Z = SortedClampInRange(0, (velocityV.Z * m_linearDeflectionEfficiency) / m_linearDeflectionTimescale, velocityV.Z);
|
// Compute deflection factor from the to the side and rotational velocity
|
||||||
|
linearDeflectionV.Y = SortedClampInRange(0, (velocityV.Y * m_linearDeflectionEfficiency) / m_linearDeflectionTimescale, velocityV.Y);
|
||||||
|
linearDeflectionV.Z = SortedClampInRange(0, (velocityV.Z * m_linearDeflectionEfficiency) / m_linearDeflectionTimescale, velocityV.Z);
|
||||||
|
|
||||||
// Velocity to the side and around is corrected and moved into the forward direction
|
// Velocity to the side and around is corrected and moved into the forward direction
|
||||||
linearDeflectionV.X += Math.Abs(linearDeflectionV.Y);
|
linearDeflectionV.X += Math.Abs(linearDeflectionV.Y);
|
||||||
linearDeflectionV.X += Math.Abs(linearDeflectionV.Z);
|
linearDeflectionV.X += Math.Abs(linearDeflectionV.Z);
|
||||||
|
|
||||||
// Scale the deflection to the fractional simulation time
|
// Scale the deflection to the fractional simulation time
|
||||||
linearDeflectionV *= pTimestep;
|
linearDeflectionV *= pTimestep;
|
||||||
|
|
||||||
// Subtract the sideways and rotational velocity deflection factors while adding the correction forward
|
// Subtract the sideways and rotational velocity deflection factors while adding the correction forward
|
||||||
linearDeflectionV *= new Vector3(1,-1,-1);
|
linearDeflectionV *= new Vector3(1, -1, -1);
|
||||||
|
|
||||||
// Correciont is vehicle relative. Convert to world coordinates and add to the velocity
|
// Correction is vehicle relative. Convert to world coordinates.
|
||||||
VehicleVelocity += linearDeflectionV * VehicleOrientation;
|
Vector3 linearDeflectionW = linearDeflectionV * VehicleOrientation;
|
||||||
|
|
||||||
VDetailLog("{0}, MoveLinear,LinearDeflection,linDefEff={1},linDefTS={2},linDeflectionV={3}",
|
// Optionally, if not colliding, don't effect world downward velocity. Let falling things fall.
|
||||||
ControllingPrim.LocalID, m_linearDeflectionEfficiency, m_linearDeflectionTimescale, linearDeflectionV);
|
if (BSParam.VehicleLinearDeflectionNotCollidingNoZ && !m_controllingPrim.IsColliding)
|
||||||
|
{
|
||||||
|
linearDeflectionW.Z = 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
VehicleVelocity += linearDeflectionW;
|
||||||
|
|
||||||
|
VDetailLog("{0}, MoveLinear,LinearDeflection,linDefEff={1},linDefTS={2},linDeflectionV={3}",
|
||||||
|
ControllingPrim.LocalID, m_linearDeflectionEfficiency, m_linearDeflectionTimescale, linearDeflectionV);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ComputeLinearTerrainHeightCorrection(float pTimestep)
|
public void ComputeLinearTerrainHeightCorrection(float pTimestep)
|
||||||
|
@ -1393,116 +1384,134 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
{
|
{
|
||||||
|
|
||||||
// If vertical attaction timescale is reasonable
|
// If vertical attaction timescale is reasonable
|
||||||
if (enableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
if (BSParam.VehicleEnableAngularVerticalAttraction && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
||||||
{
|
{
|
||||||
//Another formula to try got from :
|
Vector3 vehicleUpAxis = Vector3.UnitZ * VehicleOrientation;
|
||||||
//http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html
|
switch (BSParam.VehicleAngularVerticalAttractionAlgorithm)
|
||||||
|
|
||||||
Vector3 VehicleUpAxis = Vector3.UnitZ * VehicleOrientation;
|
|
||||||
|
|
||||||
// Flipping what was originally a timescale into a speed variable and then multiplying it by 2
|
|
||||||
// since only computing half the distance between the angles.
|
|
||||||
float VerticalAttractionSpeed = (1 / m_verticalAttractionTimescale) * 2.0f;
|
|
||||||
|
|
||||||
// Make a prediction of where the up axis will be when this is applied rather then where it is now as
|
|
||||||
// this makes for a smoother adjustment and less fighting between the various forces.
|
|
||||||
Vector3 predictedUp = VehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f);
|
|
||||||
|
|
||||||
// This is only half the distance to the target so it will take 2 seconds to complete the turn.
|
|
||||||
Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ);
|
|
||||||
|
|
||||||
// Scale vector by our timescale since it is an acceleration it is r/s^2 or radians a timescale squared
|
|
||||||
Vector3 vertContributionV = torqueVector * VerticalAttractionSpeed * VerticalAttractionSpeed;
|
|
||||||
|
|
||||||
VehicleRotationalVelocity += vertContributionV;
|
|
||||||
|
|
||||||
VDetailLog("{0}, MoveAngular,verticalAttraction,UpAxis={1},PredictedUp={2},torqueVector={3},contrib={4}",
|
|
||||||
ControllingPrim.LocalID,
|
|
||||||
VehicleUpAxis,
|
|
||||||
predictedUp,
|
|
||||||
torqueVector,
|
|
||||||
vertContributionV);
|
|
||||||
//=====================================================================
|
|
||||||
/*
|
|
||||||
// Possible solution derived from a discussion at:
|
|
||||||
// http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no
|
|
||||||
|
|
||||||
// Create a rotation that is only the vehicle's rotation around Z
|
|
||||||
Vector3 currentEuler = Vector3.Zero;
|
|
||||||
VehicleOrientation.GetEulerAngles(out currentEuler.X, out currentEuler.Y, out currentEuler.Z);
|
|
||||||
Quaternion justZOrientation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, currentEuler.Z);
|
|
||||||
|
|
||||||
// Create the axis that is perpendicular to the up vector and the rotated up vector.
|
|
||||||
Vector3 differenceAxis = Vector3.Cross(Vector3.UnitZ * justZOrientation, Vector3.UnitZ * VehicleOrientation);
|
|
||||||
// Compute the angle between those to vectors.
|
|
||||||
double differenceAngle = Math.Acos((double)Vector3.Dot(Vector3.UnitZ, Vector3.Normalize(Vector3.UnitZ * VehicleOrientation)));
|
|
||||||
// 'differenceAngle' is the angle to rotate and 'differenceAxis' is the plane to rotate in to get the vehicle vertical
|
|
||||||
|
|
||||||
// Reduce the change by the time period it is to change in. Timestep is handled when velocity is applied.
|
|
||||||
// TODO: add 'efficiency'.
|
|
||||||
differenceAngle /= m_verticalAttractionTimescale;
|
|
||||||
|
|
||||||
// Create the quaterian representing the correction angle
|
|
||||||
Quaternion correctionRotation = Quaternion.CreateFromAxisAngle(differenceAxis, (float)differenceAngle);
|
|
||||||
|
|
||||||
// Turn that quaternion into Euler values to make it into velocities to apply.
|
|
||||||
Vector3 vertContributionV = Vector3.Zero;
|
|
||||||
correctionRotation.GetEulerAngles(out vertContributionV.X, out vertContributionV.Y, out vertContributionV.Z);
|
|
||||||
vertContributionV *= -1f;
|
|
||||||
|
|
||||||
VehicleRotationalVelocity += vertContributionV;
|
|
||||||
|
|
||||||
VDetailLog("{0}, MoveAngular,verticalAttraction,diffAxis={1},diffAng={2},corrRot={3},contrib={4}",
|
|
||||||
ControllingPrim.LocalID,
|
|
||||||
differenceAxis,
|
|
||||||
differenceAngle,
|
|
||||||
correctionRotation,
|
|
||||||
vertContributionV);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// ===================================================================
|
|
||||||
/*
|
|
||||||
Vector3 vertContributionV = Vector3.Zero;
|
|
||||||
Vector3 origRotVelW = VehicleRotationalVelocity; // DEBUG DEBUG
|
|
||||||
|
|
||||||
// Take a vector pointing up and convert it from world to vehicle relative coords.
|
|
||||||
Vector3 verticalError = Vector3.Normalize(Vector3.UnitZ * VehicleOrientation);
|
|
||||||
|
|
||||||
// If vertical attraction correction is needed, the vector that was pointing up (UnitZ)
|
|
||||||
// is now:
|
|
||||||
// leaning to one side: rotated around the X axis with the Y value going
|
|
||||||
// from zero (nearly straight up) to one (completely to the side)) or
|
|
||||||
// leaning front-to-back: rotated around the Y axis with the value of X being between
|
|
||||||
// zero and one.
|
|
||||||
// The value of Z is how far the rotation is off with 1 meaning none and 0 being 90 degrees.
|
|
||||||
|
|
||||||
// Y error means needed rotation around X axis and visa versa.
|
|
||||||
// Since the error goes from zero to one, the asin is the corresponding angle.
|
|
||||||
vertContributionV.X = (float)Math.Asin(verticalError.Y);
|
|
||||||
// (Tilt forward (positive X) needs to tilt back (rotate negative) around Y axis.)
|
|
||||||
vertContributionV.Y = -(float)Math.Asin(verticalError.X);
|
|
||||||
|
|
||||||
// If verticalError.Z is negative, the vehicle is upside down. Add additional push.
|
|
||||||
if (verticalError.Z < 0f)
|
|
||||||
{
|
{
|
||||||
vertContributionV.X += Math.Sign(vertContributionV.X) * PIOverFour;
|
case 0:
|
||||||
// vertContribution.Y -= PIOverFour;
|
{
|
||||||
|
//Another formula to try got from :
|
||||||
|
//http://answers.unity3d.com/questions/10425/how-to-stabilize-angular-motion-alignment-of-hover.html
|
||||||
|
|
||||||
|
// Flipping what was originally a timescale into a speed variable and then multiplying it by 2
|
||||||
|
// since only computing half the distance between the angles.
|
||||||
|
float VerticalAttractionSpeed = (1 / m_verticalAttractionTimescale) * 2.0f;
|
||||||
|
|
||||||
|
// Make a prediction of where the up axis will be when this is applied rather then where it is now as
|
||||||
|
// this makes for a smoother adjustment and less fighting between the various forces.
|
||||||
|
Vector3 predictedUp = vehicleUpAxis * Quaternion.CreateFromAxisAngle(VehicleRotationalVelocity, 0f);
|
||||||
|
|
||||||
|
// This is only half the distance to the target so it will take 2 seconds to complete the turn.
|
||||||
|
Vector3 torqueVector = Vector3.Cross(predictedUp, Vector3.UnitZ);
|
||||||
|
|
||||||
|
// Scale vector by our timescale since it is an acceleration it is r/s^2 or radians a timescale squared
|
||||||
|
Vector3 vertContributionV = torqueVector * VerticalAttractionSpeed * VerticalAttractionSpeed;
|
||||||
|
|
||||||
|
VehicleRotationalVelocity += vertContributionV;
|
||||||
|
|
||||||
|
VDetailLog("{0}, MoveAngular,verticalAttraction,upAxis={1},PredictedUp={2},torqueVector={3},contrib={4}",
|
||||||
|
ControllingPrim.LocalID,
|
||||||
|
vehicleUpAxis,
|
||||||
|
predictedUp,
|
||||||
|
torqueVector,
|
||||||
|
vertContributionV);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
// Possible solution derived from a discussion at:
|
||||||
|
// http://stackoverflow.com/questions/14939657/computing-vector-from-quaternion-works-computing-quaternion-from-vector-does-no
|
||||||
|
|
||||||
|
// Create a rotation that is only the vehicle's rotation around Z
|
||||||
|
Vector3 currentEuler = Vector3.Zero;
|
||||||
|
VehicleOrientation.GetEulerAngles(out currentEuler.X, out currentEuler.Y, out currentEuler.Z);
|
||||||
|
Quaternion justZOrientation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ, currentEuler.Z);
|
||||||
|
|
||||||
|
// Create the axis that is perpendicular to the up vector and the rotated up vector.
|
||||||
|
Vector3 differenceAxis = Vector3.Cross(Vector3.UnitZ * justZOrientation, Vector3.UnitZ * VehicleOrientation);
|
||||||
|
// Compute the angle between those to vectors.
|
||||||
|
double differenceAngle = Math.Acos((double)Vector3.Dot(Vector3.UnitZ, Vector3.Normalize(Vector3.UnitZ * VehicleOrientation)));
|
||||||
|
// 'differenceAngle' is the angle to rotate and 'differenceAxis' is the plane to rotate in to get the vehicle vertical
|
||||||
|
|
||||||
|
// Reduce the change by the time period it is to change in. Timestep is handled when velocity is applied.
|
||||||
|
// TODO: add 'efficiency'.
|
||||||
|
differenceAngle /= m_verticalAttractionTimescale;
|
||||||
|
|
||||||
|
// Create the quaterian representing the correction angle
|
||||||
|
Quaternion correctionRotation = Quaternion.CreateFromAxisAngle(differenceAxis, (float)differenceAngle);
|
||||||
|
|
||||||
|
// Turn that quaternion into Euler values to make it into velocities to apply.
|
||||||
|
Vector3 vertContributionV = Vector3.Zero;
|
||||||
|
correctionRotation.GetEulerAngles(out vertContributionV.X, out vertContributionV.Y, out vertContributionV.Z);
|
||||||
|
vertContributionV *= -1f;
|
||||||
|
|
||||||
|
VehicleRotationalVelocity += vertContributionV;
|
||||||
|
|
||||||
|
VDetailLog("{0}, MoveAngular,verticalAttraction,upAxis={1},diffAxis={2},diffAng={3},corrRot={4},contrib={5}",
|
||||||
|
ControllingPrim.LocalID,
|
||||||
|
vehicleUpAxis,
|
||||||
|
differenceAxis,
|
||||||
|
differenceAngle,
|
||||||
|
correctionRotation,
|
||||||
|
vertContributionV);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
Vector3 vertContributionV = Vector3.Zero;
|
||||||
|
Vector3 origRotVelW = VehicleRotationalVelocity; // DEBUG DEBUG
|
||||||
|
|
||||||
|
// Take a vector pointing up and convert it from world to vehicle relative coords.
|
||||||
|
Vector3 verticalError = Vector3.Normalize(Vector3.UnitZ * VehicleOrientation);
|
||||||
|
|
||||||
|
// If vertical attraction correction is needed, the vector that was pointing up (UnitZ)
|
||||||
|
// is now:
|
||||||
|
// leaning to one side: rotated around the X axis with the Y value going
|
||||||
|
// from zero (nearly straight up) to one (completely to the side)) or
|
||||||
|
// leaning front-to-back: rotated around the Y axis with the value of X being between
|
||||||
|
// zero and one.
|
||||||
|
// The value of Z is how far the rotation is off with 1 meaning none and 0 being 90 degrees.
|
||||||
|
|
||||||
|
// Y error means needed rotation around X axis and visa versa.
|
||||||
|
// Since the error goes from zero to one, the asin is the corresponding angle.
|
||||||
|
vertContributionV.X = (float)Math.Asin(verticalError.Y);
|
||||||
|
// (Tilt forward (positive X) needs to tilt back (rotate negative) around Y axis.)
|
||||||
|
vertContributionV.Y = -(float)Math.Asin(verticalError.X);
|
||||||
|
|
||||||
|
// If verticalError.Z is negative, the vehicle is upside down. Add additional push.
|
||||||
|
if (verticalError.Z < 0f)
|
||||||
|
{
|
||||||
|
vertContributionV.X += Math.Sign(vertContributionV.X) * PIOverFour;
|
||||||
|
// vertContribution.Y -= PIOverFour;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 'vertContrbution' is now the necessary angular correction to correct tilt in one second.
|
||||||
|
// Correction happens over a number of seconds.
|
||||||
|
Vector3 unscaledContribVerticalErrorV = vertContributionV; // DEBUG DEBUG
|
||||||
|
|
||||||
|
// The correction happens over the user's time period
|
||||||
|
vertContributionV /= m_verticalAttractionTimescale;
|
||||||
|
|
||||||
|
// Rotate the vehicle rotation to the world coordinates.
|
||||||
|
VehicleRotationalVelocity += (vertContributionV * VehicleOrientation);
|
||||||
|
|
||||||
|
VDetailLog("{0}, MoveAngular,verticalAttraction,,upAxis={1},origRotVW={2},vertError={3},unscaledV={4},eff={5},ts={6},vertContribV={7}",
|
||||||
|
ControllingPrim.LocalID,
|
||||||
|
vehicleUpAxis,
|
||||||
|
origRotVelW,
|
||||||
|
verticalError,
|
||||||
|
unscaledContribVerticalErrorV,
|
||||||
|
m_verticalAttractionEfficiency,
|
||||||
|
m_verticalAttractionTimescale,
|
||||||
|
vertContributionV);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'vertContrbution' is now the necessary angular correction to correct tilt in one second.
|
|
||||||
// Correction happens over a number of seconds.
|
|
||||||
Vector3 unscaledContribVerticalErrorV = vertContributionV; // DEBUG DEBUG
|
|
||||||
|
|
||||||
// The correction happens over the user's time period
|
|
||||||
vertContributionV /= m_verticalAttractionTimescale;
|
|
||||||
|
|
||||||
// Rotate the vehicle rotation to the world coordinates.
|
|
||||||
VehicleRotationalVelocity += (vertContributionV * VehicleOrientation);
|
|
||||||
|
|
||||||
VDetailLog("{0}, MoveAngular,verticalAttraction,,origRotVW={1},vertError={2},unscaledV={3},eff={4},ts={5},vertContribV={6}",
|
|
||||||
Prim.LocalID, origRotVelW, verticalError, unscaledContribVerticalErrorV,
|
|
||||||
m_verticalAttractionEfficiency, m_verticalAttractionTimescale, vertContributionV);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1514,7 +1523,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
public void ComputeAngularDeflection()
|
public void ComputeAngularDeflection()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (enableAngularDeflection && m_angularDeflectionEfficiency != 0 && VehicleForwardSpeed > 0.2)
|
if (BSParam.VehicleEnableAngularDeflection && m_angularDeflectionEfficiency != 0 && VehicleForwardSpeed > 0.2)
|
||||||
{
|
{
|
||||||
Vector3 deflectContributionV = Vector3.Zero;
|
Vector3 deflectContributionV = Vector3.Zero;
|
||||||
|
|
||||||
|
@ -1593,7 +1602,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
// make a sluggish vehicle by giving it a timescale of several seconds.
|
// make a sluggish vehicle by giving it a timescale of several seconds.
|
||||||
public void ComputeAngularBanking()
|
public void ComputeAngularBanking()
|
||||||
{
|
{
|
||||||
if (enableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
if (BSParam.VehicleEnableAngularBanking && m_bankingEfficiency != 0 && m_verticalAttractionTimescale < m_verticalAttractionCutoff)
|
||||||
{
|
{
|
||||||
Vector3 bankingContributionV = Vector3.Zero;
|
Vector3 bankingContributionV = Vector3.Zero;
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,12 @@ public static class BSParam
|
||||||
public static Vector3 VehicleInertiaFactor { get; private set; }
|
public static Vector3 VehicleInertiaFactor { get; private set; }
|
||||||
public static float VehicleGroundGravityFudge { get; private set; }
|
public static float VehicleGroundGravityFudge { get; private set; }
|
||||||
public static float VehicleAngularBankingTimescaleFudge { get; private set; }
|
public static float VehicleAngularBankingTimescaleFudge { get; private set; }
|
||||||
public static bool VehicleDebuggingEnable { get; private set; }
|
public static bool VehicleEnableLinearDeflection { get; private set; }
|
||||||
|
public static bool VehicleLinearDeflectionNotCollidingNoZ { get; private set; }
|
||||||
|
public static bool VehicleEnableAngularVerticalAttraction { get; private set; }
|
||||||
|
public static int VehicleAngularVerticalAttractionAlgorithm { get; private set; }
|
||||||
|
public static bool VehicleEnableAngularDeflection { get; private set; }
|
||||||
|
public static bool VehicleEnableAngularBanking { get; private set; }
|
||||||
|
|
||||||
// Convex Hulls
|
// Convex Hulls
|
||||||
public static int CSHullMaxDepthSplit { get; private set; }
|
public static int CSHullMaxDepthSplit { get; private set; }
|
||||||
|
@ -606,8 +611,18 @@ public static class BSParam
|
||||||
0.2f ),
|
0.2f ),
|
||||||
new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.",
|
new ParameterDefn<float>("VehicleAngularBankingTimescaleFudge", "Factor to multiple angular banking timescale. Tune to increase realism.",
|
||||||
60.0f ),
|
60.0f ),
|
||||||
new ParameterDefn<bool>("VehicleDebuggingEnable", "Turn on/off vehicle debugging",
|
new ParameterDefn<bool>("VehicleEnableLinearDeflection", "Turn on/off vehicle linear deflection effect",
|
||||||
false ),
|
true ),
|
||||||
|
new ParameterDefn<bool>("VehicleLinearDeflectionNotCollidingNoZ", "Turn on/off linear deflection Z effect on non-colliding vehicles",
|
||||||
|
true ),
|
||||||
|
new ParameterDefn<bool>("VehicleEnableAngularVerticalAttraction", "Turn on/off vehicle angular vertical attraction effect",
|
||||||
|
true ),
|
||||||
|
new ParameterDefn<int>("VehicleAngularVerticalAttractionAlgorithm", "Select vertical attraction algo. You need to look at the source.",
|
||||||
|
0 ),
|
||||||
|
new ParameterDefn<bool>("VehicleEnableAngularDeflection", "Turn on/off vehicle angular deflection effect",
|
||||||
|
true ),
|
||||||
|
new ParameterDefn<bool>("VehicleEnableAngularBanking", "Turn on/off vehicle angular banking effect",
|
||||||
|
true ),
|
||||||
|
|
||||||
new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)",
|
new ParameterDefn<float>("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)",
|
||||||
0f,
|
0f,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
*
|
*
|
||||||
|
@ -648,7 +648,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
|
||||||
simTime = Util.EnvironmentTickCountSubtract(beforeTime);
|
simTime = Util.EnvironmentTickCountSubtract(beforeTime);
|
||||||
if (PhysicsLogging.Enabled)
|
if (PhysicsLogging.Enabled)
|
||||||
{
|
{
|
||||||
DetailLog("{0},DoPhysicsStep,call, frame={1}, nTaints={2}, simTime={3}, substeps={4}, updates={5}, colliders={6}, objWColl={7}",
|
DetailLog("{0},DoPhysicsStep,complete,frame={1}, nTaints={2}, simTime={3}, substeps={4}, updates={5}, colliders={6}, objWColl={7}",
|
||||||
DetailLogZero, m_simulationStep, numTaints, simTime, numSubSteps,
|
DetailLogZero, m_simulationStep, numTaints, simTime, numSubSteps,
|
||||||
updatedEntityCount, collidersCount, ObjectsWithCollisions.Count);
|
updatedEntityCount, collidersCount, ObjectsWithCollisions.Count);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,8 @@ public class BasicVehicles : OpenSimTestCase
|
||||||
public void Init()
|
public void Init()
|
||||||
{
|
{
|
||||||
Dictionary<string, string> engineParams = new Dictionary<string, string>();
|
Dictionary<string, string> engineParams = new Dictionary<string, string>();
|
||||||
|
engineParams.Add("VehicleEnableAngularVerticalAttraction", "true");
|
||||||
|
engineParams.Add("VehicleAngularVerticalAttractionAlgorithm", "1");
|
||||||
PhysicsScene = BulletSimTestsUtil.CreateBasicPhysicsEngine(engineParams);
|
PhysicsScene = BulletSimTestsUtil.CreateBasicPhysicsEngine(engineParams);
|
||||||
|
|
||||||
PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateSphere();
|
PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateSphere();
|
||||||
|
@ -119,7 +121,7 @@ public class BasicVehicles : OpenSimTestCase
|
||||||
{
|
{
|
||||||
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency);
|
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, efficiency);
|
||||||
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale);
|
vehicleActor.ProcessFloatVehicleParam(Vehicle.VERTICAL_ATTRACTION_TIMESCALE, timeScale);
|
||||||
vehicleActor.enableAngularVerticalAttraction = true;
|
// vehicleActor.enableAngularVerticalAttraction = true;
|
||||||
|
|
||||||
TestVehicle.IsPhysical = true;
|
TestVehicle.IsPhysical = true;
|
||||||
PhysicsScene.ProcessTaints();
|
PhysicsScene.ProcessTaints();
|
||||||
|
|
|
@ -108,7 +108,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private Vector3 m_taintAngularLock = Vector3.One;
|
private Vector3 m_taintAngularLock = Vector3.One;
|
||||||
private IntPtr Amotor = IntPtr.Zero;
|
private IntPtr Amotor = IntPtr.Zero;
|
||||||
|
|
||||||
private object m_assetsLock = new object();
|
|
||||||
private bool m_assetFailed = false;
|
private bool m_assetFailed = false;
|
||||||
|
|
||||||
private Vector3 m_PIDTarget;
|
private Vector3 m_PIDTarget;
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class OdePlugin : IPhysicsPlugin
|
public class OdePlugin : IPhysicsPlugin
|
||||||
{
|
{
|
||||||
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private OdeScene m_scene;
|
private OdeScene m_scene;
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
m_allowedTypes = allowedTypes;
|
m_allowedTypes = allowedTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
m_AssetService = service;
|
m_AssetService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
byte[] result = new byte[0];
|
byte[] result = new byte[0];
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
m_AssetService = service;
|
m_AssetService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
AssetBase asset;
|
AssetBase asset;
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace OpenSim.Server.Handlers.Authentication
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
string[] p = SplitParams(path);
|
string[] p = SplitParams(path);
|
||||||
|
|
|
@ -147,7 +147,7 @@ namespace OpenSim.Server.Handlers.Authentication
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public class OpenIdStreamHandler : IStreamHandler
|
public class OpenIdStreamHandler : BaseOutputStreamHandler
|
||||||
{
|
{
|
||||||
#region HTML
|
#region HTML
|
||||||
|
|
||||||
|
@ -191,42 +191,34 @@ For more information, see <a href='http://openid.net/'>http://openid.net/</a>.
|
||||||
|
|
||||||
#endregion HTML
|
#endregion HTML
|
||||||
|
|
||||||
public string Name { get { return "OpenId"; } }
|
|
||||||
public string Description { get { return null; } }
|
|
||||||
public string ContentType { get { return m_contentType; } }
|
|
||||||
public string HttpMethod { get { return m_httpMethod; } }
|
|
||||||
public string Path { get { return m_path; } }
|
|
||||||
|
|
||||||
string m_contentType;
|
|
||||||
string m_httpMethod;
|
|
||||||
string m_path;
|
|
||||||
IAuthenticationService m_authenticationService;
|
IAuthenticationService m_authenticationService;
|
||||||
IUserAccountService m_userAccountService;
|
IUserAccountService m_userAccountService;
|
||||||
ProviderMemoryStore m_openidStore = new ProviderMemoryStore();
|
ProviderMemoryStore m_openidStore = new ProviderMemoryStore();
|
||||||
|
|
||||||
|
public override string ContentType { get { return "text/html"; } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor
|
/// Constructor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public OpenIdStreamHandler(string httpMethod, string path, IUserAccountService userService, IAuthenticationService authService)
|
public OpenIdStreamHandler(
|
||||||
|
string httpMethod, string path, IUserAccountService userService, IAuthenticationService authService)
|
||||||
|
: base(httpMethod, path, "OpenId", "OpenID stream handler")
|
||||||
{
|
{
|
||||||
m_authenticationService = authService;
|
m_authenticationService = authService;
|
||||||
m_userAccountService = userService;
|
m_userAccountService = userService;
|
||||||
m_httpMethod = httpMethod;
|
|
||||||
m_path = path;
|
|
||||||
|
|
||||||
m_contentType = "text/html";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles all GET and POST requests for OpenID identifier pages and endpoint
|
/// Handles all GET and POST requests for OpenID identifier pages and endpoint
|
||||||
/// server communication
|
/// server communication
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Handle(string path, Stream request, Stream response, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override void ProcessRequest(
|
||||||
|
string path, Stream request, Stream response, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
Uri providerEndpoint = new Uri(String.Format("{0}://{1}{2}", httpRequest.Url.Scheme, httpRequest.Url.Authority, httpRequest.Url.AbsolutePath));
|
Uri providerEndpoint = new Uri(String.Format("{0}://{1}{2}", httpRequest.Url.Scheme, httpRequest.Url.Authority, httpRequest.Url.AbsolutePath));
|
||||||
|
|
||||||
// Defult to returning HTML content
|
// Defult to returning HTML content
|
||||||
m_contentType = "text/html";
|
httpResponse.ContentType = ContentType;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -276,7 +268,7 @@ For more information, see <a href='http://openid.net/'>http://openid.net/</a>.
|
||||||
|
|
||||||
string[] contentTypeValues = provider.Request.Response.Headers.GetValues("Content-Type");
|
string[] contentTypeValues = provider.Request.Response.Headers.GetValues("Content-Type");
|
||||||
if (contentTypeValues != null && contentTypeValues.Length == 1)
|
if (contentTypeValues != null && contentTypeValues.Length == 1)
|
||||||
m_contentType = contentTypeValues[0];
|
httpResponse.ContentType = contentTypeValues[0];
|
||||||
|
|
||||||
// Set the response code and document body based on the OpenID result
|
// Set the response code and document body based on the OpenID result
|
||||||
httpResponse.StatusCode = (int)provider.Request.Response.Code;
|
httpResponse.StatusCode = (int)provider.Request.Response.Code;
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Server.Handlers.Authorization
|
||||||
m_AuthorizationService = service;
|
m_AuthorizationService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
XmlSerializer xs = new XmlSerializer(typeof (AuthorizationRequest));
|
XmlSerializer xs = new XmlSerializer(typeof (AuthorizationRequest));
|
||||||
|
|
|
@ -56,7 +56,7 @@ namespace OpenSim.Server.Handlers.Avatar
|
||||||
m_AvatarService = service;
|
m_AvatarService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -57,7 +57,7 @@ namespace OpenSim.Server.Handlers.Friends
|
||||||
m_FriendsService = service;
|
m_FriendsService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -57,7 +57,7 @@ namespace OpenSim.Server.Handlers.Grid
|
||||||
m_GridService = service;
|
m_GridService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -56,7 +56,7 @@ namespace OpenSim.Server.Handlers.GridUser
|
||||||
m_GridUserService = service;
|
m_GridUserService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -68,7 +68,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
m_log.ErrorFormat("[HGFRIENDS HANDLER]: TheService is null!");
|
m_log.ErrorFormat("[HGFRIENDS HANDLER]: TheService is null!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -91,7 +91,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
m_HandlersType = handlersType;
|
m_HandlersType = handlersType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
return OKResponse(httpResponse);
|
return OKResponse(httpResponse);
|
||||||
|
|
|
@ -68,6 +68,7 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
{
|
{
|
||||||
return new ExtendedAgentDestinationData();
|
return new ExtendedAgentDestinationData();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UnpackData(OSDMap args, AgentDestinationData d, Hashtable request)
|
protected override void UnpackData(OSDMap args, AgentDestinationData d, Hashtable request)
|
||||||
{
|
{
|
||||||
base.UnpackData(args, d, request);
|
base.UnpackData(args, d, request);
|
||||||
|
|
|
@ -56,7 +56,7 @@ namespace OpenSim.Server.Handlers.Inventory
|
||||||
m_InventoryService = service;
|
m_InventoryService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
XmlSerializer xs = new XmlSerializer(typeof (List<InventoryItemBase>));
|
XmlSerializer xs = new XmlSerializer(typeof (List<InventoryItemBase>));
|
||||||
|
|
|
@ -87,7 +87,7 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
m_InventoryService = service;
|
m_InventoryService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -99,7 +99,7 @@ namespace OpenSim.Server.Handlers.MapImage
|
||||||
m_Proxy = proxy;
|
m_Proxy = proxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[MAP SERVICE IMAGE HANDLER]: Received {0}", path);
|
// m_log.DebugFormat("[MAP SERVICE IMAGE HANDLER]: Received {0}", path);
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace OpenSim.Server.Handlers.MapImage
|
||||||
m_MapService = service;
|
m_MapService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
byte[] result = new byte[0];
|
byte[] result = new byte[0];
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace OpenSim.Server.Handlers.Neighbour
|
||||||
// TODO: unused: m_AuthenticationService = authentication;
|
// TODO: unused: m_AuthenticationService = authentication;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// Not implemented yet
|
// Not implemented yet
|
||||||
|
@ -83,7 +83,7 @@ namespace OpenSim.Server.Handlers.Neighbour
|
||||||
// TODO: unused: m_AllowForeignGuests = foreignGuests;
|
// TODO: unused: m_AllowForeignGuests = foreignGuests;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
byte[] result = new byte[0];
|
byte[] result = new byte[0];
|
||||||
|
@ -176,7 +176,7 @@ namespace OpenSim.Server.Handlers.Neighbour
|
||||||
// TODO: unused: m_AuthenticationService = authentication;
|
// TODO: unused: m_AuthenticationService = authentication;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// Not implemented yet
|
// Not implemented yet
|
||||||
|
@ -197,7 +197,7 @@ namespace OpenSim.Server.Handlers.Neighbour
|
||||||
// TODO: unused: m_AuthenticationService = authentication;
|
// TODO: unused: m_AuthenticationService = authentication;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// Not implemented yet
|
// Not implemented yet
|
||||||
|
|
|
@ -56,7 +56,7 @@ namespace OpenSim.Server.Handlers.Presence
|
||||||
m_PresenceService = service;
|
m_PresenceService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -251,7 +251,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
m_SimulationService = null;
|
m_SimulationService = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SIMULATION]: Stream handler called");
|
// m_log.DebugFormat("[SIMULATION]: Stream handler called");
|
||||||
|
@ -457,7 +457,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
m_SimulationService = null;
|
m_SimulationService = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request,
|
protected override byte[] ProcessRequest(string path, Stream request,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SIMULATION]: Stream handler called");
|
// m_log.DebugFormat("[SIMULATION]: Stream handler called");
|
||||||
|
|
|
@ -68,7 +68,7 @@ namespace OpenSim.Server.Handlers.UserAccounts
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream requestData,
|
protected override byte[] ProcessRequest(string path, Stream requestData,
|
||||||
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
{
|
{
|
||||||
StreamReader sr = new StreamReader(requestData);
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Services.HypergridService
|
||||||
LogManager.GetLogger(
|
LogManager.GetLogger(
|
||||||
MethodBase.GetCurrentMethod().DeclaringType);
|
MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private string m_HomeURL;
|
// private string m_HomeURL;
|
||||||
private IUserAccountService m_UserAccountService;
|
private IUserAccountService m_UserAccountService;
|
||||||
private IAvatarService m_AvatarService;
|
private IAvatarService m_AvatarService;
|
||||||
|
|
||||||
|
@ -96,8 +96,8 @@ namespace OpenSim.Services.HypergridService
|
||||||
if (m_AvatarService == null)
|
if (m_AvatarService == null)
|
||||||
throw new Exception(String.Format("Unable to create m_AvatarService from {0}", avatarDll));
|
throw new Exception(String.Format("Unable to create m_AvatarService from {0}", avatarDll));
|
||||||
|
|
||||||
m_HomeURL = Util.GetConfigVarFromSections<string>(config, "HomeURI",
|
// m_HomeURL = Util.GetConfigVarFromSections<string>(config, "HomeURI",
|
||||||
new string[] { "Startup", "Hypergrid", m_ConfigName }, String.Empty);
|
// new string[] { "Startup", "Hypergrid", m_ConfigName }, String.Empty);
|
||||||
|
|
||||||
// m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService);
|
// m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue