Missed these files
parent
ade1acc9d4
commit
4b90dcfb73
|
@ -0,0 +1,39 @@
|
||||||
|
using System;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Server.Base;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
using OpenSim.Server.Handlers.Base;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
|
||||||
|
|
||||||
|
namespace OpenSim.Server.Handlers.Integration
|
||||||
|
{
|
||||||
|
public class IntegrationServiceConnector : ServiceConnector
|
||||||
|
{
|
||||||
|
|
||||||
|
private IIntegrationService m_IntegrationService;
|
||||||
|
private string m_ConfigName = "IntegrationService";
|
||||||
|
|
||||||
|
public IntegrationServiceConnector(IConfigSource config, IHttpServer server, string configName) :
|
||||||
|
base(config, server, configName)
|
||||||
|
{
|
||||||
|
IConfig serverConfig = config.Configs[m_ConfigName];
|
||||||
|
if (serverConfig == null)
|
||||||
|
throw new Exception(String.Format("No section {0} in config file", m_ConfigName));
|
||||||
|
|
||||||
|
string service = serverConfig.GetString("LocalServiceModule",
|
||||||
|
String.Empty);
|
||||||
|
|
||||||
|
if (service == String.Empty)
|
||||||
|
throw new Exception("No LocalServiceModule in config file");
|
||||||
|
|
||||||
|
Object[] args = new Object[] { config };
|
||||||
|
m_IntegrationService = ServerUtils.LoadPlugin<IIntegrationService>(service, args);
|
||||||
|
|
||||||
|
server.AddStreamHandler(new IntegrationServerHandler(m_IntegrationService));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,127 @@
|
||||||
|
using OpenSim.Server.Base;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.StructuredData;
|
||||||
|
using log4net;
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace OpenSim.Server.Handlers.Integration
|
||||||
|
{
|
||||||
|
public class IntegrationServerHandler : BaseStreamHandler
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private IIntegrationService m_IntegrationService;
|
||||||
|
|
||||||
|
public IntegrationServerHandler(IIntegrationService service) :
|
||||||
|
base("POST", "/integration")
|
||||||
|
{
|
||||||
|
m_IntegrationService = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override byte[] Handle(string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
|
||||||
|
{
|
||||||
|
StreamReader sr = new StreamReader(requestData);
|
||||||
|
string body = sr.ReadToEnd();
|
||||||
|
sr.Close();
|
||||||
|
body = body.Trim();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OSDMap request = null;
|
||||||
|
if (ServerUtils.ParseStringToOSDMap(body, out request) == false)
|
||||||
|
return FailureResult();
|
||||||
|
|
||||||
|
// Dictionary<string, object> request = ServerUtils.ParseQueryString(body);
|
||||||
|
|
||||||
|
if (!request.ContainsKey("command"))
|
||||||
|
return FailureResult("Error, no command defined!");
|
||||||
|
string command = request["command"].AsString();
|
||||||
|
|
||||||
|
// command...
|
||||||
|
switch (command)
|
||||||
|
{
|
||||||
|
// agent
|
||||||
|
case "verify_agent_ssession":
|
||||||
|
return HandleVerifyAgentSession(request);
|
||||||
|
|
||||||
|
case "verify_agent_region":
|
||||||
|
return FailureResult("Not Implemented");
|
||||||
|
|
||||||
|
default:
|
||||||
|
m_log.DebugFormat("[IntegrationHandler]: unknown method {0} request {1}", command.Length, command);
|
||||||
|
return FailureResult("IntegrationHandler: Unrecognized method requested!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[IntegrationHandler]: Exception {0}", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return FailureResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Handlers
|
||||||
|
/// <summary>
|
||||||
|
/// Verifies the agent to external applications.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>
|
||||||
|
/// UUID of the agent.
|
||||||
|
/// </returns>
|
||||||
|
/// <param name='request'>
|
||||||
|
/// request - Send SecureSessionID and optionally Encoding=xml for xml Output
|
||||||
|
/// </param>
|
||||||
|
byte[] HandleVerifyAgentSession(OSDMap request)
|
||||||
|
{
|
||||||
|
UUID s_session = UUID.Zero;
|
||||||
|
|
||||||
|
if (!request.ContainsKey("SecureSessionID"))
|
||||||
|
return FailureResult();
|
||||||
|
|
||||||
|
if (!UUID.TryParse(request["SecureSessionID"].AsString(), out s_session))
|
||||||
|
return FailureResult();
|
||||||
|
|
||||||
|
PresenceInfo pinfo = m_IntegrationService.VerifyAgent(s_session);
|
||||||
|
|
||||||
|
OSDMap result = new OSDMap();
|
||||||
|
|
||||||
|
if (pinfo == null)
|
||||||
|
result["agent_id"] = OSD.FromUUID(UUID.Zero);
|
||||||
|
else
|
||||||
|
result["agent_id"] = OSD.FromString(pinfo.UserID.ToString());
|
||||||
|
|
||||||
|
return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(result));
|
||||||
|
}
|
||||||
|
#endregion Handlers
|
||||||
|
|
||||||
|
#region utility
|
||||||
|
private byte[] FailureResult()
|
||||||
|
{
|
||||||
|
return FailureResult(String.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private byte[] FailureResult(string msg)
|
||||||
|
{
|
||||||
|
OSDMap doc = new OSDMap(2);
|
||||||
|
doc["Result"] = OSD.FromString("Failure");
|
||||||
|
doc["Message"] = OSD.FromString(msg);
|
||||||
|
|
||||||
|
return DocToBytes(doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private byte[] DocToBytes(OSDMap doc)
|
||||||
|
{
|
||||||
|
return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(doc));
|
||||||
|
}
|
||||||
|
#endregion utility
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue