2009-01-05 22:59:29 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Security.Cryptography.X509Certificates;
|
|
|
|
|
|
using ExtensionLoader;
|
|
|
|
|
|
using HttpServer;
|
|
|
|
|
|
using OpenMetaverse;
|
|
|
|
|
|
using OpenMetaverse.Http;
|
|
|
|
|
|
using OpenMetaverse.StructuredData;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Simian.Extensions
|
|
|
|
|
|
{
|
|
|
|
|
|
public class CapsManager : IExtension<Simian>, ICapabilitiesProvider
|
|
|
|
|
|
{
|
|
|
|
|
|
Simian server;
|
|
|
|
|
|
CapsServer capsServer;
|
|
|
|
|
|
|
|
|
|
|
|
public CapsManager()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Start(Simian server)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.server = server;
|
2009-02-04 23:00:33 +00:00
|
|
|
|
capsServer = new CapsServer(server.HttpServer, @"^/caps/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$");
|
|
|
|
|
|
capsServer.Start();
|
2009-01-05 22:59:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Stop()
|
|
|
|
|
|
{
|
2009-03-02 23:00:28 +00:00
|
|
|
|
if (capsServer != null)
|
|
|
|
|
|
capsServer.Stop();
|
2009-01-05 22:59:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2009-02-04 23:00:33 +00:00
|
|
|
|
public Uri CreateCapability(CapsRequestCallback localHandler, bool clientCertRequired, object state)
|
2009-01-05 22:59:29 +00:00
|
|
|
|
{
|
2009-02-04 23:00:33 +00:00
|
|
|
|
UUID capID = capsServer.CreateCapability(localHandler, clientCertRequired, state);
|
|
|
|
|
|
return new Uri(
|
|
|
|
|
|
(server.SSL ? "https://" : "http://") +
|
|
|
|
|
|
server.HostName +
|
|
|
|
|
|
(server.HttpPort == 80 ? String.Empty : ":" + server.HttpPort) +
|
|
|
|
|
|
"/caps/" + capID.ToString());
|
2009-01-05 22:59:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2009-02-04 23:00:33 +00:00
|
|
|
|
public Uri CreateCapability(Uri remoteHandler, bool clientCertRequired)
|
2009-01-05 22:59:29 +00:00
|
|
|
|
{
|
2009-02-04 23:00:33 +00:00
|
|
|
|
UUID capID = capsServer.CreateCapability(remoteHandler, clientCertRequired);
|
|
|
|
|
|
return new Uri(
|
|
|
|
|
|
(server.SSL ? "https://" : "http://") +
|
|
|
|
|
|
server.HostName +
|
|
|
|
|
|
(server.HttpPort == 80 ? String.Empty : ":" + server.HttpPort) +
|
|
|
|
|
|
"/caps/" + capID.ToString());
|
2009-01-05 22:59:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2009-02-04 23:00:33 +00:00
|
|
|
|
public bool RemoveCapability(Uri cap)
|
2009-01-05 22:59:29 +00:00
|
|
|
|
{
|
2009-02-04 23:00:33 +00:00
|
|
|
|
string path = cap.PathAndQuery.TrimEnd('/');
|
|
|
|
|
|
UUID capID;
|
2009-01-05 22:59:29 +00:00
|
|
|
|
|
2009-02-04 23:00:33 +00:00
|
|
|
|
// Parse the capability UUID out of the URI
|
|
|
|
|
|
if (UUID.TryParse(path.Substring(path.Length - 36), out capID))
|
|
|
|
|
|
return capsServer.RemoveCapability(capID);
|
2009-01-05 22:59:29 +00:00
|
|
|
|
else
|
2009-02-04 23:00:33 +00:00
|
|
|
|
return false;
|
2009-01-05 22:59:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|