From 3376b82501000692d6dac24b051af738cdaf2737 Mon Sep 17 00:00:00 2001
From: MW
Date: Thu, 24 May 2007 12:16:50 +0000
Subject: Some more code refactoring, plus a restructuring of the directories
so that the Grid servers can be a separate solution to the region server.
---
.../OpenSim.GridInterfaces/Remote/AssemblyInfo.cs | 31 +++
.../Remote/OpenSim.GridInterfaces.Remote.csproj | 112 +++++++++++
.../OpenSim.GridInterfaces.Remote.csproj.user | 12 ++
.../Remote/OpenSim.GridInterfaces.Remote.dll.build | 46 +++++
.../Remote/RemoteAssetServer.cs | 108 +++++++++++
.../Remote/RemoteGridServer.cs | 210 +++++++++++++++++++++
6 files changed, 519 insertions(+)
create mode 100644 OpenSim-Source/OpenSim.GridInterfaces/Remote/AssemblyInfo.cs
create mode 100644 OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj
create mode 100644 OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj.user
create mode 100644 OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build
create mode 100644 OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteAssetServer.cs
create mode 100644 OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteGridServer.cs
(limited to 'OpenSim-Source/OpenSim.GridInterfaces/Remote')
diff --git a/OpenSim-Source/OpenSim.GridInterfaces/Remote/AssemblyInfo.cs b/OpenSim-Source/OpenSim.GridInterfaces/Remote/AssemblyInfo.cs
new file mode 100644
index 0000000..0fa7d6e
--- /dev/null
+++ b/OpenSim-Source/OpenSim.GridInterfaces/Remote/AssemblyInfo.cs
@@ -0,0 +1,31 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Information about this assembly is defined by the following
+// attributes.
+//
+// change them to the information which is associated with the assembly
+// you compile.
+
+[assembly: AssemblyTitle("RemoteGridServers")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("RemoteGridServers")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// This sets the default COM visibility of types in the assembly to invisible.
+// If you need to expose a type to COM, use [ComVisible(true)] on that type.
+[assembly: ComVisible(false)]
+
+// The assembly version has following format :
+//
+// Major.Minor.Build.Revision
+//
+// You can specify all values by your own or you can build default build and revision
+// numbers with the '*' character (the default):
+
+[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj b/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj
new file mode 100644
index 0000000..b004c10
--- /dev/null
+++ b/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj
@@ -0,0 +1,112 @@
+
+
+ Local
+ 8.0.50727
+ 2.0
+ {B55C0B5D-0000-0000-0000-000000000000}
+ Debug
+ AnyCPU
+
+
+
+ OpenSim.GridInterfaces.Remote
+ JScript
+ Grid
+ IE50
+ false
+ Library
+
+ OpenSim.GridInterfaces.Remote
+
+
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE;DEBUG
+
+ True
+ 4096
+ False
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+ False
+ 285212672
+ False
+
+
+ TRACE
+
+ False
+ 4096
+ True
+ ..\..\bin\
+ False
+ False
+ False
+ 4
+
+
+
+
+ System.dll
+ False
+
+
+ System.Xml.dll
+ False
+
+
+ ..\..\bin\libsecondlife.dll
+ False
+
+
+
+
+ OpenSim.Framework
+ {8ACA2445-0000-0000-0000-000000000000}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ False
+
+
+ OpenSim.Framework.Console
+ {A7CD0630-0000-0000-0000-000000000000}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ False
+
+
+ XMLRPC
+ {8E81D43C-0000-0000-0000-000000000000}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ False
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj.user b/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj.user
new file mode 100644
index 0000000..d47d65d
--- /dev/null
+++ b/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj.user
@@ -0,0 +1,12 @@
+
+
+ Debug
+ AnyCPU
+ C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-07\bin\
+ 8.0.50727
+ ProjectFiles
+ 0
+
+
+
+
diff --git a/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build b/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build
new file mode 100644
index 0000000..96272dd
--- /dev/null
+++ b/OpenSim-Source/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteAssetServer.cs b/OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteAssetServer.cs
new file mode 100644
index 0000000..7432dee
--- /dev/null
+++ b/OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteAssetServer.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using libsecondlife;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Types;
+using OpenSim.Framework.Utilities;
+
+namespace OpenSim.GridInterfaces.Remote
+{
+ public class RemoteAssetServer : IAssetServer
+ {
+ private IAssetReceiver _receiver;
+ private BlockingQueue _assetRequests;
+ private Thread _remoteAssetServerThread;
+ private string AssetServerUrl;
+ private string AssetSendKey;
+
+ public RemoteAssetServer()
+ {
+ this._assetRequests = new BlockingQueue();
+ this._remoteAssetServerThread = new Thread(new ThreadStart(RunRequests));
+ this._remoteAssetServerThread.IsBackground = true;
+ this._remoteAssetServerThread.Start();
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW,"Remote Asset Server class created");
+ }
+
+ public void SetReceiver(IAssetReceiver receiver)
+ {
+ this._receiver = receiver;
+ }
+
+ public void RequestAsset(LLUUID assetID, bool isTexture)
+ {
+ ARequest req = new ARequest();
+ req.AssetID = assetID;
+ req.IsTexture = isTexture;
+ this._assetRequests.Enqueue(req);
+ }
+
+ public void UpdateAsset(AssetBase asset)
+ {
+
+ }
+
+ public void UploadNewAsset(AssetBase asset)
+ {
+ Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
+ string ret = Windows1252Encoding.GetString(asset.Data);
+ byte[] buffer = Windows1252Encoding.GetBytes(ret);
+ WebClient client = new WebClient();
+ client.UploadData(this.AssetServerUrl + "assets/" + asset.FullID, buffer);
+
+ }
+
+ public void SetServerInfo(string ServerUrl, string ServerKey)
+ {
+ this.AssetServerUrl = ServerUrl;
+ this.AssetSendKey = ServerKey;
+ }
+
+ private void RunRequests()
+ {
+ while (true)
+ {
+ //we need to add support for the asset server not knowing about a requested asset
+ // 404... THE MAGIC FILE NOT FOUND ERROR, very useful for telling you things such as a file (or asset ;) ) not being found!!!!!!!!!!! it's 2:22AM
+ ARequest req = this._assetRequests.Dequeue();
+ LLUUID assetID = req.AssetID;
+ // OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW," RemoteAssetServer- Got a AssetServer request, processing it - " + this.AssetServerUrl + "assets/" + assetID);
+ WebRequest AssetLoad = WebRequest.Create(this.AssetServerUrl + "assets/" + assetID);
+ WebResponse AssetResponse = AssetLoad.GetResponse();
+ byte[] idata = new byte[(int)AssetResponse.ContentLength];
+ BinaryReader br = new BinaryReader(AssetResponse.GetResponseStream());
+ idata = br.ReadBytes((int)AssetResponse.ContentLength);
+ br.Close();
+
+ AssetBase asset = new AssetBase();
+ asset.FullID = assetID;
+ asset.Data = idata;
+ _receiver.AssetReceived(asset, req.IsTexture);
+ }
+ }
+
+ public void Close()
+ {
+
+ }
+ }
+
+ public class RemoteAssetPlugin : IAssetPlugin
+ {
+ public RemoteAssetPlugin()
+ {
+
+ }
+
+ public IAssetServer GetAssetServer()
+ {
+ return (new RemoteAssetServer());
+ }
+ }
+
+}
diff --git a/OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteGridServer.cs b/OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteGridServer.cs
new file mode 100644
index 0000000..7f911d8
--- /dev/null
+++ b/OpenSim-Source/OpenSim.GridInterfaces/Remote/RemoteGridServer.cs
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
+*
+* 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 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 ``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 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;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using libsecondlife;
+using Nwc.XmlRpc;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Types;
+
+namespace OpenSim.GridInterfaces.Remote
+{
+ public class RemoteGridServer : RemoteGridBase
+ {
+ private string GridServerUrl;
+ private string GridSendKey;
+ private string GridRecvKey;
+ private Dictionary AgentCircuits = new Dictionary();
+ private ArrayList simneighbours = new ArrayList();
+ private Hashtable griddatahash;
+
+ public override Dictionary agentcircuits
+ {
+ get { return AgentCircuits; }
+ set { AgentCircuits = value; }
+ }
+
+ public override ArrayList neighbours
+ {
+ get { return simneighbours; }
+ set { simneighbours = value; }
+ }
+
+ public override Hashtable GridData
+ {
+ get { return griddatahash; }
+ set { griddatahash = value; }
+ }
+
+
+ public RemoteGridServer()
+ {
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "Remote Grid Server class created");
+ }
+
+ public override bool RequestConnection(LLUUID SimUUID, string sim_ip, uint sim_port)
+ {
+ Hashtable GridParams = new Hashtable();
+ GridParams["authkey"] = GridSendKey;
+ GridParams["UUID"] = SimUUID.ToString();
+ GridParams["sim_ip"] = sim_ip;
+ GridParams["sim_port"] = sim_port.ToString();
+ ArrayList SendParams = new ArrayList();
+ SendParams.Add(GridParams);
+
+ XmlRpcRequest GridReq = new XmlRpcRequest("simulator_login", SendParams);
+ XmlRpcResponse GridResp = GridReq.Send(this.GridServerUrl, 3000);
+ Hashtable GridRespData = (Hashtable)GridResp.Value;
+ this.griddatahash = GridRespData;
+
+ if (GridRespData.ContainsKey("error"))
+ {
+ string errorstring = (string)GridRespData["error"];
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "Error connecting to grid:");
+ OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, errorstring);
+ return false;
+ }
+ this.neighbours = (ArrayList)GridRespData["neighbours"];
+ Console.WriteLine(simneighbours.Count);
+ return true;
+ }
+
+ public override AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitcode)
+ {
+ AgentCircuitData validcircuit = null;
+ if (this.AgentCircuits.ContainsKey(circuitcode))
+ {
+ validcircuit = this.AgentCircuits[circuitcode];
+ }
+ AuthenticateResponse user = new AuthenticateResponse();
+ if (validcircuit == null)
+ {
+ //don't have this circuit code in our list
+ user.Authorised = false;
+ return (user);
+ }
+
+ if ((sessionID == validcircuit.SessionID) && (agentID == validcircuit.AgentID))
+ {
+ // YAY! Valid login
+ user.Authorised = true;
+ user.LoginInfo = new Login();
+ user.LoginInfo.Agent = agentID;
+ user.LoginInfo.Session = sessionID;
+ user.LoginInfo.SecureSession = validcircuit.SecureSessionID;
+ user.LoginInfo.First = validcircuit.firstname;
+ user.LoginInfo.Last = validcircuit.lastname;
+ }
+ else
+ {
+ // Invalid
+ user.Authorised = false;
+ }
+
+ return (user);
+ }
+
+ public override bool LogoutSession(LLUUID sessionID, LLUUID agentID, uint circuitCode)
+ {
+ WebRequest DeleteSession = WebRequest.Create(GridServerUrl + "/usersessions/" + sessionID.ToString());
+ DeleteSession.Method = "DELETE";
+ DeleteSession.ContentType = "text/plaintext";
+ DeleteSession.ContentLength = 0;
+
+ StreamWriter stOut = new StreamWriter(DeleteSession.GetRequestStream(), System.Text.Encoding.ASCII);
+ stOut.Write("");
+ stOut.Close();
+
+ StreamReader stIn = new StreamReader(DeleteSession.GetResponse().GetResponseStream());
+ string GridResponse = stIn.ReadToEnd();
+ stIn.Close();
+ return (true);
+ }
+
+ public override UUIDBlock RequestUUIDBlock()
+ {
+ UUIDBlock uuidBlock = new UUIDBlock();
+ return (uuidBlock);
+ }
+
+ public override NeighbourInfo[] RequestNeighbours()
+ {
+ return null;
+ }
+
+ public override IList RequestMapBlocks(int minX, int minY, int maxX, int maxY)
+ {
+ Hashtable param = new Hashtable();
+ param["xmin"] = minX;
+ param["ymin"] = minY;
+ param["xmax"] = maxX;
+ param["ymax"] = maxY;
+ IList parameters = new ArrayList();
+ parameters.Add(param);
+ XmlRpcRequest req = new XmlRpcRequest("map_block", parameters);
+ XmlRpcResponse resp = req.Send(GridServerUrl, 3000);
+ Hashtable respData = (Hashtable)resp.Value;
+ return (IList)respData["sim-profiles"];
+ }
+
+ public override void SetServerInfo(string ServerUrl, string SendKey, string RecvKey)
+ {
+ this.GridServerUrl = ServerUrl;
+ this.GridSendKey = SendKey;
+ this.GridRecvKey = RecvKey;
+ }
+
+ public override string GetName()
+ {
+ return "Remote";
+ }
+
+ public override void Close()
+ {
+
+ }
+ }
+
+ public class RemoteGridPlugin : IGridPlugin
+ {
+ public RemoteGridPlugin()
+ {
+
+ }
+
+ public IGridServer GetGridServer()
+ {
+ return (new RemoteGridServer());
+ }
+ }
+
+}
--
cgit v1.1