diff options
author | MW | 2007-06-27 15:28:52 +0000 |
---|---|---|
committer | MW | 2007-06-27 15:28:52 +0000 |
commit | 646bbbc84b8010e0dacbeed5342cdb045f46cc49 (patch) | |
tree | 770b34d19855363c3c113ab9a0af9a56d821d887 /OpenSim | |
download | opensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.zip opensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.gz opensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.bz2 opensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.xz |
Some work on restructuring the namespaces / project names. Note this doesn't compile yet as not all the code has been changed to use the new namespaces. Am committing it now for feedback on the namespaces.
Diffstat (limited to 'OpenSim')
267 files changed, 35176 insertions, 0 deletions
diff --git a/OpenSim/Framework/Communications.OGS1/GridCommsManager.cs b/OpenSim/Framework/Communications.OGS1/GridCommsManager.cs new file mode 100644 index 0000000..6687380 --- /dev/null +++ b/OpenSim/Framework/Communications.OGS1/GridCommsManager.cs | |||
@@ -0,0 +1,18 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Framework.Types; | ||
5 | using OpenSim.Framework.Communications; | ||
6 | namespace OpenSim.Framework.Communications.OGS1 | ||
7 | { | ||
8 | public class GridCommsManager : CommunicationsManager | ||
9 | { | ||
10 | private OGS1GridServices gridInterComms = new OGS1GridServices(); | ||
11 | public GridCommsManager(NetworkServersInfo serversInfo) :base(serversInfo) | ||
12 | { | ||
13 | GridServer = gridInterComms; | ||
14 | InterRegion = gridInterComms; | ||
15 | UserServer = new OGSUserServices(); | ||
16 | } | ||
17 | } | ||
18 | } | ||
diff --git a/OpenSim/Framework/Communications.OGS1/OGS1GridServices.cs b/OpenSim/Framework/Communications.OGS1/OGS1GridServices.cs new file mode 100644 index 0000000..408643f --- /dev/null +++ b/OpenSim/Framework/Communications.OGS1/OGS1GridServices.cs | |||
@@ -0,0 +1,248 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Collections; | ||
4 | using System.Text; | ||
5 | using System.Runtime.Remoting; | ||
6 | using System.Runtime.Remoting.Channels; | ||
7 | using System.Runtime.Remoting.Channels.Tcp; | ||
8 | |||
9 | using OpenSim.Servers; | ||
10 | using OpenSim.Framework; | ||
11 | using OpenSim.Framework.Types; | ||
12 | using OpenSim.Framework.Communications; | ||
13 | |||
14 | using Nwc.XmlRpc; | ||
15 | using libsecondlife; | ||
16 | |||
17 | namespace OpenSim.Framework.Communications.OGS1 | ||
18 | { | ||
19 | public class OGS1GridServices : IGridServices, IInterRegionCommunications | ||
20 | { | ||
21 | public Dictionary<ulong, RegionCommsListener> listeners = new Dictionary<ulong, RegionCommsListener>(); | ||
22 | public GridInfo grid; | ||
23 | public BaseHttpServer httpListener; | ||
24 | private bool initialised = false; | ||
25 | |||
26 | public RegionCommsListener RegisterRegion(RegionInfo regionInfo, GridInfo gridInfo) | ||
27 | { | ||
28 | Hashtable GridParams = new Hashtable(); | ||
29 | |||
30 | grid = gridInfo; | ||
31 | |||
32 | // Login / Authentication | ||
33 | GridParams["authkey"] = gridInfo.GridServerSendKey; | ||
34 | GridParams["UUID"] = regionInfo.SimUUID.ToStringHyphenated(); | ||
35 | GridParams["sim_ip"] = regionInfo.CommsExternalAddress; | ||
36 | GridParams["sim_port"] = regionInfo.CommsIPListenPort.ToString(); | ||
37 | |||
38 | // Package into an XMLRPC Request | ||
39 | ArrayList SendParams = new ArrayList(); | ||
40 | SendParams.Add(GridParams); | ||
41 | |||
42 | // Send Request | ||
43 | XmlRpcRequest GridReq = new XmlRpcRequest("simulator_login", SendParams); | ||
44 | XmlRpcResponse GridResp = GridReq.Send(gridInfo.GridServerURI, 3000); | ||
45 | Hashtable GridRespData = (Hashtable)GridResp.Value; | ||
46 | Hashtable griddatahash = GridRespData; | ||
47 | |||
48 | // Process Response | ||
49 | if (GridRespData.ContainsKey("error")) | ||
50 | { | ||
51 | string errorstring = (string)GridRespData["error"]; | ||
52 | OpenSim.Framework.Console.MainLog.Instance.Error("Unable to connect to grid: " + errorstring); | ||
53 | return null; | ||
54 | } | ||
55 | |||
56 | if (!this.listeners.ContainsKey(regionInfo.RegionHandle)) | ||
57 | { | ||
58 | // initialised = true; | ||
59 | httpListener = new BaseHttpServer(regionInfo.CommsIPListenPort); | ||
60 | httpListener.AddXmlRPCHandler("expect_user", this.ExpectUser); | ||
61 | httpListener.Start(); | ||
62 | } | ||
63 | |||
64 | // Initialise the background listeners | ||
65 | listeners[regionInfo.RegionHandle] = new RegionCommsListener(); | ||
66 | |||
67 | return listeners[regionInfo.RegionHandle]; | ||
68 | } | ||
69 | |||
70 | public List<RegionInfo> RequestNeighbours(RegionInfo regionInfo) | ||
71 | { | ||
72 | Hashtable respData = MapBlockQuery((int)regionInfo.RegionLocX - 1, (int)regionInfo.RegionLocY - 1, (int)regionInfo.RegionLocX + 1, (int)regionInfo.RegionLocY + 1); | ||
73 | |||
74 | List<RegionInfo> neighbours = new List<RegionInfo>(); | ||
75 | |||
76 | foreach (Hashtable n in (Hashtable)respData.Values) | ||
77 | { | ||
78 | RegionInfo neighbour = new RegionInfo(); | ||
79 | |||
80 | //OGS1 | ||
81 | neighbour.RegionHandle = (ulong)n["regionhandle"]; | ||
82 | neighbour.RegionLocX = (uint)n["x"]; | ||
83 | neighbour.RegionLocY = (uint)n["y"]; | ||
84 | neighbour.RegionName = (string)n["name"]; | ||
85 | |||
86 | //OGS1+ | ||
87 | neighbour.CommsIPListenAddr = (string)n["sim_ip"]; | ||
88 | neighbour.CommsIPListenPort = (int)n["sim_port"]; | ||
89 | neighbour.CommsExternalAddress = (string)n["sim_uri"]; | ||
90 | neighbour.SimUUID = (string)n["uuid"]; | ||
91 | |||
92 | neighbours.Add(neighbour); | ||
93 | } | ||
94 | |||
95 | return neighbours; | ||
96 | } | ||
97 | |||
98 | public RegionInfo RequestNeighbourInfo(ulong regionHandle) | ||
99 | { | ||
100 | OpenSim.Framework.Console.MainLog.Instance.Warn("Unimplemented - RequestNeighbourInfo()"); | ||
101 | return null; | ||
102 | } | ||
103 | |||
104 | public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY) | ||
105 | { | ||
106 | Hashtable respData = MapBlockQuery(minX, minY, maxX, maxY); | ||
107 | |||
108 | List<MapBlockData> neighbours = new List<MapBlockData>(); | ||
109 | |||
110 | foreach (Hashtable n in (Hashtable)respData.Values) | ||
111 | { | ||
112 | MapBlockData neighbour = new MapBlockData(); | ||
113 | |||
114 | neighbour.X = (ushort)n["x"]; | ||
115 | neighbour.Y = (ushort)n["y"]; | ||
116 | |||
117 | neighbour.Name = (string)n["name"]; | ||
118 | neighbour.Access = (byte)n["access"]; | ||
119 | neighbour.RegionFlags = (uint)n["region-flags"]; | ||
120 | neighbour.WaterHeight = (byte)n["water-height"]; | ||
121 | neighbour.MapImageId = (string)n["map-image-id"]; | ||
122 | |||
123 | neighbours.Add(neighbour); | ||
124 | } | ||
125 | |||
126 | return neighbours; | ||
127 | } | ||
128 | |||
129 | /// <summary> | ||
130 | /// Performs a XML-RPC query against the grid server returning mapblock information in the specified coordinates | ||
131 | /// </summary> | ||
132 | /// <remarks>REDUNDANT - OGS1 is to be phased out in favour of OGS2</remarks> | ||
133 | /// <param name="minX">Minimum X value</param> | ||
134 | /// <param name="minY">Minimum Y value</param> | ||
135 | /// <param name="maxX">Maximum X value</param> | ||
136 | /// <param name="maxY">Maximum Y value</param> | ||
137 | /// <returns>Hashtable of hashtables containing map data elements</returns> | ||
138 | private Hashtable MapBlockQuery(int minX, int minY, int maxX, int maxY) | ||
139 | { | ||
140 | Hashtable param = new Hashtable(); | ||
141 | param["xmin"] = minX; | ||
142 | param["ymin"] = minY; | ||
143 | param["xmax"] = maxX; | ||
144 | param["ymax"] = maxY; | ||
145 | IList parameters = new ArrayList(); | ||
146 | parameters.Add(param); | ||
147 | XmlRpcRequest req = new XmlRpcRequest("map_block", parameters); | ||
148 | XmlRpcResponse resp = req.Send(grid.GridServerURI, 3000); | ||
149 | Hashtable respData = (Hashtable)resp.Value; | ||
150 | return respData; | ||
151 | } | ||
152 | |||
153 | // Grid Request Processing | ||
154 | public XmlRpcResponse ExpectUser(XmlRpcRequest request) | ||
155 | { | ||
156 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
157 | AgentCircuitData agentData = new AgentCircuitData(); | ||
158 | agentData.SessionID = new LLUUID((string)requestData["session_id"]); | ||
159 | agentData.SecureSessionID = new LLUUID((string)requestData["secure_session_id"]); | ||
160 | agentData.firstname = (string)requestData["firstname"]; | ||
161 | agentData.lastname = (string)requestData["lastname"]; | ||
162 | agentData.AgentID = new LLUUID((string)requestData["agent_id"]); | ||
163 | agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); | ||
164 | if (requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1")) | ||
165 | { | ||
166 | agentData.child = true; | ||
167 | } | ||
168 | else | ||
169 | { | ||
170 | agentData.startpos = new LLVector3(Convert.ToUInt32(requestData["startpos_x"]), Convert.ToUInt32(requestData["startpos_y"]), Convert.ToUInt32(requestData["startpos_z"])); | ||
171 | agentData.child = false; | ||
172 | |||
173 | } | ||
174 | |||
175 | if (listeners.ContainsKey((ulong)requestData["regionhandle"])) | ||
176 | { | ||
177 | this.listeners[(ulong)requestData["regionhandle"]].TriggerExpectUser((ulong)requestData["regionhandle"], agentData); | ||
178 | } | ||
179 | else | ||
180 | { | ||
181 | OpenSim.Framework.Console.MainLog.Instance.Error("ExpectUser() - Unknown region " + ((ulong)requestData["regionhandle"]).ToString()); | ||
182 | } | ||
183 | |||
184 | return new XmlRpcResponse(); | ||
185 | } | ||
186 | |||
187 | #region InterRegion Comms | ||
188 | private void StartRemoting() | ||
189 | { | ||
190 | TcpChannel ch = new TcpChannel(8895); | ||
191 | ChannelServices.RegisterChannel(ch); | ||
192 | |||
193 | WellKnownServiceTypeEntry wellType = new WellKnownServiceTypeEntry( Type.GetType("OGS1InterRegionRemoting"), "InterRegions", WellKnownObjectMode.Singleton); | ||
194 | RemotingConfiguration.RegisterWellKnownServiceType(wellType); | ||
195 | InterRegionSingleton.Instance.OnArrival += this.IncomingArrival; | ||
196 | InterRegionSingleton.Instance.OnChildAgent += this.IncomingChildAgent; | ||
197 | } | ||
198 | |||
199 | #region Methods called by regions in this instance | ||
200 | public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData) | ||
201 | { | ||
202 | if (this.listeners.ContainsKey(regionHandle)) | ||
203 | { | ||
204 | this.listeners[regionHandle].TriggerExpectUser(regionHandle, agentData); | ||
205 | return true; | ||
206 | } | ||
207 | //TODO need to see if we know about where this region is and use .net remoting | ||
208 | // to inform it. | ||
209 | return false; | ||
210 | } | ||
211 | |||
212 | public bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position) | ||
213 | { | ||
214 | if (this.listeners.ContainsKey(regionHandle)) | ||
215 | { | ||
216 | this.listeners[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position); | ||
217 | return true; | ||
218 | } | ||
219 | //TODO need to see if we know about where this region is and use .net remoting | ||
220 | // to inform it. | ||
221 | return false; | ||
222 | } | ||
223 | #endregion | ||
224 | |||
225 | #region Methods triggered by calls from external instances | ||
226 | public bool IncomingChildAgent(ulong regionHandle, AgentCircuitData agentData) | ||
227 | { | ||
228 | if (this.listeners.ContainsKey(regionHandle)) | ||
229 | { | ||
230 | this.listeners[regionHandle].TriggerExpectUser(regionHandle, agentData); | ||
231 | return true; | ||
232 | } | ||
233 | return false; | ||
234 | } | ||
235 | |||
236 | public bool IncomingArrival(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position) | ||
237 | { | ||
238 | if (this.listeners.ContainsKey(regionHandle)) | ||
239 | { | ||
240 | this.listeners[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position); | ||
241 | return true; | ||
242 | } | ||
243 | return false; | ||
244 | } | ||
245 | #endregion | ||
246 | #endregion | ||
247 | } | ||
248 | } | ||
diff --git a/OpenSim/Framework/Communications.OGS1/OGSInterSimComms.cs b/OpenSim/Framework/Communications.OGS1/OGSInterSimComms.cs new file mode 100644 index 0000000..8ba257e --- /dev/null +++ b/OpenSim/Framework/Communications.OGS1/OGSInterSimComms.cs | |||
@@ -0,0 +1,70 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Framework.Types; | ||
5 | using OpenSim.Framework.Communications; | ||
6 | namespace OpenSim.Framework.Communications.OGS1 | ||
7 | { | ||
8 | public delegate bool InformRegionChild(ulong regionHandle, AgentCircuitData agentData); | ||
9 | public delegate bool ExpectArrival(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position); | ||
10 | |||
11 | public sealed class InterRegionSingleton | ||
12 | { | ||
13 | static readonly InterRegionSingleton instance = new InterRegionSingleton(); | ||
14 | |||
15 | public event InformRegionChild OnChildAgent; | ||
16 | public event ExpectArrival OnArrival; | ||
17 | |||
18 | static InterRegionSingleton() | ||
19 | { | ||
20 | } | ||
21 | |||
22 | InterRegionSingleton() | ||
23 | { | ||
24 | } | ||
25 | |||
26 | public static InterRegionSingleton Instance | ||
27 | { | ||
28 | get | ||
29 | { | ||
30 | return instance; | ||
31 | } | ||
32 | } | ||
33 | |||
34 | public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData) | ||
35 | { | ||
36 | if (OnChildAgent != null) | ||
37 | { | ||
38 | return OnChildAgent(regionHandle, agentData); | ||
39 | } | ||
40 | return false; | ||
41 | } | ||
42 | |||
43 | public bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position) | ||
44 | { | ||
45 | if (OnArrival != null) | ||
46 | { | ||
47 | return OnArrival(regionHandle, agentID, position); | ||
48 | } | ||
49 | return false; | ||
50 | } | ||
51 | } | ||
52 | |||
53 | public class OGS1InterRegionRemoting : MarshalByRefObject | ||
54 | { | ||
55 | |||
56 | public OGS1InterRegionRemoting() | ||
57 | { | ||
58 | } | ||
59 | |||
60 | public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData) | ||
61 | { | ||
62 | return InterRegionSingleton.Instance.InformRegionOfChildAgent(regionHandle, agentData); | ||
63 | } | ||
64 | |||
65 | public bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position) | ||
66 | { | ||
67 | return InterRegionSingleton.Instance.ExpectAvatarCrossing(regionHandle, agentID, position); | ||
68 | } | ||
69 | } | ||
70 | } | ||
diff --git a/OpenSim/Framework/Communications.OGS1/OGSUserServices.cs b/OpenSim/Framework/Communications.OGS1/OGSUserServices.cs new file mode 100644 index 0000000..ff5fbbb --- /dev/null +++ b/OpenSim/Framework/Communications.OGS1/OGSUserServices.cs | |||
@@ -0,0 +1,25 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Framework.Communications; | ||
5 | using OpenSim.Framework.Data; | ||
6 | using libsecondlife; | ||
7 | |||
8 | namespace OpenSim.Framework.Communications.OGS1 | ||
9 | { | ||
10 | public class OGSUserServices :IUserServices | ||
11 | { | ||
12 | public UserProfileData GetUserProfile(string firstName, string lastName) | ||
13 | { | ||
14 | return null; | ||
15 | } | ||
16 | public UserProfileData GetUserProfile(string name) | ||
17 | { | ||
18 | return null; | ||
19 | } | ||
20 | public UserProfileData GetUserProfile(LLUUID avatarID) | ||
21 | { | ||
22 | return null; | ||
23 | } | ||
24 | } | ||
25 | } | ||
diff --git a/OpenSim/Framework/Communications.OGS1/OpenSim.Framework.Communications.OGS1.csproj b/OpenSim/Framework/Communications.OGS1/OpenSim.Framework.Communications.OGS1.csproj new file mode 100644 index 0000000..3985ee5 --- /dev/null +++ b/OpenSim/Framework/Communications.OGS1/OpenSim.Framework.Communications.OGS1.csproj | |||
@@ -0,0 +1,142 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{6109024D-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Communications.OGS1</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Communications.OGS1</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Data" > | ||
70 | <HintPath>System.Data.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Runtime.Remoting" > | ||
74 | <HintPath>System.Runtime.Remoting.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="XMLRPC.dll" > | ||
82 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | </ItemGroup> | ||
86 | <ItemGroup> | ||
87 | <ProjectReference Include="..\General\OpenSim.Framework.csproj"> | ||
88 | <Name>OpenSim.Framework</Name> | ||
89 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
90 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
91 | <Private>False</Private> | ||
92 | </ProjectReference> | ||
93 | <ProjectReference Include="..\Communications\OpenSim.Framework.Communications.csproj"> | ||
94 | <Name>OpenSim.Framework.Communications</Name> | ||
95 | <Project>{CB52B7E7-0000-0000-0000-000000000000}</Project> | ||
96 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
97 | <Private>False</Private> | ||
98 | </ProjectReference> | ||
99 | <ProjectReference Include="..\Console\OpenSim.Framework.Console.csproj"> | ||
100 | <Name>OpenSim.Framework.Console</Name> | ||
101 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
102 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
103 | <Private>False</Private> | ||
104 | </ProjectReference> | ||
105 | <ProjectReference Include="..\Data\OpenSim.Framework.Data.csproj"> | ||
106 | <Name>OpenSim.Framework.Data</Name> | ||
107 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
108 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
109 | <Private>False</Private> | ||
110 | </ProjectReference> | ||
111 | <ProjectReference Include="..\Servers\OpenSim.Framework.Servers.csproj"> | ||
112 | <Name>OpenSim.Framework.Servers</Name> | ||
113 | <Project>{2CC71860-0000-0000-0000-000000000000}</Project> | ||
114 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
115 | <Private>False</Private> | ||
116 | </ProjectReference> | ||
117 | </ItemGroup> | ||
118 | <ItemGroup> | ||
119 | <Compile Include="GridCommsManager.cs"> | ||
120 | <SubType>Code</SubType> | ||
121 | </Compile> | ||
122 | <Compile Include="OGS1GridServices.cs"> | ||
123 | <SubType>Code</SubType> | ||
124 | </Compile> | ||
125 | <Compile Include="OGSInterSimComms.cs"> | ||
126 | <SubType>Code</SubType> | ||
127 | </Compile> | ||
128 | <Compile Include="OGSUserServices.cs"> | ||
129 | <SubType>Code</SubType> | ||
130 | </Compile> | ||
131 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
132 | <SubType>Code</SubType> | ||
133 | </Compile> | ||
134 | </ItemGroup> | ||
135 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
136 | <PropertyGroup> | ||
137 | <PreBuildEvent> | ||
138 | </PreBuildEvent> | ||
139 | <PostBuildEvent> | ||
140 | </PostBuildEvent> | ||
141 | </PropertyGroup> | ||
142 | </Project> | ||
diff --git a/OpenSim/Framework/Communications.OGS1/OpenSim.Framework.Communications.OGS1.csproj.user b/OpenSim/Framework/Communications.OGS1/OpenSim.Framework.Communications.OGS1.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Communications.OGS1/OpenSim.Framework.Communications.OGS1.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Communications.OGS1/Properties/AssemblyInfo.cs b/OpenSim/Framework/Communications.OGS1/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0c6f965 --- /dev/null +++ b/OpenSim/Framework/Communications.OGS1/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenGrid.Framework.Communications.OGS1")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenGrid.Framework.Communications.OGS1")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("a8b2b39b-c83b-41e2-b0b5-7ccfc1fddae7")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs new file mode 100644 index 0000000..74d12d2 --- /dev/null +++ b/OpenSim/Framework/Communications/CommunicationsManager.cs | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using OpenSim.Framework; | ||
33 | using OpenSim.Framework.Interfaces; | ||
34 | using OpenSim.Framework.Types; | ||
35 | using libsecondlife; | ||
36 | |||
37 | namespace OpenSim.Framework.Communications | ||
38 | { | ||
39 | |||
40 | public class CommunicationsManager | ||
41 | { | ||
42 | public IUserServices UserServer; | ||
43 | public IGridServices GridServer; | ||
44 | public IInterRegionCommunications InterRegion; | ||
45 | |||
46 | public CommunicationsManager(NetworkServersInfo serversInfo) | ||
47 | { | ||
48 | |||
49 | } | ||
50 | } | ||
51 | } | ||
diff --git a/OpenSim/Framework/Communications/IGridServices.cs b/OpenSim/Framework/Communications/IGridServices.cs new file mode 100644 index 0000000..a4812fb --- /dev/null +++ b/OpenSim/Framework/Communications/IGridServices.cs | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using OpenSim.Framework.Types; | ||
33 | using OpenSim.Framework; | ||
34 | |||
35 | namespace OpenSim.Framework.Communications | ||
36 | { | ||
37 | public class GridInfo | ||
38 | { | ||
39 | public string GridServerURI = "http://grid.deepgrid.com:8001/"; // Temporarily hardcoded. | ||
40 | public string GridServerSendKey = "badger"; | ||
41 | public string GridServerRecvKey = "badger"; | ||
42 | } | ||
43 | |||
44 | public interface IGridServices | ||
45 | { | ||
46 | RegionCommsListener RegisterRegion(RegionInfo regionInfo, GridInfo gridInfo); | ||
47 | List<RegionInfo> RequestNeighbours(RegionInfo regionInfo); | ||
48 | RegionInfo RequestNeighbourInfo(ulong regionHandle); | ||
49 | List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY); | ||
50 | } | ||
51 | } | ||
diff --git a/OpenSim/Framework/Communications/IInterRegionCommunications.cs b/OpenSim/Framework/Communications/IInterRegionCommunications.cs new file mode 100644 index 0000000..7b0d340 --- /dev/null +++ b/OpenSim/Framework/Communications/IInterRegionCommunications.cs | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Types; | ||
32 | using OpenSim.Framework; | ||
33 | |||
34 | namespace OpenSim.Framework.Communications | ||
35 | { | ||
36 | public interface IInterRegionCommunications | ||
37 | { | ||
38 | bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData); | ||
39 | bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position); | ||
40 | } | ||
41 | } | ||
diff --git a/OpenSim/Framework/Communications/IUserServices.cs b/OpenSim/Framework/Communications/IUserServices.cs new file mode 100644 index 0000000..6790651 --- /dev/null +++ b/OpenSim/Framework/Communications/IUserServices.cs | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | using OpenSim.Framework.Data; | ||
34 | |||
35 | namespace OpenSim.Framework.Communications | ||
36 | { | ||
37 | public interface IUserServices | ||
38 | { | ||
39 | UserProfileData GetUserProfile(string firstName, string lastName); | ||
40 | UserProfileData GetUserProfile(string name); | ||
41 | UserProfileData GetUserProfile(LLUUID avatarID); | ||
42 | |||
43 | } | ||
44 | } | ||
diff --git a/OpenSim/Framework/Communications/OpenSim.Framework.Communications.csproj b/OpenSim/Framework/Communications/OpenSim.Framework.Communications.csproj new file mode 100644 index 0000000..31ab172 --- /dev/null +++ b/OpenSim/Framework/Communications/OpenSim.Framework.Communications.csproj | |||
@@ -0,0 +1,112 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{CB52B7E7-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Communications</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Communications</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Xml" > | ||
70 | <HintPath>System.Xml.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | </ItemGroup> | ||
74 | <ItemGroup> | ||
75 | <ProjectReference Include="..\General\OpenSim.Framework.csproj"> | ||
76 | <Name>OpenSim.Framework</Name> | ||
77 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
78 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
79 | <Private>False</Private> | ||
80 | </ProjectReference> | ||
81 | <ProjectReference Include="..\Data\OpenSim.Framework.Data.csproj"> | ||
82 | <Name>OpenSim.Framework.Data</Name> | ||
83 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
84 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
85 | <Private>False</Private> | ||
86 | </ProjectReference> | ||
87 | </ItemGroup> | ||
88 | <ItemGroup> | ||
89 | <Compile Include="CommunicationsManager.cs"> | ||
90 | <SubType>Code</SubType> | ||
91 | </Compile> | ||
92 | <Compile Include="IGridServices.cs"> | ||
93 | <SubType>Code</SubType> | ||
94 | </Compile> | ||
95 | <Compile Include="IInterRegionCommunications.cs"> | ||
96 | <SubType>Code</SubType> | ||
97 | </Compile> | ||
98 | <Compile Include="IUserServices.cs"> | ||
99 | <SubType>Code</SubType> | ||
100 | </Compile> | ||
101 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
102 | <SubType>Code</SubType> | ||
103 | </Compile> | ||
104 | </ItemGroup> | ||
105 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
106 | <PropertyGroup> | ||
107 | <PreBuildEvent> | ||
108 | </PreBuildEvent> | ||
109 | <PostBuildEvent> | ||
110 | </PostBuildEvent> | ||
111 | </PropertyGroup> | ||
112 | </Project> | ||
diff --git a/OpenSim/Framework/Communications/OpenSim.Framework.Communications.csproj.user b/OpenSim/Framework/Communications/OpenSim.Framework.Communications.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Communications/OpenSim.Framework.Communications.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs b/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..83e7dd4 --- /dev/null +++ b/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // General Information about an assembly is controlled through the following | ||
33 | // set of attributes. Change these attribute values to modify the information | ||
34 | // associated with an assembly. | ||
35 | [assembly: AssemblyTitle("OpenGrid.Framework.Communications")] | ||
36 | [assembly: AssemblyDescription("")] | ||
37 | [assembly: AssemblyConfiguration("")] | ||
38 | [assembly: AssemblyCompany("")] | ||
39 | [assembly: AssemblyProduct("OpenGrid.Framework.Communications")] | ||
40 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
41 | [assembly: AssemblyTrademark("")] | ||
42 | [assembly: AssemblyCulture("")] | ||
43 | |||
44 | // Setting ComVisible to false makes the types in this assembly not visible | ||
45 | // to COM components. If you need to access a type in this assembly from | ||
46 | // COM, set the ComVisible attribute to true on that type. | ||
47 | [assembly: ComVisible(false)] | ||
48 | |||
49 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
50 | [assembly: Guid("13e7c396-78a9-4a5c-baf2-6f980ea75d95")] | ||
51 | |||
52 | // Version information for an assembly consists of the following four values: | ||
53 | // | ||
54 | // Major Version | ||
55 | // Minor Version | ||
56 | // Build Number | ||
57 | // Revision | ||
58 | // | ||
59 | // You can specify all the values or you can default the Revision and Build Numbers | ||
60 | // by using the '*' as shown below: | ||
61 | [assembly: AssemblyVersion("1.0.0.0")] | ||
62 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/Console/AssemblyInfo.cs b/OpenSim/Framework/Console/AssemblyInfo.cs new file mode 100644 index 0000000..8f715d2 --- /dev/null +++ b/OpenSim/Framework/Console/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("ServerConsole")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("ServerConsole")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Framework/Console/ConsoleCallbacksBase.cs b/OpenSim/Framework/Console/ConsoleCallbacksBase.cs new file mode 100644 index 0000000..e3847be --- /dev/null +++ b/OpenSim/Framework/Console/ConsoleCallbacksBase.cs | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Framework.Console | ||
33 | { | ||
34 | public interface conscmd_callback | ||
35 | { | ||
36 | void RunCmd(string cmd, string[] cmdparams); | ||
37 | void Show(string ShowWhat); | ||
38 | } | ||
39 | } | ||
diff --git a/OpenSim/Framework/Console/LogBase.cs b/OpenSim/Framework/Console/LogBase.cs new file mode 100644 index 0000000..1a92d8e --- /dev/null +++ b/OpenSim/Framework/Console/LogBase.cs | |||
@@ -0,0 +1,238 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.IO; | ||
30 | |||
31 | namespace OpenSim.Framework.Console | ||
32 | { | ||
33 | public enum LogPriority : int | ||
34 | { | ||
35 | CRITICAL, | ||
36 | HIGH, | ||
37 | MEDIUM, | ||
38 | NORMAL, | ||
39 | LOW, | ||
40 | VERBOSE, | ||
41 | EXTRAVERBOSE | ||
42 | } | ||
43 | |||
44 | public class LogBase | ||
45 | { | ||
46 | StreamWriter Log; | ||
47 | public conscmd_callback cmdparser; | ||
48 | public string componentname; | ||
49 | private bool m_silent; | ||
50 | |||
51 | public LogBase(string LogFile, string componentname, conscmd_callback cmdparser, bool silent ) | ||
52 | { | ||
53 | this.componentname = componentname; | ||
54 | this.cmdparser = cmdparser; | ||
55 | this.m_silent = silent; | ||
56 | System.Console.WriteLine("ServerConsole.cs - creating new local console"); | ||
57 | |||
58 | if( String.IsNullOrEmpty( LogFile ) ) | ||
59 | { | ||
60 | LogFile = componentname + ".log"; | ||
61 | } | ||
62 | |||
63 | System.Console.WriteLine("Logs will be saved to current directory in " + LogFile); | ||
64 | Log = File.AppendText(LogFile); | ||
65 | Log.WriteLine("========================================================================"); | ||
66 | Log.WriteLine(componentname + " Started at " + DateTime.Now.ToString()); | ||
67 | } | ||
68 | |||
69 | public void Close() | ||
70 | { | ||
71 | Log.WriteLine("Shutdown at " + DateTime.Now.ToString()); | ||
72 | Log.Close(); | ||
73 | } | ||
74 | |||
75 | public void Write(string format, params object[] args) | ||
76 | { | ||
77 | Notice(format,args); | ||
78 | return; | ||
79 | } | ||
80 | |||
81 | public void WriteLine(LogPriority importance, string format, params object[] args) | ||
82 | { | ||
83 | Log.WriteLine(format, args); | ||
84 | Log.Flush(); | ||
85 | if (!m_silent) | ||
86 | { | ||
87 | System.Console.WriteLine(format, args); | ||
88 | } | ||
89 | return; | ||
90 | } | ||
91 | |||
92 | public void Warn(string format, params object[] args) | ||
93 | { | ||
94 | WriteNewLine(ConsoleColor.Yellow, format, args); | ||
95 | return; | ||
96 | } | ||
97 | |||
98 | public void Notice(string format, params object[] args) | ||
99 | { | ||
100 | WriteNewLine(ConsoleColor.White, format, args); | ||
101 | return; | ||
102 | } | ||
103 | |||
104 | public void Error(string format, params object[] args) | ||
105 | { | ||
106 | WriteNewLine(ConsoleColor.Red, format, args); | ||
107 | return; | ||
108 | } | ||
109 | |||
110 | public void Verbose(string format, params object[] args) | ||
111 | { | ||
112 | WriteNewLine(ConsoleColor.Gray, format, args); | ||
113 | return; | ||
114 | } | ||
115 | |||
116 | public void Status(string format, params object[] args) | ||
117 | { | ||
118 | WriteNewLine(ConsoleColor.Blue, format, args); | ||
119 | return; | ||
120 | } | ||
121 | |||
122 | private void WriteNewLine(System.ConsoleColor color, string format, params object[] args) | ||
123 | { | ||
124 | Log.WriteLine(format, args); | ||
125 | Log.Flush(); | ||
126 | if (!m_silent) | ||
127 | { | ||
128 | try | ||
129 | { | ||
130 | System.Console.ForegroundColor = color; | ||
131 | System.Console.WriteLine(format, args); | ||
132 | System.Console.ResetColor(); | ||
133 | } | ||
134 | catch (System.ArgumentNullException) | ||
135 | { | ||
136 | // Some older systems dont support coloured text. | ||
137 | System.Console.WriteLine(format, args); | ||
138 | } | ||
139 | } | ||
140 | return; | ||
141 | } | ||
142 | |||
143 | public string ReadLine() | ||
144 | { | ||
145 | string TempStr = System.Console.ReadLine(); | ||
146 | Log.WriteLine(TempStr); | ||
147 | return TempStr; | ||
148 | } | ||
149 | |||
150 | public int Read() | ||
151 | { | ||
152 | int TempInt = System.Console.Read(); | ||
153 | Log.Write((char)TempInt); | ||
154 | return TempInt; | ||
155 | } | ||
156 | |||
157 | // Displays a prompt and waits for the user to enter a string, then returns that string | ||
158 | // Done with no echo and suitable for passwords | ||
159 | public string PasswdPrompt(string prompt) | ||
160 | { | ||
161 | // FIXME: Needs to be better abstracted | ||
162 | Log.WriteLine(prompt); | ||
163 | this.Write(prompt); | ||
164 | ConsoleColor oldfg = System.Console.ForegroundColor; | ||
165 | System.Console.ForegroundColor = System.Console.BackgroundColor; | ||
166 | string temp = System.Console.ReadLine(); | ||
167 | System.Console.ForegroundColor = oldfg; | ||
168 | return temp; | ||
169 | } | ||
170 | |||
171 | // Displays a command prompt and waits for the user to enter a string, then returns that string | ||
172 | public string CmdPrompt(string prompt) | ||
173 | { | ||
174 | this.Write(String.Format("{0}: ", prompt)); | ||
175 | return this.ReadLine(); | ||
176 | } | ||
177 | |||
178 | // Displays a command prompt and returns a default value if the user simply presses enter | ||
179 | public string CmdPrompt(string prompt, string defaultresponse) | ||
180 | { | ||
181 | string temp = CmdPrompt(String.Format( "{0} [{1}]", prompt, defaultresponse )); | ||
182 | if (temp == "") | ||
183 | { | ||
184 | return defaultresponse; | ||
185 | } | ||
186 | else | ||
187 | { | ||
188 | return temp; | ||
189 | } | ||
190 | } | ||
191 | |||
192 | // Displays a command prompt and returns a default value, user may only enter 1 of 2 options | ||
193 | public string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) | ||
194 | { | ||
195 | bool itisdone = false; | ||
196 | string temp = CmdPrompt(prompt, defaultresponse); | ||
197 | while (itisdone == false) | ||
198 | { | ||
199 | if ((temp == OptionA) || (temp == OptionB)) | ||
200 | { | ||
201 | itisdone = true; | ||
202 | } | ||
203 | else | ||
204 | { | ||
205 | Notice("Valid options are " + OptionA + " or " + OptionB); | ||
206 | temp = CmdPrompt(prompt, defaultresponse); | ||
207 | } | ||
208 | } | ||
209 | return temp; | ||
210 | } | ||
211 | |||
212 | // Runs a command with a number of parameters | ||
213 | public Object RunCmd(string Cmd, string[] cmdparams) | ||
214 | { | ||
215 | cmdparser.RunCmd(Cmd, cmdparams); | ||
216 | return null; | ||
217 | } | ||
218 | |||
219 | // Shows data about something | ||
220 | public void ShowCommands(string ShowWhat) | ||
221 | { | ||
222 | cmdparser.Show(ShowWhat); | ||
223 | } | ||
224 | |||
225 | public void MainLogPrompt() | ||
226 | { | ||
227 | string[] tempstrarray; | ||
228 | string tempstr = this.CmdPrompt(this.componentname + "# "); | ||
229 | tempstrarray = tempstr.Split(' '); | ||
230 | string cmd = tempstrarray[0]; | ||
231 | Array.Reverse(tempstrarray); | ||
232 | Array.Resize<string>(ref tempstrarray, tempstrarray.Length - 1); | ||
233 | Array.Reverse(tempstrarray); | ||
234 | string[] cmdparams = (string[])tempstrarray; | ||
235 | RunCmd(cmd, cmdparams); | ||
236 | } | ||
237 | } | ||
238 | } | ||
diff --git a/OpenSim/Framework/Console/MainLog.cs b/OpenSim/Framework/Console/MainLog.cs new file mode 100644 index 0000000..d7f945e --- /dev/null +++ b/OpenSim/Framework/Console/MainLog.cs | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | |||
30 | namespace OpenSim.Framework.Console | ||
31 | { | ||
32 | public class MainLog { | ||
33 | |||
34 | private static LogBase instance; | ||
35 | |||
36 | public static LogBase Instance | ||
37 | { | ||
38 | get | ||
39 | { | ||
40 | return instance; | ||
41 | } | ||
42 | set | ||
43 | { | ||
44 | instance = value; | ||
45 | } | ||
46 | } | ||
47 | } | ||
48 | |||
49 | } | ||
diff --git a/OpenSim/Framework/Console/OpenSim.Framework.Console.csproj b/OpenSim/Framework/Console/OpenSim.Framework.Console.csproj new file mode 100644 index 0000000..f3dcec5 --- /dev/null +++ b/OpenSim/Framework/Console/OpenSim.Framework.Console.csproj | |||
@@ -0,0 +1,89 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{A7CD0630-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Console</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Console</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="System" > | ||
62 | <HintPath>System.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | </ItemGroup> | ||
66 | <ItemGroup> | ||
67 | </ItemGroup> | ||
68 | <ItemGroup> | ||
69 | <Compile Include="AssemblyInfo.cs"> | ||
70 | <SubType>Code</SubType> | ||
71 | </Compile> | ||
72 | <Compile Include="ConsoleCallbacksBase.cs"> | ||
73 | <SubType>Code</SubType> | ||
74 | </Compile> | ||
75 | <Compile Include="LogBase.cs"> | ||
76 | <SubType>Code</SubType> | ||
77 | </Compile> | ||
78 | <Compile Include="MainLog.cs"> | ||
79 | <SubType>Code</SubType> | ||
80 | </Compile> | ||
81 | </ItemGroup> | ||
82 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
83 | <PropertyGroup> | ||
84 | <PreBuildEvent> | ||
85 | </PreBuildEvent> | ||
86 | <PostBuildEvent> | ||
87 | </PostBuildEvent> | ||
88 | </PropertyGroup> | ||
89 | </Project> | ||
diff --git a/OpenSim/Framework/Console/OpenSim.Framework.Console.csproj.user b/OpenSim/Framework/Console/OpenSim.Framework.Console.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Console/OpenSim.Framework.Console.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Data.DB4o/DB4oGridData.cs b/OpenSim/Framework/Data.DB4o/DB4oGridData.cs new file mode 100644 index 0000000..dc8488e --- /dev/null +++ b/OpenSim/Framework/Data.DB4o/DB4oGridData.cs | |||
@@ -0,0 +1,166 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using OpenSim.Framework.Data; | ||
33 | using libsecondlife; | ||
34 | |||
35 | |||
36 | namespace OpenSim.Framework.Data.DB4o | ||
37 | { | ||
38 | /// <summary> | ||
39 | /// A grid server storage mechanism employing the DB4o database system | ||
40 | /// </summary> | ||
41 | class DB4oGridData : IGridData | ||
42 | { | ||
43 | /// <summary> | ||
44 | /// The database manager object | ||
45 | /// </summary> | ||
46 | DB4oGridManager manager; | ||
47 | |||
48 | /// <summary> | ||
49 | /// Called when the plugin is first loaded (as constructors are not called) | ||
50 | /// </summary> | ||
51 | public void Initialise() { | ||
52 | manager = new DB4oGridManager("gridserver.yap"); | ||
53 | } | ||
54 | |||
55 | /// <summary> | ||
56 | /// Returns a list of regions within the specified ranges | ||
57 | /// </summary> | ||
58 | /// <param name="a">minimum X coordinate</param> | ||
59 | /// <param name="b">minimum Y coordinate</param> | ||
60 | /// <param name="c">maximum X coordinate</param> | ||
61 | /// <param name="d">maximum Y coordinate</param> | ||
62 | /// <returns>An array of region profiles</returns> | ||
63 | public SimProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d) | ||
64 | { | ||
65 | return null; | ||
66 | } | ||
67 | |||
68 | /// <summary> | ||
69 | /// Returns a region located at the specified regionHandle (warning multiple regions may occupy the one spot, first found is returned) | ||
70 | /// </summary> | ||
71 | /// <param name="handle">The handle to search for</param> | ||
72 | /// <returns>A region profile</returns> | ||
73 | public SimProfileData GetProfileByHandle(ulong handle) { | ||
74 | lock (manager.simProfiles) | ||
75 | { | ||
76 | foreach (LLUUID UUID in manager.simProfiles.Keys) | ||
77 | { | ||
78 | if (manager.simProfiles[UUID].regionHandle == handle) | ||
79 | { | ||
80 | return manager.simProfiles[UUID]; | ||
81 | } | ||
82 | } | ||
83 | } | ||
84 | throw new Exception("Unable to find profile with handle (" + handle.ToString() + ")"); | ||
85 | } | ||
86 | |||
87 | /// <summary> | ||
88 | /// Returns a specific region | ||
89 | /// </summary> | ||
90 | /// <param name="uuid">The region ID code</param> | ||
91 | /// <returns>A region profile</returns> | ||
92 | public SimProfileData GetProfileByLLUUID(LLUUID uuid) | ||
93 | { | ||
94 | lock (manager.simProfiles) | ||
95 | { | ||
96 | if (manager.simProfiles.ContainsKey(uuid)) | ||
97 | return manager.simProfiles[uuid]; | ||
98 | } | ||
99 | throw new Exception("Unable to find profile with UUID (" + uuid.ToStringHyphenated() + ")"); | ||
100 | } | ||
101 | |||
102 | /// <summary> | ||
103 | /// Adds a new specified region to the database | ||
104 | /// </summary> | ||
105 | /// <param name="profile">The profile to add</param> | ||
106 | /// <returns>A dataresponse enum indicating success</returns> | ||
107 | public DataResponse AddProfile(SimProfileData profile) | ||
108 | { | ||
109 | lock (manager.simProfiles) | ||
110 | { | ||
111 | if (manager.AddRow(profile)) | ||
112 | { | ||
113 | return DataResponse.RESPONSE_OK; | ||
114 | } | ||
115 | else | ||
116 | { | ||
117 | return DataResponse.RESPONSE_ERROR; | ||
118 | } | ||
119 | } | ||
120 | } | ||
121 | |||
122 | /// <summary> | ||
123 | /// Authenticates a new region using the shared secrets. NOT SECURE. | ||
124 | /// </summary> | ||
125 | /// <param name="uuid">The UUID the region is authenticating with</param> | ||
126 | /// <param name="handle">The location the region is logging into (unused in Db4o)</param> | ||
127 | /// <param name="key">The shared secret</param> | ||
128 | /// <returns>Authenticated?</returns> | ||
129 | public bool AuthenticateSim(LLUUID uuid, ulong handle, string key) { | ||
130 | if (manager.simProfiles[uuid].regionRecvKey == key) | ||
131 | return true; | ||
132 | return false; | ||
133 | } | ||
134 | |||
135 | /// <summary> | ||
136 | /// Shuts down the database | ||
137 | /// </summary> | ||
138 | public void Close() | ||
139 | { | ||
140 | manager = null; | ||
141 | } | ||
142 | |||
143 | /// <summary> | ||
144 | /// Returns the providers name | ||
145 | /// </summary> | ||
146 | /// <returns>The name of the storage system</returns> | ||
147 | public string getName() | ||
148 | { | ||
149 | return "DB4o Grid Provider"; | ||
150 | } | ||
151 | |||
152 | /// <summary> | ||
153 | /// Returns the providers version | ||
154 | /// </summary> | ||
155 | /// <returns>The version of the storage system</returns> | ||
156 | public string getVersion() | ||
157 | { | ||
158 | return "0.1"; | ||
159 | } | ||
160 | |||
161 | public ReservationData GetReservationAtPoint(uint x, uint y) | ||
162 | { | ||
163 | return null; | ||
164 | } | ||
165 | } | ||
166 | } | ||
diff --git a/OpenSim/Framework/Data.DB4o/DB4oManager.cs b/OpenSim/Framework/Data.DB4o/DB4oManager.cs new file mode 100644 index 0000000..3870a8c --- /dev/null +++ b/OpenSim/Framework/Data.DB4o/DB4oManager.cs | |||
@@ -0,0 +1,165 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using Db4objects.Db4o; | ||
32 | using OpenSim.Framework.Data; | ||
33 | using libsecondlife; | ||
34 | |||
35 | namespace OpenSim.Framework.Data.DB4o | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// A Database manager for Db4o | ||
39 | /// </summary> | ||
40 | class DB4oGridManager | ||
41 | { | ||
42 | /// <summary> | ||
43 | /// A list of the current regions connected (in-memory cache) | ||
44 | /// </summary> | ||
45 | public Dictionary<LLUUID, SimProfileData> simProfiles = new Dictionary<LLUUID, SimProfileData>(); | ||
46 | /// <summary> | ||
47 | /// Database File Name | ||
48 | /// </summary> | ||
49 | string dbfl; | ||
50 | |||
51 | /// <summary> | ||
52 | /// Creates a new grid storage manager | ||
53 | /// </summary> | ||
54 | /// <param name="db4odb">Filename to the database file</param> | ||
55 | public DB4oGridManager(string db4odb) | ||
56 | { | ||
57 | dbfl = db4odb; | ||
58 | IObjectContainer database; | ||
59 | database = Db4oFactory.OpenFile(dbfl); | ||
60 | IObjectSet result = database.Get(typeof(SimProfileData)); | ||
61 | // Loads the file into the in-memory cache | ||
62 | foreach(SimProfileData row in result) { | ||
63 | simProfiles.Add(row.UUID, row); | ||
64 | } | ||
65 | database.Close(); | ||
66 | } | ||
67 | |||
68 | /// <summary> | ||
69 | /// Adds a new profile to the database (Warning: Probably slow.) | ||
70 | /// </summary> | ||
71 | /// <param name="row">The profile to add</param> | ||
72 | /// <returns>Successful?</returns> | ||
73 | public bool AddRow(SimProfileData row) | ||
74 | { | ||
75 | if (simProfiles.ContainsKey(row.UUID)) | ||
76 | { | ||
77 | simProfiles[row.UUID] = row; | ||
78 | } | ||
79 | else | ||
80 | { | ||
81 | simProfiles.Add(row.UUID, row); | ||
82 | } | ||
83 | |||
84 | try | ||
85 | { | ||
86 | IObjectContainer database; | ||
87 | database = Db4oFactory.OpenFile(dbfl); | ||
88 | database.Set(row); | ||
89 | database.Close(); | ||
90 | return true; | ||
91 | } | ||
92 | catch (Exception e) | ||
93 | { | ||
94 | return false; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | |||
99 | } | ||
100 | |||
101 | /// <summary> | ||
102 | /// A manager for the DB4o database (user profiles) | ||
103 | /// </summary> | ||
104 | class DB4oUserManager | ||
105 | { | ||
106 | /// <summary> | ||
107 | /// A list of the user profiles (in memory cache) | ||
108 | /// </summary> | ||
109 | public Dictionary<LLUUID, UserProfileData> userProfiles = new Dictionary<LLUUID, UserProfileData>(); | ||
110 | /// <summary> | ||
111 | /// Database filename | ||
112 | /// </summary> | ||
113 | string dbfl; | ||
114 | |||
115 | /// <summary> | ||
116 | /// Initialises a new DB manager | ||
117 | /// </summary> | ||
118 | /// <param name="db4odb">The filename to the database</param> | ||
119 | public DB4oUserManager(string db4odb) | ||
120 | { | ||
121 | dbfl = db4odb; | ||
122 | IObjectContainer database; | ||
123 | database = Db4oFactory.OpenFile(dbfl); | ||
124 | // Load to cache | ||
125 | IObjectSet result = database.Get(typeof(UserProfileData)); | ||
126 | foreach (UserProfileData row in result) | ||
127 | { | ||
128 | userProfiles.Add(row.UUID, row); | ||
129 | } | ||
130 | database.Close(); | ||
131 | } | ||
132 | |||
133 | /// <summary> | ||
134 | /// Adds a new profile to the database (Warning: Probably slow.) | ||
135 | /// </summary> | ||
136 | /// <param name="row">The profile to add</param> | ||
137 | /// <returns>Successful?</returns> | ||
138 | public bool AddRow(UserProfileData row) | ||
139 | { | ||
140 | if (userProfiles.ContainsKey(row.UUID)) | ||
141 | { | ||
142 | userProfiles[row.UUID] = row; | ||
143 | } | ||
144 | else | ||
145 | { | ||
146 | userProfiles.Add(row.UUID, row); | ||
147 | } | ||
148 | |||
149 | try | ||
150 | { | ||
151 | IObjectContainer database; | ||
152 | database = Db4oFactory.OpenFile(dbfl); | ||
153 | database.Set(row); | ||
154 | database.Close(); | ||
155 | return true; | ||
156 | } | ||
157 | catch (Exception e) | ||
158 | { | ||
159 | return false; | ||
160 | } | ||
161 | } | ||
162 | |||
163 | |||
164 | } | ||
165 | } | ||
diff --git a/OpenSim/Framework/Data.DB4o/DB4oUserData.cs b/OpenSim/Framework/Data.DB4o/DB4oUserData.cs new file mode 100644 index 0000000..8caa75d --- /dev/null +++ b/OpenSim/Framework/Data.DB4o/DB4oUserData.cs | |||
@@ -0,0 +1,205 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Data; | ||
32 | using libsecondlife; | ||
33 | |||
34 | namespace OpenSim.Framework.Data.DB4o | ||
35 | { | ||
36 | /// <summary> | ||
37 | /// A User storage interface for the DB4o database system | ||
38 | /// </summary> | ||
39 | public class DB4oUserData : IUserData | ||
40 | { | ||
41 | /// <summary> | ||
42 | /// The database manager | ||
43 | /// </summary> | ||
44 | DB4oUserManager manager; | ||
45 | |||
46 | /// <summary> | ||
47 | /// Artificial constructor called upon plugin load | ||
48 | /// </summary> | ||
49 | public void Initialise() | ||
50 | { | ||
51 | manager = new DB4oUserManager("userprofiles.yap"); | ||
52 | } | ||
53 | |||
54 | /// <summary> | ||
55 | /// Loads a specified user profile from a UUID | ||
56 | /// </summary> | ||
57 | /// <param name="uuid">The users UUID</param> | ||
58 | /// <returns>A user profile</returns> | ||
59 | public UserProfileData getUserByUUID(LLUUID uuid) | ||
60 | { | ||
61 | if(manager.userProfiles.ContainsKey(uuid)) | ||
62 | return manager.userProfiles[uuid]; | ||
63 | return null; | ||
64 | } | ||
65 | |||
66 | /// <summary> | ||
67 | /// Returns a user by searching for its name | ||
68 | /// </summary> | ||
69 | /// <param name="name">The users account name</param> | ||
70 | /// <returns>A matching users profile</returns> | ||
71 | public UserProfileData getUserByName(string name) | ||
72 | { | ||
73 | return getUserByName(name.Split(' ')[0], name.Split(' ')[1]); | ||
74 | } | ||
75 | |||
76 | /// <summary> | ||
77 | /// Returns a user by searching for its name | ||
78 | /// </summary> | ||
79 | /// <param name="fname">The first part of the users account name</param> | ||
80 | /// <param name="lname">The second part of the users account name</param> | ||
81 | /// <returns>A matching users profile</returns> | ||
82 | public UserProfileData getUserByName(string fname, string lname) | ||
83 | { | ||
84 | foreach (UserProfileData profile in manager.userProfiles.Values) | ||
85 | { | ||
86 | if (profile.username == fname && profile.surname == lname) | ||
87 | return profile; | ||
88 | } | ||
89 | return null; | ||
90 | } | ||
91 | |||
92 | /// <summary> | ||
93 | /// Returns a user by UUID direct | ||
94 | /// </summary> | ||
95 | /// <param name="uuid">The users account ID</param> | ||
96 | /// <returns>A matching users profile</returns> | ||
97 | public UserAgentData getAgentByUUID(LLUUID uuid) | ||
98 | { | ||
99 | try | ||
100 | { | ||
101 | return getUserByUUID(uuid).currentAgent; | ||
102 | } | ||
103 | catch (Exception e) | ||
104 | { | ||
105 | return null; | ||
106 | } | ||
107 | } | ||
108 | |||
109 | /// <summary> | ||
110 | /// Returns a session by account name | ||
111 | /// </summary> | ||
112 | /// <param name="name">The account name</param> | ||
113 | /// <returns>The users session agent</returns> | ||
114 | public UserAgentData getAgentByName(string name) | ||
115 | { | ||
116 | return getAgentByName(name.Split(' ')[0], name.Split(' ')[1]); | ||
117 | } | ||
118 | |||
119 | /// <summary> | ||
120 | /// Returns a session by account name | ||
121 | /// </summary> | ||
122 | /// <param name="fname">The first part of the users account name</param> | ||
123 | /// <param name="lname">The second part of the users account name</param> | ||
124 | /// <returns>A user agent</returns> | ||
125 | public UserAgentData getAgentByName(string fname, string lname) | ||
126 | { | ||
127 | try | ||
128 | { | ||
129 | return getUserByName(fname,lname).currentAgent; | ||
130 | } | ||
131 | catch (Exception e) | ||
132 | { | ||
133 | return null; | ||
134 | } | ||
135 | } | ||
136 | |||
137 | /// <summary> | ||
138 | /// Creates a new user profile | ||
139 | /// </summary> | ||
140 | /// <param name="user">The profile to add to the database</param> | ||
141 | public void addNewUserProfile(UserProfileData user) | ||
142 | { | ||
143 | try | ||
144 | { | ||
145 | manager.AddRow(user); | ||
146 | } | ||
147 | catch (Exception e) | ||
148 | { | ||
149 | Console.WriteLine(e.ToString()); | ||
150 | } | ||
151 | } | ||
152 | |||
153 | /// <summary> | ||
154 | /// Creates a new user agent | ||
155 | /// </summary> | ||
156 | /// <param name="agent">The agent to add to the database</param> | ||
157 | public void addNewUserAgent(UserAgentData agent) | ||
158 | { | ||
159 | // Do nothing. yet. | ||
160 | } | ||
161 | |||
162 | /// <summary> | ||
163 | /// Transfers money between two user accounts | ||
164 | /// </summary> | ||
165 | /// <param name="from">Starting account</param> | ||
166 | /// <param name="to">End account</param> | ||
167 | /// <param name="amount">The amount to move</param> | ||
168 | /// <returns>Success?</returns> | ||
169 | public bool moneyTransferRequest(LLUUID from, LLUUID to, uint amount) | ||
170 | { | ||
171 | return true; | ||
172 | } | ||
173 | |||
174 | /// <summary> | ||
175 | /// Transfers inventory between two accounts | ||
176 | /// </summary> | ||
177 | /// <remarks>Move to inventory server</remarks> | ||
178 | /// <param name="from">Senders account</param> | ||
179 | /// <param name="to">Recievers account</param> | ||
180 | /// <param name="item">Inventory item</param> | ||
181 | /// <returns>Success?</returns> | ||
182 | public bool inventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item) | ||
183 | { | ||
184 | return true; | ||
185 | } | ||
186 | |||
187 | /// <summary> | ||
188 | /// Returns the name of the storage provider | ||
189 | /// </summary> | ||
190 | /// <returns>Storage provider name</returns> | ||
191 | public string getName() | ||
192 | { | ||
193 | return "DB4o Userdata"; | ||
194 | } | ||
195 | |||
196 | /// <summary> | ||
197 | /// Returns the version of the storage provider | ||
198 | /// </summary> | ||
199 | /// <returns>Storage provider version</returns> | ||
200 | public string getVersion() | ||
201 | { | ||
202 | return "0.1"; | ||
203 | } | ||
204 | } | ||
205 | } | ||
diff --git a/OpenSim/Framework/Data.DB4o/OpenSim.Framework.Data.DB4o.csproj b/OpenSim/Framework/Data.DB4o/OpenSim.Framework.Data.DB4o.csproj new file mode 100644 index 0000000..b09cecf --- /dev/null +++ b/OpenSim/Framework/Data.DB4o/OpenSim.Framework.Data.DB4o.csproj | |||
@@ -0,0 +1,111 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{FD2D303D-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Data.DB4o</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Data.DB4o</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Data" > | ||
74 | <HintPath>System.Data.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <ProjectReference Include="..\Data\OpenSim.Framework.Data.csproj"> | ||
84 | <Name>OpenSim.Framework.Data</Name> | ||
85 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
86 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
87 | <Private>False</Private> | ||
88 | </ProjectReference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | <Compile Include="DB4oGridData.cs"> | ||
92 | <SubType>Code</SubType> | ||
93 | </Compile> | ||
94 | <Compile Include="DB4oManager.cs"> | ||
95 | <SubType>Code</SubType> | ||
96 | </Compile> | ||
97 | <Compile Include="DB4oUserData.cs"> | ||
98 | <SubType>Code</SubType> | ||
99 | </Compile> | ||
100 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
101 | <SubType>Code</SubType> | ||
102 | </Compile> | ||
103 | </ItemGroup> | ||
104 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
105 | <PropertyGroup> | ||
106 | <PreBuildEvent> | ||
107 | </PreBuildEvent> | ||
108 | <PostBuildEvent> | ||
109 | </PostBuildEvent> | ||
110 | </PropertyGroup> | ||
111 | </Project> | ||
diff --git a/OpenSim/Framework/Data.DB4o/OpenSim.Framework.Data.DB4o.csproj.user b/OpenSim/Framework/Data.DB4o/OpenSim.Framework.Data.DB4o.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Data.DB4o/OpenSim.Framework.Data.DB4o.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Data.DB4o/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.DB4o/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..dc4a9a1 --- /dev/null +++ b/OpenSim/Framework/Data.DB4o/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenGrid.Framework.Data.DB4o")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenGrid.Framework.Data.DB4o")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("57991e15-79da-41b7-aa06-2e6b49165a63")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs b/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs new file mode 100644 index 0000000..1dac4bd --- /dev/null +++ b/OpenSim/Framework/Data.MSSQL/MSSQLGridData.cs | |||
@@ -0,0 +1,192 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenGrid.Framework.Data; | ||
32 | |||
33 | namespace OpenGrid.Framework.Data.MSSQL | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// A grid data interface for Microsoft SQL Server | ||
37 | /// </summary> | ||
38 | public class SqlGridData : IGridData | ||
39 | { | ||
40 | /// <summary> | ||
41 | /// Database manager | ||
42 | /// </summary> | ||
43 | private MSSqlManager database; | ||
44 | |||
45 | /// <summary> | ||
46 | /// Initialises the Grid Interface | ||
47 | /// </summary> | ||
48 | public void Initialise() | ||
49 | { | ||
50 | database = new MSSqlManager("localhost", "db", "user", "password", "false"); | ||
51 | } | ||
52 | |||
53 | /// <summary> | ||
54 | /// Shuts down the grid interface | ||
55 | /// </summary> | ||
56 | public void Close() | ||
57 | { | ||
58 | database.Close(); | ||
59 | } | ||
60 | |||
61 | /// <summary> | ||
62 | /// Returns the storage system name | ||
63 | /// </summary> | ||
64 | /// <returns>A string containing the storage system name</returns> | ||
65 | public string getName() | ||
66 | { | ||
67 | return "Sql OpenGridData"; | ||
68 | } | ||
69 | |||
70 | /// <summary> | ||
71 | /// Returns the storage system version | ||
72 | /// </summary> | ||
73 | /// <returns>A string containing the storage system version</returns> | ||
74 | public string getVersion() | ||
75 | { | ||
76 | return "0.1"; | ||
77 | } | ||
78 | |||
79 | /// <summary> | ||
80 | /// Returns a list of regions within the specified ranges | ||
81 | /// </summary> | ||
82 | /// <param name="a">minimum X coordinate</param> | ||
83 | /// <param name="b">minimum Y coordinate</param> | ||
84 | /// <param name="c">maximum X coordinate</param> | ||
85 | /// <param name="d">maximum Y coordinate</param> | ||
86 | /// <returns>An array of region profiles</returns> | ||
87 | public SimProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d) | ||
88 | { | ||
89 | return null; | ||
90 | } | ||
91 | |||
92 | /// <summary> | ||
93 | /// Returns a sim profile from it's location | ||
94 | /// </summary> | ||
95 | /// <param name="handle">Region location handle</param> | ||
96 | /// <returns>Sim profile</returns> | ||
97 | public SimProfileData GetProfileByHandle(ulong handle) | ||
98 | { | ||
99 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
100 | param["handle"] = handle.ToString(); | ||
101 | |||
102 | System.Data.IDbCommand result = database.Query("SELECT * FROM regions WHERE handle = @handle", param); | ||
103 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
104 | |||
105 | SimProfileData row = database.getRow(reader); | ||
106 | reader.Close(); | ||
107 | result.Dispose(); | ||
108 | |||
109 | return row; | ||
110 | } | ||
111 | |||
112 | /// <summary> | ||
113 | /// Returns a sim profile from it's UUID | ||
114 | /// </summary> | ||
115 | /// <param name="uuid">The region UUID</param> | ||
116 | /// <returns>The sim profile</returns> | ||
117 | public SimProfileData GetProfileByLLUUID(libsecondlife.LLUUID uuid) | ||
118 | { | ||
119 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
120 | param["uuid"] = uuid.ToStringHyphenated(); | ||
121 | |||
122 | System.Data.IDbCommand result = database.Query("SELECT * FROM regions WHERE uuid = @uuid", param); | ||
123 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
124 | |||
125 | SimProfileData row = database.getRow(reader); | ||
126 | reader.Close(); | ||
127 | result.Dispose(); | ||
128 | |||
129 | return row; | ||
130 | } | ||
131 | |||
132 | /// <summary> | ||
133 | /// Adds a new specified region to the database | ||
134 | /// </summary> | ||
135 | /// <param name="profile">The profile to add</param> | ||
136 | /// <returns>A dataresponse enum indicating success</returns> | ||
137 | public DataResponse AddProfile(SimProfileData profile) | ||
138 | { | ||
139 | if (database.insertRow(profile)) | ||
140 | { | ||
141 | return DataResponse.RESPONSE_OK; | ||
142 | } | ||
143 | else | ||
144 | { | ||
145 | return DataResponse.RESPONSE_ERROR; | ||
146 | } | ||
147 | } | ||
148 | |||
149 | /// <summary> | ||
150 | /// DEPRECIATED. Attempts to authenticate a region by comparing a shared secret. | ||
151 | /// </summary> | ||
152 | /// <param name="uuid">The UUID of the challenger</param> | ||
153 | /// <param name="handle">The attempted regionHandle of the challenger</param> | ||
154 | /// <param name="authkey">The secret</param> | ||
155 | /// <returns>Whether the secret and regionhandle match the database entry for UUID</returns> | ||
156 | public bool AuthenticateSim(libsecondlife.LLUUID uuid, ulong handle, string authkey) | ||
157 | { | ||
158 | bool throwHissyFit = false; // Should be true by 1.0 | ||
159 | |||
160 | if (throwHissyFit) | ||
161 | throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential."); | ||
162 | |||
163 | SimProfileData data = GetProfileByLLUUID(uuid); | ||
164 | |||
165 | return (handle == data.regionHandle && authkey == data.regionSecret); | ||
166 | } | ||
167 | |||
168 | /// <summary> | ||
169 | /// NOT YET FUNCTIONAL. Provides a cryptographic authentication of a region | ||
170 | /// </summary> | ||
171 | /// <remarks>This requires a security audit.</remarks> | ||
172 | /// <param name="uuid"></param> | ||
173 | /// <param name="handle"></param> | ||
174 | /// <param name="authhash"></param> | ||
175 | /// <param name="challenge"></param> | ||
176 | /// <returns></returns> | ||
177 | public bool AuthenticateSim(libsecondlife.LLUUID uuid, ulong handle, string authhash, string challenge) | ||
178 | { | ||
179 | System.Security.Cryptography.SHA512Managed HashProvider = new System.Security.Cryptography.SHA512Managed(); | ||
180 | System.Text.ASCIIEncoding TextProvider = new ASCIIEncoding(); | ||
181 | |||
182 | byte[] stream = TextProvider.GetBytes(uuid.ToStringHyphenated() + ":" + handle.ToString() + ":" + challenge); | ||
183 | byte[] hash = HashProvider.ComputeHash(stream); | ||
184 | return false; | ||
185 | } | ||
186 | public ReservationData GetReservationAtPoint(uint x, uint y) | ||
187 | { | ||
188 | return null; | ||
189 | } | ||
190 | } | ||
191 | |||
192 | } | ||
diff --git a/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs b/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs new file mode 100644 index 0000000..475a3e7 --- /dev/null +++ b/OpenSim/Framework/Data.MSSQL/MSSQLManager.cs | |||
@@ -0,0 +1,214 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Data; | ||
32 | |||
33 | using System.Data.SqlClient; | ||
34 | |||
35 | using OpenGrid.Framework.Data; | ||
36 | |||
37 | namespace OpenGrid.Framework.Data.MSSQL | ||
38 | { | ||
39 | /// <summary> | ||
40 | /// A management class for the MS SQL Storage Engine | ||
41 | /// </summary> | ||
42 | class MSSqlManager | ||
43 | { | ||
44 | /// <summary> | ||
45 | /// The database connection object | ||
46 | /// </summary> | ||
47 | IDbConnection dbcon; | ||
48 | |||
49 | /// <summary> | ||
50 | /// Initialises and creates a new Sql connection and maintains it. | ||
51 | /// </summary> | ||
52 | /// <param name="hostname">The Sql server being connected to</param> | ||
53 | /// <param name="database">The name of the Sql database being used</param> | ||
54 | /// <param name="username">The username logging into the database</param> | ||
55 | /// <param name="password">The password for the user logging in</param> | ||
56 | /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param> | ||
57 | public MSSqlManager(string hostname, string database, string username, string password, string cpooling) | ||
58 | { | ||
59 | try | ||
60 | { | ||
61 | string connectionString = "Server=" + hostname + ";Database=" + database + ";User ID=" + username + ";Password=" + password + ";Pooling=" + cpooling + ";"; | ||
62 | dbcon = new SqlConnection(connectionString); | ||
63 | |||
64 | dbcon.Open(); | ||
65 | } | ||
66 | catch (Exception e) | ||
67 | { | ||
68 | throw new Exception("Error initialising Sql Database: " + e.ToString()); | ||
69 | } | ||
70 | } | ||
71 | |||
72 | /// <summary> | ||
73 | /// Shuts down the database connection | ||
74 | /// </summary> | ||
75 | public void Close() | ||
76 | { | ||
77 | dbcon.Close(); | ||
78 | dbcon = null; | ||
79 | } | ||
80 | |||
81 | /// <summary> | ||
82 | /// Runs a query with protection against SQL Injection by using parameterised input. | ||
83 | /// </summary> | ||
84 | /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param> | ||
85 | /// <param name="parameters">The parameters - index so that @y is indexed as 'y'</param> | ||
86 | /// <returns>A Sql DB Command</returns> | ||
87 | public IDbCommand Query(string sql, Dictionary<string, string> parameters) | ||
88 | { | ||
89 | SqlCommand dbcommand = (SqlCommand)dbcon.CreateCommand(); | ||
90 | dbcommand.CommandText = sql; | ||
91 | foreach (KeyValuePair<string, string> param in parameters) | ||
92 | { | ||
93 | dbcommand.Parameters.AddWithValue(param.Key, param.Value); | ||
94 | } | ||
95 | |||
96 | return (IDbCommand)dbcommand; | ||
97 | } | ||
98 | |||
99 | /// <summary> | ||
100 | /// Runs a database reader object and returns a region row | ||
101 | /// </summary> | ||
102 | /// <param name="reader">An active database reader</param> | ||
103 | /// <returns>A region row</returns> | ||
104 | public SimProfileData getRow(IDataReader reader) | ||
105 | { | ||
106 | SimProfileData regionprofile = new SimProfileData(); | ||
107 | |||
108 | if (reader.Read()) | ||
109 | { | ||
110 | // Region Main | ||
111 | regionprofile.regionHandle = (ulong)reader["regionHandle"]; | ||
112 | regionprofile.regionName = (string)reader["regionName"]; | ||
113 | regionprofile.UUID = new libsecondlife.LLUUID((string)reader["uuid"]); | ||
114 | |||
115 | // Secrets | ||
116 | regionprofile.regionRecvKey = (string)reader["regionRecvKey"]; | ||
117 | regionprofile.regionSecret = (string)reader["regionSecret"]; | ||
118 | regionprofile.regionSendKey = (string)reader["regionSendKey"]; | ||
119 | |||
120 | // Region Server | ||
121 | regionprofile.regionDataURI = (string)reader["regionDataURI"]; | ||
122 | regionprofile.regionOnline = false; // Needs to be pinged before this can be set. | ||
123 | regionprofile.serverIP = (string)reader["serverIP"]; | ||
124 | regionprofile.serverPort = (uint)reader["serverPort"]; | ||
125 | regionprofile.serverURI = (string)reader["serverURI"]; | ||
126 | |||
127 | // Location | ||
128 | regionprofile.regionLocX = (uint)((int)reader["locX"]); | ||
129 | regionprofile.regionLocY = (uint)((int)reader["locY"]); | ||
130 | regionprofile.regionLocZ = (uint)((int)reader["locZ"]); | ||
131 | |||
132 | // Neighbours - 0 = No Override | ||
133 | regionprofile.regionEastOverrideHandle = (ulong)reader["eastOverrideHandle"]; | ||
134 | regionprofile.regionWestOverrideHandle = (ulong)reader["westOverrideHandle"]; | ||
135 | regionprofile.regionSouthOverrideHandle = (ulong)reader["southOverrideHandle"]; | ||
136 | regionprofile.regionNorthOverrideHandle = (ulong)reader["northOverrideHandle"]; | ||
137 | |||
138 | // Assets | ||
139 | regionprofile.regionAssetURI = (string)reader["regionAssetURI"]; | ||
140 | regionprofile.regionAssetRecvKey = (string)reader["regionAssetRecvKey"]; | ||
141 | regionprofile.regionAssetSendKey = (string)reader["regionAssetSendKey"]; | ||
142 | |||
143 | // Userserver | ||
144 | regionprofile.regionUserURI = (string)reader["regionUserURI"]; | ||
145 | regionprofile.regionUserRecvKey = (string)reader["regionUserRecvKey"]; | ||
146 | regionprofile.regionUserSendKey = (string)reader["regionUserSendKey"]; | ||
147 | } | ||
148 | else | ||
149 | { | ||
150 | throw new Exception("No rows to return"); | ||
151 | } | ||
152 | return regionprofile; | ||
153 | } | ||
154 | |||
155 | /// <summary> | ||
156 | /// Creates a new region in the database | ||
157 | /// </summary> | ||
158 | /// <param name="profile">The region profile to insert</param> | ||
159 | /// <returns>Successful?</returns> | ||
160 | public bool insertRow(SimProfileData profile) | ||
161 | { | ||
162 | string sql = "REPLACE INTO regions VALUES (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, "; | ||
163 | sql += "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, "; | ||
164 | sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey) VALUES "; | ||
165 | |||
166 | sql += "(@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, "; | ||
167 | sql += "@serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, "; | ||
168 | sql += "@regionAssetSendKey, @regionUserURI, @regionUserRecvKey, @regionUserSendKey);"; | ||
169 | |||
170 | Dictionary<string, string> parameters = new Dictionary<string, string>(); | ||
171 | |||
172 | parameters["regionHandle"] = profile.regionHandle.ToString(); | ||
173 | parameters["regionName"] = profile.regionName; | ||
174 | parameters["uuid"] = profile.UUID.ToString(); | ||
175 | parameters["regionRecvKey"] = profile.regionRecvKey; | ||
176 | parameters["regionSendKey"] = profile.regionSendKey; | ||
177 | parameters["regionDataURI"] = profile.regionDataURI; | ||
178 | parameters["serverIP"] = profile.serverIP; | ||
179 | parameters["serverPort"] = profile.serverPort.ToString(); | ||
180 | parameters["serverURI"] = profile.serverURI; | ||
181 | parameters["locX"] = profile.regionLocX.ToString(); | ||
182 | parameters["locY"] = profile.regionLocY.ToString(); | ||
183 | parameters["locZ"] = profile.regionLocZ.ToString(); | ||
184 | parameters["eastOverrideHandle"] = profile.regionEastOverrideHandle.ToString(); | ||
185 | parameters["westOverrideHandle"] = profile.regionWestOverrideHandle.ToString(); | ||
186 | parameters["northOverrideHandle"] = profile.regionNorthOverrideHandle.ToString(); | ||
187 | parameters["southOverrideHandle"] = profile.regionSouthOverrideHandle.ToString(); | ||
188 | parameters["regionAssetURI"] = profile.regionAssetURI; | ||
189 | parameters["regionAssetRecvKey"] = profile.regionAssetRecvKey; | ||
190 | parameters["regionAssetSendKey"] = profile.regionAssetSendKey; | ||
191 | parameters["regionUserURI"] = profile.regionUserURI; | ||
192 | parameters["regionUserRecvKey"] = profile.regionUserRecvKey; | ||
193 | parameters["regionUserSendKey"] = profile.regionUserSendKey; | ||
194 | |||
195 | bool returnval = false; | ||
196 | |||
197 | try | ||
198 | { | ||
199 | IDbCommand result = Query(sql, parameters); | ||
200 | |||
201 | if (result.ExecuteNonQuery() == 1) | ||
202 | returnval = true; | ||
203 | |||
204 | result.Dispose(); | ||
205 | } | ||
206 | catch (Exception e) | ||
207 | { | ||
208 | return false; | ||
209 | } | ||
210 | |||
211 | return returnval; | ||
212 | } | ||
213 | } | ||
214 | } | ||
diff --git a/OpenSim/Framework/Data.MSSQL/OpenSim.Framework.Data.MSSQL.csproj b/OpenSim/Framework/Data.MSSQL/OpenSim.Framework.Data.MSSQL.csproj new file mode 100644 index 0000000..4c41a4f --- /dev/null +++ b/OpenSim/Framework/Data.MSSQL/OpenSim.Framework.Data.MSSQL.csproj | |||
@@ -0,0 +1,104 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{17F7F694-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Data.MSSQL</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Data.MSSQL</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Data" > | ||
70 | <HintPath>System.Data.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Xml" > | ||
74 | <HintPath>System.Xml.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | <ProjectReference Include="..\Data\OpenSim.Framework.Data.csproj"> | ||
80 | <Name>OpenSim.Framework.Data</Name> | ||
81 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
82 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
83 | <Private>False</Private> | ||
84 | </ProjectReference> | ||
85 | </ItemGroup> | ||
86 | <ItemGroup> | ||
87 | <Compile Include="MSSQLGridData.cs"> | ||
88 | <SubType>Code</SubType> | ||
89 | </Compile> | ||
90 | <Compile Include="MSSQLManager.cs"> | ||
91 | <SubType>Code</SubType> | ||
92 | </Compile> | ||
93 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | </ItemGroup> | ||
97 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
98 | <PropertyGroup> | ||
99 | <PreBuildEvent> | ||
100 | </PreBuildEvent> | ||
101 | <PostBuildEvent> | ||
102 | </PostBuildEvent> | ||
103 | </PropertyGroup> | ||
104 | </Project> | ||
diff --git a/OpenSim/Framework/Data.MSSQL/OpenSim.Framework.Data.MSSQL.csproj.user b/OpenSim/Framework/Data.MSSQL/OpenSim.Framework.Data.MSSQL.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Data.MSSQL/OpenSim.Framework.Data.MSSQL.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Data.MSSQL/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.MSSQL/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bbe3cdf --- /dev/null +++ b/OpenSim/Framework/Data.MSSQL/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenGrid.Framework.Data.MSSQL")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenGrid.Framework.Data.MSSQL")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("0e1c1ca4-2cf2-4315-b0e7-432c02feea8a")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/Data.MySQL/MySQLGridData.cs b/OpenSim/Framework/Data.MySQL/MySQLGridData.cs new file mode 100644 index 0000000..4d6cf63 --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/MySQLGridData.cs | |||
@@ -0,0 +1,285 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenGrid.Framework.Data; | ||
32 | |||
33 | namespace OpenGrid.Framework.Data.MySQL | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// A MySQL Interface for the Grid Server | ||
37 | /// </summary> | ||
38 | public class MySQLGridData : IGridData | ||
39 | { | ||
40 | /// <summary> | ||
41 | /// MySQL Database Manager | ||
42 | /// </summary> | ||
43 | private MySQLManager database; | ||
44 | |||
45 | /// <summary> | ||
46 | /// Initialises the Grid Interface | ||
47 | /// </summary> | ||
48 | public void Initialise() | ||
49 | { | ||
50 | IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); | ||
51 | string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname"); | ||
52 | string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database"); | ||
53 | string settingUsername = GridDataMySqlFile.ParseFileReadValue("username"); | ||
54 | string settingPassword = GridDataMySqlFile.ParseFileReadValue("password"); | ||
55 | string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling"); | ||
56 | string settingPort = GridDataMySqlFile.ParseFileReadValue("port"); | ||
57 | |||
58 | database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort); | ||
59 | } | ||
60 | |||
61 | /// <summary> | ||
62 | /// Shuts down the grid interface | ||
63 | /// </summary> | ||
64 | public void Close() | ||
65 | { | ||
66 | database.Close(); | ||
67 | } | ||
68 | |||
69 | /// <summary> | ||
70 | /// Returns the plugin name | ||
71 | /// </summary> | ||
72 | /// <returns>Plugin name</returns> | ||
73 | public string getName() | ||
74 | { | ||
75 | return "MySql OpenGridData"; | ||
76 | } | ||
77 | |||
78 | /// <summary> | ||
79 | /// Returns the plugin version | ||
80 | /// </summary> | ||
81 | /// <returns>Plugin version</returns> | ||
82 | public string getVersion() | ||
83 | { | ||
84 | return "0.1"; | ||
85 | } | ||
86 | |||
87 | /// <summary> | ||
88 | /// Returns all the specified region profiles within coordates -- coordinates are inclusive | ||
89 | /// </summary> | ||
90 | /// <param name="xmin">Minimum X coordinate</param> | ||
91 | /// <param name="ymin">Minimum Y coordinate</param> | ||
92 | /// <param name="xmax">Maximum X coordinate</param> | ||
93 | /// <param name="ymax">Maximum Y coordinate</param> | ||
94 | /// <returns></returns> | ||
95 | public SimProfileData[] GetProfilesInRange(uint xmin, uint ymin, uint xmax, uint ymax) | ||
96 | { | ||
97 | try | ||
98 | { | ||
99 | lock (database) | ||
100 | { | ||
101 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
102 | param["?xmin"] = xmin.ToString(); | ||
103 | param["?ymin"] = ymin.ToString(); | ||
104 | param["?xmax"] = xmax.ToString(); | ||
105 | param["?ymax"] = ymax.ToString(); | ||
106 | |||
107 | System.Data.IDbCommand result = database.Query("SELECT * FROM regions WHERE locX >= ?xmin AND locX <= ?xmax AND locY >= ?ymin AND locY <= ?ymax", param); | ||
108 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
109 | |||
110 | SimProfileData row; | ||
111 | |||
112 | List<SimProfileData> rows = new List<SimProfileData>(); | ||
113 | |||
114 | while ((row = database.readSimRow(reader)) != null) | ||
115 | { | ||
116 | rows.Add(row); | ||
117 | } | ||
118 | reader.Close(); | ||
119 | result.Dispose(); | ||
120 | |||
121 | return rows.ToArray(); | ||
122 | |||
123 | } | ||
124 | } | ||
125 | catch (Exception e) | ||
126 | { | ||
127 | database.Reconnect(); | ||
128 | Console.WriteLine(e.ToString()); | ||
129 | return null; | ||
130 | } | ||
131 | } | ||
132 | |||
133 | /// <summary> | ||
134 | /// Returns a sim profile from it's location | ||
135 | /// </summary> | ||
136 | /// <param name="handle">Region location handle</param> | ||
137 | /// <returns>Sim profile</returns> | ||
138 | public SimProfileData GetProfileByHandle(ulong handle) | ||
139 | { | ||
140 | try | ||
141 | { | ||
142 | lock (database) | ||
143 | { | ||
144 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
145 | param["?handle"] = handle.ToString(); | ||
146 | |||
147 | System.Data.IDbCommand result = database.Query("SELECT * FROM regions WHERE regionHandle = ?handle", param); | ||
148 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
149 | |||
150 | SimProfileData row = database.readSimRow(reader); | ||
151 | reader.Close(); | ||
152 | result.Dispose(); | ||
153 | |||
154 | return row; | ||
155 | } | ||
156 | } | ||
157 | catch (Exception e) | ||
158 | { | ||
159 | database.Reconnect(); | ||
160 | Console.WriteLine(e.ToString()); | ||
161 | return null; | ||
162 | } | ||
163 | } | ||
164 | |||
165 | /// <summary> | ||
166 | /// Returns a sim profile from it's UUID | ||
167 | /// </summary> | ||
168 | /// <param name="uuid">The region UUID</param> | ||
169 | /// <returns>The sim profile</returns> | ||
170 | public SimProfileData GetProfileByLLUUID(libsecondlife.LLUUID uuid) | ||
171 | { | ||
172 | try | ||
173 | { | ||
174 | lock (database) | ||
175 | { | ||
176 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
177 | param["?uuid"] = uuid.ToStringHyphenated(); | ||
178 | |||
179 | System.Data.IDbCommand result = database.Query("SELECT * FROM regions WHERE uuid = ?uuid", param); | ||
180 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
181 | |||
182 | SimProfileData row = database.readSimRow(reader); | ||
183 | reader.Close(); | ||
184 | result.Dispose(); | ||
185 | |||
186 | return row; | ||
187 | } | ||
188 | } | ||
189 | catch (Exception e) | ||
190 | { | ||
191 | database.Reconnect(); | ||
192 | Console.WriteLine(e.ToString()); | ||
193 | return null; | ||
194 | } | ||
195 | } | ||
196 | |||
197 | /// <summary> | ||
198 | /// Adds a new profile to the database | ||
199 | /// </summary> | ||
200 | /// <param name="profile">The profile to add</param> | ||
201 | /// <returns>Successful?</returns> | ||
202 | public DataResponse AddProfile(SimProfileData profile) | ||
203 | { | ||
204 | lock (database) | ||
205 | { | ||
206 | if (database.insertRegion(profile)) | ||
207 | { | ||
208 | return DataResponse.RESPONSE_OK; | ||
209 | } | ||
210 | else | ||
211 | { | ||
212 | return DataResponse.RESPONSE_ERROR; | ||
213 | } | ||
214 | } | ||
215 | } | ||
216 | |||
217 | /// <summary> | ||
218 | /// DEPRECIATED. Attempts to authenticate a region by comparing a shared secret. | ||
219 | /// </summary> | ||
220 | /// <param name="uuid">The UUID of the challenger</param> | ||
221 | /// <param name="handle">The attempted regionHandle of the challenger</param> | ||
222 | /// <param name="authkey">The secret</param> | ||
223 | /// <returns>Whether the secret and regionhandle match the database entry for UUID</returns> | ||
224 | public bool AuthenticateSim(libsecondlife.LLUUID uuid, ulong handle, string authkey) | ||
225 | { | ||
226 | bool throwHissyFit = false; // Should be true by 1.0 | ||
227 | |||
228 | if (throwHissyFit) | ||
229 | throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential."); | ||
230 | |||
231 | SimProfileData data = GetProfileByLLUUID(uuid); | ||
232 | |||
233 | return (handle == data.regionHandle && authkey == data.regionSecret); | ||
234 | } | ||
235 | |||
236 | /// <summary> | ||
237 | /// NOT YET FUNCTIONAL. Provides a cryptographic authentication of a region | ||
238 | /// </summary> | ||
239 | /// <remarks>This requires a security audit.</remarks> | ||
240 | /// <param name="uuid"></param> | ||
241 | /// <param name="handle"></param> | ||
242 | /// <param name="authhash"></param> | ||
243 | /// <param name="challenge"></param> | ||
244 | /// <returns></returns> | ||
245 | public bool AuthenticateSim(libsecondlife.LLUUID uuid, ulong handle, string authhash, string challenge) | ||
246 | { | ||
247 | System.Security.Cryptography.SHA512Managed HashProvider = new System.Security.Cryptography.SHA512Managed(); | ||
248 | System.Text.ASCIIEncoding TextProvider = new ASCIIEncoding(); | ||
249 | |||
250 | byte[] stream = TextProvider.GetBytes(uuid.ToStringHyphenated() + ":" + handle.ToString() + ":" + challenge); | ||
251 | byte[] hash = HashProvider.ComputeHash(stream); | ||
252 | |||
253 | return false; | ||
254 | } | ||
255 | |||
256 | public ReservationData GetReservationAtPoint(uint x, uint y) | ||
257 | { | ||
258 | try | ||
259 | { | ||
260 | lock (database) | ||
261 | { | ||
262 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
263 | param["?x"] = x.ToString(); | ||
264 | param["?y"] = y.ToString(); | ||
265 | System.Data.IDbCommand result = database.Query("SELECT * FROM reservations WHERE resXMin <= ?x AND resXMax >= ?x AND resYMin <= ?y AND resYMax >= ?y", param); | ||
266 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
267 | |||
268 | ReservationData row = database.readReservationRow(reader); | ||
269 | reader.Close(); | ||
270 | result.Dispose(); | ||
271 | |||
272 | return row; | ||
273 | } | ||
274 | } | ||
275 | catch (Exception e) | ||
276 | { | ||
277 | database.Reconnect(); | ||
278 | Console.WriteLine(e.ToString()); | ||
279 | return null; | ||
280 | } | ||
281 | } | ||
282 | } | ||
283 | |||
284 | |||
285 | } | ||
diff --git a/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs new file mode 100644 index 0000000..fb429e4 --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/MySQLInventoryData.cs | |||
@@ -0,0 +1,309 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenGrid.Framework.Data.MySQL | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// A MySQL interface for the inventory server | ||
37 | /// </summary> | ||
38 | class MySQLInventoryData : IInventoryData | ||
39 | { | ||
40 | /// <summary> | ||
41 | /// The database manager | ||
42 | /// </summary> | ||
43 | public MySQLManager database; | ||
44 | |||
45 | /// <summary> | ||
46 | /// Loads and initialises this database plugin | ||
47 | /// </summary> | ||
48 | public void Initialise() | ||
49 | { | ||
50 | IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); | ||
51 | string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname"); | ||
52 | string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database"); | ||
53 | string settingUsername = GridDataMySqlFile.ParseFileReadValue("username"); | ||
54 | string settingPassword = GridDataMySqlFile.ParseFileReadValue("password"); | ||
55 | string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling"); | ||
56 | string settingPort = GridDataMySqlFile.ParseFileReadValue("port"); | ||
57 | |||
58 | database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort); | ||
59 | } | ||
60 | |||
61 | /// <summary> | ||
62 | /// The name of this DB provider | ||
63 | /// </summary> | ||
64 | /// <returns>Name of DB provider</returns> | ||
65 | public string getName() | ||
66 | { | ||
67 | return "MySQL Inventory Data Interface"; | ||
68 | } | ||
69 | |||
70 | /// <summary> | ||
71 | /// Closes this DB provider | ||
72 | /// </summary> | ||
73 | public void Close() | ||
74 | { | ||
75 | // Do nothing. | ||
76 | } | ||
77 | |||
78 | /// <summary> | ||
79 | /// Returns the version of this DB provider | ||
80 | /// </summary> | ||
81 | /// <returns>A string containing the DB provider</returns> | ||
82 | public string getVersion() | ||
83 | { | ||
84 | return "0.1"; | ||
85 | } | ||
86 | |||
87 | /// <summary> | ||
88 | /// Returns a list of items in a specified folder | ||
89 | /// </summary> | ||
90 | /// <param name="folderID">The folder to search</param> | ||
91 | /// <returns>A list containing inventory items</returns> | ||
92 | public List<InventoryItemBase> getInventoryInFolder(LLUUID folderID) | ||
93 | { | ||
94 | try | ||
95 | { | ||
96 | lock (database) | ||
97 | { | ||
98 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
99 | param["?uuid"] = folderID.ToStringHyphenated(); | ||
100 | |||
101 | System.Data.IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE parentFolderID = ?uuid", param); | ||
102 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
103 | |||
104 | List<InventoryItemBase> items = database.readInventoryItems(reader); | ||
105 | |||
106 | reader.Close(); | ||
107 | result.Dispose(); | ||
108 | |||
109 | return items; | ||
110 | } | ||
111 | } | ||
112 | catch (Exception e) | ||
113 | { | ||
114 | database.Reconnect(); | ||
115 | Console.WriteLine(e.ToString()); | ||
116 | return null; | ||
117 | } | ||
118 | } | ||
119 | |||
120 | /// <summary> | ||
121 | /// Returns a list of the root folders within a users inventory | ||
122 | /// </summary> | ||
123 | /// <param name="user">The user whos inventory is to be searched</param> | ||
124 | /// <returns>A list of folder objects</returns> | ||
125 | public List<InventoryFolderBase> getUserRootFolders(LLUUID user) | ||
126 | { | ||
127 | try | ||
128 | { | ||
129 | lock (database) | ||
130 | { | ||
131 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
132 | param["?uuid"] = user.ToStringHyphenated(); | ||
133 | param["?zero"] = LLUUID.Zero.ToStringHyphenated(); | ||
134 | |||
135 | System.Data.IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?zero AND agentID = ?uuid", param); | ||
136 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
137 | |||
138 | List<InventoryFolderBase> items = database.readInventoryFolders(reader); | ||
139 | |||
140 | reader.Close(); | ||
141 | result.Dispose(); | ||
142 | |||
143 | return items; | ||
144 | } | ||
145 | } | ||
146 | catch (Exception e) | ||
147 | { | ||
148 | database.Reconnect(); | ||
149 | Console.WriteLine(e.ToString()); | ||
150 | return null; | ||
151 | } | ||
152 | } | ||
153 | |||
154 | /// <summary> | ||
155 | /// Returns a list of folders in a users inventory contained within the specified folder | ||
156 | /// </summary> | ||
157 | /// <param name="parentID">The folder to search</param> | ||
158 | /// <returns>A list of inventory folders</returns> | ||
159 | public List<InventoryFolderBase> getInventoryFolders(LLUUID parentID) | ||
160 | { | ||
161 | try | ||
162 | { | ||
163 | lock (database) | ||
164 | { | ||
165 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
166 | param["?uuid"] = parentID.ToStringHyphenated(); | ||
167 | |||
168 | System.Data.IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE parentFolderID = ?uuid", param); | ||
169 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
170 | |||
171 | List<InventoryFolderBase> items = database.readInventoryFolders(reader); | ||
172 | |||
173 | reader.Close(); | ||
174 | result.Dispose(); | ||
175 | |||
176 | return items; | ||
177 | } | ||
178 | } | ||
179 | catch (Exception e) | ||
180 | { | ||
181 | database.Reconnect(); | ||
182 | Console.WriteLine(e.ToString()); | ||
183 | return null; | ||
184 | } | ||
185 | } | ||
186 | |||
187 | /// <summary> | ||
188 | /// Returns a specified inventory item | ||
189 | /// </summary> | ||
190 | /// <param name="item">The item to return</param> | ||
191 | /// <returns>An inventory item</returns> | ||
192 | public InventoryItemBase getInventoryItem(LLUUID item) | ||
193 | { | ||
194 | try | ||
195 | { | ||
196 | lock (database) | ||
197 | { | ||
198 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
199 | param["?uuid"] = item.ToStringHyphenated(); | ||
200 | |||
201 | System.Data.IDbCommand result = database.Query("SELECT * FROM inventoryitems WHERE inventoryID = ?uuid", param); | ||
202 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
203 | |||
204 | List<InventoryItemBase> items = database.readInventoryItems(reader); | ||
205 | |||
206 | reader.Close(); | ||
207 | result.Dispose(); | ||
208 | |||
209 | if (items.Count > 0) | ||
210 | { | ||
211 | return items[0]; | ||
212 | } | ||
213 | else | ||
214 | { | ||
215 | return null; | ||
216 | } | ||
217 | } | ||
218 | } | ||
219 | catch (Exception e) | ||
220 | { | ||
221 | database.Reconnect(); | ||
222 | Console.WriteLine(e.ToString()); | ||
223 | return null; | ||
224 | } | ||
225 | } | ||
226 | |||
227 | /// <summary> | ||
228 | /// Returns a specified inventory folder | ||
229 | /// </summary> | ||
230 | /// <param name="folder">The folder to return</param> | ||
231 | /// <returns>A folder class</returns> | ||
232 | public InventoryFolderBase getInventoryFolder(LLUUID folder) | ||
233 | { | ||
234 | try | ||
235 | { | ||
236 | lock (database) | ||
237 | { | ||
238 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
239 | param["?uuid"] = folder.ToStringHyphenated(); | ||
240 | |||
241 | System.Data.IDbCommand result = database.Query("SELECT * FROM inventoryfolders WHERE folderID = ?uuid", param); | ||
242 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
243 | |||
244 | List<InventoryFolderBase> items = database.readInventoryFolders(reader); | ||
245 | |||
246 | reader.Close(); | ||
247 | result.Dispose(); | ||
248 | |||
249 | if (items.Count > 0) | ||
250 | { | ||
251 | return items[0]; | ||
252 | } | ||
253 | else | ||
254 | { | ||
255 | return null; | ||
256 | } | ||
257 | } | ||
258 | } | ||
259 | catch (Exception e) | ||
260 | { | ||
261 | database.Reconnect(); | ||
262 | Console.WriteLine(e.ToString()); | ||
263 | return null; | ||
264 | } | ||
265 | } | ||
266 | |||
267 | /// <summary> | ||
268 | /// Adds a specified item to the database | ||
269 | /// </summary> | ||
270 | /// <param name="item">The inventory item</param> | ||
271 | public void addInventoryItem(InventoryItemBase item) | ||
272 | { | ||
273 | lock (database) | ||
274 | { | ||
275 | database.insertItem(item); | ||
276 | } | ||
277 | } | ||
278 | |||
279 | /// <summary> | ||
280 | /// Updates the specified inventory item | ||
281 | /// </summary> | ||
282 | /// <param name="item">Inventory item to update</param> | ||
283 | public void updateInventoryItem(InventoryItemBase item) | ||
284 | { | ||
285 | addInventoryItem(item); | ||
286 | } | ||
287 | |||
288 | /// <summary> | ||
289 | /// Creates a new inventory folder | ||
290 | /// </summary> | ||
291 | /// <param name="folder">Folder to create</param> | ||
292 | public void addInventoryFolder(InventoryFolderBase folder) | ||
293 | { | ||
294 | lock (database) | ||
295 | { | ||
296 | database.insertFolder(folder); | ||
297 | } | ||
298 | } | ||
299 | |||
300 | /// <summary> | ||
301 | /// Updates an inventory folder | ||
302 | /// </summary> | ||
303 | /// <param name="folder">Folder to update</param> | ||
304 | public void updateInventoryFolder(InventoryFolderBase folder) | ||
305 | { | ||
306 | addInventoryFolder(folder); | ||
307 | } | ||
308 | } | ||
309 | } | ||
diff --git a/OpenSim/Framework/Data.MySQL/MySQLLogData.cs b/OpenSim/Framework/Data.MySQL/MySQLLogData.cs new file mode 100644 index 0000000..c88b39f --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/MySQLLogData.cs | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenGrid.Framework.Data.MySQL | ||
33 | { | ||
34 | /// <summary> | ||
35 | /// An interface to the log database for MySQL | ||
36 | /// </summary> | ||
37 | class MySQLLogData : ILogData | ||
38 | { | ||
39 | /// <summary> | ||
40 | /// The database manager | ||
41 | /// </summary> | ||
42 | public MySQLManager database; | ||
43 | |||
44 | /// <summary> | ||
45 | /// Artificial constructor called when the plugin is loaded | ||
46 | /// </summary> | ||
47 | public void Initialise() | ||
48 | { | ||
49 | IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); | ||
50 | string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname"); | ||
51 | string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database"); | ||
52 | string settingUsername = GridDataMySqlFile.ParseFileReadValue("username"); | ||
53 | string settingPassword = GridDataMySqlFile.ParseFileReadValue("password"); | ||
54 | string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling"); | ||
55 | string settingPort = GridDataMySqlFile.ParseFileReadValue("port"); | ||
56 | |||
57 | database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort); | ||
58 | } | ||
59 | |||
60 | /// <summary> | ||
61 | /// Saves a log item to the database | ||
62 | /// </summary> | ||
63 | /// <param name="serverDaemon">The daemon triggering the event</param> | ||
64 | /// <param name="target">The target of the action (region / agent UUID, etc)</param> | ||
65 | /// <param name="methodCall">The method call where the problem occured</param> | ||
66 | /// <param name="arguments">The arguments passed to the method</param> | ||
67 | /// <param name="priority">How critical is this?</param> | ||
68 | /// <param name="logMessage">The message to log</param> | ||
69 | public void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority, string logMessage) | ||
70 | { | ||
71 | try | ||
72 | { | ||
73 | database.insertLogRow(serverDaemon, target, methodCall, arguments, priority, logMessage); | ||
74 | } | ||
75 | catch (Exception e) | ||
76 | { | ||
77 | database.Reconnect(); | ||
78 | } | ||
79 | } | ||
80 | |||
81 | /// <summary> | ||
82 | /// Returns the name of this DB provider | ||
83 | /// </summary> | ||
84 | /// <returns>A string containing the DB provider name</returns> | ||
85 | public string getName() | ||
86 | { | ||
87 | return "MySQL Logdata Interface"; | ||
88 | } | ||
89 | |||
90 | /// <summary> | ||
91 | /// Closes the database provider | ||
92 | /// </summary> | ||
93 | public void Close() | ||
94 | { | ||
95 | // Do nothing. | ||
96 | } | ||
97 | |||
98 | /// <summary> | ||
99 | /// Returns the version of this DB provider | ||
100 | /// </summary> | ||
101 | /// <returns>A string containing the provider version</returns> | ||
102 | public string getVersion() | ||
103 | { | ||
104 | return "0.1"; | ||
105 | } | ||
106 | } | ||
107 | } | ||
diff --git a/OpenSim/Framework/Data.MySQL/MySQLManager.cs b/OpenSim/Framework/Data.MySQL/MySQLManager.cs new file mode 100644 index 0000000..53b3bdd --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/MySQLManager.cs | |||
@@ -0,0 +1,609 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Data; | ||
32 | |||
33 | // MySQL Native | ||
34 | using MySql; | ||
35 | using MySql.Data; | ||
36 | using MySql.Data.Types; | ||
37 | using MySql.Data.MySqlClient; | ||
38 | |||
39 | using OpenGrid.Framework.Data; | ||
40 | |||
41 | namespace OpenGrid.Framework.Data.MySQL | ||
42 | { | ||
43 | /// <summary> | ||
44 | /// A MySQL Database manager | ||
45 | /// </summary> | ||
46 | class MySQLManager | ||
47 | { | ||
48 | /// <summary> | ||
49 | /// The database connection object | ||
50 | /// </summary> | ||
51 | IDbConnection dbcon; | ||
52 | /// <summary> | ||
53 | /// Connection string for ADO.net | ||
54 | /// </summary> | ||
55 | string connectionString; | ||
56 | |||
57 | /// <summary> | ||
58 | /// Initialises and creates a new MySQL connection and maintains it. | ||
59 | /// </summary> | ||
60 | /// <param name="hostname">The MySQL server being connected to</param> | ||
61 | /// <param name="database">The name of the MySQL database being used</param> | ||
62 | /// <param name="username">The username logging into the database</param> | ||
63 | /// <param name="password">The password for the user logging in</param> | ||
64 | /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param> | ||
65 | public MySQLManager(string hostname, string database, string username, string password, string cpooling, string port) | ||
66 | { | ||
67 | try | ||
68 | { | ||
69 | connectionString = "Server=" + hostname + ";Port=" + port + ";Database=" + database + ";User ID=" + username + ";Password=" + password + ";Pooling=" + cpooling + ";"; | ||
70 | dbcon = new MySqlConnection(connectionString); | ||
71 | |||
72 | dbcon.Open(); | ||
73 | |||
74 | System.Console.WriteLine("MySQL connection established"); | ||
75 | } | ||
76 | catch (Exception e) | ||
77 | { | ||
78 | throw new Exception("Error initialising MySql Database: " + e.ToString()); | ||
79 | } | ||
80 | } | ||
81 | |||
82 | /// <summary> | ||
83 | /// Shuts down the database connection | ||
84 | /// </summary> | ||
85 | public void Close() | ||
86 | { | ||
87 | dbcon.Close(); | ||
88 | dbcon = null; | ||
89 | } | ||
90 | |||
91 | /// <summary> | ||
92 | /// Reconnects to the database | ||
93 | /// </summary> | ||
94 | public void Reconnect() | ||
95 | { | ||
96 | lock (dbcon) | ||
97 | { | ||
98 | try | ||
99 | { | ||
100 | // Close the DB connection | ||
101 | dbcon.Close(); | ||
102 | // Try reopen it | ||
103 | dbcon = new MySqlConnection(connectionString); | ||
104 | dbcon.Open(); | ||
105 | } | ||
106 | catch (Exception e) | ||
107 | { | ||
108 | Console.WriteLine("Unable to reconnect to database " + e.ToString()); | ||
109 | } | ||
110 | } | ||
111 | } | ||
112 | |||
113 | /// <summary> | ||
114 | /// Runs a query with protection against SQL Injection by using parameterised input. | ||
115 | /// </summary> | ||
116 | /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param> | ||
117 | /// <param name="parameters">The parameters - index so that @y is indexed as 'y'</param> | ||
118 | /// <returns>A MySQL DB Command</returns> | ||
119 | public IDbCommand Query(string sql, Dictionary<string, string> parameters) | ||
120 | { | ||
121 | try | ||
122 | { | ||
123 | MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand(); | ||
124 | dbcommand.CommandText = sql; | ||
125 | foreach (KeyValuePair<string, string> param in parameters) | ||
126 | { | ||
127 | dbcommand.Parameters.Add(param.Key, param.Value); | ||
128 | } | ||
129 | |||
130 | return (IDbCommand)dbcommand; | ||
131 | } | ||
132 | catch | ||
133 | { | ||
134 | lock (dbcon) | ||
135 | { | ||
136 | // Close the DB connection | ||
137 | try | ||
138 | { | ||
139 | dbcon.Close(); | ||
140 | } | ||
141 | catch { } | ||
142 | |||
143 | // Try reopen it | ||
144 | try | ||
145 | { | ||
146 | dbcon = new MySqlConnection(connectionString); | ||
147 | dbcon.Open(); | ||
148 | } | ||
149 | catch (Exception e) | ||
150 | { | ||
151 | Console.WriteLine("Unable to reconnect to database " + e.ToString()); | ||
152 | } | ||
153 | |||
154 | // Run the query again | ||
155 | try | ||
156 | { | ||
157 | MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand(); | ||
158 | dbcommand.CommandText = sql; | ||
159 | foreach (KeyValuePair<string, string> param in parameters) | ||
160 | { | ||
161 | dbcommand.Parameters.Add(param.Key, param.Value); | ||
162 | } | ||
163 | |||
164 | return (IDbCommand)dbcommand; | ||
165 | } | ||
166 | catch (Exception e) | ||
167 | { | ||
168 | // Return null if it fails. | ||
169 | Console.WriteLine("Failed during Query generation: " + e.ToString()); | ||
170 | return null; | ||
171 | } | ||
172 | } | ||
173 | } | ||
174 | } | ||
175 | |||
176 | /// <summary> | ||
177 | /// Reads a region row from a database reader | ||
178 | /// </summary> | ||
179 | /// <param name="reader">An active database reader</param> | ||
180 | /// <returns>A region profile</returns> | ||
181 | public SimProfileData readSimRow(IDataReader reader) | ||
182 | { | ||
183 | SimProfileData retval = new SimProfileData(); | ||
184 | |||
185 | if (reader.Read()) | ||
186 | { | ||
187 | // Region Main | ||
188 | retval.regionHandle = Convert.ToUInt64(reader["regionHandle"].ToString()); | ||
189 | retval.regionName = (string)reader["regionName"]; | ||
190 | retval.UUID = new libsecondlife.LLUUID((string)reader["uuid"]); | ||
191 | |||
192 | // Secrets | ||
193 | retval.regionRecvKey = (string)reader["regionRecvKey"]; | ||
194 | retval.regionSecret = (string)reader["regionSecret"]; | ||
195 | retval.regionSendKey = (string)reader["regionSendKey"]; | ||
196 | |||
197 | // Region Server | ||
198 | retval.regionDataURI = (string)reader["regionDataURI"]; | ||
199 | retval.regionOnline = false; // Needs to be pinged before this can be set. | ||
200 | retval.serverIP = (string)reader["serverIP"]; | ||
201 | retval.serverPort = (uint)reader["serverPort"]; | ||
202 | retval.serverURI = (string)reader["serverURI"]; | ||
203 | |||
204 | // Location | ||
205 | retval.regionLocX = Convert.ToUInt32(reader["locX"].ToString()); | ||
206 | retval.regionLocY = Convert.ToUInt32(reader["locY"].ToString()); | ||
207 | retval.regionLocZ = Convert.ToUInt32(reader["locZ"].ToString()); | ||
208 | |||
209 | // Neighbours - 0 = No Override | ||
210 | retval.regionEastOverrideHandle = Convert.ToUInt64(reader["eastOverrideHandle"].ToString()); | ||
211 | retval.regionWestOverrideHandle = Convert.ToUInt64(reader["westOverrideHandle"].ToString()); | ||
212 | retval.regionSouthOverrideHandle = Convert.ToUInt64(reader["southOverrideHandle"].ToString()); | ||
213 | retval.regionNorthOverrideHandle = Convert.ToUInt64(reader["northOverrideHandle"].ToString()); | ||
214 | |||
215 | // Assets | ||
216 | retval.regionAssetURI = (string)reader["regionAssetURI"]; | ||
217 | retval.regionAssetRecvKey = (string)reader["regionAssetRecvKey"]; | ||
218 | retval.regionAssetSendKey = (string)reader["regionAssetSendKey"]; | ||
219 | |||
220 | // Userserver | ||
221 | retval.regionUserURI = (string)reader["regionUserURI"]; | ||
222 | retval.regionUserRecvKey = (string)reader["regionUserRecvKey"]; | ||
223 | retval.regionUserSendKey = (string)reader["regionUserSendKey"]; | ||
224 | |||
225 | // World Map Addition | ||
226 | string tempRegionMap = reader["regionMapTexture"].ToString(); | ||
227 | if (tempRegionMap != "") | ||
228 | { | ||
229 | retval.regionMapTextureID = new libsecondlife.LLUUID(tempRegionMap); | ||
230 | } | ||
231 | else | ||
232 | { | ||
233 | retval.regionMapTextureID = new libsecondlife.LLUUID(); | ||
234 | } | ||
235 | } | ||
236 | else | ||
237 | { | ||
238 | return null; | ||
239 | } | ||
240 | return retval; | ||
241 | } | ||
242 | |||
243 | /// <summary> | ||
244 | /// Reads a reservation row from a database reader | ||
245 | /// </summary> | ||
246 | /// <param name="reader">An active database reader</param> | ||
247 | /// <returns>A reservation data object</returns> | ||
248 | public ReservationData readReservationRow(IDataReader reader) | ||
249 | { | ||
250 | ReservationData retval = new ReservationData(); | ||
251 | if (reader.Read()) | ||
252 | { | ||
253 | retval.gridRecvKey = (string)reader["gridRecvKey"]; | ||
254 | retval.gridSendKey = (string)reader["gridSendKey"]; | ||
255 | retval.reservationCompany = (string)reader["resCompany"]; | ||
256 | retval.reservationMaxX = (int)reader["resXMax"]; | ||
257 | retval.reservationMaxY = (int)reader["resYMax"]; | ||
258 | retval.reservationMinX = (int)reader["resXMin"]; | ||
259 | retval.reservationMinY = (int)reader["resYMin"]; | ||
260 | retval.reservationName = (string)reader["resName"]; | ||
261 | retval.status = (bool)reader["status"]; | ||
262 | retval.userUUID = new libsecondlife.LLUUID((string)reader["userUUID"]); | ||
263 | |||
264 | } | ||
265 | else | ||
266 | { | ||
267 | return null; | ||
268 | } | ||
269 | return retval; | ||
270 | } | ||
271 | /// <summary> | ||
272 | /// Reads an agent row from a database reader | ||
273 | /// </summary> | ||
274 | /// <param name="reader">An active database reader</param> | ||
275 | /// <returns>A user session agent</returns> | ||
276 | public UserAgentData readAgentRow(IDataReader reader) | ||
277 | { | ||
278 | UserAgentData retval = new UserAgentData(); | ||
279 | |||
280 | if (reader.Read()) | ||
281 | { | ||
282 | // Agent IDs | ||
283 | retval.UUID = new libsecondlife.LLUUID((string)reader["UUID"]); | ||
284 | retval.sessionID = new libsecondlife.LLUUID((string)reader["sessionID"]); | ||
285 | retval.secureSessionID = new libsecondlife.LLUUID((string)reader["secureSessionID"]); | ||
286 | |||
287 | // Agent Who? | ||
288 | retval.agentIP = (string)reader["agentIP"]; | ||
289 | retval.agentPort = Convert.ToUInt32(reader["agentPort"].ToString()); | ||
290 | retval.agentOnline = Convert.ToBoolean(reader["agentOnline"].ToString()); | ||
291 | |||
292 | // Login/Logout times (UNIX Epoch) | ||
293 | retval.loginTime = Convert.ToInt32(reader["loginTime"].ToString()); | ||
294 | retval.logoutTime = Convert.ToInt32(reader["logoutTime"].ToString()); | ||
295 | |||
296 | // Current position | ||
297 | retval.currentRegion = (string)reader["currentRegion"]; | ||
298 | retval.currentHandle = Convert.ToUInt64(reader["currentHandle"].ToString()); | ||
299 | libsecondlife.LLVector3.TryParse((string)reader["currentPos"], out retval.currentPos); | ||
300 | } | ||
301 | else | ||
302 | { | ||
303 | return null; | ||
304 | } | ||
305 | return retval; | ||
306 | } | ||
307 | |||
308 | /// <summary> | ||
309 | /// Reads a user profile from an active data reader | ||
310 | /// </summary> | ||
311 | /// <param name="reader">An active database reader</param> | ||
312 | /// <returns>A user profile</returns> | ||
313 | public UserProfileData readUserRow(IDataReader reader) | ||
314 | { | ||
315 | UserProfileData retval = new UserProfileData(); | ||
316 | |||
317 | if (reader.Read()) | ||
318 | { | ||
319 | retval.UUID = new libsecondlife.LLUUID((string)reader["UUID"]); | ||
320 | retval.username = (string)reader["username"]; | ||
321 | retval.surname = (string)reader["lastname"]; | ||
322 | |||
323 | retval.passwordHash = (string)reader["passwordHash"]; | ||
324 | retval.passwordSalt = (string)reader["passwordSalt"]; | ||
325 | |||
326 | retval.homeRegion = Convert.ToUInt64(reader["homeRegion"].ToString()); | ||
327 | retval.homeLocation = new libsecondlife.LLVector3( | ||
328 | Convert.ToSingle(reader["homeLocationX"].ToString()), | ||
329 | Convert.ToSingle(reader["homeLocationY"].ToString()), | ||
330 | Convert.ToSingle(reader["homeLocationZ"].ToString())); | ||
331 | retval.homeLookAt = new libsecondlife.LLVector3( | ||
332 | Convert.ToSingle(reader["homeLookAtX"].ToString()), | ||
333 | Convert.ToSingle(reader["homeLookAtY"].ToString()), | ||
334 | Convert.ToSingle(reader["homeLookAtZ"].ToString())); | ||
335 | |||
336 | retval.created = Convert.ToInt32(reader["created"].ToString()); | ||
337 | retval.lastLogin = Convert.ToInt32(reader["lastLogin"].ToString()); | ||
338 | |||
339 | retval.userInventoryURI = (string)reader["userInventoryURI"]; | ||
340 | retval.userAssetURI = (string)reader["userAssetURI"]; | ||
341 | |||
342 | retval.profileCanDoMask = Convert.ToUInt32(reader["profileCanDoMask"].ToString()); | ||
343 | retval.profileWantDoMask = Convert.ToUInt32(reader["profileWantDoMask"].ToString()); | ||
344 | |||
345 | retval.profileAboutText = (string)reader["profileAboutText"]; | ||
346 | retval.profileFirstText = (string)reader["profileFirstText"]; | ||
347 | |||
348 | retval.profileImage = new libsecondlife.LLUUID((string)reader["profileImage"]); | ||
349 | retval.profileFirstImage = new libsecondlife.LLUUID((string)reader["profileFirstImage"]); | ||
350 | |||
351 | } | ||
352 | else | ||
353 | { | ||
354 | return null; | ||
355 | } | ||
356 | return retval; | ||
357 | } | ||
358 | |||
359 | /// <summary> | ||
360 | /// Reads a list of inventory folders returned by a query. | ||
361 | /// </summary> | ||
362 | /// <param name="reader">A MySQL Data Reader</param> | ||
363 | /// <returns>A List containing inventory folders</returns> | ||
364 | public List<InventoryFolderBase> readInventoryFolders(IDataReader reader) | ||
365 | { | ||
366 | List<InventoryFolderBase> rows = new List<InventoryFolderBase>(); | ||
367 | |||
368 | while(reader.Read()) | ||
369 | { | ||
370 | try | ||
371 | { | ||
372 | InventoryFolderBase folder = new InventoryFolderBase(); | ||
373 | |||
374 | folder.agentID = new libsecondlife.LLUUID((string)reader["agentID"]); | ||
375 | folder.parentID = new libsecondlife.LLUUID((string)reader["parentFolderID"]); | ||
376 | folder.folderID = new libsecondlife.LLUUID((string)reader["folderID"]); | ||
377 | folder.name = (string)reader["folderName"]; | ||
378 | |||
379 | rows.Add(folder); | ||
380 | } | ||
381 | catch (Exception e) | ||
382 | { | ||
383 | Console.WriteLine(e.ToString()); | ||
384 | } | ||
385 | } | ||
386 | |||
387 | return rows; | ||
388 | } | ||
389 | |||
390 | /// <summary> | ||
391 | /// Reads a collection of items from an SQL result | ||
392 | /// </summary> | ||
393 | /// <param name="reader">The SQL Result</param> | ||
394 | /// <returns>A List containing Inventory Items</returns> | ||
395 | public List<InventoryItemBase> readInventoryItems(IDataReader reader) | ||
396 | { | ||
397 | List<InventoryItemBase> rows = new List<InventoryItemBase>(); | ||
398 | |||
399 | while (reader.Read()) | ||
400 | { | ||
401 | try | ||
402 | { | ||
403 | InventoryItemBase item = new InventoryItemBase(); | ||
404 | |||
405 | item.assetID = new libsecondlife.LLUUID((string)reader["assetID"]); | ||
406 | item.avatarID = new libsecondlife.LLUUID((string)reader["avatarID"]); | ||
407 | item.inventoryCurrentPermissions = Convert.ToUInt32(reader["inventoryCurrentPermissions"].ToString()); | ||
408 | item.inventoryDescription = (string)reader["inventoryDescription"]; | ||
409 | item.inventoryID = new libsecondlife.LLUUID((string)reader["inventoryID"]); | ||
410 | item.inventoryName = (string)reader["inventoryName"]; | ||
411 | item.inventoryNextPermissions = Convert.ToUInt32(reader["inventoryNextPermissions"].ToString()); | ||
412 | item.parentFolderID = new libsecondlife.LLUUID((string)reader["parentFolderID"]); | ||
413 | item.type = Convert.ToInt32(reader["type"].ToString()); | ||
414 | |||
415 | rows.Add(item); | ||
416 | } | ||
417 | catch (Exception e) | ||
418 | { | ||
419 | Console.WriteLine(e.ToString()); | ||
420 | } | ||
421 | } | ||
422 | |||
423 | return rows; | ||
424 | } | ||
425 | |||
426 | /// <summary> | ||
427 | /// Inserts a new row into the log database | ||
428 | /// </summary> | ||
429 | /// <param name="serverDaemon">The daemon which triggered this event</param> | ||
430 | /// <param name="target">Who were we operating on when this occured (region UUID, user UUID, etc)</param> | ||
431 | /// <param name="methodCall">The method call where the problem occured</param> | ||
432 | /// <param name="arguments">The arguments passed to the method</param> | ||
433 | /// <param name="priority">How critical is this?</param> | ||
434 | /// <param name="logMessage">Extra message info</param> | ||
435 | /// <returns>Saved successfully?</returns> | ||
436 | public bool insertLogRow(string serverDaemon, string target, string methodCall, string arguments, int priority, string logMessage) | ||
437 | { | ||
438 | string sql = "INSERT INTO logs (`target`, `server`, `method`, `arguments`, `priority`, `message`) VALUES "; | ||
439 | sql += "(?target, ?server, ?method, ?arguments, ?priority, ?message)"; | ||
440 | |||
441 | Dictionary<string, string> parameters = new Dictionary<string, string>(); | ||
442 | parameters["?server"] = serverDaemon; | ||
443 | parameters["?target"] = target; | ||
444 | parameters["?method"] = methodCall; | ||
445 | parameters["?arguments"] = arguments; | ||
446 | parameters["?priority"] = priority.ToString(); | ||
447 | parameters["?message"] = logMessage; | ||
448 | |||
449 | bool returnval = false; | ||
450 | |||
451 | try | ||
452 | { | ||
453 | IDbCommand result = Query(sql, parameters); | ||
454 | |||
455 | if (result.ExecuteNonQuery() == 1) | ||
456 | returnval = true; | ||
457 | |||
458 | result.Dispose(); | ||
459 | } | ||
460 | catch (Exception e) | ||
461 | { | ||
462 | Console.WriteLine(e.ToString()); | ||
463 | return false; | ||
464 | } | ||
465 | |||
466 | return returnval; | ||
467 | } | ||
468 | |||
469 | /// <summary> | ||
470 | /// Inserts a new item into the database | ||
471 | /// </summary> | ||
472 | /// <param name="item">The item</param> | ||
473 | /// <returns>Success?</returns> | ||
474 | public bool insertItem(InventoryItemBase item) | ||
475 | { | ||
476 | string sql = "REPLACE INTO inventoryitems (inventoryID, assetID, type, parentFolderID, avatarID, inventoryName, inventoryDescription, inventoryNextPermissions, inventoryCurrentPermissions) VALUES "; | ||
477 | sql += "(?inventoryID, ?assetID, ?type, ?parentFolderID, ?avatarID, ?inventoryName, ?inventoryDescription, ?inventoryNextPermissions, ?inventoryCurrentPermissions)"; | ||
478 | |||
479 | Dictionary<string, string> parameters = new Dictionary<string, string>(); | ||
480 | parameters["?inventoryID"] = item.inventoryID.ToStringHyphenated(); | ||
481 | parameters["?assetID"] = item.assetID.ToStringHyphenated(); | ||
482 | parameters["?type"] = item.type.ToString(); | ||
483 | parameters["?parentFolderID"] = item.parentFolderID.ToStringHyphenated(); | ||
484 | parameters["?avatarID"] = item.avatarID.ToStringHyphenated(); | ||
485 | parameters["?inventoryName"] = item.inventoryName; | ||
486 | parameters["?inventoryDescription"] = item.inventoryDescription; | ||
487 | parameters["?inventoryNextPermissions"] = item.inventoryNextPermissions.ToString(); | ||
488 | parameters["?inventoryCurrentPermissions"] = item.inventoryCurrentPermissions.ToString(); | ||
489 | |||
490 | bool returnval = false; | ||
491 | |||
492 | try | ||
493 | { | ||
494 | IDbCommand result = Query(sql, parameters); | ||
495 | |||
496 | if (result.ExecuteNonQuery() == 1) | ||
497 | returnval = true; | ||
498 | |||
499 | result.Dispose(); | ||
500 | } | ||
501 | catch (Exception e) | ||
502 | { | ||
503 | Console.WriteLine(e.ToString()); | ||
504 | return false; | ||
505 | } | ||
506 | |||
507 | return returnval; | ||
508 | } | ||
509 | |||
510 | /// <summary> | ||
511 | /// Inserts a new folder into the database | ||
512 | /// </summary> | ||
513 | /// <param name="folder">The folder</param> | ||
514 | /// <returns>Success?</returns> | ||
515 | public bool insertFolder(InventoryFolderBase folder) | ||
516 | { | ||
517 | string sql = "REPLACE INTO inventoryfolders (folderID, agentID, parentFolderID, folderName) VALUES "; | ||
518 | sql += "(?folderID, ?agentID, ?parentFolderID, ?folderName)"; | ||
519 | |||
520 | Dictionary<string, string> parameters = new Dictionary<string, string>(); | ||
521 | parameters["?folderID"] = folder.folderID.ToStringHyphenated(); | ||
522 | parameters["?agentID"] = folder.agentID.ToStringHyphenated(); | ||
523 | parameters["?parentFolderID"] = folder.parentID.ToStringHyphenated(); | ||
524 | parameters["?folderName"] = folder.name; | ||
525 | |||
526 | bool returnval = false; | ||
527 | try | ||
528 | { | ||
529 | IDbCommand result = Query(sql, parameters); | ||
530 | |||
531 | if (result.ExecuteNonQuery() == 1) | ||
532 | returnval = true; | ||
533 | |||
534 | result.Dispose(); | ||
535 | } | ||
536 | catch (Exception e) | ||
537 | { | ||
538 | Console.WriteLine(e.ToString()); | ||
539 | return false; | ||
540 | } | ||
541 | return returnval; | ||
542 | } | ||
543 | |||
544 | /// <summary> | ||
545 | /// Inserts a new region into the database | ||
546 | /// </summary> | ||
547 | /// <param name="profile">The region to insert</param> | ||
548 | /// <returns>Success?</returns> | ||
549 | public bool insertRegion(SimProfileData regiondata) | ||
550 | { | ||
551 | string sql = "REPLACE INTO regions (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, "; | ||
552 | sql += "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, "; | ||
553 | sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey, regionMapTexture) VALUES "; | ||
554 | |||
555 | sql += "(?regionHandle, ?regionName, ?uuid, ?regionRecvKey, ?regionSecret, ?regionSendKey, ?regionDataURI, "; | ||
556 | sql += "?serverIP, ?serverPort, ?serverURI, ?locX, ?locY, ?locZ, ?eastOverrideHandle, ?westOverrideHandle, ?southOverrideHandle, ?northOverrideHandle, ?regionAssetURI, ?regionAssetRecvKey, "; | ||
557 | sql += "?regionAssetSendKey, ?regionUserURI, ?regionUserRecvKey, ?regionUserSendKey, ?regionMapTexture);"; | ||
558 | |||
559 | Dictionary<string, string> parameters = new Dictionary<string, string>(); | ||
560 | |||
561 | parameters["?regionHandle"] = regiondata.regionHandle.ToString(); | ||
562 | parameters["?regionName"] = regiondata.regionName.ToString(); | ||
563 | parameters["?uuid"] = regiondata.UUID.ToStringHyphenated(); | ||
564 | parameters["?regionRecvKey"] = regiondata.regionRecvKey.ToString(); | ||
565 | parameters["?regionSecret"] = regiondata.regionSecret.ToString(); | ||
566 | parameters["?regionSendKey"] = regiondata.regionSendKey.ToString(); | ||
567 | parameters["?regionDataURI"] = regiondata.regionDataURI.ToString(); | ||
568 | parameters["?serverIP"] = regiondata.serverIP.ToString(); | ||
569 | parameters["?serverPort"] = regiondata.serverPort.ToString(); | ||
570 | parameters["?serverURI"] = regiondata.serverURI.ToString(); | ||
571 | parameters["?locX"] = regiondata.regionLocX.ToString(); | ||
572 | parameters["?locY"] = regiondata.regionLocY.ToString(); | ||
573 | parameters["?locZ"] = regiondata.regionLocZ.ToString(); | ||
574 | parameters["?eastOverrideHandle"] = regiondata.regionEastOverrideHandle.ToString(); | ||
575 | parameters["?westOverrideHandle"] = regiondata.regionWestOverrideHandle.ToString(); | ||
576 | parameters["?northOverrideHandle"] = regiondata.regionNorthOverrideHandle.ToString(); | ||
577 | parameters["?southOverrideHandle"] = regiondata.regionSouthOverrideHandle.ToString(); | ||
578 | parameters["?regionAssetURI"] = regiondata.regionAssetURI.ToString(); | ||
579 | parameters["?regionAssetRecvKey"] = regiondata.regionAssetRecvKey.ToString(); | ||
580 | parameters["?regionAssetSendKey"] = regiondata.regionAssetSendKey.ToString(); | ||
581 | parameters["?regionUserURI"] = regiondata.regionUserURI.ToString(); | ||
582 | parameters["?regionUserRecvKey"] = regiondata.regionUserRecvKey.ToString(); | ||
583 | parameters["?regionUserSendKey"] = regiondata.regionUserSendKey.ToString(); | ||
584 | parameters["?regionMapTexture"] = regiondata.regionMapTextureID.ToStringHyphenated(); | ||
585 | |||
586 | bool returnval = false; | ||
587 | |||
588 | try | ||
589 | { | ||
590 | |||
591 | IDbCommand result = Query(sql, parameters); | ||
592 | |||
593 | //Console.WriteLine(result.CommandText); | ||
594 | |||
595 | if (result.ExecuteNonQuery() == 1) | ||
596 | returnval = true; | ||
597 | |||
598 | result.Dispose(); | ||
599 | } | ||
600 | catch (Exception e) | ||
601 | { | ||
602 | Console.WriteLine(e.ToString()); | ||
603 | return false; | ||
604 | } | ||
605 | |||
606 | return returnval; | ||
607 | } | ||
608 | } | ||
609 | } | ||
diff --git a/OpenSim/Framework/Data.MySQL/MySQLUserData.cs b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs new file mode 100644 index 0000000..032a0e6 --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/MySQLUserData.cs | |||
@@ -0,0 +1,257 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenGrid.Framework.Data; | ||
32 | using libsecondlife; | ||
33 | |||
34 | namespace OpenGrid.Framework.Data.MySQL | ||
35 | { | ||
36 | /// <summary> | ||
37 | /// A database interface class to a user profile storage system | ||
38 | /// </summary> | ||
39 | class MySQLUserData : IUserData | ||
40 | { | ||
41 | /// <summary> | ||
42 | /// Database manager for MySQL | ||
43 | /// </summary> | ||
44 | public MySQLManager database; | ||
45 | |||
46 | /// <summary> | ||
47 | /// Loads and initialises the MySQL storage plugin | ||
48 | /// </summary> | ||
49 | public void Initialise() | ||
50 | { | ||
51 | // Load from an INI file connection details | ||
52 | // TODO: move this to XML? | ||
53 | IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); | ||
54 | string settingHostname = GridDataMySqlFile.ParseFileReadValue("hostname"); | ||
55 | string settingDatabase = GridDataMySqlFile.ParseFileReadValue("database"); | ||
56 | string settingUsername = GridDataMySqlFile.ParseFileReadValue("username"); | ||
57 | string settingPassword = GridDataMySqlFile.ParseFileReadValue("password"); | ||
58 | string settingPooling = GridDataMySqlFile.ParseFileReadValue("pooling"); | ||
59 | string settingPort = GridDataMySqlFile.ParseFileReadValue("port"); | ||
60 | |||
61 | database = new MySQLManager(settingHostname, settingDatabase, settingUsername, settingPassword, settingPooling, settingPort); | ||
62 | } | ||
63 | |||
64 | /// <summary> | ||
65 | /// Searches the database for a specified user profile | ||
66 | /// </summary> | ||
67 | /// <param name="name">The account name of the user</param> | ||
68 | /// <returns>A user profile</returns> | ||
69 | public UserProfileData getUserByName(string name) | ||
70 | { | ||
71 | return getUserByName(name.Split(' ')[0], name.Split(' ')[1]); | ||
72 | } | ||
73 | |||
74 | /// <summary> | ||
75 | /// Searches the database for a specified user profile by name components | ||
76 | /// </summary> | ||
77 | /// <param name="user">The first part of the account name</param> | ||
78 | /// <param name="last">The second part of the account name</param> | ||
79 | /// <returns>A user profile</returns> | ||
80 | public UserProfileData getUserByName(string user, string last) | ||
81 | { | ||
82 | try | ||
83 | { | ||
84 | lock (database) | ||
85 | { | ||
86 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
87 | param["?first"] = user; | ||
88 | param["?second"] = last; | ||
89 | |||
90 | System.Data.IDbCommand result = database.Query("SELECT * FROM users WHERE username = ?first AND lastname = ?second", param); | ||
91 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
92 | |||
93 | UserProfileData row = database.readUserRow(reader); | ||
94 | |||
95 | reader.Close(); | ||
96 | result.Dispose(); | ||
97 | |||
98 | return row; | ||
99 | } | ||
100 | } | ||
101 | catch (Exception e) | ||
102 | { | ||
103 | database.Reconnect(); | ||
104 | Console.WriteLine(e.ToString()); | ||
105 | return null; | ||
106 | } | ||
107 | } | ||
108 | |||
109 | /// <summary> | ||
110 | /// Searches the database for a specified user profile by UUID | ||
111 | /// </summary> | ||
112 | /// <param name="uuid">The account ID</param> | ||
113 | /// <returns>The users profile</returns> | ||
114 | public UserProfileData getUserByUUID(LLUUID uuid) | ||
115 | { | ||
116 | try | ||
117 | { | ||
118 | lock (database) | ||
119 | { | ||
120 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
121 | param["?uuid"] = uuid.ToStringHyphenated(); | ||
122 | |||
123 | System.Data.IDbCommand result = database.Query("SELECT * FROM users WHERE UUID = ?uuid", param); | ||
124 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
125 | |||
126 | UserProfileData row = database.readUserRow(reader); | ||
127 | |||
128 | reader.Close(); | ||
129 | result.Dispose(); | ||
130 | |||
131 | return row; | ||
132 | } | ||
133 | } | ||
134 | catch (Exception e) | ||
135 | { | ||
136 | database.Reconnect(); | ||
137 | Console.WriteLine(e.ToString()); | ||
138 | return null; | ||
139 | } | ||
140 | } | ||
141 | |||
142 | /// <summary> | ||
143 | /// Returns a user session searching by name | ||
144 | /// </summary> | ||
145 | /// <param name="name">The account name</param> | ||
146 | /// <returns>The users session</returns> | ||
147 | public UserAgentData getAgentByName(string name) | ||
148 | { | ||
149 | return getAgentByName(name.Split(' ')[0], name.Split(' ')[1]); | ||
150 | } | ||
151 | |||
152 | /// <summary> | ||
153 | /// Returns a user session by account name | ||
154 | /// </summary> | ||
155 | /// <param name="user">First part of the users account name</param> | ||
156 | /// <param name="last">Second part of the users account name</param> | ||
157 | /// <returns>The users session</returns> | ||
158 | public UserAgentData getAgentByName(string user, string last) | ||
159 | { | ||
160 | UserProfileData profile = getUserByName(user, last); | ||
161 | return getAgentByUUID(profile.UUID); | ||
162 | } | ||
163 | |||
164 | /// <summary> | ||
165 | /// Returns an agent session by account UUID | ||
166 | /// </summary> | ||
167 | /// <param name="uuid">The accounts UUID</param> | ||
168 | /// <returns>The users session</returns> | ||
169 | public UserAgentData getAgentByUUID(LLUUID uuid) | ||
170 | { | ||
171 | try | ||
172 | { | ||
173 | lock (database) | ||
174 | { | ||
175 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
176 | param["?uuid"] = uuid.ToStringHyphenated(); | ||
177 | |||
178 | System.Data.IDbCommand result = database.Query("SELECT * FROM agents WHERE UUID = ?uuid", param); | ||
179 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
180 | |||
181 | UserAgentData row = database.readAgentRow(reader); | ||
182 | |||
183 | reader.Close(); | ||
184 | result.Dispose(); | ||
185 | |||
186 | return row; | ||
187 | } | ||
188 | } | ||
189 | catch (Exception e) | ||
190 | { | ||
191 | database.Reconnect(); | ||
192 | Console.WriteLine(e.ToString()); | ||
193 | return null; | ||
194 | } | ||
195 | } | ||
196 | |||
197 | /// <summary> | ||
198 | /// Creates a new users profile | ||
199 | /// </summary> | ||
200 | /// <param name="user">The user profile to create</param> | ||
201 | public void addNewUserProfile(UserProfileData user) | ||
202 | { | ||
203 | } | ||
204 | |||
205 | /// <summary> | ||
206 | /// Creates a new agent | ||
207 | /// </summary> | ||
208 | /// <param name="agent">The agent to create</param> | ||
209 | public void addNewUserAgent(UserAgentData agent) | ||
210 | { | ||
211 | // Do nothing. | ||
212 | } | ||
213 | |||
214 | /// <summary> | ||
215 | /// Performs a money transfer request between two accounts | ||
216 | /// </summary> | ||
217 | /// <param name="from">The senders account ID</param> | ||
218 | /// <param name="to">The recievers account ID</param> | ||
219 | /// <param name="amount">The amount to transfer</param> | ||
220 | /// <returns>Success?</returns> | ||
221 | public bool moneyTransferRequest(LLUUID from, LLUUID to, uint amount) | ||
222 | { | ||
223 | return false; | ||
224 | } | ||
225 | |||
226 | /// <summary> | ||
227 | /// Performs an inventory transfer request between two accounts | ||
228 | /// </summary> | ||
229 | /// <remarks>TODO: Move to inventory server</remarks> | ||
230 | /// <param name="from">The senders account ID</param> | ||
231 | /// <param name="to">The recievers account ID</param> | ||
232 | /// <param name="item">The item to transfer</param> | ||
233 | /// <returns>Success?</returns> | ||
234 | public bool inventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item) | ||
235 | { | ||
236 | return false; | ||
237 | } | ||
238 | |||
239 | /// <summary> | ||
240 | /// Database provider name | ||
241 | /// </summary> | ||
242 | /// <returns>Provider name</returns> | ||
243 | public string getName() | ||
244 | { | ||
245 | return "MySQL Userdata Interface"; | ||
246 | } | ||
247 | |||
248 | /// <summary> | ||
249 | /// Database provider version | ||
250 | /// </summary> | ||
251 | /// <returns>provider version</returns> | ||
252 | public string getVersion() | ||
253 | { | ||
254 | return "0.1"; | ||
255 | } | ||
256 | } | ||
257 | } | ||
diff --git a/OpenSim/Framework/Data.MySQL/OpenSim.Framework.Data.MySQL.csproj b/OpenSim/Framework/Data.MySQL/OpenSim.Framework.Data.MySQL.csproj new file mode 100644 index 0000000..62e3887 --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/OpenSim.Framework.Data.MySQL.csproj | |||
@@ -0,0 +1,117 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{17F7F6BE-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Data.MySQL</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Data.MySQL</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="MySql.Data.dll" > | ||
66 | <HintPath>..\..\..\bin\MySql.Data.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Data" > | ||
74 | <HintPath>System.Data.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <ProjectReference Include="..\Data\OpenSim.Framework.Data.csproj"> | ||
84 | <Name>OpenSim.Framework.Data</Name> | ||
85 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
86 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
87 | <Private>False</Private> | ||
88 | </ProjectReference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | <Compile Include="MySQLGridData.cs"> | ||
92 | <SubType>Code</SubType> | ||
93 | </Compile> | ||
94 | <Compile Include="MySQLInventoryData.cs"> | ||
95 | <SubType>Code</SubType> | ||
96 | </Compile> | ||
97 | <Compile Include="MySQLLogData.cs"> | ||
98 | <SubType>Code</SubType> | ||
99 | </Compile> | ||
100 | <Compile Include="MySQLManager.cs"> | ||
101 | <SubType>Code</SubType> | ||
102 | </Compile> | ||
103 | <Compile Include="MySQLUserData.cs"> | ||
104 | <SubType>Code</SubType> | ||
105 | </Compile> | ||
106 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
107 | <SubType>Code</SubType> | ||
108 | </Compile> | ||
109 | </ItemGroup> | ||
110 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
111 | <PropertyGroup> | ||
112 | <PreBuildEvent> | ||
113 | </PreBuildEvent> | ||
114 | <PostBuildEvent> | ||
115 | </PostBuildEvent> | ||
116 | </PropertyGroup> | ||
117 | </Project> | ||
diff --git a/OpenSim/Framework/Data.MySQL/OpenSim.Framework.Data.MySQL.csproj.user b/OpenSim/Framework/Data.MySQL/OpenSim.Framework.Data.MySQL.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/OpenSim.Framework.Data.MySQL.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Data.MySQL/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.MySQL/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0bfd1d6 --- /dev/null +++ b/OpenSim/Framework/Data.MySQL/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenGrid.Framework.Data.MySQL")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenGrid.Framework.Data.MySQL")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("e49826b2-dcef-41be-a5bd-596733fa3304")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/Data.SQLite/OpenSim.Framework.Data.SQLite.csproj b/OpenSim/Framework/Data.SQLite/OpenSim.Framework.Data.SQLite.csproj new file mode 100644 index 0000000..4ba24f1 --- /dev/null +++ b/OpenSim/Framework/Data.SQLite/OpenSim.Framework.Data.SQLite.csproj | |||
@@ -0,0 +1,108 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{6ECC56A9-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Data.SQLite</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Data.SQLite</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Data" > | ||
70 | <HintPath>System.Data.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Data.SQLite.dll" > | ||
74 | <HintPath>..\..\..\bin\System.Data.SQLite.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <ProjectReference Include="..\Data\OpenSim.Framework.Data.csproj"> | ||
84 | <Name>OpenSim.Framework.Data</Name> | ||
85 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
86 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
87 | <Private>False</Private> | ||
88 | </ProjectReference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | <Compile Include="SQLiteGridData.cs"> | ||
92 | <SubType>Code</SubType> | ||
93 | </Compile> | ||
94 | <Compile Include="SQLiteManager.cs"> | ||
95 | <SubType>Code</SubType> | ||
96 | </Compile> | ||
97 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
98 | <SubType>Code</SubType> | ||
99 | </Compile> | ||
100 | </ItemGroup> | ||
101 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
102 | <PropertyGroup> | ||
103 | <PreBuildEvent> | ||
104 | </PreBuildEvent> | ||
105 | <PostBuildEvent> | ||
106 | </PostBuildEvent> | ||
107 | </PropertyGroup> | ||
108 | </Project> | ||
diff --git a/OpenSim/Framework/Data.SQLite/OpenSim.Framework.Data.SQLite.csproj.user b/OpenSim/Framework/Data.SQLite/OpenSim.Framework.Data.SQLite.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Data.SQLite/OpenSim.Framework.Data.SQLite.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Data.SQLite/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data.SQLite/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..57c4bae --- /dev/null +++ b/OpenSim/Framework/Data.SQLite/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenGrid.Framework.Data.SQLite")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenGrid.Framework.Data.SQLite")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("6113d5ce-4547-49f4-9236-0dcc503457b1")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteGridData.cs b/OpenSim/Framework/Data.SQLite/SQLiteGridData.cs new file mode 100644 index 0000000..d7a5a69 --- /dev/null +++ b/OpenSim/Framework/Data.SQLite/SQLiteGridData.cs | |||
@@ -0,0 +1,195 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenGrid.Framework.Data; | ||
32 | |||
33 | namespace OpenGrid.Framework.Data.SQLite | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// A Grid Interface to the SQLite database | ||
37 | /// </summary> | ||
38 | public class SQLiteGridData : IGridData | ||
39 | { | ||
40 | /// <summary> | ||
41 | /// A database manager | ||
42 | /// </summary> | ||
43 | private SQLiteManager database; | ||
44 | |||
45 | /// <summary> | ||
46 | /// Initialises the Grid Interface | ||
47 | /// </summary> | ||
48 | public void Initialise() | ||
49 | { | ||
50 | database = new SQLiteManager("localhost", "db", "user", "password", "false"); | ||
51 | } | ||
52 | |||
53 | /// <summary> | ||
54 | /// Shuts down the grid interface | ||
55 | /// </summary> | ||
56 | public void Close() | ||
57 | { | ||
58 | database.Close(); | ||
59 | } | ||
60 | |||
61 | /// <summary> | ||
62 | /// Returns the name of this grid interface | ||
63 | /// </summary> | ||
64 | /// <returns>A string containing the grid interface</returns> | ||
65 | public string getName() | ||
66 | { | ||
67 | return "SQLite OpenGridData"; | ||
68 | } | ||
69 | |||
70 | /// <summary> | ||
71 | /// Returns the version of this grid interface | ||
72 | /// </summary> | ||
73 | /// <returns>A string containing the version</returns> | ||
74 | public string getVersion() | ||
75 | { | ||
76 | return "0.1"; | ||
77 | } | ||
78 | |||
79 | /// <summary> | ||
80 | /// Returns a list of regions within the specified ranges | ||
81 | /// </summary> | ||
82 | /// <param name="a">minimum X coordinate</param> | ||
83 | /// <param name="b">minimum Y coordinate</param> | ||
84 | /// <param name="c">maximum X coordinate</param> | ||
85 | /// <param name="d">maximum Y coordinate</param> | ||
86 | /// <returns>An array of region profiles</returns> | ||
87 | public SimProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d) | ||
88 | { | ||
89 | return null; | ||
90 | } | ||
91 | |||
92 | /// <summary> | ||
93 | /// Returns a sim profile from it's location | ||
94 | /// </summary> | ||
95 | /// <param name="handle">Region location handle</param> | ||
96 | /// <returns>Sim profile</returns> | ||
97 | public SimProfileData GetProfileByHandle(ulong handle) | ||
98 | { | ||
99 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
100 | param["handle"] = handle.ToString(); | ||
101 | |||
102 | System.Data.IDbCommand result = database.Query("SELECT * FROM regions WHERE handle = @handle", param); | ||
103 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
104 | |||
105 | SimProfileData row = database.getRow(reader); | ||
106 | reader.Close(); | ||
107 | result.Dispose(); | ||
108 | |||
109 | return row; | ||
110 | } | ||
111 | |||
112 | /// <summary> | ||
113 | /// Returns a sim profile from it's UUID | ||
114 | /// </summary> | ||
115 | /// <param name="uuid">The region UUID</param> | ||
116 | /// <returns>The sim profile</returns> | ||
117 | public SimProfileData GetProfileByLLUUID(libsecondlife.LLUUID uuid) | ||
118 | { | ||
119 | Dictionary<string, string> param = new Dictionary<string, string>(); | ||
120 | param["uuid"] = uuid.ToStringHyphenated(); | ||
121 | |||
122 | System.Data.IDbCommand result = database.Query("SELECT * FROM regions WHERE uuid = @uuid", param); | ||
123 | System.Data.IDataReader reader = result.ExecuteReader(); | ||
124 | |||
125 | SimProfileData row = database.getRow(reader); | ||
126 | reader.Close(); | ||
127 | result.Dispose(); | ||
128 | |||
129 | return row; | ||
130 | } | ||
131 | |||
132 | /// <summary> | ||
133 | /// Adds a new specified region to the database | ||
134 | /// </summary> | ||
135 | /// <param name="profile">The profile to add</param> | ||
136 | /// <returns>A dataresponse enum indicating success</returns> | ||
137 | public DataResponse AddProfile(SimProfileData profile) | ||
138 | { | ||
139 | if (database.insertRow(profile)) | ||
140 | { | ||
141 | return DataResponse.RESPONSE_OK; | ||
142 | } | ||
143 | else | ||
144 | { | ||
145 | return DataResponse.RESPONSE_ERROR; | ||
146 | } | ||
147 | } | ||
148 | |||
149 | /// <summary> | ||
150 | /// DEPRECIATED. Attempts to authenticate a region by comparing a shared secret. | ||
151 | /// </summary> | ||
152 | /// <param name="uuid">The UUID of the challenger</param> | ||
153 | /// <param name="handle">The attempted regionHandle of the challenger</param> | ||
154 | /// <param name="authkey">The secret</param> | ||
155 | /// <returns>Whether the secret and regionhandle match the database entry for UUID</returns> | ||
156 | public bool AuthenticateSim(libsecondlife.LLUUID uuid, ulong handle, string authkey) | ||
157 | { | ||
158 | bool throwHissyFit = false; // Should be true by 1.0 | ||
159 | |||
160 | if (throwHissyFit) | ||
161 | throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential."); | ||
162 | |||
163 | SimProfileData data = GetProfileByLLUUID(uuid); | ||
164 | |||
165 | return (handle == data.regionHandle && authkey == data.regionSecret); | ||
166 | } | ||
167 | |||
168 | /// <summary> | ||
169 | /// NOT YET FUNCTIONAL. Provides a cryptographic authentication of a region | ||
170 | /// </summary> | ||
171 | /// <remarks>This requires a security audit.</remarks> | ||
172 | /// <param name="uuid"></param> | ||
173 | /// <param name="handle"></param> | ||
174 | /// <param name="authhash"></param> | ||
175 | /// <param name="challenge"></param> | ||
176 | /// <returns></returns> | ||
177 | public bool AuthenticateSim(libsecondlife.LLUUID uuid, ulong handle, string authhash, string challenge) | ||
178 | { | ||
179 | System.Security.Cryptography.SHA512Managed HashProvider = new System.Security.Cryptography.SHA512Managed(); | ||
180 | System.Text.ASCIIEncoding TextProvider = new ASCIIEncoding(); | ||
181 | |||
182 | byte[] stream = TextProvider.GetBytes(uuid.ToStringHyphenated() + ":" + handle.ToString() + ":" + challenge); | ||
183 | byte[] hash = HashProvider.ComputeHash(stream); | ||
184 | |||
185 | return false; | ||
186 | } | ||
187 | |||
188 | public ReservationData GetReservationAtPoint(uint x, uint y) | ||
189 | { | ||
190 | return null; | ||
191 | } | ||
192 | } | ||
193 | |||
194 | |||
195 | } | ||
diff --git a/OpenSim/Framework/Data.SQLite/SQLiteManager.cs b/OpenSim/Framework/Data.SQLite/SQLiteManager.cs new file mode 100644 index 0000000..9689356 --- /dev/null +++ b/OpenSim/Framework/Data.SQLite/SQLiteManager.cs | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Data; | ||
32 | |||
33 | using System.Data.SQLite; | ||
34 | |||
35 | using OpenGrid.Framework.Data; | ||
36 | |||
37 | namespace OpenGrid.Framework.Data.SQLite | ||
38 | { | ||
39 | class SQLiteManager | ||
40 | { | ||
41 | IDbConnection dbcon; | ||
42 | |||
43 | /// <summary> | ||
44 | /// Initialises and creates a new SQLite connection and maintains it. | ||
45 | /// </summary> | ||
46 | /// <param name="hostname">The SQLite server being connected to</param> | ||
47 | /// <param name="database">The name of the SQLite database being used</param> | ||
48 | /// <param name="username">The username logging into the database</param> | ||
49 | /// <param name="password">The password for the user logging in</param> | ||
50 | /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param> | ||
51 | public SQLiteManager(string hostname, string database, string username, string password, string cpooling) | ||
52 | { | ||
53 | try | ||
54 | { | ||
55 | string connectionString = "URI=file:GridServerSqlite.db;"; | ||
56 | dbcon = new SQLiteConnection(connectionString); | ||
57 | |||
58 | dbcon.Open(); | ||
59 | } | ||
60 | catch (Exception e) | ||
61 | { | ||
62 | throw new Exception("Error initialising SQLite Database: " + e.ToString()); | ||
63 | } | ||
64 | } | ||
65 | |||
66 | /// <summary> | ||
67 | /// Shuts down the database connection | ||
68 | /// </summary> | ||
69 | public void Close() | ||
70 | { | ||
71 | dbcon.Close(); | ||
72 | dbcon = null; | ||
73 | } | ||
74 | |||
75 | /// <summary> | ||
76 | /// Runs a query with protection against SQL Injection by using parameterised input. | ||
77 | /// </summary> | ||
78 | /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param> | ||
79 | /// <param name="parameters">The parameters - index so that @y is indexed as 'y'</param> | ||
80 | /// <returns>A SQLite DB Command</returns> | ||
81 | public IDbCommand Query(string sql, Dictionary<string, string> parameters) | ||
82 | { | ||
83 | SQLiteCommand dbcommand = (SQLiteCommand)dbcon.CreateCommand(); | ||
84 | dbcommand.CommandText = sql; | ||
85 | foreach (KeyValuePair<string, string> param in parameters) | ||
86 | { | ||
87 | SQLiteParameter paramx = new SQLiteParameter(param.Key,param.Value); | ||
88 | dbcommand.Parameters.Add(paramx); | ||
89 | } | ||
90 | |||
91 | return (IDbCommand)dbcommand; | ||
92 | } | ||
93 | |||
94 | /// <summary> | ||
95 | /// Reads a region row from a database reader | ||
96 | /// </summary> | ||
97 | /// <param name="reader">An active database reader</param> | ||
98 | /// <returns>A region profile</returns> | ||
99 | public SimProfileData getRow(IDataReader reader) | ||
100 | { | ||
101 | SimProfileData retval = new SimProfileData(); | ||
102 | |||
103 | if (reader.Read()) | ||
104 | { | ||
105 | // Region Main | ||
106 | retval.regionHandle = (ulong)reader["regionHandle"]; | ||
107 | retval.regionName = (string)reader["regionName"]; | ||
108 | retval.UUID = new libsecondlife.LLUUID((string)reader["uuid"]); | ||
109 | |||
110 | // Secrets | ||
111 | retval.regionRecvKey = (string)reader["regionRecvKey"]; | ||
112 | retval.regionSecret = (string)reader["regionSecret"]; | ||
113 | retval.regionSendKey = (string)reader["regionSendKey"]; | ||
114 | |||
115 | // Region Server | ||
116 | retval.regionDataURI = (string)reader["regionDataURI"]; | ||
117 | retval.regionOnline = false; // Needs to be pinged before this can be set. | ||
118 | retval.serverIP = (string)reader["serverIP"]; | ||
119 | retval.serverPort = (uint)reader["serverPort"]; | ||
120 | retval.serverURI = (string)reader["serverURI"]; | ||
121 | |||
122 | // Location | ||
123 | retval.regionLocX = (uint)((int)reader["locX"]); | ||
124 | retval.regionLocY = (uint)((int)reader["locY"]); | ||
125 | retval.regionLocZ = (uint)((int)reader["locZ"]); | ||
126 | |||
127 | // Neighbours - 0 = No Override | ||
128 | retval.regionEastOverrideHandle = (ulong)reader["eastOverrideHandle"]; | ||
129 | retval.regionWestOverrideHandle = (ulong)reader["westOverrideHandle"]; | ||
130 | retval.regionSouthOverrideHandle = (ulong)reader["southOverrideHandle"]; | ||
131 | retval.regionNorthOverrideHandle = (ulong)reader["northOverrideHandle"]; | ||
132 | |||
133 | // Assets | ||
134 | retval.regionAssetURI = (string)reader["regionAssetURI"]; | ||
135 | retval.regionAssetRecvKey = (string)reader["regionAssetRecvKey"]; | ||
136 | retval.regionAssetSendKey = (string)reader["regionAssetSendKey"]; | ||
137 | |||
138 | // Userserver | ||
139 | retval.regionUserURI = (string)reader["regionUserURI"]; | ||
140 | retval.regionUserRecvKey = (string)reader["regionUserRecvKey"]; | ||
141 | retval.regionUserSendKey = (string)reader["regionUserSendKey"]; | ||
142 | } | ||
143 | else | ||
144 | { | ||
145 | throw new Exception("No rows to return"); | ||
146 | } | ||
147 | return retval; | ||
148 | } | ||
149 | |||
150 | /// <summary> | ||
151 | /// Inserts a new region into the database | ||
152 | /// </summary> | ||
153 | /// <param name="profile">The region to insert</param> | ||
154 | /// <returns>Success?</returns> | ||
155 | public bool insertRow(SimProfileData profile) | ||
156 | { | ||
157 | string sql = "REPLACE INTO regions VALUES (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, "; | ||
158 | sql += "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, "; | ||
159 | sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey) VALUES "; | ||
160 | |||
161 | sql += "(@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, "; | ||
162 | sql += "@serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, "; | ||
163 | sql += "@regionAssetSendKey, @regionUserURI, @regionUserRecvKey, @regionUserSendKey);"; | ||
164 | |||
165 | Dictionary<string, string> parameters = new Dictionary<string, string>(); | ||
166 | |||
167 | parameters["regionHandle"] = profile.regionHandle.ToString(); | ||
168 | parameters["regionName"] = profile.regionName; | ||
169 | parameters["uuid"] = profile.UUID.ToString(); | ||
170 | parameters["regionRecvKey"] = profile.regionRecvKey; | ||
171 | parameters["regionSendKey"] = profile.regionSendKey; | ||
172 | parameters["regionDataURI"] = profile.regionDataURI; | ||
173 | parameters["serverIP"] = profile.serverIP; | ||
174 | parameters["serverPort"] = profile.serverPort.ToString(); | ||
175 | parameters["serverURI"] = profile.serverURI; | ||
176 | parameters["locX"] = profile.regionLocX.ToString(); | ||
177 | parameters["locY"] = profile.regionLocY.ToString(); | ||
178 | parameters["locZ"] = profile.regionLocZ.ToString(); | ||
179 | parameters["eastOverrideHandle"] = profile.regionEastOverrideHandle.ToString(); | ||
180 | parameters["westOverrideHandle"] = profile.regionWestOverrideHandle.ToString(); | ||
181 | parameters["northOverrideHandle"] = profile.regionNorthOverrideHandle.ToString(); | ||
182 | parameters["southOverrideHandle"] = profile.regionSouthOverrideHandle.ToString(); | ||
183 | parameters["regionAssetURI"] = profile.regionAssetURI; | ||
184 | parameters["regionAssetRecvKey"] = profile.regionAssetRecvKey; | ||
185 | parameters["regionAssetSendKey"] = profile.regionAssetSendKey; | ||
186 | parameters["regionUserURI"] = profile.regionUserURI; | ||
187 | parameters["regionUserRecvKey"] = profile.regionUserRecvKey; | ||
188 | parameters["regionUserSendKey"] = profile.regionUserSendKey; | ||
189 | |||
190 | bool returnval = false; | ||
191 | |||
192 | try | ||
193 | { | ||
194 | IDbCommand result = Query(sql, parameters); | ||
195 | |||
196 | if (result.ExecuteNonQuery() == 1) | ||
197 | returnval = true; | ||
198 | |||
199 | result.Dispose(); | ||
200 | } | ||
201 | catch (Exception e) | ||
202 | { | ||
203 | return false; | ||
204 | } | ||
205 | |||
206 | return returnval; | ||
207 | } | ||
208 | } | ||
209 | } | ||
diff --git a/OpenSim/Framework/Data/GridData.cs b/OpenSim/Framework/Data/GridData.cs new file mode 100644 index 0000000..7f8fdaf --- /dev/null +++ b/OpenSim/Framework/Data/GridData.cs | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Framework.Data | ||
33 | { | ||
34 | public enum DataResponse | ||
35 | { | ||
36 | RESPONSE_OK, | ||
37 | RESPONSE_AUTHREQUIRED, | ||
38 | RESPONSE_INVALIDCREDENTIALS, | ||
39 | RESPONSE_ERROR | ||
40 | } | ||
41 | |||
42 | /// <summary> | ||
43 | /// A standard grid interface | ||
44 | /// </summary> | ||
45 | public interface IGridData | ||
46 | { | ||
47 | /// <summary> | ||
48 | /// Returns a sim profile from a regionHandle | ||
49 | /// </summary> | ||
50 | /// <param name="regionHandle">A 64bit Region Handle</param> | ||
51 | /// <returns>A simprofile</returns> | ||
52 | SimProfileData GetProfileByHandle(ulong regionHandle); | ||
53 | |||
54 | /// <summary> | ||
55 | /// Returns a sim profile from a UUID | ||
56 | /// </summary> | ||
57 | /// <param name="UUID">A 128bit UUID</param> | ||
58 | /// <returns>A sim profile</returns> | ||
59 | SimProfileData GetProfileByLLUUID(libsecondlife.LLUUID UUID); | ||
60 | |||
61 | /// <summary> | ||
62 | /// Returns all profiles within the specified range | ||
63 | /// </summary> | ||
64 | /// <param name="Xmin">Minimum sim coordinate (X)</param> | ||
65 | /// <param name="Ymin">Minimum sim coordinate (Y)</param> | ||
66 | /// <param name="Xmax">Maximum sim coordinate (X)</param> | ||
67 | /// <param name="Ymin">Maximum sim coordinate (Y)</param> | ||
68 | /// <returns>An array containing all the sim profiles in the specified range</returns> | ||
69 | SimProfileData[] GetProfilesInRange(uint Xmin, uint Ymin, uint Xmax, uint Ymax); | ||
70 | |||
71 | /// <summary> | ||
72 | /// Authenticates a sim by use of it's recv key. | ||
73 | /// WARNING: Insecure | ||
74 | /// </summary> | ||
75 | /// <param name="UUID">The UUID sent by the sim</param> | ||
76 | /// <param name="regionHandle">The regionhandle sent by the sim</param> | ||
77 | /// <param name="simrecvkey">The recieving key sent by the sim</param> | ||
78 | /// <returns>Whether the sim has been authenticated</returns> | ||
79 | bool AuthenticateSim(libsecondlife.LLUUID UUID, ulong regionHandle, string simrecvkey); | ||
80 | |||
81 | /// <summary> | ||
82 | /// Initialises the interface | ||
83 | /// </summary> | ||
84 | void Initialise(); | ||
85 | |||
86 | /// <summary> | ||
87 | /// Closes the interface | ||
88 | /// </summary> | ||
89 | void Close(); | ||
90 | |||
91 | /// <summary> | ||
92 | /// The plugin being loaded | ||
93 | /// </summary> | ||
94 | /// <returns>A string containing the plugin name</returns> | ||
95 | string getName(); | ||
96 | |||
97 | /// <summary> | ||
98 | /// The plugins version | ||
99 | /// </summary> | ||
100 | /// <returns>A string containing the plugin version</returns> | ||
101 | string getVersion(); | ||
102 | |||
103 | /// <summary> | ||
104 | /// Adds a new profile to the database | ||
105 | /// </summary> | ||
106 | /// <param name="profile">The profile to add</param> | ||
107 | /// <returns>RESPONSE_OK if successful, error if not.</returns> | ||
108 | DataResponse AddProfile(SimProfileData profile); | ||
109 | |||
110 | ReservationData GetReservationAtPoint(uint x, uint y); | ||
111 | |||
112 | } | ||
113 | } | ||
diff --git a/OpenSim/Framework/Data/ILogData.cs b/OpenSim/Framework/Data/ILogData.cs new file mode 100644 index 0000000..ccb3b84 --- /dev/null +++ b/OpenSim/Framework/Data/ILogData.cs | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Framework.Data | ||
33 | { | ||
34 | /// <summary> | ||
35 | /// The severity of an individual log message | ||
36 | /// </summary> | ||
37 | public enum LogSeverity : int | ||
38 | { | ||
39 | /// <summary> | ||
40 | /// Critical: systems failure | ||
41 | /// </summary> | ||
42 | CRITICAL = 1, | ||
43 | /// <summary> | ||
44 | /// Major: warning prior to systems failure | ||
45 | /// </summary> | ||
46 | MAJOR = 2, | ||
47 | /// <summary> | ||
48 | /// Medium: an individual non-critical task failed | ||
49 | /// </summary> | ||
50 | MEDIUM = 3, | ||
51 | /// <summary> | ||
52 | /// Low: Informational warning | ||
53 | /// </summary> | ||
54 | LOW = 4, | ||
55 | /// <summary> | ||
56 | /// Info: Information | ||
57 | /// </summary> | ||
58 | INFO = 5, | ||
59 | /// <summary> | ||
60 | /// Verbose: Debug Information | ||
61 | /// </summary> | ||
62 | VERBOSE = 6 | ||
63 | } | ||
64 | |||
65 | /// <summary> | ||
66 | /// An interface to a LogData storage system | ||
67 | /// </summary> | ||
68 | public interface ILogData | ||
69 | { | ||
70 | void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority,string logMessage); | ||
71 | /// <summary> | ||
72 | /// Initialises the interface | ||
73 | /// </summary> | ||
74 | void Initialise(); | ||
75 | |||
76 | /// <summary> | ||
77 | /// Closes the interface | ||
78 | /// </summary> | ||
79 | void Close(); | ||
80 | |||
81 | /// <summary> | ||
82 | /// The plugin being loaded | ||
83 | /// </summary> | ||
84 | /// <returns>A string containing the plugin name</returns> | ||
85 | string getName(); | ||
86 | |||
87 | /// <summary> | ||
88 | /// The plugins version | ||
89 | /// </summary> | ||
90 | /// <returns>A string containing the plugin version</returns> | ||
91 | string getVersion(); | ||
92 | } | ||
93 | |||
94 | } | ||
diff --git a/OpenSim/Framework/Data/IniConfig.cs b/OpenSim/Framework/Data/IniConfig.cs new file mode 100644 index 0000000..2f002c1 --- /dev/null +++ b/OpenSim/Framework/Data/IniConfig.cs | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.IO; | ||
32 | using System.Text.RegularExpressions; | ||
33 | |||
34 | /* | ||
35 | Taken from public code listing at by Alex Pinsker | ||
36 | http://alexpinsker.blogspot.com/2005/12/reading-ini-file-from-c_113432097333021549.html | ||
37 | */ | ||
38 | |||
39 | namespace OpenSim.Framework.Data | ||
40 | { | ||
41 | /// <summary> | ||
42 | /// Parse settings from ini-like files | ||
43 | /// </summary> | ||
44 | public class IniFile | ||
45 | { | ||
46 | static IniFile() | ||
47 | { | ||
48 | _iniKeyValuePatternRegex = new Regex( | ||
49 | @"((\s)*(?<Key>([^\=^\s^\n]+))[\s^\n]* | ||
50 | # key part (surrounding whitespace stripped) | ||
51 | \= | ||
52 | (\s)*(?<Value>([^\n^\s]+(\n){0,1}))) | ||
53 | # value part (surrounding whitespace stripped) | ||
54 | ", | ||
55 | RegexOptions.IgnorePatternWhitespace | | ||
56 | RegexOptions.Compiled | | ||
57 | RegexOptions.CultureInvariant); | ||
58 | } | ||
59 | static private Regex _iniKeyValuePatternRegex; | ||
60 | |||
61 | public IniFile(string iniFileName) | ||
62 | { | ||
63 | _iniFileName = iniFileName; | ||
64 | } | ||
65 | |||
66 | public string ParseFileReadValue(string key) | ||
67 | { | ||
68 | using (StreamReader reader = | ||
69 | new StreamReader(_iniFileName)) | ||
70 | { | ||
71 | do | ||
72 | { | ||
73 | string line = reader.ReadLine(); | ||
74 | Match match = | ||
75 | _iniKeyValuePatternRegex.Match(line); | ||
76 | if (match.Success) | ||
77 | { | ||
78 | string currentKey = | ||
79 | match.Groups["Key"].Value as string; | ||
80 | if (currentKey != null && | ||
81 | currentKey.Trim().CompareTo(key) == 0) | ||
82 | { | ||
83 | string value = | ||
84 | match.Groups["Value"].Value as string; | ||
85 | return value; | ||
86 | } | ||
87 | } | ||
88 | |||
89 | } | ||
90 | while (reader.Peek() != -1); | ||
91 | } | ||
92 | return null; | ||
93 | } | ||
94 | |||
95 | public string IniFileName | ||
96 | { | ||
97 | get { return _iniFileName; } | ||
98 | } private string _iniFileName; | ||
99 | } | ||
100 | } | ||
diff --git a/OpenSim/Framework/Data/InventoryData.cs b/OpenSim/Framework/Data/InventoryData.cs new file mode 100644 index 0000000..8a3a664 --- /dev/null +++ b/OpenSim/Framework/Data/InventoryData.cs | |||
@@ -0,0 +1,187 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Data | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// Inventory Item - contains all the properties associated with an individual inventory piece. | ||
37 | /// </summary> | ||
38 | public class InventoryItemBase | ||
39 | { | ||
40 | /// <summary> | ||
41 | /// A UUID containing the ID for the inventory item itself | ||
42 | /// </summary> | ||
43 | public LLUUID inventoryID; | ||
44 | /// <summary> | ||
45 | /// The UUID of the associated asset on the asset server | ||
46 | /// </summary> | ||
47 | public LLUUID assetID; | ||
48 | /// <summary> | ||
49 | /// This is an enumerated value determining the type of asset (eg Notecard, Sound, Object, etc) | ||
50 | /// </summary> | ||
51 | public int type; | ||
52 | /// <summary> | ||
53 | /// The folder this item is contained in (NULL_KEY = Inventory Root) | ||
54 | /// </summary> | ||
55 | public LLUUID parentFolderID; | ||
56 | /// <summary> | ||
57 | /// The owner of this inventory item | ||
58 | /// </summary> | ||
59 | public LLUUID avatarID; | ||
60 | /// <summary> | ||
61 | /// The name of the inventory item (must be less than 64 characters) | ||
62 | /// </summary> | ||
63 | public string inventoryName; | ||
64 | /// <summary> | ||
65 | /// The description of the inventory item (must be less than 64 characters) | ||
66 | /// </summary> | ||
67 | public string inventoryDescription; | ||
68 | /// <summary> | ||
69 | /// A mask containing the permissions for the next owner (cannot be enforced) | ||
70 | /// </summary> | ||
71 | public uint inventoryNextPermissions; | ||
72 | /// <summary> | ||
73 | /// A mask containing permissions for the current owner (cannot be enforced) | ||
74 | /// </summary> | ||
75 | public uint inventoryCurrentPermissions; | ||
76 | } | ||
77 | |||
78 | /// <summary> | ||
79 | /// A Class for folders which contain users inventory | ||
80 | /// </summary> | ||
81 | public class InventoryFolderBase | ||
82 | { | ||
83 | /// <summary> | ||
84 | /// The name of the folder (64 characters or less) | ||
85 | /// </summary> | ||
86 | public string name; | ||
87 | /// <summary> | ||
88 | /// The agent who's inventory this is contained by | ||
89 | /// </summary> | ||
90 | public LLUUID agentID; | ||
91 | /// <summary> | ||
92 | /// The folder this folder is contained in (NULL_KEY for root) | ||
93 | /// </summary> | ||
94 | public LLUUID parentID; | ||
95 | /// <summary> | ||
96 | /// The UUID for this folder | ||
97 | /// </summary> | ||
98 | public LLUUID folderID; | ||
99 | } | ||
100 | |||
101 | /// <summary> | ||
102 | /// An interface for accessing inventory data from a storage server | ||
103 | /// </summary> | ||
104 | public interface IInventoryData | ||
105 | { | ||
106 | /// <summary> | ||
107 | /// Initialises the interface | ||
108 | /// </summary> | ||
109 | void Initialise(); | ||
110 | |||
111 | /// <summary> | ||
112 | /// Closes the interface | ||
113 | /// </summary> | ||
114 | void Close(); | ||
115 | |||
116 | /// <summary> | ||
117 | /// The plugin being loaded | ||
118 | /// </summary> | ||
119 | /// <returns>A string containing the plugin name</returns> | ||
120 | string getName(); | ||
121 | |||
122 | /// <summary> | ||
123 | /// The plugins version | ||
124 | /// </summary> | ||
125 | /// <returns>A string containing the plugin version</returns> | ||
126 | string getVersion(); | ||
127 | |||
128 | /// <summary> | ||
129 | /// Returns a list of inventory items contained within the specified folder | ||
130 | /// </summary> | ||
131 | /// <param name="folderID">The UUID of the target folder</param> | ||
132 | /// <returns>A List of InventoryItemBase items</returns> | ||
133 | List<InventoryItemBase> getInventoryInFolder(LLUUID folderID); | ||
134 | |||
135 | /// <summary> | ||
136 | /// Returns a list of folders in the users inventory root. | ||
137 | /// </summary> | ||
138 | /// <param name="user">The UUID of the user who is having inventory being returned</param> | ||
139 | /// <returns>A list of folders</returns> | ||
140 | List<InventoryFolderBase> getUserRootFolders(LLUUID user); | ||
141 | |||
142 | /// <summary> | ||
143 | /// Returns a list of inventory folders contained in the folder 'parentID' | ||
144 | /// </summary> | ||
145 | /// <param name="parentID">The folder to get subfolders for</param> | ||
146 | /// <returns>A list of inventory folders</returns> | ||
147 | List<InventoryFolderBase> getInventoryFolders(LLUUID parentID); | ||
148 | |||
149 | /// <summary> | ||
150 | /// Returns an inventory item by its UUID | ||
151 | /// </summary> | ||
152 | /// <param name="item">The UUID of the item to be returned</param> | ||
153 | /// <returns>A class containing item information</returns> | ||
154 | InventoryItemBase getInventoryItem(LLUUID item); | ||
155 | |||
156 | /// <summary> | ||
157 | /// Returns a specified inventory folder by its UUID | ||
158 | /// </summary> | ||
159 | /// <param name="folder">The UUID of the folder to be returned</param> | ||
160 | /// <returns>A class containing folder information</returns> | ||
161 | InventoryFolderBase getInventoryFolder(LLUUID folder); | ||
162 | |||
163 | /// <summary> | ||
164 | /// Creates a new inventory item based on item | ||
165 | /// </summary> | ||
166 | /// <param name="item">The item to be created</param> | ||
167 | void addInventoryItem(InventoryItemBase item); | ||
168 | |||
169 | /// <summary> | ||
170 | /// Updates an inventory item with item (updates based on ID) | ||
171 | /// </summary> | ||
172 | /// <param name="item">The updated item</param> | ||
173 | void updateInventoryItem(InventoryItemBase item); | ||
174 | |||
175 | /// <summary> | ||
176 | /// Adds a new folder specified by folder | ||
177 | /// </summary> | ||
178 | /// <param name="folder">The inventory folder</param> | ||
179 | void addInventoryFolder(InventoryFolderBase folder); | ||
180 | |||
181 | /// <summary> | ||
182 | /// Updates a folder based on its ID with folder | ||
183 | /// </summary> | ||
184 | /// <param name="folder">The inventory folder</param> | ||
185 | void updateInventoryFolder(InventoryFolderBase folder); | ||
186 | } | ||
187 | } | ||
diff --git a/OpenSim/Framework/Data/OpenSim.Framework.Data.csproj b/OpenSim/Framework/Data/OpenSim.Framework.Data.csproj new file mode 100644 index 0000000..dcafbcd --- /dev/null +++ b/OpenSim/Framework/Data/OpenSim.Framework.Data.csproj | |||
@@ -0,0 +1,116 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{36B72A9B-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Data</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Data</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Data" > | ||
70 | <HintPath>System.Data.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Xml" > | ||
74 | <HintPath>System.Xml.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | </ItemGroup> | ||
80 | <ItemGroup> | ||
81 | <Compile Include="GridData.cs"> | ||
82 | <SubType>Code</SubType> | ||
83 | </Compile> | ||
84 | <Compile Include="ILogData.cs"> | ||
85 | <SubType>Code</SubType> | ||
86 | </Compile> | ||
87 | <Compile Include="IniConfig.cs"> | ||
88 | <SubType>Code</SubType> | ||
89 | </Compile> | ||
90 | <Compile Include="InventoryData.cs"> | ||
91 | <SubType>Code</SubType> | ||
92 | </Compile> | ||
93 | <Compile Include="ReservationData.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="SimProfileData.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | <Compile Include="UserData.cs"> | ||
100 | <SubType>Code</SubType> | ||
101 | </Compile> | ||
102 | <Compile Include="UserProfileData.cs"> | ||
103 | <SubType>Code</SubType> | ||
104 | </Compile> | ||
105 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
106 | <SubType>Code</SubType> | ||
107 | </Compile> | ||
108 | </ItemGroup> | ||
109 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
110 | <PropertyGroup> | ||
111 | <PreBuildEvent> | ||
112 | </PreBuildEvent> | ||
113 | <PostBuildEvent> | ||
114 | </PostBuildEvent> | ||
115 | </PropertyGroup> | ||
116 | </Project> | ||
diff --git a/OpenSim/Framework/Data/OpenSim.Framework.Data.csproj.user b/OpenSim/Framework/Data/OpenSim.Framework.Data.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Data/OpenSim.Framework.Data.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Data/Properties/AssemblyInfo.cs b/OpenSim/Framework/Data/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1446673 --- /dev/null +++ b/OpenSim/Framework/Data/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenGrid.Framework.Data")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenGrid.Framework.Data")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("3a711c34-b0c0-4264-b0fe-f366eabf9d7b")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/Data/ReservationData.cs b/OpenSim/Framework/Data/ReservationData.cs new file mode 100644 index 0000000..f404ebd --- /dev/null +++ b/OpenSim/Framework/Data/ReservationData.cs | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | using libsecondlife; | ||
33 | |||
34 | namespace OpenSim.Framework.Data | ||
35 | { | ||
36 | public class ReservationData | ||
37 | { | ||
38 | public LLUUID userUUID = new LLUUID(); | ||
39 | public int reservationMinX = 0; | ||
40 | public int reservationMinY = 0; | ||
41 | public int reservationMaxX = 65536; | ||
42 | public int reservationMaxY = 65536; | ||
43 | |||
44 | public string reservationName = ""; | ||
45 | public string reservationCompany = ""; | ||
46 | public bool status = true; | ||
47 | |||
48 | public string gridSendKey = ""; | ||
49 | public string gridRecvKey = ""; | ||
50 | } | ||
51 | } | ||
diff --git a/OpenSim/Framework/Data/SimProfileData.cs b/OpenSim/Framework/Data/SimProfileData.cs new file mode 100644 index 0000000..201aa01 --- /dev/null +++ b/OpenSim/Framework/Data/SimProfileData.cs | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Framework.Data | ||
33 | { | ||
34 | /// <summary> | ||
35 | /// A class which contains information known to the grid server about a region | ||
36 | /// </summary> | ||
37 | public class SimProfileData | ||
38 | { | ||
39 | /// <summary> | ||
40 | /// The name of the region | ||
41 | /// </summary> | ||
42 | public string regionName = ""; | ||
43 | |||
44 | /// <summary> | ||
45 | /// A 64-bit number combining map position into a (mostly) unique ID | ||
46 | /// </summary> | ||
47 | public ulong regionHandle; | ||
48 | |||
49 | /// <summary> | ||
50 | /// OGS/OpenSim Specific ID for a region | ||
51 | /// </summary> | ||
52 | public libsecondlife.LLUUID UUID; | ||
53 | |||
54 | /// <summary> | ||
55 | /// Coordinates of the region | ||
56 | /// </summary> | ||
57 | public uint regionLocX; | ||
58 | public uint regionLocY; | ||
59 | public uint regionLocZ; // Reserved (round-robin, layers, etc) | ||
60 | |||
61 | /// <summary> | ||
62 | /// Authentication secrets | ||
63 | /// </summary> | ||
64 | /// <remarks>Not very secure, needs improvement.</remarks> | ||
65 | public string regionSendKey = ""; | ||
66 | public string regionRecvKey = ""; | ||
67 | public string regionSecret = ""; | ||
68 | |||
69 | /// <summary> | ||
70 | /// Whether the region is online | ||
71 | /// </summary> | ||
72 | public bool regionOnline; | ||
73 | |||
74 | /// <summary> | ||
75 | /// Information about the server that the region is currently hosted on | ||
76 | /// </summary> | ||
77 | public string serverIP = ""; | ||
78 | public uint serverPort; | ||
79 | public string serverURI = ""; | ||
80 | |||
81 | /// <summary> | ||
82 | /// Set of optional overrides. Can be used to create non-eulicidean spaces. | ||
83 | /// </summary> | ||
84 | public ulong regionNorthOverrideHandle; | ||
85 | public ulong regionSouthOverrideHandle; | ||
86 | public ulong regionEastOverrideHandle; | ||
87 | public ulong regionWestOverrideHandle; | ||
88 | |||
89 | /// <summary> | ||
90 | /// Optional: URI Location of the region database | ||
91 | /// </summary> | ||
92 | /// <remarks>Used for floating sim pools where the region data is not nessecarily coupled to a specific server</remarks> | ||
93 | public string regionDataURI = ""; | ||
94 | |||
95 | /// <summary> | ||
96 | /// Region Asset Details | ||
97 | /// </summary> | ||
98 | public string regionAssetURI = ""; | ||
99 | public string regionAssetSendKey = ""; | ||
100 | public string regionAssetRecvKey = ""; | ||
101 | |||
102 | /// <summary> | ||
103 | /// Region Userserver Details | ||
104 | /// </summary> | ||
105 | public string regionUserURI = ""; | ||
106 | public string regionUserSendKey = ""; | ||
107 | public string regionUserRecvKey = ""; | ||
108 | |||
109 | /// <summary> | ||
110 | /// Region Map Texture Asset | ||
111 | /// </summary> | ||
112 | public libsecondlife.LLUUID regionMapTextureID = new libsecondlife.LLUUID("00000000-0000-0000-9999-000000000006"); | ||
113 | } | ||
114 | } | ||
diff --git a/OpenSim/Framework/Data/UserData.cs b/OpenSim/Framework/Data/UserData.cs new file mode 100644 index 0000000..2e15b47 --- /dev/null +++ b/OpenSim/Framework/Data/UserData.cs | |||
@@ -0,0 +1,131 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Data | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// An interface for connecting to user storage servers. | ||
37 | /// </summary> | ||
38 | public interface IUserData | ||
39 | { | ||
40 | /// <summary> | ||
41 | /// Returns a user profile from a database via their UUID | ||
42 | /// </summary> | ||
43 | /// <param name="user">The accounts UUID</param> | ||
44 | /// <returns>The user data profile</returns> | ||
45 | UserProfileData getUserByUUID(LLUUID user); | ||
46 | |||
47 | /// <summary> | ||
48 | /// Returns a users profile by searching their username | ||
49 | /// </summary> | ||
50 | /// <param name="name">The users username</param> | ||
51 | /// <returns>The user data profile</returns> | ||
52 | UserProfileData getUserByName(string name); | ||
53 | |||
54 | /// <summary> | ||
55 | /// Returns a users profile by searching their username parts | ||
56 | /// </summary> | ||
57 | /// <param name="fname">Account firstname</param> | ||
58 | /// <param name="lname">Account lastname</param> | ||
59 | /// <returns>The user data profile</returns> | ||
60 | UserProfileData getUserByName(string fname, string lname); | ||
61 | |||
62 | /// <summary> | ||
63 | /// Returns the current agent for a user searching by it's UUID | ||
64 | /// </summary> | ||
65 | /// <param name="user">The users UUID</param> | ||
66 | /// <returns>The current agent session</returns> | ||
67 | UserAgentData getAgentByUUID(LLUUID user); | ||
68 | |||
69 | /// <summary> | ||
70 | /// Returns the current session agent for a user searching by username | ||
71 | /// </summary> | ||
72 | /// <param name="name">The users account name</param> | ||
73 | /// <returns>The current agent session</returns> | ||
74 | UserAgentData getAgentByName(string name); | ||
75 | |||
76 | /// <summary> | ||
77 | /// Returns the current session agent for a user searching by username parts | ||
78 | /// </summary> | ||
79 | /// <param name="fname">The users first account name</param> | ||
80 | /// <param name="lname">The users account surname</param> | ||
81 | /// <returns>The current agent session</returns> | ||
82 | UserAgentData getAgentByName(string fname, string lname); | ||
83 | |||
84 | /// <summary> | ||
85 | /// Adds a new User profile to the database | ||
86 | /// </summary> | ||
87 | /// <param name="user">UserProfile to add</param> | ||
88 | void addNewUserProfile(UserProfileData user); | ||
89 | |||
90 | /// <summary> | ||
91 | /// Adds a new agent to the database | ||
92 | /// </summary> | ||
93 | /// <param name="agent">The agent to add</param> | ||
94 | void addNewUserAgent(UserAgentData agent); | ||
95 | |||
96 | /// <summary> | ||
97 | /// Attempts to move currency units between accounts (NOT RELIABLE / TRUSTWORTHY. DONT TRY RUN YOUR OWN CURRENCY EXCHANGE WITH REAL VALUES) | ||
98 | /// </summary> | ||
99 | /// <param name="from">The account to transfer from</param> | ||
100 | /// <param name="to">The account to transfer to</param> | ||
101 | /// <param name="amount">The amount to transfer</param> | ||
102 | /// <returns>Successful?</returns> | ||
103 | bool moneyTransferRequest(LLUUID from, LLUUID to, uint amount); | ||
104 | |||
105 | /// <summary> | ||
106 | /// Attempts to move inventory between accounts, if inventory is copyable it will be copied into the target account. | ||
107 | /// </summary> | ||
108 | /// <param name="from">User to transfer from</param> | ||
109 | /// <param name="to">User to transfer to</param> | ||
110 | /// <param name="inventory">Specified inventory item</param> | ||
111 | /// <returns>Successful?</returns> | ||
112 | bool inventoryTransferRequest(LLUUID from, LLUUID to, LLUUID inventory); | ||
113 | |||
114 | /// <summary> | ||
115 | /// Returns the plugin version | ||
116 | /// </summary> | ||
117 | /// <returns>Plugin version in MAJOR.MINOR.REVISION.BUILD format</returns> | ||
118 | string getVersion(); | ||
119 | |||
120 | /// <summary> | ||
121 | /// Returns the plugin name | ||
122 | /// </summary> | ||
123 | /// <returns>Plugin name, eg MySQL User Provider</returns> | ||
124 | string getName(); | ||
125 | |||
126 | /// <summary> | ||
127 | /// Initialises the plugin (artificial constructor) | ||
128 | /// </summary> | ||
129 | void Initialise(); | ||
130 | } | ||
131 | } | ||
diff --git a/OpenSim/Framework/Data/UserProfileData.cs b/OpenSim/Framework/Data/UserProfileData.cs new file mode 100644 index 0000000..00d422d --- /dev/null +++ b/OpenSim/Framework/Data/UserProfileData.cs | |||
@@ -0,0 +1,182 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Data | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// Information about a particular user known to the userserver | ||
37 | /// </summary> | ||
38 | public class UserProfileData | ||
39 | { | ||
40 | /// <summary> | ||
41 | /// The ID value for this user | ||
42 | /// </summary> | ||
43 | public LLUUID UUID; | ||
44 | |||
45 | /// <summary> | ||
46 | /// The first component of a users account name | ||
47 | /// </summary> | ||
48 | public string username; | ||
49 | /// <summary> | ||
50 | /// The second component of a users account name | ||
51 | /// </summary> | ||
52 | public string surname; | ||
53 | |||
54 | /// <summary> | ||
55 | /// A salted hash containing the users password, in the format md5(md5(password) + ":" + salt) | ||
56 | /// </summary> | ||
57 | /// <remarks>This is double MD5'd because the client sends an unsalted MD5 to the loginserver</remarks> | ||
58 | public string passwordHash; | ||
59 | /// <summary> | ||
60 | /// The salt used for the users hash, should be 32 bytes or longer | ||
61 | /// </summary> | ||
62 | public string passwordSalt; | ||
63 | |||
64 | /// <summary> | ||
65 | /// The regionhandle of the users preffered home region. If multiple sims occupy the same spot, the grid may decide which region the user logs into | ||
66 | /// </summary> | ||
67 | public ulong homeRegion; | ||
68 | /// <summary> | ||
69 | /// The coordinates inside the region of the home location | ||
70 | /// </summary> | ||
71 | public LLVector3 homeLocation; | ||
72 | /// <summary> | ||
73 | /// Where the user will be looking when they rez. | ||
74 | /// </summary> | ||
75 | public LLVector3 homeLookAt; | ||
76 | |||
77 | /// <summary> | ||
78 | /// A UNIX Timestamp (seconds since epoch) for the users creation | ||
79 | /// </summary> | ||
80 | public int created; | ||
81 | /// <summary> | ||
82 | /// A UNIX Timestamp for the users last login date / time | ||
83 | /// </summary> | ||
84 | public int lastLogin; | ||
85 | |||
86 | /// <summary> | ||
87 | /// A URI to the users inventory server, used for foreigners and large grids | ||
88 | /// </summary> | ||
89 | public string userInventoryURI; | ||
90 | /// <summary> | ||
91 | /// A URI to the users asset server, used for foreigners and large grids. | ||
92 | /// </summary> | ||
93 | public string userAssetURI; | ||
94 | |||
95 | /// <summary> | ||
96 | /// A uint mask containing the "I can do" fields of the users profile | ||
97 | /// </summary> | ||
98 | public uint profileCanDoMask; | ||
99 | /// <summary> | ||
100 | /// A uint mask containing the "I want to do" part of the users profile | ||
101 | /// </summary> | ||
102 | public uint profileWantDoMask; // Profile window "I want to" mask | ||
103 | |||
104 | /// <summary> | ||
105 | /// The about text listed in a users profile. | ||
106 | /// </summary> | ||
107 | public string profileAboutText; | ||
108 | /// <summary> | ||
109 | /// The first life about text listed in a users profile | ||
110 | /// </summary> | ||
111 | public string profileFirstText; | ||
112 | |||
113 | /// <summary> | ||
114 | /// The profile image for an avatar stored on the asset server | ||
115 | /// </summary> | ||
116 | public LLUUID profileImage; | ||
117 | /// <summary> | ||
118 | /// The profile image for the users first life tab | ||
119 | /// </summary> | ||
120 | public LLUUID profileFirstImage; | ||
121 | /// <summary> | ||
122 | /// The users last registered agent (filled in on the user server) | ||
123 | /// </summary> | ||
124 | public UserAgentData currentAgent; | ||
125 | } | ||
126 | |||
127 | /// <summary> | ||
128 | /// Information about a users session | ||
129 | /// </summary> | ||
130 | public class UserAgentData | ||
131 | { | ||
132 | /// <summary> | ||
133 | /// The UUID of the users avatar (not the agent!) | ||
134 | /// </summary> | ||
135 | public LLUUID UUID; | ||
136 | /// <summary> | ||
137 | /// The IP address of the user | ||
138 | /// </summary> | ||
139 | public string agentIP; | ||
140 | /// <summary> | ||
141 | /// The port of the user | ||
142 | /// </summary> | ||
143 | public uint agentPort; | ||
144 | /// <summary> | ||
145 | /// Is the user online? | ||
146 | /// </summary> | ||
147 | public bool agentOnline; | ||
148 | /// <summary> | ||
149 | /// The session ID for the user (also the agent ID) | ||
150 | /// </summary> | ||
151 | public LLUUID sessionID; | ||
152 | /// <summary> | ||
153 | /// The "secure" session ID for the user | ||
154 | /// </summary> | ||
155 | /// <remarks>Not very secure. Dont rely on it for anything more than Linden Lab does.</remarks> | ||
156 | public LLUUID secureSessionID; | ||
157 | /// <summary> | ||
158 | /// The region the user logged into initially | ||
159 | /// </summary> | ||
160 | public LLUUID regionID; | ||
161 | /// <summary> | ||
162 | /// A unix timestamp from when the user logged in | ||
163 | /// </summary> | ||
164 | public int loginTime; | ||
165 | /// <summary> | ||
166 | /// When this agent expired and logged out, 0 if still online | ||
167 | /// </summary> | ||
168 | public int logoutTime; | ||
169 | /// <summary> | ||
170 | /// Current region the user is logged into | ||
171 | /// </summary> | ||
172 | public LLUUID currentRegion; | ||
173 | /// <summary> | ||
174 | /// Region handle of the current region the user is in | ||
175 | /// </summary> | ||
176 | public ulong currentHandle; | ||
177 | /// <summary> | ||
178 | /// The position of the user within the region | ||
179 | /// </summary> | ||
180 | public LLVector3 currentPos; | ||
181 | } | ||
182 | } | ||
diff --git a/OpenSim/Framework/General/AgentInventory.cs b/OpenSim/Framework/General/AgentInventory.cs new file mode 100644 index 0000000..fbf4d23 --- /dev/null +++ b/OpenSim/Framework/General/AgentInventory.cs | |||
@@ -0,0 +1,267 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using OpenSim.Framework.Types; | ||
34 | using OpenSim.Framework.Utilities; | ||
35 | |||
36 | namespace OpenSim.Framework.Inventory | ||
37 | { | ||
38 | public class AgentInventory | ||
39 | { | ||
40 | //Holds the local copy of Inventory info for a agent | ||
41 | public Dictionary<LLUUID, InventoryFolder> InventoryFolders; | ||
42 | public Dictionary<LLUUID, InventoryItem> InventoryItems; | ||
43 | public InventoryFolder InventoryRoot; | ||
44 | public int LastCached; //maybe used by opensim app, time this was last stored/compared to user server | ||
45 | public LLUUID AgentID; | ||
46 | public AvatarWearable[] Wearables; | ||
47 | |||
48 | public AgentInventory() | ||
49 | { | ||
50 | InventoryFolders = new Dictionary<LLUUID, InventoryFolder>(); | ||
51 | InventoryItems = new Dictionary<LLUUID, InventoryItem>(); | ||
52 | this.Initialise(); | ||
53 | } | ||
54 | |||
55 | public virtual void Initialise() | ||
56 | { | ||
57 | Wearables = new AvatarWearable[13]; //should be 12 of these | ||
58 | for (int i = 0; i < 13; i++) | ||
59 | { | ||
60 | Wearables[i] = new AvatarWearable(); | ||
61 | } | ||
62 | |||
63 | } | ||
64 | |||
65 | public bool CreateNewFolder(LLUUID folderID, ushort type) | ||
66 | { | ||
67 | InventoryFolder Folder = new InventoryFolder(); | ||
68 | Folder.FolderID = folderID; | ||
69 | Folder.OwnerID = this.AgentID; | ||
70 | Folder.DefaultType = type; | ||
71 | this.InventoryFolders.Add(Folder.FolderID, Folder); | ||
72 | return (true); | ||
73 | } | ||
74 | |||
75 | public void CreateRootFolder(LLUUID newAgentID, bool createTextures) | ||
76 | { | ||
77 | this.AgentID = newAgentID; | ||
78 | InventoryRoot = new InventoryFolder(); | ||
79 | InventoryRoot.FolderID = LLUUID.Random(); | ||
80 | InventoryRoot.ParentID = new LLUUID(); | ||
81 | InventoryRoot.Version = 1; | ||
82 | InventoryRoot.DefaultType = 8; | ||
83 | InventoryRoot.OwnerID = this.AgentID; | ||
84 | InventoryRoot.FolderName = "My Inventory"; | ||
85 | InventoryFolders.Add(InventoryRoot.FolderID, InventoryRoot); | ||
86 | InventoryRoot.OwnerID = this.AgentID; | ||
87 | if (createTextures) | ||
88 | { | ||
89 | this.CreateNewFolder(LLUUID.Random(), 0, "Textures", InventoryRoot.FolderID); | ||
90 | } | ||
91 | } | ||
92 | |||
93 | public bool CreateNewFolder(LLUUID folderID, ushort type, string folderName) | ||
94 | { | ||
95 | InventoryFolder Folder = new InventoryFolder(); | ||
96 | Folder.FolderID = folderID; | ||
97 | Folder.OwnerID = this.AgentID; | ||
98 | Folder.DefaultType = type; | ||
99 | Folder.FolderName = folderName; | ||
100 | this.InventoryFolders.Add(Folder.FolderID, Folder); | ||
101 | |||
102 | return (true); | ||
103 | } | ||
104 | |||
105 | public bool CreateNewFolder(LLUUID folderID, ushort type, string folderName, LLUUID parent) | ||
106 | { | ||
107 | if (!this.InventoryFolders.ContainsKey(folderID)) | ||
108 | { | ||
109 | System.Console.WriteLine("creating new folder called " + folderName + " in agents inventory"); | ||
110 | InventoryFolder Folder = new InventoryFolder(); | ||
111 | Folder.FolderID = folderID; | ||
112 | Folder.OwnerID = this.AgentID; | ||
113 | Folder.DefaultType = type; | ||
114 | Folder.FolderName = folderName; | ||
115 | Folder.ParentID = parent; | ||
116 | this.InventoryFolders.Add(Folder.FolderID, Folder); | ||
117 | } | ||
118 | |||
119 | return (true); | ||
120 | } | ||
121 | |||
122 | public bool HasFolder(LLUUID folderID) | ||
123 | { | ||
124 | if (this.InventoryFolders.ContainsKey(folderID)) | ||
125 | { | ||
126 | return true; | ||
127 | } | ||
128 | return false; | ||
129 | } | ||
130 | |||
131 | public LLUUID GetFolderID(string folderName) | ||
132 | { | ||
133 | foreach (InventoryFolder inv in this.InventoryFolders.Values) | ||
134 | { | ||
135 | if (inv.FolderName == folderName) | ||
136 | { | ||
137 | return inv.FolderID; | ||
138 | } | ||
139 | } | ||
140 | |||
141 | return LLUUID.Zero; | ||
142 | } | ||
143 | |||
144 | public bool UpdateItemAsset(LLUUID itemID, AssetBase asset) | ||
145 | { | ||
146 | if(this.InventoryItems.ContainsKey(itemID)) | ||
147 | { | ||
148 | InventoryItem Item = this.InventoryItems[itemID]; | ||
149 | Item.AssetID = asset.FullID; | ||
150 | System.Console.WriteLine("updated inventory item " + itemID.ToStringHyphenated() + " so it now is set to asset " + asset.FullID.ToStringHyphenated()); | ||
151 | //TODO need to update the rest of the info | ||
152 | } | ||
153 | return true; | ||
154 | } | ||
155 | |||
156 | public bool UpdateItemDetails(LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet) | ||
157 | { | ||
158 | System.Console.WriteLine("updating inventory item details"); | ||
159 | if (this.InventoryItems.ContainsKey(itemID)) | ||
160 | { | ||
161 | System.Console.WriteLine("changing name to "+ Util.FieldToString(packet.Name)); | ||
162 | InventoryItem Item = this.InventoryItems[itemID]; | ||
163 | Item.Name = Util.FieldToString(packet.Name); | ||
164 | System.Console.WriteLine("updated inventory item " + itemID.ToStringHyphenated()); | ||
165 | //TODO need to update the rest of the info | ||
166 | } | ||
167 | return true; | ||
168 | } | ||
169 | |||
170 | public LLUUID AddToInventory(LLUUID folderID, AssetBase asset) | ||
171 | { | ||
172 | if (this.InventoryFolders.ContainsKey(folderID)) | ||
173 | { | ||
174 | LLUUID NewItemID = LLUUID.Random(); | ||
175 | |||
176 | InventoryItem Item = new InventoryItem(); | ||
177 | Item.FolderID = folderID; | ||
178 | Item.OwnerID = AgentID; | ||
179 | Item.AssetID = asset.FullID; | ||
180 | Item.ItemID = NewItemID; | ||
181 | Item.Type = asset.Type; | ||
182 | Item.Name = asset.Name; | ||
183 | Item.Description = asset.Description; | ||
184 | Item.InvType = asset.InvType; | ||
185 | this.InventoryItems.Add(Item.ItemID, Item); | ||
186 | InventoryFolder Folder = InventoryFolders[Item.FolderID]; | ||
187 | Folder.Items.Add(Item); | ||
188 | return (Item.ItemID); | ||
189 | } | ||
190 | else | ||
191 | { | ||
192 | return (null); | ||
193 | } | ||
194 | } | ||
195 | |||
196 | public bool DeleteFromInventory(LLUUID itemID) | ||
197 | { | ||
198 | bool res = false; | ||
199 | if (this.InventoryItems.ContainsKey(itemID)) | ||
200 | { | ||
201 | InventoryItem item = this.InventoryItems[itemID]; | ||
202 | this.InventoryItems.Remove(itemID); | ||
203 | foreach (InventoryFolder fold in InventoryFolders.Values) | ||
204 | { | ||
205 | if (fold.Items.Contains(item)) | ||
206 | { | ||
207 | fold.Items.Remove(item); | ||
208 | break; | ||
209 | } | ||
210 | } | ||
211 | res = true; | ||
212 | |||
213 | } | ||
214 | return res; | ||
215 | } | ||
216 | } | ||
217 | |||
218 | public class InventoryFolder | ||
219 | { | ||
220 | public List<InventoryItem> Items; | ||
221 | //public List<InventoryFolder> Subfolders; | ||
222 | public LLUUID FolderID; | ||
223 | public LLUUID OwnerID; | ||
224 | public LLUUID ParentID = LLUUID.Zero; | ||
225 | public string FolderName; | ||
226 | public ushort DefaultType; | ||
227 | public ushort Version; | ||
228 | |||
229 | public InventoryFolder() | ||
230 | { | ||
231 | Items = new List<InventoryItem>(); | ||
232 | //Subfolders = new List<InventoryFolder>(); | ||
233 | } | ||
234 | |||
235 | } | ||
236 | |||
237 | public class InventoryItem | ||
238 | { | ||
239 | public LLUUID FolderID; | ||
240 | public LLUUID OwnerID; | ||
241 | public LLUUID ItemID; | ||
242 | public LLUUID AssetID; | ||
243 | public LLUUID CreatorID; | ||
244 | public sbyte InvType; | ||
245 | public sbyte Type; | ||
246 | public string Name =""; | ||
247 | public string Description; | ||
248 | |||
249 | public InventoryItem() | ||
250 | { | ||
251 | this.CreatorID = LLUUID.Zero; | ||
252 | } | ||
253 | |||
254 | public string ExportString() | ||
255 | { | ||
256 | string typ = "notecard"; | ||
257 | string result = ""; | ||
258 | result += "\tinv_object\t0\n\t{\n"; | ||
259 | result += "\t\tobj_id\t%s\n"; | ||
260 | result += "\t\tparent_id\t"+ ItemID.ToString() +"\n"; | ||
261 | result += "\t\ttype\t"+ typ +"\n"; | ||
262 | result += "\t\tname\t" + Name+"|\n"; | ||
263 | result += "\t}\n"; | ||
264 | return result; | ||
265 | } | ||
266 | } | ||
267 | } | ||
diff --git a/OpenSim/Framework/General/AuthenticateSessionBase.cs b/OpenSim/Framework/General/AuthenticateSessionBase.cs new file mode 100644 index 0000000..73dd3e2 --- /dev/null +++ b/OpenSim/Framework/General/AuthenticateSessionBase.cs | |||
@@ -0,0 +1,132 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using OpenSim.Framework.Interfaces; | ||
33 | using OpenSim.Framework.Types; | ||
34 | |||
35 | namespace OpenSim.Framework | ||
36 | { | ||
37 | public class AuthenticateSessionsBase | ||
38 | { | ||
39 | public Dictionary<uint, AgentCircuitData> AgentCircuits = new Dictionary<uint, AgentCircuitData>(); | ||
40 | |||
41 | public AuthenticateSessionsBase() | ||
42 | { | ||
43 | |||
44 | } | ||
45 | |||
46 | public virtual AuthenticateResponse AuthenticateSession(LLUUID sessionID, LLUUID agentID, uint circuitcode) | ||
47 | { | ||
48 | AgentCircuitData validcircuit = null; | ||
49 | if (this.AgentCircuits.ContainsKey(circuitcode)) | ||
50 | { | ||
51 | validcircuit = this.AgentCircuits[circuitcode]; | ||
52 | } | ||
53 | AuthenticateResponse user = new AuthenticateResponse(); | ||
54 | if (validcircuit == null) | ||
55 | { | ||
56 | //don't have this circuit code in our list | ||
57 | user.Authorised = false; | ||
58 | return (user); | ||
59 | } | ||
60 | |||
61 | if ((sessionID == validcircuit.SessionID) && (agentID == validcircuit.AgentID)) | ||
62 | { | ||
63 | user.Authorised = true; | ||
64 | user.LoginInfo = new Login(); | ||
65 | user.LoginInfo.Agent = agentID; | ||
66 | user.LoginInfo.Session = sessionID; | ||
67 | user.LoginInfo.SecureSession = validcircuit.SecureSessionID; | ||
68 | user.LoginInfo.First = validcircuit.firstname; | ||
69 | user.LoginInfo.Last = validcircuit.lastname; | ||
70 | user.LoginInfo.InventoryFolder = validcircuit.InventoryFolder; | ||
71 | user.LoginInfo.BaseFolder = validcircuit.BaseFolder; | ||
72 | } | ||
73 | else | ||
74 | { | ||
75 | // Invalid | ||
76 | user.Authorised = false; | ||
77 | } | ||
78 | |||
79 | return (user); | ||
80 | } | ||
81 | |||
82 | public virtual void AddNewCircuit(uint circuitCode, AgentCircuitData agentData) | ||
83 | { | ||
84 | if (this.AgentCircuits.ContainsKey(circuitCode)) | ||
85 | { | ||
86 | this.AgentCircuits[circuitCode] = agentData; | ||
87 | } | ||
88 | else | ||
89 | { | ||
90 | this.AgentCircuits.Add(circuitCode, agentData); | ||
91 | } | ||
92 | } | ||
93 | |||
94 | public LLVector3 GetPosition(uint circuitCode) | ||
95 | { | ||
96 | LLVector3 vec = new LLVector3(); | ||
97 | if (this.AgentCircuits.ContainsKey(circuitCode)) | ||
98 | { | ||
99 | vec = this.AgentCircuits[circuitCode].startpos; | ||
100 | } | ||
101 | return vec; | ||
102 | } | ||
103 | |||
104 | public void UpdateAgentData(AgentCircuitData agentData) | ||
105 | { | ||
106 | if (this.AgentCircuits.ContainsKey((uint)agentData.circuitcode)) | ||
107 | { | ||
108 | this.AgentCircuits[(uint)agentData.circuitcode].firstname = agentData.firstname; | ||
109 | this.AgentCircuits[(uint)agentData.circuitcode].lastname = agentData.lastname; | ||
110 | this.AgentCircuits[(uint)agentData.circuitcode].startpos = agentData.startpos; | ||
111 | // Console.WriteLine("update user start pos is " + agentData.startpos.X + " , " + agentData.startpos.Y + " , " + agentData.startpos.Z); | ||
112 | } | ||
113 | } | ||
114 | |||
115 | public void UpdateAgentChildStatus(uint circuitcode, bool childstatus) | ||
116 | { | ||
117 | if (this.AgentCircuits.ContainsKey(circuitcode)) | ||
118 | { | ||
119 | this.AgentCircuits[circuitcode].child = childstatus; | ||
120 | } | ||
121 | } | ||
122 | |||
123 | public bool GetAgentChildStatus(uint circuitcode) | ||
124 | { | ||
125 | if (this.AgentCircuits.ContainsKey(circuitcode)) | ||
126 | { | ||
127 | return this.AgentCircuits[circuitcode].child; | ||
128 | } | ||
129 | return false; | ||
130 | } | ||
131 | } | ||
132 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/General/BlockingQueue.cs b/OpenSim/Framework/General/BlockingQueue.cs new file mode 100644 index 0000000..667b8d8 --- /dev/null +++ b/OpenSim/Framework/General/BlockingQueue.cs | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Threading; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | |||
33 | namespace OpenSim.Framework.Utilities | ||
34 | { | ||
35 | public class BlockingQueue<T> | ||
36 | { | ||
37 | private Queue<T> _queue = new Queue<T>(); | ||
38 | private object _queueSync = new object(); | ||
39 | |||
40 | public void Enqueue(T value) | ||
41 | { | ||
42 | lock (_queueSync) | ||
43 | { | ||
44 | _queue.Enqueue(value); | ||
45 | Monitor.Pulse(_queueSync); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | public T Dequeue() | ||
50 | { | ||
51 | lock (_queueSync) | ||
52 | { | ||
53 | if (_queue.Count < 1) | ||
54 | Monitor.Wait(_queueSync); | ||
55 | |||
56 | return _queue.Dequeue(); | ||
57 | } | ||
58 | } | ||
59 | } | ||
60 | } | ||
diff --git a/OpenSim/Framework/General/IRegionCommsListener.cs b/OpenSim/Framework/General/IRegionCommsListener.cs new file mode 100644 index 0000000..0e80941 --- /dev/null +++ b/OpenSim/Framework/General/IRegionCommsListener.cs | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Interfaces; | ||
32 | using OpenSim.Framework.Types; | ||
33 | |||
34 | namespace OpenSim.Framework | ||
35 | { | ||
36 | public delegate void ExpectUserDelegate(ulong regionHandle, AgentCircuitData agent); | ||
37 | public delegate void UpdateNeighbours(List<RegionInfo> neighbours); | ||
38 | public delegate void AgentCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position); | ||
39 | |||
40 | public interface IRegionCommsListener | ||
41 | { | ||
42 | event ExpectUserDelegate OnExpectUser; | ||
43 | event GenericCall2 OnExpectChildAgent; | ||
44 | event AgentCrossing OnAvatarCrossingIntoRegion; | ||
45 | event UpdateNeighbours OnNeighboursUpdate; | ||
46 | } | ||
47 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/AuthenticateResponse.cs b/OpenSim/Framework/General/Interfaces/AuthenticateResponse.cs new file mode 100644 index 0000000..462e2c5 --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/AuthenticateResponse.cs | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Net; | ||
32 | using System.Net.Sockets; | ||
33 | using System.IO; | ||
34 | using libsecondlife; | ||
35 | using OpenSim; | ||
36 | using OpenSim.Framework.Types; | ||
37 | |||
38 | namespace OpenSim.Framework.Interfaces | ||
39 | { | ||
40 | public class AuthenticateResponse | ||
41 | { | ||
42 | public bool Authorised; | ||
43 | public Login LoginInfo; | ||
44 | |||
45 | public AuthenticateResponse() | ||
46 | { | ||
47 | |||
48 | } | ||
49 | |||
50 | } | ||
51 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/Config/IGenericConfig.cs b/OpenSim/Framework/General/Interfaces/Config/IGenericConfig.cs new file mode 100644 index 0000000..13980fe --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/Config/IGenericConfig.cs | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Framework.Interfaces | ||
33 | { | ||
34 | public interface IGenericConfig | ||
35 | { | ||
36 | void LoadData(); | ||
37 | string GetAttribute(string attributeName); | ||
38 | bool SetAttribute(string attributeName, string attributeValue); | ||
39 | void Commit(); | ||
40 | void Close(); | ||
41 | } | ||
42 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/Config/IGridConfig.cs b/OpenSim/Framework/General/Interfaces/Config/IGridConfig.cs new file mode 100644 index 0000000..0fafe1a --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/Config/IGridConfig.cs | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.IO; | ||
32 | using libsecondlife; | ||
33 | //using OpenSim.world; | ||
34 | |||
35 | namespace OpenSim.Framework.Interfaces | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// </summary> | ||
39 | |||
40 | |||
41 | public abstract class GridConfig | ||
42 | { | ||
43 | public string GridOwner; | ||
44 | public string DefaultStartupMsg; | ||
45 | public string DefaultAssetServer; | ||
46 | public string AssetSendKey; | ||
47 | public string AssetRecvKey; | ||
48 | public string DefaultUserServer; | ||
49 | public string UserSendKey; | ||
50 | public string UserRecvKey; | ||
51 | public string SimSendKey; | ||
52 | public string SimRecvKey; | ||
53 | |||
54 | |||
55 | public abstract void InitConfig(); | ||
56 | |||
57 | } | ||
58 | |||
59 | public interface IGridConfig | ||
60 | { | ||
61 | GridConfig GetConfigObject(); | ||
62 | } | ||
63 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/Config/IUserConfig.cs b/OpenSim/Framework/General/Interfaces/Config/IUserConfig.cs new file mode 100644 index 0000000..2f4b340 --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/Config/IUserConfig.cs | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.IO; | ||
32 | using libsecondlife; | ||
33 | //using OpenSim.world; | ||
34 | |||
35 | namespace OpenSim.Framework.Interfaces | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// </summary> | ||
39 | |||
40 | |||
41 | public abstract class UserConfig | ||
42 | { | ||
43 | public string DefaultStartupMsg; | ||
44 | public string GridServerURL; | ||
45 | public string GridSendKey; | ||
46 | public string GridRecvKey; | ||
47 | |||
48 | |||
49 | public abstract void InitConfig(); | ||
50 | |||
51 | } | ||
52 | |||
53 | public interface IUserConfig | ||
54 | { | ||
55 | UserConfig GetConfigObject(); | ||
56 | } | ||
57 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/IAssetServer.cs b/OpenSim/Framework/General/Interfaces/IAssetServer.cs new file mode 100644 index 0000000..826392d --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/IAssetServer.cs | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Net; | ||
30 | using System.Net.Sockets; | ||
31 | using System.IO; | ||
32 | using System.Threading; | ||
33 | using libsecondlife; | ||
34 | using OpenSim.Framework.Types; | ||
35 | |||
36 | namespace OpenSim.Framework.Interfaces | ||
37 | { | ||
38 | /// <summary> | ||
39 | /// Description of IAssetServer. | ||
40 | /// </summary> | ||
41 | |||
42 | public interface IAssetServer | ||
43 | { | ||
44 | void SetReceiver(IAssetReceiver receiver); | ||
45 | void RequestAsset(LLUUID assetID, bool isTexture); | ||
46 | void UpdateAsset(AssetBase asset); | ||
47 | void UploadNewAsset(AssetBase asset); | ||
48 | void SetServerInfo(string ServerUrl, string ServerKey); | ||
49 | void Close(); | ||
50 | } | ||
51 | |||
52 | // could change to delegate? | ||
53 | public interface IAssetReceiver | ||
54 | { | ||
55 | void AssetReceived(AssetBase asset, bool IsTexture); | ||
56 | void AssetNotFound(AssetBase asset); | ||
57 | } | ||
58 | |||
59 | public interface IAssetPlugin | ||
60 | { | ||
61 | IAssetServer GetAssetServer(); | ||
62 | } | ||
63 | |||
64 | public struct ARequest | ||
65 | { | ||
66 | public LLUUID AssetID; | ||
67 | public bool IsTexture; | ||
68 | } | ||
69 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs new file mode 100644 index 0000000..009648c --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs | |||
@@ -0,0 +1,160 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Inventory; | ||
32 | using libsecondlife; | ||
33 | using libsecondlife.Packets; | ||
34 | using OpenSim.Framework.Types; | ||
35 | |||
36 | namespace OpenSim.Framework.Interfaces | ||
37 | { | ||
38 | public delegate void ChatFromViewer(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID); | ||
39 | public delegate void RezObject(AssetBase primAsset, LLVector3 pos); | ||
40 | public delegate void ModifyTerrain(float height, float seconds, byte size, byte action, float north, float west); | ||
41 | public delegate void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam); | ||
42 | public delegate void StartAnim(LLUUID animID, int seq); | ||
43 | public delegate void LinkObjects(uint parent, List<uint> children); | ||
44 | public delegate void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY); | ||
45 | public delegate void TeleportLocationRequest(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags); | ||
46 | |||
47 | public delegate void GenericCall(IClientAPI remoteClient); | ||
48 | public delegate void GenericCall2(); | ||
49 | public delegate void GenericCall3(Packet packet); // really don't want to be passing packets in these events, so this is very temporary. | ||
50 | public delegate void GenericCall4(Packet packet, IClientAPI remoteClient); | ||
51 | public delegate void GenericCall5(IClientAPI remoteClient, bool status); | ||
52 | public delegate void GenericCall6(LLUUID uid); | ||
53 | |||
54 | public delegate void UpdateShape(uint localID, ObjectShapePacket.ObjectDataBlock shapeBlock); | ||
55 | public delegate void ObjectSelect(uint localID, IClientAPI remoteClient); | ||
56 | public delegate void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient); | ||
57 | public delegate void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient); | ||
58 | public delegate void UpdateVector(uint localID, LLVector3 pos, IClientAPI remoteClient); | ||
59 | public delegate void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient); | ||
60 | public delegate void StatusChange(bool status); | ||
61 | public delegate void NewAvatar(IClientAPI remoteClient, LLUUID agentID, bool status); | ||
62 | public delegate void UpdateAgent(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation); | ||
63 | public delegate void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 grapPos, IClientAPI remoteClient); | ||
64 | |||
65 | public delegate void ParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client); | ||
66 | public delegate void ParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client); | ||
67 | public delegate void ParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client); | ||
68 | public delegate void ParcelPropertiesUpdateRequest(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client); // NOTETOSELFremove the packet part | ||
69 | |||
70 | public delegate void EstateOwnerMessageRequest(EstateOwnerMessagePacket packet, IClientAPI remote_client); | ||
71 | |||
72 | public interface IClientAPI | ||
73 | { | ||
74 | event ChatFromViewer OnChatFromViewer; | ||
75 | event RezObject OnRezObject; | ||
76 | event ModifyTerrain OnModifyTerrain; | ||
77 | event SetAppearance OnSetAppearance; | ||
78 | event StartAnim OnStartAnim; | ||
79 | event LinkObjects OnLinkObjects; | ||
80 | event RequestMapBlocks OnRequestMapBlocks; | ||
81 | event TeleportLocationRequest OnTeleportLocationRequest; | ||
82 | |||
83 | event GenericCall4 OnDeRezObject; | ||
84 | event GenericCall OnRegionHandShakeReply; | ||
85 | event GenericCall OnRequestWearables; | ||
86 | event GenericCall2 OnCompleteMovementToRegion; | ||
87 | event UpdateAgent OnAgentUpdate; | ||
88 | event GenericCall OnRequestAvatarsData; | ||
89 | event GenericCall4 OnAddPrim; | ||
90 | event UpdateVector OnGrapObject; | ||
91 | event ObjectSelect OnDeGrapObject; | ||
92 | event MoveObject OnGrapUpdate; | ||
93 | |||
94 | event UpdateShape OnUpdatePrimShape; | ||
95 | event ObjectSelect OnObjectSelect; | ||
96 | event UpdatePrimFlags OnUpdatePrimFlags; | ||
97 | event UpdatePrimTexture OnUpdatePrimTexture; | ||
98 | event UpdateVector OnUpdatePrimPosition; | ||
99 | event UpdatePrimRotation OnUpdatePrimRotation; | ||
100 | event UpdateVector OnUpdatePrimScale; | ||
101 | event StatusChange OnChildAgentStatus; | ||
102 | event GenericCall2 OnStopMovement; | ||
103 | event NewAvatar OnNewAvatar; | ||
104 | event GenericCall6 OnRemoveAvatar; | ||
105 | |||
106 | event ParcelPropertiesRequest OnParcelPropertiesRequest; | ||
107 | event ParcelDivideRequest OnParcelDivideRequest; | ||
108 | event ParcelJoinRequest OnParcelJoinRequest; | ||
109 | event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest; | ||
110 | |||
111 | event EstateOwnerMessageRequest OnEstateOwnerMessage; | ||
112 | |||
113 | LLVector3 StartPos | ||
114 | { | ||
115 | get; | ||
116 | set; | ||
117 | } | ||
118 | |||
119 | LLUUID AgentId | ||
120 | { | ||
121 | get; | ||
122 | } | ||
123 | |||
124 | string FirstName | ||
125 | { | ||
126 | get; | ||
127 | } | ||
128 | |||
129 | string LastName | ||
130 | { | ||
131 | get; | ||
132 | } | ||
133 | |||
134 | void OutPacket(Packet newPack); | ||
135 | void SendWearables(AvatarWearable[] wearables); | ||
136 | void SendRegionHandshake(RegionInfo regionInfo); | ||
137 | void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID); | ||
138 | void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID); | ||
139 | void SendLayerData(float[] map); | ||
140 | void SendLayerData(int px, int py, float[] map); | ||
141 | void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look); | ||
142 | void InformClientOfNeighbour(ulong neighbourHandle, System.Net.IPAddress neighbourIP, ushort neighbourPort); | ||
143 | AgentCircuitData RequestClientInfo(); | ||
144 | void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, System.Net.IPAddress newRegionIP, ushort newRegionPort); | ||
145 | void SendMapBlock(List<MapBlockData> mapBlocks); | ||
146 | void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags); | ||
147 | void SendRegionTeleport(ulong regionHandle, byte simAccess, string ipAddress, ushort ipPort, uint locationID, uint flags); | ||
148 | void SendTeleportCancel(); | ||
149 | void SendTeleportLocationStart(); | ||
150 | void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance); | ||
151 | |||
152 | void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos, byte[] textureEntry); | ||
153 | void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity); | ||
154 | |||
155 | void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint); | ||
156 | void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID , uint flags); | ||
157 | void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags); | ||
158 | void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation); | ||
159 | } | ||
160 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/ILocalStorage.cs b/OpenSim/Framework/General/Interfaces/ILocalStorage.cs new file mode 100644 index 0000000..4987d10 --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/ILocalStorage.cs | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using libsecondlife; | ||
31 | using OpenSim.Framework.Types; | ||
32 | |||
33 | namespace OpenSim.Framework.Interfaces | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// ILocalStorage. Really hacked together right now needs cleaning up | ||
37 | /// </summary> | ||
38 | public interface ILocalStorage | ||
39 | { | ||
40 | void Initialise(string datastore); | ||
41 | |||
42 | void StorePrim(PrimData prim); | ||
43 | void RemovePrim(LLUUID primID); | ||
44 | void LoadPrimitives(ILocalStorageReceiver receiver); | ||
45 | |||
46 | float[] LoadWorld(); | ||
47 | void SaveMap(float[] heightmap); | ||
48 | |||
49 | void SaveParcels(ParcelData[] parcels); | ||
50 | void SaveParcel(ParcelData parcel); | ||
51 | void RemoveParcel(ParcelData parcel); | ||
52 | void RemoveAllParcels(); | ||
53 | void LoadParcels(ILocalStorageParcelReceiver recv); | ||
54 | |||
55 | void ShutDown(); | ||
56 | } | ||
57 | |||
58 | public interface ILocalStorageReceiver | ||
59 | { | ||
60 | void PrimFromStorage(PrimData prim); | ||
61 | } | ||
62 | |||
63 | public interface ILocalStorageParcelReceiver | ||
64 | { | ||
65 | void ParcelFromStorage(ParcelData data); | ||
66 | void NoParcelDataFromStorage(); | ||
67 | } | ||
68 | } | ||
69 | |||
diff --git a/OpenSim/Framework/General/Interfaces/IUserServer.cs b/OpenSim/Framework/General/Interfaces/IUserServer.cs new file mode 100644 index 0000000..c6e2223 --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/IUserServer.cs | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Inventory; | ||
32 | using libsecondlife; | ||
33 | |||
34 | namespace OpenSim.Framework.Interfaces | ||
35 | { | ||
36 | public interface IUserServer | ||
37 | { | ||
38 | AgentInventory RequestAgentsInventory(LLUUID agentID); | ||
39 | void SetServerInfo(string ServerUrl, string SendKey, string RecvKey); | ||
40 | bool UpdateAgentsInventory(LLUUID agentID, AgentInventory inventory); | ||
41 | } | ||
42 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/IWorld.cs b/OpenSim/Framework/General/Interfaces/IWorld.cs new file mode 100644 index 0000000..4857417 --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/IWorld.cs | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using OpenSim.Framework.Types; | ||
33 | |||
34 | namespace OpenSim.Framework.Interfaces | ||
35 | { | ||
36 | public interface IWorld | ||
37 | { | ||
38 | void AddNewClient(IClientAPI remoteClient, LLUUID agentID, bool child); | ||
39 | void RemoveClient(LLUUID agentID); | ||
40 | |||
41 | RegionInfo RegionInfo { get; } | ||
42 | object SyncRoot { get; } | ||
43 | uint NextLocalId { get; } | ||
44 | } | ||
45 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/Scripting/IScriptAPI.cs b/OpenSim/Framework/General/Interfaces/Scripting/IScriptAPI.cs new file mode 100644 index 0000000..0c1627b --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/Scripting/IScriptAPI.cs | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Types; | ||
32 | |||
33 | using libsecondlife; | ||
34 | namespace OpenSim.Framework.Interfaces | ||
35 | { | ||
36 | public interface IScriptAPI | ||
37 | { | ||
38 | LLVector3 GetEntityPosition(uint localID); | ||
39 | void SetEntityPosition(uint localID, float x, float y, float z); | ||
40 | uint GetRandomAvatarID(); | ||
41 | } | ||
42 | } | ||
diff --git a/OpenSim/Framework/General/Interfaces/Scripting/IScriptEngine.cs b/OpenSim/Framework/General/Interfaces/Scripting/IScriptEngine.cs new file mode 100644 index 0000000..ca50be0 --- /dev/null +++ b/OpenSim/Framework/General/Interfaces/Scripting/IScriptEngine.cs | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Framework.Interfaces | ||
33 | { | ||
34 | public interface IScriptEngine | ||
35 | { | ||
36 | bool Init(IScriptAPI api); | ||
37 | string GetName(); | ||
38 | void LoadScript(string script, string scriptName, uint entityID); | ||
39 | void OnFrame(); | ||
40 | } | ||
41 | } | ||
diff --git a/OpenSim/Framework/General/LLSDHelpers.cs b/OpenSim/Framework/General/LLSDHelpers.cs new file mode 100644 index 0000000..051520c --- /dev/null +++ b/OpenSim/Framework/General/LLSDHelpers.cs | |||
@@ -0,0 +1,246 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using System.Text; | ||
5 | using System.IO; | ||
6 | using System.Xml; | ||
7 | using libsecondlife; | ||
8 | |||
9 | namespace OpenSim.Framework | ||
10 | { | ||
11 | public class LLSDHelpers | ||
12 | { | ||
13 | public static string SerialiseLLSDReply(object obj) | ||
14 | { | ||
15 | StringWriter sw = new StringWriter(); | ||
16 | XmlTextWriter writer = new XmlTextWriter(sw); | ||
17 | writer.Formatting = Formatting.None; | ||
18 | writer.WriteStartElement(String.Empty, "llsd", String.Empty); | ||
19 | LLSDHelpers.SerializeLLSDType(writer, obj); | ||
20 | writer.WriteEndElement(); | ||
21 | writer.Close(); | ||
22 | return sw.ToString(); | ||
23 | } | ||
24 | |||
25 | public static void SerializeLLSDType(XmlTextWriter writer, object obj) | ||
26 | { | ||
27 | Type myType = obj.GetType(); | ||
28 | LLSDType[] llsdattributes = (LLSDType[])myType.GetCustomAttributes(typeof(LLSDType), false); | ||
29 | if (llsdattributes.Length > 0) | ||
30 | { | ||
31 | switch (llsdattributes[0].ObjectType) | ||
32 | { | ||
33 | case "MAP": | ||
34 | writer.WriteStartElement(String.Empty, "map", String.Empty); | ||
35 | System.Reflection.FieldInfo[] fields = myType.GetFields(); | ||
36 | for (int i = 0; i < fields.Length; i++) | ||
37 | { | ||
38 | object fieldValue = fields[i].GetValue(obj); | ||
39 | LLSDType[] fieldAttributes = (LLSDType[])fieldValue.GetType().GetCustomAttributes(typeof(LLSDType), false); | ||
40 | if (fieldAttributes.Length > 0) | ||
41 | { | ||
42 | writer.WriteStartElement(String.Empty, "key", String.Empty); | ||
43 | writer.WriteString(fields[i].Name); | ||
44 | writer.WriteEndElement(); | ||
45 | SerializeLLSDType(writer, fieldValue); | ||
46 | } | ||
47 | else | ||
48 | { | ||
49 | //Console.WriteLine("LLSD field name" + fields[i].Name + " , " + fields[i].GetValue(obj).GetType()); | ||
50 | writer.WriteStartElement(String.Empty, "key", String.Empty); | ||
51 | writer.WriteString(fields[i].Name); | ||
52 | writer.WriteEndElement(); | ||
53 | LLSD.LLSDWriteOne(writer, fieldValue); | ||
54 | } | ||
55 | } | ||
56 | writer.WriteEndElement(); | ||
57 | break; | ||
58 | case "ARRAY": | ||
59 | // LLSDArray arrayObject = obj as LLSDArray; | ||
60 | // ArrayList a = arrayObject.Array; | ||
61 | ArrayList a = (ArrayList)obj.GetType().GetField("Array").GetValue(obj); | ||
62 | writer.WriteStartElement(String.Empty, "array", String.Empty); | ||
63 | foreach (object item in a) | ||
64 | { | ||
65 | SerializeLLSDType(writer, item); | ||
66 | } | ||
67 | writer.WriteEndElement(); | ||
68 | break; | ||
69 | } | ||
70 | } | ||
71 | else | ||
72 | { | ||
73 | LLSD.LLSDWriteOne(writer, obj); | ||
74 | } | ||
75 | } | ||
76 | |||
77 | public static object DeserialiseLLSDMap(Hashtable llsd, object obj) | ||
78 | { | ||
79 | Type myType = obj.GetType(); | ||
80 | LLSDType[] llsdattributes = (LLSDType[])myType.GetCustomAttributes(typeof(LLSDType), false); | ||
81 | if (llsdattributes.Length > 0) | ||
82 | { | ||
83 | switch (llsdattributes[0].ObjectType) | ||
84 | { | ||
85 | case "MAP": | ||
86 | IDictionaryEnumerator enumerator = llsd.GetEnumerator(); | ||
87 | while (enumerator.MoveNext()) | ||
88 | { | ||
89 | System.Reflection.FieldInfo field = myType.GetField((string)enumerator.Key); | ||
90 | if (field != null) | ||
91 | { | ||
92 | if (enumerator.Value is Hashtable) | ||
93 | { | ||
94 | object fieldValue = field.GetValue(obj); | ||
95 | DeserialiseLLSDMap((Hashtable) enumerator.Value, fieldValue); | ||
96 | } | ||
97 | else if (enumerator.Value is ArrayList) | ||
98 | { | ||
99 | object fieldValue = field.GetValue(obj); | ||
100 | fieldValue.GetType().GetField("Array").SetValue(fieldValue, enumerator.Value); | ||
101 | //TODO | ||
102 | // the LLSD map/array types in the array need to be deserialised | ||
103 | // but first we need to know the right class to deserialise them into. | ||
104 | } | ||
105 | else | ||
106 | { | ||
107 | field.SetValue(obj, enumerator.Value); | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | break; | ||
112 | } | ||
113 | } | ||
114 | return obj; | ||
115 | } | ||
116 | } | ||
117 | |||
118 | [LLSDType("MAP")] | ||
119 | public class LLSDMapLayerResponse | ||
120 | { | ||
121 | public LLSDMapRequest AgentData = new LLSDMapRequest(); | ||
122 | public LLSDArray LayerData = new LLSDArray(); | ||
123 | |||
124 | public LLSDMapLayerResponse() | ||
125 | { | ||
126 | |||
127 | } | ||
128 | } | ||
129 | |||
130 | [LLSDType("MAP")] | ||
131 | public class LLSDCapsDetails | ||
132 | { | ||
133 | public string MapLayer = ""; | ||
134 | public string NewFileAgentInventory = ""; | ||
135 | //public string EventQueueGet = ""; | ||
136 | |||
137 | public LLSDCapsDetails() | ||
138 | { | ||
139 | |||
140 | } | ||
141 | } | ||
142 | |||
143 | [LLSDType("MAP")] | ||
144 | public class LLSDMapLayer | ||
145 | { | ||
146 | public int Left = 0; | ||
147 | public int Right = 0; | ||
148 | public int Top = 0; | ||
149 | public int Bottom = 0; | ||
150 | public LLUUID ImageID = LLUUID.Zero; | ||
151 | |||
152 | public LLSDMapLayer() | ||
153 | { | ||
154 | |||
155 | } | ||
156 | } | ||
157 | |||
158 | [LLSDType("ARRAY")] | ||
159 | public class LLSDArray | ||
160 | { | ||
161 | public ArrayList Array = new ArrayList(); | ||
162 | |||
163 | public LLSDArray() | ||
164 | { | ||
165 | |||
166 | } | ||
167 | } | ||
168 | |||
169 | [LLSDType("MAP")] | ||
170 | public class LLSDMapRequest | ||
171 | { | ||
172 | public int Flags = 0; | ||
173 | |||
174 | public LLSDMapRequest() | ||
175 | { | ||
176 | |||
177 | } | ||
178 | } | ||
179 | |||
180 | [LLSDType("MAP")] | ||
181 | public class LLSDUploadReply | ||
182 | { | ||
183 | public string new_asset = ""; | ||
184 | public LLUUID new_inventory_item = LLUUID.Zero; | ||
185 | public string state = ""; | ||
186 | |||
187 | public LLSDUploadReply() | ||
188 | { | ||
189 | |||
190 | } | ||
191 | } | ||
192 | |||
193 | [LLSDType("MAP")] | ||
194 | public class LLSDCapEvent | ||
195 | { | ||
196 | public int id = 0; | ||
197 | public LLSDArray events = new LLSDArray(); | ||
198 | |||
199 | public LLSDCapEvent() | ||
200 | { | ||
201 | |||
202 | } | ||
203 | } | ||
204 | |||
205 | [LLSDType("MAP")] | ||
206 | public class LLSDEmpty | ||
207 | { | ||
208 | public LLSDEmpty() | ||
209 | { | ||
210 | |||
211 | } | ||
212 | } | ||
213 | |||
214 | [LLSDType("MAP")] | ||
215 | public class LLSDTest | ||
216 | { | ||
217 | public int Test1 = 20; | ||
218 | public int Test2 = 10; | ||
219 | |||
220 | public LLSDTest() | ||
221 | { | ||
222 | |||
223 | } | ||
224 | } | ||
225 | |||
226 | |||
227 | [AttributeUsage(AttributeTargets.Class)] | ||
228 | public class LLSDType : Attribute | ||
229 | { | ||
230 | private string myType; | ||
231 | |||
232 | public LLSDType(string type) | ||
233 | { | ||
234 | myType = type; | ||
235 | |||
236 | } | ||
237 | |||
238 | public string ObjectType | ||
239 | { | ||
240 | get | ||
241 | { | ||
242 | return myType; | ||
243 | } | ||
244 | } | ||
245 | } | ||
246 | } | ||
diff --git a/OpenSim/Framework/General/Logger.cs b/OpenSim/Framework/General/Logger.cs new file mode 100644 index 0000000..e7eaa03 --- /dev/null +++ b/OpenSim/Framework/General/Logger.cs | |||
@@ -0,0 +1,85 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace OpenSim.Framework | ||
6 | { | ||
7 | public class Logger | ||
8 | { | ||
9 | public static Logger Instance = new Logger( false ); | ||
10 | |||
11 | public delegate void LoggerMethodDelegate(); | ||
12 | private delegate bool LoggerDelegate( LoggerMethodDelegate whatToDo ); | ||
13 | |||
14 | |||
15 | private LoggerDelegate m_delegate; | ||
16 | |||
17 | public Logger( bool log ) | ||
18 | { | ||
19 | if( log ) | ||
20 | { | ||
21 | m_delegate = CatchAndLog; | ||
22 | } | ||
23 | else | ||
24 | { | ||
25 | m_delegate = DontCatch; | ||
26 | } | ||
27 | } | ||
28 | |||
29 | public bool Wrap( LoggerMethodDelegate whatToDo ) | ||
30 | { | ||
31 | return m_delegate( whatToDo ); | ||
32 | } | ||
33 | |||
34 | |||
35 | private bool CatchAndLog(LoggerMethodDelegate whatToDo) | ||
36 | { | ||
37 | try | ||
38 | { | ||
39 | whatToDo(); | ||
40 | return true; | ||
41 | } | ||
42 | catch(Exception e) | ||
43 | { | ||
44 | System.Console.WriteLine( "Exception logged!!! Woah!!!!" ); | ||
45 | return false; | ||
46 | } | ||
47 | } | ||
48 | |||
49 | private bool DontCatch(LoggerMethodDelegate whatToDo) | ||
50 | { | ||
51 | whatToDo(); | ||
52 | return true; | ||
53 | } | ||
54 | |||
55 | public class LoggerExample | ||
56 | { | ||
57 | public void TryWrap() | ||
58 | { | ||
59 | // This will log and ignore | ||
60 | Logger log = new Logger(true); | ||
61 | |||
62 | log.Wrap(delegate() | ||
63 | { | ||
64 | Int16.Parse("waa!"); | ||
65 | }); | ||
66 | |||
67 | // This will throw; | ||
68 | try | ||
69 | { | ||
70 | |||
71 | log = new Logger(false); | ||
72 | |||
73 | log.Wrap(delegate() | ||
74 | { | ||
75 | Int16.Parse("waa!"); | ||
76 | }); | ||
77 | } | ||
78 | catch | ||
79 | { | ||
80 | System.Console.WriteLine("Example barfed!"); | ||
81 | } | ||
82 | } | ||
83 | } | ||
84 | } | ||
85 | } | ||
diff --git a/OpenSim/Framework/General/LoginService.cs b/OpenSim/Framework/General/LoginService.cs new file mode 100644 index 0000000..f14754f --- /dev/null +++ b/OpenSim/Framework/General/LoginService.cs | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using Nwc.XmlRpc; | ||
33 | using libsecondlife; | ||
34 | |||
35 | namespace OpenSim.Framework.Grid | ||
36 | { | ||
37 | public abstract class LoginService | ||
38 | { | ||
39 | |||
40 | } | ||
41 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/General/OpenSim.Framework.csproj b/OpenSim/Framework/General/OpenSim.Framework.csproj new file mode 100644 index 0000000..e164d5a --- /dev/null +++ b/OpenSim/Framework/General/OpenSim.Framework.csproj | |||
@@ -0,0 +1,213 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{8ACA2445-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Xml" > | ||
74 | <HintPath>System.Xml.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="XMLRPC.dll" > | ||
78 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <ProjectReference Include="..\Console\OpenSim.Framework.Console.csproj"> | ||
84 | <Name>OpenSim.Framework.Console</Name> | ||
85 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
86 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
87 | <Private>False</Private> | ||
88 | </ProjectReference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | <Compile Include="AgentInventory.cs"> | ||
92 | <SubType>Code</SubType> | ||
93 | </Compile> | ||
94 | <Compile Include="AuthenticateSessionBase.cs"> | ||
95 | <SubType>Code</SubType> | ||
96 | </Compile> | ||
97 | <Compile Include="BlockingQueue.cs"> | ||
98 | <SubType>Code</SubType> | ||
99 | </Compile> | ||
100 | <Compile Include="IRegionCommsListener.cs"> | ||
101 | <SubType>Code</SubType> | ||
102 | </Compile> | ||
103 | <Compile Include="LLSDHelpers.cs"> | ||
104 | <SubType>Code</SubType> | ||
105 | </Compile> | ||
106 | <Compile Include="Logger.cs"> | ||
107 | <SubType>Code</SubType> | ||
108 | </Compile> | ||
109 | <Compile Include="LoginService.cs"> | ||
110 | <SubType>Code</SubType> | ||
111 | </Compile> | ||
112 | <Compile Include="RegionCommsListener.cs"> | ||
113 | <SubType>Code</SubType> | ||
114 | </Compile> | ||
115 | <Compile Include="Remoting.cs"> | ||
116 | <SubType>Code</SubType> | ||
117 | </Compile> | ||
118 | <Compile Include="SimProfile.cs"> | ||
119 | <SubType>Code</SubType> | ||
120 | </Compile> | ||
121 | <Compile Include="UserProfile.cs"> | ||
122 | <SubType>Code</SubType> | ||
123 | </Compile> | ||
124 | <Compile Include="Util.cs"> | ||
125 | <SubType>Code</SubType> | ||
126 | </Compile> | ||
127 | <Compile Include="Interfaces\AuthenticateResponse.cs"> | ||
128 | <SubType>Code</SubType> | ||
129 | </Compile> | ||
130 | <Compile Include="Interfaces\IAssetServer.cs"> | ||
131 | <SubType>Code</SubType> | ||
132 | </Compile> | ||
133 | <Compile Include="Interfaces\IClientAPI.cs"> | ||
134 | <SubType>Code</SubType> | ||
135 | </Compile> | ||
136 | <Compile Include="Interfaces\ILocalStorage.cs"> | ||
137 | <SubType>Code</SubType> | ||
138 | </Compile> | ||
139 | <Compile Include="Interfaces\IUserServer.cs"> | ||
140 | <SubType>Code</SubType> | ||
141 | </Compile> | ||
142 | <Compile Include="Interfaces\IWorld.cs"> | ||
143 | <SubType>Code</SubType> | ||
144 | </Compile> | ||
145 | <Compile Include="Interfaces\Config\IGenericConfig.cs"> | ||
146 | <SubType>Code</SubType> | ||
147 | </Compile> | ||
148 | <Compile Include="Interfaces\Config\IGridConfig.cs"> | ||
149 | <SubType>Code</SubType> | ||
150 | </Compile> | ||
151 | <Compile Include="Interfaces\Config\IUserConfig.cs"> | ||
152 | <SubType>Code</SubType> | ||
153 | </Compile> | ||
154 | <Compile Include="Interfaces\Scripting\IScriptAPI.cs"> | ||
155 | <SubType>Code</SubType> | ||
156 | </Compile> | ||
157 | <Compile Include="Interfaces\Scripting\IScriptEngine.cs"> | ||
158 | <SubType>Code</SubType> | ||
159 | </Compile> | ||
160 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
161 | <SubType>Code</SubType> | ||
162 | </Compile> | ||
163 | <Compile Include="Types\AgentCiruitData.cs"> | ||
164 | <SubType>Code</SubType> | ||
165 | </Compile> | ||
166 | <Compile Include="Types\AgentWearable.cs"> | ||
167 | <SubType>Code</SubType> | ||
168 | </Compile> | ||
169 | <Compile Include="Types\AssetBase.cs"> | ||
170 | <SubType>Code</SubType> | ||
171 | </Compile> | ||
172 | <Compile Include="Types\AssetLandmark.cs"> | ||
173 | <SubType>Code</SubType> | ||
174 | </Compile> | ||
175 | <Compile Include="Types\AssetStorage.cs"> | ||
176 | <SubType>Code</SubType> | ||
177 | </Compile> | ||
178 | <Compile Include="Types\EstateSettings.cs"> | ||
179 | <SubType>Code</SubType> | ||
180 | </Compile> | ||
181 | <Compile Include="Types\Login.cs"> | ||
182 | <SubType>Code</SubType> | ||
183 | </Compile> | ||
184 | <Compile Include="Types\MapBlockData.cs"> | ||
185 | <SubType>Code</SubType> | ||
186 | </Compile> | ||
187 | <Compile Include="Types\NeighbourInfo.cs"> | ||
188 | <SubType>Code</SubType> | ||
189 | </Compile> | ||
190 | <Compile Include="Types\NetworkServersInfo.cs"> | ||
191 | <SubType>Code</SubType> | ||
192 | </Compile> | ||
193 | <Compile Include="Types\ParcelData.cs"> | ||
194 | <SubType>Code</SubType> | ||
195 | </Compile> | ||
196 | <Compile Include="Types\PrimData.cs"> | ||
197 | <SubType>Code</SubType> | ||
198 | </Compile> | ||
199 | <Compile Include="Types\RegionHandle.cs"> | ||
200 | <SubType>Code</SubType> | ||
201 | </Compile> | ||
202 | <Compile Include="Types\RegionInfo.cs"> | ||
203 | <SubType>Code</SubType> | ||
204 | </Compile> | ||
205 | </ItemGroup> | ||
206 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
207 | <PropertyGroup> | ||
208 | <PreBuildEvent> | ||
209 | </PreBuildEvent> | ||
210 | <PostBuildEvent> | ||
211 | </PostBuildEvent> | ||
212 | </PropertyGroup> | ||
213 | </Project> | ||
diff --git a/OpenSim/Framework/General/OpenSim.Framework.csproj.user b/OpenSim/Framework/General/OpenSim.Framework.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/General/OpenSim.Framework.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/General/Properties/AssemblyInfo.cs b/OpenSim/Framework/General/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..86f5cdb --- /dev/null +++ b/OpenSim/Framework/General/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,33 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenSim.FrameWork")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenSim.FrameWork")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("a08e20c7-f191-4137-b1f0-9291408fa521")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | [assembly: AssemblyVersion("1.0.0.0")] | ||
33 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/General/RegionCommsListener.cs b/OpenSim/Framework/General/RegionCommsListener.cs new file mode 100644 index 0000000..bba928f --- /dev/null +++ b/OpenSim/Framework/General/RegionCommsListener.cs | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Interfaces; | ||
32 | using OpenSim.Framework.Types; | ||
33 | |||
34 | namespace OpenSim.Framework | ||
35 | { | ||
36 | public class RegionCommsListener :IRegionCommsListener | ||
37 | { | ||
38 | public event ExpectUserDelegate OnExpectUser; | ||
39 | public event GenericCall2 OnExpectChildAgent; | ||
40 | public event AgentCrossing OnAvatarCrossingIntoRegion; | ||
41 | public event UpdateNeighbours OnNeighboursUpdate; | ||
42 | |||
43 | /// <summary> | ||
44 | /// | ||
45 | /// </summary> | ||
46 | /// <param name="agent"></param> | ||
47 | /// <returns></returns> | ||
48 | public virtual bool TriggerExpectUser(ulong regionHandle, AgentCircuitData agent) | ||
49 | { | ||
50 | if(OnExpectUser != null) | ||
51 | { | ||
52 | OnExpectUser(regionHandle, agent); | ||
53 | return true; | ||
54 | } | ||
55 | |||
56 | return false; | ||
57 | } | ||
58 | |||
59 | public virtual bool TriggerExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position) | ||
60 | { | ||
61 | if (OnAvatarCrossingIntoRegion != null) | ||
62 | { | ||
63 | OnAvatarCrossingIntoRegion(regionHandle, agentID, position); | ||
64 | return true; | ||
65 | } | ||
66 | return false; | ||
67 | } | ||
68 | } | ||
69 | } | ||
diff --git a/OpenSim/Framework/General/Remoting.cs b/OpenSim/Framework/General/Remoting.cs new file mode 100644 index 0000000..e6fdf70 --- /dev/null +++ b/OpenSim/Framework/General/Remoting.cs | |||
@@ -0,0 +1,136 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Security.Cryptography; | ||
32 | |||
33 | namespace OpenSim.Framework | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// NEEDS AUDIT. | ||
37 | /// </summary> | ||
38 | /// <remarks> | ||
39 | /// Suggested implementation | ||
40 | /// <para>Store two digests for each foreign host. A local copy of the local hash using the local challenge (when issued), and a local copy of the remote hash using the remote challenge.</para> | ||
41 | /// <para>When sending data to the foreign host - run 'Sign' on the data and affix the returned byte[] to the message.</para> | ||
42 | /// <para>When recieving data from the foreign host - run 'Authenticate' against the data and the attached byte[].</para> | ||
43 | /// <para>Both hosts should be performing these operations for this to be effective.</para> | ||
44 | /// </remarks> | ||
45 | class RemoteDigest | ||
46 | { | ||
47 | private byte[] currentHash; | ||
48 | private byte[] secret; | ||
49 | |||
50 | private SHA512Managed SHA512; | ||
51 | |||
52 | /// <summary> | ||
53 | /// Initialises a new RemoteDigest authentication mechanism | ||
54 | /// </summary> | ||
55 | /// <remarks>Needs an audit by a cryptographic professional - was not "roll your own"'d by choice but rather a serious lack of decent authentication mechanisms in .NET remoting</remarks> | ||
56 | /// <param name="sharedSecret">The shared secret between systems (for inter-sim, this is provided in encrypted form during connection, for grid this is input manually in setup)</param> | ||
57 | /// <param name="salt">Binary salt - some common value - to be decided what</param> | ||
58 | /// <param name="challenge">The challenge key provided by the third party</param> | ||
59 | public RemoteDigest(string sharedSecret, byte[] salt, string challenge) | ||
60 | { | ||
61 | SHA512 = new SHA512Managed(); | ||
62 | Rfc2898DeriveBytes RFC2898 = new Rfc2898DeriveBytes(sharedSecret,salt); | ||
63 | secret = RFC2898.GetBytes(512); | ||
64 | ASCIIEncoding ASCII = new ASCIIEncoding(); | ||
65 | |||
66 | currentHash = SHA512.ComputeHash(AppendArrays(secret, ASCII.GetBytes(challenge))); | ||
67 | } | ||
68 | |||
69 | /// <summary> | ||
70 | /// Authenticates a piece of incoming data against the local digest. Upon successful authentication, digest string is incremented. | ||
71 | /// </summary> | ||
72 | /// <param name="data">The incoming data</param> | ||
73 | /// <param name="digest">The remote digest</param> | ||
74 | /// <returns></returns> | ||
75 | public bool Authenticate(byte[] data, byte[] digest) | ||
76 | { | ||
77 | byte[] newHash = SHA512.ComputeHash(AppendArrays(AppendArrays(currentHash, secret), data)); | ||
78 | if (digest == newHash) | ||
79 | { | ||
80 | currentHash = newHash; | ||
81 | return true; | ||
82 | } | ||
83 | else | ||
84 | { | ||
85 | throw new Exception("Hash comparison failed. Key resync required."); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | /// <summary> | ||
90 | /// Signs a new bit of data with the current hash. Returns a byte array which should be affixed to the message. | ||
91 | /// Signing a piece of data will automatically increment the hash - if you sign data and do not send it, the | ||
92 | /// hashes will get out of sync and throw an exception when validation is attempted. | ||
93 | /// </summary> | ||
94 | /// <param name="data">The outgoing data</param> | ||
95 | /// <returns>The local digest</returns> | ||
96 | public byte[] Sign(byte[] data) | ||
97 | { | ||
98 | currentHash = SHA512.ComputeHash(AppendArrays(AppendArrays(currentHash, secret), data)); | ||
99 | return currentHash; | ||
100 | } | ||
101 | |||
102 | /// <summary> | ||
103 | /// Generates a new challenge string to be issued to a foreign host. Challenges are 1024-bit (effective strength of less than 512-bits) messages generated using the Crytographic Random Number Generator. | ||
104 | /// </summary> | ||
105 | /// <returns>A 128-character hexadecimal string containing the challenge.</returns> | ||
106 | public static string GenerateChallenge() | ||
107 | { | ||
108 | RNGCryptoServiceProvider RNG = new RNGCryptoServiceProvider(); | ||
109 | byte[] bytes = new byte[64]; | ||
110 | RNG.GetBytes(bytes); | ||
111 | |||
112 | StringBuilder sb = new StringBuilder(bytes.Length * 2); | ||
113 | foreach (byte b in bytes) | ||
114 | { | ||
115 | sb.AppendFormat("{0:x2}", b); | ||
116 | } | ||
117 | return sb.ToString(); | ||
118 | } | ||
119 | |||
120 | /// <summary> | ||
121 | /// Helper function, merges two byte arrays | ||
122 | /// </summary> | ||
123 | /// <remarks>Sourced from MSDN Forum</remarks> | ||
124 | /// <param name="a">A</param> | ||
125 | /// <param name="b">B</param> | ||
126 | /// <returns>C</returns> | ||
127 | private byte[] AppendArrays(byte[] a, byte[] b) | ||
128 | { | ||
129 | byte[] c = new byte[a.Length + b.Length]; | ||
130 | Buffer.BlockCopy(a, 0, c, 0, a.Length); | ||
131 | Buffer.BlockCopy(b, 0, c, a.Length, b.Length); | ||
132 | return c; | ||
133 | } | ||
134 | |||
135 | } | ||
136 | } | ||
diff --git a/OpenSim/Framework/General/SimProfile.cs b/OpenSim/Framework/General/SimProfile.cs new file mode 100644 index 0000000..cfa5e50 --- /dev/null +++ b/OpenSim/Framework/General/SimProfile.cs | |||
@@ -0,0 +1,122 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Collections; | ||
31 | using System.Xml; | ||
32 | using System.Text; | ||
33 | using libsecondlife; | ||
34 | using Nwc.XmlRpc; | ||
35 | |||
36 | namespace OpenSim.Framework.Sims | ||
37 | { | ||
38 | public class SimProfile | ||
39 | { | ||
40 | public LLUUID UUID; | ||
41 | public ulong regionhandle; | ||
42 | public string regionname; | ||
43 | public string sim_ip; | ||
44 | public uint sim_port; | ||
45 | public string caps_url; | ||
46 | public uint RegionLocX; | ||
47 | public uint RegionLocY; | ||
48 | public string sendkey; | ||
49 | public string recvkey; | ||
50 | public bool online; | ||
51 | |||
52 | public SimProfile LoadFromGrid(ulong region_handle, string GridURL, string SendKey, string RecvKey) | ||
53 | { | ||
54 | try | ||
55 | { | ||
56 | Hashtable GridReqParams = new Hashtable(); | ||
57 | GridReqParams["region_handle"] = region_handle.ToString(); | ||
58 | GridReqParams["authkey"] = SendKey; | ||
59 | ArrayList SendParams = new ArrayList(); | ||
60 | SendParams.Add(GridReqParams); | ||
61 | XmlRpcRequest GridReq = new XmlRpcRequest("simulator_login", SendParams); | ||
62 | |||
63 | XmlRpcResponse GridResp = GridReq.Send(GridURL, 3000); | ||
64 | |||
65 | Hashtable RespData = (Hashtable)GridResp.Value; | ||
66 | this.UUID = new LLUUID((string)RespData["UUID"]); | ||
67 | this.regionhandle = Helpers.UIntsToLong(((uint)Convert.ToUInt32(RespData["region_locx"]) * 256), ((uint)Convert.ToUInt32(RespData["region_locy"]) * 256)); | ||
68 | this.regionname = (string)RespData["regionname"]; | ||
69 | this.sim_ip = (string)RespData["sim_ip"]; | ||
70 | this.sim_port = (uint)Convert.ToUInt16(RespData["sim_port"]); | ||
71 | this.caps_url = "http://" + ((string)RespData["sim_ip"]) + ":" + (string)RespData["sim_port"] + "/"; | ||
72 | this.RegionLocX = (uint)Convert.ToUInt32(RespData["region_locx"]); | ||
73 | this.RegionLocY = (uint)Convert.ToUInt32(RespData["region_locy"]); | ||
74 | this.sendkey = SendKey; | ||
75 | this.recvkey = RecvKey; | ||
76 | } | ||
77 | catch (Exception e) | ||
78 | { | ||
79 | System.Console.WriteLine(e.ToString()); | ||
80 | } | ||
81 | return this; | ||
82 | } | ||
83 | |||
84 | public SimProfile LoadFromGrid(LLUUID UUID, string GridURL, string SendKey, string RecvKey) | ||
85 | { | ||
86 | try | ||
87 | { | ||
88 | Hashtable GridReqParams = new Hashtable(); | ||
89 | GridReqParams["UUID"] = UUID.ToString(); | ||
90 | GridReqParams["authkey"] = SendKey; | ||
91 | ArrayList SendParams = new ArrayList(); | ||
92 | SendParams.Add(GridReqParams); | ||
93 | XmlRpcRequest GridReq = new XmlRpcRequest("simulator_login", SendParams); | ||
94 | |||
95 | XmlRpcResponse GridResp = GridReq.Send(GridURL, 3000); | ||
96 | |||
97 | Hashtable RespData = (Hashtable)GridResp.Value; | ||
98 | this.UUID = new LLUUID((string)RespData["UUID"]); | ||
99 | this.regionhandle = Helpers.UIntsToLong(((uint)Convert.ToUInt32(RespData["region_locx"]) * 256), ((uint)Convert.ToUInt32(RespData["region_locy"]) * 256)); | ||
100 | this.regionname = (string)RespData["regionname"]; | ||
101 | this.sim_ip = (string)RespData["sim_ip"]; | ||
102 | this.sim_port = (uint)Convert.ToUInt16(RespData["sim_port"]); | ||
103 | this.caps_url = "http://" + ((string)RespData["sim_ip"]) + ":" + (string)RespData["sim_port"] + "/"; | ||
104 | this.RegionLocX = (uint)Convert.ToUInt32(RespData["region_locx"]); | ||
105 | this.RegionLocY = (uint)Convert.ToUInt32(RespData["region_locy"]); | ||
106 | this.sendkey = SendKey; | ||
107 | this.recvkey = RecvKey; | ||
108 | } | ||
109 | catch (Exception e) | ||
110 | { | ||
111 | System.Console.WriteLine(e.ToString()); | ||
112 | } | ||
113 | return this; | ||
114 | } | ||
115 | |||
116 | |||
117 | public SimProfile() | ||
118 | { | ||
119 | } | ||
120 | } | ||
121 | |||
122 | } | ||
diff --git a/OpenSim/Framework/General/Types/AgentCiruitData.cs b/OpenSim/Framework/General/Types/AgentCiruitData.cs new file mode 100644 index 0000000..a650343 --- /dev/null +++ b/OpenSim/Framework/General/Types/AgentCiruitData.cs | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class AgentCircuitData | ||
36 | { | ||
37 | public AgentCircuitData() { } | ||
38 | public LLUUID AgentID; | ||
39 | public LLUUID SessionID; | ||
40 | public LLUUID SecureSessionID; | ||
41 | public LLVector3 startpos; | ||
42 | public string firstname; | ||
43 | public string lastname; | ||
44 | public uint circuitcode; | ||
45 | public bool child; | ||
46 | public LLUUID InventoryFolder; | ||
47 | public LLUUID BaseFolder; | ||
48 | public string CapsPath = ""; | ||
49 | } | ||
50 | } | ||
diff --git a/OpenSim/Framework/General/Types/AgentWearable.cs b/OpenSim/Framework/General/Types/AgentWearable.cs new file mode 100644 index 0000000..4c93da7 --- /dev/null +++ b/OpenSim/Framework/General/Types/AgentWearable.cs | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class AvatarWearable | ||
36 | { | ||
37 | public LLUUID AssetID = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
38 | public LLUUID ItemID = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
39 | |||
40 | public AvatarWearable() | ||
41 | { | ||
42 | |||
43 | } | ||
44 | |||
45 | public static AvatarWearable[] DefaultWearables | ||
46 | { | ||
47 | get | ||
48 | { | ||
49 | AvatarWearable[] defaultWearables = new AvatarWearable[13]; //should be 13 of these | ||
50 | for (int i = 0; i < 13; i++) | ||
51 | { | ||
52 | defaultWearables[i] = new AvatarWearable(); | ||
53 | } | ||
54 | defaultWearables[0].AssetID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); | ||
55 | defaultWearables[0].ItemID = LLUUID.Random(); | ||
56 | return defaultWearables; | ||
57 | } | ||
58 | } | ||
59 | } | ||
60 | } | ||
diff --git a/OpenSim/Framework/General/Types/AssetBase.cs b/OpenSim/Framework/General/Types/AssetBase.cs new file mode 100644 index 0000000..86586a6 --- /dev/null +++ b/OpenSim/Framework/General/Types/AssetBase.cs | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class AssetBase | ||
36 | { | ||
37 | public byte[] Data; | ||
38 | public LLUUID FullID; | ||
39 | public sbyte Type; | ||
40 | public sbyte InvType; | ||
41 | public string Name; | ||
42 | public string Description; | ||
43 | |||
44 | public AssetBase() | ||
45 | { | ||
46 | |||
47 | } | ||
48 | } | ||
49 | } | ||
diff --git a/OpenSim/Framework/General/Types/AssetLandmark.cs b/OpenSim/Framework/General/Types/AssetLandmark.cs new file mode 100644 index 0000000..8a10b70 --- /dev/null +++ b/OpenSim/Framework/General/Types/AssetLandmark.cs | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class AssetLandmark : AssetBase | ||
36 | { | ||
37 | public int Version; | ||
38 | public LLVector3 Position; | ||
39 | public LLUUID RegionID; | ||
40 | |||
41 | public AssetLandmark(AssetBase a) | ||
42 | { | ||
43 | this.Data = a.Data; | ||
44 | this.FullID = a.FullID; | ||
45 | this.Type = a.Type; | ||
46 | this.InvType = a.InvType; | ||
47 | this.Name = a.Name; | ||
48 | this.Description = a.Description; | ||
49 | InternData(); | ||
50 | } | ||
51 | |||
52 | private void InternData() | ||
53 | { | ||
54 | string temp = System.Text.Encoding.UTF8.GetString(Data).Trim(); | ||
55 | string[] parts = temp.Split('\n'); | ||
56 | int.TryParse(parts[0].Substring(17, 1), out Version); | ||
57 | LLUUID.TryParse(parts[1].Substring(10, 36), out RegionID); | ||
58 | LLVector3.TryParse(parts[2].Substring(11, parts[2].Length - 11), out Position); | ||
59 | } | ||
60 | } | ||
61 | } | ||
diff --git a/OpenSim/Framework/General/Types/AssetStorage.cs b/OpenSim/Framework/General/Types/AssetStorage.cs new file mode 100644 index 0000000..8cac23a --- /dev/null +++ b/OpenSim/Framework/General/Types/AssetStorage.cs | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class AssetStorage | ||
36 | { | ||
37 | |||
38 | public AssetStorage() { | ||
39 | } | ||
40 | |||
41 | public AssetStorage(LLUUID assetUUID) { | ||
42 | UUID=assetUUID; | ||
43 | } | ||
44 | |||
45 | public byte[] Data; | ||
46 | public sbyte Type; | ||
47 | public string Name; | ||
48 | public LLUUID UUID; | ||
49 | } | ||
50 | } | ||
diff --git a/OpenSim/Framework/General/Types/EstateSettings.cs b/OpenSim/Framework/General/Types/EstateSettings.cs new file mode 100644 index 0000000..778c893 --- /dev/null +++ b/OpenSim/Framework/General/Types/EstateSettings.cs | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | |||
33 | using libsecondlife; | ||
34 | |||
35 | namespace OpenSim.Framework.Types | ||
36 | { | ||
37 | public class EstateSettings | ||
38 | { | ||
39 | //Settings to this island | ||
40 | public float billableFactor = (float)0.0; | ||
41 | public uint estateID = 0; | ||
42 | public uint parentEstateID = 0; | ||
43 | |||
44 | public byte maxAgents = 40; | ||
45 | public float objectBonusFactor = (float)1.0; | ||
46 | |||
47 | public int redirectGridX = 0; //?? | ||
48 | public int redirectGridY = 0; //?? | ||
49 | public libsecondlife.Simulator.RegionFlags regionFlags = libsecondlife.Simulator.RegionFlags.None; //Booleam values of various region settings | ||
50 | public libsecondlife.Simulator.SimAccess simAccess = libsecondlife.Simulator.SimAccess.Mature; //Is sim PG, Mature, etc? Mature by default. | ||
51 | public float sunHour = 0; | ||
52 | |||
53 | public float terrainRaiseLimit = 0; | ||
54 | public float terrainLowerLimit = 0; | ||
55 | |||
56 | public bool useFixedSun = false; | ||
57 | public int pricePerMeter = 1; | ||
58 | |||
59 | public ushort regionWaterHeight = 20; | ||
60 | public bool regionAllowTerraform = true; | ||
61 | |||
62 | // Region Information | ||
63 | // Low resolution 'base' textures. No longer used. | ||
64 | public LLUUID terrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); // Default | ||
65 | public LLUUID terrainBase1 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3"); // Default | ||
66 | public LLUUID terrainBase2 = new LLUUID("179cdabd-398a-9b6b-1391-4dc333ba321f"); // Default | ||
67 | public LLUUID terrainBase3 = new LLUUID("beb169c7-11ea-fff2-efe5-0f24dc881df2"); // Default | ||
68 | |||
69 | // Higher resolution terrain textures | ||
70 | public LLUUID terrainDetail0 = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
71 | public LLUUID terrainDetail1 = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
72 | public LLUUID terrainDetail2 = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
73 | public LLUUID terrainDetail3 = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
74 | |||
75 | // First quad - each point is bilinearly interpolated at each meter of terrain | ||
76 | public float terrainStartHeight0 = 10.0f; | ||
77 | public float terrainStartHeight1 = 10.0f; | ||
78 | public float terrainStartHeight2 = 10.0f; | ||
79 | public float terrainStartHeight3 = 10.0f; | ||
80 | |||
81 | // Second quad - also bilinearly interpolated. | ||
82 | // Terrain texturing is done that: | ||
83 | // 0..3 (0 = base0, 3 = base3) = (terrain[x,y] - start[x,y]) / range[x,y] | ||
84 | public float terrainHeightRange0 = 60.0f; //00 | ||
85 | public float terrainHeightRange1 = 60.0f; //01 | ||
86 | public float terrainHeightRange2 = 60.0f; //10 | ||
87 | public float terrainHeightRange3 = 60.0f; //11 | ||
88 | |||
89 | // Terrain Default (Must be in F32 Format!) | ||
90 | public string terrainFile = "default.r32"; | ||
91 | public double terrainMultiplier = 60.0; | ||
92 | public float waterHeight = (float)20.0; | ||
93 | |||
94 | public LLUUID terrainImageID = LLUUID.Zero; // the assetID that is the current Map image for this region | ||
95 | |||
96 | } | ||
97 | } | ||
diff --git a/OpenSim/Framework/General/Types/Login.cs b/OpenSim/Framework/General/Types/Login.cs new file mode 100644 index 0000000..3180a16 --- /dev/null +++ b/OpenSim/Framework/General/Types/Login.cs | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class Login | ||
36 | { | ||
37 | public string First = "Test"; | ||
38 | public string Last = "User"; | ||
39 | public LLUUID Agent; | ||
40 | public LLUUID Session; | ||
41 | public LLUUID SecureSession = LLUUID.Zero; | ||
42 | public LLUUID InventoryFolder; | ||
43 | public LLUUID BaseFolder; | ||
44 | public uint CircuitCode; | ||
45 | public string CapsPath =""; | ||
46 | |||
47 | public Login() | ||
48 | { | ||
49 | |||
50 | } | ||
51 | } | ||
52 | } | ||
diff --git a/OpenSim/Framework/General/Types/MapBlockData.cs b/OpenSim/Framework/General/Types/MapBlockData.cs new file mode 100644 index 0000000..2e6f56e --- /dev/null +++ b/OpenSim/Framework/General/Types/MapBlockData.cs | |||
@@ -0,0 +1,25 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using libsecondlife; | ||
5 | |||
6 | namespace OpenSim.Framework.Types | ||
7 | { | ||
8 | public class MapBlockData | ||
9 | { | ||
10 | public uint Flags; | ||
11 | public ushort X; | ||
12 | public ushort Y; | ||
13 | public byte Agents; | ||
14 | public byte Access; | ||
15 | public byte WaterHeight; | ||
16 | public LLUUID MapImageId; | ||
17 | public String Name; | ||
18 | public uint RegionFlags; | ||
19 | |||
20 | public MapBlockData() | ||
21 | { | ||
22 | |||
23 | } | ||
24 | } | ||
25 | } | ||
diff --git a/OpenSim/Framework/General/Types/NeighbourInfo.cs b/OpenSim/Framework/General/Types/NeighbourInfo.cs new file mode 100644 index 0000000..310fd1c --- /dev/null +++ b/OpenSim/Framework/General/Types/NeighbourInfo.cs | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Interfaces; | ||
32 | using OpenSim.Framework.Utilities; | ||
33 | using OpenSim.Framework.Console; | ||
34 | using libsecondlife; | ||
35 | |||
36 | namespace OpenSim.Framework.Types | ||
37 | { | ||
38 | public class NeighbourInfo | ||
39 | { | ||
40 | public NeighbourInfo() | ||
41 | { | ||
42 | } | ||
43 | |||
44 | public ulong regionhandle; | ||
45 | public uint RegionLocX; | ||
46 | public uint RegionLocY; | ||
47 | public string sim_ip; | ||
48 | public uint sim_port; | ||
49 | } | ||
50 | } | ||
diff --git a/OpenSim/Framework/General/Types/NetworkServersInfo.cs b/OpenSim/Framework/General/Types/NetworkServersInfo.cs new file mode 100644 index 0000000..73d7811 --- /dev/null +++ b/OpenSim/Framework/General/Types/NetworkServersInfo.cs | |||
@@ -0,0 +1,181 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Interfaces; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class NetworkServersInfo | ||
36 | { | ||
37 | public string AssetURL = "http://127.0.0.1:8003/"; | ||
38 | public string AssetSendKey = ""; | ||
39 | |||
40 | public string GridURL = ""; | ||
41 | public string GridSendKey = ""; | ||
42 | public string GridRecvKey = ""; | ||
43 | public string UserURL = ""; | ||
44 | public string UserSendKey = ""; | ||
45 | public string UserRecvKey = ""; | ||
46 | public bool isSandbox; | ||
47 | |||
48 | public uint DefaultHomeLocX = 0; | ||
49 | public uint DefaultHomeLocY = 0; | ||
50 | |||
51 | public int HttpListenerPort = 9000; | ||
52 | public int RemotingListenerPort = 8895; | ||
53 | |||
54 | public void InitConfig(bool sandboxMode, IGenericConfig configData) | ||
55 | { | ||
56 | this.isSandbox = sandboxMode; | ||
57 | |||
58 | try | ||
59 | { | ||
60 | string attri = ""; | ||
61 | |||
62 | attri = ""; | ||
63 | attri = configData.GetAttribute("HttpListenerPort"); | ||
64 | if (attri == "") | ||
65 | { | ||
66 | string location = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Http Listener Port", "9000"); | ||
67 | configData.SetAttribute("HttpListenerPort", location); | ||
68 | this.HttpListenerPort = Convert.ToInt32(location); | ||
69 | } | ||
70 | else | ||
71 | { | ||
72 | this.HttpListenerPort = Convert.ToInt32(attri); | ||
73 | } | ||
74 | |||
75 | attri = ""; | ||
76 | attri = configData.GetAttribute("RemotingListenerPort"); | ||
77 | if (attri == "") | ||
78 | { | ||
79 | string location = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Remoting Listener Port", "8895"); | ||
80 | configData.SetAttribute("RemotingListenerPort", location); | ||
81 | this.RemotingListenerPort = Convert.ToInt32(location); | ||
82 | } | ||
83 | else | ||
84 | { | ||
85 | this.RemotingListenerPort = Convert.ToInt32(attri); | ||
86 | } | ||
87 | |||
88 | if (sandboxMode) | ||
89 | { | ||
90 | // default home location X | ||
91 | attri = ""; | ||
92 | attri = configData.GetAttribute("DefaultLocationX"); | ||
93 | if (attri == "") | ||
94 | { | ||
95 | string location = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Default Home Location X", "1000"); | ||
96 | configData.SetAttribute("DefaultLocationX", location); | ||
97 | this.DefaultHomeLocX = (uint)Convert.ToUInt32(location); | ||
98 | } | ||
99 | else | ||
100 | { | ||
101 | this.DefaultHomeLocX = (uint)Convert.ToUInt32(attri); | ||
102 | } | ||
103 | |||
104 | // default home location Y | ||
105 | attri = ""; | ||
106 | attri = configData.GetAttribute("DefaultLocationY"); | ||
107 | if (attri == "") | ||
108 | { | ||
109 | string location = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Default Home Location Y", "1000"); | ||
110 | configData.SetAttribute("DefaultLocationY", location); | ||
111 | this.DefaultHomeLocY = (uint)Convert.ToUInt32(location); | ||
112 | } | ||
113 | else | ||
114 | { | ||
115 | this.DefaultHomeLocY = (uint)Convert.ToUInt32(attri); | ||
116 | } | ||
117 | } | ||
118 | if (!isSandbox) | ||
119 | { | ||
120 | //Grid Server | ||
121 | attri = ""; | ||
122 | attri = configData.GetAttribute("GridServerURL"); | ||
123 | if (attri == "") | ||
124 | { | ||
125 | this.GridURL = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Grid server URL", "http://127.0.0.1:8001/"); | ||
126 | configData.SetAttribute("GridServerURL", this.GridURL); | ||
127 | } | ||
128 | else | ||
129 | { | ||
130 | this.GridURL = attri; | ||
131 | } | ||
132 | |||
133 | //Grid Send Key | ||
134 | attri = ""; | ||
135 | attri = configData.GetAttribute("GridSendKey"); | ||
136 | if (attri == "") | ||
137 | { | ||
138 | this.GridSendKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to send to grid server", "null"); | ||
139 | configData.SetAttribute("GridSendKey", this.GridSendKey); | ||
140 | } | ||
141 | else | ||
142 | { | ||
143 | this.GridSendKey = attri; | ||
144 | } | ||
145 | |||
146 | //Grid Receive Key | ||
147 | attri = ""; | ||
148 | attri = configData.GetAttribute("GridRecvKey"); | ||
149 | if (attri == "") | ||
150 | { | ||
151 | this.GridRecvKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to expect from grid server", "null"); | ||
152 | configData.SetAttribute("GridRecvKey", this.GridRecvKey); | ||
153 | } | ||
154 | else | ||
155 | { | ||
156 | this.GridRecvKey = attri; | ||
157 | } | ||
158 | |||
159 | attri = ""; | ||
160 | attri = configData.GetAttribute("AssetServerURL"); | ||
161 | if (attri == "") | ||
162 | { | ||
163 | this.AssetURL = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Asset server URL", "http://127.0.0.1:8003/"); | ||
164 | configData.SetAttribute("AssetServerURL", this.GridURL); | ||
165 | } | ||
166 | else | ||
167 | { | ||
168 | this.AssetURL = attri; | ||
169 | } | ||
170 | |||
171 | } | ||
172 | configData.Commit(); | ||
173 | } | ||
174 | catch (Exception e) | ||
175 | { | ||
176 | OpenSim.Framework.Console.MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured"); | ||
177 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
178 | } | ||
179 | } | ||
180 | } | ||
181 | } | ||
diff --git a/OpenSim/Framework/General/Types/ParcelData.cs b/OpenSim/Framework/General/Types/ParcelData.cs new file mode 100644 index 0000000..40f128a --- /dev/null +++ b/OpenSim/Framework/General/Types/ParcelData.cs | |||
@@ -0,0 +1,115 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | |||
36 | public class ParcelData | ||
37 | { | ||
38 | public byte[] parcelBitmapByteArray = new byte[512]; | ||
39 | public string parcelName = ""; | ||
40 | public string parcelDesc = ""; | ||
41 | public LLUUID ownerID = new LLUUID(); | ||
42 | public bool isGroupOwned = false; | ||
43 | public LLVector3 AABBMin = new LLVector3(); | ||
44 | public LLVector3 AABBMax = new LLVector3(); | ||
45 | public int area = 0; | ||
46 | public uint auctionID = 0; //Unemplemented. If set to 0, not being auctioned | ||
47 | public LLUUID authBuyerID = new LLUUID(); //Unemplemented. Authorized Buyer's UUID | ||
48 | public libsecondlife.Parcel.ParcelCategory category = new libsecondlife.Parcel.ParcelCategory(); //Unemplemented. Parcel's chosen category | ||
49 | public int claimDate = 0; //Unemplemented | ||
50 | public int claimPrice = 0; //Unemplemented | ||
51 | public LLUUID groupID = new LLUUID(); //Unemplemented | ||
52 | public int groupPrims = 0; //Unemplemented | ||
53 | public int salePrice = 0; //Unemeplemented. Parcels price. | ||
54 | public libsecondlife.Parcel.ParcelStatus parcelStatus = libsecondlife.Parcel.ParcelStatus.None; | ||
55 | public libsecondlife.Parcel.ParcelFlags parcelFlags = libsecondlife.Parcel.ParcelFlags.None; | ||
56 | public byte landingType = 0; | ||
57 | public byte mediaAutoScale = 0; | ||
58 | public LLUUID mediaID = LLUUID.Zero; | ||
59 | public int localID = 0; | ||
60 | public LLUUID globalID = new LLUUID(); | ||
61 | |||
62 | public string mediaURL = ""; | ||
63 | public string musicURL = ""; | ||
64 | public float passHours = 0; | ||
65 | public int passPrice = 0; | ||
66 | public LLUUID snapshotID = LLUUID.Zero; | ||
67 | public LLVector3 userLocation = new LLVector3(); | ||
68 | public LLVector3 userLookAt = new LLVector3(); | ||
69 | |||
70 | public ParcelData() | ||
71 | { | ||
72 | globalID = LLUUID.Random(); | ||
73 | } | ||
74 | |||
75 | public ParcelData Copy() | ||
76 | { | ||
77 | ParcelData parcelData = new ParcelData(); | ||
78 | |||
79 | parcelData.AABBMax = this.AABBMax; | ||
80 | parcelData.AABBMin = this.AABBMin; | ||
81 | parcelData.area = this.area; | ||
82 | parcelData.auctionID = this.auctionID; | ||
83 | parcelData.authBuyerID = this.authBuyerID; | ||
84 | parcelData.category = this.category; | ||
85 | parcelData.claimDate = this.claimDate; | ||
86 | parcelData.claimPrice = this.claimPrice; | ||
87 | parcelData.globalID = this.globalID; | ||
88 | parcelData.groupID = this.groupID; | ||
89 | parcelData.groupPrims = this.groupPrims; | ||
90 | parcelData.isGroupOwned = this.isGroupOwned; | ||
91 | parcelData.localID = this.localID; | ||
92 | parcelData.landingType = this.landingType; | ||
93 | parcelData.mediaAutoScale = this.mediaAutoScale; | ||
94 | parcelData.mediaID = this.mediaID; | ||
95 | parcelData.mediaURL = this.mediaURL; | ||
96 | parcelData.musicURL = this.musicURL; | ||
97 | parcelData.ownerID = this.ownerID; | ||
98 | parcelData.parcelBitmapByteArray = (byte[])this.parcelBitmapByteArray.Clone(); | ||
99 | parcelData.parcelDesc = this.parcelDesc; | ||
100 | parcelData.parcelFlags = this.parcelFlags; | ||
101 | parcelData.parcelName = this.parcelName; | ||
102 | parcelData.parcelStatus = this.parcelStatus; | ||
103 | parcelData.passHours = this.passHours; | ||
104 | parcelData.passPrice = this.passPrice; | ||
105 | parcelData.salePrice = this.salePrice; | ||
106 | parcelData.snapshotID = this.snapshotID; | ||
107 | parcelData.userLocation = this.userLocation; | ||
108 | parcelData.userLookAt = this.userLookAt; | ||
109 | |||
110 | return parcelData; | ||
111 | |||
112 | } | ||
113 | } | ||
114 | |||
115 | } | ||
diff --git a/OpenSim/Framework/General/Types/PrimData.cs b/OpenSim/Framework/General/Types/PrimData.cs new file mode 100644 index 0000000..f84ae3e --- /dev/null +++ b/OpenSim/Framework/General/Types/PrimData.cs | |||
@@ -0,0 +1,230 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Framework.Types | ||
34 | { | ||
35 | public class PrimData | ||
36 | { | ||
37 | private const uint FULL_MASK_PERMISSIONS = 2147483647; | ||
38 | |||
39 | public LLUUID OwnerID; | ||
40 | public byte PCode; | ||
41 | public ushort PathBegin; | ||
42 | public ushort PathEnd; | ||
43 | public byte PathScaleX; | ||
44 | public byte PathScaleY; | ||
45 | public byte PathShearX; | ||
46 | public byte PathShearY; | ||
47 | public sbyte PathSkew; | ||
48 | public ushort ProfileBegin; | ||
49 | public ushort ProfileEnd; | ||
50 | public LLVector3 Scale; | ||
51 | public byte PathCurve; | ||
52 | public byte ProfileCurve; | ||
53 | public uint ParentID = 0; | ||
54 | public ushort ProfileHollow; | ||
55 | public sbyte PathRadiusOffset; | ||
56 | public byte PathRevolutions; | ||
57 | public sbyte PathTaperX; | ||
58 | public sbyte PathTaperY; | ||
59 | public sbyte PathTwist; | ||
60 | public sbyte PathTwistBegin; | ||
61 | public byte[] TextureEntry; // a LL textureEntry in byte[] format | ||
62 | |||
63 | public Int32 CreationDate; | ||
64 | public uint OwnerMask = FULL_MASK_PERMISSIONS; | ||
65 | public uint NextOwnerMask = FULL_MASK_PERMISSIONS; | ||
66 | public uint GroupMask = FULL_MASK_PERMISSIONS; | ||
67 | public uint EveryoneMask = FULL_MASK_PERMISSIONS; | ||
68 | public uint BaseMask = FULL_MASK_PERMISSIONS; | ||
69 | |||
70 | //following only used during prim storage | ||
71 | public LLVector3 Position; | ||
72 | public LLQuaternion Rotation = new LLQuaternion(0, 1, 0, 0); | ||
73 | public uint LocalID; | ||
74 | public LLUUID FullID; | ||
75 | |||
76 | public PrimData() | ||
77 | { | ||
78 | |||
79 | } | ||
80 | |||
81 | public PrimData(byte[] data) | ||
82 | { | ||
83 | int i = 0; | ||
84 | |||
85 | this.OwnerID = new LLUUID(data, i); i += 16; | ||
86 | this.PCode = data[i++]; | ||
87 | this.PathBegin = (ushort)(data[i++] + (data[i++] << 8)); | ||
88 | this.PathEnd = (ushort)(data[i++] + (data[i++] << 8)); | ||
89 | this.PathScaleX = data[i++]; | ||
90 | this.PathScaleY = data[i++]; | ||
91 | this.PathShearX = data[i++]; | ||
92 | this.PathShearY = data[i++]; | ||
93 | this.PathSkew = (sbyte)data[i++]; | ||
94 | this.ProfileBegin = (ushort)(data[i++] + (data[i++] << 8)); | ||
95 | this.ProfileEnd = (ushort)(data[i++] + (data[i++] << 8)); | ||
96 | this.Scale = new LLVector3(data, i); i += 12; | ||
97 | this.PathCurve = data[i++]; | ||
98 | this.ProfileCurve = data[i++]; | ||
99 | this.ParentID = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
100 | this.ProfileHollow = (ushort)(data[i++] + (data[i++] << 8)); | ||
101 | this.PathRadiusOffset = (sbyte)data[i++]; | ||
102 | this.PathRevolutions = data[i++]; | ||
103 | this.PathTaperX = (sbyte)data[i++]; | ||
104 | this.PathTaperY = (sbyte)data[i++]; | ||
105 | this.PathTwist = (sbyte)data[i++]; | ||
106 | this.PathTwistBegin = (sbyte)data[i++]; | ||
107 | ushort length = (ushort)(data[i++] + (data[i++] << 8)); | ||
108 | this.TextureEntry = new byte[length]; | ||
109 | Array.Copy(data, i, TextureEntry, 0, length); i += length; | ||
110 | this.CreationDate = (Int32)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
111 | this.OwnerMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
112 | this.NextOwnerMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
113 | this.GroupMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
114 | this.EveryoneMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
115 | this.BaseMask = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
116 | this.Position = new LLVector3(data, i); i += 12; | ||
117 | this.Rotation = new LLQuaternion(data, i, true); i += 12; | ||
118 | this.LocalID = (uint)(data[i++] + (data[i++] << 8) + (data[i++] << 16) + (data[i++] << 24)); | ||
119 | this.FullID = new LLUUID(data, i); i += 16; | ||
120 | |||
121 | } | ||
122 | |||
123 | public byte[] ToBytes() | ||
124 | { | ||
125 | int i = 0; | ||
126 | byte[] bytes = new byte[126 + TextureEntry.Length]; | ||
127 | Array.Copy(OwnerID.GetBytes(), 0, bytes, i, 16); i += 16; | ||
128 | bytes[i++] = this.PCode; | ||
129 | bytes[i++] = (byte)(this.PathBegin % 256); | ||
130 | bytes[i++] = (byte)((this.PathBegin >> 8) % 256); | ||
131 | bytes[i++] = (byte)(this.PathEnd % 256); | ||
132 | bytes[i++] = (byte)((this.PathEnd >> 8) % 256); | ||
133 | bytes[i++] = this.PathScaleX; | ||
134 | bytes[i++] = this.PathScaleY; | ||
135 | bytes[i++] = this.PathShearX; | ||
136 | bytes[i++] = this.PathShearY; | ||
137 | bytes[i++] = (byte)this.PathSkew; | ||
138 | bytes[i++] = (byte)(this.ProfileBegin % 256); | ||
139 | bytes[i++] = (byte)((this.ProfileBegin >> 8) % 256); | ||
140 | bytes[i++] = (byte)(this.ProfileEnd % 256); | ||
141 | bytes[i++] = (byte)((this.ProfileEnd >> 8) % 256); | ||
142 | Array.Copy(Scale.GetBytes(), 0, bytes, i, 12); i += 12; | ||
143 | bytes[i++] = this.PathCurve; | ||
144 | bytes[i++] = this.ProfileCurve; | ||
145 | bytes[i++] = (byte)(ParentID % 256); | ||
146 | bytes[i++] = (byte)((ParentID >> 8) % 256); | ||
147 | bytes[i++] = (byte)((ParentID >> 16) % 256); | ||
148 | bytes[i++] = (byte)((ParentID >> 24) % 256); | ||
149 | bytes[i++] = (byte)(this.ProfileHollow % 256); | ||
150 | bytes[i++] = (byte)((this.ProfileHollow >> 8) % 256); | ||
151 | bytes[i++] = ((byte)this.PathRadiusOffset); | ||
152 | bytes[i++] = this.PathRevolutions; | ||
153 | bytes[i++] = ((byte)this.PathTaperX); | ||
154 | bytes[i++] = ((byte)this.PathTaperY); | ||
155 | bytes[i++] = ((byte)this.PathTwist); | ||
156 | bytes[i++] = ((byte)this.PathTwistBegin); | ||
157 | bytes[i++] = (byte)(TextureEntry.Length % 256); | ||
158 | bytes[i++] = (byte)((TextureEntry.Length >> 8) % 256); | ||
159 | Array.Copy(TextureEntry, 0, bytes, i, TextureEntry.Length); i += TextureEntry.Length; | ||
160 | bytes[i++] = (byte)(this.CreationDate % 256); | ||
161 | bytes[i++] = (byte)((this.CreationDate >> 8) % 256); | ||
162 | bytes[i++] = (byte)((this.CreationDate >> 16) % 256); | ||
163 | bytes[i++] = (byte)((this.CreationDate >> 24) % 256); | ||
164 | bytes[i++] = (byte)(this.OwnerMask % 256); | ||
165 | bytes[i++] = (byte)((this.OwnerMask >> 8) % 256); | ||
166 | bytes[i++] = (byte)((this.OwnerMask >> 16) % 256); | ||
167 | bytes[i++] = (byte)((this.OwnerMask >> 24) % 256); | ||
168 | bytes[i++] = (byte)(this.NextOwnerMask % 256); | ||
169 | bytes[i++] = (byte)((this.NextOwnerMask >> 8) % 256); | ||
170 | bytes[i++] = (byte)((this.NextOwnerMask >> 16) % 256); | ||
171 | bytes[i++] = (byte)((this.NextOwnerMask >> 24) % 256); | ||
172 | bytes[i++] = (byte)(this.GroupMask % 256); | ||
173 | bytes[i++] = (byte)((this.GroupMask >> 8) % 256); | ||
174 | bytes[i++] = (byte)((this.GroupMask >> 16) % 256); | ||
175 | bytes[i++] = (byte)((this.GroupMask >> 24) % 256); | ||
176 | bytes[i++] = (byte)(this.EveryoneMask % 256); | ||
177 | bytes[i++] = (byte)((this.EveryoneMask >> 8) % 256); | ||
178 | bytes[i++] = (byte)((this.EveryoneMask >> 16) % 256); | ||
179 | bytes[i++] = (byte)((this.EveryoneMask >> 24) % 256); | ||
180 | bytes[i++] = (byte)(this.BaseMask % 256); | ||
181 | bytes[i++] = (byte)((this.BaseMask >> 8) % 256); | ||
182 | bytes[i++] = (byte)((this.BaseMask >> 16) % 256); | ||
183 | bytes[i++] = (byte)((this.BaseMask >> 24) % 256); | ||
184 | Array.Copy(this.Position.GetBytes(), 0, bytes, i, 12); i += 12; | ||
185 | if (this.Rotation == new LLQuaternion(0, 0, 0, 0)) | ||
186 | { | ||
187 | this.Rotation = new LLQuaternion(0, 1, 0, 0); | ||
188 | } | ||
189 | Array.Copy(this.Rotation.GetBytes(), 0, bytes, i, 12); i += 12; | ||
190 | bytes[i++] = (byte)(this.LocalID % 256); | ||
191 | bytes[i++] = (byte)((this.LocalID >> 8) % 256); | ||
192 | bytes[i++] = (byte)((this.LocalID >> 16) % 256); | ||
193 | bytes[i++] = (byte)((this.LocalID >> 24) % 256); | ||
194 | Array.Copy(FullID.GetBytes(), 0, bytes, i, 16); i += 16; | ||
195 | |||
196 | return bytes; | ||
197 | } | ||
198 | |||
199 | public static PrimData DefaultCube() | ||
200 | { | ||
201 | PrimData primData = new PrimData(); | ||
202 | primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
203 | primData.FullID = LLUUID.Random(); | ||
204 | primData.Scale = new LLVector3(0.5f, 0.5f, 0.5f); | ||
205 | primData.Rotation = new LLQuaternion(0, 0, 0, 1); | ||
206 | primData.PCode = 9; | ||
207 | primData.ParentID = 0; | ||
208 | primData.PathBegin = 0; | ||
209 | primData.PathEnd = 0; | ||
210 | primData.PathScaleX = 0; | ||
211 | primData.PathScaleY = 0; | ||
212 | primData.PathShearX = 0; | ||
213 | primData.PathShearY = 0; | ||
214 | primData.PathSkew = 0; | ||
215 | primData.ProfileBegin = 0; | ||
216 | primData.ProfileEnd = 0; | ||
217 | primData.PathCurve = 16; | ||
218 | primData.ProfileCurve = 1; | ||
219 | primData.ProfileHollow = 0; | ||
220 | primData.PathRadiusOffset = 0; | ||
221 | primData.PathRevolutions = 0; | ||
222 | primData.PathTaperX = 0; | ||
223 | primData.PathTaperY = 0; | ||
224 | primData.PathTwist = 0; | ||
225 | primData.PathTwistBegin = 0; | ||
226 | |||
227 | return primData; | ||
228 | } | ||
229 | } | ||
230 | } | ||
diff --git a/OpenSim/Framework/General/Types/RegionHandle.cs b/OpenSim/Framework/General/Types/RegionHandle.cs new file mode 100644 index 0000000..1271d04 --- /dev/null +++ b/OpenSim/Framework/General/Types/RegionHandle.cs | |||
@@ -0,0 +1,120 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using System.Net; | ||
5 | |||
6 | namespace OpenSim.Framework.Types | ||
7 | { | ||
8 | /// <summary> | ||
9 | /// A class for manipulating RegionHandle coordinates | ||
10 | /// </summary> | ||
11 | class RegionHandle | ||
12 | { | ||
13 | private UInt64 handle; | ||
14 | |||
15 | /// <summary> | ||
16 | /// Initialises a new grid-aware RegionHandle | ||
17 | /// </summary> | ||
18 | /// <param name="ip">IP Address of the Grid Server for this region</param> | ||
19 | /// <param name="x">Grid X Coordinate</param> | ||
20 | /// <param name="y">Grid Y Coordinate</param> | ||
21 | public RegionHandle(string ip, short x, short y) | ||
22 | { | ||
23 | IPAddress addr = IPAddress.Parse(ip); | ||
24 | |||
25 | long baseHandle = addr.Address; | ||
26 | |||
27 | // Split the IP address in half | ||
28 | short a = (short)((baseHandle << 16) & 0xFFFF); | ||
29 | short b = (short)((baseHandle << 0) & 0xFFFF); | ||
30 | |||
31 | // Raise the bounds a little | ||
32 | uint nx = (uint)x; | ||
33 | uint ny = (uint)y; | ||
34 | |||
35 | // Multiply grid coords to get region coords | ||
36 | nx *= 256; | ||
37 | ny *= 256; | ||
38 | |||
39 | // Stuff the IP address in too | ||
40 | nx = (uint)a << 16; | ||
41 | ny = (uint)b << 16; | ||
42 | |||
43 | handle = ((UInt64)nx << 32) | (uint)ny; | ||
44 | } | ||
45 | |||
46 | /// <summary> | ||
47 | /// Initialises a new RegionHandle that is not inter-grid aware | ||
48 | /// </summary> | ||
49 | /// <param name="x">Grid X Coordinate</param> | ||
50 | /// <param name="y">Grid Y Coordinate</param> | ||
51 | public RegionHandle(uint x, uint y) | ||
52 | { | ||
53 | handle = ((x * 256) << 32) | (y * 256); | ||
54 | } | ||
55 | |||
56 | /// <summary> | ||
57 | /// Initialises a new RegionHandle from an existing value | ||
58 | /// </summary> | ||
59 | /// <param name="Region">A U64 RegionHandle</param> | ||
60 | public RegionHandle(UInt64 Region) | ||
61 | { | ||
62 | handle = Region; | ||
63 | } | ||
64 | |||
65 | /// <summary> | ||
66 | /// Returns the Grid Masked RegionHandle - For use in Teleport packets and other packets where sending the grid IP address may be handy. | ||
67 | /// </summary> | ||
68 | /// <remarks>Do not use for SimulatorEnable packets. The client will choke.</remarks> | ||
69 | /// <returns>Region Handle including IP Address encoding</returns> | ||
70 | public UInt64 getTeleportHandle() | ||
71 | { | ||
72 | return handle; | ||
73 | } | ||
74 | |||
75 | /// <summary> | ||
76 | /// Returns a RegionHandle which may be used for SimulatorEnable packets. Removes the IP address encoding and returns the lower bounds. | ||
77 | /// </summary> | ||
78 | /// <returns>A U64 RegionHandle for use in SimulatorEnable packets.</returns> | ||
79 | public UInt64 getNeighbourHandle() | ||
80 | { | ||
81 | UInt64 mask = 0x0000FFFF0000FFFF; | ||
82 | |||
83 | return handle | mask; | ||
84 | } | ||
85 | |||
86 | /// <summary> | ||
87 | /// Returns the IP Address of the GridServer from a Grid-Encoded RegionHandle | ||
88 | /// </summary> | ||
89 | /// <returns>Grid Server IP Address</returns> | ||
90 | public IPAddress getGridIP() | ||
91 | { | ||
92 | uint a = (uint)((handle >> 16) & 0xFFFF); | ||
93 | uint b = (uint)((handle >> 48) & 0xFFFF); | ||
94 | |||
95 | return new IPAddress((long)(a << 16) | (long)b); | ||
96 | } | ||
97 | |||
98 | /// <summary> | ||
99 | /// Returns the X Coordinate from a Grid-Encoded RegionHandle | ||
100 | /// </summary> | ||
101 | /// <returns>X Coordinate</returns> | ||
102 | public uint getGridX() | ||
103 | { | ||
104 | uint x = (uint)((handle >> 32) & 0xFFFF); | ||
105 | |||
106 | return x; | ||
107 | } | ||
108 | |||
109 | /// <summary> | ||
110 | /// Returns the Y Coordinate from a Grid-Encoded RegionHandle | ||
111 | /// </summary> | ||
112 | /// <returns>Y Coordinate</returns> | ||
113 | public uint getGridY() | ||
114 | { | ||
115 | uint y = (uint)((handle >> 0) & 0xFFFF); | ||
116 | |||
117 | return y; | ||
118 | } | ||
119 | } | ||
120 | } | ||
diff --git a/OpenSim/Framework/General/Types/RegionInfo.cs b/OpenSim/Framework/General/Types/RegionInfo.cs new file mode 100644 index 0000000..48e6922 --- /dev/null +++ b/OpenSim/Framework/General/Types/RegionInfo.cs | |||
@@ -0,0 +1,304 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Globalization; | ||
32 | using OpenSim.Framework.Interfaces; | ||
33 | using OpenSim.Framework.Utilities; | ||
34 | using OpenSim.Framework.Console; | ||
35 | using libsecondlife; | ||
36 | |||
37 | namespace OpenSim.Framework.Types | ||
38 | { | ||
39 | public class RegionInfo | ||
40 | { | ||
41 | public LLUUID SimUUID = new LLUUID(); | ||
42 | public string RegionName = ""; | ||
43 | public uint RegionLocX = 0; | ||
44 | public uint RegionLocY = 0; | ||
45 | public ulong RegionHandle = 0; | ||
46 | |||
47 | public string DataStore = ""; | ||
48 | public bool isSandbox = false; | ||
49 | |||
50 | public LLUUID MasterAvatarAssignedUUID = new LLUUID(); | ||
51 | public string MasterAvatarFirstName = ""; | ||
52 | public string MasterAvatarLastName = ""; | ||
53 | public string MasterAvatarSandboxPassword = ""; | ||
54 | |||
55 | /// <summary> | ||
56 | /// Port used for listening (TCP and UDP) | ||
57 | /// </summary> | ||
58 | /// <remarks>Seperate TCP and UDP</remarks> | ||
59 | public int CommsIPListenPort = 0; | ||
60 | /// <summary> | ||
61 | /// Address used for internal listening (default: 0.0.0.0?) | ||
62 | /// </summary> | ||
63 | public string CommsIPListenAddr = ""; | ||
64 | /// <summary> | ||
65 | /// Address used for external addressing (DNS or IP) | ||
66 | /// </summary> | ||
67 | public string CommsExternalAddress = ""; | ||
68 | |||
69 | |||
70 | public EstateSettings estateSettings; | ||
71 | |||
72 | public RegionInfo() | ||
73 | { | ||
74 | estateSettings = new EstateSettings(); | ||
75 | } | ||
76 | |||
77 | |||
78 | public void InitConfig(bool sandboxMode, IGenericConfig configData) | ||
79 | { | ||
80 | this.isSandbox = sandboxMode; | ||
81 | try | ||
82 | { | ||
83 | // Sim UUID | ||
84 | string attri = ""; | ||
85 | attri = configData.GetAttribute("SimUUID"); | ||
86 | if (attri == "") | ||
87 | { | ||
88 | this.SimUUID = LLUUID.Random(); | ||
89 | configData.SetAttribute("SimUUID", this.SimUUID.ToString()); | ||
90 | } | ||
91 | else | ||
92 | { | ||
93 | this.SimUUID = new LLUUID(attri); | ||
94 | } | ||
95 | |||
96 | // Sim name | ||
97 | attri = ""; | ||
98 | attri = configData.GetAttribute("SimName"); | ||
99 | if (attri == "") | ||
100 | { | ||
101 | this.RegionName = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Name", "OpenSim test"); | ||
102 | configData.SetAttribute("SimName", this.RegionName); | ||
103 | } | ||
104 | else | ||
105 | { | ||
106 | this.RegionName = attri; | ||
107 | } | ||
108 | // Sim/Grid location X | ||
109 | attri = ""; | ||
110 | attri = configData.GetAttribute("SimLocationX"); | ||
111 | if (attri == "") | ||
112 | { | ||
113 | string location = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Grid Location X", "997"); | ||
114 | configData.SetAttribute("SimLocationX", location); | ||
115 | this.RegionLocX = (uint)Convert.ToUInt32(location); | ||
116 | } | ||
117 | else | ||
118 | { | ||
119 | this.RegionLocX = (uint)Convert.ToUInt32(attri); | ||
120 | } | ||
121 | // Sim/Grid location Y | ||
122 | attri = ""; | ||
123 | attri = configData.GetAttribute("SimLocationY"); | ||
124 | if (attri == "") | ||
125 | { | ||
126 | string location = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Grid Location Y", "996"); | ||
127 | configData.SetAttribute("SimLocationY", location); | ||
128 | this.RegionLocY = (uint)Convert.ToUInt32(location); | ||
129 | } | ||
130 | else | ||
131 | { | ||
132 | this.RegionLocY = (uint)Convert.ToUInt32(attri); | ||
133 | } | ||
134 | |||
135 | // Local storage datastore | ||
136 | attri = ""; | ||
137 | attri = configData.GetAttribute("Datastore"); | ||
138 | if (attri == "") | ||
139 | { | ||
140 | string datastore = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Filename for local storage", "localworld.yap"); | ||
141 | configData.SetAttribute("Datastore", datastore); | ||
142 | this.DataStore = datastore; | ||
143 | } | ||
144 | else | ||
145 | { | ||
146 | this.DataStore = attri; | ||
147 | } | ||
148 | |||
149 | //Sim Listen Port | ||
150 | attri = ""; | ||
151 | attri = configData.GetAttribute("SimListenPort"); | ||
152 | if (attri == "") | ||
153 | { | ||
154 | string port = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("UDP port for client connections", "9000"); | ||
155 | configData.SetAttribute("SimListenPort", port); | ||
156 | this.CommsIPListenPort = Convert.ToInt32(port); | ||
157 | } | ||
158 | else | ||
159 | { | ||
160 | this.CommsIPListenPort = Convert.ToInt32(attri); | ||
161 | } | ||
162 | |||
163 | //Sim Listen Address | ||
164 | attri = ""; | ||
165 | attri = configData.GetAttribute("SimListenAddress"); | ||
166 | if (attri == "") | ||
167 | { | ||
168 | this.CommsIPListenAddr = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("IP Address to listen on for client connections", "0.0.0.0"); | ||
169 | configData.SetAttribute("SimListenAddress", this.CommsIPListenAddr); | ||
170 | } | ||
171 | else | ||
172 | { | ||
173 | // Probably belongs elsewhere, but oh well. | ||
174 | if (attri.Trim().StartsWith("SYSTEMIP")) | ||
175 | { | ||
176 | string localhostname = System.Net.Dns.GetHostName(); | ||
177 | System.Net.IPAddress[] ips = System.Net.Dns.GetHostAddresses(localhostname); | ||
178 | try | ||
179 | { | ||
180 | this.CommsIPListenAddr = "0.0.0.0"; // Incase a IPv4 address isnt found | ||
181 | |||
182 | foreach (System.Net.IPAddress ip in ips) | ||
183 | { | ||
184 | if (ip.AddressFamily.ToString() == System.Net.Sockets.ProtocolFamily.InterNetwork.ToString()) | ||
185 | { | ||
186 | this.CommsIPListenAddr = ip.ToString(); | ||
187 | break; | ||
188 | } | ||
189 | } | ||
190 | } | ||
191 | catch (Exception e) | ||
192 | { | ||
193 | e.ToString(); | ||
194 | this.CommsIPListenAddr = "0.0.0.0"; // Use the default if we fail | ||
195 | } | ||
196 | } | ||
197 | else | ||
198 | { | ||
199 | this.CommsIPListenAddr = attri; | ||
200 | } | ||
201 | } | ||
202 | |||
203 | // Sim External Address | ||
204 | attri = ""; | ||
205 | attri = configData.GetAttribute("SimExternalAddress"); | ||
206 | if (attri == "") | ||
207 | { | ||
208 | this.CommsExternalAddress = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("IP or DNS address to send external clients to", "localhost"); | ||
209 | configData.SetAttribute("SimExternalAddress", this.CommsExternalAddress); | ||
210 | } | ||
211 | else | ||
212 | { | ||
213 | this.CommsExternalAddress = attri; | ||
214 | } | ||
215 | |||
216 | attri = ""; | ||
217 | attri = configData.GetAttribute("TerrainFile"); | ||
218 | if (attri == "") | ||
219 | { | ||
220 | this.estateSettings.terrainFile = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("GENERAL SETTING: Default Terrain File", "default.r32"); | ||
221 | configData.SetAttribute("TerrainFile", this.estateSettings.terrainFile); | ||
222 | } | ||
223 | else | ||
224 | { | ||
225 | this.estateSettings.terrainFile = attri; | ||
226 | } | ||
227 | |||
228 | attri = ""; | ||
229 | attri = configData.GetAttribute("TerrainMultiplier"); | ||
230 | if (attri == "") | ||
231 | { | ||
232 | string re = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("GENERAL SETTING: Terrain Height Multiplier", "60.0"); | ||
233 | this.estateSettings.terrainMultiplier = Convert.ToDouble(re, CultureInfo.InvariantCulture); | ||
234 | configData.SetAttribute("TerrainMultiplier", this.estateSettings.terrainMultiplier.ToString()); | ||
235 | } | ||
236 | else | ||
237 | { | ||
238 | this.estateSettings.terrainMultiplier = Convert.ToDouble(attri); | ||
239 | } | ||
240 | |||
241 | attri = ""; | ||
242 | attri = configData.GetAttribute("MasterAvatarFirstName"); | ||
243 | if (attri == "") | ||
244 | { | ||
245 | this.MasterAvatarFirstName = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("First name of Master Avatar (Land and Region Owner)", "Test"); | ||
246 | |||
247 | configData.SetAttribute("MasterAvatarFirstName", this.MasterAvatarFirstName); | ||
248 | } | ||
249 | else | ||
250 | { | ||
251 | this.MasterAvatarFirstName = attri; | ||
252 | } | ||
253 | |||
254 | attri = ""; | ||
255 | attri = configData.GetAttribute("MasterAvatarLastName"); | ||
256 | if (attri == "") | ||
257 | { | ||
258 | this.MasterAvatarLastName = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Last name of Master Avatar (Land and Region Owner)", "User"); | ||
259 | |||
260 | configData.SetAttribute("MasterAvatarLastName", this.MasterAvatarLastName); | ||
261 | } | ||
262 | else | ||
263 | { | ||
264 | this.MasterAvatarLastName = attri; | ||
265 | } | ||
266 | |||
267 | if (isSandbox) //Sandbox Mode Specific Settings | ||
268 | { | ||
269 | attri = ""; | ||
270 | attri = configData.GetAttribute("MasterAvatarSandboxPassword"); | ||
271 | if (attri == "") | ||
272 | { | ||
273 | this.MasterAvatarSandboxPassword = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Password of Master Avatar (Needed for sandbox mode account creation only)", "test"); | ||
274 | |||
275 | //Should I store this? | ||
276 | configData.SetAttribute("MasterAvatarSandboxPassword", this.MasterAvatarSandboxPassword); | ||
277 | } | ||
278 | else | ||
279 | { | ||
280 | this.MasterAvatarSandboxPassword = attri; | ||
281 | } | ||
282 | } | ||
283 | |||
284 | this.RegionHandle = Util.UIntsToLong((RegionLocX * 256), (RegionLocY * 256)); | ||
285 | |||
286 | configData.Commit(); | ||
287 | } | ||
288 | catch (Exception e) | ||
289 | { | ||
290 | OpenSim.Framework.Console.MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured"); | ||
291 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
292 | } | ||
293 | |||
294 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Sim settings loaded:"); | ||
295 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "UUID: " + this.SimUUID.ToStringHyphenated()); | ||
296 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Name: " + this.RegionName); | ||
297 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]"); | ||
298 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Region Handle: " + this.RegionHandle.ToString()); | ||
299 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Listening on IP: " + this.CommsIPListenAddr + ":" + this.CommsIPListenPort); | ||
300 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Sandbox Mode? " + isSandbox.ToString()); | ||
301 | |||
302 | } | ||
303 | } | ||
304 | } | ||
diff --git a/OpenSim/Framework/General/UserProfile.cs b/OpenSim/Framework/General/UserProfile.cs new file mode 100644 index 0000000..04ff20b --- /dev/null +++ b/OpenSim/Framework/General/UserProfile.cs | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using OpenSim.Framework.Inventory; | ||
33 | using System.Security.Cryptography; | ||
34 | |||
35 | namespace OpenSim.Framework.User | ||
36 | { | ||
37 | public class UserProfile | ||
38 | { | ||
39 | |||
40 | public string firstname; | ||
41 | public string lastname; | ||
42 | public ulong homeregionhandle; | ||
43 | public LLVector3 homepos; | ||
44 | public LLVector3 homelookat; | ||
45 | |||
46 | public bool IsGridGod = false; | ||
47 | public bool IsLocal = true; // will be used in future for visitors from foreign grids | ||
48 | public string AssetURL; | ||
49 | public string MD5passwd; | ||
50 | |||
51 | public LLUUID CurrentSessionID; | ||
52 | public LLUUID CurrentSecureSessionID; | ||
53 | public LLUUID UUID; | ||
54 | public Dictionary<LLUUID, uint> Circuits = new Dictionary<LLUUID, uint>(); // tracks circuit codes | ||
55 | |||
56 | public AgentInventory Inventory; | ||
57 | |||
58 | public UserProfile() | ||
59 | { | ||
60 | Circuits = new Dictionary<LLUUID, uint>(); | ||
61 | Inventory = new AgentInventory(); | ||
62 | homeregionhandle = Helpers.UIntsToLong((997 * 256), (996 * 256)); | ||
63 | homepos = new LLVector3(); | ||
64 | homelookat = new LLVector3(); | ||
65 | } | ||
66 | |||
67 | public void InitSessionData() | ||
68 | { | ||
69 | RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider(); | ||
70 | |||
71 | byte[] randDataS = new byte[16]; | ||
72 | byte[] randDataSS = new byte[16]; | ||
73 | |||
74 | rand.GetBytes(randDataS); | ||
75 | rand.GetBytes(randDataSS); | ||
76 | |||
77 | CurrentSecureSessionID = new LLUUID(randDataSS,0); | ||
78 | CurrentSessionID = new LLUUID(randDataS,0); | ||
79 | |||
80 | } | ||
81 | |||
82 | public void AddSimCircuit(uint circuitCode, LLUUID regionUUID) | ||
83 | { | ||
84 | if (this.Circuits.ContainsKey(regionUUID) == false) | ||
85 | this.Circuits.Add(regionUUID, circuitCode); | ||
86 | } | ||
87 | |||
88 | } | ||
89 | } | ||
diff --git a/OpenSim/Framework/General/Util.cs b/OpenSim/Framework/General/Util.cs new file mode 100644 index 0000000..8c34c9b --- /dev/null +++ b/OpenSim/Framework/General/Util.cs | |||
@@ -0,0 +1,186 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Security.Cryptography; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using libsecondlife; | ||
33 | using libsecondlife.Packets; | ||
34 | |||
35 | namespace OpenSim.Framework.Utilities | ||
36 | { | ||
37 | public class Util | ||
38 | { | ||
39 | private static Random randomClass = new Random(); | ||
40 | private static uint nextXferID = 5000; | ||
41 | private static object XferLock = new object(); | ||
42 | |||
43 | public static ulong UIntsToLong(uint X, uint Y) | ||
44 | { | ||
45 | return Helpers.UIntsToLong(X, Y); | ||
46 | } | ||
47 | |||
48 | public static Random RandomClass | ||
49 | { | ||
50 | get | ||
51 | { | ||
52 | return randomClass; | ||
53 | } | ||
54 | } | ||
55 | |||
56 | public static uint GetNextXferID() | ||
57 | { | ||
58 | uint id = 0; | ||
59 | lock(XferLock) | ||
60 | { | ||
61 | id = nextXferID; | ||
62 | nextXferID++; | ||
63 | } | ||
64 | return id; | ||
65 | } | ||
66 | |||
67 | public static int UnixTimeSinceEpoch() | ||
68 | { | ||
69 | TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1)); | ||
70 | int timestamp = (int)t.TotalSeconds; | ||
71 | return timestamp; | ||
72 | } | ||
73 | |||
74 | public static string Md5Hash(string pass) | ||
75 | { | ||
76 | MD5 md5 = MD5CryptoServiceProvider.Create(); | ||
77 | byte[] dataMd5 = md5.ComputeHash(Encoding.Default.GetBytes(pass)); | ||
78 | StringBuilder sb = new StringBuilder(); | ||
79 | for (int i = 0; i < dataMd5.Length; i++) | ||
80 | sb.AppendFormat("{0:x2}", dataMd5[i]); | ||
81 | return sb.ToString(); | ||
82 | } | ||
83 | |||
84 | public static string GetRandomCapsPath() | ||
85 | { | ||
86 | LLUUID caps = LLUUID.Random(); | ||
87 | string capsPath = caps.ToStringHyphenated(); | ||
88 | capsPath = capsPath.Remove(capsPath.Length - 4, 4); | ||
89 | return capsPath; | ||
90 | } | ||
91 | |||
92 | //public static int fast_distance2d(int x, int y) | ||
93 | //{ | ||
94 | // x = System.Math.Abs(x); | ||
95 | // y = System.Math.Abs(y); | ||
96 | |||
97 | // int min = System.Math.Min(x, y); | ||
98 | |||
99 | // return (x + y - (min >> 1) - (min >> 2) + (min >> 4)); | ||
100 | //} | ||
101 | |||
102 | public static string FieldToString(byte[] bytes) | ||
103 | { | ||
104 | return FieldToString(bytes, String.Empty); | ||
105 | } | ||
106 | |||
107 | /// <summary> | ||
108 | /// Convert a variable length field (byte array) to a string, with a | ||
109 | /// field name prepended to each line of the output | ||
110 | /// </summary> | ||
111 | /// <remarks>If the byte array has unprintable characters in it, a | ||
112 | /// hex dump will be put in the string instead</remarks> | ||
113 | /// <param name="bytes">The byte array to convert to a string</param> | ||
114 | /// <param name="fieldName">A field name to prepend to each line of output</param> | ||
115 | /// <returns>An ASCII string or a string containing a hex dump, minus | ||
116 | /// the null terminator</returns> | ||
117 | public static string FieldToString(byte[] bytes, string fieldName) | ||
118 | { | ||
119 | // Check for a common case | ||
120 | if (bytes.Length == 0) return String.Empty; | ||
121 | |||
122 | StringBuilder output = new StringBuilder(); | ||
123 | bool printable = true; | ||
124 | |||
125 | for (int i = 0; i < bytes.Length; ++i) | ||
126 | { | ||
127 | // Check if there are any unprintable characters in the array | ||
128 | if ((bytes[i] < 0x20 || bytes[i] > 0x7E) && bytes[i] != 0x09 | ||
129 | && bytes[i] != 0x0D && bytes[i] != 0x0A && bytes[i] != 0x00) | ||
130 | { | ||
131 | printable = false; | ||
132 | break; | ||
133 | } | ||
134 | } | ||
135 | |||
136 | if (printable) | ||
137 | { | ||
138 | if (fieldName.Length > 0) | ||
139 | { | ||
140 | output.Append(fieldName); | ||
141 | output.Append(": "); | ||
142 | } | ||
143 | |||
144 | if (bytes[bytes.Length - 1] == 0x00) | ||
145 | output.Append(UTF8Encoding.UTF8.GetString(bytes, 0, bytes.Length - 1)); | ||
146 | else | ||
147 | output.Append(UTF8Encoding.UTF8.GetString(bytes)); | ||
148 | } | ||
149 | else | ||
150 | { | ||
151 | for (int i = 0; i < bytes.Length; i += 16) | ||
152 | { | ||
153 | if (i != 0) | ||
154 | output.Append(Environment.NewLine); | ||
155 | if (fieldName.Length > 0) | ||
156 | { | ||
157 | output.Append(fieldName); | ||
158 | output.Append(": "); | ||
159 | } | ||
160 | |||
161 | for (int j = 0; j < 16; j++) | ||
162 | { | ||
163 | if ((i + j) < bytes.Length) | ||
164 | output.Append(String.Format("{0:X2} ", bytes[i + j])); | ||
165 | else | ||
166 | output.Append(" "); | ||
167 | } | ||
168 | |||
169 | for (int j = 0; j < 16 && (i + j) < bytes.Length; j++) | ||
170 | { | ||
171 | if (bytes[i + j] >= 0x20 && bytes[i + j] < 0x7E) | ||
172 | output.Append((char)bytes[i + j]); | ||
173 | else | ||
174 | output.Append("."); | ||
175 | } | ||
176 | } | ||
177 | } | ||
178 | |||
179 | return output.ToString(); | ||
180 | } | ||
181 | public Util() | ||
182 | { | ||
183 | |||
184 | } | ||
185 | } | ||
186 | } | ||
diff --git a/OpenSim/Framework/GenericConfig/Xml/OpenSim.Framework.GenericConfig.Xml.csproj b/OpenSim/Framework/GenericConfig/Xml/OpenSim.Framework.GenericConfig.Xml.csproj new file mode 100644 index 0000000..aae8cd2 --- /dev/null +++ b/OpenSim/Framework/GenericConfig/Xml/OpenSim.Framework.GenericConfig.Xml.csproj | |||
@@ -0,0 +1,93 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{C74E4A30-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.GenericConfig.Xml</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.GenericConfig.Xml</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="System" > | ||
62 | <HintPath>System.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System.Xml" > | ||
66 | <HintPath>System.Xml.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | </ItemGroup> | ||
70 | <ItemGroup> | ||
71 | <ProjectReference Include="..\..\General\OpenSim.Framework.csproj"> | ||
72 | <Name>OpenSim.Framework</Name> | ||
73 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
74 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
75 | <Private>False</Private> | ||
76 | </ProjectReference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | <Compile Include="XmlConfig.cs"> | ||
80 | <SubType>Code</SubType> | ||
81 | </Compile> | ||
82 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
83 | <SubType>Code</SubType> | ||
84 | </Compile> | ||
85 | </ItemGroup> | ||
86 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
87 | <PropertyGroup> | ||
88 | <PreBuildEvent> | ||
89 | </PreBuildEvent> | ||
90 | <PostBuildEvent> | ||
91 | </PostBuildEvent> | ||
92 | </PropertyGroup> | ||
93 | </Project> | ||
diff --git a/OpenSim/Framework/GenericConfig/Xml/OpenSim.Framework.GenericConfig.Xml.csproj.user b/OpenSim/Framework/GenericConfig/Xml/OpenSim.Framework.GenericConfig.Xml.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/GenericConfig/Xml/OpenSim.Framework.GenericConfig.Xml.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/GenericConfig/Xml/Properties/AssemblyInfo.cs b/OpenSim/Framework/GenericConfig/Xml/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..de5f48d --- /dev/null +++ b/OpenSim/Framework/GenericConfig/Xml/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenSim.GenericConfig")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenSim.GenericConfig")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("285a3047-f165-46c8-8767-b51428738a09")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Framework/GenericConfig/Xml/XmlConfig.cs b/OpenSim/Framework/GenericConfig/Xml/XmlConfig.cs new file mode 100644 index 0000000..c526aec --- /dev/null +++ b/OpenSim/Framework/GenericConfig/Xml/XmlConfig.cs | |||
@@ -0,0 +1,123 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Xml; | ||
32 | using OpenSim.Framework.Interfaces; | ||
33 | |||
34 | namespace OpenSim.GenericConfig | ||
35 | { | ||
36 | public class XmlConfig : IGenericConfig | ||
37 | { | ||
38 | private XmlDocument doc; | ||
39 | private XmlNode rootNode; | ||
40 | private XmlNode configNode; | ||
41 | private string fileName; | ||
42 | private bool createdFile = false; | ||
43 | |||
44 | public XmlConfig(string filename) | ||
45 | { | ||
46 | fileName = filename; | ||
47 | } | ||
48 | |||
49 | public void LoadData() | ||
50 | { | ||
51 | doc = new XmlDocument(); | ||
52 | |||
53 | if (System.IO.File.Exists(fileName)) | ||
54 | { | ||
55 | XmlTextReader reader = new XmlTextReader(fileName); | ||
56 | reader.WhitespaceHandling = WhitespaceHandling.None; | ||
57 | doc.Load(reader); | ||
58 | reader.Close(); | ||
59 | } | ||
60 | else | ||
61 | { | ||
62 | createdFile = true; | ||
63 | rootNode = doc.CreateNode(XmlNodeType.Element, "Root", ""); | ||
64 | doc.AppendChild(rootNode); | ||
65 | configNode = doc.CreateNode(XmlNodeType.Element, "Config", ""); | ||
66 | rootNode.AppendChild(configNode); | ||
67 | } | ||
68 | |||
69 | |||
70 | rootNode = doc.FirstChild; | ||
71 | if (rootNode.Name != "Root") | ||
72 | throw new Exception("Error: Invalid .xml File. Missing <Root>"); | ||
73 | |||
74 | configNode = rootNode.FirstChild; | ||
75 | if (configNode.Name != "Config") | ||
76 | throw new Exception("Error: Invalid .xml File. <Root> first child should be <Config>"); | ||
77 | |||
78 | if (createdFile) | ||
79 | { | ||
80 | this.Commit(); | ||
81 | } | ||
82 | } | ||
83 | |||
84 | public string GetAttribute(string attributeName) | ||
85 | { | ||
86 | string result = ""; | ||
87 | if (configNode.Attributes[attributeName] != null) | ||
88 | { | ||
89 | result = ((XmlAttribute)configNode.Attributes.GetNamedItem(attributeName)).Value; | ||
90 | } | ||
91 | return result; | ||
92 | } | ||
93 | |||
94 | public bool SetAttribute(string attributeName, string attributeValue) | ||
95 | { | ||
96 | if (configNode.Attributes[attributeName] != null) | ||
97 | { | ||
98 | ((XmlAttribute)configNode.Attributes.GetNamedItem(attributeName)).Value = attributeValue; | ||
99 | } | ||
100 | else | ||
101 | { | ||
102 | XmlAttribute attri; | ||
103 | attri = doc.CreateAttribute(attributeName); | ||
104 | attri.Value = attributeValue; | ||
105 | configNode.Attributes.Append(attri); | ||
106 | } | ||
107 | return true; | ||
108 | } | ||
109 | |||
110 | public void Commit() | ||
111 | { | ||
112 | doc.Save(fileName); | ||
113 | } | ||
114 | |||
115 | public void Close() | ||
116 | { | ||
117 | configNode = null; | ||
118 | rootNode = null; | ||
119 | doc = null; | ||
120 | } | ||
121 | |||
122 | } | ||
123 | } | ||
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs new file mode 100644 index 0000000..e55e33c --- /dev/null +++ b/OpenSim/Framework/Servers/BaseHttpServer.cs | |||
@@ -0,0 +1,312 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Net; | ||
31 | using System.Text; | ||
32 | using System.Text.RegularExpressions; | ||
33 | using System.Threading; | ||
34 | //using OpenSim.CAPS; | ||
35 | using Nwc.XmlRpc; | ||
36 | using System.Collections; | ||
37 | using OpenSim.Framework.Console; | ||
38 | |||
39 | namespace OpenSim.Servers | ||
40 | { | ||
41 | public class BaseHttpServer | ||
42 | { | ||
43 | protected class RestMethodEntry | ||
44 | { | ||
45 | private string m_path; | ||
46 | public string Path | ||
47 | { | ||
48 | get { return m_path; } | ||
49 | } | ||
50 | |||
51 | private RestMethod m_restMethod; | ||
52 | public RestMethod RestMethod | ||
53 | { | ||
54 | get { return m_restMethod; } | ||
55 | } | ||
56 | |||
57 | public RestMethodEntry(string path, RestMethod restMethod) | ||
58 | { | ||
59 | m_path = path; | ||
60 | m_restMethod = restMethod; | ||
61 | } | ||
62 | } | ||
63 | |||
64 | protected Thread m_workerThread; | ||
65 | protected HttpListener m_httpListener; | ||
66 | protected Dictionary<string, RestMethodEntry> m_restHandlers = new Dictionary<string, RestMethodEntry>(); | ||
67 | protected Dictionary<string, XmlRpcMethod> m_rpcHandlers = new Dictionary<string, XmlRpcMethod>(); | ||
68 | protected int m_port; | ||
69 | protected bool firstcaps = true; | ||
70 | |||
71 | public BaseHttpServer(int port) | ||
72 | { | ||
73 | m_port = port; | ||
74 | } | ||
75 | |||
76 | public bool AddRestHandler(string method, string path, RestMethod handler) | ||
77 | { | ||
78 | //Console.WriteLine("adding new REST handler for path " + path); | ||
79 | string methodKey = String.Format("{0}: {1}", method, path); | ||
80 | |||
81 | if (!this.m_restHandlers.ContainsKey(methodKey)) | ||
82 | { | ||
83 | this.m_restHandlers.Add(methodKey, new RestMethodEntry(path, handler)); | ||
84 | return true; | ||
85 | } | ||
86 | |||
87 | //must already have a handler for that path so return false | ||
88 | return false; | ||
89 | } | ||
90 | |||
91 | public bool RemoveRestHandler(string method, string path) | ||
92 | { | ||
93 | string methodKey = String.Format("{0}: {1}", method, path); | ||
94 | if (this.m_restHandlers.ContainsKey(methodKey)) | ||
95 | { | ||
96 | this.m_restHandlers.Remove(methodKey); | ||
97 | return true; | ||
98 | } | ||
99 | return false; | ||
100 | } | ||
101 | |||
102 | public bool AddXmlRPCHandler(string method, XmlRpcMethod handler) | ||
103 | { | ||
104 | if (!this.m_rpcHandlers.ContainsKey(method)) | ||
105 | { | ||
106 | this.m_rpcHandlers.Add(method, handler); | ||
107 | return true; | ||
108 | } | ||
109 | |||
110 | //must already have a handler for that path so return false | ||
111 | return false; | ||
112 | } | ||
113 | |||
114 | protected virtual string ProcessXMLRPCMethod(string methodName, XmlRpcRequest request) | ||
115 | { | ||
116 | XmlRpcResponse response; | ||
117 | |||
118 | XmlRpcMethod method; | ||
119 | if (this.m_rpcHandlers.TryGetValue(methodName, out method)) | ||
120 | { | ||
121 | response = method(request); | ||
122 | } | ||
123 | else | ||
124 | { | ||
125 | response = new XmlRpcResponse(); | ||
126 | Hashtable unknownMethodError = new Hashtable(); | ||
127 | unknownMethodError["reason"] = "XmlRequest"; ; | ||
128 | unknownMethodError["message"] = "Unknown Rpc request"; | ||
129 | unknownMethodError["login"] = "false"; | ||
130 | response.Value = unknownMethodError; | ||
131 | } | ||
132 | |||
133 | return XmlRpcResponseSerializer.Singleton.Serialize(response); | ||
134 | } | ||
135 | |||
136 | protected virtual string ParseREST(string request, string path, string method) | ||
137 | { | ||
138 | string response; | ||
139 | |||
140 | string requestKey = String.Format("{0}: {1}", method, path); | ||
141 | |||
142 | string bestMatch = String.Empty; | ||
143 | foreach (string currentKey in m_restHandlers.Keys) | ||
144 | { | ||
145 | if (requestKey.StartsWith(currentKey)) | ||
146 | { | ||
147 | if (currentKey.Length > bestMatch.Length) | ||
148 | { | ||
149 | bestMatch = currentKey; | ||
150 | } | ||
151 | } | ||
152 | } | ||
153 | |||
154 | RestMethodEntry restMethodEntry; | ||
155 | if (m_restHandlers.TryGetValue(bestMatch, out restMethodEntry)) | ||
156 | { | ||
157 | RestMethod restMethod = restMethodEntry.RestMethod; | ||
158 | |||
159 | string param = path.Substring(restMethodEntry.Path.Length); | ||
160 | response = restMethod(request, path, param); | ||
161 | |||
162 | } | ||
163 | else | ||
164 | { | ||
165 | response = String.Empty; | ||
166 | } | ||
167 | |||
168 | return response; | ||
169 | } | ||
170 | |||
171 | protected virtual string ParseLLSDXML(string requestBody) | ||
172 | { | ||
173 | // dummy function for now - IMPLEMENT ME! | ||
174 | Console.WriteLine("LLSD request "+requestBody); | ||
175 | string resp = ""; | ||
176 | if (firstcaps) | ||
177 | { | ||
178 | resp = "<llsd><map><key>MapLayer</key><string>http://127.0.0.1:9000/CAPS/</string></map></llsd>"; | ||
179 | firstcaps = false; | ||
180 | } | ||
181 | return resp; | ||
182 | } | ||
183 | |||
184 | protected virtual string ParseXMLRPC(string requestBody) | ||
185 | { | ||
186 | string responseString = String.Empty; | ||
187 | |||
188 | try | ||
189 | { | ||
190 | XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); | ||
191 | |||
192 | string methodName = request.MethodName; | ||
193 | |||
194 | responseString = ProcessXMLRPCMethod(methodName, request); | ||
195 | } | ||
196 | catch (Exception e) | ||
197 | { | ||
198 | Console.WriteLine(e.ToString()); | ||
199 | } | ||
200 | return responseString; | ||
201 | } | ||
202 | |||
203 | public virtual void HandleRequest(Object stateinfo) | ||
204 | { | ||
205 | try | ||
206 | { | ||
207 | HttpListenerContext context = (HttpListenerContext)stateinfo; | ||
208 | |||
209 | HttpListenerRequest request = context.Request; | ||
210 | HttpListenerResponse response = context.Response; | ||
211 | |||
212 | response.KeepAlive = false; | ||
213 | response.SendChunked = false; | ||
214 | |||
215 | System.IO.Stream body = request.InputStream; | ||
216 | System.Text.Encoding encoding = System.Text.Encoding.UTF8; | ||
217 | System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); | ||
218 | |||
219 | string requestBody = reader.ReadToEnd(); | ||
220 | body.Close(); | ||
221 | reader.Close(); | ||
222 | |||
223 | //Console.WriteLine(request.HttpMethod + " " + request.RawUrl + " Http/" + request.ProtocolVersion.ToString() + " content type: " + request.ContentType); | ||
224 | //Console.WriteLine(requestBody); | ||
225 | |||
226 | string responseString = ""; | ||
227 | // Console.WriteLine("new request " + request.ContentType +" at "+ request.RawUrl); | ||
228 | switch (request.ContentType) | ||
229 | { | ||
230 | case "text/xml": | ||
231 | // must be XML-RPC, so pass to the XML-RPC parser | ||
232 | |||
233 | responseString = ParseXMLRPC(requestBody); | ||
234 | responseString = Regex.Replace(responseString, "utf-16", "utf-8"); | ||
235 | |||
236 | response.AddHeader("Content-type", "text/xml"); | ||
237 | break; | ||
238 | |||
239 | case "application/xml": | ||
240 | // probably LLSD we hope, otherwise it should be ignored by the parser | ||
241 | // responseString = ParseLLSDXML(requestBody); | ||
242 | responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
243 | response.AddHeader("Content-type", "application/xml"); | ||
244 | break; | ||
245 | |||
246 | case "application/octet-stream": | ||
247 | // probably LLSD we hope, otherwise it should be ignored by the parser | ||
248 | // responseString = ParseLLSDXML(requestBody); | ||
249 | responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
250 | response.AddHeader("Content-type", "application/xml"); | ||
251 | break; | ||
252 | |||
253 | case "application/x-www-form-urlencoded": | ||
254 | // a form data POST so send to the REST parser | ||
255 | responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
256 | response.AddHeader("Content-type", "text/html"); | ||
257 | break; | ||
258 | |||
259 | case null: | ||
260 | // must be REST or invalid crap, so pass to the REST parser | ||
261 | responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
262 | response.AddHeader("Content-type", "text/html"); | ||
263 | break; | ||
264 | |||
265 | } | ||
266 | |||
267 | byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString); | ||
268 | System.IO.Stream output = response.OutputStream; | ||
269 | response.SendChunked = false; | ||
270 | response.ContentLength64 = buffer.Length; | ||
271 | output.Write(buffer, 0, buffer.Length); | ||
272 | output.Close(); | ||
273 | } | ||
274 | catch (Exception e) | ||
275 | { | ||
276 | Console.WriteLine(e.ToString()); | ||
277 | } | ||
278 | } | ||
279 | |||
280 | public void Start() | ||
281 | { | ||
282 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(LogPriority.LOW, "BaseHttpServer.cs: Starting up HTTP Server"); | ||
283 | |||
284 | m_workerThread = new Thread(new ThreadStart(StartHTTP)); | ||
285 | m_workerThread.IsBackground = true; | ||
286 | m_workerThread.Start(); | ||
287 | } | ||
288 | |||
289 | private void StartHTTP() | ||
290 | { | ||
291 | try | ||
292 | { | ||
293 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(LogPriority.LOW, "BaseHttpServer.cs: StartHTTP() - Spawned main thread OK"); | ||
294 | m_httpListener = new HttpListener(); | ||
295 | |||
296 | m_httpListener.Prefixes.Add("http://+:" + m_port + "/"); | ||
297 | m_httpListener.Start(); | ||
298 | |||
299 | HttpListenerContext context; | ||
300 | while (true) | ||
301 | { | ||
302 | context = m_httpListener.GetContext(); | ||
303 | ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context); | ||
304 | } | ||
305 | } | ||
306 | catch (Exception e) | ||
307 | { | ||
308 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(LogPriority.MEDIUM, e.Message); | ||
309 | } | ||
310 | } | ||
311 | } | ||
312 | } | ||
diff --git a/OpenSim/Framework/Servers/CheckSumServer.cs b/OpenSim/Framework/Servers/CheckSumServer.cs new file mode 100644 index 0000000..a359205 --- /dev/null +++ b/OpenSim/Framework/Servers/CheckSumServer.cs | |||
@@ -0,0 +1,141 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Text; | ||
30 | using System.IO; | ||
31 | using System.Threading; | ||
32 | using System.Net; | ||
33 | using System.Net.Sockets; | ||
34 | using System.Timers; | ||
35 | using System.Reflection; | ||
36 | using System.Collections; | ||
37 | using System.Collections.Generic; | ||
38 | using libsecondlife; | ||
39 | using libsecondlife.Packets; | ||
40 | using OpenSim.Framework.Console; | ||
41 | |||
42 | |||
43 | namespace OpenSim.Servers | ||
44 | { | ||
45 | /* public class CheckSumServer : UDPServerBase | ||
46 | { | ||
47 | //protected ConsoleBase m_log; | ||
48 | |||
49 | public CheckSumServer(int port) | ||
50 | : base(port) | ||
51 | { | ||
52 | } | ||
53 | |||
54 | protected override void OnReceivedData(IAsyncResult result) | ||
55 | { | ||
56 | ipeSender = new IPEndPoint(IPAddress.Any, 0); | ||
57 | epSender = (EndPoint)ipeSender; | ||
58 | Packet packet = null; | ||
59 | int numBytes = Server.EndReceiveFrom(result, ref epSender); | ||
60 | int packetEnd = numBytes - 1; | ||
61 | |||
62 | packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer); | ||
63 | |||
64 | if (packet.Type == PacketType.SecuredTemplateChecksumRequest) | ||
65 | { | ||
66 | SecuredTemplateChecksumRequestPacket checksum = (SecuredTemplateChecksumRequestPacket)packet; | ||
67 | TemplateChecksumReplyPacket checkreply = new TemplateChecksumReplyPacket(); | ||
68 | checkreply.DataBlock.Checksum = 3220703154;//180572585; | ||
69 | checkreply.DataBlock.Flags = 0; | ||
70 | checkreply.DataBlock.MajorVersion = 1; | ||
71 | checkreply.DataBlock.MinorVersion = 15; | ||
72 | checkreply.DataBlock.PatchVersion = 0; | ||
73 | checkreply.DataBlock.ServerVersion = 0; | ||
74 | checkreply.TokenBlock.Token = checksum.TokenBlock.Token; | ||
75 | this.SendPacket(checkreply, epSender); | ||
76 | |||
77 | /* | ||
78 | //if we wanted to echo the the checksum/ version from the client (so that any client worked) | ||
79 | SecuredTemplateChecksumRequestPacket checkrequest = new SecuredTemplateChecksumRequestPacket(); | ||
80 | checkrequest.TokenBlock.Token = checksum.TokenBlock.Token; | ||
81 | this.SendPacket(checkrequest, epSender); | ||
82 | |||
83 | } | ||
84 | else if (packet.Type == PacketType.TemplateChecksumReply) | ||
85 | { | ||
86 | //echo back the client checksum reply (Hegemon's method) | ||
87 | TemplateChecksumReplyPacket checksum2 = (TemplateChecksumReplyPacket)packet; | ||
88 | TemplateChecksumReplyPacket checkreply2 = new TemplateChecksumReplyPacket(); | ||
89 | checkreply2.DataBlock.Checksum = checksum2.DataBlock.Checksum; | ||
90 | checkreply2.DataBlock.Flags = checksum2.DataBlock.Flags; | ||
91 | checkreply2.DataBlock.MajorVersion = checksum2.DataBlock.MajorVersion; | ||
92 | checkreply2.DataBlock.MinorVersion = checksum2.DataBlock.MinorVersion; | ||
93 | checkreply2.DataBlock.PatchVersion = checksum2.DataBlock.PatchVersion; | ||
94 | checkreply2.DataBlock.ServerVersion = checksum2.DataBlock.ServerVersion; | ||
95 | checkreply2.TokenBlock.Token = checksum2.TokenBlock.Token; | ||
96 | this.SendPacket(checkreply2, epSender); | ||
97 | } | ||
98 | else | ||
99 | { | ||
100 | } | ||
101 | |||
102 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); | ||
103 | } | ||
104 | |||
105 | private void SendPacket(Packet Pack, EndPoint endp) | ||
106 | { | ||
107 | if (!Pack.Header.Resent) | ||
108 | { | ||
109 | Pack.Header.Sequence = 1; | ||
110 | } | ||
111 | |||
112 | byte[] ZeroOutBuffer = new byte[4096]; | ||
113 | byte[] sendbuffer; | ||
114 | sendbuffer = Pack.ToBytes(); | ||
115 | |||
116 | try | ||
117 | { | ||
118 | if (Pack.Header.Zerocoded) | ||
119 | { | ||
120 | int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer); | ||
121 | this.SendPackTo(ZeroOutBuffer, packetsize, SocketFlags.None, endp); | ||
122 | } | ||
123 | else | ||
124 | { | ||
125 | this.SendPackTo(sendbuffer, sendbuffer.Length, SocketFlags.None, endp); | ||
126 | } | ||
127 | } | ||
128 | catch (Exception) | ||
129 | { | ||
130 | OpenSim.Framework.Console.MainLog.Instance.Warn("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection "); | ||
131 | |||
132 | } | ||
133 | } | ||
134 | |||
135 | private void SendPackTo(byte[] buffer, int size, SocketFlags flags, EndPoint endp) | ||
136 | { | ||
137 | this.Server.SendTo(buffer, size, flags, endp); | ||
138 | } | ||
139 | * | ||
140 | }*/ | ||
141 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/Servers/IRestHandler.cs b/OpenSim/Framework/Servers/IRestHandler.cs new file mode 100644 index 0000000..3aa508c --- /dev/null +++ b/OpenSim/Framework/Servers/IRestHandler.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Servers | ||
33 | { | ||
34 | public delegate string RestMethod( string request, string path, string param ); | ||
35 | } | ||
diff --git a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj new file mode 100644 index 0000000..399f456 --- /dev/null +++ b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj | |||
@@ -0,0 +1,116 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{2CC71860-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.Servers</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.Servers</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Xml" > | ||
70 | <HintPath>System.Xml.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="XMLRPC.dll" > | ||
74 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | <ProjectReference Include="..\General\OpenSim.Framework.csproj"> | ||
80 | <Name>OpenSim.Framework</Name> | ||
81 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
82 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
83 | <Private>False</Private> | ||
84 | </ProjectReference> | ||
85 | <ProjectReference Include="..\Console\OpenSim.Framework.Console.csproj"> | ||
86 | <Name>OpenSim.Framework.Console</Name> | ||
87 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
88 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
89 | <Private>False</Private> | ||
90 | </ProjectReference> | ||
91 | </ItemGroup> | ||
92 | <ItemGroup> | ||
93 | <Compile Include="BaseHttpServer.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="CheckSumServer.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | <Compile Include="IRestHandler.cs"> | ||
100 | <SubType>Code</SubType> | ||
101 | </Compile> | ||
102 | <Compile Include="UDPServerBase.cs"> | ||
103 | <SubType>Code</SubType> | ||
104 | </Compile> | ||
105 | <Compile Include="XmlRpcMethod.cs"> | ||
106 | <SubType>Code</SubType> | ||
107 | </Compile> | ||
108 | </ItemGroup> | ||
109 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
110 | <PropertyGroup> | ||
111 | <PreBuildEvent> | ||
112 | </PreBuildEvent> | ||
113 | <PostBuildEvent> | ||
114 | </PostBuildEvent> | ||
115 | </PropertyGroup> | ||
116 | </Project> | ||
diff --git a/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj.user b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/Servers/OpenSim.Framework.Servers.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/Servers/UDPServerBase.cs b/OpenSim/Framework/Servers/UDPServerBase.cs new file mode 100644 index 0000000..b472c97 --- /dev/null +++ b/OpenSim/Framework/Servers/UDPServerBase.cs | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Text; | ||
30 | using System.IO; | ||
31 | using System.Threading; | ||
32 | using System.Net; | ||
33 | using System.Net.Sockets; | ||
34 | using System.Timers; | ||
35 | using System.Reflection; | ||
36 | using System.Collections; | ||
37 | using System.Collections.Generic; | ||
38 | using libsecondlife; | ||
39 | using libsecondlife.Packets; | ||
40 | |||
41 | namespace OpenSim.Servers | ||
42 | { | ||
43 | public class UDPServerBase | ||
44 | { | ||
45 | public Socket Server; | ||
46 | protected IPEndPoint ServerIncoming; | ||
47 | protected byte[] RecvBuffer = new byte[4096]; | ||
48 | protected byte[] ZeroBuffer = new byte[8192]; | ||
49 | protected IPEndPoint ipeSender; | ||
50 | protected EndPoint epSender; | ||
51 | protected AsyncCallback ReceivedData; | ||
52 | protected int listenPort; | ||
53 | |||
54 | public UDPServerBase(int port) | ||
55 | { | ||
56 | listenPort = port; | ||
57 | } | ||
58 | |||
59 | protected virtual void OnReceivedData(IAsyncResult result) | ||
60 | { | ||
61 | ipeSender = new IPEndPoint(IPAddress.Any, 0); | ||
62 | epSender = (EndPoint)ipeSender; | ||
63 | Packet packet = null; | ||
64 | int numBytes = Server.EndReceiveFrom(result, ref epSender); | ||
65 | int packetEnd = numBytes - 1; | ||
66 | |||
67 | packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer); | ||
68 | |||
69 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); | ||
70 | } | ||
71 | |||
72 | protected virtual void AddNewClient(Packet packet) | ||
73 | { | ||
74 | } | ||
75 | |||
76 | public virtual void ServerListener() | ||
77 | { | ||
78 | |||
79 | ServerIncoming = new IPEndPoint(IPAddress.Any, listenPort); | ||
80 | Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); | ||
81 | Server.Bind(ServerIncoming); | ||
82 | |||
83 | ipeSender = new IPEndPoint(IPAddress.Any, 0); | ||
84 | epSender = (EndPoint)ipeSender; | ||
85 | ReceivedData = new AsyncCallback(this.OnReceivedData); | ||
86 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); | ||
87 | } | ||
88 | |||
89 | public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode) | ||
90 | { | ||
91 | |||
92 | } | ||
93 | } | ||
94 | } | ||
95 | |||
diff --git a/OpenSim/Framework/Servers/XmlRpcMethod.cs b/OpenSim/Framework/Servers/XmlRpcMethod.cs new file mode 100644 index 0000000..05cbf2e --- /dev/null +++ b/OpenSim/Framework/Servers/XmlRpcMethod.cs | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using Nwc.XmlRpc; | ||
30 | |||
31 | namespace OpenSim.Servers | ||
32 | { | ||
33 | public delegate XmlRpcResponse XmlRpcMethod( XmlRpcRequest request ); | ||
34 | } | ||
diff --git a/OpenSim/Framework/UserManager/LoginResponse.cs b/OpenSim/Framework/UserManager/LoginResponse.cs new file mode 100644 index 0000000..5ca223f --- /dev/null +++ b/OpenSim/Framework/UserManager/LoginResponse.cs | |||
@@ -0,0 +1,645 @@ | |||
1 | using System; | ||
2 | using System.Text; | ||
3 | using System.Text.RegularExpressions; | ||
4 | using System.Threading; | ||
5 | using System.Collections; | ||
6 | using System.Xml; | ||
7 | using libsecondlife; | ||
8 | using OpenSim.Framework.Utilities; | ||
9 | using OpenSim.Framework.Interfaces; | ||
10 | using Nwc.XmlRpc; | ||
11 | |||
12 | namespace OpenSim.Framework.UserManagement | ||
13 | { | ||
14 | |||
15 | /// <summary> | ||
16 | /// A temp class to handle login response. | ||
17 | /// Should make use of UserProfileManager where possible. | ||
18 | /// </summary> | ||
19 | |||
20 | public class LoginResponse | ||
21 | { | ||
22 | private Hashtable loginFlagsHash; | ||
23 | private Hashtable globalTexturesHash; | ||
24 | private Hashtable loginError; | ||
25 | private Hashtable eventCategoriesHash; | ||
26 | private Hashtable uiConfigHash; | ||
27 | private Hashtable classifiedCategoriesHash; | ||
28 | |||
29 | private ArrayList loginFlags; | ||
30 | private ArrayList globalTextures; | ||
31 | private ArrayList eventCategories; | ||
32 | private ArrayList uiConfig; | ||
33 | private ArrayList classifiedCategories; | ||
34 | private ArrayList inventoryRoot; | ||
35 | private ArrayList initialOutfit; | ||
36 | private ArrayList agentInventory; | ||
37 | |||
38 | private UserInfo userProfile; | ||
39 | |||
40 | private LLUUID agentID; | ||
41 | private LLUUID sessionID; | ||
42 | private LLUUID secureSessionID; | ||
43 | |||
44 | // Login Flags | ||
45 | private string dst; | ||
46 | private string stipendSinceLogin; | ||
47 | private string gendered; | ||
48 | private string everLoggedIn; | ||
49 | private string login; | ||
50 | private int simPort; | ||
51 | private string simAddress; | ||
52 | private string agentAccess; | ||
53 | private Int32 circuitCode; | ||
54 | private uint regionX; | ||
55 | private uint regionY; | ||
56 | |||
57 | // Login | ||
58 | private string firstname; | ||
59 | private string lastname; | ||
60 | |||
61 | // Global Textures | ||
62 | private string sunTexture; | ||
63 | private string cloudTexture; | ||
64 | private string moonTexture; | ||
65 | |||
66 | // Error Flags | ||
67 | private string errorReason; | ||
68 | private string errorMessage; | ||
69 | |||
70 | // Response | ||
71 | private XmlRpcResponse xmlRpcResponse; | ||
72 | private XmlRpcResponse defaultXmlRpcResponse; | ||
73 | |||
74 | private string welcomeMessage; | ||
75 | private string startLocation; | ||
76 | private string allowFirstLife; | ||
77 | private string home; | ||
78 | private string seedCapability; | ||
79 | private string lookAt; | ||
80 | |||
81 | public LoginResponse() | ||
82 | { | ||
83 | this.loginFlags = new ArrayList(); | ||
84 | this.globalTextures = new ArrayList(); | ||
85 | this.eventCategories = new ArrayList(); | ||
86 | this.uiConfig = new ArrayList(); | ||
87 | this.classifiedCategories = new ArrayList(); | ||
88 | |||
89 | this.loginError = new Hashtable(); | ||
90 | this.eventCategoriesHash = new Hashtable(); | ||
91 | this.classifiedCategoriesHash = new Hashtable(); | ||
92 | this.uiConfigHash = new Hashtable(); | ||
93 | |||
94 | this.defaultXmlRpcResponse = new XmlRpcResponse(); | ||
95 | this.userProfile = new UserInfo(); | ||
96 | this.inventoryRoot = new ArrayList(); | ||
97 | this.initialOutfit = new ArrayList(); | ||
98 | this.agentInventory = new ArrayList(); | ||
99 | |||
100 | this.xmlRpcResponse = new XmlRpcResponse(); | ||
101 | this.defaultXmlRpcResponse = new XmlRpcResponse(); | ||
102 | |||
103 | this.SetDefaultValues(); | ||
104 | } // LoginServer | ||
105 | |||
106 | public void SetDefaultValues() | ||
107 | { | ||
108 | this.DST = "N"; | ||
109 | this.StipendSinceLogin = "N"; | ||
110 | this.Gendered = "Y"; | ||
111 | this.EverLoggedIn = "Y"; | ||
112 | this.login = "false"; | ||
113 | this.firstname = "Test"; | ||
114 | this.lastname = "User"; | ||
115 | this.agentAccess = "M"; | ||
116 | this.startLocation = "last"; | ||
117 | this.allowFirstLife = "Y"; | ||
118 | |||
119 | this.SunTexture = "cce0f112-878f-4586-a2e2-a8f104bba271"; | ||
120 | this.CloudTexture = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
121 | this.MoonTexture = "fc4b9f0b-d008-45c6-96a4-01dd947ac621"; | ||
122 | |||
123 | this.ErrorMessage = "You have entered an invalid name/password combination. Check Caps/lock."; | ||
124 | this.ErrorReason = "key"; | ||
125 | this.welcomeMessage = "Welcome to OpenSim!"; | ||
126 | this.seedCapability = ""; | ||
127 | this.home = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + this.userProfile.homepos.X.ToString() + ",r" + this.userProfile.homepos.Y.ToString() + ",r" + this.userProfile.homepos.Z.ToString() + "], 'look_at':[r" + this.userProfile.homelookat.X.ToString() + ",r" + this.userProfile.homelookat.Y.ToString() + ",r" + this.userProfile.homelookat.Z.ToString() + "]}"; | ||
128 | this.lookAt = "[r0.99949799999999999756,r0.03166859999999999814,r0]"; | ||
129 | this.RegionX = (uint)255232; | ||
130 | this.RegionY = (uint)254976; | ||
131 | |||
132 | // Classifieds; | ||
133 | this.AddClassifiedCategory((Int32)1, "Shopping"); | ||
134 | this.AddClassifiedCategory((Int32)2, "Land Rental"); | ||
135 | this.AddClassifiedCategory((Int32)3, "Property Rental"); | ||
136 | this.AddClassifiedCategory((Int32)4, "Special Attraction"); | ||
137 | this.AddClassifiedCategory((Int32)5, "New Products"); | ||
138 | this.AddClassifiedCategory((Int32)6, "Employment"); | ||
139 | this.AddClassifiedCategory((Int32)7, "Wanted"); | ||
140 | this.AddClassifiedCategory((Int32)8, "Service"); | ||
141 | this.AddClassifiedCategory((Int32)9, "Personal"); | ||
142 | |||
143 | |||
144 | this.SessionID = LLUUID.Random(); | ||
145 | this.SecureSessionID = LLUUID.Random(); | ||
146 | this.AgentID = LLUUID.Random(); | ||
147 | |||
148 | Hashtable InitialOutfitHash = new Hashtable(); | ||
149 | InitialOutfitHash["folder_name"] = "Nightclub Female"; | ||
150 | InitialOutfitHash["gender"] = "female"; | ||
151 | this.initialOutfit.Add(InitialOutfitHash); | ||
152 | |||
153 | |||
154 | } // SetDefaultValues | ||
155 | |||
156 | #region Login Failure Methods | ||
157 | public XmlRpcResponse GenerateFailureResponse(string reason, string message, string login) | ||
158 | { | ||
159 | // Overwrite any default values; | ||
160 | this.xmlRpcResponse = new XmlRpcResponse(); | ||
161 | |||
162 | // Ensure Login Failed message/reason; | ||
163 | this.ErrorMessage = message; | ||
164 | this.ErrorReason = reason; | ||
165 | |||
166 | this.loginError["reason"] = this.ErrorReason; | ||
167 | this.loginError["message"] = this.ErrorMessage; | ||
168 | this.loginError["login"] = login; | ||
169 | this.xmlRpcResponse.Value = this.loginError; | ||
170 | return (this.xmlRpcResponse); | ||
171 | } // GenerateResponse | ||
172 | |||
173 | public XmlRpcResponse CreateFailedResponse() | ||
174 | { | ||
175 | return (this.CreateLoginFailedResponse()); | ||
176 | } // CreateErrorConnectingToGridResponse() | ||
177 | |||
178 | public XmlRpcResponse CreateLoginFailedResponse() | ||
179 | { | ||
180 | return (this.GenerateFailureResponse("key", "Could not authenticate your avatar. Please check your username and password, and check the grid if problems persist.", "false")); | ||
181 | } // LoginFailedResponse | ||
182 | |||
183 | public XmlRpcResponse CreateAlreadyLoggedInResponse() | ||
184 | { | ||
185 | return (this.GenerateFailureResponse("presence", "You appear to be already logged in, if this is not the case please wait for your session to timeout, if this takes longer than a few minutes please contact the grid owner", "false")); | ||
186 | } // CreateAlreadyLoggedInResponse() | ||
187 | |||
188 | public XmlRpcResponse CreateDeadRegionResponse() | ||
189 | { | ||
190 | return (this.GenerateFailureResponse("key", "The region you are attempting to log into is not responding. Please select another region and try again.", "false")); | ||
191 | } | ||
192 | |||
193 | public XmlRpcResponse CreateGridErrorResponse() | ||
194 | { | ||
195 | return (this.GenerateFailureResponse("key", "Error connecting to grid. Could not percieve credentials from login XML.", "false")); | ||
196 | } | ||
197 | |||
198 | #endregion | ||
199 | |||
200 | public XmlRpcResponse ToXmlRpcResponse() | ||
201 | { | ||
202 | try | ||
203 | { | ||
204 | |||
205 | Hashtable responseData = new Hashtable(); | ||
206 | |||
207 | this.loginFlagsHash = new Hashtable(); | ||
208 | this.loginFlagsHash["daylight_savings"] = this.DST; | ||
209 | this.loginFlagsHash["stipend_since_login"] = this.StipendSinceLogin; | ||
210 | this.loginFlagsHash["gendered"] = this.Gendered; | ||
211 | this.loginFlagsHash["ever_logged_in"] = this.EverLoggedIn; | ||
212 | this.loginFlags.Add(this.loginFlagsHash); | ||
213 | |||
214 | responseData["first_name"] = this.Firstname; | ||
215 | responseData["last_name"] = this.Lastname; | ||
216 | responseData["agent_access"] = this.agentAccess; | ||
217 | |||
218 | this.globalTexturesHash = new Hashtable(); | ||
219 | this.globalTexturesHash["sun_texture_id"] = this.SunTexture; | ||
220 | this.globalTexturesHash["cloud_texture_id"] = this.CloudTexture; | ||
221 | this.globalTexturesHash["moon_texture_id"] = this.MoonTexture; | ||
222 | this.globalTextures.Add(this.globalTexturesHash); | ||
223 | this.eventCategories.Add(this.eventCategoriesHash); | ||
224 | |||
225 | this.AddToUIConfig("allow_first_life", this.allowFirstLife); | ||
226 | this.uiConfig.Add(this.uiConfigHash); | ||
227 | |||
228 | responseData["sim_port"] =(Int32) this.SimPort; | ||
229 | responseData["sim_ip"] = this.SimAddress; | ||
230 | responseData["agent_id"] = this.AgentID.ToStringHyphenated(); | ||
231 | responseData["session_id"] = this.SessionID.ToStringHyphenated(); | ||
232 | responseData["secure_session_id"] = this.SecureSessionID.ToStringHyphenated(); | ||
233 | responseData["circuit_code"] = this.CircuitCode; | ||
234 | responseData["seconds_since_epoch"] = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
235 | responseData["login-flags"] = this.loginFlags; | ||
236 | responseData["global-textures"] = this.globalTextures; | ||
237 | responseData["seed_capability"] = this.seedCapability; | ||
238 | |||
239 | responseData["event_categories"] = this.eventCategories; | ||
240 | responseData["event_notifications"] = new ArrayList(); // todo | ||
241 | responseData["classified_categories"] = this.classifiedCategories; | ||
242 | responseData["ui-config"] = this.uiConfig; | ||
243 | |||
244 | responseData["inventory-skeleton"] = this.agentInventory; | ||
245 | responseData["inventory-skel-lib"] = new ArrayList(); // todo | ||
246 | responseData["inventory-root"] = this.inventoryRoot; | ||
247 | responseData["gestures"] = new ArrayList(); // todo | ||
248 | responseData["inventory-lib-owner"] = new ArrayList(); // todo | ||
249 | responseData["initial-outfit"] = this.initialOutfit; | ||
250 | responseData["start_location"] = this.startLocation; | ||
251 | responseData["seed_capability"] = this.seedCapability; | ||
252 | responseData["home"] = this.home; | ||
253 | responseData["look_at"] = this.lookAt; | ||
254 | responseData["message"] = this.welcomeMessage; | ||
255 | responseData["region_x"] = (Int32)this.RegionX * 256; | ||
256 | responseData["region_y"] = (Int32)this.RegionY * 256; | ||
257 | |||
258 | //responseData["inventory-lib-root"] = new ArrayList(); // todo | ||
259 | //responseData["buddy-list"] = new ArrayList(); // todo | ||
260 | |||
261 | responseData["login"] = "true"; | ||
262 | this.xmlRpcResponse.Value = responseData; | ||
263 | |||
264 | return (this.xmlRpcResponse); | ||
265 | } | ||
266 | catch (Exception e) | ||
267 | { | ||
268 | OpenSim.Framework.Console.MainLog.Instance.WriteLine( | ||
269 | OpenSim.Framework.Console.LogPriority.LOW, | ||
270 | "LoginResponse: Error creating XML-RPC Response: " + e.Message | ||
271 | ); | ||
272 | return (this.GenerateFailureResponse("Internal Error", "Error generating Login Response", "false")); | ||
273 | |||
274 | } | ||
275 | |||
276 | } // ToXmlRpcResponse | ||
277 | |||
278 | public void SetEventCategories(string category, string value) | ||
279 | { | ||
280 | this.eventCategoriesHash[category] = value; | ||
281 | } // SetEventCategories | ||
282 | |||
283 | public void AddToUIConfig(string itemName, string item) | ||
284 | { | ||
285 | this.uiConfigHash[itemName] = item; | ||
286 | } // SetUIConfig | ||
287 | |||
288 | public void AddClassifiedCategory(Int32 ID, string categoryName) | ||
289 | { | ||
290 | this.classifiedCategoriesHash["category_name"] = categoryName; | ||
291 | this.classifiedCategoriesHash["category_id"] = ID; | ||
292 | this.classifiedCategories.Add(this.classifiedCategoriesHash); | ||
293 | // this.classifiedCategoriesHash.Clear(); | ||
294 | } // SetClassifiedCategory | ||
295 | |||
296 | #region Properties | ||
297 | public string Login | ||
298 | { | ||
299 | get | ||
300 | { | ||
301 | return this.login; | ||
302 | } | ||
303 | set | ||
304 | { | ||
305 | this.login = value; | ||
306 | } | ||
307 | } // Login | ||
308 | |||
309 | public string DST | ||
310 | { | ||
311 | get | ||
312 | { | ||
313 | return this.dst; | ||
314 | } | ||
315 | set | ||
316 | { | ||
317 | this.dst = value; | ||
318 | } | ||
319 | } // DST | ||
320 | |||
321 | public string StipendSinceLogin | ||
322 | { | ||
323 | get | ||
324 | { | ||
325 | return this.stipendSinceLogin; | ||
326 | } | ||
327 | set | ||
328 | { | ||
329 | this.stipendSinceLogin = value; | ||
330 | } | ||
331 | } // StipendSinceLogin | ||
332 | |||
333 | public string Gendered | ||
334 | { | ||
335 | get | ||
336 | { | ||
337 | return this.gendered; | ||
338 | } | ||
339 | set | ||
340 | { | ||
341 | this.gendered = value; | ||
342 | } | ||
343 | } // Gendered | ||
344 | |||
345 | public string EverLoggedIn | ||
346 | { | ||
347 | get | ||
348 | { | ||
349 | return this.everLoggedIn; | ||
350 | } | ||
351 | set | ||
352 | { | ||
353 | this.everLoggedIn = value; | ||
354 | } | ||
355 | } // EverLoggedIn | ||
356 | |||
357 | public int SimPort | ||
358 | { | ||
359 | get | ||
360 | { | ||
361 | return this.simPort; | ||
362 | } | ||
363 | set | ||
364 | { | ||
365 | this.simPort = value; | ||
366 | } | ||
367 | } // SimPort | ||
368 | |||
369 | public string SimAddress | ||
370 | { | ||
371 | get | ||
372 | { | ||
373 | return this.simAddress; | ||
374 | } | ||
375 | set | ||
376 | { | ||
377 | this.simAddress = value; | ||
378 | } | ||
379 | } // SimAddress | ||
380 | |||
381 | public LLUUID AgentID | ||
382 | { | ||
383 | get | ||
384 | { | ||
385 | return this.agentID; | ||
386 | } | ||
387 | set | ||
388 | { | ||
389 | this.agentID = value; | ||
390 | } | ||
391 | } // AgentID | ||
392 | |||
393 | public LLUUID SessionID | ||
394 | { | ||
395 | get | ||
396 | { | ||
397 | return this.sessionID; | ||
398 | } | ||
399 | set | ||
400 | { | ||
401 | this.sessionID = value; | ||
402 | } | ||
403 | } // SessionID | ||
404 | |||
405 | public LLUUID SecureSessionID | ||
406 | { | ||
407 | get | ||
408 | { | ||
409 | return this.secureSessionID; | ||
410 | } | ||
411 | set | ||
412 | { | ||
413 | this.secureSessionID = value; | ||
414 | } | ||
415 | } // SecureSessionID | ||
416 | |||
417 | public Int32 CircuitCode | ||
418 | { | ||
419 | get | ||
420 | { | ||
421 | return this.circuitCode; | ||
422 | } | ||
423 | set | ||
424 | { | ||
425 | this.circuitCode = value; | ||
426 | } | ||
427 | } // CircuitCode | ||
428 | |||
429 | public uint RegionX | ||
430 | { | ||
431 | get | ||
432 | { | ||
433 | return this.regionX; | ||
434 | } | ||
435 | set | ||
436 | { | ||
437 | this.regionX = value; | ||
438 | } | ||
439 | } // RegionX | ||
440 | |||
441 | public uint RegionY | ||
442 | { | ||
443 | get | ||
444 | { | ||
445 | return this.regionY; | ||
446 | } | ||
447 | set | ||
448 | { | ||
449 | this.regionY = value; | ||
450 | } | ||
451 | } // RegionY | ||
452 | |||
453 | public string SunTexture | ||
454 | { | ||
455 | get | ||
456 | { | ||
457 | return this.sunTexture; | ||
458 | } | ||
459 | set | ||
460 | { | ||
461 | this.sunTexture = value; | ||
462 | } | ||
463 | } // SunTexture | ||
464 | |||
465 | public string CloudTexture | ||
466 | { | ||
467 | get | ||
468 | { | ||
469 | return this.cloudTexture; | ||
470 | } | ||
471 | set | ||
472 | { | ||
473 | this.cloudTexture = value; | ||
474 | } | ||
475 | } // CloudTexture | ||
476 | |||
477 | public string MoonTexture | ||
478 | { | ||
479 | get | ||
480 | { | ||
481 | return this.moonTexture; | ||
482 | } | ||
483 | set | ||
484 | { | ||
485 | this.moonTexture = value; | ||
486 | } | ||
487 | } // MoonTexture | ||
488 | |||
489 | public string Firstname | ||
490 | { | ||
491 | get | ||
492 | { | ||
493 | return this.firstname; | ||
494 | } | ||
495 | set | ||
496 | { | ||
497 | this.firstname = value; | ||
498 | } | ||
499 | } // Firstname | ||
500 | |||
501 | public string Lastname | ||
502 | { | ||
503 | get | ||
504 | { | ||
505 | return this.lastname; | ||
506 | } | ||
507 | set | ||
508 | { | ||
509 | this.lastname = value; | ||
510 | } | ||
511 | } // Lastname | ||
512 | |||
513 | public string AgentAccess | ||
514 | { | ||
515 | get | ||
516 | { | ||
517 | return this.agentAccess; | ||
518 | } | ||
519 | set | ||
520 | { | ||
521 | this.agentAccess = value; | ||
522 | } | ||
523 | } | ||
524 | |||
525 | public string StartLocation | ||
526 | { | ||
527 | get | ||
528 | { | ||
529 | return this.startLocation; | ||
530 | } | ||
531 | set | ||
532 | { | ||
533 | this.startLocation = value; | ||
534 | } | ||
535 | } // StartLocation | ||
536 | |||
537 | public string LookAt | ||
538 | { | ||
539 | get | ||
540 | { | ||
541 | return this.lookAt; | ||
542 | } | ||
543 | set | ||
544 | { | ||
545 | this.lookAt = value; | ||
546 | } | ||
547 | } | ||
548 | |||
549 | public string SeedCapability | ||
550 | { | ||
551 | get | ||
552 | { | ||
553 | return this.seedCapability; | ||
554 | } | ||
555 | set | ||
556 | { | ||
557 | this.seedCapability = value; | ||
558 | } | ||
559 | } // SeedCapability | ||
560 | |||
561 | public string ErrorReason | ||
562 | { | ||
563 | get | ||
564 | { | ||
565 | return this.errorReason; | ||
566 | } | ||
567 | set | ||
568 | { | ||
569 | this.errorReason = value; | ||
570 | } | ||
571 | } // ErrorReason | ||
572 | |||
573 | public string ErrorMessage | ||
574 | { | ||
575 | get | ||
576 | { | ||
577 | return this.errorMessage; | ||
578 | } | ||
579 | set | ||
580 | { | ||
581 | this.errorMessage = value; | ||
582 | } | ||
583 | } // ErrorMessage | ||
584 | |||
585 | public ArrayList InventoryRoot | ||
586 | { | ||
587 | get | ||
588 | { | ||
589 | return this.inventoryRoot; | ||
590 | } | ||
591 | set | ||
592 | { | ||
593 | this.inventoryRoot = value; | ||
594 | } | ||
595 | } | ||
596 | |||
597 | public ArrayList InventorySkeleton | ||
598 | { | ||
599 | get | ||
600 | { | ||
601 | return this.agentInventory; | ||
602 | } | ||
603 | set | ||
604 | { | ||
605 | this.agentInventory = value; | ||
606 | } | ||
607 | } | ||
608 | |||
609 | public string Home | ||
610 | { | ||
611 | get | ||
612 | { | ||
613 | return this.home; | ||
614 | } | ||
615 | set | ||
616 | { | ||
617 | this.home = value; | ||
618 | } | ||
619 | } | ||
620 | |||
621 | public string Message | ||
622 | { | ||
623 | get | ||
624 | { | ||
625 | return this.welcomeMessage; | ||
626 | } | ||
627 | set | ||
628 | { | ||
629 | this.welcomeMessage = value; | ||
630 | } | ||
631 | } | ||
632 | #endregion | ||
633 | |||
634 | |||
635 | public class UserInfo | ||
636 | { | ||
637 | public string firstname; | ||
638 | public string lastname; | ||
639 | public ulong homeregionhandle; | ||
640 | public LLVector3 homepos; | ||
641 | public LLVector3 homelookat; | ||
642 | } | ||
643 | } | ||
644 | } | ||
645 | |||
diff --git a/OpenSim/Framework/UserManager/OpenSim.Framework.UserManagement.csproj b/OpenSim/Framework/UserManager/OpenSim.Framework.UserManagement.csproj new file mode 100644 index 0000000..02aa3f3 --- /dev/null +++ b/OpenSim/Framework/UserManager/OpenSim.Framework.UserManagement.csproj | |||
@@ -0,0 +1,125 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{586E2916-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Framework.UserManagement</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Framework.UserManagement</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="OpenSim.Framework" > | ||
70 | <HintPath>OpenSim.Framework.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="OpenSim.Framework.Console" > | ||
74 | <HintPath>OpenSim.Framework.Console.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="OpenSim.Framework.GenericConfig.Xml" > | ||
78 | <HintPath>OpenSim.Framework.GenericConfig.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="OpenSim.Framework.Servers" > | ||
82 | <HintPath>OpenSim.Framework.Servers.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="System" > | ||
86 | <HintPath>System.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | <Reference Include="System.Data" > | ||
90 | <HintPath>System.Data.dll</HintPath> | ||
91 | <Private>False</Private> | ||
92 | </Reference> | ||
93 | <Reference Include="System.Xml" > | ||
94 | <HintPath>System.Xml.dll</HintPath> | ||
95 | <Private>False</Private> | ||
96 | </Reference> | ||
97 | <Reference Include="XMLRPC.dll" > | ||
98 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
99 | <Private>False</Private> | ||
100 | </Reference> | ||
101 | </ItemGroup> | ||
102 | <ItemGroup> | ||
103 | <ProjectReference Include="..\Data\OpenSim.Framework.Data.csproj"> | ||
104 | <Name>OpenSim.Framework.Data</Name> | ||
105 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
106 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
107 | <Private>False</Private> | ||
108 | </ProjectReference> | ||
109 | </ItemGroup> | ||
110 | <ItemGroup> | ||
111 | <Compile Include="LoginResponse.cs"> | ||
112 | <SubType>Code</SubType> | ||
113 | </Compile> | ||
114 | <Compile Include="UserManagerBase.cs"> | ||
115 | <SubType>Code</SubType> | ||
116 | </Compile> | ||
117 | </ItemGroup> | ||
118 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
119 | <PropertyGroup> | ||
120 | <PreBuildEvent> | ||
121 | </PreBuildEvent> | ||
122 | <PostBuildEvent> | ||
123 | </PostBuildEvent> | ||
124 | </PropertyGroup> | ||
125 | </Project> | ||
diff --git a/OpenSim/Framework/UserManager/OpenSim.Framework.UserManagement.csproj.user b/OpenSim/Framework/UserManager/OpenSim.Framework.UserManagement.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Framework/UserManager/OpenSim.Framework.UserManagement.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Framework/UserManager/UserManagerBase.cs b/OpenSim/Framework/UserManager/UserManagerBase.cs new file mode 100644 index 0000000..eb46c14 --- /dev/null +++ b/OpenSim/Framework/UserManager/UserManagerBase.cs | |||
@@ -0,0 +1,641 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using OpenSim.Framework.Data; | ||
33 | using libsecondlife; | ||
34 | using System.Reflection; | ||
35 | |||
36 | using System.Xml; | ||
37 | using Nwc.XmlRpc; | ||
38 | using OpenSim.Framework.Sims; | ||
39 | using OpenSim.Framework.Inventory; | ||
40 | using OpenSim.Framework.Utilities; | ||
41 | |||
42 | using System.Security.Cryptography; | ||
43 | |||
44 | namespace OpenSim.Framework.UserManagement | ||
45 | { | ||
46 | public class UserManagerBase | ||
47 | { | ||
48 | public OpenSim.Framework.Interfaces.UserConfig _config; | ||
49 | Dictionary<string, IUserData> _plugins = new Dictionary<string, IUserData>(); | ||
50 | |||
51 | /// <summary> | ||
52 | /// Adds a new user server plugin - user servers will be requested in the order they were loaded. | ||
53 | /// </summary> | ||
54 | /// <param name="FileName">The filename to the user server plugin DLL</param> | ||
55 | public void AddPlugin(string FileName) | ||
56 | { | ||
57 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Userstorage: Attempting to load " + FileName); | ||
58 | Assembly pluginAssembly = Assembly.LoadFrom(FileName); | ||
59 | |||
60 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Userstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces."); | ||
61 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
62 | { | ||
63 | if (!pluginType.IsAbstract) | ||
64 | { | ||
65 | Type typeInterface = pluginType.GetInterface("IUserData", true); | ||
66 | |||
67 | if (typeInterface != null) | ||
68 | { | ||
69 | IUserData plug = (IUserData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
70 | plug.Initialise(); | ||
71 | this._plugins.Add(plug.getName(), plug); | ||
72 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Userstorage: Added IUserData Interface"); | ||
73 | } | ||
74 | |||
75 | typeInterface = null; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | pluginAssembly = null; | ||
80 | } | ||
81 | |||
82 | #region Get UserProfile | ||
83 | /// <summary> | ||
84 | /// Loads a user profile from a database by UUID | ||
85 | /// </summary> | ||
86 | /// <param name="uuid">The target UUID</param> | ||
87 | /// <returns>A user profile</returns> | ||
88 | public UserProfileData getUserProfile(LLUUID uuid) | ||
89 | { | ||
90 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
91 | { | ||
92 | try | ||
93 | { | ||
94 | UserProfileData profile = plugin.Value.getUserByUUID(uuid); | ||
95 | profile.currentAgent = getUserAgent(profile.UUID); | ||
96 | return profile; | ||
97 | } | ||
98 | catch (Exception e) | ||
99 | { | ||
100 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")"); | ||
101 | } | ||
102 | } | ||
103 | |||
104 | return null; | ||
105 | } | ||
106 | |||
107 | |||
108 | /// <summary> | ||
109 | /// Loads a user profile by name | ||
110 | /// </summary> | ||
111 | /// <param name="name">The target name</param> | ||
112 | /// <returns>A user profile</returns> | ||
113 | public UserProfileData getUserProfile(string name) | ||
114 | { | ||
115 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
116 | { | ||
117 | try | ||
118 | { | ||
119 | UserProfileData profile = plugin.Value.getUserByName(name); | ||
120 | profile.currentAgent = getUserAgent(profile.UUID); | ||
121 | return profile; | ||
122 | } | ||
123 | catch (Exception e) | ||
124 | { | ||
125 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")"); | ||
126 | } | ||
127 | } | ||
128 | |||
129 | return null; | ||
130 | } | ||
131 | |||
132 | /// <summary> | ||
133 | /// Loads a user profile by name | ||
134 | /// </summary> | ||
135 | /// <param name="fname">First name</param> | ||
136 | /// <param name="lname">Last name</param> | ||
137 | /// <returns>A user profile</returns> | ||
138 | public UserProfileData getUserProfile(string fname, string lname) | ||
139 | { | ||
140 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
141 | { | ||
142 | try | ||
143 | { | ||
144 | UserProfileData profile = plugin.Value.getUserByName(fname,lname); | ||
145 | try | ||
146 | { | ||
147 | profile.currentAgent = getUserAgent(profile.UUID); | ||
148 | } | ||
149 | catch (Exception e) | ||
150 | { | ||
151 | // Ignore | ||
152 | } | ||
153 | return profile; | ||
154 | } | ||
155 | catch (Exception e) | ||
156 | { | ||
157 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")"); | ||
158 | } | ||
159 | } | ||
160 | |||
161 | return null; | ||
162 | } | ||
163 | #endregion | ||
164 | |||
165 | #region Get UserAgent | ||
166 | /// <summary> | ||
167 | /// Loads a user agent by uuid (not called directly) | ||
168 | /// </summary> | ||
169 | /// <param name="uuid">The agents UUID</param> | ||
170 | /// <returns>Agent profiles</returns> | ||
171 | public UserAgentData getUserAgent(LLUUID uuid) | ||
172 | { | ||
173 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
174 | { | ||
175 | try | ||
176 | { | ||
177 | return plugin.Value.getAgentByUUID(uuid); | ||
178 | } | ||
179 | catch (Exception e) | ||
180 | { | ||
181 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")"); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | return null; | ||
186 | } | ||
187 | |||
188 | /// <summary> | ||
189 | /// Loads a user agent by name (not called directly) | ||
190 | /// </summary> | ||
191 | /// <param name="name">The agents name</param> | ||
192 | /// <returns>A user agent</returns> | ||
193 | public UserAgentData getUserAgent(string name) | ||
194 | { | ||
195 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
196 | { | ||
197 | try | ||
198 | { | ||
199 | return plugin.Value.getAgentByName(name); | ||
200 | } | ||
201 | catch (Exception e) | ||
202 | { | ||
203 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")"); | ||
204 | } | ||
205 | } | ||
206 | |||
207 | return null; | ||
208 | } | ||
209 | |||
210 | /// <summary> | ||
211 | /// Loads a user agent by name (not called directly) | ||
212 | /// </summary> | ||
213 | /// <param name="fname">The agents firstname</param> | ||
214 | /// <param name="lname">The agents lastname</param> | ||
215 | /// <returns>A user agent</returns> | ||
216 | public UserAgentData getUserAgent(string fname, string lname) | ||
217 | { | ||
218 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
219 | { | ||
220 | try | ||
221 | { | ||
222 | return plugin.Value.getAgentByName(fname,lname); | ||
223 | } | ||
224 | catch (Exception e) | ||
225 | { | ||
226 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Unable to find user via " + plugin.Key + "(" + e.ToString() + ")"); | ||
227 | } | ||
228 | } | ||
229 | |||
230 | return null; | ||
231 | } | ||
232 | |||
233 | #endregion | ||
234 | |||
235 | #region CreateAgent | ||
236 | /// <summary> | ||
237 | /// Creates and initialises a new user agent - make sure to use CommitAgent when done to submit to the DB | ||
238 | /// </summary> | ||
239 | /// <param name="profile">The users profile</param> | ||
240 | /// <param name="request">The users loginrequest</param> | ||
241 | public void CreateAgent(ref UserProfileData profile, XmlRpcRequest request) | ||
242 | { | ||
243 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
244 | |||
245 | UserAgentData agent = new UserAgentData(); | ||
246 | |||
247 | // User connection | ||
248 | agent.agentIP = ""; | ||
249 | agent.agentOnline = true; | ||
250 | agent.agentPort = 0; | ||
251 | |||
252 | // Generate sessions | ||
253 | RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider(); | ||
254 | byte[] randDataS = new byte[16]; | ||
255 | byte[] randDataSS = new byte[16]; | ||
256 | rand.GetBytes(randDataS); | ||
257 | rand.GetBytes(randDataSS); | ||
258 | |||
259 | agent.secureSessionID = new LLUUID(randDataSS, 0); | ||
260 | agent.sessionID = new LLUUID(randDataS, 0); | ||
261 | |||
262 | // Profile UUID | ||
263 | agent.UUID = profile.UUID; | ||
264 | |||
265 | // Current position (from Home) | ||
266 | agent.currentHandle = profile.homeRegion; | ||
267 | agent.currentPos = profile.homeLocation; | ||
268 | |||
269 | // If user specified additional start, use that | ||
270 | if (requestData.ContainsKey("start")) | ||
271 | { | ||
272 | string startLoc = ((string)requestData["start"]).Trim(); | ||
273 | if (!(startLoc == "last" || startLoc == "home")) | ||
274 | { | ||
275 | // Format: uri:Ahern&162&213&34 | ||
276 | try | ||
277 | { | ||
278 | string[] parts = startLoc.Remove(0, 4).Split('&'); | ||
279 | string region = parts[0]; | ||
280 | |||
281 | //////////////////////////////////////////////////// | ||
282 | //SimProfile SimInfo = new SimProfile(); | ||
283 | //SimInfo = SimInfo.LoadFromGrid(theUser.currentAgent.currentHandle, _config.GridServerURL, _config.GridSendKey, _config.GridRecvKey); | ||
284 | } | ||
285 | catch (Exception e) | ||
286 | { | ||
287 | |||
288 | } | ||
289 | } | ||
290 | } | ||
291 | |||
292 | // What time did the user login? | ||
293 | agent.loginTime = Util.UnixTimeSinceEpoch(); | ||
294 | agent.logoutTime = 0; | ||
295 | |||
296 | // Current location | ||
297 | agent.regionID = new LLUUID(); // Fill in later | ||
298 | agent.currentRegion = new LLUUID(); // Fill in later | ||
299 | |||
300 | profile.currentAgent = agent; | ||
301 | } | ||
302 | |||
303 | /// <summary> | ||
304 | /// Saves a target agent to the database | ||
305 | /// </summary> | ||
306 | /// <param name="profile">The users profile</param> | ||
307 | /// <returns>Successful?</returns> | ||
308 | public bool CommitAgent(ref UserProfileData profile) | ||
309 | { | ||
310 | // Saves the agent to database | ||
311 | return true; | ||
312 | } | ||
313 | |||
314 | #endregion | ||
315 | |||
316 | /// <summary> | ||
317 | /// Checks a user against it's password hash | ||
318 | /// </summary> | ||
319 | /// <param name="profile">The users profile</param> | ||
320 | /// <param name="password">The supplied password</param> | ||
321 | /// <returns>Authenticated?</returns> | ||
322 | public virtual bool AuthenticateUser(ref UserProfileData profile, string password) | ||
323 | { | ||
324 | OpenSim.Framework.Console.MainLog.Instance.Verbose( | ||
325 | "Authenticating " + profile.username + " " + profile.surname); | ||
326 | |||
327 | password = password.Remove(0, 3); //remove $1$ | ||
328 | |||
329 | string s = Util.Md5Hash(password + ":" + profile.passwordSalt); | ||
330 | |||
331 | return profile.passwordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase); | ||
332 | } | ||
333 | |||
334 | #region Xml Response | ||
335 | |||
336 | /// <summary> | ||
337 | /// | ||
338 | /// </summary> | ||
339 | /// <param name="firstname"></param> | ||
340 | /// <param name="lastname"></param> | ||
341 | /// <returns></returns> | ||
342 | public virtual UserProfileData GetTheUser(string firstname, string lastname) | ||
343 | { | ||
344 | return getUserProfile(firstname, lastname); | ||
345 | } | ||
346 | |||
347 | /// <summary> | ||
348 | /// | ||
349 | /// </summary> | ||
350 | /// <returns></returns> | ||
351 | public virtual string GetMessage() | ||
352 | { | ||
353 | return _config.DefaultStartupMsg; | ||
354 | } | ||
355 | |||
356 | /// <summary> | ||
357 | /// Customises the login response and fills in missing values. | ||
358 | /// </summary> | ||
359 | /// <param name="response">The existing response</param> | ||
360 | /// <param name="theUser">The user profile</param> | ||
361 | public virtual void CustomiseResponse(ref LoginResponse response, ref UserProfileData theUser) | ||
362 | { | ||
363 | |||
364 | } | ||
365 | |||
366 | /// <summary> | ||
367 | /// Main user login function | ||
368 | /// </summary> | ||
369 | /// <param name="request">The XMLRPC request</param> | ||
370 | /// <returns>The response to send</returns> | ||
371 | public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request) | ||
372 | { | ||
373 | XmlRpcResponse response = new XmlRpcResponse(); | ||
374 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
375 | |||
376 | bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd")); | ||
377 | bool GoodLogin = false; | ||
378 | string firstname = ""; | ||
379 | string lastname = ""; | ||
380 | string passwd = ""; | ||
381 | |||
382 | UserProfileData TheUser; | ||
383 | LoginResponse logResponse = new LoginResponse(); | ||
384 | |||
385 | if (GoodXML) | ||
386 | { | ||
387 | firstname = (string)requestData["first"]; | ||
388 | lastname = (string)requestData["last"]; | ||
389 | passwd = (string)requestData["passwd"]; | ||
390 | |||
391 | TheUser = GetTheUser(firstname, lastname); | ||
392 | if (TheUser == null) | ||
393 | return logResponse.CreateLoginFailedResponse(); | ||
394 | |||
395 | GoodLogin = AuthenticateUser(ref TheUser, passwd); | ||
396 | } | ||
397 | else | ||
398 | { | ||
399 | return logResponse.CreateGridErrorResponse(); | ||
400 | } | ||
401 | |||
402 | if (!GoodLogin) | ||
403 | { | ||
404 | return logResponse.CreateLoginFailedResponse(); | ||
405 | } | ||
406 | else | ||
407 | { | ||
408 | // If we already have a session... | ||
409 | if (TheUser.currentAgent != null && TheUser.currentAgent.agentOnline) | ||
410 | { | ||
411 | // Reject the login | ||
412 | return logResponse.CreateAlreadyLoggedInResponse(); | ||
413 | } | ||
414 | // Otherwise... | ||
415 | // Create a new agent session | ||
416 | CreateAgent(ref TheUser, request); | ||
417 | |||
418 | try | ||
419 | { | ||
420 | |||
421 | LLUUID AgentID = TheUser.UUID; | ||
422 | |||
423 | // Inventory Library Section | ||
424 | ArrayList AgentInventoryArray = new ArrayList(); | ||
425 | Hashtable TempHash; | ||
426 | |||
427 | AgentInventory Library = new AgentInventory(); | ||
428 | Library.CreateRootFolder(AgentID, true); | ||
429 | |||
430 | foreach (InventoryFolder InvFolder in Library.InventoryFolders.Values) | ||
431 | { | ||
432 | TempHash = new Hashtable(); | ||
433 | TempHash["name"] = InvFolder.FolderName; | ||
434 | TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated(); | ||
435 | TempHash["version"] = (Int32)InvFolder.Version; | ||
436 | TempHash["type_default"] = (Int32)InvFolder.DefaultType; | ||
437 | TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated(); | ||
438 | AgentInventoryArray.Add(TempHash); | ||
439 | } | ||
440 | |||
441 | Hashtable InventoryRootHash = new Hashtable(); | ||
442 | InventoryRootHash["folder_id"] = Library.InventoryRoot.FolderID.ToStringHyphenated(); | ||
443 | ArrayList InventoryRoot = new ArrayList(); | ||
444 | InventoryRoot.Add(InventoryRootHash); | ||
445 | |||
446 | // Circuit Code | ||
447 | uint circode = (uint)(Util.RandomClass.Next()); | ||
448 | |||
449 | logResponse.Lastname = TheUser.surname; | ||
450 | logResponse.Firstname = TheUser.username; | ||
451 | logResponse.AgentID = AgentID.ToStringHyphenated(); | ||
452 | logResponse.SessionID = TheUser.currentAgent.sessionID.ToStringHyphenated(); | ||
453 | logResponse.SecureSessionID = TheUser.currentAgent.secureSessionID.ToStringHyphenated(); | ||
454 | logResponse.InventoryRoot = InventoryRoot; | ||
455 | logResponse.InventorySkeleton = AgentInventoryArray; | ||
456 | logResponse.CircuitCode = (Int32)circode; | ||
457 | logResponse.RegionX = 0; //overwritten | ||
458 | logResponse.RegionY = 0; //overwritten | ||
459 | logResponse.Home = "!!null temporary value {home}!!"; // Overwritten | ||
460 | //logResponse.LookAt = "\n[r" + TheUser.homeLookAt.X.ToString() + ",r" + TheUser.homeLookAt.Y.ToString() + ",r" + TheUser.homeLookAt.Z.ToString() + "]\n"; | ||
461 | logResponse.SimAddress = "127.0.0.1"; //overwritten | ||
462 | logResponse.SimPort = 0; //overwritten | ||
463 | logResponse.Message = this.GetMessage(); | ||
464 | |||
465 | try | ||
466 | { | ||
467 | this.CustomiseResponse(ref logResponse, ref TheUser); | ||
468 | } | ||
469 | catch (Exception e) | ||
470 | { | ||
471 | System.Console.WriteLine(e.ToString()); | ||
472 | return logResponse.CreateDeadRegionResponse(); | ||
473 | } | ||
474 | CommitAgent(ref TheUser); | ||
475 | |||
476 | return logResponse.ToXmlRpcResponse(); | ||
477 | |||
478 | } | ||
479 | catch (Exception E) | ||
480 | { | ||
481 | System.Console.WriteLine(E.ToString()); | ||
482 | } | ||
483 | //} | ||
484 | } | ||
485 | return response; | ||
486 | |||
487 | } | ||
488 | |||
489 | #endregion | ||
490 | |||
491 | /// <summary> | ||
492 | /// Deletes an active agent session | ||
493 | /// </summary> | ||
494 | /// <param name="request">The request</param> | ||
495 | /// <param name="path">The path (eg /bork/narf/test)</param> | ||
496 | /// <param name="param">Parameters sent</param> | ||
497 | /// <returns>Success "OK" else error</returns> | ||
498 | public string RestDeleteUserSessionMethod(string request, string path, string param) | ||
499 | { | ||
500 | // TODO! Important! | ||
501 | |||
502 | return "OK"; | ||
503 | } | ||
504 | |||
505 | /// <summary> | ||
506 | /// | ||
507 | /// </summary> | ||
508 | /// <param name="user"></param> | ||
509 | public void AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY) | ||
510 | { | ||
511 | UserProfileData user = new UserProfileData(); | ||
512 | user.homeLocation = new LLVector3(128, 128, 100); | ||
513 | user.UUID = LLUUID.Random(); | ||
514 | user.username = firstName; | ||
515 | user.surname = lastName; | ||
516 | user.passwordHash = pass; | ||
517 | user.passwordSalt = ""; | ||
518 | user.created = Util.UnixTimeSinceEpoch(); | ||
519 | user.homeLookAt = new LLVector3(100, 100, 100); | ||
520 | user.homeRegion = Util.UIntsToLong((regX * 256), (regY * 256)); | ||
521 | |||
522 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
523 | { | ||
524 | try | ||
525 | { | ||
526 | plugin.Value.addNewUserProfile(user); | ||
527 | |||
528 | } | ||
529 | catch (Exception e) | ||
530 | { | ||
531 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Unable to add user via " + plugin.Key + "(" + e.ToString() + ")"); | ||
532 | } | ||
533 | } | ||
534 | } | ||
535 | |||
536 | /// <summary> | ||
537 | /// Returns an error message that the user could not be found in the database | ||
538 | /// </summary> | ||
539 | /// <returns>XML string consisting of a error element containing individual error(s)</returns> | ||
540 | public string CreateUnknownUserErrorResponse() | ||
541 | { | ||
542 | System.IO.StringWriter sw = new System.IO.StringWriter(); | ||
543 | XmlTextWriter xw = new XmlTextWriter(sw); | ||
544 | |||
545 | // Header | ||
546 | xw.Formatting = Formatting.Indented; | ||
547 | xw.WriteStartDocument(); | ||
548 | xw.WriteDocType("error", null, null, null); | ||
549 | xw.WriteComment("An error occured"); | ||
550 | xw.WriteStartElement("error"); | ||
551 | |||
552 | // User | ||
553 | xw.WriteElementString("unknownuser", "Unable to find a user with that name"); | ||
554 | |||
555 | // Footer | ||
556 | xw.WriteEndElement(); | ||
557 | xw.Flush(); | ||
558 | xw.Close(); | ||
559 | |||
560 | return sw.ToString(); | ||
561 | } | ||
562 | |||
563 | /// <summary> | ||
564 | /// Converts a user profile to an XML element which can be returned | ||
565 | /// </summary> | ||
566 | /// <param name="profile">The user profile</param> | ||
567 | /// <returns>A string containing an XML Document of the user profile</returns> | ||
568 | public string ProfileToXml(UserProfileData profile) | ||
569 | { | ||
570 | System.IO.StringWriter sw = new System.IO.StringWriter(); | ||
571 | XmlTextWriter xw = new XmlTextWriter(sw); | ||
572 | |||
573 | // Header | ||
574 | xw.Formatting = Formatting.Indented; | ||
575 | xw.WriteStartDocument(); | ||
576 | xw.WriteDocType("userprofile", null, null, null); | ||
577 | xw.WriteComment("Found user profiles matching the request"); | ||
578 | xw.WriteStartElement("users"); | ||
579 | |||
580 | // User | ||
581 | xw.WriteStartElement("user"); | ||
582 | // Account information | ||
583 | xw.WriteAttributeString("firstname", profile.username); | ||
584 | xw.WriteAttributeString("lastname", profile.surname); | ||
585 | xw.WriteAttributeString("uuid", profile.UUID.ToStringHyphenated()); | ||
586 | // Server Information | ||
587 | xw.WriteAttributeString("server_inventory", profile.userInventoryURI); | ||
588 | xw.WriteAttributeString("server_asset", profile.userAssetURI); | ||
589 | // Profile Information | ||
590 | xw.WriteAttributeString("profile_about", profile.profileAboutText); | ||
591 | xw.WriteAttributeString("profile_firstlife_about", profile.profileFirstText); | ||
592 | xw.WriteAttributeString("profile_firstlife_image", profile.profileFirstImage.ToStringHyphenated()); | ||
593 | xw.WriteAttributeString("profile_can_do", profile.profileCanDoMask.ToString()); | ||
594 | xw.WriteAttributeString("profile_want_do", profile.profileWantDoMask.ToString()); | ||
595 | xw.WriteAttributeString("profile_image", profile.profileImage.ToStringHyphenated()); | ||
596 | xw.WriteAttributeString("profile_created",profile.created.ToString()); | ||
597 | xw.WriteAttributeString("profile_lastlogin",profile.lastLogin.ToString()); | ||
598 | // Home region information | ||
599 | xw.WriteAttributeString("home_coordinates", profile.homeLocation.ToString()); | ||
600 | xw.WriteAttributeString("home_region", profile.homeRegion.ToString()); | ||
601 | xw.WriteAttributeString("home_look", profile.homeLookAt.ToString()); | ||
602 | |||
603 | xw.WriteEndElement(); | ||
604 | |||
605 | // Footer | ||
606 | xw.WriteEndElement(); | ||
607 | xw.Flush(); | ||
608 | xw.Close(); | ||
609 | |||
610 | return sw.ToString(); | ||
611 | } | ||
612 | |||
613 | #region REST Methods | ||
614 | //should most likely move out of here and into the grid's userserver sub class | ||
615 | public string RestGetUserMethodName(string request, string path, string param) | ||
616 | { | ||
617 | UserProfileData userProfile = getUserProfile(param.Trim()); | ||
618 | |||
619 | if (userProfile == null) | ||
620 | { | ||
621 | return CreateUnknownUserErrorResponse(); | ||
622 | } | ||
623 | |||
624 | return ProfileToXml(userProfile); | ||
625 | } | ||
626 | |||
627 | public string RestGetUserMethodUUID(string request, string path, string param) | ||
628 | { | ||
629 | UserProfileData userProfile = getUserProfile(new LLUUID(param)); | ||
630 | |||
631 | if (userProfile == null) | ||
632 | { | ||
633 | return CreateUnknownUserErrorResponse(); | ||
634 | } | ||
635 | |||
636 | return ProfileToXml(userProfile); | ||
637 | } | ||
638 | #endregion | ||
639 | |||
640 | } | ||
641 | } | ||
diff --git a/OpenSim/Grid/AssetServer/AssetHttpServer.cs b/OpenSim/Grid/AssetServer/AssetHttpServer.cs new file mode 100644 index 0000000..6fc6bf8 --- /dev/null +++ b/OpenSim/Grid/AssetServer/AssetHttpServer.cs | |||
@@ -0,0 +1,130 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Net; | ||
31 | using System.Text; | ||
32 | using System.Text.RegularExpressions; | ||
33 | using System.Threading; | ||
34 | //using OpenSim.CAPS; | ||
35 | using Nwc.XmlRpc; | ||
36 | using System.Collections; | ||
37 | using OpenSim.Framework.Console; | ||
38 | using OpenSim.Servers; | ||
39 | |||
40 | namespace OpenGridServices.AssetServer | ||
41 | { | ||
42 | /// <summary> | ||
43 | /// An HTTP server for sending assets | ||
44 | /// </summary> | ||
45 | public class AssetHttpServer :BaseHttpServer | ||
46 | { | ||
47 | /// <summary> | ||
48 | /// Creates the new asset server | ||
49 | /// </summary> | ||
50 | /// <param name="port">Port to initalise on</param> | ||
51 | public AssetHttpServer(int port) | ||
52 | : base(port) | ||
53 | { | ||
54 | } | ||
55 | |||
56 | /// <summary> | ||
57 | /// Handles an HTTP request | ||
58 | /// </summary> | ||
59 | /// <param name="stateinfo">HTTP State Info</param> | ||
60 | public override void HandleRequest(Object stateinfo) | ||
61 | { | ||
62 | try | ||
63 | { | ||
64 | HttpListenerContext context = (HttpListenerContext)stateinfo; | ||
65 | |||
66 | HttpListenerRequest request = context.Request; | ||
67 | HttpListenerResponse response = context.Response; | ||
68 | |||
69 | response.KeepAlive = false; | ||
70 | response.SendChunked = false; | ||
71 | |||
72 | System.IO.Stream body = request.InputStream; | ||
73 | System.Text.Encoding encoding = System.Text.Encoding.UTF8; | ||
74 | System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); | ||
75 | |||
76 | string requestBody = reader.ReadToEnd(); | ||
77 | body.Close(); | ||
78 | reader.Close(); | ||
79 | |||
80 | //Console.WriteLine(request.HttpMethod + " " + request.RawUrl + " Http/" + request.ProtocolVersion.ToString() + " content type: " + request.ContentType); | ||
81 | //Console.WriteLine(requestBody); | ||
82 | |||
83 | string responseString = ""; | ||
84 | switch (request.ContentType) | ||
85 | { | ||
86 | case "text/xml": | ||
87 | // must be XML-RPC, so pass to the XML-RPC parser | ||
88 | |||
89 | responseString = ParseXMLRPC(requestBody); | ||
90 | responseString = Regex.Replace(responseString, "utf-16", "utf-8"); | ||
91 | |||
92 | response.AddHeader("Content-type", "text/xml"); | ||
93 | break; | ||
94 | |||
95 | case "application/xml": | ||
96 | // probably LLSD we hope, otherwise it should be ignored by the parser | ||
97 | responseString = ParseLLSDXML(requestBody); | ||
98 | response.AddHeader("Content-type", "application/xml"); | ||
99 | break; | ||
100 | |||
101 | case "application/x-www-form-urlencoded": | ||
102 | // a form data POST so send to the REST parser | ||
103 | responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
104 | response.AddHeader("Content-type", "text/plain"); | ||
105 | break; | ||
106 | |||
107 | case null: | ||
108 | // must be REST or invalid crap, so pass to the REST parser | ||
109 | responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); | ||
110 | response.AddHeader("Content-type", "text/plain"); | ||
111 | break; | ||
112 | |||
113 | } | ||
114 | |||
115 | Encoding Windows1252Encoding = Encoding.GetEncoding(1252); | ||
116 | byte[] buffer = Windows1252Encoding.GetBytes(responseString); | ||
117 | System.IO.Stream output = response.OutputStream; | ||
118 | response.SendChunked = false; | ||
119 | response.ContentLength64 = buffer.Length; | ||
120 | output.Write(buffer, 0, buffer.Length); | ||
121 | output.Close(); | ||
122 | } | ||
123 | catch (Exception e) | ||
124 | { | ||
125 | Console.WriteLine(e.ToString()); | ||
126 | } | ||
127 | } | ||
128 | |||
129 | } | ||
130 | } | ||
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs new file mode 100644 index 0000000..96c9dba --- /dev/null +++ b/OpenSim/Grid/AssetServer/Main.cs | |||
@@ -0,0 +1,337 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.IO; | ||
31 | using System.Text; | ||
32 | using System.Timers; | ||
33 | using System.Net; | ||
34 | using System.Reflection; | ||
35 | using System.Threading; | ||
36 | using libsecondlife; | ||
37 | using OpenSim.Framework; | ||
38 | using OpenSim.Framework.Sims; | ||
39 | using OpenSim.Framework.Console; | ||
40 | using OpenSim.Framework.Types; | ||
41 | using OpenSim.Framework.Interfaces; | ||
42 | using OpenSim.Framework.Utilities; | ||
43 | using OpenSim.Servers; | ||
44 | using Db4objects.Db4o; | ||
45 | using Db4objects.Db4o.Query; | ||
46 | |||
47 | namespace OpenGridServices.AssetServer | ||
48 | { | ||
49 | /// <summary> | ||
50 | /// An asset server | ||
51 | /// </summary> | ||
52 | public class OpenAsset_Main : conscmd_callback | ||
53 | { | ||
54 | private IObjectContainer db; | ||
55 | |||
56 | public static OpenAsset_Main assetserver; | ||
57 | |||
58 | private LogBase m_console; | ||
59 | |||
60 | [STAThread] | ||
61 | public static void Main(string[] args) | ||
62 | { | ||
63 | Console.WriteLine("Starting...\n"); | ||
64 | |||
65 | assetserver = new OpenAsset_Main(); | ||
66 | assetserver.Startup(); | ||
67 | |||
68 | assetserver.Work(); | ||
69 | } | ||
70 | |||
71 | private void Work() | ||
72 | { | ||
73 | m_console.Notice("Enter help for a list of commands"); | ||
74 | |||
75 | while (true) | ||
76 | { | ||
77 | m_console.MainLogPrompt(); | ||
78 | } | ||
79 | } | ||
80 | |||
81 | private OpenAsset_Main() | ||
82 | { | ||
83 | m_console = new LogBase("opengrid-AssetServer-console.log", "OpenAsset", this, false); | ||
84 | OpenSim.Framework.Console.MainLog.Instance = m_console; | ||
85 | } | ||
86 | |||
87 | public void Startup() | ||
88 | { | ||
89 | m_console.Verbose( "Main.cs:Startup() - Setting up asset DB"); | ||
90 | setupDB(); | ||
91 | |||
92 | m_console.Verbose( "Main.cs:Startup() - Starting HTTP process"); | ||
93 | AssetHttpServer httpServer = new AssetHttpServer(8003); | ||
94 | |||
95 | |||
96 | httpServer.AddRestHandler("GET", "/assets/", this.assetGetMethod); | ||
97 | httpServer.AddRestHandler("POST", "/assets/", this.assetPostMethod); | ||
98 | |||
99 | httpServer.Start(); | ||
100 | |||
101 | } | ||
102 | |||
103 | public string assetPostMethod(string requestBody, string path, string param) | ||
104 | { | ||
105 | AssetBase asset = new AssetBase(); | ||
106 | asset.Name = ""; | ||
107 | asset.FullID = new LLUUID(param); | ||
108 | Encoding Windows1252Encoding = Encoding.GetEncoding(1252); | ||
109 | byte[] buffer = Windows1252Encoding.GetBytes(requestBody); | ||
110 | asset.Data = buffer; | ||
111 | AssetStorage store = new AssetStorage(); | ||
112 | store.Data = asset.Data; | ||
113 | store.Name = asset.Name; | ||
114 | store.UUID = asset.FullID; | ||
115 | db.Set(store); | ||
116 | db.Commit(); | ||
117 | return ""; | ||
118 | } | ||
119 | |||
120 | public string assetGetMethod(string request, string path, string param) | ||
121 | { | ||
122 | Console.WriteLine("got a request " + param); | ||
123 | byte[] assetdata = getAssetData(new LLUUID(param), false); | ||
124 | if (assetdata != null) | ||
125 | { | ||
126 | Encoding Windows1252Encoding = Encoding.GetEncoding(1252); | ||
127 | string ret = Windows1252Encoding.GetString(assetdata); | ||
128 | //string ret = System.Text.Encoding.Unicode.GetString(assetdata); | ||
129 | |||
130 | return ret; | ||
131 | |||
132 | } | ||
133 | else | ||
134 | { | ||
135 | return ""; | ||
136 | } | ||
137 | |||
138 | } | ||
139 | |||
140 | public byte[] getAssetData(LLUUID assetID, bool isTexture) | ||
141 | { | ||
142 | bool found = false; | ||
143 | AssetStorage foundAsset = null; | ||
144 | |||
145 | IObjectSet result = db.Get(new AssetStorage(assetID)); | ||
146 | if (result.Count > 0) | ||
147 | { | ||
148 | foundAsset = (AssetStorage)result.Next(); | ||
149 | found = true; | ||
150 | } | ||
151 | |||
152 | if (found) | ||
153 | { | ||
154 | return foundAsset.Data; | ||
155 | } | ||
156 | else | ||
157 | { | ||
158 | return null; | ||
159 | } | ||
160 | } | ||
161 | |||
162 | public void setupDB() | ||
163 | { | ||
164 | bool yapfile = System.IO.File.Exists("assets.yap"); | ||
165 | try | ||
166 | { | ||
167 | db = Db4oFactory.OpenFile("assets.yap"); | ||
168 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Main.cs:setupDB() - creation"); | ||
169 | } | ||
170 | catch (Exception e) | ||
171 | { | ||
172 | db.Close(); | ||
173 | OpenSim.Framework.Console.MainLog.Instance.Warn("Main.cs:setupDB() - Exception occured"); | ||
174 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
175 | } | ||
176 | if (!yapfile) | ||
177 | { | ||
178 | this.LoadDB(); | ||
179 | } | ||
180 | } | ||
181 | |||
182 | public void LoadDB() | ||
183 | { | ||
184 | try | ||
185 | { | ||
186 | |||
187 | Console.WriteLine("setting up Asset database"); | ||
188 | |||
189 | AssetBase Image = new AssetBase(); | ||
190 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000001"); | ||
191 | Image.Name = "Bricks"; | ||
192 | this.LoadAsset(Image, true, "bricks.jp2"); | ||
193 | AssetStorage store = new AssetStorage(); | ||
194 | store.Data = Image.Data; | ||
195 | store.Name = Image.Name; | ||
196 | store.UUID = Image.FullID; | ||
197 | db.Set(store); | ||
198 | db.Commit(); | ||
199 | |||
200 | Image = new AssetBase(); | ||
201 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000002"); | ||
202 | Image.Name = "Plywood"; | ||
203 | this.LoadAsset(Image, true, "plywood.jp2"); | ||
204 | store = new AssetStorage(); | ||
205 | store.Data = Image.Data; | ||
206 | store.Name = Image.Name; | ||
207 | store.UUID = Image.FullID; | ||
208 | db.Set(store); | ||
209 | db.Commit(); | ||
210 | |||
211 | Image = new AssetBase(); | ||
212 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000003"); | ||
213 | Image.Name = "Rocks"; | ||
214 | this.LoadAsset(Image, true, "rocks.jp2"); | ||
215 | store = new AssetStorage(); | ||
216 | store.Data = Image.Data; | ||
217 | store.Name = Image.Name; | ||
218 | store.UUID = Image.FullID; | ||
219 | db.Set(store); | ||
220 | db.Commit(); | ||
221 | |||
222 | Image = new AssetBase(); | ||
223 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000004"); | ||
224 | Image.Name = "Granite"; | ||
225 | this.LoadAsset(Image, true, "granite.jp2"); | ||
226 | store = new AssetStorage(); | ||
227 | store.Data = Image.Data; | ||
228 | store.Name = Image.Name; | ||
229 | store.UUID = Image.FullID; | ||
230 | db.Set(store); | ||
231 | db.Commit(); | ||
232 | |||
233 | Image = new AssetBase(); | ||
234 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000005"); | ||
235 | Image.Name = "Hardwood"; | ||
236 | this.LoadAsset(Image, true, "hardwood.jp2"); | ||
237 | store = new AssetStorage(); | ||
238 | store.Data = Image.Data; | ||
239 | store.Name = Image.Name; | ||
240 | store.UUID = Image.FullID; | ||
241 | db.Set(store); | ||
242 | db.Commit(); | ||
243 | |||
244 | Image = new AssetBase(); | ||
245 | Image.FullID = new LLUUID("00000000-0000-0000-5005-000000000005"); | ||
246 | Image.Name = "Prim Base Texture"; | ||
247 | this.LoadAsset(Image, true, "plywood.jp2"); | ||
248 | store = new AssetStorage(); | ||
249 | store.Data = Image.Data; | ||
250 | store.Name = Image.Name; | ||
251 | store.UUID = Image.FullID; | ||
252 | db.Set(store); | ||
253 | db.Commit(); | ||
254 | |||
255 | Image = new AssetBase(); | ||
256 | Image.FullID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); | ||
257 | Image.Name = "Shape"; | ||
258 | this.LoadAsset(Image, false, "base_shape.dat"); | ||
259 | store = new AssetStorage(); | ||
260 | store.Data = Image.Data; | ||
261 | store.Name = Image.Name; | ||
262 | store.UUID = Image.FullID; | ||
263 | db.Set(store); | ||
264 | db.Commit(); | ||
265 | } | ||
266 | catch (Exception e) | ||
267 | { | ||
268 | Console.WriteLine(e.Message); | ||
269 | } | ||
270 | } | ||
271 | |||
272 | private void LoadAsset(AssetBase info, bool image, string filename) | ||
273 | { | ||
274 | |||
275 | |||
276 | string dataPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder; | ||
277 | string fileName = Path.Combine(dataPath, filename); | ||
278 | FileInfo fInfo = new FileInfo(fileName); | ||
279 | long numBytes = fInfo.Length; | ||
280 | FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); | ||
281 | byte[] idata = new byte[numBytes]; | ||
282 | BinaryReader br = new BinaryReader(fStream); | ||
283 | idata = br.ReadBytes((int)numBytes); | ||
284 | br.Close(); | ||
285 | fStream.Close(); | ||
286 | info.Data = idata; | ||
287 | //info.loaded=true; | ||
288 | } | ||
289 | |||
290 | /*private GridConfig LoadConfigDll(string dllName) | ||
291 | { | ||
292 | Assembly pluginAssembly = Assembly.LoadFrom(dllName); | ||
293 | GridConfig config = null; | ||
294 | |||
295 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
296 | { | ||
297 | if (pluginType.IsPublic) | ||
298 | { | ||
299 | if (!pluginType.IsAbstract) | ||
300 | { | ||
301 | Type typeInterface = pluginType.GetInterface("IGridConfig", true); | ||
302 | |||
303 | if (typeInterface != null) | ||
304 | { | ||
305 | IGridConfig plug = (IGridConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
306 | config = plug.GetConfigObject(); | ||
307 | break; | ||
308 | } | ||
309 | |||
310 | typeInterface = null; | ||
311 | } | ||
312 | } | ||
313 | } | ||
314 | pluginAssembly = null; | ||
315 | return config; | ||
316 | }*/ | ||
317 | |||
318 | public void RunCmd(string cmd, string[] cmdparams) | ||
319 | { | ||
320 | switch (cmd) | ||
321 | { | ||
322 | case "help": | ||
323 | m_console.Notice("shutdown - shutdown this asset server (USE CAUTION!)"); | ||
324 | break; | ||
325 | |||
326 | case "shutdown": | ||
327 | m_console.Close(); | ||
328 | Environment.Exit(0); | ||
329 | break; | ||
330 | } | ||
331 | } | ||
332 | |||
333 | public void Show(string ShowWhat) | ||
334 | { | ||
335 | } | ||
336 | } | ||
337 | } | ||
diff --git a/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj new file mode 100644 index 0000000..caebca3 --- /dev/null +++ b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj | |||
@@ -0,0 +1,118 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{E5F1A03B-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Grid.AssetServer</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Exe</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Grid.AssetServer</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="OpenSim.Framework" > | ||
70 | <HintPath>OpenSim.Framework.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="OpenSim.Framework.Console" > | ||
74 | <HintPath>OpenSim.Framework.Console.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="OpenSim.Framework.Servers" > | ||
78 | <HintPath>OpenSim.Framework.Servers.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="System" > | ||
82 | <HintPath>System.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="System.Data" > | ||
86 | <HintPath>System.Data.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | <Reference Include="System.Xml" > | ||
90 | <HintPath>System.Xml.dll</HintPath> | ||
91 | <Private>False</Private> | ||
92 | </Reference> | ||
93 | <Reference Include="XMLRPC.dll" > | ||
94 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
95 | <Private>False</Private> | ||
96 | </Reference> | ||
97 | </ItemGroup> | ||
98 | <ItemGroup> | ||
99 | </ItemGroup> | ||
100 | <ItemGroup> | ||
101 | <Compile Include="AssetHttpServer.cs"> | ||
102 | <SubType>Code</SubType> | ||
103 | </Compile> | ||
104 | <Compile Include="Main.cs"> | ||
105 | <SubType>Code</SubType> | ||
106 | </Compile> | ||
107 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
108 | <SubType>Code</SubType> | ||
109 | </Compile> | ||
110 | </ItemGroup> | ||
111 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
112 | <PropertyGroup> | ||
113 | <PreBuildEvent> | ||
114 | </PreBuildEvent> | ||
115 | <PostBuildEvent> | ||
116 | </PostBuildEvent> | ||
117 | </PropertyGroup> | ||
118 | </Project> | ||
diff --git a/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj.user b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Grid/AssetServer/OpenSim.Grid.AssetServer.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f9a18a8 --- /dev/null +++ b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // General Information about an assembly is controlled through the following | ||
33 | // set of attributes. Change these attribute values to modify the information | ||
34 | // associated with an assembly. | ||
35 | [assembly: AssemblyTitle("OGS-AssetServer")] | ||
36 | [assembly: AssemblyDescription("")] | ||
37 | [assembly: AssemblyConfiguration("")] | ||
38 | [assembly: AssemblyCompany("")] | ||
39 | [assembly: AssemblyProduct("OGS-AssetServer")] | ||
40 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
41 | [assembly: AssemblyTrademark("")] | ||
42 | [assembly: AssemblyCulture("")] | ||
43 | |||
44 | // Setting ComVisible to false makes the types in this assembly not visible | ||
45 | // to COM components. If you need to access a type in this assembly from | ||
46 | // COM, set the ComVisible attribute to true on that type. | ||
47 | [assembly: ComVisible(false)] | ||
48 | |||
49 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
50 | [assembly: Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")] | ||
51 | |||
52 | // Version information for an assembly consists of the following four values: | ||
53 | // | ||
54 | // Major Version | ||
55 | // Minor Version | ||
56 | // Build Number | ||
57 | // Revision | ||
58 | // | ||
59 | [assembly: AssemblyVersion("1.0.0.0")] | ||
60 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Grid/Framework.Manager/GridManagementAgent.cs b/OpenSim/Grid/Framework.Manager/GridManagementAgent.cs new file mode 100644 index 0000000..dfc572a --- /dev/null +++ b/OpenSim/Grid/Framework.Manager/GridManagementAgent.cs | |||
@@ -0,0 +1,140 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using Nwc.XmlRpc; | ||
29 | using OpenSim.Framework; | ||
30 | using OpenSim.Servers; | ||
31 | using System.Collections; | ||
32 | using System.Collections.Generic; | ||
33 | using libsecondlife; | ||
34 | |||
35 | namespace OpenGrid.Framework.Manager | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// Used to pass messages to the gridserver | ||
39 | /// </summary> | ||
40 | /// <param name="param">Pass this argument</param> | ||
41 | public delegate void GridManagerCallback(string param); | ||
42 | |||
43 | /// <summary> | ||
44 | /// Serverside listener for grid commands | ||
45 | /// </summary> | ||
46 | public class GridManagementAgent | ||
47 | { | ||
48 | /// <summary> | ||
49 | /// Passes grid server messages | ||
50 | /// </summary> | ||
51 | private GridManagerCallback thecallback; | ||
52 | |||
53 | /// <summary> | ||
54 | /// Security keys | ||
55 | /// </summary> | ||
56 | private string sendkey; | ||
57 | private string recvkey; | ||
58 | |||
59 | /// <summary> | ||
60 | /// Our component type | ||
61 | /// </summary> | ||
62 | private string component_type; | ||
63 | |||
64 | /// <summary> | ||
65 | /// List of active sessions | ||
66 | /// </summary> | ||
67 | private static ArrayList Sessions; | ||
68 | |||
69 | /// <summary> | ||
70 | /// Initialises a new GridManagementAgent | ||
71 | /// </summary> | ||
72 | /// <param name="app_httpd">HTTP Daemon for this server</param> | ||
73 | /// <param name="component_type">What component type are we?</param> | ||
74 | /// <param name="sendkey">Security send key</param> | ||
75 | /// <param name="recvkey">Security recieve key</param> | ||
76 | /// <param name="thecallback">Message callback</param> | ||
77 | public GridManagementAgent(BaseHttpServer app_httpd, string component_type, string sendkey, string recvkey, GridManagerCallback thecallback) | ||
78 | { | ||
79 | this.sendkey = sendkey; | ||
80 | this.recvkey = recvkey; | ||
81 | this.component_type = component_type; | ||
82 | this.thecallback = thecallback; | ||
83 | Sessions = new ArrayList(); | ||
84 | |||
85 | app_httpd.AddXmlRPCHandler("manager_login", XmlRpcLoginMethod); | ||
86 | |||
87 | switch (component_type) | ||
88 | { | ||
89 | case "gridserver": | ||
90 | GridServerManager.sendkey = this.sendkey; | ||
91 | GridServerManager.recvkey = this.recvkey; | ||
92 | GridServerManager.thecallback = thecallback; | ||
93 | app_httpd.AddXmlRPCHandler("shutdown", GridServerManager.XmlRpcShutdownMethod); | ||
94 | break; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | /// <summary> | ||
99 | /// Checks if a session exists | ||
100 | /// </summary> | ||
101 | /// <param name="sessionID">The session ID</param> | ||
102 | /// <returns>Exists?</returns> | ||
103 | public static bool SessionExists(LLUUID sessionID) | ||
104 | { | ||
105 | return Sessions.Contains(sessionID); | ||
106 | } | ||
107 | |||
108 | /// <summary> | ||
109 | /// Logs a new session to the grid manager | ||
110 | /// </summary> | ||
111 | /// <param name="request">the XMLRPC request</param> | ||
112 | /// <returns>An XMLRPC reply</returns> | ||
113 | public static XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request) | ||
114 | { | ||
115 | XmlRpcResponse response = new XmlRpcResponse(); | ||
116 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
117 | Hashtable responseData = new Hashtable(); | ||
118 | |||
119 | // TODO: Switch this over to using OpenGrid.Framework.Data | ||
120 | if (requestData["username"].Equals("admin") && requestData["password"].Equals("supersecret")) | ||
121 | { | ||
122 | response.IsFault = false; | ||
123 | LLUUID new_session = LLUUID.Random(); | ||
124 | Sessions.Add(new_session); | ||
125 | responseData["session_id"] = new_session.ToString(); | ||
126 | responseData["msg"] = "Login OK"; | ||
127 | } | ||
128 | else | ||
129 | { | ||
130 | response.IsFault = true; | ||
131 | responseData["error"] = "Invalid username or password"; | ||
132 | } | ||
133 | |||
134 | response.Value = responseData; | ||
135 | return response; | ||
136 | |||
137 | } | ||
138 | |||
139 | } | ||
140 | } | ||
diff --git a/OpenSim/Grid/Framework.Manager/GridServerManager.cs b/OpenSim/Grid/Framework.Manager/GridServerManager.cs new file mode 100644 index 0000000..e276556 --- /dev/null +++ b/OpenSim/Grid/Framework.Manager/GridServerManager.cs | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections; | ||
31 | using System.Collections.Generic; | ||
32 | using Nwc.XmlRpc; | ||
33 | using System.Threading; | ||
34 | using libsecondlife; | ||
35 | |||
36 | namespace OpenGrid.Framework.Manager { | ||
37 | |||
38 | /// <summary> | ||
39 | /// A remote management system for the grid server | ||
40 | /// </summary> | ||
41 | public class GridServerManager | ||
42 | { | ||
43 | /// <summary> | ||
44 | /// Triggers events from the grid manager | ||
45 | /// </summary> | ||
46 | public static GridManagerCallback thecallback; | ||
47 | |||
48 | /// <summary> | ||
49 | /// Security keys | ||
50 | /// </summary> | ||
51 | public static string sendkey; | ||
52 | public static string recvkey; | ||
53 | |||
54 | /// <summary> | ||
55 | /// Disconnects the grid server and shuts it down | ||
56 | /// </summary> | ||
57 | /// <param name="request">XmlRpc Request</param> | ||
58 | /// <returns>An XmlRpc response containing either a "msg" or an "error"</returns> | ||
59 | public static XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request) | ||
60 | { | ||
61 | XmlRpcResponse response = new XmlRpcResponse(); | ||
62 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
63 | Hashtable responseData = new Hashtable(); | ||
64 | |||
65 | if(requestData.ContainsKey("session_id")) { | ||
66 | if(GridManagementAgent.SessionExists(new LLUUID((string)requestData["session_id"]))) { | ||
67 | responseData["msg"]="Shutdown command accepted"; | ||
68 | (new Thread(new ThreadStart(ShutdownServer))).Start(); | ||
69 | } else { | ||
70 | response.IsFault=true; | ||
71 | responseData["error"]="bad session ID"; | ||
72 | } | ||
73 | } else { | ||
74 | response.IsFault=true; | ||
75 | responseData["error"]="no session ID"; | ||
76 | } | ||
77 | |||
78 | response.Value = responseData; | ||
79 | return response; | ||
80 | } | ||
81 | |||
82 | /// <summary> | ||
83 | /// Shuts down the grid server | ||
84 | /// </summary> | ||
85 | public static void ShutdownServer() | ||
86 | { | ||
87 | Console.WriteLine("Shutting down the grid server - recieved a grid manager request"); | ||
88 | Console.WriteLine("Terminating in three seconds..."); | ||
89 | Thread.Sleep(3000); | ||
90 | thecallback("shutdown"); | ||
91 | } | ||
92 | } | ||
93 | } | ||
94 | |||
diff --git a/OpenSim/Grid/Framework.Manager/OpenSim.Grid.Framework.Manager.csproj b/OpenSim/Grid/Framework.Manager/OpenSim.Grid.Framework.Manager.csproj new file mode 100644 index 0000000..9a98ff4 --- /dev/null +++ b/OpenSim/Grid/Framework.Manager/OpenSim.Grid.Framework.Manager.csproj | |||
@@ -0,0 +1,99 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{4B7BFD1C-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Grid.Framework.Manager</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Grid.Framework.Manager</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="OpenSim.Framework" > | ||
66 | <HintPath>OpenSim.Framework.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="OpenSim.Framework.Servers" > | ||
70 | <HintPath>OpenSim.Framework.Servers.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System" > | ||
74 | <HintPath>System.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="XMLRPC.dll" > | ||
78 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | </ItemGroup> | ||
84 | <ItemGroup> | ||
85 | <Compile Include="GridManagementAgent.cs"> | ||
86 | <SubType>Code</SubType> | ||
87 | </Compile> | ||
88 | <Compile Include="GridServerManager.cs"> | ||
89 | <SubType>Code</SubType> | ||
90 | </Compile> | ||
91 | </ItemGroup> | ||
92 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
93 | <PropertyGroup> | ||
94 | <PreBuildEvent> | ||
95 | </PreBuildEvent> | ||
96 | <PostBuildEvent> | ||
97 | </PostBuildEvent> | ||
98 | </PropertyGroup> | ||
99 | </Project> | ||
diff --git a/OpenSim/Grid/Framework.Manager/OpenSim.Grid.Framework.Manager.csproj.user b/OpenSim/Grid/Framework.Manager/OpenSim.Grid.Framework.Manager.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Grid/Framework.Manager/OpenSim.Grid.Framework.Manager.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Grid/GridServer.Config/AssemblyInfo.cs b/OpenSim/Grid/GridServer.Config/AssemblyInfo.cs new file mode 100644 index 0000000..c9701d6 --- /dev/null +++ b/OpenSim/Grid/GridServer.Config/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("GridConfig")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("GridConfig")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Grid/GridServer.Config/DbGridConfig.cs b/OpenSim/Grid/GridServer.Config/DbGridConfig.cs new file mode 100644 index 0000000..2218004 --- /dev/null +++ b/OpenSim/Grid/GridServer.Config/DbGridConfig.cs | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenSim.Framework.Console; | ||
31 | using OpenSim.Framework.Interfaces; | ||
32 | using Db4objects.Db4o; | ||
33 | |||
34 | namespace OpenGrid.Config.GridConfigDb4o | ||
35 | { | ||
36 | /// <summary> | ||
37 | /// A grid configuration interface for returning the DB4o Config Provider | ||
38 | /// </summary> | ||
39 | public class Db40ConfigPlugin: IGridConfig | ||
40 | { | ||
41 | /// <summary> | ||
42 | /// Loads and returns a configuration objeect | ||
43 | /// </summary> | ||
44 | /// <returns>A grid configuration object</returns> | ||
45 | public GridConfig GetConfigObject() | ||
46 | { | ||
47 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Loading Db40Config dll"); | ||
48 | return ( new DbGridConfig()); | ||
49 | } | ||
50 | } | ||
51 | |||
52 | /// <summary> | ||
53 | /// A DB4o based Gridserver configuration object | ||
54 | /// </summary> | ||
55 | public class DbGridConfig : GridConfig | ||
56 | { | ||
57 | /// <summary> | ||
58 | /// The DB4o Database | ||
59 | /// </summary> | ||
60 | private IObjectContainer db; | ||
61 | |||
62 | /// <summary> | ||
63 | /// User configuration for the Grid Config interfaces | ||
64 | /// </summary> | ||
65 | public void LoadDefaults() { | ||
66 | OpenSim.Framework.Console.MainLog.Instance.Notice("Config.cs:LoadDefaults() - Please press enter to retain default or enter new settings"); | ||
67 | |||
68 | // About the grid options | ||
69 | this.GridOwner = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Grid owner", "OGS development team"); | ||
70 | |||
71 | // Asset Options | ||
72 | this.DefaultAssetServer = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Default asset server","http://127.0.0.1:8003/"); | ||
73 | this.AssetSendKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to send to asset server","null"); | ||
74 | this.AssetRecvKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to expect from asset server","null"); | ||
75 | |||
76 | // User Server Options | ||
77 | this.DefaultUserServer = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Default user server","http://127.0.0.1:8002/"); | ||
78 | this.UserSendKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to send to user server","null"); | ||
79 | this.UserRecvKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to expect from user server","null"); | ||
80 | |||
81 | // Region Server Options | ||
82 | this.SimSendKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to send to sims","null"); | ||
83 | this.SimRecvKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to expect from sims","null"); | ||
84 | } | ||
85 | |||
86 | /// <summary> | ||
87 | /// Initialises a new configuration object | ||
88 | /// </summary> | ||
89 | public override void InitConfig() { | ||
90 | try { | ||
91 | // Perform Db4o initialisation | ||
92 | db = Db4oFactory.OpenFile("opengrid.yap"); | ||
93 | |||
94 | // Locate the grid configuration object | ||
95 | IObjectSet result = db.Get(typeof(DbGridConfig)); | ||
96 | // Found? | ||
97 | if(result.Count==1) { | ||
98 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Config.cs:InitConfig() - Found a GridConfig object in the local database, loading"); | ||
99 | foreach (DbGridConfig cfg in result) { | ||
100 | // Import each setting into this class | ||
101 | // Grid Settings | ||
102 | this.GridOwner=cfg.GridOwner; | ||
103 | // Asset Settings | ||
104 | this.DefaultAssetServer=cfg.DefaultAssetServer; | ||
105 | this.AssetSendKey=cfg.AssetSendKey; | ||
106 | this.AssetRecvKey=cfg.AssetRecvKey; | ||
107 | // User Settings | ||
108 | this.DefaultUserServer=cfg.DefaultUserServer; | ||
109 | this.UserSendKey=cfg.UserSendKey; | ||
110 | this.UserRecvKey=cfg.UserRecvKey; | ||
111 | // Region Settings | ||
112 | this.SimSendKey=cfg.SimSendKey; | ||
113 | this.SimRecvKey=cfg.SimRecvKey; | ||
114 | } | ||
115 | // Create a new configuration object from this class | ||
116 | } else { | ||
117 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults"); | ||
118 | |||
119 | // Load default settings into this class | ||
120 | LoadDefaults(); | ||
121 | |||
122 | // Saves to the database file... | ||
123 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Writing out default settings to local database"); | ||
124 | db.Set(this); | ||
125 | |||
126 | // Closes file locks | ||
127 | db.Close(); | ||
128 | } | ||
129 | } catch(Exception e) { | ||
130 | OpenSim.Framework.Console.MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured"); | ||
131 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
132 | } | ||
133 | |||
134 | // Grid Settings | ||
135 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Grid settings loaded:"); | ||
136 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Grid owner: " + this.GridOwner); | ||
137 | |||
138 | // Asset Settings | ||
139 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Default asset server: " + this.DefaultAssetServer); | ||
140 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to send to asset server: " + this.AssetSendKey); | ||
141 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to expect from asset server: " + this.AssetRecvKey); | ||
142 | |||
143 | // User Settings | ||
144 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Default user server: " + this.DefaultUserServer); | ||
145 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to send to user server: " + this.UserSendKey); | ||
146 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to expect from user server: " + this.UserRecvKey); | ||
147 | |||
148 | // Region Settings | ||
149 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to send to sims: " + this.SimSendKey); | ||
150 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to expect from sims: " + this.SimRecvKey); | ||
151 | } | ||
152 | |||
153 | /// <summary> | ||
154 | /// Closes down the database and releases filesystem locks | ||
155 | /// </summary> | ||
156 | public void Shutdown() { | ||
157 | db.Close(); | ||
158 | } | ||
159 | } | ||
160 | |||
161 | } | ||
diff --git a/OpenSim/Grid/GridServer.Config/OpenSim.Grid.GridServer.Config.csproj b/OpenSim/Grid/GridServer.Config/OpenSim.Grid.GridServer.Config.csproj new file mode 100644 index 0000000..24e845c --- /dev/null +++ b/OpenSim/Grid/GridServer.Config/OpenSim.Grid.GridServer.Config.csproj | |||
@@ -0,0 +1,107 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{1442B635-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Grid.GridServer.Config</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Grid.GridServer.Config</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="OpenSim.Framework" > | ||
70 | <HintPath>OpenSim.Framework.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="OpenSim.Framework.Console" > | ||
74 | <HintPath>OpenSim.Framework.Console.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System" > | ||
78 | <HintPath>System.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="System.Data.dll" > | ||
82 | <HintPath>..\..\..\bin\System.Data.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="System.Xml" > | ||
86 | <HintPath>System.Xml.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | </ItemGroup> | ||
92 | <ItemGroup> | ||
93 | <Compile Include="AssemblyInfo.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="DbGridConfig.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | </ItemGroup> | ||
100 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
101 | <PropertyGroup> | ||
102 | <PreBuildEvent> | ||
103 | </PreBuildEvent> | ||
104 | <PostBuildEvent> | ||
105 | </PostBuildEvent> | ||
106 | </PropertyGroup> | ||
107 | </Project> | ||
diff --git a/OpenSim/Grid/GridServer.Config/OpenSim.Grid.GridServer.Config.csproj.user b/OpenSim/Grid/GridServer.Config/OpenSim.Grid.GridServer.Config.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Grid/GridServer.Config/OpenSim.Grid.GridServer.Config.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs new file mode 100644 index 0000000..bf80652 --- /dev/null +++ b/OpenSim/Grid/GridServer/GridManager.cs | |||
@@ -0,0 +1,599 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using System.Reflection; | ||
33 | using OpenGrid.Framework.Data; | ||
34 | using OpenSim.Framework.Utilities; | ||
35 | using OpenSim.Framework.Console; | ||
36 | using OpenSim.Framework.Sims; | ||
37 | using libsecondlife; | ||
38 | using Nwc.XmlRpc; | ||
39 | using System.Xml; | ||
40 | |||
41 | namespace OpenGridServices.GridServer | ||
42 | { | ||
43 | class GridManager | ||
44 | { | ||
45 | Dictionary<string, IGridData> _plugins = new Dictionary<string, IGridData>(); | ||
46 | Dictionary<string, ILogData> _logplugins = new Dictionary<string, ILogData>(); | ||
47 | |||
48 | public OpenSim.Framework.Interfaces.GridConfig config; | ||
49 | |||
50 | /// <summary> | ||
51 | /// Adds a new grid server plugin - grid servers will be requested in the order they were loaded. | ||
52 | /// </summary> | ||
53 | /// <param name="FileName">The filename to the grid server plugin DLL</param> | ||
54 | public void AddPlugin(string FileName) | ||
55 | { | ||
56 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Storage: Attempting to load " + FileName); | ||
57 | Assembly pluginAssembly = Assembly.LoadFrom(FileName); | ||
58 | |||
59 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Storage: Found " + pluginAssembly.GetTypes().Length + " interfaces."); | ||
60 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
61 | { | ||
62 | if (!pluginType.IsAbstract) | ||
63 | { | ||
64 | // Regions go here | ||
65 | Type typeInterface = pluginType.GetInterface("IGridData", true); | ||
66 | |||
67 | if (typeInterface != null) | ||
68 | { | ||
69 | IGridData plug = (IGridData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
70 | plug.Initialise(); | ||
71 | this._plugins.Add(plug.getName(), plug); | ||
72 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Storage: Added IGridData Interface"); | ||
73 | } | ||
74 | |||
75 | typeInterface = null; | ||
76 | |||
77 | // Logs go here | ||
78 | typeInterface = pluginType.GetInterface("ILogData", true); | ||
79 | |||
80 | if (typeInterface != null) | ||
81 | { | ||
82 | ILogData plug = (ILogData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
83 | plug.Initialise(); | ||
84 | this._logplugins.Add(plug.getName(), plug); | ||
85 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Storage: Added ILogData Interface"); | ||
86 | } | ||
87 | |||
88 | typeInterface = null; | ||
89 | } | ||
90 | } | ||
91 | |||
92 | pluginAssembly = null; | ||
93 | } | ||
94 | |||
95 | /// <summary> | ||
96 | /// Logs a piece of information to the database | ||
97 | /// </summary> | ||
98 | /// <param name="target">What you were operating on (in grid server, this will likely be the region UUIDs)</param> | ||
99 | /// <param name="method">Which method is being called?</param> | ||
100 | /// <param name="args">What arguments are being passed?</param> | ||
101 | /// <param name="priority">How high priority is this? 1 = Max, 6 = Verbose</param> | ||
102 | /// <param name="message">The message to log</param> | ||
103 | private void logToDB(string target, string method, string args, int priority, string message) | ||
104 | { | ||
105 | foreach (KeyValuePair<string, ILogData> kvp in _logplugins) | ||
106 | { | ||
107 | try | ||
108 | { | ||
109 | kvp.Value.saveLog("Gridserver", target, method, args, priority, message); | ||
110 | } | ||
111 | catch (Exception e) | ||
112 | { | ||
113 | OpenSim.Framework.Console.MainLog.Instance.Warn("Storage: unable to write log via " + kvp.Key); | ||
114 | } | ||
115 | } | ||
116 | } | ||
117 | |||
118 | /// <summary> | ||
119 | /// Returns a region by argument | ||
120 | /// </summary> | ||
121 | /// <param name="uuid">A UUID key of the region to return</param> | ||
122 | /// <returns>A SimProfileData for the region</returns> | ||
123 | public SimProfileData getRegion(libsecondlife.LLUUID uuid) | ||
124 | { | ||
125 | foreach(KeyValuePair<string,IGridData> kvp in _plugins) { | ||
126 | try | ||
127 | { | ||
128 | return kvp.Value.GetProfileByLLUUID(uuid); | ||
129 | } | ||
130 | catch (Exception e) | ||
131 | { | ||
132 | OpenSim.Framework.Console.MainLog.Instance.Warn("Storage: Unable to find region " + uuid.ToStringHyphenated() + " via " + kvp.Key); | ||
133 | } | ||
134 | } | ||
135 | return null; | ||
136 | } | ||
137 | |||
138 | /// <summary> | ||
139 | /// Returns a region by argument | ||
140 | /// </summary> | ||
141 | /// <param name="uuid">A regionHandle of the region to return</param> | ||
142 | /// <returns>A SimProfileData for the region</returns> | ||
143 | public SimProfileData getRegion(ulong handle) | ||
144 | { | ||
145 | foreach (KeyValuePair<string, IGridData> kvp in _plugins) | ||
146 | { | ||
147 | try | ||
148 | { | ||
149 | return kvp.Value.GetProfileByHandle(handle); | ||
150 | } | ||
151 | catch (Exception e) | ||
152 | { | ||
153 | OpenSim.Framework.Console.MainLog.Instance.Warn("Storage: Unable to find region " + handle.ToString() + " via " + kvp.Key); | ||
154 | } | ||
155 | } | ||
156 | return null; | ||
157 | } | ||
158 | |||
159 | public Dictionary<ulong, SimProfileData> getRegions(uint xmin, uint ymin, uint xmax, uint ymax) | ||
160 | { | ||
161 | Dictionary<ulong, SimProfileData> regions = new Dictionary<ulong, SimProfileData>(); | ||
162 | |||
163 | SimProfileData[] neighbours; | ||
164 | |||
165 | foreach (KeyValuePair<string, IGridData> kvp in _plugins) | ||
166 | { | ||
167 | try | ||
168 | { | ||
169 | neighbours = kvp.Value.GetProfilesInRange(xmin, ymin, xmax, ymax); | ||
170 | foreach (SimProfileData neighbour in neighbours) | ||
171 | { | ||
172 | regions[neighbour.regionHandle] = neighbour; | ||
173 | } | ||
174 | } | ||
175 | catch (Exception e) | ||
176 | { | ||
177 | OpenSim.Framework.Console.MainLog.Instance.Warn("Storage: Unable to query regionblock via " + kvp.Key); | ||
178 | } | ||
179 | } | ||
180 | |||
181 | return regions; | ||
182 | } | ||
183 | |||
184 | /// <summary> | ||
185 | /// Returns a XML String containing a list of the neighbouring regions | ||
186 | /// </summary> | ||
187 | /// <param name="reqhandle">The regionhandle for the center sim</param> | ||
188 | /// <returns>An XML string containing neighbour entities</returns> | ||
189 | public string GetXMLNeighbours(ulong reqhandle) | ||
190 | { | ||
191 | string response = ""; | ||
192 | SimProfileData central_region = getRegion(reqhandle); | ||
193 | SimProfileData neighbour; | ||
194 | for (int x = -1; x < 2; x++) for (int y = -1; y < 2; y++) | ||
195 | { | ||
196 | if (getRegion(Util.UIntsToLong((uint)((central_region.regionLocX + x) * 256), (uint)(central_region.regionLocY + y) * 256)) != null) | ||
197 | { | ||
198 | neighbour = getRegion(Util.UIntsToLong((uint)((central_region.regionLocX + x) * 256), (uint)(central_region.regionLocY + y) * 256)); | ||
199 | response += "<neighbour>"; | ||
200 | response += "<sim_ip>" + neighbour.serverIP + "</sim_ip>"; | ||
201 | response += "<sim_port>" + neighbour.serverPort.ToString() + "</sim_port>"; | ||
202 | response += "<locx>" + neighbour.regionLocX.ToString() + "</locx>"; | ||
203 | response += "<locy>" + neighbour.regionLocY.ToString() + "</locy>"; | ||
204 | response += "<regionhandle>" + neighbour.regionHandle.ToString() + "</regionhandle>"; | ||
205 | response += "</neighbour>"; | ||
206 | |||
207 | } | ||
208 | } | ||
209 | return response; | ||
210 | } | ||
211 | |||
212 | /// <summary> | ||
213 | /// Performed when a region connects to the grid server initially. | ||
214 | /// </summary> | ||
215 | /// <param name="request">The XMLRPC Request</param> | ||
216 | /// <returns>Startup parameters</returns> | ||
217 | public XmlRpcResponse XmlRpcLoginToSimulatorMethod(XmlRpcRequest request) | ||
218 | { | ||
219 | XmlRpcResponse response = new XmlRpcResponse(); | ||
220 | Hashtable responseData = new Hashtable(); | ||
221 | response.Value = responseData; | ||
222 | |||
223 | SimProfileData TheSim = null; | ||
224 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
225 | |||
226 | if (requestData.ContainsKey("UUID")) | ||
227 | { | ||
228 | TheSim = getRegion(new LLUUID((string)requestData["UUID"])); | ||
229 | logToDB((new LLUUID((string)requestData["UUID"])).ToStringHyphenated(),"XmlRpcLoginToSimulatorMethod","", 5,"Region attempting login with UUID."); | ||
230 | } | ||
231 | else if (requestData.ContainsKey("region_handle")) | ||
232 | { | ||
233 | TheSim = getRegion((ulong)Convert.ToUInt64(requestData["region_handle"])); | ||
234 | logToDB((string)requestData["region_handle"], "XmlRpcLoginToSimulatorMethod", "", 5, "Region attempting login with regionHandle."); | ||
235 | } | ||
236 | else | ||
237 | { | ||
238 | responseData["error"] = "No UUID or region_handle passed to grid server - unable to connect you"; | ||
239 | return response; | ||
240 | } | ||
241 | |||
242 | if (TheSim == null) | ||
243 | { | ||
244 | responseData["error"] = "sim not found"; | ||
245 | return response; | ||
246 | } | ||
247 | else | ||
248 | { | ||
249 | |||
250 | ArrayList SimNeighboursData = new ArrayList(); | ||
251 | |||
252 | SimProfileData neighbour; | ||
253 | Hashtable NeighbourBlock; | ||
254 | |||
255 | bool fastMode = false; // Only compatible with MySQL right now | ||
256 | |||
257 | if (fastMode) | ||
258 | { | ||
259 | Dictionary<ulong, SimProfileData> neighbours = getRegions(TheSim.regionLocX - 1, TheSim.regionLocY - 1, TheSim.regionLocX + 1, TheSim.regionLocY + 1); | ||
260 | |||
261 | foreach (KeyValuePair<ulong, SimProfileData> aSim in neighbours) | ||
262 | { | ||
263 | NeighbourBlock = new Hashtable(); | ||
264 | NeighbourBlock["sim_ip"] = aSim.Value.serverIP.ToString(); | ||
265 | NeighbourBlock["sim_port"] = aSim.Value.serverPort.ToString(); | ||
266 | NeighbourBlock["region_locx"] = aSim.Value.regionLocX.ToString(); | ||
267 | NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString(); | ||
268 | NeighbourBlock["UUID"] = aSim.Value.UUID.ToString(); | ||
269 | |||
270 | if (aSim.Value.UUID != TheSim.UUID) | ||
271 | SimNeighboursData.Add(NeighbourBlock); | ||
272 | } | ||
273 | } | ||
274 | else | ||
275 | { | ||
276 | for (int x = -1; x < 2; x++) for (int y = -1; y < 2; y++) | ||
277 | { | ||
278 | if (getRegion(Helpers.UIntsToLong((uint)((TheSim.regionLocX + x) * 256), (uint)(TheSim.regionLocY + y) * 256)) != null) | ||
279 | { | ||
280 | neighbour = getRegion(Helpers.UIntsToLong((uint)((TheSim.regionLocX + x) * 256), (uint)(TheSim.regionLocY + y) * 256)); | ||
281 | |||
282 | NeighbourBlock = new Hashtable(); | ||
283 | NeighbourBlock["sim_ip"] = neighbour.serverIP; | ||
284 | NeighbourBlock["sim_port"] = neighbour.serverPort.ToString(); | ||
285 | NeighbourBlock["region_locx"] = neighbour.regionLocX.ToString(); | ||
286 | NeighbourBlock["region_locy"] = neighbour.regionLocY.ToString(); | ||
287 | NeighbourBlock["UUID"] = neighbour.UUID.ToString(); | ||
288 | |||
289 | if (neighbour.UUID != TheSim.UUID) SimNeighboursData.Add(NeighbourBlock); | ||
290 | } | ||
291 | } | ||
292 | } | ||
293 | |||
294 | responseData["UUID"] = TheSim.UUID.ToString(); | ||
295 | responseData["region_locx"] = TheSim.regionLocX.ToString(); | ||
296 | responseData["region_locy"] = TheSim.regionLocY.ToString(); | ||
297 | responseData["regionname"] = TheSim.regionName; | ||
298 | responseData["estate_id"] = "1"; | ||
299 | responseData["neighbours"] = SimNeighboursData; | ||
300 | |||
301 | responseData["sim_ip"] = TheSim.serverIP; | ||
302 | responseData["sim_port"] = TheSim.serverPort.ToString(); | ||
303 | responseData["asset_url"] = TheSim.regionAssetURI; | ||
304 | responseData["asset_sendkey"] = TheSim.regionAssetSendKey; | ||
305 | responseData["asset_recvkey"] = TheSim.regionAssetRecvKey; | ||
306 | responseData["user_url"] = TheSim.regionUserURI; | ||
307 | responseData["user_sendkey"] = TheSim.regionUserSendKey; | ||
308 | responseData["user_recvkey"] = TheSim.regionUserRecvKey; | ||
309 | responseData["authkey"] = TheSim.regionSecret; | ||
310 | |||
311 | // New! If set, use as URL to local sim storage (ie http://remotehost/region.yap) | ||
312 | responseData["data_uri"] = TheSim.regionDataURI; | ||
313 | } | ||
314 | |||
315 | return response; | ||
316 | } | ||
317 | |||
318 | public XmlRpcResponse XmlRpcMapBlockMethod(XmlRpcRequest request) | ||
319 | { | ||
320 | int xmin=980, ymin=980, xmax=1020, ymax=1020; | ||
321 | |||
322 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
323 | if (requestData.ContainsKey("xmin")) | ||
324 | { | ||
325 | xmin = (Int32)requestData["xmin"]; | ||
326 | } | ||
327 | if (requestData.ContainsKey("ymin")) | ||
328 | { | ||
329 | ymin = (Int32)requestData["ymin"]; | ||
330 | } | ||
331 | if (requestData.ContainsKey("xmax")) | ||
332 | { | ||
333 | xmax = (Int32)requestData["xmax"]; | ||
334 | } | ||
335 | if (requestData.ContainsKey("ymax")) | ||
336 | { | ||
337 | ymax = (Int32)requestData["ymax"]; | ||
338 | } | ||
339 | |||
340 | XmlRpcResponse response = new XmlRpcResponse(); | ||
341 | Hashtable responseData = new Hashtable(); | ||
342 | response.Value = responseData; | ||
343 | IList simProfileList = new ArrayList(); | ||
344 | |||
345 | bool fastMode = true; // MySQL Only | ||
346 | |||
347 | if (fastMode) | ||
348 | { | ||
349 | Dictionary<ulong, SimProfileData> neighbours = getRegions((uint)xmin, (uint)ymin, (uint)xmax, (uint)ymax); | ||
350 | |||
351 | foreach (KeyValuePair<ulong, SimProfileData> aSim in neighbours) | ||
352 | { | ||
353 | Hashtable simProfileBlock = new Hashtable(); | ||
354 | simProfileBlock["x"] = aSim.Value.regionLocX.ToString(); | ||
355 | simProfileBlock["y"] = aSim.Value.regionLocY.ToString(); | ||
356 | simProfileBlock["name"] = aSim.Value.regionName; | ||
357 | simProfileBlock["access"] = 21; | ||
358 | simProfileBlock["region-flags"] = 512; | ||
359 | simProfileBlock["water-height"] = 0; | ||
360 | simProfileBlock["agents"] = 1; | ||
361 | simProfileBlock["map-image-id"] = aSim.Value.regionMapTextureID.ToString(); | ||
362 | |||
363 | // For Sugilite compatibility | ||
364 | simProfileBlock["regionhandle"] = aSim.Value.regionHandle.ToString(); | ||
365 | simProfileBlock["sim_ip"] = aSim.Value.serverIP.ToString(); | ||
366 | simProfileBlock["sim_port"] = aSim.Value.serverPort.ToString(); | ||
367 | simProfileBlock["sim_uri"] = aSim.Value.serverURI.ToString(); | ||
368 | simProfileBlock["uuid"] = aSim.Value.UUID.ToStringHyphenated(); | ||
369 | |||
370 | simProfileList.Add(simProfileBlock); | ||
371 | } | ||
372 | OpenSim.Framework.Console.MainLog.Instance.Verbose("World map request processed, returned " + simProfileList.Count.ToString() + " region(s) in range via FastMode"); | ||
373 | } | ||
374 | else | ||
375 | { | ||
376 | SimProfileData simProfile; | ||
377 | for (int x = xmin; x < xmax; x++) | ||
378 | { | ||
379 | for (int y = ymin; y < ymax; y++) | ||
380 | { | ||
381 | simProfile = getRegion(Helpers.UIntsToLong((uint)(x * 256), (uint)(y * 256))); | ||
382 | if (simProfile != null) | ||
383 | { | ||
384 | Hashtable simProfileBlock = new Hashtable(); | ||
385 | simProfileBlock["x"] = x; | ||
386 | simProfileBlock["y"] = y; | ||
387 | simProfileBlock["name"] = simProfile.regionName; | ||
388 | simProfileBlock["access"] = 0; | ||
389 | simProfileBlock["region-flags"] = 0; | ||
390 | simProfileBlock["water-height"] = 20; | ||
391 | simProfileBlock["agents"] = 1; | ||
392 | simProfileBlock["map-image-id"] = simProfile.regionMapTextureID.ToString(); | ||
393 | |||
394 | // For Sugilite compatibility | ||
395 | simProfileBlock["regionhandle"] = simProfile.regionHandle.ToString(); | ||
396 | simProfileBlock["sim_ip"] = simProfile.serverIP.ToString(); | ||
397 | simProfileBlock["sim_port"] = simProfile.serverPort.ToString(); | ||
398 | simProfileBlock["sim_uri"] = simProfile.serverURI.ToString(); | ||
399 | simProfileBlock["uuid"] = simProfile.UUID.ToStringHyphenated(); | ||
400 | |||
401 | simProfileList.Add(simProfileBlock); | ||
402 | } | ||
403 | } | ||
404 | } | ||
405 | OpenSim.Framework.Console.MainLog.Instance.Verbose("World map request processed, returned " + simProfileList.Count.ToString() + " region(s) in range via Standard Mode"); | ||
406 | } | ||
407 | |||
408 | responseData["sim-profiles"] = simProfileList; | ||
409 | |||
410 | return response; | ||
411 | } | ||
412 | |||
413 | |||
414 | |||
415 | /// <summary> | ||
416 | /// Performs a REST Get Operation | ||
417 | /// </summary> | ||
418 | /// <param name="request"></param> | ||
419 | /// <param name="path"></param> | ||
420 | /// <param name="param"></param> | ||
421 | /// <returns></returns> | ||
422 | public string RestGetRegionMethod(string request, string path, string param) | ||
423 | { | ||
424 | return RestGetSimMethod("", "/sims/", param); | ||
425 | } | ||
426 | |||
427 | /// <summary> | ||
428 | /// Performs a REST Set Operation | ||
429 | /// </summary> | ||
430 | /// <param name="request"></param> | ||
431 | /// <param name="path"></param> | ||
432 | /// <param name="param"></param> | ||
433 | /// <returns></returns> | ||
434 | public string RestSetRegionMethod(string request, string path, string param) | ||
435 | { | ||
436 | return RestSetSimMethod("", "/sims/", param); | ||
437 | } | ||
438 | |||
439 | /// <summary> | ||
440 | /// Returns information about a sim via a REST Request | ||
441 | /// </summary> | ||
442 | /// <param name="request"></param> | ||
443 | /// <param name="path"></param> | ||
444 | /// <param name="param"></param> | ||
445 | /// <returns>Information about the sim in XML</returns> | ||
446 | public string RestGetSimMethod(string request, string path, string param) | ||
447 | { | ||
448 | string respstring = String.Empty; | ||
449 | |||
450 | SimProfileData TheSim; | ||
451 | LLUUID UUID = new LLUUID(param); | ||
452 | TheSim = getRegion(UUID); | ||
453 | |||
454 | if (!(TheSim == null)) | ||
455 | { | ||
456 | respstring = "<Root>"; | ||
457 | respstring += "<authkey>" + TheSim.regionSendKey + "</authkey>"; | ||
458 | respstring += "<sim>"; | ||
459 | respstring += "<uuid>" + TheSim.UUID.ToString() + "</uuid>"; | ||
460 | respstring += "<regionname>" + TheSim.regionName + "</regionname>"; | ||
461 | respstring += "<sim_ip>" + TheSim.serverIP + "</sim_ip>"; | ||
462 | respstring += "<sim_port>" + TheSim.serverPort.ToString() + "</sim_port>"; | ||
463 | respstring += "<region_locx>" + TheSim.regionLocX.ToString() + "</region_locx>"; | ||
464 | respstring += "<region_locy>" + TheSim.regionLocY.ToString() + "</region_locy>"; | ||
465 | respstring += "<estate_id>1</estate_id>"; | ||
466 | respstring += "</sim>"; | ||
467 | respstring += "</Root>"; | ||
468 | } | ||
469 | |||
470 | return respstring; | ||
471 | } | ||
472 | |||
473 | /// <summary> | ||
474 | /// Creates or updates a sim via a REST Method Request | ||
475 | /// BROKEN with SQL Update | ||
476 | /// </summary> | ||
477 | /// <param name="request"></param> | ||
478 | /// <param name="path"></param> | ||
479 | /// <param name="param"></param> | ||
480 | /// <returns>"OK" or an error</returns> | ||
481 | public string RestSetSimMethod(string request, string path, string param) | ||
482 | { | ||
483 | Console.WriteLine("Processing region update"); | ||
484 | SimProfileData TheSim; | ||
485 | TheSim = getRegion(new LLUUID(param)); | ||
486 | if ((TheSim) == null) | ||
487 | { | ||
488 | TheSim = new SimProfileData(); | ||
489 | LLUUID UUID = new LLUUID(param); | ||
490 | TheSim.UUID = UUID; | ||
491 | TheSim.regionRecvKey = config.SimRecvKey; | ||
492 | } | ||
493 | |||
494 | XmlDocument doc = new XmlDocument(); | ||
495 | doc.LoadXml(request); | ||
496 | XmlNode rootnode = doc.FirstChild; | ||
497 | XmlNode authkeynode = rootnode.ChildNodes[0]; | ||
498 | if (authkeynode.Name != "authkey") | ||
499 | { | ||
500 | return "ERROR! bad XML - expected authkey tag"; | ||
501 | } | ||
502 | |||
503 | XmlNode simnode = rootnode.ChildNodes[1]; | ||
504 | if (simnode.Name != "sim") | ||
505 | { | ||
506 | return "ERROR! bad XML - expected sim tag"; | ||
507 | } | ||
508 | |||
509 | if (authkeynode.InnerText != TheSim.regionRecvKey) | ||
510 | { | ||
511 | return "ERROR! invalid key"; | ||
512 | } | ||
513 | |||
514 | //TheSim.regionSendKey = Cfg; | ||
515 | TheSim.regionRecvKey = config.SimRecvKey; | ||
516 | TheSim.regionSendKey = config.SimSendKey; | ||
517 | TheSim.regionSecret = config.SimRecvKey; | ||
518 | TheSim.regionDataURI = ""; | ||
519 | TheSim.regionAssetURI = config.DefaultAssetServer; | ||
520 | TheSim.regionAssetRecvKey = config.AssetRecvKey; | ||
521 | TheSim.regionAssetSendKey = config.AssetSendKey; | ||
522 | TheSim.regionUserURI = config.DefaultUserServer; | ||
523 | TheSim.regionUserSendKey = config.UserSendKey; | ||
524 | TheSim.regionUserRecvKey = config.UserRecvKey; | ||
525 | |||
526 | |||
527 | for (int i = 0; i < simnode.ChildNodes.Count; i++) | ||
528 | { | ||
529 | switch (simnode.ChildNodes[i].Name) | ||
530 | { | ||
531 | case "regionname": | ||
532 | TheSim.regionName = simnode.ChildNodes[i].InnerText; | ||
533 | break; | ||
534 | |||
535 | case "sim_ip": | ||
536 | TheSim.serverIP = simnode.ChildNodes[i].InnerText; | ||
537 | break; | ||
538 | |||
539 | case "sim_port": | ||
540 | TheSim.serverPort = Convert.ToUInt32(simnode.ChildNodes[i].InnerText); | ||
541 | break; | ||
542 | |||
543 | case "region_locx": | ||
544 | TheSim.regionLocX = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText); | ||
545 | TheSim.regionHandle = Helpers.UIntsToLong((TheSim.regionLocX * 256), (TheSim.regionLocY * 256)); | ||
546 | break; | ||
547 | |||
548 | case "region_locy": | ||
549 | TheSim.regionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText); | ||
550 | TheSim.regionHandle = Helpers.UIntsToLong((TheSim.regionLocX * 256), (TheSim.regionLocY * 256)); | ||
551 | break; | ||
552 | } | ||
553 | } | ||
554 | |||
555 | TheSim.serverURI = "http://" + TheSim.serverIP + ":" + TheSim.serverPort + "/"; | ||
556 | |||
557 | bool requirePublic = false; | ||
558 | |||
559 | if (requirePublic && (TheSim.serverIP.StartsWith("172.16") || TheSim.serverIP.StartsWith("192.168") || TheSim.serverIP.StartsWith("10.") || TheSim.serverIP.StartsWith("0.") || TheSim.serverIP.StartsWith("255."))) | ||
560 | { | ||
561 | return "ERROR! Servers must register with public addresses."; | ||
562 | } | ||
563 | |||
564 | |||
565 | try | ||
566 | { | ||
567 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Updating / adding via " + _plugins.Count + " storage provider(s) registered."); | ||
568 | foreach (KeyValuePair<string, IGridData> kvp in _plugins) | ||
569 | { | ||
570 | try | ||
571 | { | ||
572 | //Check reservations | ||
573 | ReservationData reserveData = kvp.Value.GetReservationAtPoint(TheSim.regionLocX, TheSim.regionLocY); | ||
574 | if ((reserveData != null && reserveData.gridRecvKey == TheSim.regionRecvKey) || (reserveData == null)) | ||
575 | { | ||
576 | kvp.Value.AddProfile(TheSim); | ||
577 | OpenSim.Framework.Console.MainLog.Instance.Verbose("New sim added to grid (" + TheSim.regionName + ")"); | ||
578 | logToDB(TheSim.UUID.ToStringHyphenated(), "RestSetSimMethod", "", 5, "Region successfully updated and connected to grid."); | ||
579 | } | ||
580 | else | ||
581 | { | ||
582 | return "Unable to update region (RestSetSimMethod): Incorrect auth key."; | ||
583 | } | ||
584 | } | ||
585 | catch (Exception e) | ||
586 | { | ||
587 | OpenSim.Framework.Console.MainLog.Instance.Verbose("getRegionPlugin Handle " + kvp.Key + " unable to add new sim: " + e.ToString()); | ||
588 | } | ||
589 | } | ||
590 | return "OK"; | ||
591 | } | ||
592 | catch (Exception e) | ||
593 | { | ||
594 | return "ERROR! Could not save to database! (" + e.ToString() + ")"; | ||
595 | } | ||
596 | } | ||
597 | |||
598 | } | ||
599 | } | ||
diff --git a/OpenSim/Grid/GridServer/Main.cs b/OpenSim/Grid/GridServer/Main.cs new file mode 100644 index 0000000..b948fd6 --- /dev/null +++ b/OpenSim/Grid/GridServer/Main.cs | |||
@@ -0,0 +1,271 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.IO; | ||
31 | using System.Text; | ||
32 | using System.Timers; | ||
33 | using System.Net; | ||
34 | using System.Threading; | ||
35 | using System.Reflection; | ||
36 | using libsecondlife; | ||
37 | using OpenGrid.Framework.Manager; | ||
38 | using OpenSim.Framework; | ||
39 | using OpenSim.Framework.Sims; | ||
40 | using OpenSim.Framework.Console; | ||
41 | using OpenSim.Framework.Interfaces; | ||
42 | using OpenSim.Servers; | ||
43 | using OpenSim.GenericConfig; | ||
44 | |||
45 | namespace OpenGridServices.GridServer | ||
46 | { | ||
47 | /// <summary> | ||
48 | /// </summary> | ||
49 | public class OpenGrid_Main : conscmd_callback | ||
50 | { | ||
51 | private string ConfigDll = "OpenGrid.Config.GridConfigDb4o.dll"; | ||
52 | private string GridDll = "OpenGrid.Framework.Data.MySQL.dll"; | ||
53 | public GridConfig Cfg; | ||
54 | |||
55 | public static OpenGrid_Main thegrid; | ||
56 | protected IGenericConfig localXMLConfig; | ||
57 | |||
58 | public static bool setuponly; | ||
59 | |||
60 | //public LLUUID highestUUID; | ||
61 | |||
62 | // private SimProfileManager m_simProfileManager; | ||
63 | |||
64 | private GridManager m_gridManager; | ||
65 | |||
66 | private LogBase m_console; | ||
67 | |||
68 | [STAThread] | ||
69 | public static void Main(string[] args) | ||
70 | { | ||
71 | if (args.Length > 0) | ||
72 | { | ||
73 | if (args[0] == "-setuponly") setuponly = true; | ||
74 | } | ||
75 | Console.WriteLine("Starting...\n"); | ||
76 | |||
77 | thegrid = new OpenGrid_Main(); | ||
78 | thegrid.Startup(); | ||
79 | |||
80 | thegrid.Work(); | ||
81 | } | ||
82 | |||
83 | private void Work() | ||
84 | { | ||
85 | while (true) | ||
86 | { | ||
87 | Thread.Sleep(5000); | ||
88 | // should flush the DB etc here | ||
89 | } | ||
90 | } | ||
91 | |||
92 | private OpenGrid_Main() | ||
93 | { | ||
94 | m_console = new LogBase("opengrid-gridserver-console.log", "OpenGrid", this, false); | ||
95 | MainLog.Instance = m_console; | ||
96 | |||
97 | |||
98 | } | ||
99 | |||
100 | public void managercallback(string cmd) | ||
101 | { | ||
102 | switch (cmd) | ||
103 | { | ||
104 | case "shutdown": | ||
105 | RunCmd("shutdown", new string[0]); | ||
106 | break; | ||
107 | } | ||
108 | } | ||
109 | |||
110 | |||
111 | public void Startup() | ||
112 | { | ||
113 | this.localXMLConfig = new XmlConfig("GridServerConfig.xml"); | ||
114 | this.localXMLConfig.LoadData(); | ||
115 | this.ConfigDB(this.localXMLConfig); | ||
116 | this.localXMLConfig.Close(); | ||
117 | |||
118 | m_console.Verbose( "Main.cs:Startup() - Loading configuration"); | ||
119 | Cfg = this.LoadConfigDll(this.ConfigDll); | ||
120 | Cfg.InitConfig(); | ||
121 | if (setuponly) Environment.Exit(0); | ||
122 | |||
123 | m_console.Verbose( "Main.cs:Startup() - Connecting to Storage Server"); | ||
124 | m_gridManager = new GridManager(); | ||
125 | m_gridManager.AddPlugin(GridDll); // Made of win | ||
126 | m_gridManager.config = Cfg; | ||
127 | |||
128 | m_console.Verbose( "Main.cs:Startup() - Starting HTTP process"); | ||
129 | BaseHttpServer httpServer = new BaseHttpServer(8001); | ||
130 | //GridManagementAgent GridManagerAgent = new GridManagementAgent(httpServer, "gridserver", Cfg.SimSendKey, Cfg.SimRecvKey, managercallback); | ||
131 | |||
132 | httpServer.AddXmlRPCHandler("simulator_login", m_gridManager.XmlRpcLoginToSimulatorMethod); | ||
133 | httpServer.AddXmlRPCHandler("map_block", m_gridManager.XmlRpcMapBlockMethod); | ||
134 | |||
135 | httpServer.AddRestHandler("GET", "/sims/", m_gridManager.RestGetSimMethod); | ||
136 | httpServer.AddRestHandler("POST", "/sims/", m_gridManager.RestSetSimMethod); | ||
137 | httpServer.AddRestHandler("GET", "/regions/", m_gridManager.RestGetRegionMethod); | ||
138 | httpServer.AddRestHandler("POST", "/regions/", m_gridManager.RestSetRegionMethod); | ||
139 | |||
140 | |||
141 | // lbsa71 : This code snippet taken from old http server. | ||
142 | // I have no idea what this was supposed to do - looks like an infinite recursion to me. | ||
143 | // case "regions": | ||
144 | //// DIRTY HACK ALERT | ||
145 | //Console.Notice("/regions/ accessed"); | ||
146 | //TheSim = OpenGrid_Main.thegrid._regionmanager.GetProfileByHandle((ulong)Convert.ToUInt64(rest_params[1])); | ||
147 | //respstring = ParseREST("/regions/" + rest_params[1], requestBody, HTTPmethod); | ||
148 | //break; | ||
149 | |||
150 | // lbsa71 : I guess these were never used? | ||
151 | //Listener.Prefixes.Add("http://+:8001/gods/"); | ||
152 | //Listener.Prefixes.Add("http://+:8001/highestuuid/"); | ||
153 | //Listener.Prefixes.Add("http://+:8001/uuidblocks/"); | ||
154 | |||
155 | httpServer.Start(); | ||
156 | |||
157 | m_console.Verbose( "Main.cs:Startup() - Starting sim status checker"); | ||
158 | |||
159 | System.Timers.Timer simCheckTimer = new System.Timers.Timer(3600000 * 3); // 3 Hours between updates. | ||
160 | simCheckTimer.Elapsed += new ElapsedEventHandler(CheckSims); | ||
161 | simCheckTimer.Enabled = true; | ||
162 | } | ||
163 | |||
164 | private GridConfig LoadConfigDll(string dllName) | ||
165 | { | ||
166 | Assembly pluginAssembly = Assembly.LoadFrom(dllName); | ||
167 | GridConfig config = null; | ||
168 | |||
169 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
170 | { | ||
171 | if (pluginType.IsPublic) | ||
172 | { | ||
173 | if (!pluginType.IsAbstract) | ||
174 | { | ||
175 | Type typeInterface = pluginType.GetInterface("IGridConfig", true); | ||
176 | |||
177 | if (typeInterface != null) | ||
178 | { | ||
179 | IGridConfig plug = (IGridConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
180 | config = plug.GetConfigObject(); | ||
181 | break; | ||
182 | } | ||
183 | |||
184 | typeInterface = null; | ||
185 | } | ||
186 | } | ||
187 | } | ||
188 | pluginAssembly = null; | ||
189 | return config; | ||
190 | } | ||
191 | |||
192 | public void CheckSims(object sender, ElapsedEventArgs e) | ||
193 | { | ||
194 | /* | ||
195 | foreach (SimProfileBase sim in m_simProfileManager.SimProfiles.Values) | ||
196 | { | ||
197 | string SimResponse = ""; | ||
198 | try | ||
199 | { | ||
200 | WebRequest CheckSim = WebRequest.Create("http://" + sim.sim_ip + ":" + sim.sim_port.ToString() + "/checkstatus/"); | ||
201 | CheckSim.Method = "GET"; | ||
202 | CheckSim.ContentType = "text/plaintext"; | ||
203 | CheckSim.ContentLength = 0; | ||
204 | |||
205 | StreamWriter stOut = new StreamWriter(CheckSim.GetRequestStream(), System.Text.Encoding.ASCII); | ||
206 | stOut.Write(""); | ||
207 | stOut.Close(); | ||
208 | |||
209 | StreamReader stIn = new StreamReader(CheckSim.GetResponse().GetResponseStream()); | ||
210 | SimResponse = stIn.ReadToEnd(); | ||
211 | stIn.Close(); | ||
212 | } | ||
213 | catch | ||
214 | { | ||
215 | } | ||
216 | |||
217 | if (SimResponse == "OK") | ||
218 | { | ||
219 | m_simProfileManager.SimProfiles[sim.UUID].online = true; | ||
220 | } | ||
221 | else | ||
222 | { | ||
223 | m_simProfileManager.SimProfiles[sim.UUID].online = false; | ||
224 | } | ||
225 | } | ||
226 | */ | ||
227 | } | ||
228 | |||
229 | public void RunCmd(string cmd, string[] cmdparams) | ||
230 | { | ||
231 | switch (cmd) | ||
232 | { | ||
233 | case "help": | ||
234 | m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)"); | ||
235 | break; | ||
236 | |||
237 | case "shutdown": | ||
238 | m_console.Close(); | ||
239 | Environment.Exit(0); | ||
240 | break; | ||
241 | } | ||
242 | } | ||
243 | |||
244 | public void Show(string ShowWhat) | ||
245 | { | ||
246 | } | ||
247 | |||
248 | private void ConfigDB(IGenericConfig configData) | ||
249 | { | ||
250 | try | ||
251 | { | ||
252 | string attri = ""; | ||
253 | attri = configData.GetAttribute("DataBaseProvider"); | ||
254 | if (attri == "") | ||
255 | { | ||
256 | GridDll = "OpenGrid.Framework.Data.DB4o.dll"; | ||
257 | configData.SetAttribute("DataBaseProvider", "OpenGrid.Framework.Data.DB4o.dll"); | ||
258 | } | ||
259 | else | ||
260 | { | ||
261 | GridDll = attri; | ||
262 | } | ||
263 | configData.Commit(); | ||
264 | } | ||
265 | catch (Exception e) | ||
266 | { | ||
267 | |||
268 | } | ||
269 | } | ||
270 | } | ||
271 | } | ||
diff --git a/OpenSim/Grid/GridServer/OpenSim.Grid.GridServer.csproj b/OpenSim/Grid/GridServer/OpenSim.Grid.GridServer.csproj new file mode 100644 index 0000000..424072e --- /dev/null +++ b/OpenSim/Grid/GridServer/OpenSim.Grid.GridServer.csproj | |||
@@ -0,0 +1,134 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{60FCC3A6-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Grid.GridServer</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Exe</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Grid.GridServer</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="OpenSim.Framework" > | ||
70 | <HintPath>OpenSim.Framework.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="OpenSim.Framework.Console" > | ||
74 | <HintPath>OpenSim.Framework.Console.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="OpenSim.Framework.GenericConfig.Xml" > | ||
78 | <HintPath>OpenSim.Framework.GenericConfig.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="OpenSim.Framework.Servers" > | ||
82 | <HintPath>OpenSim.Framework.Servers.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="System" > | ||
86 | <HintPath>System.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | <Reference Include="System.Data" > | ||
90 | <HintPath>System.Data.dll</HintPath> | ||
91 | <Private>False</Private> | ||
92 | </Reference> | ||
93 | <Reference Include="System.Xml" > | ||
94 | <HintPath>System.Xml.dll</HintPath> | ||
95 | <Private>False</Private> | ||
96 | </Reference> | ||
97 | <Reference Include="XMLRPC.dll" > | ||
98 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
99 | <Private>False</Private> | ||
100 | </Reference> | ||
101 | </ItemGroup> | ||
102 | <ItemGroup> | ||
103 | <ProjectReference Include="..\..\Framework\Data\OpenSim.Framework.Data.csproj"> | ||
104 | <Name>OpenSim.Framework.Data</Name> | ||
105 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
106 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
107 | <Private>False</Private> | ||
108 | </ProjectReference> | ||
109 | <ProjectReference Include="..\Framework.Manager\OpenSim.Grid.Framework.Manager.csproj"> | ||
110 | <Name>OpenSim.Grid.Framework.Manager</Name> | ||
111 | <Project>{4B7BFD1C-0000-0000-0000-000000000000}</Project> | ||
112 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
113 | <Private>False</Private> | ||
114 | </ProjectReference> | ||
115 | </ItemGroup> | ||
116 | <ItemGroup> | ||
117 | <Compile Include="GridManager.cs"> | ||
118 | <SubType>Code</SubType> | ||
119 | </Compile> | ||
120 | <Compile Include="Main.cs"> | ||
121 | <SubType>Code</SubType> | ||
122 | </Compile> | ||
123 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
124 | <SubType>Code</SubType> | ||
125 | </Compile> | ||
126 | </ItemGroup> | ||
127 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
128 | <PropertyGroup> | ||
129 | <PreBuildEvent> | ||
130 | </PreBuildEvent> | ||
131 | <PostBuildEvent> | ||
132 | </PostBuildEvent> | ||
133 | </PropertyGroup> | ||
134 | </Project> | ||
diff --git a/OpenSim/Grid/GridServer/OpenSim.Grid.GridServer.csproj.user b/OpenSim/Grid/GridServer/OpenSim.Grid.GridServer.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Grid/GridServer/OpenSim.Grid.GridServer.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..303dddf --- /dev/null +++ b/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // General Information about an assembly is controlled through the following | ||
33 | // set of attributes. Change these attribute values to modify the information | ||
34 | // associated with an assembly. | ||
35 | [assembly: AssemblyTitle("OGS-GridServer")] | ||
36 | [assembly: AssemblyDescription("")] | ||
37 | [assembly: AssemblyConfiguration("")] | ||
38 | [assembly: AssemblyCompany("")] | ||
39 | [assembly: AssemblyProduct("OGS-GridServer")] | ||
40 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
41 | [assembly: AssemblyTrademark("")] | ||
42 | [assembly: AssemblyCulture("")] | ||
43 | |||
44 | // Setting ComVisible to false makes the types in this assembly not visible | ||
45 | // to COM components. If you need to access a type in this assembly from | ||
46 | // COM, set the ComVisible attribute to true on that type. | ||
47 | [assembly: ComVisible(false)] | ||
48 | |||
49 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
50 | [assembly: Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")] | ||
51 | |||
52 | // Version information for an assembly consists of the following four values: | ||
53 | // | ||
54 | // Major Version | ||
55 | // Minor Version | ||
56 | // Build Number | ||
57 | // Revision | ||
58 | // | ||
59 | [assembly: AssemblyVersion("1.0.0.0")] | ||
60 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Grid/InventoryServer/InventoryManager.cs b/OpenSim/Grid/InventoryServer/InventoryManager.cs new file mode 100644 index 0000000..9ca9b5e --- /dev/null +++ b/OpenSim/Grid/InventoryServer/InventoryManager.cs | |||
@@ -0,0 +1,125 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using OpenGrid.Framework.Data; | ||
33 | using libsecondlife; | ||
34 | using System.Reflection; | ||
35 | |||
36 | using System.Xml; | ||
37 | using Nwc.XmlRpc; | ||
38 | using OpenSim.Framework.Sims; | ||
39 | using OpenSim.Framework.Inventory; | ||
40 | using OpenSim.Framework.Utilities; | ||
41 | |||
42 | using System.Security.Cryptography; | ||
43 | |||
44 | namespace OpenGridServices.InventoryServer | ||
45 | { | ||
46 | class InventoryManager | ||
47 | { | ||
48 | Dictionary<string, IInventoryData> _plugins = new Dictionary<string, IInventoryData>(); | ||
49 | |||
50 | /// <summary> | ||
51 | /// Adds a new inventory server plugin - user servers will be requested in the order they were loaded. | ||
52 | /// </summary> | ||
53 | /// <param name="FileName">The filename to the inventory server plugin DLL</param> | ||
54 | public void AddPlugin(string FileName) | ||
55 | { | ||
56 | OpenSim.Framework.Console.MainConsole.Instance.Verbose( "Invenstorage: Attempting to load " + FileName); | ||
57 | Assembly pluginAssembly = Assembly.LoadFrom(FileName); | ||
58 | |||
59 | OpenSim.Framework.Console.MainConsole.Instance.Verbose( "Invenstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces."); | ||
60 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
61 | { | ||
62 | if (!pluginType.IsAbstract) | ||
63 | { | ||
64 | Type typeInterface = pluginType.GetInterface("IInventoryData", true); | ||
65 | |||
66 | if (typeInterface != null) | ||
67 | { | ||
68 | IInventoryData plug = (IInventoryData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
69 | plug.Initialise(); | ||
70 | this._plugins.Add(plug.getName(), plug); | ||
71 | OpenSim.Framework.Console.MainConsole.Instance.Verbose( "Invenstorage: Added IUserData Interface"); | ||
72 | } | ||
73 | |||
74 | typeInterface = null; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | pluginAssembly = null; | ||
79 | } | ||
80 | |||
81 | public List<InventoryFolderBase> getRootFolders(LLUUID user) | ||
82 | { | ||
83 | foreach (KeyValuePair<string, IInventoryData> kvp in _plugins) | ||
84 | { | ||
85 | try | ||
86 | { | ||
87 | return kvp.Value.getUserRootFolders(user); | ||
88 | } | ||
89 | catch (Exception e) | ||
90 | { | ||
91 | OpenSim.Framework.Console.MainConsole.Instance.Notice("Unable to get root folders via " + kvp.Key + " (" + e.ToString() + ")"); | ||
92 | } | ||
93 | } | ||
94 | return null; | ||
95 | } | ||
96 | |||
97 | public XmlRpcResponse XmlRpcInventoryRequest(XmlRpcRequest request) | ||
98 | { | ||
99 | XmlRpcResponse response = new XmlRpcResponse(); | ||
100 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
101 | |||
102 | Hashtable responseData = new Hashtable(); | ||
103 | |||
104 | // Stuff happens here | ||
105 | |||
106 | if (requestData.ContainsKey("Access-type")) | ||
107 | { | ||
108 | if (requestData["access-type"] == "rootfolders") | ||
109 | { | ||
110 | // responseData["rootfolders"] = | ||
111 | } | ||
112 | } | ||
113 | else | ||
114 | { | ||
115 | responseData["error"] = "No access-type specified."; | ||
116 | } | ||
117 | |||
118 | |||
119 | // Stuff stops happening here | ||
120 | |||
121 | response.Value = responseData; | ||
122 | return response; | ||
123 | } | ||
124 | } | ||
125 | } | ||
diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs new file mode 100644 index 0000000..f479a79 --- /dev/null +++ b/OpenSim/Grid/InventoryServer/Main.cs | |||
@@ -0,0 +1,87 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Reflection; | ||
32 | using System.IO; | ||
33 | using System.Text; | ||
34 | using libsecondlife; | ||
35 | using OpenSim.Framework.User; | ||
36 | using OpenSim.Framework.Sims; | ||
37 | using OpenSim.Framework.Inventory; | ||
38 | using OpenSim.Framework.Interfaces; | ||
39 | using OpenSim.Framework.Console; | ||
40 | using OpenSim.Servers; | ||
41 | using OpenSim.Framework.Utilities; | ||
42 | |||
43 | namespace OpenGridServices.InventoryServer | ||
44 | { | ||
45 | public class OpenInventory_Main : BaseServer, conscmd_callback | ||
46 | { | ||
47 | ConsoleBase m_console; | ||
48 | InventoryManager m_inventoryManager; | ||
49 | |||
50 | public static void Main(string[] args) | ||
51 | { | ||
52 | } | ||
53 | |||
54 | public OpenInventory_Main() | ||
55 | { | ||
56 | m_console = new ConsoleBase("opengrid-inventory-console.log", "OpenInventory", this, false); | ||
57 | MainConsole.Instance = m_console; | ||
58 | } | ||
59 | |||
60 | public void Startup() | ||
61 | { | ||
62 | MainConsole.Instance.Notice("Initialising inventory manager..."); | ||
63 | m_inventoryManager = new InventoryManager(); | ||
64 | |||
65 | MainConsole.Instance.Notice("Starting HTTP server"); | ||
66 | BaseHttpServer httpServer = new BaseHttpServer(8004); | ||
67 | |||
68 | httpServer.AddXmlRPCHandler("rootfolders", m_inventoryManager.XmlRpcInventoryRequest); | ||
69 | //httpServer.AddRestHandler("GET","/rootfolders/",Rest | ||
70 | } | ||
71 | |||
72 | public void RunCmd(string cmd, string[] cmdparams) | ||
73 | { | ||
74 | switch (cmd) | ||
75 | { | ||
76 | case "shutdown": | ||
77 | m_console.Close(); | ||
78 | Environment.Exit(0); | ||
79 | break; | ||
80 | } | ||
81 | } | ||
82 | |||
83 | public void Show(string ShowWhat) | ||
84 | { | ||
85 | } | ||
86 | } | ||
87 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager.mds b/OpenSim/Grid/Manager/OpenGridServices.Manager.mds new file mode 100644 index 0000000..ed7bc24 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager.mds | |||
@@ -0,0 +1,16 @@ | |||
1 | <Combine name="OpenGridServices.Manager" fileversion="2.0" outputpath="../../mono-1.2.3.1/lib/monodevelop/bin" MakePkgConfig="False" MakeLibPC="True"> | ||
2 | <Configurations active="Debug"> | ||
3 | <Configuration name="Debug" ctype="CombineConfiguration"> | ||
4 | <Entry build="True" name="OpenGridServices.Manager" configuration="Debug" /> | ||
5 | </Configuration> | ||
6 | <Configuration name="Release" ctype="CombineConfiguration"> | ||
7 | <Entry build="True" name="OpenGridServices.Manager" configuration="Release" /> | ||
8 | </Configuration> | ||
9 | </Configurations> | ||
10 | <StartMode startupentry="OpenGridServices.Manager" single="True"> | ||
11 | <Execute type="None" entry="OpenGridServices.Manager" /> | ||
12 | </StartMode> | ||
13 | <Entries> | ||
14 | <Entry filename="./OpenGridServices.Manager/OpenGridServices.Manager.mdp" /> | ||
15 | </Entries> | ||
16 | </Combine> \ No newline at end of file | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager.userprefs b/OpenSim/Grid/Manager/OpenGridServices.Manager.userprefs new file mode 100644 index 0000000..f221509 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager.userprefs | |||
@@ -0,0 +1,39 @@ | |||
1 | <?xml version="1.0"?> | ||
2 | <UserCombinePreferences filename="/home/gareth/OpenGridServices.Manager/OpenGridServices.Manager.mds"> | ||
3 | <Files> | ||
4 | <File filename="Welcome" /> | ||
5 | <File filename="./OpenGridServices.Manager/MainWindow.cs" /> | ||
6 | <File filename="./OpenGridServices.Manager/ConnectToGridServerDialog.cs" /> | ||
7 | <File filename="./OpenGridServices.Manager/Main.cs" /> | ||
8 | </Files> | ||
9 | <Views> | ||
10 | <ViewMemento Id="MonoDevelop.Ide.Gui.Pads.ProjectPad"> | ||
11 | <TreeView> | ||
12 | <Node expanded="True"> | ||
13 | <Node name="OpenGridServices.Manager" expanded="True"> | ||
14 | <Node name="References" expanded="True" /> | ||
15 | <Node name="Resources" expanded="True" /> | ||
16 | <Node name="UserInterface" expanded="True" /> | ||
17 | <Node name="ConnectToGridServerDialog.cs" expanded="False" selected="True" /> | ||
18 | </Node> | ||
19 | </Node> | ||
20 | </TreeView> | ||
21 | </ViewMemento> | ||
22 | <ViewMemento Id="MonoDevelop.Ide.Gui.Pads.ClassPad"> | ||
23 | <TreeView> | ||
24 | <Node expanded="True" /> | ||
25 | </TreeView> | ||
26 | </ViewMemento> | ||
27 | <ViewMemento Id="MonoDevelop.NUnit.TestPad"> | ||
28 | <TreeView> | ||
29 | <Node expanded="False" /> | ||
30 | </TreeView> | ||
31 | </ViewMemento> | ||
32 | </Views> | ||
33 | <Properties> | ||
34 | <Properties> | ||
35 | <Property key="ActiveConfiguration" value="Debug" /> | ||
36 | <Property key="ActiveWindow" value="/home/gareth/OpenGridServices.Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs" /> | ||
37 | </Properties> | ||
38 | </Properties> | ||
39 | </UserCombinePreferences> \ No newline at end of file | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager.usertasks b/OpenSim/Grid/Manager/OpenGridServices.Manager.usertasks new file mode 100644 index 0000000..d887d0e --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager.usertasks | |||
@@ -0,0 +1,2 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <ArrayOfUserTask xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> \ No newline at end of file | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/AssemblyInfo.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/AssemblyInfo.cs new file mode 100644 index 0000000..af4e275 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/AssemblyInfo.cs | |||
@@ -0,0 +1,32 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | |||
4 | // Information about this assembly is defined by the following | ||
5 | // attributes. | ||
6 | // | ||
7 | // change them to the information which is associated with the assembly | ||
8 | // you compile. | ||
9 | |||
10 | [assembly: AssemblyTitle("")] | ||
11 | [assembly: AssemblyDescription("")] | ||
12 | [assembly: AssemblyConfiguration("")] | ||
13 | [assembly: AssemblyCompany("")] | ||
14 | [assembly: AssemblyProduct("")] | ||
15 | [assembly: AssemblyCopyright("")] | ||
16 | [assembly: AssemblyTrademark("")] | ||
17 | [assembly: AssemblyCulture("")] | ||
18 | |||
19 | // The assembly version has following format : | ||
20 | // | ||
21 | // Major.Minor.Build.Revision | ||
22 | // | ||
23 | // You can specify all values by your own or you can build default build and revision | ||
24 | // numbers with the '*' character (the default): | ||
25 | |||
26 | [assembly: AssemblyVersion("1.0.*")] | ||
27 | |||
28 | // The following attributes specify the key for the sign of your assembly. See the | ||
29 | // .NET Framework documentation for more information about signing. | ||
30 | // This is not required, if you don't want signing let these attributes like they're. | ||
31 | [assembly: AssemblyDelaySign(false)] | ||
32 | [assembly: AssemblyKeyFile("")] | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/BlockingQueue.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/BlockingQueue.cs new file mode 100644 index 0000000..83685fc --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/BlockingQueue.cs | |||
@@ -0,0 +1,33 @@ | |||
1 | using System; | ||
2 | using System.Threading; | ||
3 | using System.Collections.Generic; | ||
4 | using System.Text; | ||
5 | |||
6 | namespace OpenGridServices.Manager | ||
7 | { | ||
8 | public class BlockingQueue<T> | ||
9 | { | ||
10 | private Queue<T> _queue = new Queue<T>(); | ||
11 | private object _queueSync = new object(); | ||
12 | |||
13 | public void Enqueue(T value) | ||
14 | { | ||
15 | lock (_queueSync) | ||
16 | { | ||
17 | _queue.Enqueue(value); | ||
18 | Monitor.Pulse(_queueSync); | ||
19 | } | ||
20 | } | ||
21 | |||
22 | public T Dequeue() | ||
23 | { | ||
24 | lock (_queueSync) | ||
25 | { | ||
26 | if (_queue.Count < 1) | ||
27 | Monitor.Wait(_queueSync); | ||
28 | |||
29 | return _queue.Dequeue(); | ||
30 | } | ||
31 | } | ||
32 | } | ||
33 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/Connect to grid server.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/Connect to grid server.cs new file mode 100644 index 0000000..0d509ef --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/Connect to grid server.cs | |||
@@ -0,0 +1,16 @@ | |||
1 | |||
2 | using System; | ||
3 | |||
4 | namespace OpenGridServices.Manager | ||
5 | { | ||
6 | |||
7 | |||
8 | public partial class Connect to grid server : Gtk.Dialog | ||
9 | { | ||
10 | |||
11 | public Connect to grid server() | ||
12 | { | ||
13 | this.Build(); | ||
14 | } | ||
15 | } | ||
16 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs new file mode 100644 index 0000000..8a80b1d --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs | |||
@@ -0,0 +1,29 @@ | |||
1 | using Gtk; | ||
2 | using System; | ||
3 | |||
4 | namespace OpenGridServices.Manager { | ||
5 | public partial class ConnectToGridServerDialog : Gtk.Dialog | ||
6 | { | ||
7 | |||
8 | public ConnectToGridServerDialog() | ||
9 | { | ||
10 | this.Build(); | ||
11 | } | ||
12 | |||
13 | protected virtual void OnResponse(object o, Gtk.ResponseArgs args) | ||
14 | { | ||
15 | switch(args.ResponseId) { | ||
16 | case Gtk.ResponseType.Ok: | ||
17 | MainClass.PendingOperations.Enqueue("connect_to_gridserver " + this.entry1.Text + " " + this.entry2.Text + " " + this.entry3.Text); | ||
18 | break; | ||
19 | |||
20 | case Gtk.ResponseType.Cancel: | ||
21 | break; | ||
22 | } | ||
23 | this.Hide(); | ||
24 | |||
25 | } | ||
26 | |||
27 | } | ||
28 | |||
29 | } \ No newline at end of file | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/GridServerConnectionManager.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/GridServerConnectionManager.cs new file mode 100644 index 0000000..6b632d6 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/GridServerConnectionManager.cs | |||
@@ -0,0 +1,106 @@ | |||
1 | using Nwc.XmlRpc; | ||
2 | using System; | ||
3 | using System.Net; | ||
4 | using System.IO; | ||
5 | using System.Xml; | ||
6 | using System.Collections; | ||
7 | using System.Collections.Generic; | ||
8 | using libsecondlife; | ||
9 | |||
10 | namespace OpenGridServices.Manager | ||
11 | { | ||
12 | public class GridServerConnectionManager | ||
13 | { | ||
14 | private string ServerURL; | ||
15 | public LLUUID SessionID; | ||
16 | public bool connected=false; | ||
17 | |||
18 | public RegionBlock[][] WorldMap; | ||
19 | |||
20 | public bool Connect(string GridServerURL, string username, string password) | ||
21 | { | ||
22 | try { | ||
23 | this.ServerURL=GridServerURL; | ||
24 | Hashtable LoginParamsHT = new Hashtable(); | ||
25 | LoginParamsHT["username"]=username; | ||
26 | LoginParamsHT["password"]=password; | ||
27 | ArrayList LoginParams = new ArrayList(); | ||
28 | LoginParams.Add(LoginParamsHT); | ||
29 | XmlRpcRequest GridLoginReq = new XmlRpcRequest("manager_login",LoginParams); | ||
30 | XmlRpcResponse GridResp = GridLoginReq.Send(ServerURL,3000); | ||
31 | if(GridResp.IsFault) { | ||
32 | connected=false; | ||
33 | return false; | ||
34 | } else { | ||
35 | Hashtable gridrespData = (Hashtable)GridResp.Value; | ||
36 | this.SessionID = new LLUUID((string)gridrespData["session_id"]); | ||
37 | connected=true; | ||
38 | return true; | ||
39 | } | ||
40 | } catch(Exception e) { | ||
41 | Console.WriteLine(e.ToString()); | ||
42 | connected=false; | ||
43 | return false; | ||
44 | } | ||
45 | } | ||
46 | |||
47 | public void DownloadMap() | ||
48 | { | ||
49 | System.Net.WebClient mapdownloader = new WebClient(); | ||
50 | Stream regionliststream = mapdownloader.OpenRead(ServerURL + "/regionlist"); | ||
51 | |||
52 | RegionBlock TempRegionData; | ||
53 | |||
54 | XmlDocument doc = new XmlDocument(); | ||
55 | doc.Load(regionliststream); | ||
56 | regionliststream.Close(); | ||
57 | XmlNode rootnode = doc.FirstChild; | ||
58 | if (rootnode.Name != "regions") | ||
59 | { | ||
60 | // TODO - ERROR! | ||
61 | } | ||
62 | |||
63 | for(int i=0; i<=rootnode.ChildNodes.Count; i++) | ||
64 | { | ||
65 | if(rootnode.ChildNodes.Item(i).Name != "region") { | ||
66 | // TODO - ERROR! | ||
67 | } else { | ||
68 | TempRegionData = new RegionBlock(); | ||
69 | |||
70 | |||
71 | } | ||
72 | } | ||
73 | } | ||
74 | |||
75 | public bool RestartServer() | ||
76 | { | ||
77 | return true; | ||
78 | } | ||
79 | |||
80 | public bool ShutdownServer() | ||
81 | { | ||
82 | try { | ||
83 | Hashtable ShutdownParamsHT = new Hashtable(); | ||
84 | ArrayList ShutdownParams = new ArrayList(); | ||
85 | ShutdownParamsHT["session_id"]=this.SessionID.ToString(); | ||
86 | ShutdownParams.Add(ShutdownParamsHT); | ||
87 | XmlRpcRequest GridShutdownReq = new XmlRpcRequest("shutdown",ShutdownParams); | ||
88 | XmlRpcResponse GridResp = GridShutdownReq.Send(this.ServerURL,3000); | ||
89 | if(GridResp.IsFault) { | ||
90 | return false; | ||
91 | } else { | ||
92 | connected=false; | ||
93 | return true; | ||
94 | } | ||
95 | } catch(Exception e) { | ||
96 | Console.WriteLine(e.ToString()); | ||
97 | return false; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | public void DisconnectServer() | ||
102 | { | ||
103 | this.connected=false; | ||
104 | } | ||
105 | } | ||
106 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/Main.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/Main.cs new file mode 100644 index 0000000..42e09e0 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/Main.cs | |||
@@ -0,0 +1,96 @@ | |||
1 | // project created on 5/14/2007 at 2:04 PM | ||
2 | using System; | ||
3 | using System.Threading; | ||
4 | using Gtk; | ||
5 | |||
6 | namespace OpenGridServices.Manager | ||
7 | { | ||
8 | class MainClass | ||
9 | { | ||
10 | |||
11 | public static bool QuitReq=false; | ||
12 | public static BlockingQueue<string> PendingOperations = new BlockingQueue<string>(); | ||
13 | |||
14 | private static Thread OperationsRunner; | ||
15 | |||
16 | private static GridServerConnectionManager gridserverConn; | ||
17 | |||
18 | private static MainWindow win; | ||
19 | |||
20 | public static void DoMainLoop() | ||
21 | { | ||
22 | while(!QuitReq) | ||
23 | { | ||
24 | Application.RunIteration(); | ||
25 | } | ||
26 | } | ||
27 | |||
28 | public static void RunOperations() | ||
29 | { | ||
30 | string operation; | ||
31 | string cmd; | ||
32 | char[] sep = new char[1]; | ||
33 | sep[0]=' '; | ||
34 | while(!QuitReq) | ||
35 | { | ||
36 | operation=PendingOperations.Dequeue(); | ||
37 | Console.WriteLine(operation); | ||
38 | cmd = operation.Split(sep)[0]; | ||
39 | switch(cmd) { | ||
40 | case "connect_to_gridserver": | ||
41 | win.SetStatus("Connecting to grid server..."); | ||
42 | if(gridserverConn.Connect(operation.Split(sep)[1],operation.Split(sep)[2],operation.Split(sep)[3])) { | ||
43 | win.SetStatus("Connected OK with session ID:" + gridserverConn.SessionID); | ||
44 | win.SetGridServerConnected(true); | ||
45 | Thread.Sleep(3000); | ||
46 | win.SetStatus("Downloading region maps..."); | ||
47 | gridserverConn.DownloadMap(); | ||
48 | } else { | ||
49 | win.SetStatus("Could not connect"); | ||
50 | } | ||
51 | break; | ||
52 | |||
53 | case "restart_gridserver": | ||
54 | win.SetStatus("Restarting grid server..."); | ||
55 | if(gridserverConn.RestartServer()) { | ||
56 | win.SetStatus("Restarted server OK"); | ||
57 | Thread.Sleep(3000); | ||
58 | win.SetStatus(""); | ||
59 | } else { | ||
60 | win.SetStatus("Error restarting grid server!!!"); | ||
61 | } | ||
62 | break; | ||
63 | |||
64 | case "shutdown_gridserver": | ||
65 | win.SetStatus("Shutting down grid server..."); | ||
66 | if(gridserverConn.ShutdownServer()) { | ||
67 | win.SetStatus("Grid server shutdown"); | ||
68 | win.SetGridServerConnected(false); | ||
69 | Thread.Sleep(3000); | ||
70 | win.SetStatus(""); | ||
71 | } else { | ||
72 | win.SetStatus("Could not shutdown grid server!!!"); | ||
73 | } | ||
74 | break; | ||
75 | |||
76 | case "disconnect_gridserver": | ||
77 | gridserverConn.DisconnectServer(); | ||
78 | win.SetGridServerConnected(false); | ||
79 | break; | ||
80 | } | ||
81 | } | ||
82 | } | ||
83 | |||
84 | public static void Main (string[] args) | ||
85 | { | ||
86 | gridserverConn = new GridServerConnectionManager(); | ||
87 | Application.Init (); | ||
88 | win = new MainWindow (); | ||
89 | win.Show (); | ||
90 | OperationsRunner = new Thread(new ThreadStart(RunOperations)); | ||
91 | OperationsRunner.IsBackground=true; | ||
92 | OperationsRunner.Start(); | ||
93 | DoMainLoop(); | ||
94 | } | ||
95 | } | ||
96 | } \ No newline at end of file | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/MainWindow.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/MainWindow.cs new file mode 100644 index 0000000..1db38f0 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/MainWindow.cs | |||
@@ -0,0 +1,76 @@ | |||
1 | using System; | ||
2 | using Gtk; | ||
3 | |||
4 | namespace OpenGridServices.Manager { | ||
5 | public partial class MainWindow: Gtk.Window | ||
6 | { | ||
7 | public MainWindow (): base (Gtk.WindowType.Toplevel) | ||
8 | { | ||
9 | Build (); | ||
10 | } | ||
11 | |||
12 | public void SetStatus(string statustext) | ||
13 | { | ||
14 | this.statusbar1.Pop(0); | ||
15 | this.statusbar1.Push(0,statustext); | ||
16 | } | ||
17 | |||
18 | public void DrawGrid(RegionBlock[][] regions) | ||
19 | { | ||
20 | for(int x=0; x<=regions.GetUpperBound(0); x++) { | ||
21 | for(int y=0; y<=regions.GetUpperBound(1); y++) { | ||
22 | Gdk.Image themap = new Gdk.Image(Gdk.ImageType.Fastest,Gdk.Visual.System,256,256); | ||
23 | this.drawingarea1.GdkWindow.DrawImage(new Gdk.GC(this.drawingarea1.GdkWindow),themap,0,0,x*256,y*256,256,256); | ||
24 | } | ||
25 | } | ||
26 | } | ||
27 | |||
28 | public void SetGridServerConnected(bool connected) | ||
29 | { | ||
30 | if(connected) { | ||
31 | this.ConnectToGridserver.Visible=false; | ||
32 | this.DisconnectFromGridServer.Visible=true; | ||
33 | } else { | ||
34 | this.ConnectToGridserver.Visible=true; | ||
35 | this.DisconnectFromGridServer.Visible=false; | ||
36 | } | ||
37 | } | ||
38 | |||
39 | protected void OnDeleteEvent (object sender, DeleteEventArgs a) | ||
40 | { | ||
41 | Application.Quit (); | ||
42 | MainClass.QuitReq=true; | ||
43 | a.RetVal = true; | ||
44 | } | ||
45 | |||
46 | protected virtual void QuitMenu(object sender, System.EventArgs e) | ||
47 | { | ||
48 | MainClass.QuitReq=true; | ||
49 | Application.Quit(); | ||
50 | } | ||
51 | |||
52 | protected virtual void ConnectToGridServerMenu(object sender, System.EventArgs e) | ||
53 | { | ||
54 | ConnectToGridServerDialog griddialog = new ConnectToGridServerDialog (); | ||
55 | griddialog.Show(); | ||
56 | } | ||
57 | |||
58 | protected virtual void RestartGridserverMenu(object sender, System.EventArgs e) | ||
59 | { | ||
60 | MainClass.PendingOperations.Enqueue("restart_gridserver"); | ||
61 | } | ||
62 | |||
63 | protected virtual void ShutdownGridserverMenu(object sender, System.EventArgs e) | ||
64 | { | ||
65 | MainClass.PendingOperations.Enqueue("shutdown_gridserver"); | ||
66 | } | ||
67 | |||
68 | protected virtual void DisconnectGridServerMenu(object sender, System.EventArgs e) | ||
69 | { | ||
70 | MainClass.PendingOperations.Enqueue("disconnect_gridserver"); | ||
71 | } | ||
72 | |||
73 | } | ||
74 | } | ||
75 | |||
76 | \ No newline at end of file | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.mdp b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.mdp new file mode 100644 index 0000000..cfdc085 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.mdp | |||
@@ -0,0 +1,43 @@ | |||
1 | <Project name="OpenGridServices.Manager" fileversion="2.0" language="C#" clr-version="Net_2_0" ctype="DotNetProject"> | ||
2 | <Configurations active="Debug"> | ||
3 | <Configuration name="Debug" ctype="DotNetProjectConfiguration"> | ||
4 | <Output directory="./bin/Debug" assembly="OpenGridServices.Manager" /> | ||
5 | <Build debugmode="True" target="Exe" /> | ||
6 | <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" /> | ||
7 | <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" /> | ||
8 | </Configuration> | ||
9 | <Configuration name="Release" ctype="DotNetProjectConfiguration"> | ||
10 | <Output directory="./bin/Release" assembly="OpenGridServices.Manager" /> | ||
11 | <Build debugmode="False" target="Exe" /> | ||
12 | <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" /> | ||
13 | <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" /> | ||
14 | </Configuration> | ||
15 | </Configurations> | ||
16 | <Contents> | ||
17 | <File name="./gtk-gui/gui.stetic" subtype="Code" buildaction="EmbedAsResource" /> | ||
18 | <File name="./gtk-gui/generated.cs" subtype="Code" buildaction="Compile" /> | ||
19 | <File name="./MainWindow.cs" subtype="Code" buildaction="Compile" /> | ||
20 | <File name="./Main.cs" subtype="Code" buildaction="Compile" /> | ||
21 | <File name="./AssemblyInfo.cs" subtype="Code" buildaction="Compile" /> | ||
22 | <File name="./ConnectToGridServerDialog.cs" subtype="Code" buildaction="Compile" /> | ||
23 | <File name="./Util.cs" subtype="Code" buildaction="Compile" /> | ||
24 | <File name="./gtk-gui/OpenGridServices.Manager.MainWindow.cs" subtype="Code" buildaction="Compile" /> | ||
25 | <File name="./BlockingQueue.cs" subtype="Code" buildaction="Compile" /> | ||
26 | <File name="./gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs" subtype="Code" buildaction="Compile" /> | ||
27 | <File name="./GridServerConnectionManager.cs" subtype="Code" buildaction="Compile" /> | ||
28 | <File name="./RegionBlock.cs" subtype="Code" buildaction="Compile" /> | ||
29 | </Contents> | ||
30 | <References> | ||
31 | <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> | ||
32 | <ProjectReference type="Gac" localcopy="True" refto="gdk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> | ||
33 | <ProjectReference type="Gac" localcopy="True" refto="glib-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> | ||
34 | <ProjectReference type="Gac" localcopy="True" refto="glade-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> | ||
35 | <ProjectReference type="Gac" localcopy="True" refto="pango-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> | ||
36 | <ProjectReference type="Assembly" localcopy="True" refto="../../bin/libsecondlife.dll" /> | ||
37 | <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> | ||
38 | <ProjectReference type="Gac" localcopy="True" refto="Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" /> | ||
39 | <ProjectReference type="Assembly" localcopy="True" refto="../../bin/XMLRPC.dll" /> | ||
40 | <ProjectReference type="Gac" localcopy="True" refto="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> | ||
41 | </References> | ||
42 | <GtkDesignInfo partialTypes="True" /> | ||
43 | </Project> \ No newline at end of file | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.pidb b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.pidb new file mode 100644 index 0000000..44e7a61 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/OpenGridServices.Manager.pidb | |||
Binary files differ | |||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/RegionBlock.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/RegionBlock.cs new file mode 100644 index 0000000..00f7c65 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/RegionBlock.cs | |||
@@ -0,0 +1,37 @@ | |||
1 | using System; | ||
2 | using System.Xml; | ||
3 | using libsecondlife; | ||
4 | using OpenSim.Framework.Utilities; | ||
5 | |||
6 | namespace OpenGridServices.Manager | ||
7 | { | ||
8 | |||
9 | |||
10 | public class RegionBlock | ||
11 | { | ||
12 | public uint regloc_x; | ||
13 | public uint regloc_y; | ||
14 | |||
15 | public string httpd_url; | ||
16 | |||
17 | public string region_name; | ||
18 | |||
19 | public ulong regionhandle { | ||
20 | get { return Util.UIntsToLong(regloc_x*256,regloc_y*256); } | ||
21 | } | ||
22 | |||
23 | public Gdk.Pixbuf MiniMap; | ||
24 | |||
25 | public RegionBlock() | ||
26 | { | ||
27 | } | ||
28 | |||
29 | public void LoadFromXmlNode(XmlNode sourcenode) | ||
30 | { | ||
31 | this.regloc_x=Convert.ToUInt32(sourcenode.Attributes.GetNamedItem("loc_x").Value); | ||
32 | this.regloc_y=Convert.ToUInt32(sourcenode.Attributes.GetNamedItem("loc_y").Value); | ||
33 | this.region_name=sourcenode.Attributes.GetNamedItem("region_name").Value; | ||
34 | this.httpd_url=sourcenode.Attributes.GetNamedItem("httpd_url").Value; | ||
35 | } | ||
36 | } | ||
37 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/Util.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/Util.cs new file mode 100644 index 0000000..5bf7ff9 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/Util.cs | |||
@@ -0,0 +1,133 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using libsecondlife; | ||
5 | using libsecondlife.Packets; | ||
6 | |||
7 | namespace OpenSim.Framework.Utilities | ||
8 | { | ||
9 | public class Util | ||
10 | { | ||
11 | private static Random randomClass = new Random(); | ||
12 | private static uint nextXferID = 5000; | ||
13 | private static object XferLock = new object(); | ||
14 | |||
15 | public static ulong UIntsToLong(uint X, uint Y) | ||
16 | { | ||
17 | return Helpers.UIntsToLong(X, Y); | ||
18 | } | ||
19 | |||
20 | public static Random RandomClass | ||
21 | { | ||
22 | get | ||
23 | { | ||
24 | return randomClass; | ||
25 | } | ||
26 | } | ||
27 | |||
28 | public static uint GetNextXferID() | ||
29 | { | ||
30 | uint id = 0; | ||
31 | lock(XferLock) | ||
32 | { | ||
33 | id = nextXferID; | ||
34 | nextXferID++; | ||
35 | } | ||
36 | return id; | ||
37 | } | ||
38 | |||
39 | //public static int fast_distance2d(int x, int y) | ||
40 | //{ | ||
41 | // x = System.Math.Abs(x); | ||
42 | // y = System.Math.Abs(y); | ||
43 | |||
44 | // int min = System.Math.Min(x, y); | ||
45 | |||
46 | // return (x + y - (min >> 1) - (min >> 2) + (min >> 4)); | ||
47 | //} | ||
48 | |||
49 | public static string FieldToString(byte[] bytes) | ||
50 | { | ||
51 | return FieldToString(bytes, String.Empty); | ||
52 | } | ||
53 | |||
54 | /// <summary> | ||
55 | /// Convert a variable length field (byte array) to a string, with a | ||
56 | /// field name prepended to each line of the output | ||
57 | /// </summary> | ||
58 | /// <remarks>If the byte array has unprintable characters in it, a | ||
59 | /// hex dump will be put in the string instead</remarks> | ||
60 | /// <param name="bytes">The byte array to convert to a string</param> | ||
61 | /// <param name="fieldName">A field name to prepend to each line of output</param> | ||
62 | /// <returns>An ASCII string or a string containing a hex dump, minus | ||
63 | /// the null terminator</returns> | ||
64 | public static string FieldToString(byte[] bytes, string fieldName) | ||
65 | { | ||
66 | // Check for a common case | ||
67 | if (bytes.Length == 0) return String.Empty; | ||
68 | |||
69 | StringBuilder output = new StringBuilder(); | ||
70 | bool printable = true; | ||
71 | |||
72 | for (int i = 0; i < bytes.Length; ++i) | ||
73 | { | ||
74 | // Check if there are any unprintable characters in the array | ||
75 | if ((bytes[i] < 0x20 || bytes[i] > 0x7E) && bytes[i] != 0x09 | ||
76 | && bytes[i] != 0x0D && bytes[i] != 0x0A && bytes[i] != 0x00) | ||
77 | { | ||
78 | printable = false; | ||
79 | break; | ||
80 | } | ||
81 | } | ||
82 | |||
83 | if (printable) | ||
84 | { | ||
85 | if (fieldName.Length > 0) | ||
86 | { | ||
87 | output.Append(fieldName); | ||
88 | output.Append(": "); | ||
89 | } | ||
90 | |||
91 | if (bytes[bytes.Length - 1] == 0x00) | ||
92 | output.Append(UTF8Encoding.UTF8.GetString(bytes, 0, bytes.Length - 1)); | ||
93 | else | ||
94 | output.Append(UTF8Encoding.UTF8.GetString(bytes)); | ||
95 | } | ||
96 | else | ||
97 | { | ||
98 | for (int i = 0; i < bytes.Length; i += 16) | ||
99 | { | ||
100 | if (i != 0) | ||
101 | output.Append(Environment.NewLine); | ||
102 | if (fieldName.Length > 0) | ||
103 | { | ||
104 | output.Append(fieldName); | ||
105 | output.Append(": "); | ||
106 | } | ||
107 | |||
108 | for (int j = 0; j < 16; j++) | ||
109 | { | ||
110 | if ((i + j) < bytes.Length) | ||
111 | output.Append(String.Format("{0:X2} ", bytes[i + j])); | ||
112 | else | ||
113 | output.Append(" "); | ||
114 | } | ||
115 | |||
116 | for (int j = 0; j < 16 && (i + j) < bytes.Length; j++) | ||
117 | { | ||
118 | if (bytes[i + j] >= 0x20 && bytes[i + j] < 0x7E) | ||
119 | output.Append((char)bytes[i + j]); | ||
120 | else | ||
121 | output.Append("."); | ||
122 | } | ||
123 | } | ||
124 | } | ||
125 | |||
126 | return output.ToString(); | ||
127 | } | ||
128 | public Util() | ||
129 | { | ||
130 | |||
131 | } | ||
132 | } | ||
133 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs new file mode 100644 index 0000000..da6739e --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.ConnectToGridServerDialog.cs | |||
@@ -0,0 +1,226 @@ | |||
1 | // ------------------------------------------------------------------------------ | ||
2 | // <autogenerated> | ||
3 | // This code was generated by a tool. | ||
4 | // Mono Runtime Version: 2.0.50727.42 | ||
5 | // | ||
6 | // Changes to this file may cause incorrect behavior and will be lost if | ||
7 | // the code is regenerated. | ||
8 | // </autogenerated> | ||
9 | // ------------------------------------------------------------------------------ | ||
10 | |||
11 | namespace OpenGridServices.Manager { | ||
12 | |||
13 | |||
14 | public partial class ConnectToGridServerDialog { | ||
15 | |||
16 | private Gtk.VBox vbox2; | ||
17 | |||
18 | private Gtk.VBox vbox3; | ||
19 | |||
20 | private Gtk.HBox hbox1; | ||
21 | |||
22 | private Gtk.Label label1; | ||
23 | |||
24 | private Gtk.Entry entry1; | ||
25 | |||
26 | private Gtk.HBox hbox2; | ||
27 | |||
28 | private Gtk.Label label2; | ||
29 | |||
30 | private Gtk.Entry entry2; | ||
31 | |||
32 | private Gtk.HBox hbox3; | ||
33 | |||
34 | private Gtk.Label label3; | ||
35 | |||
36 | private Gtk.Entry entry3; | ||
37 | |||
38 | private Gtk.Button button2; | ||
39 | |||
40 | private Gtk.Button button8; | ||
41 | |||
42 | protected virtual void Build() { | ||
43 | Stetic.Gui.Initialize(); | ||
44 | // Widget OpenGridServices.Manager.ConnectToGridServerDialog | ||
45 | this.Events = ((Gdk.EventMask)(256)); | ||
46 | this.Name = "OpenGridServices.Manager.ConnectToGridServerDialog"; | ||
47 | this.Title = Mono.Unix.Catalog.GetString("Connect to Grid server"); | ||
48 | this.WindowPosition = ((Gtk.WindowPosition)(4)); | ||
49 | this.HasSeparator = false; | ||
50 | // Internal child OpenGridServices.Manager.ConnectToGridServerDialog.VBox | ||
51 | Gtk.VBox w1 = this.VBox; | ||
52 | w1.Events = ((Gdk.EventMask)(256)); | ||
53 | w1.Name = "dialog_VBox"; | ||
54 | w1.BorderWidth = ((uint)(2)); | ||
55 | // Container child dialog_VBox.Gtk.Box+BoxChild | ||
56 | this.vbox2 = new Gtk.VBox(); | ||
57 | this.vbox2.Name = "vbox2"; | ||
58 | // Container child vbox2.Gtk.Box+BoxChild | ||
59 | this.vbox3 = new Gtk.VBox(); | ||
60 | this.vbox3.Name = "vbox3"; | ||
61 | // Container child vbox3.Gtk.Box+BoxChild | ||
62 | this.hbox1 = new Gtk.HBox(); | ||
63 | this.hbox1.Name = "hbox1"; | ||
64 | // Container child hbox1.Gtk.Box+BoxChild | ||
65 | this.label1 = new Gtk.Label(); | ||
66 | this.label1.Name = "label1"; | ||
67 | this.label1.Xalign = 1F; | ||
68 | this.label1.LabelProp = Mono.Unix.Catalog.GetString("Grid server URL: "); | ||
69 | this.label1.Justify = ((Gtk.Justification)(1)); | ||
70 | this.hbox1.Add(this.label1); | ||
71 | Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.hbox1[this.label1])); | ||
72 | w2.Position = 0; | ||
73 | // Container child hbox1.Gtk.Box+BoxChild | ||
74 | this.entry1 = new Gtk.Entry(); | ||
75 | this.entry1.CanFocus = true; | ||
76 | this.entry1.Name = "entry1"; | ||
77 | this.entry1.Text = Mono.Unix.Catalog.GetString("http://gridserver:8001"); | ||
78 | this.entry1.IsEditable = true; | ||
79 | this.entry1.MaxLength = 255; | ||
80 | this.entry1.InvisibleChar = '•'; | ||
81 | this.hbox1.Add(this.entry1); | ||
82 | Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.hbox1[this.entry1])); | ||
83 | w3.Position = 1; | ||
84 | this.vbox3.Add(this.hbox1); | ||
85 | Gtk.Box.BoxChild w4 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox1])); | ||
86 | w4.Position = 0; | ||
87 | w4.Expand = false; | ||
88 | w4.Fill = false; | ||
89 | // Container child vbox3.Gtk.Box+BoxChild | ||
90 | this.hbox2 = new Gtk.HBox(); | ||
91 | this.hbox2.Name = "hbox2"; | ||
92 | // Container child hbox2.Gtk.Box+BoxChild | ||
93 | this.label2 = new Gtk.Label(); | ||
94 | this.label2.Name = "label2"; | ||
95 | this.label2.Xalign = 1F; | ||
96 | this.label2.LabelProp = Mono.Unix.Catalog.GetString("Username:"); | ||
97 | this.label2.Justify = ((Gtk.Justification)(1)); | ||
98 | this.hbox2.Add(this.label2); | ||
99 | Gtk.Box.BoxChild w5 = ((Gtk.Box.BoxChild)(this.hbox2[this.label2])); | ||
100 | w5.Position = 0; | ||
101 | // Container child hbox2.Gtk.Box+BoxChild | ||
102 | this.entry2 = new Gtk.Entry(); | ||
103 | this.entry2.CanFocus = true; | ||
104 | this.entry2.Name = "entry2"; | ||
105 | this.entry2.IsEditable = true; | ||
106 | this.entry2.InvisibleChar = '•'; | ||
107 | this.hbox2.Add(this.entry2); | ||
108 | Gtk.Box.BoxChild w6 = ((Gtk.Box.BoxChild)(this.hbox2[this.entry2])); | ||
109 | w6.Position = 1; | ||
110 | this.vbox3.Add(this.hbox2); | ||
111 | Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox2])); | ||
112 | w7.Position = 1; | ||
113 | w7.Expand = false; | ||
114 | w7.Fill = false; | ||
115 | // Container child vbox3.Gtk.Box+BoxChild | ||
116 | this.hbox3 = new Gtk.HBox(); | ||
117 | this.hbox3.Name = "hbox3"; | ||
118 | // Container child hbox3.Gtk.Box+BoxChild | ||
119 | this.label3 = new Gtk.Label(); | ||
120 | this.label3.Name = "label3"; | ||
121 | this.label3.Xalign = 1F; | ||
122 | this.label3.LabelProp = Mono.Unix.Catalog.GetString("Password:"); | ||
123 | this.label3.Justify = ((Gtk.Justification)(1)); | ||
124 | this.hbox3.Add(this.label3); | ||
125 | Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.hbox3[this.label3])); | ||
126 | w8.Position = 0; | ||
127 | // Container child hbox3.Gtk.Box+BoxChild | ||
128 | this.entry3 = new Gtk.Entry(); | ||
129 | this.entry3.CanFocus = true; | ||
130 | this.entry3.Name = "entry3"; | ||
131 | this.entry3.IsEditable = true; | ||
132 | this.entry3.InvisibleChar = '•'; | ||
133 | this.hbox3.Add(this.entry3); | ||
134 | Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.hbox3[this.entry3])); | ||
135 | w9.Position = 1; | ||
136 | this.vbox3.Add(this.hbox3); | ||
137 | Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox3])); | ||
138 | w10.Position = 2; | ||
139 | w10.Expand = false; | ||
140 | w10.Fill = false; | ||
141 | this.vbox2.Add(this.vbox3); | ||
142 | Gtk.Box.BoxChild w11 = ((Gtk.Box.BoxChild)(this.vbox2[this.vbox3])); | ||
143 | w11.Position = 2; | ||
144 | w11.Expand = false; | ||
145 | w11.Fill = false; | ||
146 | w1.Add(this.vbox2); | ||
147 | Gtk.Box.BoxChild w12 = ((Gtk.Box.BoxChild)(w1[this.vbox2])); | ||
148 | w12.Position = 0; | ||
149 | // Internal child OpenGridServices.Manager.ConnectToGridServerDialog.ActionArea | ||
150 | Gtk.HButtonBox w13 = this.ActionArea; | ||
151 | w13.Events = ((Gdk.EventMask)(256)); | ||
152 | w13.Name = "OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea"; | ||
153 | w13.Spacing = 6; | ||
154 | w13.BorderWidth = ((uint)(5)); | ||
155 | w13.LayoutStyle = ((Gtk.ButtonBoxStyle)(4)); | ||
156 | // Container child OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild | ||
157 | this.button2 = new Gtk.Button(); | ||
158 | this.button2.CanDefault = true; | ||
159 | this.button2.CanFocus = true; | ||
160 | this.button2.Name = "button2"; | ||
161 | this.button2.UseUnderline = true; | ||
162 | // Container child button2.Gtk.Container+ContainerChild | ||
163 | Gtk.Alignment w14 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F); | ||
164 | w14.Name = "GtkAlignment"; | ||
165 | // Container child GtkAlignment.Gtk.Container+ContainerChild | ||
166 | Gtk.HBox w15 = new Gtk.HBox(); | ||
167 | w15.Name = "GtkHBox"; | ||
168 | w15.Spacing = 2; | ||
169 | // Container child GtkHBox.Gtk.Container+ContainerChild | ||
170 | Gtk.Image w16 = new Gtk.Image(); | ||
171 | w16.Name = "image1"; | ||
172 | w16.Pixbuf = Gtk.IconTheme.Default.LoadIcon("gtk-apply", 16, 0); | ||
173 | w15.Add(w16); | ||
174 | // Container child GtkHBox.Gtk.Container+ContainerChild | ||
175 | Gtk.Label w18 = new Gtk.Label(); | ||
176 | w18.Name = "GtkLabel"; | ||
177 | w18.LabelProp = Mono.Unix.Catalog.GetString("Connect"); | ||
178 | w18.UseUnderline = true; | ||
179 | w15.Add(w18); | ||
180 | w14.Add(w15); | ||
181 | this.button2.Add(w14); | ||
182 | this.AddActionWidget(this.button2, -5); | ||
183 | Gtk.ButtonBox.ButtonBoxChild w22 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.button2])); | ||
184 | w22.Expand = false; | ||
185 | w22.Fill = false; | ||
186 | // Container child OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild | ||
187 | this.button8 = new Gtk.Button(); | ||
188 | this.button8.CanDefault = true; | ||
189 | this.button8.CanFocus = true; | ||
190 | this.button8.Name = "button8"; | ||
191 | this.button8.UseUnderline = true; | ||
192 | // Container child button8.Gtk.Container+ContainerChild | ||
193 | Gtk.Alignment w23 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F); | ||
194 | w23.Name = "GtkAlignment1"; | ||
195 | // Container child GtkAlignment1.Gtk.Container+ContainerChild | ||
196 | Gtk.HBox w24 = new Gtk.HBox(); | ||
197 | w24.Name = "GtkHBox1"; | ||
198 | w24.Spacing = 2; | ||
199 | // Container child GtkHBox1.Gtk.Container+ContainerChild | ||
200 | Gtk.Image w25 = new Gtk.Image(); | ||
201 | w25.Name = "image2"; | ||
202 | w25.Pixbuf = Gtk.IconTheme.Default.LoadIcon("gtk-cancel", 16, 0); | ||
203 | w24.Add(w25); | ||
204 | // Container child GtkHBox1.Gtk.Container+ContainerChild | ||
205 | Gtk.Label w27 = new Gtk.Label(); | ||
206 | w27.Name = "GtkLabel1"; | ||
207 | w27.LabelProp = Mono.Unix.Catalog.GetString("Cancel"); | ||
208 | w27.UseUnderline = true; | ||
209 | w24.Add(w27); | ||
210 | w23.Add(w24); | ||
211 | this.button8.Add(w23); | ||
212 | this.AddActionWidget(this.button8, -6); | ||
213 | Gtk.ButtonBox.ButtonBoxChild w31 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.button8])); | ||
214 | w31.Position = 1; | ||
215 | w31.Expand = false; | ||
216 | w31.Fill = false; | ||
217 | if ((this.Child != null)) { | ||
218 | this.Child.ShowAll(); | ||
219 | } | ||
220 | this.DefaultWidth = 476; | ||
221 | this.DefaultHeight = 137; | ||
222 | this.Show(); | ||
223 | this.Response += new Gtk.ResponseHandler(this.OnResponse); | ||
224 | } | ||
225 | } | ||
226 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.MainWindow.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.MainWindow.cs new file mode 100644 index 0000000..8798dac --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/OpenGridServices.Manager.MainWindow.cs | |||
@@ -0,0 +1,256 @@ | |||
1 | // ------------------------------------------------------------------------------ | ||
2 | // <autogenerated> | ||
3 | // This code was generated by a tool. | ||
4 | // Mono Runtime Version: 2.0.50727.42 | ||
5 | // | ||
6 | // Changes to this file may cause incorrect behavior and will be lost if | ||
7 | // the code is regenerated. | ||
8 | // </autogenerated> | ||
9 | // ------------------------------------------------------------------------------ | ||
10 | |||
11 | namespace OpenGridServices.Manager { | ||
12 | |||
13 | |||
14 | public partial class MainWindow { | ||
15 | |||
16 | private Gtk.Action Grid; | ||
17 | |||
18 | private Gtk.Action User; | ||
19 | |||
20 | private Gtk.Action Asset; | ||
21 | |||
22 | private Gtk.Action Region; | ||
23 | |||
24 | private Gtk.Action Services; | ||
25 | |||
26 | private Gtk.Action ConnectToGridserver; | ||
27 | |||
28 | private Gtk.Action RestartWholeGrid; | ||
29 | |||
30 | private Gtk.Action ShutdownWholeGrid; | ||
31 | |||
32 | private Gtk.Action ExitGridManager; | ||
33 | |||
34 | private Gtk.Action ConnectToUserserver; | ||
35 | |||
36 | private Gtk.Action AccountManagment; | ||
37 | |||
38 | private Gtk.Action GlobalNotice; | ||
39 | |||
40 | private Gtk.Action DisableAllLogins; | ||
41 | |||
42 | private Gtk.Action DisableNonGodUsersOnly; | ||
43 | |||
44 | private Gtk.Action ShutdownUserServer; | ||
45 | |||
46 | private Gtk.Action ShutdownGridserverOnly; | ||
47 | |||
48 | private Gtk.Action RestartGridserverOnly; | ||
49 | |||
50 | private Gtk.Action DefaultLocalGridUserserver; | ||
51 | |||
52 | private Gtk.Action CustomUserserver; | ||
53 | |||
54 | private Gtk.Action RemoteGridDefaultUserserver; | ||
55 | |||
56 | private Gtk.Action DisconnectFromGridServer; | ||
57 | |||
58 | private Gtk.Action UploadAsset; | ||
59 | |||
60 | private Gtk.Action AssetManagement; | ||
61 | |||
62 | private Gtk.Action ConnectToAssetServer; | ||
63 | |||
64 | private Gtk.Action ConnectToDefaultAssetServerForGrid; | ||
65 | |||
66 | private Gtk.Action DefaultForLocalGrid; | ||
67 | |||
68 | private Gtk.Action DefaultForRemoteGrid; | ||
69 | |||
70 | private Gtk.Action CustomAssetServer; | ||
71 | |||
72 | private Gtk.VBox vbox1; | ||
73 | |||
74 | private Gtk.MenuBar menubar2; | ||
75 | |||
76 | private Gtk.HBox hbox1; | ||
77 | |||
78 | private Gtk.ScrolledWindow scrolledwindow1; | ||
79 | |||
80 | private Gtk.DrawingArea drawingarea1; | ||
81 | |||
82 | private Gtk.TreeView treeview1; | ||
83 | |||
84 | private Gtk.Statusbar statusbar1; | ||
85 | |||
86 | protected virtual void Build() { | ||
87 | Stetic.Gui.Initialize(); | ||
88 | // Widget OpenGridServices.Manager.MainWindow | ||
89 | Gtk.UIManager w1 = new Gtk.UIManager(); | ||
90 | Gtk.ActionGroup w2 = new Gtk.ActionGroup("Default"); | ||
91 | this.Grid = new Gtk.Action("Grid", Mono.Unix.Catalog.GetString("Grid"), null, null); | ||
92 | this.Grid.HideIfEmpty = false; | ||
93 | this.Grid.ShortLabel = Mono.Unix.Catalog.GetString("Grid"); | ||
94 | w2.Add(this.Grid, "<Alt><Mod2>g"); | ||
95 | this.User = new Gtk.Action("User", Mono.Unix.Catalog.GetString("User"), null, null); | ||
96 | this.User.HideIfEmpty = false; | ||
97 | this.User.ShortLabel = Mono.Unix.Catalog.GetString("User"); | ||
98 | w2.Add(this.User, null); | ||
99 | this.Asset = new Gtk.Action("Asset", Mono.Unix.Catalog.GetString("Asset"), null, null); | ||
100 | this.Asset.HideIfEmpty = false; | ||
101 | this.Asset.ShortLabel = Mono.Unix.Catalog.GetString("Asset"); | ||
102 | w2.Add(this.Asset, null); | ||
103 | this.Region = new Gtk.Action("Region", Mono.Unix.Catalog.GetString("Region"), null, null); | ||
104 | this.Region.ShortLabel = Mono.Unix.Catalog.GetString("Region"); | ||
105 | w2.Add(this.Region, null); | ||
106 | this.Services = new Gtk.Action("Services", Mono.Unix.Catalog.GetString("Services"), null, null); | ||
107 | this.Services.ShortLabel = Mono.Unix.Catalog.GetString("Services"); | ||
108 | w2.Add(this.Services, null); | ||
109 | this.ConnectToGridserver = new Gtk.Action("ConnectToGridserver", Mono.Unix.Catalog.GetString("Connect to gridserver..."), null, "gtk-connect"); | ||
110 | this.ConnectToGridserver.HideIfEmpty = false; | ||
111 | this.ConnectToGridserver.ShortLabel = Mono.Unix.Catalog.GetString("Connect to gridserver"); | ||
112 | w2.Add(this.ConnectToGridserver, null); | ||
113 | this.RestartWholeGrid = new Gtk.Action("RestartWholeGrid", Mono.Unix.Catalog.GetString("Restart whole grid"), null, "gtk-refresh"); | ||
114 | this.RestartWholeGrid.ShortLabel = Mono.Unix.Catalog.GetString("Restart whole grid"); | ||
115 | w2.Add(this.RestartWholeGrid, null); | ||
116 | this.ShutdownWholeGrid = new Gtk.Action("ShutdownWholeGrid", Mono.Unix.Catalog.GetString("Shutdown whole grid"), null, "gtk-stop"); | ||
117 | this.ShutdownWholeGrid.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown whole grid"); | ||
118 | w2.Add(this.ShutdownWholeGrid, null); | ||
119 | this.ExitGridManager = new Gtk.Action("ExitGridManager", Mono.Unix.Catalog.GetString("Exit grid manager"), null, "gtk-close"); | ||
120 | this.ExitGridManager.ShortLabel = Mono.Unix.Catalog.GetString("Exit grid manager"); | ||
121 | w2.Add(this.ExitGridManager, null); | ||
122 | this.ConnectToUserserver = new Gtk.Action("ConnectToUserserver", Mono.Unix.Catalog.GetString("Connect to userserver"), null, "gtk-connect"); | ||
123 | this.ConnectToUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Connect to userserver"); | ||
124 | w2.Add(this.ConnectToUserserver, null); | ||
125 | this.AccountManagment = new Gtk.Action("AccountManagment", Mono.Unix.Catalog.GetString("Account managment"), null, "gtk-properties"); | ||
126 | this.AccountManagment.ShortLabel = Mono.Unix.Catalog.GetString("Account managment"); | ||
127 | w2.Add(this.AccountManagment, null); | ||
128 | this.GlobalNotice = new Gtk.Action("GlobalNotice", Mono.Unix.Catalog.GetString("Global notice"), null, "gtk-network"); | ||
129 | this.GlobalNotice.ShortLabel = Mono.Unix.Catalog.GetString("Global notice"); | ||
130 | w2.Add(this.GlobalNotice, null); | ||
131 | this.DisableAllLogins = new Gtk.Action("DisableAllLogins", Mono.Unix.Catalog.GetString("Disable all logins"), null, "gtk-no"); | ||
132 | this.DisableAllLogins.ShortLabel = Mono.Unix.Catalog.GetString("Disable all logins"); | ||
133 | w2.Add(this.DisableAllLogins, null); | ||
134 | this.DisableNonGodUsersOnly = new Gtk.Action("DisableNonGodUsersOnly", Mono.Unix.Catalog.GetString("Disable non-god users only"), null, "gtk-no"); | ||
135 | this.DisableNonGodUsersOnly.ShortLabel = Mono.Unix.Catalog.GetString("Disable non-god users only"); | ||
136 | w2.Add(this.DisableNonGodUsersOnly, null); | ||
137 | this.ShutdownUserServer = new Gtk.Action("ShutdownUserServer", Mono.Unix.Catalog.GetString("Shutdown user server"), null, "gtk-stop"); | ||
138 | this.ShutdownUserServer.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown user server"); | ||
139 | w2.Add(this.ShutdownUserServer, null); | ||
140 | this.ShutdownGridserverOnly = new Gtk.Action("ShutdownGridserverOnly", Mono.Unix.Catalog.GetString("Shutdown gridserver only"), null, "gtk-stop"); | ||
141 | this.ShutdownGridserverOnly.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown gridserver only"); | ||
142 | w2.Add(this.ShutdownGridserverOnly, null); | ||
143 | this.RestartGridserverOnly = new Gtk.Action("RestartGridserverOnly", Mono.Unix.Catalog.GetString("Restart gridserver only"), null, "gtk-refresh"); | ||
144 | this.RestartGridserverOnly.ShortLabel = Mono.Unix.Catalog.GetString("Restart gridserver only"); | ||
145 | w2.Add(this.RestartGridserverOnly, null); | ||
146 | this.DefaultLocalGridUserserver = new Gtk.Action("DefaultLocalGridUserserver", Mono.Unix.Catalog.GetString("Default local grid userserver"), null, null); | ||
147 | this.DefaultLocalGridUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Default local grid userserver"); | ||
148 | w2.Add(this.DefaultLocalGridUserserver, null); | ||
149 | this.CustomUserserver = new Gtk.Action("CustomUserserver", Mono.Unix.Catalog.GetString("Custom userserver..."), null, null); | ||
150 | this.CustomUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Custom userserver"); | ||
151 | w2.Add(this.CustomUserserver, null); | ||
152 | this.RemoteGridDefaultUserserver = new Gtk.Action("RemoteGridDefaultUserserver", Mono.Unix.Catalog.GetString("Remote grid default userserver..."), null, null); | ||
153 | this.RemoteGridDefaultUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Remote grid default userserver"); | ||
154 | w2.Add(this.RemoteGridDefaultUserserver, null); | ||
155 | this.DisconnectFromGridServer = new Gtk.Action("DisconnectFromGridServer", Mono.Unix.Catalog.GetString("Disconnect from grid server"), null, "gtk-disconnect"); | ||
156 | this.DisconnectFromGridServer.ShortLabel = Mono.Unix.Catalog.GetString("Disconnect from grid server"); | ||
157 | this.DisconnectFromGridServer.Visible = false; | ||
158 | w2.Add(this.DisconnectFromGridServer, null); | ||
159 | this.UploadAsset = new Gtk.Action("UploadAsset", Mono.Unix.Catalog.GetString("Upload asset"), null, null); | ||
160 | this.UploadAsset.ShortLabel = Mono.Unix.Catalog.GetString("Upload asset"); | ||
161 | w2.Add(this.UploadAsset, null); | ||
162 | this.AssetManagement = new Gtk.Action("AssetManagement", Mono.Unix.Catalog.GetString("Asset management"), null, null); | ||
163 | this.AssetManagement.ShortLabel = Mono.Unix.Catalog.GetString("Asset management"); | ||
164 | w2.Add(this.AssetManagement, null); | ||
165 | this.ConnectToAssetServer = new Gtk.Action("ConnectToAssetServer", Mono.Unix.Catalog.GetString("Connect to asset server"), null, null); | ||
166 | this.ConnectToAssetServer.ShortLabel = Mono.Unix.Catalog.GetString("Connect to asset server"); | ||
167 | w2.Add(this.ConnectToAssetServer, null); | ||
168 | this.ConnectToDefaultAssetServerForGrid = new Gtk.Action("ConnectToDefaultAssetServerForGrid", Mono.Unix.Catalog.GetString("Connect to default asset server for grid"), null, null); | ||
169 | this.ConnectToDefaultAssetServerForGrid.ShortLabel = Mono.Unix.Catalog.GetString("Connect to default asset server for grid"); | ||
170 | w2.Add(this.ConnectToDefaultAssetServerForGrid, null); | ||
171 | this.DefaultForLocalGrid = new Gtk.Action("DefaultForLocalGrid", Mono.Unix.Catalog.GetString("Default for local grid"), null, null); | ||
172 | this.DefaultForLocalGrid.ShortLabel = Mono.Unix.Catalog.GetString("Default for local grid"); | ||
173 | w2.Add(this.DefaultForLocalGrid, null); | ||
174 | this.DefaultForRemoteGrid = new Gtk.Action("DefaultForRemoteGrid", Mono.Unix.Catalog.GetString("Default for remote grid..."), null, null); | ||
175 | this.DefaultForRemoteGrid.ShortLabel = Mono.Unix.Catalog.GetString("Default for remote grid..."); | ||
176 | w2.Add(this.DefaultForRemoteGrid, null); | ||
177 | this.CustomAssetServer = new Gtk.Action("CustomAssetServer", Mono.Unix.Catalog.GetString("Custom asset server..."), null, null); | ||
178 | this.CustomAssetServer.ShortLabel = Mono.Unix.Catalog.GetString("Custom asset server..."); | ||
179 | w2.Add(this.CustomAssetServer, null); | ||
180 | w1.InsertActionGroup(w2, 0); | ||
181 | this.AddAccelGroup(w1.AccelGroup); | ||
182 | this.WidthRequest = 800; | ||
183 | this.HeightRequest = 600; | ||
184 | this.Name = "OpenGridServices.Manager.MainWindow"; | ||
185 | this.Title = Mono.Unix.Catalog.GetString("Open Grid Services Manager"); | ||
186 | this.Icon = Gtk.IconTheme.Default.LoadIcon("gtk-network", 48, 0); | ||
187 | // Container child OpenGridServices.Manager.MainWindow.Gtk.Container+ContainerChild | ||
188 | this.vbox1 = new Gtk.VBox(); | ||
189 | this.vbox1.Name = "vbox1"; | ||
190 | // Container child vbox1.Gtk.Box+BoxChild | ||
191 | w1.AddUiFromString("<ui><menubar name='menubar2'><menu action='Grid'><menuitem action='ConnectToGridserver'/><menuitem action='DisconnectFromGridServer'/><separator/><menuitem action='RestartWholeGrid'/><menuitem action='RestartGridserverOnly'/><separator/><menuitem action='ShutdownWholeGrid'/><menuitem action='ShutdownGridserverOnly'/><separator/><menuitem action='ExitGridManager'/></menu><menu action='User'><menu action='ConnectToUserserver'><menuitem action='DefaultLocalGridUserserver'/><menuitem action='CustomUserserver'/><menuitem action='RemoteGridDefaultUserserver'/></menu><separator/><menuitem action='AccountManagment'/><menuitem action='GlobalNotice'/><separator/><menuitem action='DisableAllLogins'/><menuitem action='DisableNonGodUsersOnly'/><separator/><menuitem action='ShutdownUserServer'/></menu><menu action='Asset'><menuitem action='UploadAsset'/><menuitem action='AssetManagement'/><menu action='ConnectToAssetServer'><menuitem action='DefaultForLocalGrid'/><menuitem action='DefaultForRemoteGrid'/><menuitem action='CustomAssetServer'/></menu></menu><menu action='Region'/><menu action='Services'/></menubar></ui>"); | ||
192 | this.menubar2 = ((Gtk.MenuBar)(w1.GetWidget("/menubar2"))); | ||
193 | this.menubar2.HeightRequest = 25; | ||
194 | this.menubar2.Name = "menubar2"; | ||
195 | this.vbox1.Add(this.menubar2); | ||
196 | Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.vbox1[this.menubar2])); | ||
197 | w3.Position = 0; | ||
198 | w3.Expand = false; | ||
199 | w3.Fill = false; | ||
200 | // Container child vbox1.Gtk.Box+BoxChild | ||
201 | this.hbox1 = new Gtk.HBox(); | ||
202 | this.hbox1.Name = "hbox1"; | ||
203 | // Container child hbox1.Gtk.Box+BoxChild | ||
204 | this.scrolledwindow1 = new Gtk.ScrolledWindow(); | ||
205 | this.scrolledwindow1.CanFocus = true; | ||
206 | this.scrolledwindow1.Name = "scrolledwindow1"; | ||
207 | this.scrolledwindow1.VscrollbarPolicy = ((Gtk.PolicyType)(1)); | ||
208 | this.scrolledwindow1.HscrollbarPolicy = ((Gtk.PolicyType)(1)); | ||
209 | // Container child scrolledwindow1.Gtk.Container+ContainerChild | ||
210 | Gtk.Viewport w4 = new Gtk.Viewport(); | ||
211 | w4.Name = "GtkViewport"; | ||
212 | w4.ShadowType = ((Gtk.ShadowType)(0)); | ||
213 | // Container child GtkViewport.Gtk.Container+ContainerChild | ||
214 | this.drawingarea1 = new Gtk.DrawingArea(); | ||
215 | this.drawingarea1.Name = "drawingarea1"; | ||
216 | w4.Add(this.drawingarea1); | ||
217 | this.scrolledwindow1.Add(w4); | ||
218 | this.hbox1.Add(this.scrolledwindow1); | ||
219 | Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.hbox1[this.scrolledwindow1])); | ||
220 | w7.Position = 1; | ||
221 | // Container child hbox1.Gtk.Box+BoxChild | ||
222 | this.treeview1 = new Gtk.TreeView(); | ||
223 | this.treeview1.CanFocus = true; | ||
224 | this.treeview1.Name = "treeview1"; | ||
225 | this.hbox1.Add(this.treeview1); | ||
226 | Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.hbox1[this.treeview1])); | ||
227 | w8.Position = 2; | ||
228 | this.vbox1.Add(this.hbox1); | ||
229 | Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.vbox1[this.hbox1])); | ||
230 | w9.Position = 1; | ||
231 | // Container child vbox1.Gtk.Box+BoxChild | ||
232 | this.statusbar1 = new Gtk.Statusbar(); | ||
233 | this.statusbar1.Name = "statusbar1"; | ||
234 | this.statusbar1.Spacing = 5; | ||
235 | this.vbox1.Add(this.statusbar1); | ||
236 | Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox1[this.statusbar1])); | ||
237 | w10.PackType = ((Gtk.PackType)(1)); | ||
238 | w10.Position = 2; | ||
239 | w10.Expand = false; | ||
240 | w10.Fill = false; | ||
241 | this.Add(this.vbox1); | ||
242 | if ((this.Child != null)) { | ||
243 | this.Child.ShowAll(); | ||
244 | } | ||
245 | this.DefaultWidth = 800; | ||
246 | this.DefaultHeight = 800; | ||
247 | this.Show(); | ||
248 | this.DeleteEvent += new Gtk.DeleteEventHandler(this.OnDeleteEvent); | ||
249 | this.ConnectToGridserver.Activated += new System.EventHandler(this.ConnectToGridServerMenu); | ||
250 | this.ExitGridManager.Activated += new System.EventHandler(this.QuitMenu); | ||
251 | this.ShutdownGridserverOnly.Activated += new System.EventHandler(this.ShutdownGridserverMenu); | ||
252 | this.RestartGridserverOnly.Activated += new System.EventHandler(this.RestartGridserverMenu); | ||
253 | this.DisconnectFromGridServer.Activated += new System.EventHandler(this.DisconnectGridServerMenu); | ||
254 | } | ||
255 | } | ||
256 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/generated.cs b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/generated.cs new file mode 100644 index 0000000..dd4abdd --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/generated.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | // ------------------------------------------------------------------------------ | ||
2 | // <autogenerated> | ||
3 | // This code was generated by a tool. | ||
4 | // Mono Runtime Version: 2.0.50727.42 | ||
5 | // | ||
6 | // Changes to this file may cause incorrect behavior and will be lost if | ||
7 | // the code is regenerated. | ||
8 | // </autogenerated> | ||
9 | // ------------------------------------------------------------------------------ | ||
10 | |||
11 | namespace Stetic { | ||
12 | |||
13 | |||
14 | internal class Gui { | ||
15 | |||
16 | private static bool initialized; | ||
17 | |||
18 | internal static void Initialize() { | ||
19 | if ((Stetic.Gui.initialized == false)) { | ||
20 | Stetic.Gui.initialized = true; | ||
21 | } | ||
22 | } | ||
23 | } | ||
24 | |||
25 | internal class ActionGroups { | ||
26 | |||
27 | public static Gtk.ActionGroup GetActionGroup(System.Type type) { | ||
28 | return Stetic.ActionGroups.GetActionGroup(type.FullName); | ||
29 | } | ||
30 | |||
31 | public static Gtk.ActionGroup GetActionGroup(string name) { | ||
32 | return null; | ||
33 | } | ||
34 | } | ||
35 | } | ||
diff --git a/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/gui.stetic b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/gui.stetic new file mode 100644 index 0000000..c883f08 --- /dev/null +++ b/OpenSim/Grid/Manager/OpenGridServices.Manager/gtk-gui/gui.stetic | |||
@@ -0,0 +1,502 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <stetic-interface> | ||
3 | <widget class="Gtk.Window" id="OpenGridServices.Manager.MainWindow" design-size="800 800"> | ||
4 | <action-group name="Default"> | ||
5 | <action id="Grid"> | ||
6 | <property name="Type">Action</property> | ||
7 | <property name="Accelerator"><Alt><Mod2>g</property> | ||
8 | <property name="HideIfEmpty">False</property> | ||
9 | <property name="Label" translatable="yes">Grid</property> | ||
10 | <property name="ShortLabel" translatable="yes">Grid</property> | ||
11 | </action> | ||
12 | <action id="User"> | ||
13 | <property name="Type">Action</property> | ||
14 | <property name="HideIfEmpty">False</property> | ||
15 | <property name="Label" translatable="yes">User</property> | ||
16 | <property name="ShortLabel" translatable="yes">User</property> | ||
17 | </action> | ||
18 | <action id="Asset"> | ||
19 | <property name="Type">Action</property> | ||
20 | <property name="HideIfEmpty">False</property> | ||
21 | <property name="Label" translatable="yes">Asset</property> | ||
22 | <property name="ShortLabel" translatable="yes">Asset</property> | ||
23 | </action> | ||
24 | <action id="Region"> | ||
25 | <property name="Type">Action</property> | ||
26 | <property name="Label" translatable="yes">Region</property> | ||
27 | <property name="ShortLabel" translatable="yes">Region</property> | ||
28 | </action> | ||
29 | <action id="Services"> | ||
30 | <property name="Type">Action</property> | ||
31 | <property name="Label" translatable="yes">Services</property> | ||
32 | <property name="ShortLabel" translatable="yes">Services</property> | ||
33 | </action> | ||
34 | <action id="ConnectToGridserver"> | ||
35 | <property name="Type">Action</property> | ||
36 | <property name="HideIfEmpty">False</property> | ||
37 | <property name="Label" translatable="yes">Connect to gridserver...</property> | ||
38 | <property name="ShortLabel" translatable="yes">Connect to gridserver</property> | ||
39 | <property name="StockId">gtk-connect</property> | ||
40 | <signal name="Activated" handler="ConnectToGridServerMenu" /> | ||
41 | </action> | ||
42 | <action id="RestartWholeGrid"> | ||
43 | <property name="Type">Action</property> | ||
44 | <property name="Label" translatable="yes">Restart whole grid</property> | ||
45 | <property name="ShortLabel" translatable="yes">Restart whole grid</property> | ||
46 | <property name="StockId">gtk-refresh</property> | ||
47 | </action> | ||
48 | <action id="ShutdownWholeGrid"> | ||
49 | <property name="Type">Action</property> | ||
50 | <property name="Label" translatable="yes">Shutdown whole grid</property> | ||
51 | <property name="ShortLabel" translatable="yes">Shutdown whole grid</property> | ||
52 | <property name="StockId">gtk-stop</property> | ||
53 | </action> | ||
54 | <action id="ExitGridManager"> | ||
55 | <property name="Type">Action</property> | ||
56 | <property name="Label" translatable="yes">Exit grid manager</property> | ||
57 | <property name="ShortLabel" translatable="yes">Exit grid manager</property> | ||
58 | <property name="StockId">gtk-close</property> | ||
59 | <signal name="Activated" handler="QuitMenu" after="yes" /> | ||
60 | </action> | ||
61 | <action id="ConnectToUserserver"> | ||
62 | <property name="Type">Action</property> | ||
63 | <property name="Label" translatable="yes">Connect to userserver</property> | ||
64 | <property name="ShortLabel" translatable="yes">Connect to userserver</property> | ||
65 | <property name="StockId">gtk-connect</property> | ||
66 | </action> | ||
67 | <action id="AccountManagment"> | ||
68 | <property name="Type">Action</property> | ||
69 | <property name="Label" translatable="yes">Account managment</property> | ||
70 | <property name="ShortLabel" translatable="yes">Account managment</property> | ||
71 | <property name="StockId">gtk-properties</property> | ||
72 | </action> | ||
73 | <action id="GlobalNotice"> | ||
74 | <property name="Type">Action</property> | ||
75 | <property name="Label" translatable="yes">Global notice</property> | ||
76 | <property name="ShortLabel" translatable="yes">Global notice</property> | ||
77 | <property name="StockId">gtk-network</property> | ||
78 | </action> | ||
79 | <action id="DisableAllLogins"> | ||
80 | <property name="Type">Action</property> | ||
81 | <property name="Label" translatable="yes">Disable all logins</property> | ||
82 | <property name="ShortLabel" translatable="yes">Disable all logins</property> | ||
83 | <property name="StockId">gtk-no</property> | ||
84 | </action> | ||
85 | <action id="DisableNonGodUsersOnly"> | ||
86 | <property name="Type">Action</property> | ||
87 | <property name="Label" translatable="yes">Disable non-god users only</property> | ||
88 | <property name="ShortLabel" translatable="yes">Disable non-god users only</property> | ||
89 | <property name="StockId">gtk-no</property> | ||
90 | </action> | ||
91 | <action id="ShutdownUserServer"> | ||
92 | <property name="Type">Action</property> | ||
93 | <property name="Label" translatable="yes">Shutdown user server</property> | ||
94 | <property name="ShortLabel" translatable="yes">Shutdown user server</property> | ||
95 | <property name="StockId">gtk-stop</property> | ||
96 | </action> | ||
97 | <action id="ShutdownGridserverOnly"> | ||
98 | <property name="Type">Action</property> | ||
99 | <property name="Label" translatable="yes">Shutdown gridserver only</property> | ||
100 | <property name="ShortLabel" translatable="yes">Shutdown gridserver only</property> | ||
101 | <property name="StockId">gtk-stop</property> | ||
102 | <signal name="Activated" handler="ShutdownGridserverMenu" after="yes" /> | ||
103 | </action> | ||
104 | <action id="RestartGridserverOnly"> | ||
105 | <property name="Type">Action</property> | ||
106 | <property name="Label" translatable="yes">Restart gridserver only</property> | ||
107 | <property name="ShortLabel" translatable="yes">Restart gridserver only</property> | ||
108 | <property name="StockId">gtk-refresh</property> | ||
109 | <signal name="Activated" handler="RestartGridserverMenu" after="yes" /> | ||
110 | </action> | ||
111 | <action id="DefaultLocalGridUserserver"> | ||
112 | <property name="Type">Action</property> | ||
113 | <property name="Label" translatable="yes">Default local grid userserver</property> | ||
114 | <property name="ShortLabel" translatable="yes">Default local grid userserver</property> | ||
115 | </action> | ||
116 | <action id="CustomUserserver"> | ||
117 | <property name="Type">Action</property> | ||
118 | <property name="Label" translatable="yes">Custom userserver...</property> | ||
119 | <property name="ShortLabel" translatable="yes">Custom userserver</property> | ||
120 | </action> | ||
121 | <action id="RemoteGridDefaultUserserver"> | ||
122 | <property name="Type">Action</property> | ||
123 | <property name="Label" translatable="yes">Remote grid default userserver...</property> | ||
124 | <property name="ShortLabel" translatable="yes">Remote grid default userserver</property> | ||
125 | </action> | ||
126 | <action id="DisconnectFromGridServer"> | ||
127 | <property name="Type">Action</property> | ||
128 | <property name="Label" translatable="yes">Disconnect from grid server</property> | ||
129 | <property name="ShortLabel" translatable="yes">Disconnect from grid server</property> | ||
130 | <property name="StockId">gtk-disconnect</property> | ||
131 | <property name="Visible">False</property> | ||
132 | <signal name="Activated" handler="DisconnectGridServerMenu" after="yes" /> | ||
133 | </action> | ||
134 | <action id="UploadAsset"> | ||
135 | <property name="Type">Action</property> | ||
136 | <property name="Label" translatable="yes">Upload asset</property> | ||
137 | <property name="ShortLabel" translatable="yes">Upload asset</property> | ||
138 | </action> | ||
139 | <action id="AssetManagement"> | ||
140 | <property name="Type">Action</property> | ||
141 | <property name="Label" translatable="yes">Asset management</property> | ||
142 | <property name="ShortLabel" translatable="yes">Asset management</property> | ||
143 | </action> | ||
144 | <action id="ConnectToAssetServer"> | ||
145 | <property name="Type">Action</property> | ||
146 | <property name="Label" translatable="yes">Connect to asset server</property> | ||
147 | <property name="ShortLabel" translatable="yes">Connect to asset server</property> | ||
148 | </action> | ||
149 | <action id="ConnectToDefaultAssetServerForGrid"> | ||
150 | <property name="Type">Action</property> | ||
151 | <property name="Label" translatable="yes">Connect to default asset server for grid</property> | ||
152 | <property name="ShortLabel" translatable="yes">Connect to default asset server for grid</property> | ||
153 | </action> | ||
154 | <action id="DefaultForLocalGrid"> | ||
155 | <property name="Type">Action</property> | ||
156 | <property name="Label" translatable="yes">Default for local grid</property> | ||
157 | <property name="ShortLabel" translatable="yes">Default for local grid</property> | ||
158 | </action> | ||
159 | <action id="DefaultForRemoteGrid"> | ||
160 | <property name="Type">Action</property> | ||
161 | <property name="Label" translatable="yes">Default for remote grid...</property> | ||
162 | <property name="ShortLabel" translatable="yes">Default for remote grid...</property> | ||
163 | </action> | ||
164 | <action id="CustomAssetServer"> | ||
165 | <property name="Type">Action</property> | ||
166 | <property name="Label" translatable="yes">Custom asset server...</property> | ||
167 | <property name="ShortLabel" translatable="yes">Custom asset server...</property> | ||
168 | </action> | ||
169 | </action-group> | ||
170 | <property name="MemberName" /> | ||
171 | <property name="WidthRequest">800</property> | ||
172 | <property name="HeightRequest">600</property> | ||
173 | <property name="Title" translatable="yes">Open Grid Services Manager</property> | ||
174 | <property name="Icon">stock:gtk-network Dialog</property> | ||
175 | <signal name="DeleteEvent" handler="OnDeleteEvent" /> | ||
176 | <child> | ||
177 | <widget class="Gtk.VBox" id="vbox1"> | ||
178 | <property name="MemberName" /> | ||
179 | <child> | ||
180 | <widget class="Gtk.MenuBar" id="menubar2"> | ||
181 | <property name="MemberName" /> | ||
182 | <property name="HeightRequest">25</property> | ||
183 | <node name="menubar2" type="Menubar"> | ||
184 | <node type="Menu" action="Grid"> | ||
185 | <node type="Menuitem" action="ConnectToGridserver" /> | ||
186 | <node type="Menuitem" action="DisconnectFromGridServer" /> | ||
187 | <node type="Separator" /> | ||
188 | <node type="Menuitem" action="RestartWholeGrid" /> | ||
189 | <node type="Menuitem" action="RestartGridserverOnly" /> | ||
190 | <node type="Separator" /> | ||
191 | <node type="Menuitem" action="ShutdownWholeGrid" /> | ||
192 | <node type="Menuitem" action="ShutdownGridserverOnly" /> | ||
193 | <node type="Separator" /> | ||
194 | <node type="Menuitem" action="ExitGridManager" /> | ||
195 | </node> | ||
196 | <node type="Menu" action="User"> | ||
197 | <node type="Menu" action="ConnectToUserserver"> | ||
198 | <node type="Menuitem" action="DefaultLocalGridUserserver" /> | ||
199 | <node type="Menuitem" action="CustomUserserver" /> | ||
200 | <node type="Menuitem" action="RemoteGridDefaultUserserver" /> | ||
201 | </node> | ||
202 | <node type="Separator" /> | ||
203 | <node type="Menuitem" action="AccountManagment" /> | ||
204 | <node type="Menuitem" action="GlobalNotice" /> | ||
205 | <node type="Separator" /> | ||
206 | <node type="Menuitem" action="DisableAllLogins" /> | ||
207 | <node type="Menuitem" action="DisableNonGodUsersOnly" /> | ||
208 | <node type="Separator" /> | ||
209 | <node type="Menuitem" action="ShutdownUserServer" /> | ||
210 | </node> | ||
211 | <node type="Menu" action="Asset"> | ||
212 | <node type="Menuitem" action="UploadAsset" /> | ||
213 | <node type="Menuitem" action="AssetManagement" /> | ||
214 | <node type="Menu" action="ConnectToAssetServer"> | ||
215 | <node type="Menuitem" action="DefaultForLocalGrid" /> | ||
216 | <node type="Menuitem" action="DefaultForRemoteGrid" /> | ||
217 | <node type="Menuitem" action="CustomAssetServer" /> | ||
218 | </node> | ||
219 | </node> | ||
220 | <node type="Menu" action="Region" /> | ||
221 | <node type="Menu" action="Services" /> | ||
222 | </node> | ||
223 | </widget> | ||
224 | <packing> | ||
225 | <property name="Position">0</property> | ||
226 | <property name="AutoSize">False</property> | ||
227 | <property name="Expand">False</property> | ||
228 | <property name="Fill">False</property> | ||
229 | </packing> | ||
230 | </child> | ||
231 | <child> | ||
232 | <widget class="Gtk.HBox" id="hbox1"> | ||
233 | <property name="MemberName" /> | ||
234 | <child> | ||
235 | <placeholder /> | ||
236 | </child> | ||
237 | <child> | ||
238 | <widget class="Gtk.ScrolledWindow" id="scrolledwindow1"> | ||
239 | <property name="MemberName" /> | ||
240 | <property name="CanFocus">True</property> | ||
241 | <property name="VscrollbarPolicy">Automatic</property> | ||
242 | <property name="HscrollbarPolicy">Automatic</property> | ||
243 | <child> | ||
244 | <widget class="Gtk.Viewport" id="GtkViewport"> | ||
245 | <property name="MemberName" /> | ||
246 | <property name="ShadowType">None</property> | ||
247 | <child> | ||
248 | <widget class="Gtk.DrawingArea" id="drawingarea1"> | ||
249 | <property name="MemberName" /> | ||
250 | </widget> | ||
251 | </child> | ||
252 | </widget> | ||
253 | </child> | ||
254 | </widget> | ||
255 | <packing> | ||
256 | <property name="Position">1</property> | ||
257 | <property name="AutoSize">True</property> | ||
258 | </packing> | ||
259 | </child> | ||
260 | <child> | ||
261 | <widget class="Gtk.TreeView" id="treeview1"> | ||
262 | <property name="MemberName" /> | ||
263 | <property name="CanFocus">True</property> | ||
264 | </widget> | ||
265 | <packing> | ||
266 | <property name="Position">2</property> | ||
267 | <property name="AutoSize">True</property> | ||
268 | </packing> | ||
269 | </child> | ||
270 | </widget> | ||
271 | <packing> | ||
272 | <property name="Position">1</property> | ||
273 | <property name="AutoSize">True</property> | ||
274 | </packing> | ||
275 | </child> | ||
276 | <child> | ||
277 | <widget class="Gtk.Statusbar" id="statusbar1"> | ||
278 | <property name="MemberName">statusBar1</property> | ||
279 | <property name="Spacing">5</property> | ||
280 | <child> | ||
281 | <placeholder /> | ||
282 | </child> | ||
283 | <child> | ||
284 | <placeholder /> | ||
285 | </child> | ||
286 | </widget> | ||
287 | <packing> | ||
288 | <property name="PackType">End</property> | ||
289 | <property name="Position">2</property> | ||
290 | <property name="AutoSize">False</property> | ||
291 | <property name="Expand">False</property> | ||
292 | <property name="Fill">False</property> | ||
293 | </packing> | ||
294 | </child> | ||
295 | </widget> | ||
296 | </child> | ||
297 | </widget> | ||
298 | <widget class="Gtk.Dialog" id="OpenGridServices.Manager.ConnectToGridServerDialog" design-size="476 137"> | ||
299 | <property name="MemberName" /> | ||
300 | <property name="Events">ButtonPressMask</property> | ||
301 | <property name="Title" translatable="yes">Connect to Grid server</property> | ||
302 | <property name="WindowPosition">CenterOnParent</property> | ||
303 | <property name="Buttons">2</property> | ||
304 | <property name="HelpButton">False</property> | ||
305 | <property name="HasSeparator">False</property> | ||
306 | <signal name="Response" handler="OnResponse" /> | ||
307 | <child internal-child="VBox"> | ||
308 | <widget class="Gtk.VBox" id="dialog_VBox"> | ||
309 | <property name="MemberName" /> | ||
310 | <property name="Events">ButtonPressMask</property> | ||
311 | <property name="BorderWidth">2</property> | ||
312 | <child> | ||
313 | <widget class="Gtk.VBox" id="vbox2"> | ||
314 | <property name="MemberName" /> | ||
315 | <child> | ||
316 | <placeholder /> | ||
317 | </child> | ||
318 | <child> | ||
319 | <placeholder /> | ||
320 | </child> | ||
321 | <child> | ||
322 | <widget class="Gtk.VBox" id="vbox3"> | ||
323 | <property name="MemberName" /> | ||
324 | <child> | ||
325 | <widget class="Gtk.HBox" id="hbox1"> | ||
326 | <property name="MemberName" /> | ||
327 | <child> | ||
328 | <widget class="Gtk.Label" id="label1"> | ||
329 | <property name="MemberName" /> | ||
330 | <property name="Xalign">1</property> | ||
331 | <property name="LabelProp" translatable="yes">Grid server URL: </property> | ||
332 | <property name="Justify">Right</property> | ||
333 | </widget> | ||
334 | <packing> | ||
335 | <property name="Position">0</property> | ||
336 | <property name="AutoSize">False</property> | ||
337 | </packing> | ||
338 | </child> | ||
339 | <child> | ||
340 | <widget class="Gtk.Entry" id="entry1"> | ||
341 | <property name="MemberName" /> | ||
342 | <property name="CanFocus">True</property> | ||
343 | <property name="Text" translatable="yes">http://gridserver:8001</property> | ||
344 | <property name="IsEditable">True</property> | ||
345 | <property name="MaxLength">255</property> | ||
346 | <property name="InvisibleChar">•</property> | ||
347 | </widget> | ||
348 | <packing> | ||
349 | <property name="Position">1</property> | ||
350 | <property name="AutoSize">False</property> | ||
351 | </packing> | ||
352 | </child> | ||
353 | <child> | ||
354 | <placeholder /> | ||
355 | </child> | ||
356 | </widget> | ||
357 | <packing> | ||
358 | <property name="Position">0</property> | ||
359 | <property name="AutoSize">True</property> | ||
360 | <property name="Expand">False</property> | ||
361 | <property name="Fill">False</property> | ||
362 | </packing> | ||
363 | </child> | ||
364 | <child> | ||
365 | <widget class="Gtk.HBox" id="hbox2"> | ||
366 | <property name="MemberName" /> | ||
367 | <child> | ||
368 | <widget class="Gtk.Label" id="label2"> | ||
369 | <property name="MemberName" /> | ||
370 | <property name="Xalign">1</property> | ||
371 | <property name="LabelProp" translatable="yes">Username:</property> | ||
372 | <property name="Justify">Right</property> | ||
373 | </widget> | ||
374 | <packing> | ||
375 | <property name="Position">0</property> | ||
376 | <property name="AutoSize">False</property> | ||
377 | </packing> | ||
378 | </child> | ||
379 | <child> | ||
380 | <widget class="Gtk.Entry" id="entry2"> | ||
381 | <property name="MemberName" /> | ||
382 | <property name="CanFocus">True</property> | ||
383 | <property name="IsEditable">True</property> | ||
384 | <property name="InvisibleChar">•</property> | ||
385 | </widget> | ||
386 | <packing> | ||
387 | <property name="Position">1</property> | ||
388 | <property name="AutoSize">True</property> | ||
389 | </packing> | ||
390 | </child> | ||
391 | <child> | ||
392 | <placeholder /> | ||
393 | </child> | ||
394 | </widget> | ||
395 | <packing> | ||
396 | <property name="Position">1</property> | ||
397 | <property name="AutoSize">False</property> | ||
398 | <property name="Expand">False</property> | ||
399 | <property name="Fill">False</property> | ||
400 | </packing> | ||
401 | </child> | ||
402 | <child> | ||
403 | <widget class="Gtk.HBox" id="hbox3"> | ||
404 | <property name="MemberName" /> | ||
405 | <child> | ||
406 | <widget class="Gtk.Label" id="label3"> | ||
407 | <property name="MemberName" /> | ||
408 | <property name="Xalign">1</property> | ||
409 | <property name="LabelProp" translatable="yes">Password:</property> | ||
410 | <property name="Justify">Right</property> | ||
411 | </widget> | ||
412 | <packing> | ||
413 | <property name="Position">0</property> | ||
414 | <property name="AutoSize">False</property> | ||
415 | </packing> | ||
416 | </child> | ||
417 | <child> | ||
418 | <widget class="Gtk.Entry" id="entry3"> | ||
419 | <property name="MemberName" /> | ||
420 | <property name="CanFocus">True</property> | ||
421 | <property name="IsEditable">True</property> | ||
422 | <property name="InvisibleChar">•</property> | ||
423 | </widget> | ||
424 | <packing> | ||
425 | <property name="Position">1</property> | ||
426 | <property name="AutoSize">True</property> | ||
427 | </packing> | ||
428 | </child> | ||
429 | <child> | ||
430 | <placeholder /> | ||
431 | </child> | ||
432 | </widget> | ||
433 | <packing> | ||
434 | <property name="Position">2</property> | ||
435 | <property name="AutoSize">True</property> | ||
436 | <property name="Expand">False</property> | ||
437 | <property name="Fill">False</property> | ||
438 | </packing> | ||
439 | </child> | ||
440 | </widget> | ||
441 | <packing> | ||
442 | <property name="Position">2</property> | ||
443 | <property name="AutoSize">True</property> | ||
444 | <property name="Expand">False</property> | ||
445 | <property name="Fill">False</property> | ||
446 | </packing> | ||
447 | </child> | ||
448 | </widget> | ||
449 | <packing> | ||
450 | <property name="Position">0</property> | ||
451 | <property name="AutoSize">True</property> | ||
452 | </packing> | ||
453 | </child> | ||
454 | </widget> | ||
455 | </child> | ||
456 | <child internal-child="ActionArea"> | ||
457 | <widget class="Gtk.HButtonBox" id="OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea"> | ||
458 | <property name="MemberName" /> | ||
459 | <property name="Events">ButtonPressMask</property> | ||
460 | <property name="Spacing">6</property> | ||
461 | <property name="BorderWidth">5</property> | ||
462 | <property name="Size">2</property> | ||
463 | <property name="LayoutStyle">End</property> | ||
464 | <child> | ||
465 | <widget class="Gtk.Button" id="button2"> | ||
466 | <property name="MemberName" /> | ||
467 | <property name="CanDefault">True</property> | ||
468 | <property name="CanFocus">True</property> | ||
469 | <property name="Type">TextAndIcon</property> | ||
470 | <property name="Icon">stock:gtk-apply Menu</property> | ||
471 | <property name="Label" translatable="yes">Connect</property> | ||
472 | <property name="UseUnderline">True</property> | ||
473 | <property name="IsDialogButton">True</property> | ||
474 | <property name="ResponseId">-5</property> | ||
475 | </widget> | ||
476 | <packing> | ||
477 | <property name="Expand">False</property> | ||
478 | <property name="Fill">False</property> | ||
479 | </packing> | ||
480 | </child> | ||
481 | <child> | ||
482 | <widget class="Gtk.Button" id="button8"> | ||
483 | <property name="MemberName" /> | ||
484 | <property name="CanDefault">True</property> | ||
485 | <property name="CanFocus">True</property> | ||
486 | <property name="Type">TextAndIcon</property> | ||
487 | <property name="Icon">stock:gtk-cancel Menu</property> | ||
488 | <property name="Label" translatable="yes">Cancel</property> | ||
489 | <property name="UseUnderline">True</property> | ||
490 | <property name="IsDialogButton">True</property> | ||
491 | <property name="ResponseId">-6</property> | ||
492 | </widget> | ||
493 | <packing> | ||
494 | <property name="Position">1</property> | ||
495 | <property name="Expand">False</property> | ||
496 | <property name="Fill">False</property> | ||
497 | </packing> | ||
498 | </child> | ||
499 | </widget> | ||
500 | </child> | ||
501 | </widget> | ||
502 | </stetic-interface> \ No newline at end of file | ||
diff --git a/OpenSim/Grid/UserServer.Config/AssemblyInfo.cs b/OpenSim/Grid/UserServer.Config/AssemblyInfo.cs new file mode 100644 index 0000000..25e0211 --- /dev/null +++ b/OpenSim/Grid/UserServer.Config/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("UserConfig")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("UserConfig")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Grid/UserServer.Config/DbUserConfig.cs b/OpenSim/Grid/UserServer.Config/DbUserConfig.cs new file mode 100644 index 0000000..770a6b9 --- /dev/null +++ b/OpenSim/Grid/UserServer.Config/DbUserConfig.cs | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenSim.Framework.Console; | ||
31 | using OpenSim.Framework.Interfaces; | ||
32 | using Db4objects.Db4o; | ||
33 | |||
34 | namespace OpenUser.Config.UserConfigDb4o | ||
35 | { | ||
36 | public class Db4oConfigPlugin: IUserConfig | ||
37 | { | ||
38 | public UserConfig GetConfigObject() | ||
39 | { | ||
40 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Loading Db40Config dll"); | ||
41 | return ( new DbUserConfig()); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | public class DbUserConfig : UserConfig | ||
46 | { | ||
47 | private IObjectContainer db; | ||
48 | |||
49 | public void LoadDefaults() { | ||
50 | OpenSim.Framework.Console.MainLog.Instance.Notice("Config.cs:LoadDefaults() - Please press enter to retain default or enter new settings"); | ||
51 | |||
52 | this.DefaultStartupMsg = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Default startup message", "Welcome to OGS"); | ||
53 | |||
54 | this.GridServerURL = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Grid server URL","http://127.0.0.1:8001/"); | ||
55 | this.GridSendKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to send to grid server","null"); | ||
56 | this.GridRecvKey = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Key to expect from grid server","null"); | ||
57 | } | ||
58 | |||
59 | public override void InitConfig() { | ||
60 | try { | ||
61 | db = Db4oFactory.OpenFile("openuser.yap"); | ||
62 | IObjectSet result = db.Get(typeof(DbUserConfig)); | ||
63 | if(result.Count==1) { | ||
64 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Config.cs:InitConfig() - Found a UserConfig object in the local database, loading"); | ||
65 | foreach (DbUserConfig cfg in result) { | ||
66 | this.GridServerURL=cfg.GridServerURL; | ||
67 | this.GridSendKey=cfg.GridSendKey; | ||
68 | this.GridRecvKey=cfg.GridRecvKey; | ||
69 | this.DefaultStartupMsg=cfg.DefaultStartupMsg; | ||
70 | } | ||
71 | } else { | ||
72 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults"); | ||
73 | LoadDefaults(); | ||
74 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Writing out default settings to local database"); | ||
75 | db.Set(this); | ||
76 | db.Close(); | ||
77 | } | ||
78 | } catch(Exception e) { | ||
79 | OpenSim.Framework.Console.MainLog.Instance.Warn("Config.cs:InitConfig() - Exception occured"); | ||
80 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
81 | } | ||
82 | |||
83 | OpenSim.Framework.Console.MainLog.Instance.Verbose("User settings loaded:"); | ||
84 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Default startup message: " + this.DefaultStartupMsg); | ||
85 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Grid server URL: " + this.GridServerURL); | ||
86 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to send to grid: " + this.GridSendKey); | ||
87 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Key to expect from grid: " + this.GridRecvKey); | ||
88 | } | ||
89 | |||
90 | |||
91 | public void Shutdown() { | ||
92 | db.Close(); | ||
93 | } | ||
94 | } | ||
95 | |||
96 | } | ||
diff --git a/OpenSim/Grid/UserServer.Config/OpenSim.Grid.UserServer.Config.csproj b/OpenSim/Grid/UserServer.Config/OpenSim.Grid.UserServer.Config.csproj new file mode 100644 index 0000000..1ae9589 --- /dev/null +++ b/OpenSim/Grid/UserServer.Config/OpenSim.Grid.UserServer.Config.csproj | |||
@@ -0,0 +1,107 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{08F87229-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Grid.UserServer.Config</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Grid.UserServer.Config</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="OpenSim.Framework" > | ||
70 | <HintPath>OpenSim.Framework.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="OpenSim.Framework.Console" > | ||
74 | <HintPath>OpenSim.Framework.Console.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System" > | ||
78 | <HintPath>System.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="System.Data.dll" > | ||
82 | <HintPath>..\..\..\bin\System.Data.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="System.Xml" > | ||
86 | <HintPath>System.Xml.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | </ItemGroup> | ||
92 | <ItemGroup> | ||
93 | <Compile Include="AssemblyInfo.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="DbUserConfig.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | </ItemGroup> | ||
100 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
101 | <PropertyGroup> | ||
102 | <PreBuildEvent> | ||
103 | </PreBuildEvent> | ||
104 | <PostBuildEvent> | ||
105 | </PostBuildEvent> | ||
106 | </PropertyGroup> | ||
107 | </Project> | ||
diff --git a/OpenSim/Grid/UserServer.Config/OpenSim.Grid.UserServer.Config.csproj.user b/OpenSim/Grid/UserServer.Config/OpenSim.Grid.UserServer.Config.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Grid/UserServer.Config/OpenSim.Grid.UserServer.Config.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs new file mode 100644 index 0000000..5c27d57 --- /dev/null +++ b/OpenSim/Grid/UserServer/Main.cs | |||
@@ -0,0 +1,219 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections; | ||
31 | using System.Collections.Generic; | ||
32 | using System.Reflection; | ||
33 | using System.IO; | ||
34 | using System.Text; | ||
35 | using libsecondlife; | ||
36 | using OpenSim.Framework.User; | ||
37 | using OpenSim.Framework.Sims; | ||
38 | using OpenSim.Framework.Inventory; | ||
39 | using OpenSim.Framework.Interfaces; | ||
40 | using OpenSim.Framework.Console; | ||
41 | using OpenSim.Servers; | ||
42 | using OpenSim.Framework.Utilities; | ||
43 | using OpenSim.GenericConfig; | ||
44 | |||
45 | namespace OpenGridServices.UserServer | ||
46 | { | ||
47 | /// <summary> | ||
48 | /// </summary> | ||
49 | public class OpenUser_Main : conscmd_callback | ||
50 | { | ||
51 | private string ConfigDll = "OpenUser.Config.UserConfigDb4o.dll"; | ||
52 | private string StorageDll = "OpenGrid.Framework.Data.MySQL.dll"; | ||
53 | private UserConfig Cfg; | ||
54 | protected IGenericConfig localXMLConfig; | ||
55 | |||
56 | public UserManager m_userManager; | ||
57 | |||
58 | public Dictionary<LLUUID, UserProfile> UserSessions = new Dictionary<LLUUID, UserProfile>(); | ||
59 | |||
60 | LogBase m_console; | ||
61 | |||
62 | [STAThread] | ||
63 | public static void Main(string[] args) | ||
64 | { | ||
65 | Console.WriteLine("Launching UserServer..."); | ||
66 | |||
67 | OpenUser_Main userserver = new OpenUser_Main(); | ||
68 | |||
69 | userserver.Startup(); | ||
70 | userserver.Work(); | ||
71 | } | ||
72 | |||
73 | private OpenUser_Main() | ||
74 | { | ||
75 | m_console = new LogBase("opengrid-userserver-console.log", "OpenUser", this , false); | ||
76 | OpenSim.Framework.Console.MainLog.Instance = m_console; | ||
77 | } | ||
78 | |||
79 | private void Work() | ||
80 | { | ||
81 | m_console.Notice("Enter help for a list of commands\n"); | ||
82 | |||
83 | while (true) | ||
84 | { | ||
85 | m_console.MainLogPrompt(); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | public void Startup() | ||
90 | { | ||
91 | this.localXMLConfig = new XmlConfig("UserServerConfig.xml"); | ||
92 | this.localXMLConfig.LoadData(); | ||
93 | this.ConfigDB(this.localXMLConfig); | ||
94 | this.localXMLConfig.Close(); | ||
95 | |||
96 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Main.cs:Startup() - Loading configuration"); | ||
97 | Cfg = this.LoadConfigDll(this.ConfigDll); | ||
98 | Cfg.InitConfig(); | ||
99 | |||
100 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Main.cs:Startup() - Establishing data connection"); | ||
101 | m_userManager = new UserManager(); | ||
102 | m_userManager._config = Cfg; | ||
103 | m_userManager.AddPlugin(StorageDll); | ||
104 | |||
105 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Main.cs:Startup() - Starting HTTP process"); | ||
106 | BaseHttpServer httpServer = new BaseHttpServer(8002); | ||
107 | |||
108 | httpServer.AddXmlRPCHandler("login_to_simulator", m_userManager.XmlRpcLoginMethod); | ||
109 | |||
110 | httpServer.AddRestHandler("GET", "/user/name/", m_userManager.RestGetUserMethodName); | ||
111 | httpServer.AddRestHandler("GET", "/user/uuid/", m_userManager.RestGetUserMethodUUID); | ||
112 | |||
113 | httpServer.AddRestHandler("DELETE", "/usersessions/", m_userManager.RestDeleteUserSessionMethod); | ||
114 | |||
115 | httpServer.Start(); | ||
116 | m_console.Status("Userserver 0.3 - Startup complete"); | ||
117 | } | ||
118 | |||
119 | |||
120 | public void do_create(string what) | ||
121 | { | ||
122 | switch (what) | ||
123 | { | ||
124 | case "user": | ||
125 | string tempfirstname; | ||
126 | string templastname; | ||
127 | string tempMD5Passwd; | ||
128 | uint regX = 997; | ||
129 | uint regY = 996; | ||
130 | |||
131 | tempfirstname = m_console.CmdPrompt("First name"); | ||
132 | templastname = m_console.CmdPrompt("Last name"); | ||
133 | tempMD5Passwd = m_console.PasswdPrompt("Password"); | ||
134 | regX = Convert.ToUInt32(m_console.CmdPrompt("Start Region X")); | ||
135 | regY = Convert.ToUInt32(m_console.CmdPrompt("Start Region Y")); | ||
136 | |||
137 | tempMD5Passwd = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + ""); | ||
138 | |||
139 | m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY); | ||
140 | break; | ||
141 | } | ||
142 | } | ||
143 | |||
144 | public void RunCmd(string cmd, string[] cmdparams) | ||
145 | { | ||
146 | switch (cmd) | ||
147 | { | ||
148 | case "help": | ||
149 | m_console.Notice("create user - create a new user"); | ||
150 | m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)"); | ||
151 | break; | ||
152 | |||
153 | case "create": | ||
154 | do_create(cmdparams[0]); | ||
155 | break; | ||
156 | |||
157 | case "shutdown": | ||
158 | m_console.Close(); | ||
159 | Environment.Exit(0); | ||
160 | break; | ||
161 | } | ||
162 | } | ||
163 | |||
164 | private void ConfigDB(IGenericConfig configData) | ||
165 | { | ||
166 | try | ||
167 | { | ||
168 | string attri = ""; | ||
169 | attri = configData.GetAttribute("DataBaseProvider"); | ||
170 | if (attri == "") | ||
171 | { | ||
172 | StorageDll = "OpenGrid.Framework.Data.DB4o.dll"; | ||
173 | configData.SetAttribute("DataBaseProvider", "OpenGrid.Framework.Data.DB4o.dll"); | ||
174 | } | ||
175 | else | ||
176 | { | ||
177 | StorageDll = attri; | ||
178 | } | ||
179 | configData.Commit(); | ||
180 | } | ||
181 | catch (Exception e) | ||
182 | { | ||
183 | |||
184 | } | ||
185 | } | ||
186 | |||
187 | private UserConfig LoadConfigDll(string dllName) | ||
188 | { | ||
189 | Assembly pluginAssembly = Assembly.LoadFrom(dllName); | ||
190 | UserConfig config = null; | ||
191 | |||
192 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
193 | { | ||
194 | if (pluginType.IsPublic) | ||
195 | { | ||
196 | if (!pluginType.IsAbstract) | ||
197 | { | ||
198 | Type typeInterface = pluginType.GetInterface("IUserConfig", true); | ||
199 | |||
200 | if (typeInterface != null) | ||
201 | { | ||
202 | IUserConfig plug = (IUserConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
203 | config = plug.GetConfigObject(); | ||
204 | break; | ||
205 | } | ||
206 | |||
207 | typeInterface = null; | ||
208 | } | ||
209 | } | ||
210 | } | ||
211 | pluginAssembly = null; | ||
212 | return config; | ||
213 | } | ||
214 | |||
215 | public void Show(string ShowWhat) | ||
216 | { | ||
217 | } | ||
218 | } | ||
219 | } | ||
diff --git a/OpenSim/Grid/UserServer/OpenSim.Grid.UserServer.csproj b/OpenSim/Grid/UserServer/OpenSim.Grid.UserServer.csproj new file mode 100644 index 0000000..3c93b78 --- /dev/null +++ b/OpenSim/Grid/UserServer/OpenSim.Grid.UserServer.csproj | |||
@@ -0,0 +1,132 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{2FC96F92-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Grid.UserServer</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Exe</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Grid.UserServer</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="OpenSim.Framework" > | ||
70 | <HintPath>OpenSim.Framework.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="OpenSim.Framework.Console" > | ||
74 | <HintPath>OpenSim.Framework.Console.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="OpenSim.Framework.GenericConfig.Xml" > | ||
78 | <HintPath>OpenSim.Framework.GenericConfig.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="OpenSim.Framework.Servers" > | ||
82 | <HintPath>OpenSim.Framework.Servers.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="OpenSim.Framework.UserManager" > | ||
86 | <HintPath>OpenSim.Framework.UserManager.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | <Reference Include="System" > | ||
90 | <HintPath>System.dll</HintPath> | ||
91 | <Private>False</Private> | ||
92 | </Reference> | ||
93 | <Reference Include="System.Data" > | ||
94 | <HintPath>System.Data.dll</HintPath> | ||
95 | <Private>False</Private> | ||
96 | </Reference> | ||
97 | <Reference Include="System.Xml" > | ||
98 | <HintPath>System.Xml.dll</HintPath> | ||
99 | <Private>False</Private> | ||
100 | </Reference> | ||
101 | <Reference Include="XMLRPC.dll" > | ||
102 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
103 | <Private>False</Private> | ||
104 | </Reference> | ||
105 | </ItemGroup> | ||
106 | <ItemGroup> | ||
107 | <ProjectReference Include="..\..\Framework\Data\OpenSim.Framework.Data.csproj"> | ||
108 | <Name>OpenSim.Framework.Data</Name> | ||
109 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
110 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
111 | <Private>False</Private> | ||
112 | </ProjectReference> | ||
113 | </ItemGroup> | ||
114 | <ItemGroup> | ||
115 | <Compile Include="Main.cs"> | ||
116 | <SubType>Code</SubType> | ||
117 | </Compile> | ||
118 | <Compile Include="UserManager.cs"> | ||
119 | <SubType>Code</SubType> | ||
120 | </Compile> | ||
121 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
122 | <SubType>Code</SubType> | ||
123 | </Compile> | ||
124 | </ItemGroup> | ||
125 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
126 | <PropertyGroup> | ||
127 | <PreBuildEvent> | ||
128 | </PreBuildEvent> | ||
129 | <PostBuildEvent> | ||
130 | </PostBuildEvent> | ||
131 | </PropertyGroup> | ||
132 | </Project> | ||
diff --git a/OpenSim/Grid/UserServer/OpenSim.Grid.UserServer.csproj.user b/OpenSim/Grid/UserServer/OpenSim.Grid.UserServer.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Grid/UserServer/OpenSim.Grid.UserServer.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5d5ce8d --- /dev/null +++ b/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,33 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OGS-UserServer")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OGS-UserServer")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("e266513a-090b-4d38-80f6-8599eef68c8c")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | [assembly: AssemblyVersion("1.0.0.0")] | ||
33 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Grid/UserServer/UserManager.cs b/OpenSim/Grid/UserServer/UserManager.cs new file mode 100644 index 0000000..0704de1 --- /dev/null +++ b/OpenSim/Grid/UserServer/UserManager.cs | |||
@@ -0,0 +1,103 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using OpenGrid.Framework.Data; | ||
33 | using libsecondlife; | ||
34 | using System.Reflection; | ||
35 | |||
36 | using System.Xml; | ||
37 | using Nwc.XmlRpc; | ||
38 | using OpenSim.Framework.Sims; | ||
39 | using OpenSim.Framework.Inventory; | ||
40 | using OpenSim.Framework.Utilities; | ||
41 | using OpenGrid.Framework.UserManagement; | ||
42 | |||
43 | using System.Security.Cryptography; | ||
44 | |||
45 | namespace OpenGridServices.UserServer | ||
46 | { | ||
47 | public class UserManager : UserManagerBase | ||
48 | { | ||
49 | public UserManager() | ||
50 | { | ||
51 | } | ||
52 | |||
53 | /// <summary> | ||
54 | /// Customises the login response and fills in missing values. | ||
55 | /// </summary> | ||
56 | /// <param name="response">The existing response</param> | ||
57 | /// <param name="theUser">The user profile</param> | ||
58 | public override void CustomiseResponse(ref LoginResponse response, ref UserProfileData theUser) | ||
59 | { | ||
60 | // Load information from the gridserver | ||
61 | SimProfile SimInfo = new SimProfile(); | ||
62 | SimInfo = SimInfo.LoadFromGrid(theUser.currentAgent.currentHandle, _config.GridServerURL, _config.GridSendKey, _config.GridRecvKey); | ||
63 | |||
64 | // Customise the response | ||
65 | // Home Location | ||
66 | response.Home = "{'region_handle':[r" + (SimInfo.RegionLocX * 256).ToString() + ",r" + (SimInfo.RegionLocY * 256).ToString() + "], " + | ||
67 | "'position':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "], " + | ||
68 | "'look_at':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "]}"; | ||
69 | |||
70 | // Destination | ||
71 | response.SimAddress = SimInfo.sim_ip; | ||
72 | response.SimPort = (Int32)SimInfo.sim_port; | ||
73 | response.RegionX = SimInfo.RegionLocY ; | ||
74 | response.RegionY = SimInfo.RegionLocX ; | ||
75 | |||
76 | // Notify the target of an incoming user | ||
77 | Console.WriteLine("Notifying " + SimInfo.regionname + " (" + SimInfo.caps_url + ")"); | ||
78 | |||
79 | // Prepare notification | ||
80 | Hashtable SimParams = new Hashtable(); | ||
81 | SimParams["session_id"] = theUser.currentAgent.sessionID.ToString(); | ||
82 | SimParams["secure_session_id"] = theUser.currentAgent.secureSessionID.ToString(); | ||
83 | SimParams["firstname"] = theUser.username; | ||
84 | SimParams["lastname"] = theUser.surname; | ||
85 | SimParams["agent_id"] = theUser.UUID.ToString(); | ||
86 | SimParams["circuit_code"] = (Int32)Convert.ToUInt32(response.CircuitCode); | ||
87 | SimParams["startpos_x"] = theUser.currentAgent.currentPos.X.ToString(); | ||
88 | SimParams["startpos_y"] = theUser.currentAgent.currentPos.Y.ToString(); | ||
89 | SimParams["startpos_z"] = theUser.currentAgent.currentPos.Z.ToString(); | ||
90 | SimParams["regionhandle"] = theUser.currentAgent.currentHandle.ToString(); | ||
91 | ArrayList SendParams = new ArrayList(); | ||
92 | SendParams.Add(SimParams); | ||
93 | |||
94 | // Update agent with target sim | ||
95 | theUser.currentAgent.currentRegion = SimInfo.UUID; | ||
96 | theUser.currentAgent.currentHandle = SimInfo.regionhandle; | ||
97 | |||
98 | // Send | ||
99 | XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams); | ||
100 | XmlRpcResponse GridResp = GridReq.Send(SimInfo.caps_url, 3000); | ||
101 | } | ||
102 | } | ||
103 | } | ||
diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs new file mode 100644 index 0000000..40701b0 --- /dev/null +++ b/OpenSim/Region/Application/Application.cs | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Console; | ||
32 | |||
33 | namespace OpenSim | ||
34 | { | ||
35 | public class Application | ||
36 | { | ||
37 | //could move our main function into OpenSimMain and kill this class | ||
38 | [STAThread] | ||
39 | public static void Main(string[] args) | ||
40 | { | ||
41 | Console.WriteLine("OpenSim " + VersionInfo.Version + "\n"); | ||
42 | Console.WriteLine("Starting...\n"); | ||
43 | |||
44 | bool sandBoxMode = false; | ||
45 | bool startLoginServer = false; | ||
46 | string physicsEngine = "basicphysics"; | ||
47 | bool allowFlying = false; | ||
48 | bool userAccounts = false; | ||
49 | bool gridLocalAsset = false; | ||
50 | bool useConfigFile = false; | ||
51 | bool silent = false; | ||
52 | string configFile = "simconfig.xml"; | ||
53 | |||
54 | for (int i = 0; i < args.Length; i++) | ||
55 | { | ||
56 | if (args[i] == "-sandbox") | ||
57 | { | ||
58 | sandBoxMode = true; | ||
59 | startLoginServer = true; | ||
60 | } | ||
61 | /* | ||
62 | if (args[i] == "-loginserver") | ||
63 | { | ||
64 | startLoginServer = true; | ||
65 | }*/ | ||
66 | if (args[i] == "-accounts") | ||
67 | { | ||
68 | userAccounts = true; | ||
69 | } | ||
70 | if (args[i] == "-realphysx") | ||
71 | { | ||
72 | physicsEngine = "RealPhysX"; | ||
73 | allowFlying = true; | ||
74 | } | ||
75 | if (args[i] == "-ode") | ||
76 | { | ||
77 | physicsEngine = "OpenDynamicsEngine"; | ||
78 | allowFlying = true; | ||
79 | } | ||
80 | if (args[i] == "-localasset") | ||
81 | { | ||
82 | gridLocalAsset = true; | ||
83 | } | ||
84 | if (args[i] == "-configfile") | ||
85 | { | ||
86 | useConfigFile = true; | ||
87 | } | ||
88 | if (args[i] == "-noverbose") | ||
89 | { | ||
90 | silent = true; | ||
91 | } | ||
92 | if (args[i] == "-config") | ||
93 | { | ||
94 | try | ||
95 | { | ||
96 | i++; | ||
97 | configFile = args[i]; | ||
98 | } | ||
99 | catch (Exception e) | ||
100 | { | ||
101 | Console.WriteLine("-config: Please specify a config file. (" + e.ToString() + ")"); | ||
102 | } | ||
103 | } | ||
104 | } | ||
105 | |||
106 | OpenSimMain sim = new OpenSimMain(sandBoxMode, startLoginServer, physicsEngine, useConfigFile, silent, configFile); | ||
107 | // OpenSimRoot.Instance.Application = sim; | ||
108 | sim.m_sandbox = sandBoxMode; | ||
109 | sim.user_accounts = userAccounts; | ||
110 | sim.gridLocalAsset = gridLocalAsset; | ||
111 | OpenSim.Region.Scenes.ScenePresence.PhysicsEngineFlying = allowFlying; | ||
112 | |||
113 | sim.StartUp(); | ||
114 | |||
115 | while (true) | ||
116 | { | ||
117 | OpenSim.Framework.Console.MainLog.Instance.MainLogPrompt(); | ||
118 | } | ||
119 | } | ||
120 | } | ||
121 | } | ||
diff --git a/OpenSim/Region/Application/OpenSim.csproj b/OpenSim/Region/Application/OpenSim.csproj new file mode 100644 index 0000000..214f2cf --- /dev/null +++ b/OpenSim/Region/Application/OpenSim.csproj | |||
@@ -0,0 +1,181 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{438A9556-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Exe</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="Db4objects.Db4o.dll" > | ||
66 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="libsecondlife.dll" > | ||
70 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System" > | ||
74 | <HintPath>System.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="XMLRPC.dll" > | ||
82 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | </ItemGroup> | ||
86 | <ItemGroup> | ||
87 | <ProjectReference Include="..\..\Framework\General\OpenSim.Framework.csproj"> | ||
88 | <Name>OpenSim.Framework</Name> | ||
89 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
90 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
91 | <Private>False</Private> | ||
92 | </ProjectReference> | ||
93 | <ProjectReference Include="..\..\Framework\Communications\OpenSim.Framework.Communications.csproj"> | ||
94 | <Name>OpenSim.Framework.Communications</Name> | ||
95 | <Project>{CB52B7E7-0000-0000-0000-000000000000}</Project> | ||
96 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
97 | <Private>False</Private> | ||
98 | </ProjectReference> | ||
99 | <ProjectReference Include="..\..\Framework\Communications.OGS1\OpenSim.Framework.Communications.OGS1.csproj"> | ||
100 | <Name>OpenSim.Framework.Communications.OGS1</Name> | ||
101 | <Project>{6109024D-0000-0000-0000-000000000000}</Project> | ||
102 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
103 | <Private>False</Private> | ||
104 | </ProjectReference> | ||
105 | <ProjectReference Include="..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
106 | <Name>OpenSim.Framework.Console</Name> | ||
107 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
108 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
109 | <Private>False</Private> | ||
110 | </ProjectReference> | ||
111 | <ProjectReference Include="..\..\Framework\GenericConfig\Xml\OpenSim.Framework.GenericConfig.Xml.csproj"> | ||
112 | <Name>OpenSim.Framework.GenericConfig.Xml</Name> | ||
113 | <Project>{C74E4A30-0000-0000-0000-000000000000}</Project> | ||
114 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
115 | <Private>False</Private> | ||
116 | </ProjectReference> | ||
117 | <ProjectReference Include="..\..\Framework\Servers\OpenSim.Framework.Servers.csproj"> | ||
118 | <Name>OpenSim.Framework.Servers</Name> | ||
119 | <Project>{2CC71860-0000-0000-0000-000000000000}</Project> | ||
120 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
121 | <Private>False</Private> | ||
122 | </ProjectReference> | ||
123 | <ProjectReference Include="..\..\Framework\UserManager\OpenSim.Framework.UserManagement.csproj"> | ||
124 | <Name>OpenSim.Framework.UserManagement</Name> | ||
125 | <Project>{586E2916-0000-0000-0000-000000000000}</Project> | ||
126 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
127 | <Private>False</Private> | ||
128 | </ProjectReference> | ||
129 | <ProjectReference Include="..\Caches\OpenSim.Region.Caches.csproj"> | ||
130 | <Name>OpenSim.Region.Caches</Name> | ||
131 | <Project>{61FCCDB3-0000-0000-0000-000000000000}</Project> | ||
132 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
133 | <Private>False</Private> | ||
134 | </ProjectReference> | ||
135 | <ProjectReference Include="..\ClientStack\OpenSim.Region.ClientStack.csproj"> | ||
136 | <Name>OpenSim.Region.ClientStack</Name> | ||
137 | <Project>{DC3698B2-0000-0000-0000-000000000000}</Project> | ||
138 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
139 | <Private>False</Private> | ||
140 | </ProjectReference> | ||
141 | <ProjectReference Include="..\LocalCommunications\OpenSim.Region.LocalCommunications.csproj"> | ||
142 | <Name>OpenSim.Region.LocalCommunications</Name> | ||
143 | <Project>{EB3A1BA8-0000-0000-0000-000000000000}</Project> | ||
144 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
145 | <Private>False</Private> | ||
146 | </ProjectReference> | ||
147 | <ProjectReference Include="..\Physics\Manager\OpenSim.Region.Physics.Manager.csproj"> | ||
148 | <Name>OpenSim.Region.Physics.Manager</Name> | ||
149 | <Project>{F4FF31EB-0000-0000-0000-000000000000}</Project> | ||
150 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
151 | <Private>False</Private> | ||
152 | </ProjectReference> | ||
153 | <ProjectReference Include="..\Simulation\OpenSim.Region.Simulation.csproj"> | ||
154 | <Name>OpenSim.Region.Simulation</Name> | ||
155 | <Project>{C0DAB338-0000-0000-0000-000000000000}</Project> | ||
156 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
157 | <Private>False</Private> | ||
158 | </ProjectReference> | ||
159 | <ProjectReference Include="..\Terrain.BasicTerrain\OpenSim.Region.Terrain.BasicTerrain.csproj"> | ||
160 | <Name>OpenSim.Region.Terrain.BasicTerrain</Name> | ||
161 | <Project>{C9E0F891-0000-0000-0000-000000000000}</Project> | ||
162 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
163 | <Private>False</Private> | ||
164 | </ProjectReference> | ||
165 | </ItemGroup> | ||
166 | <ItemGroup> | ||
167 | <Compile Include="Application.cs"> | ||
168 | <SubType>Code</SubType> | ||
169 | </Compile> | ||
170 | <Compile Include="OpenSimMain.cs"> | ||
171 | <SubType>Code</SubType> | ||
172 | </Compile> | ||
173 | </ItemGroup> | ||
174 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
175 | <PropertyGroup> | ||
176 | <PreBuildEvent> | ||
177 | </PreBuildEvent> | ||
178 | <PostBuildEvent> | ||
179 | </PostBuildEvent> | ||
180 | </PropertyGroup> | ||
181 | </Project> | ||
diff --git a/OpenSim/Region/Application/OpenSim.csproj.user b/OpenSim/Region/Application/OpenSim.csproj.user new file mode 100644 index 0000000..2ff1c4c --- /dev/null +++ b/OpenSim/Region/Application/OpenSim.csproj.user | |||
@@ -0,0 +1,13 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <StartArguments>-loginserver -sandbox -accounts</StartArguments> | ||
6 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
7 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
8 | <ProjectView>ProjectFiles</ProjectView> | ||
9 | <ProjectTrust>0</ProjectTrust> | ||
10 | </PropertyGroup> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
12 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
13 | </Project> | ||
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs new file mode 100644 index 0000000..7da2263 --- /dev/null +++ b/OpenSim/Region/Application/OpenSimMain.cs | |||
@@ -0,0 +1,476 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Text; | ||
31 | using System.IO; | ||
32 | using System.Threading; | ||
33 | using System.Net; | ||
34 | using System.Net.Sockets; | ||
35 | using System.Timers; | ||
36 | using System.Reflection; | ||
37 | using System.Collections; | ||
38 | using System.Collections.Generic; | ||
39 | using libsecondlife; | ||
40 | using libsecondlife.Packets; | ||
41 | using OpenSim.Region; | ||
42 | using OpenSim.Region.Scenes; | ||
43 | using OpenSim.Terrain; | ||
44 | using OpenSim.Framework.Interfaces; | ||
45 | using OpenSim.Framework.Types; | ||
46 | using OpenSim.Framework; | ||
47 | using OpenSim.Assets; | ||
48 | using OpenSim.Caches; | ||
49 | using OpenSim.Framework.Console; | ||
50 | using OpenSim.Physics.Manager; | ||
51 | using Nwc.XmlRpc; | ||
52 | using OpenSim.Servers; | ||
53 | using OpenSim.GenericConfig; | ||
54 | using OpenGrid.Framework.Communications; | ||
55 | using OpenSim.LocalCommunications; | ||
56 | using OpenGrid.Framework.Communications.OGS1; | ||
57 | |||
58 | namespace OpenSim | ||
59 | { | ||
60 | |||
61 | public class OpenSimMain : RegionApplicationBase, conscmd_callback | ||
62 | { | ||
63 | // private CheckSumServer checkServer; | ||
64 | protected CommunicationsManager commsManager; | ||
65 | |||
66 | private bool m_silent; | ||
67 | private string m_logFilename = "region-console-" + Guid.NewGuid().ToString() + ".log"; | ||
68 | |||
69 | public OpenSimMain(bool sandBoxMode, bool startLoginServer, string physicsEngine, bool useConfigFile, bool silent, string configFile) | ||
70 | { | ||
71 | this.configFileSetup = useConfigFile; | ||
72 | m_sandbox = sandBoxMode; | ||
73 | m_loginserver = startLoginServer; | ||
74 | m_physicsEngine = physicsEngine; | ||
75 | m_config = configFile; | ||
76 | m_silent = silent; | ||
77 | } | ||
78 | |||
79 | /// <summary> | ||
80 | /// Performs initialisation of the world, such as loading configuration from disk. | ||
81 | /// </summary> | ||
82 | public override void StartUp() | ||
83 | { | ||
84 | this.serversData = new NetworkServersInfo(); | ||
85 | |||
86 | this.localConfig = new XmlConfig(m_config); | ||
87 | this.localConfig.LoadData(); | ||
88 | |||
89 | if (this.configFileSetup) | ||
90 | { | ||
91 | this.SetupFromConfigFile(this.localConfig); | ||
92 | } | ||
93 | |||
94 | m_log = new LogBase(m_logFilename, "Region", this, m_silent); | ||
95 | OpenSim.Framework.Console.MainLog.Instance = m_log; | ||
96 | |||
97 | m_log.Verbose( "Main.cs:Startup() - Loading configuration"); | ||
98 | this.serversData.InitConfig(this.m_sandbox, this.localConfig); | ||
99 | this.localConfig.Close();//for now we can close it as no other classes read from it , but this should change | ||
100 | |||
101 | ScenePresence.LoadTextureFile("avatar-texture.dat"); | ||
102 | |||
103 | ClientView.TerrainManager = new TerrainManager(new SecondLife()); | ||
104 | |||
105 | CommunicationsLocal sandboxCommunications = null; | ||
106 | if (m_sandbox) | ||
107 | { | ||
108 | this.SetupLocalGridServers(); | ||
109 | // this.checkServer = new CheckSumServer(12036); | ||
110 | // this.checkServer.ServerListener(); | ||
111 | sandboxCommunications = new CommunicationsLocal(this.serversData); | ||
112 | this.commsManager = sandboxCommunications; | ||
113 | } | ||
114 | else | ||
115 | { | ||
116 | this.SetupRemoteGridServers(); | ||
117 | this.commsManager = new GridCommsManager(this.serversData); | ||
118 | } | ||
119 | |||
120 | startuptime = DateTime.Now; | ||
121 | |||
122 | this.physManager = new OpenSim.Physics.Manager.PhysicsManager(); | ||
123 | this.physManager.LoadPlugins(); | ||
124 | |||
125 | this.SetupHttpListener(); | ||
126 | |||
127 | this.SetupWorld(); | ||
128 | |||
129 | m_log.Verbose( "Main.cs:Startup() - Initialising HTTP server"); | ||
130 | |||
131 | |||
132 | |||
133 | if (m_sandbox) | ||
134 | { | ||
135 | httpServer.AddXmlRPCHandler("login_to_simulator", sandboxCommunications.UserServices.XmlRpcLoginMethod); | ||
136 | } | ||
137 | |||
138 | //Start http server | ||
139 | m_log.Verbose( "Main.cs:Startup() - Starting HTTP server"); | ||
140 | httpServer.Start(); | ||
141 | |||
142 | // Start UDP servers | ||
143 | for (int i = 0; i < m_udpServer.Count; i++) | ||
144 | { | ||
145 | this.m_udpServer[i].ServerListener(); | ||
146 | } | ||
147 | |||
148 | } | ||
149 | |||
150 | # region Setup methods | ||
151 | protected override void SetupLocalGridServers() | ||
152 | { | ||
153 | try | ||
154 | { | ||
155 | AssetCache = new AssetCache("OpenSim.GridInterfaces.Local.dll", this.serversData.AssetURL, this.serversData.AssetSendKey); | ||
156 | InventoryCache = new InventoryCache(); | ||
157 | } | ||
158 | catch (Exception e) | ||
159 | { | ||
160 | m_log.Error( e.Message + "\nSorry, could not setup local cache"); | ||
161 | Environment.Exit(1); | ||
162 | } | ||
163 | |||
164 | } | ||
165 | |||
166 | protected override void SetupRemoteGridServers() | ||
167 | { | ||
168 | try | ||
169 | { | ||
170 | AssetCache = new AssetCache("OpenSim.GridInterfaces.Remote.dll", this.serversData.AssetURL, this.serversData.AssetSendKey); | ||
171 | InventoryCache = new InventoryCache(); | ||
172 | } | ||
173 | catch (Exception e) | ||
174 | { | ||
175 | m_log.Error( e.Message + "\nSorry, could not setup remote cache"); | ||
176 | Environment.Exit(1); | ||
177 | } | ||
178 | } | ||
179 | |||
180 | protected override void SetupWorld() | ||
181 | { | ||
182 | IGenericConfig regionConfig; | ||
183 | Scene LocalWorld; | ||
184 | UDPServer udpServer; | ||
185 | RegionInfo regionDat = new RegionInfo(); | ||
186 | AuthenticateSessionsBase authenBase; | ||
187 | |||
188 | string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Regions"); | ||
189 | string[] configFiles = Directory.GetFiles(path, "*.xml"); | ||
190 | |||
191 | if (configFiles.Length == 0) | ||
192 | { | ||
193 | string path2 = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Regions"); | ||
194 | string path3 = Path.Combine(path2, "default.xml"); | ||
195 | Console.WriteLine("Creating default region config file"); | ||
196 | //TODO create default region | ||
197 | IGenericConfig defaultConfig = new XmlConfig(path3); | ||
198 | defaultConfig.LoadData(); | ||
199 | defaultConfig.Commit(); | ||
200 | defaultConfig.Close(); | ||
201 | defaultConfig = null; | ||
202 | configFiles = Directory.GetFiles(path, "*.xml"); | ||
203 | } | ||
204 | |||
205 | for (int i = 0; i < configFiles.Length; i++) | ||
206 | { | ||
207 | regionDat = new RegionInfo(); | ||
208 | if (m_sandbox) | ||
209 | { | ||
210 | AuthenticateSessionsBase authen = new AuthenticateSessionsBase(); // new AuthenticateSessionsLocal(); | ||
211 | this.AuthenticateSessionsHandler.Add(authen); | ||
212 | authenBase = authen; | ||
213 | } | ||
214 | else | ||
215 | { | ||
216 | AuthenticateSessionsBase authen = new AuthenticateSessionsBase(); //new AuthenticateSessionsRemote(); | ||
217 | this.AuthenticateSessionsHandler.Add(authen); | ||
218 | authenBase = authen; | ||
219 | } | ||
220 | Console.WriteLine("Loading region config file"); | ||
221 | regionConfig = new XmlConfig(configFiles[i]); | ||
222 | regionConfig.LoadData(); | ||
223 | regionDat.InitConfig(this.m_sandbox, regionConfig); | ||
224 | regionConfig.Close(); | ||
225 | |||
226 | udpServer = new UDPServer(regionDat.CommsIPListenPort, this.AssetCache, this.InventoryCache, this.m_log, authenBase); | ||
227 | |||
228 | m_udpServer.Add(udpServer); | ||
229 | this.regionData.Add(regionDat); | ||
230 | |||
231 | /* | ||
232 | m_log.WriteLine(OpenSim.Framework.Console.LogPriority.NORMAL, "Main.cs:Startup() - We are " + regionData.RegionName + " at " + regionData.RegionLocX.ToString() + "," + regionData.RegionLocY.ToString()); | ||
233 | m_log.Verbose( "Initialising world"); | ||
234 | m_log.componentname = "Region " + regionData.RegionName; | ||
235 | */ | ||
236 | |||
237 | LocalWorld = new Scene(udpServer.PacketServer.ClientAPIs, regionDat, authenBase, commsManager, this.AssetCache, httpServer); | ||
238 | this.m_localWorld.Add(LocalWorld); | ||
239 | //LocalWorld.InventoryCache = InventoryCache; | ||
240 | //LocalWorld.AssetCache = AssetCache; | ||
241 | |||
242 | udpServer.LocalWorld = LocalWorld; | ||
243 | |||
244 | LocalWorld.LoadStorageDLL("OpenSim.Storage.LocalStorageDb4o.dll"); //all these dll names shouldn't be hard coded. | ||
245 | LocalWorld.LoadWorldMap(); | ||
246 | |||
247 | m_log.Verbose( "Main.cs:Startup() - Starting up messaging system"); | ||
248 | LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine); | ||
249 | LocalWorld.PhysScene.SetTerrain(LocalWorld.Terrain.getHeights1D()); | ||
250 | LocalWorld.LoadPrimsFromStorage(); | ||
251 | LocalWorld.localStorage.LoadParcels((ILocalStorageParcelReceiver)LocalWorld.parcelManager); | ||
252 | |||
253 | |||
254 | LocalWorld.StartTimer(); | ||
255 | } | ||
256 | } | ||
257 | |||
258 | protected override void SetupHttpListener() | ||
259 | { | ||
260 | httpServer = new BaseHttpServer(this.serversData.HttpListenerPort); //regionData[0].IPListenPort); | ||
261 | |||
262 | if (!this.m_sandbox) | ||
263 | { | ||
264 | |||
265 | // we are in Grid mode so set a XmlRpc handler to handle "expect_user" calls from the user server | ||
266 | |||
267 | |||
268 | httpServer.AddRestHandler("GET", "/simstatus/", | ||
269 | delegate(string request, string path, string param) | ||
270 | { | ||
271 | return "OK"; | ||
272 | }); | ||
273 | } | ||
274 | } | ||
275 | |||
276 | protected override void ConnectToRemoteGridServer() | ||
277 | { | ||
278 | |||
279 | } | ||
280 | |||
281 | #endregion | ||
282 | |||
283 | private void SetupFromConfigFile(IGenericConfig configData) | ||
284 | { | ||
285 | // Log filename | ||
286 | string attri = ""; | ||
287 | attri = configData.GetAttribute("LogFilename"); | ||
288 | if (String.IsNullOrEmpty(attri)) | ||
289 | { | ||
290 | } | ||
291 | else | ||
292 | { | ||
293 | m_logFilename = attri; | ||
294 | } | ||
295 | |||
296 | // SandBoxMode | ||
297 | attri = ""; | ||
298 | attri = configData.GetAttribute("SandBox"); | ||
299 | if ((attri == "") || ((attri != "false") && (attri != "true"))) | ||
300 | { | ||
301 | this.m_sandbox = false; | ||
302 | configData.SetAttribute("SandBox", "false"); | ||
303 | } | ||
304 | else | ||
305 | { | ||
306 | this.m_sandbox = Convert.ToBoolean(attri); | ||
307 | } | ||
308 | |||
309 | // LoginServer | ||
310 | attri = ""; | ||
311 | attri = configData.GetAttribute("LoginServer"); | ||
312 | if ((attri == "") || ((attri != "false") && (attri != "true"))) | ||
313 | { | ||
314 | this.m_loginserver = false; | ||
315 | configData.SetAttribute("LoginServer", "false"); | ||
316 | } | ||
317 | else | ||
318 | { | ||
319 | this.m_loginserver = Convert.ToBoolean(attri); | ||
320 | } | ||
321 | |||
322 | // Sandbox User accounts | ||
323 | attri = ""; | ||
324 | attri = configData.GetAttribute("UserAccount"); | ||
325 | if ((attri == "") || ((attri != "false") && (attri != "true"))) | ||
326 | { | ||
327 | this.user_accounts = false; | ||
328 | configData.SetAttribute("UserAccounts", "false"); | ||
329 | } | ||
330 | else if (attri == "true") | ||
331 | { | ||
332 | this.user_accounts = Convert.ToBoolean(attri); | ||
333 | } | ||
334 | |||
335 | // Grid mode hack to use local asset server | ||
336 | attri = ""; | ||
337 | attri = configData.GetAttribute("LocalAssets"); | ||
338 | if ((attri == "") || ((attri != "false") && (attri != "true"))) | ||
339 | { | ||
340 | this.gridLocalAsset = false; | ||
341 | configData.SetAttribute("LocalAssets", "false"); | ||
342 | } | ||
343 | else if (attri == "true") | ||
344 | { | ||
345 | this.gridLocalAsset = Convert.ToBoolean(attri); | ||
346 | } | ||
347 | |||
348 | |||
349 | attri = ""; | ||
350 | attri = configData.GetAttribute("PhysicsEngine"); | ||
351 | switch (attri) | ||
352 | { | ||
353 | default: | ||
354 | m_log.Warn( "Main.cs: SetupFromConfig() - Invalid value for PhysicsEngine attribute, terminating"); | ||
355 | Environment.Exit(1); | ||
356 | break; | ||
357 | |||
358 | case "": | ||
359 | this.m_physicsEngine = "basicphysics"; | ||
360 | configData.SetAttribute("PhysicsEngine", "basicphysics"); | ||
361 | OpenSim.Region.Scenes.ScenePresence.PhysicsEngineFlying = false; | ||
362 | break; | ||
363 | |||
364 | case "basicphysics": | ||
365 | this.m_physicsEngine = "basicphysics"; | ||
366 | configData.SetAttribute("PhysicsEngine", "basicphysics"); | ||
367 | OpenSim.Region.Scenes.ScenePresence.PhysicsEngineFlying = false; | ||
368 | break; | ||
369 | |||
370 | case "RealPhysX": | ||
371 | this.m_physicsEngine = "RealPhysX"; | ||
372 | OpenSim.Region.Scenes.ScenePresence.PhysicsEngineFlying = true; | ||
373 | break; | ||
374 | |||
375 | case "OpenDynamicsEngine": | ||
376 | this.m_physicsEngine = "OpenDynamicsEngine"; | ||
377 | OpenSim.Region.Scenes.ScenePresence.PhysicsEngineFlying = true; | ||
378 | break; | ||
379 | } | ||
380 | |||
381 | configData.Commit(); | ||
382 | |||
383 | } | ||
384 | |||
385 | /// <summary> | ||
386 | /// Performs any last-minute sanity checking and shuts down the region server | ||
387 | /// </summary> | ||
388 | public virtual void Shutdown() | ||
389 | { | ||
390 | m_log.Verbose( "Main.cs:Shutdown() - Closing all threads"); | ||
391 | m_log.Verbose( "Main.cs:Shutdown() - Killing listener thread"); | ||
392 | m_log.Verbose( "Main.cs:Shutdown() - Killing clients"); | ||
393 | // IMPLEMENT THIS | ||
394 | m_log.Verbose( "Main.cs:Shutdown() - Closing console and terminating"); | ||
395 | for (int i = 0; i < m_localWorld.Count; i++) | ||
396 | { | ||
397 | ((Scene)m_localWorld[i]).Close(); | ||
398 | } | ||
399 | m_log.Close(); | ||
400 | Environment.Exit(0); | ||
401 | } | ||
402 | |||
403 | #region Console Commands | ||
404 | /// <summary> | ||
405 | /// Runs commands issued by the server console from the operator | ||
406 | /// </summary> | ||
407 | /// <param name="command">The first argument of the parameter (the command)</param> | ||
408 | /// <param name="cmdparams">Additional arguments passed to the command</param> | ||
409 | public void RunCmd(string command, string[] cmdparams) | ||
410 | { | ||
411 | switch (command) | ||
412 | { | ||
413 | case "help": | ||
414 | m_log.Error( "show users - show info about connected users"); | ||
415 | m_log.Error( "shutdown - disconnect all clients and shutdown"); | ||
416 | break; | ||
417 | |||
418 | case "show": | ||
419 | if (cmdparams.Length > 0) | ||
420 | { | ||
421 | Show(cmdparams[0]); | ||
422 | } | ||
423 | break; | ||
424 | |||
425 | case "terrain": | ||
426 | string result = ""; | ||
427 | for (int i = 0; i < m_localWorld.Count; i++) | ||
428 | { | ||
429 | if (!((Scene)m_localWorld[i]).Terrain.RunTerrainCmd(cmdparams, ref result)) | ||
430 | { | ||
431 | m_log.Error(result); | ||
432 | } | ||
433 | } | ||
434 | break; | ||
435 | |||
436 | case "shutdown": | ||
437 | Shutdown(); | ||
438 | break; | ||
439 | |||
440 | default: | ||
441 | m_log.Error( "Unknown command"); | ||
442 | break; | ||
443 | } | ||
444 | } | ||
445 | |||
446 | /// <summary> | ||
447 | /// Outputs to the console information about the region | ||
448 | /// </summary> | ||
449 | /// <param name="ShowWhat">What information to display (valid arguments are "uptime", "users")</param> | ||
450 | public void Show(string ShowWhat) | ||
451 | { | ||
452 | switch (ShowWhat) | ||
453 | { | ||
454 | case "uptime": | ||
455 | m_log.Error( "OpenSim has been running since " + startuptime.ToString()); | ||
456 | m_log.Error( "That is " + (DateTime.Now - startuptime).ToString()); | ||
457 | break; | ||
458 | case "users": | ||
459 | OpenSim.Region.Scenes.ScenePresence TempAv; | ||
460 | m_log.Error( String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16}{5,-16}", "Firstname", "Lastname", "Agent ID", "Session ID", "Circuit", "IP")); | ||
461 | /* foreach (libsecondlife.LLUUID UUID in LocalWorld.Entities.Keys) | ||
462 | { | ||
463 | if (LocalWorld.Entities[UUID].ToString() == "OpenSim.world.Avatar") | ||
464 | { | ||
465 | TempAv = (OpenSim.world.Avatar)LocalWorld.Entities[UUID]; | ||
466 | m_log.Error( String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}", TempAv.firstname, TempAv.lastname, UUID, TempAv.ControllingClient.SessionID, TempAv.ControllingClient.CircuitCode, TempAv.ControllingClient.userEP.ToString())); | ||
467 | } | ||
468 | }*/ | ||
469 | break; | ||
470 | } | ||
471 | } | ||
472 | #endregion | ||
473 | } | ||
474 | |||
475 | |||
476 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Caches/AssetCache.cs b/OpenSim/Region/Caches/AssetCache.cs new file mode 100644 index 0000000..d0cc370 --- /dev/null +++ b/OpenSim/Region/Caches/AssetCache.cs | |||
@@ -0,0 +1,670 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Threading; | ||
32 | using System.Reflection; | ||
33 | using libsecondlife; | ||
34 | using libsecondlife.Packets; | ||
35 | using OpenSim.Framework.Interfaces; | ||
36 | using OpenSim.Framework.Types; | ||
37 | using OpenSim.Framework.Utilities; | ||
38 | |||
39 | namespace OpenSim.Caches | ||
40 | { | ||
41 | public delegate void DownloadComplete(AssetCache.TextureSender sender); | ||
42 | |||
43 | /// <summary> | ||
44 | /// Manages local cache of assets and their sending to viewers. | ||
45 | /// </summary> | ||
46 | public class AssetCache : IAssetReceiver | ||
47 | { | ||
48 | public Dictionary<libsecondlife.LLUUID, AssetInfo> Assets; | ||
49 | public Dictionary<libsecondlife.LLUUID, TextureImage> Textures; | ||
50 | |||
51 | public List<AssetRequest> AssetRequests = new List<AssetRequest>(); //assets ready to be sent to viewers | ||
52 | public List<AssetRequest> TextureRequests = new List<AssetRequest>(); //textures ready to be sent | ||
53 | |||
54 | public Dictionary<LLUUID, AssetRequest> RequestedAssets = new Dictionary<LLUUID, AssetRequest>(); //Assets requested from the asset server | ||
55 | public Dictionary<LLUUID, AssetRequest> RequestedTextures = new Dictionary<LLUUID, AssetRequest>(); //Textures requested from the asset server | ||
56 | |||
57 | public Dictionary<LLUUID, TextureSender> SendingTextures = new Dictionary<LLUUID, TextureSender>(); | ||
58 | private IAssetServer _assetServer; | ||
59 | private Thread _assetCacheThread; | ||
60 | private LLUUID[] textureList = new LLUUID[5]; | ||
61 | |||
62 | /// <summary> | ||
63 | /// | ||
64 | /// </summary> | ||
65 | public AssetCache(IAssetServer assetServer) | ||
66 | { | ||
67 | Console.WriteLine("Creating Asset cache"); | ||
68 | _assetServer = assetServer; | ||
69 | _assetServer.SetReceiver(this); | ||
70 | Assets = new Dictionary<libsecondlife.LLUUID, AssetInfo>(); | ||
71 | Textures = new Dictionary<libsecondlife.LLUUID, TextureImage>(); | ||
72 | this._assetCacheThread = new Thread(new ThreadStart(RunAssetManager)); | ||
73 | this._assetCacheThread.IsBackground = true; | ||
74 | this._assetCacheThread.Start(); | ||
75 | |||
76 | } | ||
77 | |||
78 | public AssetCache(string assetServerDLLName, string assetServerURL, string assetServerKey) | ||
79 | { | ||
80 | Console.WriteLine("Creating Asset cache"); | ||
81 | _assetServer = this.LoadAssetDll(assetServerDLLName); | ||
82 | _assetServer.SetServerInfo(assetServerURL, assetServerKey); | ||
83 | _assetServer.SetReceiver(this); | ||
84 | Assets = new Dictionary<libsecondlife.LLUUID, AssetInfo>(); | ||
85 | Textures = new Dictionary<libsecondlife.LLUUID, TextureImage>(); | ||
86 | this._assetCacheThread = new Thread(new ThreadStart(RunAssetManager)); | ||
87 | this._assetCacheThread.IsBackground = true; | ||
88 | this._assetCacheThread.Start(); | ||
89 | |||
90 | } | ||
91 | |||
92 | /// <summary> | ||
93 | /// | ||
94 | /// </summary> | ||
95 | public void RunAssetManager() | ||
96 | { | ||
97 | while (true) | ||
98 | { | ||
99 | try | ||
100 | { | ||
101 | //Console.WriteLine("Asset cache loop"); | ||
102 | this.ProcessAssetQueue(); | ||
103 | this.ProcessTextureQueue(); | ||
104 | Thread.Sleep(500); | ||
105 | } | ||
106 | catch (Exception e) | ||
107 | { | ||
108 | Console.WriteLine(e.Message); | ||
109 | } | ||
110 | } | ||
111 | } | ||
112 | |||
113 | public void LoadDefaultTextureSet() | ||
114 | { | ||
115 | //hack: so we can give each user a set of textures | ||
116 | textureList[0] = new LLUUID("00000000-0000-0000-9999-000000000001"); | ||
117 | textureList[1] = new LLUUID("00000000-0000-0000-9999-000000000002"); | ||
118 | textureList[2] = new LLUUID("00000000-0000-0000-9999-000000000003"); | ||
119 | textureList[3] = new LLUUID("00000000-0000-0000-9999-000000000004"); | ||
120 | textureList[4] = new LLUUID("00000000-0000-0000-9999-000000000005"); | ||
121 | |||
122 | for (int i = 0; i < textureList.Length; i++) | ||
123 | { | ||
124 | this._assetServer.RequestAsset(textureList[i], true); | ||
125 | } | ||
126 | |||
127 | } | ||
128 | |||
129 | public AssetBase[] CreateNewInventorySet(LLUUID agentID) | ||
130 | { | ||
131 | AssetBase[] inventorySet = new AssetBase[this.textureList.Length]; | ||
132 | for (int i = 0; i < textureList.Length; i++) | ||
133 | { | ||
134 | if (this.Textures.ContainsKey(textureList[i])) | ||
135 | { | ||
136 | inventorySet[i] = this.CloneImage(agentID, this.Textures[textureList[i]]); | ||
137 | TextureImage image = new TextureImage(inventorySet[i]); | ||
138 | this.Textures.Add(image.FullID, image); | ||
139 | this._assetServer.UploadNewAsset(image); //save the asset to the asset server | ||
140 | } | ||
141 | } | ||
142 | return inventorySet; | ||
143 | } | ||
144 | |||
145 | public AssetBase GetAsset(LLUUID assetID) | ||
146 | { | ||
147 | AssetBase asset = null; | ||
148 | if (this.Textures.ContainsKey(assetID)) | ||
149 | { | ||
150 | asset = this.Textures[assetID]; | ||
151 | } | ||
152 | else if (this.Assets.ContainsKey(assetID)) | ||
153 | { | ||
154 | asset = this.Assets[assetID]; | ||
155 | } | ||
156 | return asset; | ||
157 | } | ||
158 | |||
159 | public void AddAsset(AssetBase asset) | ||
160 | { | ||
161 | // Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated()); | ||
162 | if (asset.Type == 0) | ||
163 | { | ||
164 | //Console.WriteLine("which is a texture"); | ||
165 | if (!this.Textures.ContainsKey(asset.FullID)) | ||
166 | { //texture | ||
167 | TextureImage textur = new TextureImage(asset); | ||
168 | this.Textures.Add(textur.FullID, textur); | ||
169 | this._assetServer.UploadNewAsset(asset); | ||
170 | } | ||
171 | } | ||
172 | else | ||
173 | { | ||
174 | if (!this.Assets.ContainsKey(asset.FullID)) | ||
175 | { | ||
176 | AssetInfo assetInf = new AssetInfo(asset); | ||
177 | this.Assets.Add(assetInf.FullID, assetInf); | ||
178 | this._assetServer.UploadNewAsset(asset); | ||
179 | } | ||
180 | } | ||
181 | } | ||
182 | |||
183 | /// <summary> | ||
184 | /// | ||
185 | /// </summary> | ||
186 | private void ProcessTextureQueue() | ||
187 | { | ||
188 | if (this.TextureRequests.Count == 0) | ||
189 | { | ||
190 | //no requests waiting | ||
191 | return; | ||
192 | } | ||
193 | int num; | ||
194 | num = this.TextureRequests.Count; | ||
195 | |||
196 | AssetRequest req; | ||
197 | for (int i = 0; i < num; i++) | ||
198 | { | ||
199 | req = (AssetRequest)this.TextureRequests[i]; | ||
200 | if (!this.SendingTextures.ContainsKey(req.ImageInfo.FullID)) | ||
201 | { | ||
202 | TextureSender sender = new TextureSender(req); | ||
203 | sender.OnComplete += this.TextureSent; | ||
204 | lock (this.SendingTextures) | ||
205 | { | ||
206 | this.SendingTextures.Add(req.ImageInfo.FullID, sender); | ||
207 | } | ||
208 | } | ||
209 | |||
210 | } | ||
211 | |||
212 | this.TextureRequests.Clear(); | ||
213 | } | ||
214 | |||
215 | /// <summary> | ||
216 | /// Event handler, called by a TextureSender object to say that texture has been sent | ||
217 | /// </summary> | ||
218 | /// <param name="sender"></param> | ||
219 | public void TextureSent(AssetCache.TextureSender sender) | ||
220 | { | ||
221 | if (this.SendingTextures.ContainsKey(sender.request.ImageInfo.FullID)) | ||
222 | { | ||
223 | lock (this.SendingTextures) | ||
224 | { | ||
225 | this.SendingTextures.Remove(sender.request.ImageInfo.FullID); | ||
226 | } | ||
227 | } | ||
228 | } | ||
229 | |||
230 | public void AssetReceived(AssetBase asset, bool IsTexture) | ||
231 | { | ||
232 | if (asset.FullID != LLUUID.Zero) // if it is set to zero then the asset wasn't found by the server | ||
233 | { | ||
234 | //check if it is a texture or not | ||
235 | //then add to the correct cache list | ||
236 | //then check for waiting requests for this asset/texture (in the Requested lists) | ||
237 | //and move those requests into the Requests list. | ||
238 | if (IsTexture) | ||
239 | { | ||
240 | TextureImage image = new TextureImage(asset); | ||
241 | this.Textures.Add(image.FullID, image); | ||
242 | if (this.RequestedTextures.ContainsKey(image.FullID)) | ||
243 | { | ||
244 | AssetRequest req = this.RequestedTextures[image.FullID]; | ||
245 | req.ImageInfo = image; | ||
246 | if (image.Data.LongLength > 600) | ||
247 | { | ||
248 | //over 600 bytes so split up file | ||
249 | req.NumPackets = 1 + (int)(image.Data.Length - 600 + 999) / 1000; | ||
250 | } | ||
251 | else | ||
252 | { | ||
253 | req.NumPackets = 1; | ||
254 | } | ||
255 | this.RequestedTextures.Remove(image.FullID); | ||
256 | this.TextureRequests.Add(req); | ||
257 | } | ||
258 | } | ||
259 | else | ||
260 | { | ||
261 | AssetInfo assetInf = new AssetInfo(asset); | ||
262 | this.Assets.Add(assetInf.FullID, assetInf); | ||
263 | if (this.RequestedAssets.ContainsKey(assetInf.FullID)) | ||
264 | { | ||
265 | AssetRequest req = this.RequestedAssets[assetInf.FullID]; | ||
266 | req.AssetInf = assetInf; | ||
267 | if (assetInf.Data.LongLength > 600) | ||
268 | { | ||
269 | //over 600 bytes so split up file | ||
270 | req.NumPackets = 1 + (int)(assetInf.Data.Length - 600 + 999) / 1000; | ||
271 | } | ||
272 | else | ||
273 | { | ||
274 | req.NumPackets = 1; | ||
275 | } | ||
276 | this.RequestedAssets.Remove(assetInf.FullID); | ||
277 | this.AssetRequests.Add(req); | ||
278 | } | ||
279 | } | ||
280 | } | ||
281 | } | ||
282 | |||
283 | public void AssetNotFound(AssetBase asset) | ||
284 | { | ||
285 | //the asset server had no knowledge of requested asset | ||
286 | |||
287 | } | ||
288 | |||
289 | #region Assets | ||
290 | /// <summary> | ||
291 | /// | ||
292 | /// </summary> | ||
293 | /// <param name="userInfo"></param> | ||
294 | /// <param name="transferRequest"></param> | ||
295 | public void AddAssetRequest(IClientAPI userInfo, TransferRequestPacket transferRequest) | ||
296 | { | ||
297 | LLUUID requestID = new LLUUID(transferRequest.TransferInfo.Params, 0); | ||
298 | //check to see if asset is in local cache, if not we need to request it from asset server. | ||
299 | |||
300 | if (!this.Assets.ContainsKey(requestID)) | ||
301 | { | ||
302 | //not found asset | ||
303 | // so request from asset server | ||
304 | if (!this.RequestedAssets.ContainsKey(requestID)) | ||
305 | { | ||
306 | AssetRequest request = new AssetRequest(); | ||
307 | request.RequestUser = userInfo; | ||
308 | request.RequestAssetID = requestID; | ||
309 | request.TransferRequestID = transferRequest.TransferInfo.TransferID; | ||
310 | this.RequestedAssets.Add(requestID, request); | ||
311 | this._assetServer.RequestAsset(requestID, false); | ||
312 | } | ||
313 | return; | ||
314 | } | ||
315 | //it is in our cache | ||
316 | AssetInfo asset = this.Assets[requestID]; | ||
317 | |||
318 | //work out how many packets it should be sent in | ||
319 | // and add to the AssetRequests list | ||
320 | AssetRequest req = new AssetRequest(); | ||
321 | req.RequestUser = userInfo; | ||
322 | req.RequestAssetID = requestID; | ||
323 | req.TransferRequestID = transferRequest.TransferInfo.TransferID; | ||
324 | req.AssetInf = asset; | ||
325 | |||
326 | if (asset.Data.LongLength > 600) | ||
327 | { | ||
328 | //over 600 bytes so split up file | ||
329 | req.NumPackets = 1 + (int)(asset.Data.Length - 600 + 999) / 1000; | ||
330 | } | ||
331 | else | ||
332 | { | ||
333 | req.NumPackets = 1; | ||
334 | } | ||
335 | |||
336 | this.AssetRequests.Add(req); | ||
337 | } | ||
338 | |||
339 | /// <summary> | ||
340 | /// | ||
341 | /// </summary> | ||
342 | private void ProcessAssetQueue() | ||
343 | { | ||
344 | if (this.AssetRequests.Count == 0) | ||
345 | { | ||
346 | //no requests waiting | ||
347 | return; | ||
348 | } | ||
349 | int num; | ||
350 | |||
351 | if (this.AssetRequests.Count < 5) | ||
352 | { | ||
353 | //lower than 5 so do all of them | ||
354 | num = this.AssetRequests.Count; | ||
355 | } | ||
356 | else | ||
357 | { | ||
358 | num = 5; | ||
359 | } | ||
360 | AssetRequest req; | ||
361 | for (int i = 0; i < num; i++) | ||
362 | { | ||
363 | req = (AssetRequest)this.AssetRequests[i]; | ||
364 | |||
365 | TransferInfoPacket Transfer = new TransferInfoPacket(); | ||
366 | Transfer.TransferInfo.ChannelType = 2; | ||
367 | Transfer.TransferInfo.Status = 0; | ||
368 | Transfer.TransferInfo.TargetType = 0; | ||
369 | Transfer.TransferInfo.Params = req.RequestAssetID.GetBytes(); | ||
370 | Transfer.TransferInfo.Size = (int)req.AssetInf.Data.Length; | ||
371 | Transfer.TransferInfo.TransferID = req.TransferRequestID; | ||
372 | req.RequestUser.OutPacket(Transfer); | ||
373 | |||
374 | if (req.NumPackets == 1) | ||
375 | { | ||
376 | TransferPacketPacket TransferPacket = new TransferPacketPacket(); | ||
377 | TransferPacket.TransferData.Packet = 0; | ||
378 | TransferPacket.TransferData.ChannelType = 2; | ||
379 | TransferPacket.TransferData.TransferID = req.TransferRequestID; | ||
380 | TransferPacket.TransferData.Data = req.AssetInf.Data; | ||
381 | TransferPacket.TransferData.Status = 1; | ||
382 | req.RequestUser.OutPacket(TransferPacket); | ||
383 | } | ||
384 | else | ||
385 | { | ||
386 | //more than one packet so split file up , for now it can't be bigger than 2000 bytes | ||
387 | TransferPacketPacket TransferPacket = new TransferPacketPacket(); | ||
388 | TransferPacket.TransferData.Packet = 0; | ||
389 | TransferPacket.TransferData.ChannelType = 2; | ||
390 | TransferPacket.TransferData.TransferID = req.TransferRequestID; | ||
391 | byte[] chunk = new byte[1000]; | ||
392 | Array.Copy(req.AssetInf.Data, chunk, 1000); | ||
393 | TransferPacket.TransferData.Data = chunk; | ||
394 | TransferPacket.TransferData.Status = 0; | ||
395 | req.RequestUser.OutPacket(TransferPacket); | ||
396 | |||
397 | TransferPacket = new TransferPacketPacket(); | ||
398 | TransferPacket.TransferData.Packet = 1; | ||
399 | TransferPacket.TransferData.ChannelType = 2; | ||
400 | TransferPacket.TransferData.TransferID = req.TransferRequestID; | ||
401 | byte[] chunk1 = new byte[(req.AssetInf.Data.Length - 1000)]; | ||
402 | Array.Copy(req.AssetInf.Data, 1000, chunk1, 0, chunk1.Length); | ||
403 | TransferPacket.TransferData.Data = chunk1; | ||
404 | TransferPacket.TransferData.Status = 1; | ||
405 | req.RequestUser.OutPacket(TransferPacket); | ||
406 | } | ||
407 | |||
408 | } | ||
409 | |||
410 | //remove requests that have been completed | ||
411 | for (int i = 0; i < num; i++) | ||
412 | { | ||
413 | this.AssetRequests.RemoveAt(0); | ||
414 | } | ||
415 | |||
416 | } | ||
417 | |||
418 | public AssetInfo CloneAsset(LLUUID newOwner, AssetInfo sourceAsset) | ||
419 | { | ||
420 | AssetInfo newAsset = new AssetInfo(); | ||
421 | newAsset.Data = new byte[sourceAsset.Data.Length]; | ||
422 | Array.Copy(sourceAsset.Data, newAsset.Data, sourceAsset.Data.Length); | ||
423 | newAsset.FullID = LLUUID.Random(); | ||
424 | newAsset.Type = sourceAsset.Type; | ||
425 | newAsset.InvType = sourceAsset.InvType; | ||
426 | return (newAsset); | ||
427 | } | ||
428 | #endregion | ||
429 | |||
430 | #region Textures | ||
431 | /// <summary> | ||
432 | /// | ||
433 | /// </summary> | ||
434 | /// <param name="userInfo"></param> | ||
435 | /// <param name="imageID"></param> | ||
436 | public void AddTextureRequest(IClientAPI userInfo, LLUUID imageID) | ||
437 | { | ||
438 | //Console.WriteLine("texture request for " + imageID.ToStringHyphenated()); | ||
439 | //check to see if texture is in local cache, if not request from asset server | ||
440 | if (!this.Textures.ContainsKey(imageID)) | ||
441 | { | ||
442 | if (!this.RequestedTextures.ContainsKey(imageID)) | ||
443 | { | ||
444 | //not is cache so request from asset server | ||
445 | AssetRequest request = new AssetRequest(); | ||
446 | request.RequestUser = userInfo; | ||
447 | request.RequestAssetID = imageID; | ||
448 | request.IsTextureRequest = true; | ||
449 | this.RequestedTextures.Add(imageID, request); | ||
450 | this._assetServer.RequestAsset(imageID, true); | ||
451 | } | ||
452 | return; | ||
453 | } | ||
454 | |||
455 | //Console.WriteLine("texture already in cache"); | ||
456 | TextureImage imag = this.Textures[imageID]; | ||
457 | AssetRequest req = new AssetRequest(); | ||
458 | req.RequestUser = userInfo; | ||
459 | req.RequestAssetID = imageID; | ||
460 | req.IsTextureRequest = true; | ||
461 | req.ImageInfo = imag; | ||
462 | |||
463 | if (imag.Data.LongLength > 600) | ||
464 | { | ||
465 | //over 600 bytes so split up file | ||
466 | req.NumPackets = 1 + (int)(imag.Data.Length - 600 + 999) / 1000; | ||
467 | } | ||
468 | else | ||
469 | { | ||
470 | req.NumPackets = 1; | ||
471 | } | ||
472 | this.TextureRequests.Add(req); | ||
473 | } | ||
474 | |||
475 | public TextureImage CloneImage(LLUUID newOwner, TextureImage source) | ||
476 | { | ||
477 | TextureImage newImage = new TextureImage(); | ||
478 | newImage.Data = new byte[source.Data.Length]; | ||
479 | Array.Copy(source.Data, newImage.Data, source.Data.Length); | ||
480 | //newImage.filename = source.filename; | ||
481 | newImage.FullID = LLUUID.Random(); | ||
482 | newImage.Name = source.Name; | ||
483 | return (newImage); | ||
484 | } | ||
485 | #endregion | ||
486 | |||
487 | private IAssetServer LoadAssetDll(string dllName) | ||
488 | { | ||
489 | Assembly pluginAssembly = Assembly.LoadFrom(dllName); | ||
490 | IAssetServer server = null; | ||
491 | |||
492 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
493 | { | ||
494 | if (pluginType.IsPublic) | ||
495 | { | ||
496 | if (!pluginType.IsAbstract) | ||
497 | { | ||
498 | Type typeInterface = pluginType.GetInterface("IAssetPlugin", true); | ||
499 | |||
500 | if (typeInterface != null) | ||
501 | { | ||
502 | IAssetPlugin plug = (IAssetPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
503 | server = plug.GetAssetServer(); | ||
504 | break; | ||
505 | } | ||
506 | |||
507 | typeInterface = null; | ||
508 | } | ||
509 | } | ||
510 | } | ||
511 | pluginAssembly = null; | ||
512 | return server; | ||
513 | } | ||
514 | |||
515 | public class AssetRequest | ||
516 | { | ||
517 | public IClientAPI RequestUser; | ||
518 | public LLUUID RequestAssetID; | ||
519 | public AssetInfo AssetInf; | ||
520 | public TextureImage ImageInfo; | ||
521 | public LLUUID TransferRequestID; | ||
522 | public long DataPointer = 0; | ||
523 | public int NumPackets = 0; | ||
524 | public int PacketCounter = 0; | ||
525 | public bool IsTextureRequest; | ||
526 | //public bool AssetInCache; | ||
527 | //public int TimeRequested; | ||
528 | |||
529 | public AssetRequest() | ||
530 | { | ||
531 | |||
532 | } | ||
533 | } | ||
534 | |||
535 | public class AssetInfo : AssetBase | ||
536 | { | ||
537 | public AssetInfo() | ||
538 | { | ||
539 | |||
540 | } | ||
541 | |||
542 | public AssetInfo(AssetBase aBase) | ||
543 | { | ||
544 | Data = aBase.Data; | ||
545 | FullID = aBase.FullID; | ||
546 | Type = aBase.Type; | ||
547 | InvType = aBase.InvType; | ||
548 | Name = aBase.Name; | ||
549 | Description = aBase.Description; | ||
550 | } | ||
551 | } | ||
552 | |||
553 | public class TextureImage : AssetBase | ||
554 | { | ||
555 | public TextureImage() | ||
556 | { | ||
557 | |||
558 | } | ||
559 | |||
560 | public TextureImage(AssetBase aBase) | ||
561 | { | ||
562 | Data = aBase.Data; | ||
563 | FullID = aBase.FullID; | ||
564 | Type = aBase.Type; | ||
565 | InvType = aBase.InvType; | ||
566 | Name = aBase.Name; | ||
567 | Description = aBase.Description; | ||
568 | } | ||
569 | } | ||
570 | |||
571 | public class TextureSender | ||
572 | { | ||
573 | public AssetRequest request; | ||
574 | public event DownloadComplete OnComplete; | ||
575 | Thread m_thread; | ||
576 | public TextureSender(AssetRequest req) | ||
577 | { | ||
578 | request = req; | ||
579 | //Console.WriteLine("creating worker thread for texture " + req.ImageInfo.FullID.ToStringHyphenated()); | ||
580 | //Console.WriteLine("texture data length is " + req.ImageInfo.Data.Length); | ||
581 | // Console.WriteLine("in " + req.NumPackets + " packets"); | ||
582 | //ThreadPool.QueueUserWorkItem(new WaitCallback(SendTexture), new object()); | ||
583 | |||
584 | //need some sort of custom threadpool here, as using the .net one, overloads it and stops the handling of incoming packets etc | ||
585 | //but don't really want to create a thread for every texture download | ||
586 | m_thread = new Thread(new ThreadStart(SendTexture)); | ||
587 | m_thread.IsBackground = true; | ||
588 | m_thread.Start(); | ||
589 | } | ||
590 | |||
591 | public void SendTexture() | ||
592 | { | ||
593 | //Console.WriteLine("starting to send sending texture " + request.ImageInfo.FullID.ToStringHyphenated()); | ||
594 | while (request.PacketCounter != request.NumPackets) | ||
595 | { | ||
596 | SendPacket(); | ||
597 | Thread.Sleep(500); | ||
598 | } | ||
599 | |||
600 | //Console.WriteLine("finished sending texture " + request.ImageInfo.FullID.ToStringHyphenated()); | ||
601 | if (OnComplete != null) | ||
602 | { | ||
603 | OnComplete(this); | ||
604 | } | ||
605 | } | ||
606 | |||
607 | public void SendPacket() | ||
608 | { | ||
609 | AssetRequest req = request; | ||
610 | // Console.WriteLine("sending " + req.ImageInfo.FullID); | ||
611 | |||
612 | // if (req.ImageInfo.FullID == new LLUUID("00000000-0000-0000-5005-000000000005")) | ||
613 | if (req.PacketCounter == 0) | ||
614 | { | ||
615 | //first time for this request so send imagedata packet | ||
616 | if (req.NumPackets == 1) | ||
617 | { | ||
618 | //only one packet so send whole file | ||
619 | ImageDataPacket im = new ImageDataPacket(); | ||
620 | im.ImageID.Packets = 1; | ||
621 | im.ImageID.ID = req.ImageInfo.FullID; | ||
622 | im.ImageID.Size = (uint)req.ImageInfo.Data.Length; | ||
623 | im.ImageData.Data = req.ImageInfo.Data; | ||
624 | im.ImageID.Codec = 2; | ||
625 | req.RequestUser.OutPacket(im); | ||
626 | req.PacketCounter++; | ||
627 | //req.ImageInfo.l= time; | ||
628 | //System.Console.WriteLine("sent texture: " + req.ImageInfo.FullID); | ||
629 | // Console.WriteLine("sending packet 1 for " + req.ImageInfo.FullID.ToStringHyphenated()); | ||
630 | } | ||
631 | else | ||
632 | { | ||
633 | //more than one packet so split file up | ||
634 | ImageDataPacket im = new ImageDataPacket(); | ||
635 | im.ImageID.Packets = (ushort)req.NumPackets; | ||
636 | im.ImageID.ID = req.ImageInfo.FullID; | ||
637 | im.ImageID.Size = (uint)req.ImageInfo.Data.Length; | ||
638 | im.ImageData.Data = new byte[600]; | ||
639 | Array.Copy(req.ImageInfo.Data, 0, im.ImageData.Data, 0, 600); | ||
640 | im.ImageID.Codec = 2; | ||
641 | req.RequestUser.OutPacket(im); | ||
642 | req.PacketCounter++; | ||
643 | //req.ImageInfo.last_used = time; | ||
644 | //System.Console.WriteLine("sent first packet of texture: | ||
645 | // Console.WriteLine("sending packet 1 for " + req.ImageInfo.FullID.ToStringHyphenated()); | ||
646 | } | ||
647 | } | ||
648 | else | ||
649 | { | ||
650 | //Console.WriteLine("sending packet" + req.PacketCounter + "for " + req.ImageInfo.FullID.ToStringHyphenated()); | ||
651 | //send imagepacket | ||
652 | //more than one packet so split file up | ||
653 | ImagePacketPacket im = new ImagePacketPacket(); | ||
654 | im.ImageID.Packet = (ushort)req.PacketCounter; | ||
655 | im.ImageID.ID = req.ImageInfo.FullID; | ||
656 | int size = req.ImageInfo.Data.Length - 600 - 1000 * (req.PacketCounter - 1); | ||
657 | if (size > 1000) size = 1000; | ||
658 | im.ImageData.Data = new byte[size]; | ||
659 | Array.Copy(req.ImageInfo.Data, 600 + 1000 * (req.PacketCounter - 1), im.ImageData.Data, 0, size); | ||
660 | req.RequestUser.OutPacket(im); | ||
661 | req.PacketCounter++; | ||
662 | //req.ImageInfo.last_used = time; | ||
663 | //System.Console.WriteLine("sent a packet of texture: "+req.image_info.FullID); | ||
664 | } | ||
665 | |||
666 | } | ||
667 | } | ||
668 | } | ||
669 | } | ||
670 | |||
diff --git a/OpenSim/Region/Caches/OpenSim.Region.Caches.csproj b/OpenSim/Region/Caches/OpenSim.Region.Caches.csproj new file mode 100644 index 0000000..4a73d08 --- /dev/null +++ b/OpenSim/Region/Caches/OpenSim.Region.Caches.csproj | |||
@@ -0,0 +1,97 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{61FCCDB3-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Caches</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Caches</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Xml" > | ||
70 | <HintPath>System.Xml.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | </ItemGroup> | ||
74 | <ItemGroup> | ||
75 | <ProjectReference Include="..\..\Framework\General\OpenSim.Framework.csproj"> | ||
76 | <Name>OpenSim.Framework</Name> | ||
77 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
78 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
79 | <Private>False</Private> | ||
80 | </ProjectReference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <Compile Include="AssetCache.cs"> | ||
84 | <SubType>Code</SubType> | ||
85 | </Compile> | ||
86 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
87 | <SubType>Code</SubType> | ||
88 | </Compile> | ||
89 | </ItemGroup> | ||
90 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
91 | <PropertyGroup> | ||
92 | <PreBuildEvent> | ||
93 | </PreBuildEvent> | ||
94 | <PostBuildEvent> | ||
95 | </PostBuildEvent> | ||
96 | </PropertyGroup> | ||
97 | </Project> | ||
diff --git a/OpenSim/Region/Caches/OpenSim.Region.Caches.csproj.user b/OpenSim/Region/Caches/OpenSim.Region.Caches.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Caches/OpenSim.Region.Caches.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Caches/Properties/AssemblyInfo.cs b/OpenSim/Region/Caches/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..00f5dfe --- /dev/null +++ b/OpenSim/Region/Caches/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenSim.Caches")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenSim.Caches")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("2b15ddbf-0341-49a6-85c0-cece268a4518")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Region/Caps/Caps.cs b/OpenSim/Region/Caps/Caps.cs new file mode 100644 index 0000000..13a351d --- /dev/null +++ b/OpenSim/Region/Caps/Caps.cs | |||
@@ -0,0 +1,258 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using System.Text; | ||
5 | using System.IO; | ||
6 | using System.Xml; | ||
7 | using OpenSim.Servers; | ||
8 | using OpenSim.Framework; | ||
9 | using OpenSim.Framework.Utilities; | ||
10 | using OpenSim.Framework.Types; | ||
11 | using OpenSim.Caches; | ||
12 | using libsecondlife; | ||
13 | |||
14 | namespace OpenSim.Region | ||
15 | { | ||
16 | public delegate void UpLoadedTexture(LLUUID assetID, LLUUID inventoryItem, byte[] data); | ||
17 | |||
18 | public class Caps | ||
19 | { | ||
20 | private string httpListenerAddress; | ||
21 | private uint httpListenPort; | ||
22 | private string capsObjectPath = "00001-"; | ||
23 | private string requestPath = "0000/"; | ||
24 | private string mapLayerPath = "0001/"; | ||
25 | private string newInventory = "0002/"; | ||
26 | private string requestTexture = "0003/"; | ||
27 | private string eventQueue = "0100/"; | ||
28 | private BaseHttpServer httpListener; | ||
29 | private LLUUID agentID; | ||
30 | private AssetCache assetCache; | ||
31 | private int eventQueueCount = 1; | ||
32 | private Queue<string> CapsEventQueue = new Queue<string>(); | ||
33 | |||
34 | public Caps(AssetCache assetCach, BaseHttpServer httpServer, string httpListen, uint httpPort, string capsPath, LLUUID agent) | ||
35 | { | ||
36 | assetCache = assetCach; | ||
37 | capsObjectPath = capsPath; | ||
38 | httpListener = httpServer; | ||
39 | httpListenerAddress = httpListen; | ||
40 | httpListenPort = httpPort; | ||
41 | agentID = agent; | ||
42 | } | ||
43 | |||
44 | /// <summary> | ||
45 | /// | ||
46 | /// </summary> | ||
47 | public void RegisterHandlers() | ||
48 | { | ||
49 | Console.WriteLine("registering CAPS handlers"); | ||
50 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + requestPath, CapsRequest); | ||
51 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + mapLayerPath, MapLayer); | ||
52 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + newInventory, NewAgentInventory); | ||
53 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + eventQueue, ProcessEventQueue); | ||
54 | } | ||
55 | |||
56 | /// <summary> | ||
57 | /// | ||
58 | /// </summary> | ||
59 | /// <param name="request"></param> | ||
60 | /// <param name="path"></param> | ||
61 | /// <param name="param"></param> | ||
62 | /// <returns></returns> | ||
63 | public string CapsRequest(string request, string path, string param) | ||
64 | { | ||
65 | // Console.WriteLine("Caps Request " + request); | ||
66 | string result = ""; | ||
67 | result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities()); | ||
68 | return result; | ||
69 | } | ||
70 | |||
71 | /// <summary> | ||
72 | /// | ||
73 | /// </summary> | ||
74 | /// <returns></returns> | ||
75 | protected LLSDCapsDetails GetCapabilities() | ||
76 | { | ||
77 | /* string capURLS = ""; | ||
78 | capURLS += "<key>MapLayer</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + mapLayerPath + "</string>"; | ||
79 | capURLS += "<key>NewFileAgentInventory</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + newInventory + "</string>"; | ||
80 | //capURLS += "<key>RequestTextureDownload</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + requestTexture + "</string>"; | ||
81 | //capURLS += "<key>EventQueueGet</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + eventQueue + "</string>"; | ||
82 | return capURLS;*/ | ||
83 | |||
84 | LLSDCapsDetails caps = new LLSDCapsDetails(); | ||
85 | caps.MapLayer = "http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + mapLayerPath; | ||
86 | caps.NewFileAgentInventory = "http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + newInventory; | ||
87 | return caps; | ||
88 | } | ||
89 | |||
90 | /// <summary> | ||
91 | /// | ||
92 | /// </summary> | ||
93 | /// <param name="request"></param> | ||
94 | /// <param name="path"></param> | ||
95 | /// <param name="param"></param> | ||
96 | /// <returns></returns> | ||
97 | public string MapLayer(string request, string path, string param) | ||
98 | { | ||
99 | Encoding _enc = System.Text.Encoding.UTF8; | ||
100 | Hashtable hash =(Hashtable) LLSD.LLSDDeserialize(_enc.GetBytes(request)); | ||
101 | LLSDMapRequest mapReq = new LLSDMapRequest(); | ||
102 | LLSDHelpers.DeserialiseLLSDMap(hash, mapReq ); | ||
103 | |||
104 | LLSDMapLayerResponse mapResponse= new LLSDMapLayerResponse(); | ||
105 | mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); | ||
106 | string res = LLSDHelpers.SerialiseLLSDReply(mapResponse); | ||
107 | |||
108 | //Console.WriteLine(" Maplayer response is " + res); | ||
109 | |||
110 | return res; | ||
111 | } | ||
112 | |||
113 | /// <summary> | ||
114 | /// | ||
115 | /// </summary> | ||
116 | /// <returns></returns> | ||
117 | protected LLSDMapLayer BuildLLSDMapLayerResponse() | ||
118 | { | ||
119 | LLSDMapLayer mapLayer = new LLSDMapLayer(); | ||
120 | mapLayer.Right = 5000; | ||
121 | mapLayer.Top = 5000; | ||
122 | mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); | ||
123 | |||
124 | return mapLayer; | ||
125 | } | ||
126 | |||
127 | public string ProcessEventQueue(string request, string path, string param) | ||
128 | { | ||
129 | // Console.WriteLine("event queue request " + request); | ||
130 | string res = ""; | ||
131 | int timer = 0; | ||
132 | |||
133 | /*while ((timer < 200) || (this.CapsEventQueue.Count < 1)) | ||
134 | { | ||
135 | timer++; | ||
136 | }*/ | ||
137 | if (this.CapsEventQueue.Count > 0) | ||
138 | { | ||
139 | lock (this.CapsEventQueue) | ||
140 | { | ||
141 | string item = CapsEventQueue.Dequeue(); | ||
142 | res = item; | ||
143 | } | ||
144 | } | ||
145 | else | ||
146 | { | ||
147 | res = this.CreateEmptyEventResponse(); | ||
148 | } | ||
149 | return res; | ||
150 | } | ||
151 | |||
152 | public string CreateEstablishAgentComms(string caps, string ipAddressPort) | ||
153 | { | ||
154 | string res = "<llsd><map><key>id</key><integer>" + eventQueueCount + "</integer>"; | ||
155 | res += "<key>events</key><array><map>"; | ||
156 | res += "<key>message</key><string>EstablishAgentCommunication</string>"; | ||
157 | res += "<key>body</key><map>"; | ||
158 | res += "<key>sim-ip-and-port</key><string>" + ipAddressPort + "</string>"; | ||
159 | res += "<key>seed-capability</key><string>" + caps + "</string>"; | ||
160 | res += "<key>agent-id</key><uuid>" + this.agentID.ToStringHyphenated() + "</uuid>"; | ||
161 | res += "</map>"; | ||
162 | res += "</map></array>"; | ||
163 | res += "</map></llsd>"; | ||
164 | eventQueueCount++; | ||
165 | this.CapsEventQueue.Enqueue(res); | ||
166 | return res; | ||
167 | } | ||
168 | |||
169 | public string CreateEmptyEventResponse() | ||
170 | { | ||
171 | string res = "<llsd><map><key>id</key><integer>" + eventQueueCount + "</integer>"; | ||
172 | res += "<key>events</key><array><map>"; | ||
173 | res += "</map></array>"; | ||
174 | res += "</map></llsd>"; | ||
175 | eventQueueCount++; | ||
176 | return res; | ||
177 | } | ||
178 | |||
179 | public string NewAgentInventory(string request, string path, string param) | ||
180 | { | ||
181 | //Console.WriteLine("received upload request:"+ request); | ||
182 | string res = ""; | ||
183 | LLUUID newAsset = LLUUID.Random(); | ||
184 | LLUUID newInvItem = LLUUID.Random(); | ||
185 | string uploaderPath = capsObjectPath + Util.RandomClass.Next(5000, 8000).ToString("0000"); | ||
186 | AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener); | ||
187 | httpListener.AddRestHandler("POST", "/CAPS/" + uploaderPath, uploader.uploaderCaps); | ||
188 | string uploaderURL = "http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + uploaderPath; | ||
189 | //Console.WriteLine("uploader url is " + uploaderURL); | ||
190 | res += "<llsd><map>"; | ||
191 | res += "<key>uploader</key><string>" + uploaderURL + "</string>"; | ||
192 | //res += "<key>success</key><boolean>true</boolean>"; | ||
193 | res += "<key>state</key><string>upload</string>"; | ||
194 | res += "</map></llsd>"; | ||
195 | uploader.OnUpLoad += this.UploadHandler; | ||
196 | return res; | ||
197 | } | ||
198 | |||
199 | public void UploadHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data) | ||
200 | { | ||
201 | // Console.WriteLine("upload handler called"); | ||
202 | AssetBase asset; | ||
203 | asset = new AssetBase(); | ||
204 | asset.FullID = assetID; | ||
205 | asset.Type = 0; | ||
206 | asset.InvType = 0; | ||
207 | asset.Name = "UploadedTexture" + Util.RandomClass.Next(1, 1000).ToString("000"); | ||
208 | asset.Data = data; | ||
209 | this.assetCache.AddAsset(asset); | ||
210 | } | ||
211 | |||
212 | public class AssetUploader | ||
213 | { | ||
214 | public event UpLoadedTexture OnUpLoad; | ||
215 | |||
216 | private string uploaderPath = ""; | ||
217 | private LLUUID newAssetID; | ||
218 | private LLUUID inventoryItemID; | ||
219 | private BaseHttpServer httpListener; | ||
220 | public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer) | ||
221 | { | ||
222 | newAssetID = assetID; | ||
223 | inventoryItemID = inventoryItem; | ||
224 | uploaderPath = path; | ||
225 | httpListener = httpServer; | ||
226 | |||
227 | } | ||
228 | |||
229 | public string uploaderCaps(string request, string path, string param) | ||
230 | { | ||
231 | Encoding _enc = System.Text.Encoding.UTF8; | ||
232 | byte[] data = _enc.GetBytes(request); | ||
233 | //Console.WriteLine("recieved upload " + Util.FieldToString(data)); | ||
234 | LLUUID inv = this.inventoryItemID; | ||
235 | string res = ""; | ||
236 | res += "<llsd><map>"; | ||
237 | res += "<key>new_asset</key><string>" + newAssetID.ToStringHyphenated() + "</string>"; | ||
238 | res += "<key>new_inventory_item</key><uuid>" + inv.ToStringHyphenated() + "</uuid>"; | ||
239 | res += "<key>state</key><string>complete</string>"; | ||
240 | res += "</map></llsd>"; | ||
241 | |||
242 | // Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated()); | ||
243 | httpListener.RemoveRestHandler("POST", "/CAPS/" + uploaderPath); | ||
244 | if (OnUpLoad != null) | ||
245 | { | ||
246 | OnUpLoad(newAssetID, inv, data); | ||
247 | } | ||
248 | |||
249 | /*FileStream fs = File.Create("upload.jp2"); | ||
250 | BinaryWriter bw = new BinaryWriter(fs); | ||
251 | bw.Write(data); | ||
252 | bw.Close(); | ||
253 | fs.Close();*/ | ||
254 | return res; | ||
255 | } | ||
256 | } | ||
257 | } | ||
258 | } | ||
diff --git a/OpenSim/Region/Caps/LLSDHelpers.cs b/OpenSim/Region/Caps/LLSDHelpers.cs new file mode 100644 index 0000000..051520c --- /dev/null +++ b/OpenSim/Region/Caps/LLSDHelpers.cs | |||
@@ -0,0 +1,246 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using System.Text; | ||
5 | using System.IO; | ||
6 | using System.Xml; | ||
7 | using libsecondlife; | ||
8 | |||
9 | namespace OpenSim.Framework | ||
10 | { | ||
11 | public class LLSDHelpers | ||
12 | { | ||
13 | public static string SerialiseLLSDReply(object obj) | ||
14 | { | ||
15 | StringWriter sw = new StringWriter(); | ||
16 | XmlTextWriter writer = new XmlTextWriter(sw); | ||
17 | writer.Formatting = Formatting.None; | ||
18 | writer.WriteStartElement(String.Empty, "llsd", String.Empty); | ||
19 | LLSDHelpers.SerializeLLSDType(writer, obj); | ||
20 | writer.WriteEndElement(); | ||
21 | writer.Close(); | ||
22 | return sw.ToString(); | ||
23 | } | ||
24 | |||
25 | public static void SerializeLLSDType(XmlTextWriter writer, object obj) | ||
26 | { | ||
27 | Type myType = obj.GetType(); | ||
28 | LLSDType[] llsdattributes = (LLSDType[])myType.GetCustomAttributes(typeof(LLSDType), false); | ||
29 | if (llsdattributes.Length > 0) | ||
30 | { | ||
31 | switch (llsdattributes[0].ObjectType) | ||
32 | { | ||
33 | case "MAP": | ||
34 | writer.WriteStartElement(String.Empty, "map", String.Empty); | ||
35 | System.Reflection.FieldInfo[] fields = myType.GetFields(); | ||
36 | for (int i = 0; i < fields.Length; i++) | ||
37 | { | ||
38 | object fieldValue = fields[i].GetValue(obj); | ||
39 | LLSDType[] fieldAttributes = (LLSDType[])fieldValue.GetType().GetCustomAttributes(typeof(LLSDType), false); | ||
40 | if (fieldAttributes.Length > 0) | ||
41 | { | ||
42 | writer.WriteStartElement(String.Empty, "key", String.Empty); | ||
43 | writer.WriteString(fields[i].Name); | ||
44 | writer.WriteEndElement(); | ||
45 | SerializeLLSDType(writer, fieldValue); | ||
46 | } | ||
47 | else | ||
48 | { | ||
49 | //Console.WriteLine("LLSD field name" + fields[i].Name + " , " + fields[i].GetValue(obj).GetType()); | ||
50 | writer.WriteStartElement(String.Empty, "key", String.Empty); | ||
51 | writer.WriteString(fields[i].Name); | ||
52 | writer.WriteEndElement(); | ||
53 | LLSD.LLSDWriteOne(writer, fieldValue); | ||
54 | } | ||
55 | } | ||
56 | writer.WriteEndElement(); | ||
57 | break; | ||
58 | case "ARRAY": | ||
59 | // LLSDArray arrayObject = obj as LLSDArray; | ||
60 | // ArrayList a = arrayObject.Array; | ||
61 | ArrayList a = (ArrayList)obj.GetType().GetField("Array").GetValue(obj); | ||
62 | writer.WriteStartElement(String.Empty, "array", String.Empty); | ||
63 | foreach (object item in a) | ||
64 | { | ||
65 | SerializeLLSDType(writer, item); | ||
66 | } | ||
67 | writer.WriteEndElement(); | ||
68 | break; | ||
69 | } | ||
70 | } | ||
71 | else | ||
72 | { | ||
73 | LLSD.LLSDWriteOne(writer, obj); | ||
74 | } | ||
75 | } | ||
76 | |||
77 | public static object DeserialiseLLSDMap(Hashtable llsd, object obj) | ||
78 | { | ||
79 | Type myType = obj.GetType(); | ||
80 | LLSDType[] llsdattributes = (LLSDType[])myType.GetCustomAttributes(typeof(LLSDType), false); | ||
81 | if (llsdattributes.Length > 0) | ||
82 | { | ||
83 | switch (llsdattributes[0].ObjectType) | ||
84 | { | ||
85 | case "MAP": | ||
86 | IDictionaryEnumerator enumerator = llsd.GetEnumerator(); | ||
87 | while (enumerator.MoveNext()) | ||
88 | { | ||
89 | System.Reflection.FieldInfo field = myType.GetField((string)enumerator.Key); | ||
90 | if (field != null) | ||
91 | { | ||
92 | if (enumerator.Value is Hashtable) | ||
93 | { | ||
94 | object fieldValue = field.GetValue(obj); | ||
95 | DeserialiseLLSDMap((Hashtable) enumerator.Value, fieldValue); | ||
96 | } | ||
97 | else if (enumerator.Value is ArrayList) | ||
98 | { | ||
99 | object fieldValue = field.GetValue(obj); | ||
100 | fieldValue.GetType().GetField("Array").SetValue(fieldValue, enumerator.Value); | ||
101 | //TODO | ||
102 | // the LLSD map/array types in the array need to be deserialised | ||
103 | // but first we need to know the right class to deserialise them into. | ||
104 | } | ||
105 | else | ||
106 | { | ||
107 | field.SetValue(obj, enumerator.Value); | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | break; | ||
112 | } | ||
113 | } | ||
114 | return obj; | ||
115 | } | ||
116 | } | ||
117 | |||
118 | [LLSDType("MAP")] | ||
119 | public class LLSDMapLayerResponse | ||
120 | { | ||
121 | public LLSDMapRequest AgentData = new LLSDMapRequest(); | ||
122 | public LLSDArray LayerData = new LLSDArray(); | ||
123 | |||
124 | public LLSDMapLayerResponse() | ||
125 | { | ||
126 | |||
127 | } | ||
128 | } | ||
129 | |||
130 | [LLSDType("MAP")] | ||
131 | public class LLSDCapsDetails | ||
132 | { | ||
133 | public string MapLayer = ""; | ||
134 | public string NewFileAgentInventory = ""; | ||
135 | //public string EventQueueGet = ""; | ||
136 | |||
137 | public LLSDCapsDetails() | ||
138 | { | ||
139 | |||
140 | } | ||
141 | } | ||
142 | |||
143 | [LLSDType("MAP")] | ||
144 | public class LLSDMapLayer | ||
145 | { | ||
146 | public int Left = 0; | ||
147 | public int Right = 0; | ||
148 | public int Top = 0; | ||
149 | public int Bottom = 0; | ||
150 | public LLUUID ImageID = LLUUID.Zero; | ||
151 | |||
152 | public LLSDMapLayer() | ||
153 | { | ||
154 | |||
155 | } | ||
156 | } | ||
157 | |||
158 | [LLSDType("ARRAY")] | ||
159 | public class LLSDArray | ||
160 | { | ||
161 | public ArrayList Array = new ArrayList(); | ||
162 | |||
163 | public LLSDArray() | ||
164 | { | ||
165 | |||
166 | } | ||
167 | } | ||
168 | |||
169 | [LLSDType("MAP")] | ||
170 | public class LLSDMapRequest | ||
171 | { | ||
172 | public int Flags = 0; | ||
173 | |||
174 | public LLSDMapRequest() | ||
175 | { | ||
176 | |||
177 | } | ||
178 | } | ||
179 | |||
180 | [LLSDType("MAP")] | ||
181 | public class LLSDUploadReply | ||
182 | { | ||
183 | public string new_asset = ""; | ||
184 | public LLUUID new_inventory_item = LLUUID.Zero; | ||
185 | public string state = ""; | ||
186 | |||
187 | public LLSDUploadReply() | ||
188 | { | ||
189 | |||
190 | } | ||
191 | } | ||
192 | |||
193 | [LLSDType("MAP")] | ||
194 | public class LLSDCapEvent | ||
195 | { | ||
196 | public int id = 0; | ||
197 | public LLSDArray events = new LLSDArray(); | ||
198 | |||
199 | public LLSDCapEvent() | ||
200 | { | ||
201 | |||
202 | } | ||
203 | } | ||
204 | |||
205 | [LLSDType("MAP")] | ||
206 | public class LLSDEmpty | ||
207 | { | ||
208 | public LLSDEmpty() | ||
209 | { | ||
210 | |||
211 | } | ||
212 | } | ||
213 | |||
214 | [LLSDType("MAP")] | ||
215 | public class LLSDTest | ||
216 | { | ||
217 | public int Test1 = 20; | ||
218 | public int Test2 = 10; | ||
219 | |||
220 | public LLSDTest() | ||
221 | { | ||
222 | |||
223 | } | ||
224 | } | ||
225 | |||
226 | |||
227 | [AttributeUsage(AttributeTargets.Class)] | ||
228 | public class LLSDType : Attribute | ||
229 | { | ||
230 | private string myType; | ||
231 | |||
232 | public LLSDType(string type) | ||
233 | { | ||
234 | myType = type; | ||
235 | |||
236 | } | ||
237 | |||
238 | public string ObjectType | ||
239 | { | ||
240 | get | ||
241 | { | ||
242 | return myType; | ||
243 | } | ||
244 | } | ||
245 | } | ||
246 | } | ||
diff --git a/OpenSim/Region/ClientStack/Assets/InventoryCache.cs b/OpenSim/Region/ClientStack/Assets/InventoryCache.cs new file mode 100644 index 0000000..5d5021c --- /dev/null +++ b/OpenSim/Region/ClientStack/Assets/InventoryCache.cs | |||
@@ -0,0 +1,337 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using libsecondlife; | ||
32 | using OpenSim; | ||
33 | using libsecondlife.Packets; | ||
34 | //using OpenSim.GridServers; | ||
35 | using OpenSim.Framework.Inventory; | ||
36 | using OpenSim.Framework.Types; | ||
37 | using OpenSim.Framework.Interfaces; | ||
38 | |||
39 | namespace OpenSim.Assets | ||
40 | { | ||
41 | /// <summary> | ||
42 | /// Description of InventoryManager. | ||
43 | /// </summary> | ||
44 | public class InventoryCache | ||
45 | { | ||
46 | private Dictionary<LLUUID, AgentInventory> _agentsInventory; | ||
47 | private List<UserServerRequest> _serverRequests; //list of requests made to user server. | ||
48 | private System.Text.Encoding _enc = System.Text.Encoding.ASCII; | ||
49 | private const uint FULL_MASK_PERMISSIONS = 2147483647; | ||
50 | |||
51 | public InventoryCache() | ||
52 | { | ||
53 | _agentsInventory = new Dictionary<LLUUID, AgentInventory>(); | ||
54 | _serverRequests = new List<UserServerRequest>(); | ||
55 | } | ||
56 | |||
57 | public void AddNewAgentsInventory(AgentInventory agentInventory) | ||
58 | { | ||
59 | if (!this._agentsInventory.ContainsKey(agentInventory.AgentID)) | ||
60 | { | ||
61 | this._agentsInventory.Add(agentInventory.AgentID, agentInventory); | ||
62 | } | ||
63 | } | ||
64 | |||
65 | public AgentInventory FetchAgentsInventory(LLUUID agentID, IUserServer userserver) | ||
66 | { | ||
67 | AgentInventory res = null; | ||
68 | if (!this._agentsInventory.ContainsKey(agentID)) | ||
69 | { | ||
70 | res = userserver.RequestAgentsInventory(agentID); | ||
71 | this._agentsInventory.Add(agentID,res); | ||
72 | } | ||
73 | return res; | ||
74 | } | ||
75 | |||
76 | public AgentInventory GetAgentsInventory(LLUUID agentID) | ||
77 | { | ||
78 | if (this._agentsInventory.ContainsKey(agentID)) | ||
79 | { | ||
80 | return this._agentsInventory[agentID]; | ||
81 | } | ||
82 | |||
83 | return null; | ||
84 | } | ||
85 | |||
86 | public void ClientLeaving(LLUUID clientID, IUserServer userserver) | ||
87 | { | ||
88 | if (this._agentsInventory.ContainsKey(clientID)) | ||
89 | { | ||
90 | if (userserver != null) | ||
91 | { | ||
92 | userserver.UpdateAgentsInventory(clientID, this._agentsInventory[clientID]); | ||
93 | } | ||
94 | this._agentsInventory.Remove(clientID); | ||
95 | } | ||
96 | } | ||
97 | |||
98 | public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID) | ||
99 | { | ||
100 | return this.CreateNewInventoryFolder(remoteClient, folderID, 0); | ||
101 | } | ||
102 | |||
103 | public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID, ushort type) | ||
104 | { | ||
105 | bool res = false; | ||
106 | if (folderID != LLUUID.Zero) //don't create a folder with a zero id | ||
107 | { | ||
108 | if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) | ||
109 | { | ||
110 | res = this._agentsInventory[remoteClient.AgentID].CreateNewFolder(folderID, type); | ||
111 | } | ||
112 | } | ||
113 | return res; | ||
114 | } | ||
115 | |||
116 | public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID, ushort type, string folderName, LLUUID parent) | ||
117 | { | ||
118 | bool res = false; | ||
119 | if (folderID != LLUUID.Zero) //don't create a folder with a zero id | ||
120 | { | ||
121 | if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) | ||
122 | { | ||
123 | res = this._agentsInventory[remoteClient.AgentID].CreateNewFolder(folderID, type, folderName, parent); | ||
124 | } | ||
125 | } | ||
126 | return res; | ||
127 | } | ||
128 | |||
129 | public LLUUID AddNewInventoryItem(ClientView remoteClient, LLUUID folderID, OpenSim.Framework.Types.AssetBase asset) | ||
130 | { | ||
131 | LLUUID newItem = null; | ||
132 | if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) | ||
133 | { | ||
134 | newItem = this._agentsInventory[remoteClient.AgentID].AddToInventory(folderID, asset); | ||
135 | if (newItem != null) | ||
136 | { | ||
137 | InventoryItem Item = this._agentsInventory[remoteClient.AgentID].InventoryItems[newItem]; | ||
138 | this.SendItemUpdateCreate(remoteClient, Item); | ||
139 | } | ||
140 | } | ||
141 | |||
142 | return newItem; | ||
143 | } | ||
144 | public bool DeleteInventoryItem(ClientView remoteClient, LLUUID itemID) | ||
145 | { | ||
146 | bool res = false; | ||
147 | if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) | ||
148 | { | ||
149 | res = this._agentsInventory[remoteClient.AgentID].DeleteFromInventory(itemID); | ||
150 | if (res) | ||
151 | { | ||
152 | RemoveInventoryItemPacket remove = new RemoveInventoryItemPacket(); | ||
153 | remove.AgentData.AgentID = remoteClient.AgentID; | ||
154 | remove.AgentData.SessionID = remoteClient.SessionID; | ||
155 | remove.InventoryData = new RemoveInventoryItemPacket.InventoryDataBlock[1]; | ||
156 | remove.InventoryData[0] = new RemoveInventoryItemPacket.InventoryDataBlock(); | ||
157 | remove.InventoryData[0].ItemID = itemID; | ||
158 | remoteClient.OutPacket(remove); | ||
159 | } | ||
160 | } | ||
161 | |||
162 | return res; | ||
163 | } | ||
164 | |||
165 | public bool UpdateInventoryItemAsset(ClientView remoteClient, LLUUID itemID, OpenSim.Framework.Types.AssetBase asset) | ||
166 | { | ||
167 | if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) | ||
168 | { | ||
169 | bool res = _agentsInventory[remoteClient.AgentID].UpdateItemAsset(itemID, asset); | ||
170 | if (res) | ||
171 | { | ||
172 | InventoryItem Item = this._agentsInventory[remoteClient.AgentID].InventoryItems[itemID]; | ||
173 | this.SendItemUpdateCreate(remoteClient, Item); | ||
174 | } | ||
175 | return res; | ||
176 | } | ||
177 | |||
178 | return false; | ||
179 | } | ||
180 | |||
181 | public bool UpdateInventoryItemDetails(ClientView remoteClient, LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet) | ||
182 | { | ||
183 | if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) | ||
184 | { | ||
185 | bool res = _agentsInventory[remoteClient.AgentID].UpdateItemDetails(itemID, packet); | ||
186 | if (res) | ||
187 | { | ||
188 | InventoryItem Item = this._agentsInventory[remoteClient.AgentID].InventoryItems[itemID]; | ||
189 | this.SendItemUpdateCreate(remoteClient, Item); | ||
190 | } | ||
191 | return res; | ||
192 | } | ||
193 | |||
194 | return false; | ||
195 | } | ||
196 | |||
197 | public void FetchInventoryDescendents(ClientView userInfo, FetchInventoryDescendentsPacket FetchDescend) | ||
198 | { | ||
199 | if (this._agentsInventory.ContainsKey(userInfo.AgentID)) | ||
200 | { | ||
201 | AgentInventory agentInventory = this._agentsInventory[userInfo.AgentID]; | ||
202 | if (FetchDescend.InventoryData.FetchItems) | ||
203 | { | ||
204 | if (agentInventory.InventoryFolders.ContainsKey(FetchDescend.InventoryData.FolderID)) | ||
205 | { | ||
206 | InventoryFolder Folder = agentInventory.InventoryFolders[FetchDescend.InventoryData.FolderID]; | ||
207 | InventoryDescendentsPacket Descend = new InventoryDescendentsPacket(); | ||
208 | Descend.AgentData.AgentID = userInfo.AgentID; | ||
209 | Descend.AgentData.OwnerID = Folder.OwnerID; | ||
210 | Descend.AgentData.FolderID = FetchDescend.InventoryData.FolderID; | ||
211 | Descend.AgentData.Descendents = Folder.Items.Count; | ||
212 | Descend.AgentData.Version = Folder.Items.Count; | ||
213 | |||
214 | |||
215 | Descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[Folder.Items.Count]; | ||
216 | for (int i = 0; i < Folder.Items.Count; i++) | ||
217 | { | ||
218 | |||
219 | InventoryItem Item = Folder.Items[i]; | ||
220 | Descend.ItemData[i] = new InventoryDescendentsPacket.ItemDataBlock(); | ||
221 | Descend.ItemData[i].ItemID = Item.ItemID; | ||
222 | Descend.ItemData[i].AssetID = Item.AssetID; | ||
223 | Descend.ItemData[i].CreatorID = Item.CreatorID; | ||
224 | Descend.ItemData[i].BaseMask = FULL_MASK_PERMISSIONS; | ||
225 | Descend.ItemData[i].CreationDate = 1000; | ||
226 | Descend.ItemData[i].Description = _enc.GetBytes(Item.Description + "\0"); | ||
227 | Descend.ItemData[i].EveryoneMask = FULL_MASK_PERMISSIONS; | ||
228 | Descend.ItemData[i].Flags = 1; | ||
229 | Descend.ItemData[i].FolderID = Item.FolderID; | ||
230 | Descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
231 | Descend.ItemData[i].GroupMask = FULL_MASK_PERMISSIONS; | ||
232 | Descend.ItemData[i].InvType = Item.InvType; | ||
233 | Descend.ItemData[i].Name = _enc.GetBytes(Item.Name + "\0"); | ||
234 | Descend.ItemData[i].NextOwnerMask = FULL_MASK_PERMISSIONS; | ||
235 | Descend.ItemData[i].OwnerID = Item.OwnerID; | ||
236 | Descend.ItemData[i].OwnerMask = FULL_MASK_PERMISSIONS; | ||
237 | Descend.ItemData[i].SalePrice = 100; | ||
238 | Descend.ItemData[i].SaleType = 0; | ||
239 | Descend.ItemData[i].Type = Item.Type; | ||
240 | Descend.ItemData[i].CRC = libsecondlife.Helpers.InventoryCRC(1000, 0, Descend.ItemData[i].InvType, Descend.ItemData[i].Type, Descend.ItemData[i].AssetID, Descend.ItemData[i].GroupID, 100, Descend.ItemData[i].OwnerID, Descend.ItemData[i].CreatorID, Descend.ItemData[i].ItemID, Descend.ItemData[i].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); | ||
241 | } | ||
242 | |||
243 | userInfo.OutPacket(Descend); | ||
244 | |||
245 | } | ||
246 | } | ||
247 | else | ||
248 | { | ||
249 | Console.WriteLine("fetch subfolders"); | ||
250 | } | ||
251 | } | ||
252 | } | ||
253 | |||
254 | public void FetchInventory(ClientView userInfo, FetchInventoryPacket FetchItems) | ||
255 | { | ||
256 | if (this._agentsInventory.ContainsKey(userInfo.AgentID)) | ||
257 | { | ||
258 | AgentInventory agentInventory = this._agentsInventory[userInfo.AgentID]; | ||
259 | |||
260 | for (int i = 0; i < FetchItems.InventoryData.Length; i++) | ||
261 | { | ||
262 | if (agentInventory.InventoryItems.ContainsKey(FetchItems.InventoryData[i].ItemID)) | ||
263 | { | ||
264 | InventoryItem Item = agentInventory.InventoryItems[FetchItems.InventoryData[i].ItemID]; | ||
265 | FetchInventoryReplyPacket InventoryReply = new FetchInventoryReplyPacket(); | ||
266 | InventoryReply.AgentData.AgentID = userInfo.AgentID; | ||
267 | InventoryReply.InventoryData = new FetchInventoryReplyPacket.InventoryDataBlock[1]; | ||
268 | InventoryReply.InventoryData[0] = new FetchInventoryReplyPacket.InventoryDataBlock(); | ||
269 | InventoryReply.InventoryData[0].ItemID = Item.ItemID; | ||
270 | InventoryReply.InventoryData[0].AssetID = Item.AssetID; | ||
271 | InventoryReply.InventoryData[0].CreatorID = Item.CreatorID; | ||
272 | InventoryReply.InventoryData[0].BaseMask = FULL_MASK_PERMISSIONS; | ||
273 | InventoryReply.InventoryData[0].CreationDate = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
274 | InventoryReply.InventoryData[0].Description = _enc.GetBytes(Item.Description + "\0"); | ||
275 | InventoryReply.InventoryData[0].EveryoneMask = FULL_MASK_PERMISSIONS; | ||
276 | InventoryReply.InventoryData[0].Flags = 0; | ||
277 | InventoryReply.InventoryData[0].FolderID = Item.FolderID; | ||
278 | InventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
279 | InventoryReply.InventoryData[0].GroupMask = FULL_MASK_PERMISSIONS; | ||
280 | InventoryReply.InventoryData[0].InvType = Item.InvType; | ||
281 | InventoryReply.InventoryData[0].Name = _enc.GetBytes(Item.Name + "\0"); | ||
282 | InventoryReply.InventoryData[0].NextOwnerMask = FULL_MASK_PERMISSIONS; | ||
283 | InventoryReply.InventoryData[0].OwnerID = Item.OwnerID; | ||
284 | InventoryReply.InventoryData[0].OwnerMask = FULL_MASK_PERMISSIONS; | ||
285 | InventoryReply.InventoryData[0].SalePrice = 100; | ||
286 | InventoryReply.InventoryData[0].SaleType = 0; | ||
287 | InventoryReply.InventoryData[0].Type = Item.Type; | ||
288 | InventoryReply.InventoryData[0].CRC = libsecondlife.Helpers.InventoryCRC(1000, 0, InventoryReply.InventoryData[0].InvType, InventoryReply.InventoryData[0].Type, InventoryReply.InventoryData[0].AssetID, InventoryReply.InventoryData[0].GroupID, 100, InventoryReply.InventoryData[0].OwnerID, InventoryReply.InventoryData[0].CreatorID, InventoryReply.InventoryData[0].ItemID, InventoryReply.InventoryData[0].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); | ||
289 | userInfo.OutPacket(InventoryReply); | ||
290 | } | ||
291 | } | ||
292 | } | ||
293 | } | ||
294 | |||
295 | private void SendItemUpdateCreate(ClientView remoteClient, InventoryItem Item) | ||
296 | { | ||
297 | |||
298 | UpdateCreateInventoryItemPacket InventoryReply = new UpdateCreateInventoryItemPacket(); | ||
299 | InventoryReply.AgentData.AgentID = remoteClient.AgentID; | ||
300 | InventoryReply.AgentData.SimApproved = true; | ||
301 | InventoryReply.InventoryData = new UpdateCreateInventoryItemPacket.InventoryDataBlock[1]; | ||
302 | InventoryReply.InventoryData[0] = new UpdateCreateInventoryItemPacket.InventoryDataBlock(); | ||
303 | InventoryReply.InventoryData[0].ItemID = Item.ItemID; | ||
304 | InventoryReply.InventoryData[0].AssetID = Item.AssetID; | ||
305 | InventoryReply.InventoryData[0].CreatorID = Item.CreatorID; | ||
306 | InventoryReply.InventoryData[0].BaseMask = FULL_MASK_PERMISSIONS; | ||
307 | InventoryReply.InventoryData[0].CreationDate = 1000; | ||
308 | InventoryReply.InventoryData[0].Description = _enc.GetBytes(Item.Description + "\0"); | ||
309 | InventoryReply.InventoryData[0].EveryoneMask = FULL_MASK_PERMISSIONS; | ||
310 | InventoryReply.InventoryData[0].Flags = 0; | ||
311 | InventoryReply.InventoryData[0].FolderID = Item.FolderID; | ||
312 | InventoryReply.InventoryData[0].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); | ||
313 | InventoryReply.InventoryData[0].GroupMask = FULL_MASK_PERMISSIONS; | ||
314 | InventoryReply.InventoryData[0].InvType = Item.InvType; | ||
315 | InventoryReply.InventoryData[0].Name = _enc.GetBytes(Item.Name + "\0"); | ||
316 | InventoryReply.InventoryData[0].NextOwnerMask = FULL_MASK_PERMISSIONS; | ||
317 | InventoryReply.InventoryData[0].OwnerID = Item.OwnerID; | ||
318 | InventoryReply.InventoryData[0].OwnerMask = FULL_MASK_PERMISSIONS; | ||
319 | InventoryReply.InventoryData[0].SalePrice = 100; | ||
320 | InventoryReply.InventoryData[0].SaleType = 0; | ||
321 | InventoryReply.InventoryData[0].Type = Item.Type; | ||
322 | InventoryReply.InventoryData[0].CRC = libsecondlife.Helpers.InventoryCRC(1000, 0, InventoryReply.InventoryData[0].InvType, InventoryReply.InventoryData[0].Type, InventoryReply.InventoryData[0].AssetID, InventoryReply.InventoryData[0].GroupID, 100, InventoryReply.InventoryData[0].OwnerID, InventoryReply.InventoryData[0].CreatorID, InventoryReply.InventoryData[0].ItemID, InventoryReply.InventoryData[0].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); | ||
323 | |||
324 | remoteClient.OutPacket(InventoryReply); | ||
325 | } | ||
326 | } | ||
327 | |||
328 | |||
329 | |||
330 | public class UserServerRequest | ||
331 | { | ||
332 | public UserServerRequest() | ||
333 | { | ||
334 | |||
335 | } | ||
336 | } | ||
337 | } | ||
diff --git a/OpenSim/Region/ClientStack/ClientStackNetworkHandler.cs b/OpenSim/Region/ClientStack/ClientStackNetworkHandler.cs new file mode 100644 index 0000000..7552195 --- /dev/null +++ b/OpenSim/Region/ClientStack/ClientStackNetworkHandler.cs | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Net; | ||
32 | using System.Net.Sockets; | ||
33 | using libsecondlife; | ||
34 | |||
35 | |||
36 | namespace OpenSim | ||
37 | { | ||
38 | |||
39 | public interface ClientStackNetworkHandler | ||
40 | { | ||
41 | void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode);// EndPoint packetSender); | ||
42 | void RemoveClientCircuit(uint circuitcode); | ||
43 | void RegisterPacketServer(PacketServer server); | ||
44 | } | ||
45 | |||
46 | } | ||
diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs new file mode 100644 index 0000000..902f3c7 --- /dev/null +++ b/OpenSim/Region/ClientStack/ClientView.API.cs | |||
@@ -0,0 +1,975 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Interfaces; | ||
32 | using OpenSim.Framework.Inventory; | ||
33 | using OpenSim.Framework.Types; | ||
34 | |||
35 | using libsecondlife; | ||
36 | using libsecondlife.Packets; | ||
37 | |||
38 | namespace OpenSim | ||
39 | { | ||
40 | partial class ClientView | ||
41 | { | ||
42 | public event ChatFromViewer OnChatFromViewer; | ||
43 | public event RezObject OnRezObject; | ||
44 | public event GenericCall4 OnDeRezObject; | ||
45 | public event ModifyTerrain OnModifyTerrain; | ||
46 | public event GenericCall OnRegionHandShakeReply; | ||
47 | public event GenericCall OnRequestWearables; | ||
48 | public event SetAppearance OnSetAppearance; | ||
49 | public event GenericCall2 OnCompleteMovementToRegion; | ||
50 | public event UpdateAgent OnAgentUpdate; | ||
51 | public event StartAnim OnStartAnim; | ||
52 | public event GenericCall OnRequestAvatarsData; | ||
53 | public event LinkObjects OnLinkObjects; | ||
54 | public event UpdateVector OnGrapObject; | ||
55 | public event ObjectSelect OnDeGrapObject; | ||
56 | public event MoveObject OnGrapUpdate; | ||
57 | public event GenericCall4 OnAddPrim; | ||
58 | public event UpdateShape OnUpdatePrimShape; | ||
59 | public event ObjectSelect OnObjectSelect; | ||
60 | public event UpdatePrimFlags OnUpdatePrimFlags; | ||
61 | public event UpdatePrimTexture OnUpdatePrimTexture; | ||
62 | public event UpdateVector OnUpdatePrimPosition; | ||
63 | public event UpdatePrimRotation OnUpdatePrimRotation; | ||
64 | public event UpdateVector OnUpdatePrimScale; | ||
65 | public event StatusChange OnChildAgentStatus; | ||
66 | public event GenericCall2 OnStopMovement; | ||
67 | public event NewAvatar OnNewAvatar; | ||
68 | public event GenericCall6 OnRemoveAvatar; | ||
69 | public event RequestMapBlocks OnRequestMapBlocks; | ||
70 | public event TeleportLocationRequest OnTeleportLocationRequest; | ||
71 | |||
72 | public event ParcelPropertiesRequest OnParcelPropertiesRequest; | ||
73 | public event ParcelDivideRequest OnParcelDivideRequest; | ||
74 | public event ParcelJoinRequest OnParcelJoinRequest; | ||
75 | public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest; | ||
76 | |||
77 | public event EstateOwnerMessageRequest OnEstateOwnerMessage; | ||
78 | |||
79 | /// <summary> | ||
80 | /// | ||
81 | /// </summary> | ||
82 | public LLVector3 StartPos | ||
83 | { | ||
84 | get | ||
85 | { | ||
86 | return startpos; | ||
87 | } | ||
88 | set | ||
89 | { | ||
90 | startpos = value; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | /// <summary> | ||
95 | /// | ||
96 | /// </summary> | ||
97 | public LLUUID AgentId | ||
98 | { | ||
99 | get | ||
100 | { | ||
101 | return this.AgentID; | ||
102 | } | ||
103 | } | ||
104 | |||
105 | /// <summary> | ||
106 | /// | ||
107 | /// </summary> | ||
108 | public string FirstName | ||
109 | { | ||
110 | get | ||
111 | { | ||
112 | return this.firstName; | ||
113 | } | ||
114 | |||
115 | } | ||
116 | |||
117 | /// <summary> | ||
118 | /// | ||
119 | /// </summary> | ||
120 | public string LastName | ||
121 | { | ||
122 | get | ||
123 | { | ||
124 | return this.lastName; | ||
125 | } | ||
126 | } | ||
127 | |||
128 | #region World/Avatar to Client | ||
129 | |||
130 | /// <summary> | ||
131 | /// | ||
132 | /// </summary> | ||
133 | /// <param name="regionInfo"></param> | ||
134 | public void SendRegionHandshake(RegionInfo regionInfo) | ||
135 | { | ||
136 | System.Text.Encoding _enc = System.Text.Encoding.ASCII; | ||
137 | RegionHandshakePacket handshake = new RegionHandshakePacket(); | ||
138 | |||
139 | handshake.RegionInfo.BillableFactor = regionInfo.estateSettings.billableFactor; | ||
140 | handshake.RegionInfo.IsEstateManager = false; | ||
141 | handshake.RegionInfo.TerrainHeightRange00 = regionInfo.estateSettings.terrainHeightRange0; | ||
142 | handshake.RegionInfo.TerrainHeightRange01 = regionInfo.estateSettings.terrainHeightRange1; | ||
143 | handshake.RegionInfo.TerrainHeightRange10 = regionInfo.estateSettings.terrainHeightRange2; | ||
144 | handshake.RegionInfo.TerrainHeightRange11 = regionInfo.estateSettings.terrainHeightRange3; | ||
145 | handshake.RegionInfo.TerrainStartHeight00 = regionInfo.estateSettings.terrainStartHeight0; | ||
146 | handshake.RegionInfo.TerrainStartHeight01 = regionInfo.estateSettings.terrainStartHeight1; | ||
147 | handshake.RegionInfo.TerrainStartHeight10 = regionInfo.estateSettings.terrainStartHeight2; | ||
148 | handshake.RegionInfo.TerrainStartHeight11 = regionInfo.estateSettings.terrainStartHeight3; | ||
149 | handshake.RegionInfo.SimAccess = (byte)regionInfo.estateSettings.simAccess; | ||
150 | handshake.RegionInfo.WaterHeight = regionInfo.estateSettings.waterHeight; | ||
151 | |||
152 | |||
153 | handshake.RegionInfo.RegionFlags = (uint)regionInfo.estateSettings.regionFlags; | ||
154 | |||
155 | handshake.RegionInfo.SimName = _enc.GetBytes(regionInfo.RegionName + "\0"); | ||
156 | handshake.RegionInfo.SimOwner = regionInfo.MasterAvatarAssignedUUID; | ||
157 | handshake.RegionInfo.TerrainBase0 = regionInfo.estateSettings.terrainBase0; | ||
158 | handshake.RegionInfo.TerrainBase1 = regionInfo.estateSettings.terrainBase1; | ||
159 | handshake.RegionInfo.TerrainBase2 = regionInfo.estateSettings.terrainBase2; | ||
160 | handshake.RegionInfo.TerrainBase3 = regionInfo.estateSettings.terrainBase3; | ||
161 | handshake.RegionInfo.TerrainDetail0 = regionInfo.estateSettings.terrainDetail0; | ||
162 | handshake.RegionInfo.TerrainDetail1 = regionInfo.estateSettings.terrainDetail1; | ||
163 | handshake.RegionInfo.TerrainDetail2 = regionInfo.estateSettings.terrainDetail2; | ||
164 | handshake.RegionInfo.TerrainDetail3 = regionInfo.estateSettings.terrainDetail3; | ||
165 | handshake.RegionInfo.CacheID = LLUUID.Random(); //I guess this is for the client to remember an old setting? | ||
166 | |||
167 | this.OutPacket(handshake); | ||
168 | } | ||
169 | |||
170 | /// <summary> | ||
171 | /// | ||
172 | /// </summary> | ||
173 | /// <param name="regInfo"></param> | ||
174 | public void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look) | ||
175 | { | ||
176 | AgentMovementCompletePacket mov = new AgentMovementCompletePacket(); | ||
177 | mov.AgentData.SessionID = this.SessionID; | ||
178 | mov.AgentData.AgentID = this.AgentID; | ||
179 | mov.Data.RegionHandle = regInfo.RegionHandle; | ||
180 | mov.Data.Timestamp = 1172750370; // TODO - dynamicalise this | ||
181 | |||
182 | if ((pos.X == 0) && (pos.Y == 0) && (pos.Z == 0)) | ||
183 | { | ||
184 | mov.Data.Position = this.startpos; | ||
185 | } | ||
186 | else | ||
187 | { | ||
188 | mov.Data.Position = pos; | ||
189 | } | ||
190 | mov.Data.LookAt = look; | ||
191 | |||
192 | OutPacket(mov); | ||
193 | } | ||
194 | |||
195 | /// <summary> | ||
196 | /// | ||
197 | /// </summary> | ||
198 | /// <param name="message"></param> | ||
199 | /// <param name="type"></param> | ||
200 | /// <param name="fromPos"></param> | ||
201 | /// <param name="fromName"></param> | ||
202 | /// <param name="fromAgentID"></param> | ||
203 | public void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) | ||
204 | { | ||
205 | SendChatMessage(Helpers.StringToField(message), type, fromPos, fromName, fromAgentID); | ||
206 | } | ||
207 | |||
208 | /// <summary> | ||
209 | /// | ||
210 | /// </summary> | ||
211 | /// <param name="message"></param> | ||
212 | /// <param name="type"></param> | ||
213 | /// <param name="fromPos"></param> | ||
214 | /// <param name="fromName"></param> | ||
215 | /// <param name="fromAgentID"></param> | ||
216 | public void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) | ||
217 | { | ||
218 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
219 | libsecondlife.Packets.ChatFromSimulatorPacket reply = new ChatFromSimulatorPacket(); | ||
220 | reply.ChatData.Audible = 1; | ||
221 | reply.ChatData.Message = message; | ||
222 | reply.ChatData.ChatType = type; | ||
223 | reply.ChatData.SourceType = 1; | ||
224 | reply.ChatData.Position = fromPos; | ||
225 | reply.ChatData.FromName = enc.GetBytes(fromName + "\0"); | ||
226 | reply.ChatData.OwnerID = fromAgentID; | ||
227 | reply.ChatData.SourceID = fromAgentID; | ||
228 | |||
229 | this.OutPacket(reply); | ||
230 | } | ||
231 | |||
232 | |||
233 | /// <summary> | ||
234 | /// Send the region heightmap to the client | ||
235 | /// </summary> | ||
236 | /// <param name="map">heightmap</param> | ||
237 | public virtual void SendLayerData(float[] map) | ||
238 | { | ||
239 | try | ||
240 | { | ||
241 | int[] patches = new int[4]; | ||
242 | |||
243 | for (int y = 0; y < 16; y++) | ||
244 | { | ||
245 | for (int x = 0; x < 16; x = x + 4) | ||
246 | { | ||
247 | patches[0] = x + 0 + y * 16; | ||
248 | patches[1] = x + 1 + y * 16; | ||
249 | patches[2] = x + 2 + y * 16; | ||
250 | patches[3] = x + 3 + y * 16; | ||
251 | |||
252 | Packet layerpack = TerrainManager.CreateLandPacket(map, patches); | ||
253 | OutPacket(layerpack); | ||
254 | } | ||
255 | } | ||
256 | } | ||
257 | catch (Exception e) | ||
258 | { | ||
259 | OpenSim.Framework.Console.MainLog.Instance.Warn("ClientView API.cs: SendLayerData() - Failed with exception " + e.ToString()); | ||
260 | } | ||
261 | } | ||
262 | |||
263 | /// <summary> | ||
264 | /// Sends a specified patch to a client | ||
265 | /// </summary> | ||
266 | /// <param name="px">Patch coordinate (x) 0..16</param> | ||
267 | /// <param name="py">Patch coordinate (y) 0..16</param> | ||
268 | /// <param name="map">heightmap</param> | ||
269 | public void SendLayerData(int px, int py, float[] map) | ||
270 | { | ||
271 | try | ||
272 | { | ||
273 | int[] patches = new int[1]; | ||
274 | int patchx, patchy; | ||
275 | patchx = px / 16; | ||
276 | patchy = py / 16; | ||
277 | |||
278 | patches[0] = patchx + 0 + patchy * 16; | ||
279 | |||
280 | Packet layerpack = TerrainManager.CreateLandPacket(map, patches); | ||
281 | OutPacket(layerpack); | ||
282 | } | ||
283 | catch (Exception e) | ||
284 | { | ||
285 | OpenSim.Framework.Console.MainLog.Instance.Warn("ClientView API .cs: SendLayerData() - Failed with exception " + e.ToString()); | ||
286 | } | ||
287 | } | ||
288 | |||
289 | /// <summary> | ||
290 | /// | ||
291 | /// </summary> | ||
292 | /// <param name="neighbourHandle"></param> | ||
293 | /// <param name="neighbourIP"></param> | ||
294 | /// <param name="neighbourPort"></param> | ||
295 | public void InformClientOfNeighbour(ulong neighbourHandle, System.Net.IPAddress neighbourIP, ushort neighbourPort) | ||
296 | { | ||
297 | EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket(); | ||
298 | enablesimpacket.SimulatorInfo = new EnableSimulatorPacket.SimulatorInfoBlock(); | ||
299 | enablesimpacket.SimulatorInfo.Handle = neighbourHandle; | ||
300 | |||
301 | byte[] byteIP = neighbourIP.GetAddressBytes(); | ||
302 | enablesimpacket.SimulatorInfo.IP = (uint)byteIP[3] << 24; | ||
303 | enablesimpacket.SimulatorInfo.IP += (uint)byteIP[2] << 16; | ||
304 | enablesimpacket.SimulatorInfo.IP += (uint)byteIP[1] << 8; | ||
305 | enablesimpacket.SimulatorInfo.IP += (uint)byteIP[0]; | ||
306 | enablesimpacket.SimulatorInfo.Port = neighbourPort; | ||
307 | OutPacket(enablesimpacket); | ||
308 | } | ||
309 | |||
310 | /// <summary> | ||
311 | /// | ||
312 | /// </summary> | ||
313 | /// <returns></returns> | ||
314 | public AgentCircuitData RequestClientInfo() | ||
315 | { | ||
316 | AgentCircuitData agentData = new AgentCircuitData(); | ||
317 | agentData.AgentID = this.AgentId; | ||
318 | agentData.SessionID = this.SessionID; | ||
319 | agentData.SecureSessionID = this.SecureSessionID; | ||
320 | agentData.circuitcode = this.CircuitCode; | ||
321 | agentData.child = false; | ||
322 | agentData.firstname = this.firstName; | ||
323 | agentData.lastname = this.lastName; | ||
324 | |||
325 | return agentData; | ||
326 | } | ||
327 | |||
328 | public void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, System.Net.IPAddress newRegionIP, ushort newRegionPort) | ||
329 | { | ||
330 | LLVector3 look = new LLVector3(lookAt.X * 10, lookAt.Y * 10, lookAt.Z * 10); | ||
331 | |||
332 | CrossedRegionPacket newSimPack = new CrossedRegionPacket(); | ||
333 | newSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock(); | ||
334 | newSimPack.AgentData.AgentID = this.AgentID; | ||
335 | newSimPack.AgentData.SessionID = this.SessionID; | ||
336 | newSimPack.Info = new CrossedRegionPacket.InfoBlock(); | ||
337 | newSimPack.Info.Position = pos; | ||
338 | newSimPack.Info.LookAt = look; // new LLVector3(0.0f, 0.0f, 0.0f); // copied from Avatar.cs - SHOULD BE DYNAMIC!!!!!!!!!! | ||
339 | newSimPack.RegionData = new libsecondlife.Packets.CrossedRegionPacket.RegionDataBlock(); | ||
340 | newSimPack.RegionData.RegionHandle = newRegionHandle; | ||
341 | byte[] byteIP = newRegionIP.GetAddressBytes(); | ||
342 | newSimPack.RegionData.SimIP = (uint)byteIP[3] << 24; | ||
343 | newSimPack.RegionData.SimIP += (uint)byteIP[2] << 16; | ||
344 | newSimPack.RegionData.SimIP += (uint)byteIP[1] << 8; | ||
345 | newSimPack.RegionData.SimIP += (uint)byteIP[0]; | ||
346 | newSimPack.RegionData.SimPort = newRegionPort; | ||
347 | newSimPack.RegionData.SeedCapability = new byte[0]; | ||
348 | |||
349 | this.OutPacket(newSimPack); | ||
350 | //this.DowngradeClient(); | ||
351 | } | ||
352 | |||
353 | public void SendMapBlock(List<MapBlockData> mapBlocks) | ||
354 | { | ||
355 | System.Text.Encoding _enc = System.Text.Encoding.ASCII; | ||
356 | |||
357 | MapBlockReplyPacket mapReply = new MapBlockReplyPacket(); | ||
358 | mapReply.AgentData.AgentID = this.AgentID; | ||
359 | mapReply.Data = new MapBlockReplyPacket.DataBlock[mapBlocks.Count]; | ||
360 | mapReply.AgentData.Flags = 0; | ||
361 | |||
362 | for (int i = 0; i < mapBlocks.Count; i++) | ||
363 | { | ||
364 | mapReply.Data[i] = new MapBlockReplyPacket.DataBlock(); | ||
365 | mapReply.Data[i].MapImageID = mapBlocks[i].MapImageId; | ||
366 | mapReply.Data[i].X = mapBlocks[i].X; | ||
367 | mapReply.Data[i].Y = mapBlocks[i].Y; | ||
368 | mapReply.Data[i].WaterHeight = mapBlocks[i].WaterHeight; | ||
369 | mapReply.Data[i].Name = _enc.GetBytes(mapBlocks[i].Name); | ||
370 | mapReply.Data[i].RegionFlags = mapBlocks[i].RegionFlags; | ||
371 | mapReply.Data[i].Access = mapBlocks[i].Access; | ||
372 | mapReply.Data[i].Agents = mapBlocks[i].Agents; | ||
373 | } | ||
374 | this.OutPacket(mapReply); | ||
375 | } | ||
376 | |||
377 | public void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags) | ||
378 | { | ||
379 | TeleportLocalPacket tpLocal = new TeleportLocalPacket(); | ||
380 | tpLocal.Info.AgentID = this.AgentID; | ||
381 | tpLocal.Info.TeleportFlags = flags; | ||
382 | tpLocal.Info.LocationID = 2; | ||
383 | tpLocal.Info.LookAt = lookAt; | ||
384 | tpLocal.Info.Position = position; | ||
385 | OutPacket(tpLocal); | ||
386 | } | ||
387 | |||
388 | public void SendRegionTeleport(ulong regionHandle, byte simAccess, string ipAddress, ushort ipPort, uint locationID, uint flags) | ||
389 | { | ||
390 | TeleportFinishPacket teleport = new TeleportFinishPacket(); | ||
391 | teleport.Info.AgentID = this.AgentID; | ||
392 | teleport.Info.RegionHandle = regionHandle; | ||
393 | teleport.Info.SimAccess = simAccess; | ||
394 | teleport.Info.SeedCapability = new byte[0]; | ||
395 | |||
396 | System.Net.IPAddress oIP = System.Net.IPAddress.Parse(ipAddress); | ||
397 | byte[] byteIP = oIP.GetAddressBytes(); | ||
398 | uint ip = (uint)byteIP[3] << 24; | ||
399 | ip += (uint)byteIP[2] << 16; | ||
400 | ip += (uint)byteIP[1] << 8; | ||
401 | ip += (uint)byteIP[0]; | ||
402 | |||
403 | teleport.Info.SimIP = ip; | ||
404 | teleport.Info.SimPort = ipPort; | ||
405 | teleport.Info.LocationID = 4; | ||
406 | teleport.Info.TeleportFlags = 1 << 4; | ||
407 | OutPacket(teleport); | ||
408 | } | ||
409 | |||
410 | /// <summary> | ||
411 | /// | ||
412 | /// </summary> | ||
413 | public void SendTeleportCancel() | ||
414 | { | ||
415 | TeleportCancelPacket tpCancel = new TeleportCancelPacket(); | ||
416 | tpCancel.Info.SessionID = this.SessionID; | ||
417 | tpCancel.Info.AgentID = this.AgentID; | ||
418 | |||
419 | OutPacket(tpCancel); | ||
420 | } | ||
421 | |||
422 | /// <summary> | ||
423 | /// | ||
424 | /// </summary> | ||
425 | public void SendTeleportLocationStart() | ||
426 | { | ||
427 | TeleportStartPacket tpStart = new TeleportStartPacket(); | ||
428 | tpStart.Info.TeleportFlags = 16; // Teleport via location | ||
429 | OutPacket(tpStart); | ||
430 | } | ||
431 | |||
432 | public void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance) | ||
433 | { | ||
434 | MoneyBalanceReplyPacket money = new MoneyBalanceReplyPacket(); | ||
435 | money.MoneyData.AgentID = this.AgentID; | ||
436 | money.MoneyData.TransactionID = transaction; | ||
437 | money.MoneyData.TransactionSuccess = success; | ||
438 | money.MoneyData.Description = description; | ||
439 | money.MoneyData.MoneyBalance = balance; | ||
440 | OutPacket(money); | ||
441 | } | ||
442 | |||
443 | #region Appearance/ Wearables Methods | ||
444 | |||
445 | /// <summary> | ||
446 | /// | ||
447 | /// </summary> | ||
448 | /// <param name="wearables"></param> | ||
449 | public void SendWearables(AvatarWearable[] wearables) | ||
450 | { | ||
451 | AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket(); | ||
452 | aw.AgentData.AgentID = this.AgentID; | ||
453 | aw.AgentData.SerialNum = 0; | ||
454 | aw.AgentData.SessionID = this.SessionID; | ||
455 | |||
456 | aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13]; | ||
457 | AgentWearablesUpdatePacket.WearableDataBlock awb; | ||
458 | for (int i = 0; i < wearables.Length; i++) | ||
459 | { | ||
460 | awb = new AgentWearablesUpdatePacket.WearableDataBlock(); | ||
461 | awb.WearableType = (byte)i; | ||
462 | awb.AssetID = wearables[i].AssetID; | ||
463 | awb.ItemID = wearables[i].ItemID; | ||
464 | aw.WearableData[i] = awb; | ||
465 | } | ||
466 | |||
467 | this.OutPacket(aw); | ||
468 | } | ||
469 | |||
470 | /// <summary> | ||
471 | /// | ||
472 | /// </summary> | ||
473 | /// <param name="agentID"></param> | ||
474 | /// <param name="visualParams"></param> | ||
475 | /// <param name="textureEntry"></param> | ||
476 | public void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry) | ||
477 | { | ||
478 | AvatarAppearancePacket avp = new AvatarAppearancePacket(); | ||
479 | avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218]; | ||
480 | avp.ObjectData.TextureEntry = textureEntry; | ||
481 | |||
482 | AvatarAppearancePacket.VisualParamBlock avblock = null; | ||
483 | for (int i = 0; i < visualParams.Length; i++) | ||
484 | { | ||
485 | avblock = new AvatarAppearancePacket.VisualParamBlock(); | ||
486 | avblock.ParamValue = visualParams[i]; | ||
487 | avp.VisualParam[i] = avblock; | ||
488 | } | ||
489 | |||
490 | avp.Sender.IsTrial = false; | ||
491 | avp.Sender.ID = agentID; | ||
492 | OutPacket(avp); | ||
493 | } | ||
494 | |||
495 | #endregion | ||
496 | |||
497 | #region Avatar Packet/data sending Methods | ||
498 | |||
499 | /// <summary> | ||
500 | /// | ||
501 | /// </summary> | ||
502 | /// <param name="regionInfo"></param> | ||
503 | /// <param name="firstName"></param> | ||
504 | /// <param name="lastName"></param> | ||
505 | /// <param name="avatarID"></param> | ||
506 | /// <param name="avatarLocalID"></param> | ||
507 | /// <param name="Pos"></param> | ||
508 | public void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos, byte[] textureEntry) | ||
509 | { | ||
510 | System.Text.Encoding _enc = System.Text.Encoding.ASCII; | ||
511 | //send a objectupdate packet with information about the clients avatar | ||
512 | |||
513 | ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); | ||
514 | objupdate.RegionData.RegionHandle = regionHandle; | ||
515 | objupdate.RegionData.TimeDilation = 64096; | ||
516 | objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; | ||
517 | objupdate.ObjectData[0] = this.CreateDefaultAvatarPacket(textureEntry); | ||
518 | //give this avatar object a local id and assign the user a name | ||
519 | |||
520 | objupdate.ObjectData[0].ID = avatarLocalID; | ||
521 | objupdate.ObjectData[0].FullID = avatarID; | ||
522 | objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstName + "\nLastName STRING RW SV " + lastName + " \0"); | ||
523 | libsecondlife.LLVector3 pos2 = new LLVector3((float)Pos.X, (float)Pos.Y, (float)Pos.Z); | ||
524 | byte[] pb = pos2.GetBytes(); | ||
525 | Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); | ||
526 | |||
527 | OutPacket(objupdate); | ||
528 | |||
529 | } | ||
530 | |||
531 | /// <summary> | ||
532 | /// | ||
533 | /// </summary> | ||
534 | /// <param name="regionHandle"></param> | ||
535 | /// <param name="timeDilation"></param> | ||
536 | /// <param name="localID"></param> | ||
537 | /// <param name="position"></param> | ||
538 | /// <param name="velocity"></param> | ||
539 | public void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity) | ||
540 | { | ||
541 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = this.CreateAvatarImprovedBlock(localID, position, velocity); | ||
542 | ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); | ||
543 | terse.RegionData.RegionHandle = regionHandle; | ||
544 | terse.RegionData.TimeDilation = timeDilation; | ||
545 | terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; | ||
546 | terse.ObjectData[0] = terseBlock; | ||
547 | |||
548 | this.OutPacket(terse); | ||
549 | } | ||
550 | |||
551 | #endregion | ||
552 | |||
553 | #region Primitive Packet/data Sending Methods | ||
554 | |||
555 | /// <summary> | ||
556 | /// | ||
557 | /// </summary> | ||
558 | /// <param name="localID"></param> | ||
559 | /// <param name="rotation"></param> | ||
560 | /// <param name="attachPoint"></param> | ||
561 | public void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint) | ||
562 | { | ||
563 | ObjectAttachPacket attach = new ObjectAttachPacket(); | ||
564 | attach.AgentData.AgentID = this.AgentID; | ||
565 | attach.AgentData.SessionID = this.SessionID; | ||
566 | attach.AgentData.AttachmentPoint = attachPoint; | ||
567 | attach.ObjectData = new ObjectAttachPacket.ObjectDataBlock[1]; | ||
568 | attach.ObjectData[0] = new ObjectAttachPacket.ObjectDataBlock(); | ||
569 | attach.ObjectData[0].ObjectLocalID = localID; | ||
570 | attach.ObjectData[0].Rotation = rotation; | ||
571 | |||
572 | this.OutPacket(attach); | ||
573 | } | ||
574 | |||
575 | /// <summary> | ||
576 | /// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive | ||
577 | /// or big changes to a existing primitive. | ||
578 | /// </summary> | ||
579 | /// <param name="regionHandle"></param> | ||
580 | /// <param name="timeDilation"></param> | ||
581 | /// <param name="localID"></param> | ||
582 | /// <param name="primData"></param> | ||
583 | /// <param name="pos"></param> | ||
584 | /// <param name="rotation"></param> | ||
585 | /// <param name="textureID"></param> | ||
586 | public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags) | ||
587 | { | ||
588 | ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); | ||
589 | outPacket.RegionData.RegionHandle = regionHandle; | ||
590 | outPacket.RegionData.TimeDilation = timeDilation; | ||
591 | outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; | ||
592 | outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID, flags); | ||
593 | outPacket.ObjectData[0].ID = localID; | ||
594 | outPacket.ObjectData[0].FullID = primData.FullID; | ||
595 | byte[] pb = pos.GetBytes(); | ||
596 | Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length); | ||
597 | byte[] rot = rotation.GetBytes(); | ||
598 | Array.Copy(rot, 0, outPacket.ObjectData[0].ObjectData, 48, rot.Length); | ||
599 | OutPacket(outPacket); | ||
600 | } | ||
601 | |||
602 | /// <summary> | ||
603 | /// Sends a full ObjectUpdatePacket to a client to inform it of a new primitive | ||
604 | /// or big changes to a existing primitive. | ||
605 | /// Uses default rotation | ||
606 | /// </summary> | ||
607 | /// <param name="primData"></param> | ||
608 | /// <param name="pos"></param> | ||
609 | public void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID , uint flags) | ||
610 | { | ||
611 | ObjectUpdatePacket outPacket = new ObjectUpdatePacket(); | ||
612 | outPacket.RegionData.RegionHandle = regionHandle; | ||
613 | outPacket.RegionData.TimeDilation = timeDilation; | ||
614 | outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; | ||
615 | outPacket.ObjectData[0] = this.CreatePrimUpdateBlock(primData, textureID, flags); | ||
616 | outPacket.ObjectData[0].ID = localID; | ||
617 | outPacket.ObjectData[0].FullID = primData.FullID; | ||
618 | byte[] pb = pos.GetBytes(); | ||
619 | Array.Copy(pb, 0, outPacket.ObjectData[0].ObjectData, 0, pb.Length); | ||
620 | |||
621 | OutPacket(outPacket); | ||
622 | } | ||
623 | |||
624 | /// <summary> | ||
625 | /// | ||
626 | /// </summary> | ||
627 | /// <param name="regionHandle"></param> | ||
628 | /// <param name="timeDilation"></param> | ||
629 | /// <param name="localID"></param> | ||
630 | /// <param name="position"></param> | ||
631 | /// <param name="rotation"></param> | ||
632 | public void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation) | ||
633 | { | ||
634 | ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); | ||
635 | terse.RegionData.RegionHandle = regionHandle; | ||
636 | terse.RegionData.TimeDilation = timeDilation; | ||
637 | terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; | ||
638 | terse.ObjectData[0] = this.CreatePrimImprovedBlock(localID, position, rotation); | ||
639 | |||
640 | this.OutPacket(terse); | ||
641 | } | ||
642 | |||
643 | #endregion | ||
644 | |||
645 | #endregion | ||
646 | |||
647 | #region Helper Methods | ||
648 | |||
649 | protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateAvatarImprovedBlock(uint localID, LLVector3 pos, LLVector3 velocity) | ||
650 | { | ||
651 | byte[] bytes = new byte[60]; | ||
652 | int i = 0; | ||
653 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); | ||
654 | |||
655 | dat.TextureEntry = new byte[0];// AvatarTemplate.TextureEntry; | ||
656 | |||
657 | uint ID = localID; | ||
658 | |||
659 | bytes[i++] = (byte)(ID % 256); | ||
660 | bytes[i++] = (byte)((ID >> 8) % 256); | ||
661 | bytes[i++] = (byte)((ID >> 16) % 256); | ||
662 | bytes[i++] = (byte)((ID >> 24) % 256); | ||
663 | bytes[i++] = 0; | ||
664 | bytes[i++] = 1; | ||
665 | i += 14; | ||
666 | bytes[i++] = 128; | ||
667 | bytes[i++] = 63; | ||
668 | |||
669 | byte[] pb = pos.GetBytes(); | ||
670 | Array.Copy(pb, 0, bytes, i, pb.Length); | ||
671 | i += 12; | ||
672 | ushort InternVelocityX; | ||
673 | ushort InternVelocityY; | ||
674 | ushort InternVelocityZ; | ||
675 | Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(0, 0, 0); | ||
676 | |||
677 | internDirec = new Axiom.MathLib.Vector3(velocity.X, velocity.Y, velocity.Z); | ||
678 | |||
679 | internDirec = internDirec / 128.0f; | ||
680 | internDirec.x += 1; | ||
681 | internDirec.y += 1; | ||
682 | internDirec.z += 1; | ||
683 | |||
684 | InternVelocityX = (ushort)(32768 * internDirec.x); | ||
685 | InternVelocityY = (ushort)(32768 * internDirec.y); | ||
686 | InternVelocityZ = (ushort)(32768 * internDirec.z); | ||
687 | |||
688 | ushort ac = 32767; | ||
689 | bytes[i++] = (byte)(InternVelocityX % 256); | ||
690 | bytes[i++] = (byte)((InternVelocityX >> 8) % 256); | ||
691 | bytes[i++] = (byte)(InternVelocityY % 256); | ||
692 | bytes[i++] = (byte)((InternVelocityY >> 8) % 256); | ||
693 | bytes[i++] = (byte)(InternVelocityZ % 256); | ||
694 | bytes[i++] = (byte)((InternVelocityZ >> 8) % 256); | ||
695 | |||
696 | //accel | ||
697 | bytes[i++] = (byte)(ac % 256); | ||
698 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
699 | bytes[i++] = (byte)(ac % 256); | ||
700 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
701 | bytes[i++] = (byte)(ac % 256); | ||
702 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
703 | |||
704 | //rot | ||
705 | bytes[i++] = (byte)(ac % 256); | ||
706 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
707 | bytes[i++] = (byte)(ac % 256); | ||
708 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
709 | bytes[i++] = (byte)(ac % 256); | ||
710 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
711 | bytes[i++] = (byte)(ac % 256); | ||
712 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
713 | |||
714 | //rotation vel | ||
715 | bytes[i++] = (byte)(ac % 256); | ||
716 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
717 | bytes[i++] = (byte)(ac % 256); | ||
718 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
719 | bytes[i++] = (byte)(ac % 256); | ||
720 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
721 | |||
722 | dat.Data = bytes; | ||
723 | return (dat); | ||
724 | } | ||
725 | |||
726 | /// <summary> | ||
727 | /// | ||
728 | /// </summary> | ||
729 | /// <param name="localID"></param> | ||
730 | /// <param name="position"></param> | ||
731 | /// <param name="rotation"></param> | ||
732 | /// <returns></returns> | ||
733 | protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreatePrimImprovedBlock(uint localID, LLVector3 position, LLQuaternion rotation) | ||
734 | { | ||
735 | uint ID = localID; | ||
736 | byte[] bytes = new byte[60]; | ||
737 | |||
738 | int i = 0; | ||
739 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); | ||
740 | dat.TextureEntry = new byte[0]; | ||
741 | bytes[i++] = (byte)(ID % 256); | ||
742 | bytes[i++] = (byte)((ID >> 8) % 256); | ||
743 | bytes[i++] = (byte)((ID >> 16) % 256); | ||
744 | bytes[i++] = (byte)((ID >> 24) % 256); | ||
745 | bytes[i++] = 0; | ||
746 | bytes[i++] = 0; | ||
747 | |||
748 | byte[] pb = position.GetBytes(); | ||
749 | Array.Copy(pb, 0, bytes, i, pb.Length); | ||
750 | i += 12; | ||
751 | ushort ac = 32767; | ||
752 | |||
753 | //vel | ||
754 | bytes[i++] = (byte)(ac % 256); | ||
755 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
756 | bytes[i++] = (byte)(ac % 256); | ||
757 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
758 | bytes[i++] = (byte)(ac % 256); | ||
759 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
760 | |||
761 | //accel | ||
762 | bytes[i++] = (byte)(ac % 256); | ||
763 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
764 | bytes[i++] = (byte)(ac % 256); | ||
765 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
766 | bytes[i++] = (byte)(ac % 256); | ||
767 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
768 | |||
769 | ushort rw, rx, ry, rz; | ||
770 | rw = (ushort)(32768 * (rotation.W + 1)); | ||
771 | rx = (ushort)(32768 * (rotation.X + 1)); | ||
772 | ry = (ushort)(32768 * (rotation.Y + 1)); | ||
773 | rz = (ushort)(32768 * (rotation.Z + 1)); | ||
774 | |||
775 | //rot | ||
776 | bytes[i++] = (byte)(rx % 256); | ||
777 | bytes[i++] = (byte)((rx >> 8) % 256); | ||
778 | bytes[i++] = (byte)(ry % 256); | ||
779 | bytes[i++] = (byte)((ry >> 8) % 256); | ||
780 | bytes[i++] = (byte)(rz % 256); | ||
781 | bytes[i++] = (byte)((rz >> 8) % 256); | ||
782 | bytes[i++] = (byte)(rw % 256); | ||
783 | bytes[i++] = (byte)((rw >> 8) % 256); | ||
784 | |||
785 | //rotation vel | ||
786 | bytes[i++] = (byte)(ac % 256); | ||
787 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
788 | bytes[i++] = (byte)(ac % 256); | ||
789 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
790 | bytes[i++] = (byte)(ac % 256); | ||
791 | bytes[i++] = (byte)((ac >> 8) % 256); | ||
792 | |||
793 | dat.Data = bytes; | ||
794 | return dat; | ||
795 | } | ||
796 | |||
797 | |||
798 | /// <summary> | ||
799 | /// Create the ObjectDataBlock for a ObjectUpdatePacket (for a Primitive) | ||
800 | /// </summary> | ||
801 | /// <param name="primData"></param> | ||
802 | /// <returns></returns> | ||
803 | protected ObjectUpdatePacket.ObjectDataBlock CreatePrimUpdateBlock(PrimData primData, LLUUID textureID, uint flags) | ||
804 | { | ||
805 | ObjectUpdatePacket.ObjectDataBlock objupdate = new ObjectUpdatePacket.ObjectDataBlock(); | ||
806 | this.SetDefaultPrimPacketValues(objupdate); | ||
807 | objupdate.UpdateFlags = flags; | ||
808 | this.SetPrimPacketShapeData(objupdate, primData, textureID); | ||
809 | |||
810 | return objupdate; | ||
811 | } | ||
812 | |||
813 | /// <summary> | ||
814 | /// Copy the data from a PrimData object to a ObjectUpdatePacket | ||
815 | /// </summary> | ||
816 | /// <param name="objectData"></param> | ||
817 | /// <param name="primData"></param> | ||
818 | protected void SetPrimPacketShapeData(ObjectUpdatePacket.ObjectDataBlock objectData, PrimData primData, LLUUID textureID) | ||
819 | { | ||
820 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(textureID); | ||
821 | objectData.TextureEntry = ntex.ToBytes(); | ||
822 | objectData.OwnerID = primData.OwnerID; | ||
823 | objectData.PCode = primData.PCode; | ||
824 | objectData.PathBegin = primData.PathBegin; | ||
825 | objectData.PathEnd = primData.PathEnd; | ||
826 | objectData.PathScaleX = primData.PathScaleX; | ||
827 | objectData.PathScaleY = primData.PathScaleY; | ||
828 | objectData.PathShearX = primData.PathShearX; | ||
829 | objectData.PathShearY = primData.PathShearY; | ||
830 | objectData.PathSkew = primData.PathSkew; | ||
831 | objectData.ProfileBegin = primData.ProfileBegin; | ||
832 | objectData.ProfileEnd = primData.ProfileEnd; | ||
833 | objectData.Scale = primData.Scale; | ||
834 | objectData.PathCurve = primData.PathCurve; | ||
835 | objectData.ProfileCurve = primData.ProfileCurve; | ||
836 | objectData.ParentID = primData.ParentID; | ||
837 | objectData.ProfileHollow = primData.ProfileHollow; | ||
838 | objectData.PathRadiusOffset = primData.PathRadiusOffset; | ||
839 | objectData.PathRevolutions = primData.PathRevolutions; | ||
840 | objectData.PathTaperX = primData.PathTaperX; | ||
841 | objectData.PathTaperY = primData.PathTaperY; | ||
842 | objectData.PathTwist = primData.PathTwist; | ||
843 | objectData.PathTwistBegin = primData.PathTwistBegin; | ||
844 | } | ||
845 | |||
846 | /// <summary> | ||
847 | /// Set some default values in a ObjectUpdatePacket | ||
848 | /// </summary> | ||
849 | /// <param name="objdata"></param> | ||
850 | protected void SetDefaultPrimPacketValues(ObjectUpdatePacket.ObjectDataBlock objdata) | ||
851 | { | ||
852 | objdata.PSBlock = new byte[0]; | ||
853 | objdata.ExtraParams = new byte[1]; | ||
854 | objdata.MediaURL = new byte[0]; | ||
855 | objdata.NameValue = new byte[0]; | ||
856 | objdata.Text = new byte[0]; | ||
857 | objdata.TextColor = new byte[4]; | ||
858 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
859 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
860 | objdata.Material = 3; | ||
861 | objdata.TextureAnim = new byte[0]; | ||
862 | objdata.Sound = LLUUID.Zero; | ||
863 | objdata.State = 0; | ||
864 | objdata.Data = new byte[0]; | ||
865 | |||
866 | objdata.ObjectData = new byte[60]; | ||
867 | objdata.ObjectData[46] = 128; | ||
868 | objdata.ObjectData[47] = 63; | ||
869 | } | ||
870 | |||
871 | |||
872 | /// <summary> | ||
873 | /// | ||
874 | /// </summary> | ||
875 | /// <returns></returns> | ||
876 | protected ObjectUpdatePacket.ObjectDataBlock CreateDefaultAvatarPacket(byte[] textureEntry) | ||
877 | { | ||
878 | libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock objdata = new ObjectUpdatePacket.ObjectDataBlock(); // new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock(data1, ref i); | ||
879 | |||
880 | SetDefaultAvatarPacketValues(ref objdata); | ||
881 | objdata.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); | ||
882 | objdata.PathCurve = 16; | ||
883 | objdata.ProfileCurve = 1; | ||
884 | objdata.PathScaleX = 100; | ||
885 | objdata.PathScaleY = 100; | ||
886 | objdata.ParentID = 0; | ||
887 | objdata.OwnerID = LLUUID.Zero; | ||
888 | objdata.Scale = new LLVector3(1, 1, 1); | ||
889 | objdata.PCode = 47; | ||
890 | if (textureEntry != null) | ||
891 | { | ||
892 | objdata.TextureEntry = textureEntry; | ||
893 | } | ||
894 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
895 | libsecondlife.LLVector3 pos = new LLVector3(objdata.ObjectData, 16); | ||
896 | pos.X = 100f; | ||
897 | objdata.ID = 8880000; | ||
898 | objdata.NameValue = enc.GetBytes("FirstName STRING RW SV Test \nLastName STRING RW SV User \0"); | ||
899 | libsecondlife.LLVector3 pos2 = new LLVector3(100f, 100f, 23f); | ||
900 | //objdata.FullID=user.AgentID; | ||
901 | byte[] pb = pos.GetBytes(); | ||
902 | Array.Copy(pb, 0, objdata.ObjectData, 16, pb.Length); | ||
903 | |||
904 | return objdata; | ||
905 | } | ||
906 | |||
907 | /// <summary> | ||
908 | /// | ||
909 | /// </summary> | ||
910 | /// <param name="objdata"></param> | ||
911 | protected void SetDefaultAvatarPacketValues(ref ObjectUpdatePacket.ObjectDataBlock objdata) | ||
912 | { | ||
913 | objdata.PSBlock = new byte[0]; | ||
914 | objdata.ExtraParams = new byte[1]; | ||
915 | objdata.MediaURL = new byte[0]; | ||
916 | objdata.NameValue = new byte[0]; | ||
917 | objdata.Text = new byte[0]; | ||
918 | objdata.TextColor = new byte[4]; | ||
919 | objdata.JointAxisOrAnchor = new LLVector3(0, 0, 0); | ||
920 | objdata.JointPivot = new LLVector3(0, 0, 0); | ||
921 | objdata.Material = 4; | ||
922 | objdata.TextureAnim = new byte[0]; | ||
923 | objdata.Sound = LLUUID.Zero; | ||
924 | LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); | ||
925 | objdata.TextureEntry = ntex.ToBytes(); | ||
926 | objdata.State = 0; | ||
927 | objdata.Data = new byte[0]; | ||
928 | |||
929 | objdata.ObjectData = new byte[76]; | ||
930 | objdata.ObjectData[15] = 128; | ||
931 | objdata.ObjectData[16] = 63; | ||
932 | objdata.ObjectData[56] = 128; | ||
933 | objdata.ObjectData[61] = 102; | ||
934 | objdata.ObjectData[62] = 40; | ||
935 | objdata.ObjectData[63] = 61; | ||
936 | objdata.ObjectData[64] = 189; | ||
937 | } | ||
938 | |||
939 | /// <summary> | ||
940 | /// | ||
941 | /// </summary> | ||
942 | /// <param name="addPacket"></param> | ||
943 | /// <returns></returns> | ||
944 | protected PrimData CreatePrimFromObjectAdd(ObjectAddPacket addPacket) | ||
945 | { | ||
946 | PrimData PData = new PrimData(); | ||
947 | PData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
948 | PData.PCode = addPacket.ObjectData.PCode; | ||
949 | PData.PathBegin = addPacket.ObjectData.PathBegin; | ||
950 | PData.PathEnd = addPacket.ObjectData.PathEnd; | ||
951 | PData.PathScaleX = addPacket.ObjectData.PathScaleX; | ||
952 | PData.PathScaleY = addPacket.ObjectData.PathScaleY; | ||
953 | PData.PathShearX = addPacket.ObjectData.PathShearX; | ||
954 | PData.PathShearY = addPacket.ObjectData.PathShearY; | ||
955 | PData.PathSkew = addPacket.ObjectData.PathSkew; | ||
956 | PData.ProfileBegin = addPacket.ObjectData.ProfileBegin; | ||
957 | PData.ProfileEnd = addPacket.ObjectData.ProfileEnd; | ||
958 | PData.Scale = addPacket.ObjectData.Scale; | ||
959 | PData.PathCurve = addPacket.ObjectData.PathCurve; | ||
960 | PData.ProfileCurve = addPacket.ObjectData.ProfileCurve; | ||
961 | PData.ParentID = 0; | ||
962 | PData.ProfileHollow = addPacket.ObjectData.ProfileHollow; | ||
963 | PData.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset; | ||
964 | PData.PathRevolutions = addPacket.ObjectData.PathRevolutions; | ||
965 | PData.PathTaperX = addPacket.ObjectData.PathTaperX; | ||
966 | PData.PathTaperY = addPacket.ObjectData.PathTaperY; | ||
967 | PData.PathTwist = addPacket.ObjectData.PathTwist; | ||
968 | PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin; | ||
969 | |||
970 | return PData; | ||
971 | } | ||
972 | #endregion | ||
973 | |||
974 | } | ||
975 | } | ||
diff --git a/OpenSim/Region/ClientStack/ClientView.AgentAssetUpload.cs b/OpenSim/Region/ClientStack/ClientView.AgentAssetUpload.cs new file mode 100644 index 0000000..914c38a --- /dev/null +++ b/OpenSim/Region/ClientStack/ClientView.AgentAssetUpload.cs | |||
@@ -0,0 +1,358 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Assets; | ||
32 | using OpenSim.Framework.Types; | ||
33 | using OpenSim.Framework.Interfaces; | ||
34 | using OpenSim.Framework.Utilities; | ||
35 | using OpenSim.Caches; | ||
36 | using libsecondlife; | ||
37 | using libsecondlife.Packets; | ||
38 | |||
39 | namespace OpenSim | ||
40 | { | ||
41 | partial class ClientView | ||
42 | { | ||
43 | public class AgentAssetUpload | ||
44 | { | ||
45 | private Dictionary<LLUUID, AssetTransaction> transactions = new Dictionary<LLUUID, AssetTransaction>(); | ||
46 | private ClientView ourClient; | ||
47 | private AssetCache m_assetCache; | ||
48 | private InventoryCache m_inventoryCache; | ||
49 | |||
50 | public AgentAssetUpload(ClientView client, AssetCache assetCache, InventoryCache inventoryCache) | ||
51 | { | ||
52 | this.ourClient = client; | ||
53 | m_assetCache = assetCache; | ||
54 | m_inventoryCache = inventoryCache; | ||
55 | } | ||
56 | |||
57 | public void AddUpload(LLUUID transactionID, AssetBase asset) | ||
58 | { | ||
59 | AssetTransaction upload = new AssetTransaction(); | ||
60 | lock (this.transactions) | ||
61 | { | ||
62 | upload.Asset = asset; | ||
63 | upload.TransactionID = transactionID; | ||
64 | this.transactions.Add(transactionID, upload); | ||
65 | } | ||
66 | if (upload.Asset.Data.Length > 2) | ||
67 | { | ||
68 | //is complete | ||
69 | upload.UploadComplete = true; | ||
70 | AssetUploadCompletePacket response = new AssetUploadCompletePacket(); | ||
71 | response.AssetBlock.Type = asset.Type; | ||
72 | response.AssetBlock.Success = true; | ||
73 | response.AssetBlock.UUID = transactionID.Combine(this.ourClient.SecureSessionID); | ||
74 | this.ourClient.OutPacket(response); | ||
75 | m_assetCache.AddAsset(asset); | ||
76 | } | ||
77 | else | ||
78 | { | ||
79 | upload.UploadComplete = false; | ||
80 | upload.XferID = Util.GetNextXferID(); | ||
81 | RequestXferPacket xfer = new RequestXferPacket(); | ||
82 | xfer.XferID.ID = upload.XferID; | ||
83 | xfer.XferID.VFileType = upload.Asset.Type; | ||
84 | xfer.XferID.VFileID = transactionID.Combine(this.ourClient.SecureSessionID); | ||
85 | xfer.XferID.FilePath = 0; | ||
86 | xfer.XferID.Filename = new byte[0]; | ||
87 | this.ourClient.OutPacket(xfer); | ||
88 | } | ||
89 | |||
90 | } | ||
91 | |||
92 | public AssetBase GetUpload(LLUUID transactionID) | ||
93 | { | ||
94 | if (this.transactions.ContainsKey(transactionID)) | ||
95 | { | ||
96 | return this.transactions[transactionID].Asset; | ||
97 | } | ||
98 | |||
99 | return null; | ||
100 | } | ||
101 | |||
102 | public void HandleUploadPacket(AssetUploadRequestPacket pack, LLUUID assetID) | ||
103 | { | ||
104 | // Console.Write("asset upload request , type = " + pack.AssetBlock.Type.ToString()); | ||
105 | AssetBase asset = null; | ||
106 | if (pack.AssetBlock.Type == 0) | ||
107 | { | ||
108 | |||
109 | //first packet for transaction | ||
110 | asset = new AssetBase(); | ||
111 | asset.FullID = assetID; | ||
112 | asset.Type = pack.AssetBlock.Type; | ||
113 | asset.InvType = asset.Type; | ||
114 | asset.Name = "UploadedTexture" + Util.RandomClass.Next(1, 1000).ToString("000"); | ||
115 | asset.Data = pack.AssetBlock.AssetData; | ||
116 | |||
117 | |||
118 | } | ||
119 | else if (pack.AssetBlock.Type == 13 | pack.AssetBlock.Type == 5 | pack.AssetBlock.Type == 7) | ||
120 | { | ||
121 | |||
122 | asset = new AssetBase(); | ||
123 | asset.FullID = assetID; | ||
124 | // Console.WriteLine("skin asset id is " + assetID.ToStringHyphenated()); | ||
125 | asset.Type = pack.AssetBlock.Type; | ||
126 | asset.InvType = asset.Type; | ||
127 | asset.Name = "NewClothing" + Util.RandomClass.Next(1, 1000).ToString("000"); | ||
128 | asset.Data = pack.AssetBlock.AssetData; | ||
129 | |||
130 | |||
131 | } | ||
132 | |||
133 | if (asset != null) | ||
134 | { | ||
135 | this.AddUpload(pack.AssetBlock.TransactionID, asset); | ||
136 | } | ||
137 | else | ||
138 | { | ||
139 | |||
140 | //currently we don't support this asset type | ||
141 | //so lets just tell the client that the upload is complete | ||
142 | AssetUploadCompletePacket response = new AssetUploadCompletePacket(); | ||
143 | response.AssetBlock.Type = pack.AssetBlock.Type; | ||
144 | response.AssetBlock.Success = true; | ||
145 | response.AssetBlock.UUID = pack.AssetBlock.TransactionID.Combine(this.ourClient.SecureSessionID); | ||
146 | this.ourClient.OutPacket(response); | ||
147 | } | ||
148 | |||
149 | } | ||
150 | |||
151 | #region Xfer packet system for larger uploads | ||
152 | |||
153 | public void HandleXferPacket(SendXferPacketPacket xferPacket) | ||
154 | { | ||
155 | lock (this.transactions) | ||
156 | { | ||
157 | foreach (AssetTransaction trans in this.transactions.Values) | ||
158 | { | ||
159 | if (trans.XferID == xferPacket.XferID.ID) | ||
160 | { | ||
161 | if (trans.Asset.Data.Length > 1) | ||
162 | { | ||
163 | byte[] newArray = new byte[trans.Asset.Data.Length + xferPacket.DataPacket.Data.Length]; | ||
164 | Array.Copy(trans.Asset.Data, 0, newArray, 0, trans.Asset.Data.Length); | ||
165 | Array.Copy(xferPacket.DataPacket.Data, 0, newArray, trans.Asset.Data.Length, xferPacket.DataPacket.Data.Length); | ||
166 | trans.Asset.Data = newArray; | ||
167 | } | ||
168 | else | ||
169 | { | ||
170 | byte[] newArray = new byte[xferPacket.DataPacket.Data.Length - 4]; | ||
171 | Array.Copy(xferPacket.DataPacket.Data, 4, newArray, 0, xferPacket.DataPacket.Data.Length - 4); | ||
172 | trans.Asset.Data = newArray; | ||
173 | } | ||
174 | |||
175 | if ((xferPacket.XferID.Packet & 2147483648) != 0) | ||
176 | { | ||
177 | //end of transfer | ||
178 | trans.UploadComplete = true; | ||
179 | AssetUploadCompletePacket response = new AssetUploadCompletePacket(); | ||
180 | response.AssetBlock.Type = trans.Asset.Type; | ||
181 | response.AssetBlock.Success = true; | ||
182 | response.AssetBlock.UUID = trans.TransactionID.Combine(this.ourClient.SecureSessionID); | ||
183 | this.ourClient.OutPacket(response); | ||
184 | |||
185 | m_assetCache.AddAsset(trans.Asset); | ||
186 | //check if we should add it to inventory | ||
187 | if (trans.AddToInventory) | ||
188 | { | ||
189 | // m_assetCache.AddAsset(trans.Asset); | ||
190 | m_inventoryCache.AddNewInventoryItem(this.ourClient, trans.InventFolder, trans.Asset); | ||
191 | } | ||
192 | |||
193 | |||
194 | } | ||
195 | break; | ||
196 | } | ||
197 | |||
198 | } | ||
199 | } | ||
200 | |||
201 | ConfirmXferPacketPacket confirmXfer = new ConfirmXferPacketPacket(); | ||
202 | confirmXfer.XferID.ID = xferPacket.XferID.ID; | ||
203 | confirmXfer.XferID.Packet = xferPacket.XferID.Packet; | ||
204 | this.ourClient.OutPacket(confirmXfer); | ||
205 | } | ||
206 | |||
207 | #endregion | ||
208 | |||
209 | public AssetBase AddUploadToAssetCache(LLUUID transactionID) | ||
210 | { | ||
211 | AssetBase asset = null; | ||
212 | if (this.transactions.ContainsKey(transactionID)) | ||
213 | { | ||
214 | AssetTransaction trans = this.transactions[transactionID]; | ||
215 | if (trans.UploadComplete) | ||
216 | { | ||
217 | m_assetCache.AddAsset(trans.Asset); | ||
218 | asset = trans.Asset; | ||
219 | } | ||
220 | } | ||
221 | |||
222 | return asset; | ||
223 | } | ||
224 | |||
225 | public void CreateInventoryItem(CreateInventoryItemPacket packet) | ||
226 | { | ||
227 | if (this.transactions.ContainsKey(packet.InventoryBlock.TransactionID)) | ||
228 | { | ||
229 | AssetTransaction trans = this.transactions[packet.InventoryBlock.TransactionID]; | ||
230 | trans.Asset.Description = Util.FieldToString(packet.InventoryBlock.Description); | ||
231 | trans.Asset.Name = Util.FieldToString(packet.InventoryBlock.Name); | ||
232 | trans.Asset.Type = packet.InventoryBlock.Type; | ||
233 | trans.Asset.InvType = packet.InventoryBlock.InvType; | ||
234 | if (trans.UploadComplete) | ||
235 | { | ||
236 | //already complete so we can add it to the inventory | ||
237 | //m_assetCache.AddAsset(trans.Asset); | ||
238 | m_inventoryCache.AddNewInventoryItem(this.ourClient, packet.InventoryBlock.FolderID, trans.Asset); | ||
239 | } | ||
240 | else | ||
241 | { | ||
242 | trans.AddToInventory = true; | ||
243 | trans.InventFolder = packet.InventoryBlock.FolderID; | ||
244 | } | ||
245 | } | ||
246 | } | ||
247 | |||
248 | private class AssetTransaction | ||
249 | { | ||
250 | public uint XferID; | ||
251 | public AssetBase Asset; | ||
252 | public bool AddToInventory; | ||
253 | public LLUUID InventFolder = LLUUID.Zero; | ||
254 | public bool UploadComplete = false; | ||
255 | public LLUUID TransactionID = LLUUID.Zero; | ||
256 | |||
257 | public AssetTransaction() | ||
258 | { | ||
259 | |||
260 | } | ||
261 | } | ||
262 | |||
263 | //new class , not currently used. | ||
264 | public class AssetXferUploader | ||
265 | { | ||
266 | private IClientAPI ourClient; | ||
267 | |||
268 | public bool UploadComplete = false; | ||
269 | |||
270 | public bool AddToInventory; | ||
271 | public LLUUID InventFolder = LLUUID.Zero; | ||
272 | |||
273 | public uint XferID; | ||
274 | public AssetBase Asset; | ||
275 | public LLUUID TransactionID = LLUUID.Zero; | ||
276 | |||
277 | |||
278 | public AssetXferUploader(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, byte[] data) | ||
279 | { | ||
280 | ourClient = remoteClient; | ||
281 | Asset = new AssetBase(); | ||
282 | Asset.FullID = assetID; | ||
283 | Asset.InvType = type; | ||
284 | Asset.Type = type; | ||
285 | Asset.Data = data; | ||
286 | Asset.Name = "blank"; | ||
287 | Asset.Description = "empty"; | ||
288 | TransactionID = transaction; | ||
289 | |||
290 | if (Asset.Data.Length > 2) | ||
291 | { | ||
292 | //data block should only have data in it, if there is no more data to be uploaded | ||
293 | this.SendCompleteMessage(); | ||
294 | } | ||
295 | else | ||
296 | { | ||
297 | this.ReqestStartXfer(); | ||
298 | } | ||
299 | } | ||
300 | |||
301 | protected void SendCompleteMessage() | ||
302 | { | ||
303 | UploadComplete = true; | ||
304 | AssetUploadCompletePacket response = new AssetUploadCompletePacket(); | ||
305 | response.AssetBlock.Type = Asset.Type; | ||
306 | response.AssetBlock.Success = true; | ||
307 | response.AssetBlock.UUID = Asset.FullID; | ||
308 | this.ourClient.OutPacket(response); | ||
309 | |||
310 | //TODO trigger event | ||
311 | } | ||
312 | |||
313 | protected void ReqestStartXfer() | ||
314 | { | ||
315 | UploadComplete = false; | ||
316 | XferID = Util.GetNextXferID(); | ||
317 | RequestXferPacket xfer = new RequestXferPacket(); | ||
318 | xfer.XferID.ID = XferID; | ||
319 | xfer.XferID.VFileType = Asset.Type; | ||
320 | xfer.XferID.VFileID = Asset.FullID; | ||
321 | xfer.XferID.FilePath = 0; | ||
322 | xfer.XferID.Filename = new byte[0]; | ||
323 | this.ourClient.OutPacket(xfer); | ||
324 | } | ||
325 | |||
326 | public void HandleXferPacket(uint xferID, uint packetID, byte[] data) | ||
327 | { | ||
328 | if (XferID == xferID) | ||
329 | { | ||
330 | if (Asset.Data.Length > 1) | ||
331 | { | ||
332 | byte[] newArray = new byte[Asset.Data.Length + data.Length]; | ||
333 | Array.Copy(Asset.Data, 0, newArray, 0, Asset.Data.Length); | ||
334 | Array.Copy(data, 0, newArray, Asset.Data.Length, data.Length); | ||
335 | Asset.Data = newArray; | ||
336 | } | ||
337 | else | ||
338 | { | ||
339 | byte[] newArray = new byte[data.Length - 4]; | ||
340 | Array.Copy(data, 4, newArray, 0, data.Length - 4); | ||
341 | Asset.Data = newArray; | ||
342 | } | ||
343 | |||
344 | ConfirmXferPacketPacket confirmXfer = new ConfirmXferPacketPacket(); | ||
345 | confirmXfer.XferID.ID = xferID; | ||
346 | confirmXfer.XferID.Packet = packetID; | ||
347 | this.ourClient.OutPacket(confirmXfer); | ||
348 | |||
349 | if ((packetID & 2147483648) != 0) | ||
350 | { | ||
351 | this.SendCompleteMessage(); | ||
352 | } | ||
353 | } | ||
354 | } | ||
355 | } | ||
356 | } | ||
357 | } | ||
358 | } | ||
diff --git a/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs new file mode 100644 index 0000000..32aed02 --- /dev/null +++ b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs | |||
@@ -0,0 +1,198 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using Nwc.XmlRpc; | ||
34 | using System.Net; | ||
35 | using System.Net.Sockets; | ||
36 | using System.IO; | ||
37 | using System.Threading; | ||
38 | using System.Timers; | ||
39 | using OpenSim.Framework.Interfaces; | ||
40 | using OpenSim.Framework.Types; | ||
41 | using OpenSim.Framework.Inventory; | ||
42 | using OpenSim.Framework.Utilities; | ||
43 | using OpenSim.Assets; | ||
44 | |||
45 | namespace OpenSim | ||
46 | { | ||
47 | public partial class ClientView | ||
48 | { | ||
49 | protected virtual void RegisterLocalPacketHandlers() | ||
50 | { | ||
51 | this.AddLocalPacketHandler(PacketType.LogoutRequest, this.Logout); | ||
52 | this.AddLocalPacketHandler(PacketType.AgentCachedTexture, this.AgentTextureCached); | ||
53 | this.AddLocalPacketHandler(PacketType.MultipleObjectUpdate, this.MultipleObjUpdate); | ||
54 | } | ||
55 | |||
56 | protected virtual bool Logout(ClientView simClient, Packet packet) | ||
57 | { | ||
58 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "OpenSimClient.cs:ProcessInPacket() - Got a logout request"); | ||
59 | //send reply to let the client logout | ||
60 | LogoutReplyPacket logReply = new LogoutReplyPacket(); | ||
61 | logReply.AgentData.AgentID = this.AgentID; | ||
62 | logReply.AgentData.SessionID = this.SessionID; | ||
63 | logReply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[1]; | ||
64 | logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock(); | ||
65 | logReply.InventoryData[0].ItemID = LLUUID.Zero; | ||
66 | OutPacket(logReply); | ||
67 | //tell all clients to kill our object | ||
68 | KillObjectPacket kill = new KillObjectPacket(); | ||
69 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; | ||
70 | kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); | ||
71 | // kill.ObjectData[0].ID = this.ClientAvatar.localid; | ||
72 | foreach (ClientView client in m_clientThreads.Values) | ||
73 | { | ||
74 | client.OutPacket(kill); | ||
75 | } | ||
76 | |||
77 | this.m_inventoryCache.ClientLeaving(this.AgentID, null); | ||
78 | |||
79 | |||
80 | // m_gridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode); | ||
81 | /*lock (m_world.Entities) | ||
82 | { | ||
83 | m_world.Entities.Remove(this.AgentID); | ||
84 | }*/ | ||
85 | // m_world.RemoveViewerAgent(this); | ||
86 | //need to do other cleaning up here too | ||
87 | m_clientThreads.Remove(this.CircuitCode); | ||
88 | m_networkServer.RemoveClientCircuit(this.CircuitCode); | ||
89 | this.ClientThread.Abort(); | ||
90 | return true; | ||
91 | } | ||
92 | |||
93 | protected bool AgentTextureCached(ClientView simclient, Packet packet) | ||
94 | { | ||
95 | // Console.WriteLine(packet.ToString()); | ||
96 | AgentCachedTexturePacket chechedtex = (AgentCachedTexturePacket)packet; | ||
97 | AgentCachedTextureResponsePacket cachedresp = new AgentCachedTextureResponsePacket(); | ||
98 | cachedresp.AgentData.AgentID = this.AgentID; | ||
99 | cachedresp.AgentData.SessionID = this.SessionID; | ||
100 | cachedresp.AgentData.SerialNum = this.cachedtextureserial; | ||
101 | this.cachedtextureserial++; | ||
102 | cachedresp.WearableData = new AgentCachedTextureResponsePacket.WearableDataBlock[chechedtex.WearableData.Length]; | ||
103 | for (int i = 0; i < chechedtex.WearableData.Length; i++) | ||
104 | { | ||
105 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||
106 | cachedresp.WearableData[i].TextureIndex = chechedtex.WearableData[i].TextureIndex; | ||
107 | cachedresp.WearableData[i].TextureID = LLUUID.Zero; | ||
108 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
109 | } | ||
110 | this.OutPacket(cachedresp); | ||
111 | return true; | ||
112 | } | ||
113 | |||
114 | protected bool MultipleObjUpdate(ClientView simClient, Packet packet) | ||
115 | { | ||
116 | MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet; | ||
117 | for (int i = 0; i < multipleupdate.ObjectData.Length; i++) | ||
118 | { | ||
119 | if (multipleupdate.ObjectData[i].Type == 9) //change position | ||
120 | { | ||
121 | if (OnUpdatePrimPosition != null) | ||
122 | { | ||
123 | libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); | ||
124 | OnUpdatePrimPosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this); | ||
125 | } | ||
126 | //should update stored position of the prim | ||
127 | } | ||
128 | else if (multipleupdate.ObjectData[i].Type == 10)//rotation | ||
129 | { | ||
130 | if (OnUpdatePrimRotation != null) | ||
131 | { | ||
132 | libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true); | ||
133 | OnUpdatePrimRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this); | ||
134 | } | ||
135 | } | ||
136 | else if (multipleupdate.ObjectData[i].Type == 13)//scale | ||
137 | { | ||
138 | if (OnUpdatePrimScale != null) | ||
139 | { | ||
140 | libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12); | ||
141 | OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this); | ||
142 | } | ||
143 | } | ||
144 | } | ||
145 | return true; | ||
146 | } | ||
147 | |||
148 | public void RequestMapLayer() | ||
149 | { | ||
150 | //should be getting the map layer from the grid server | ||
151 | //send a layer covering the 800,800 - 1200,1200 area (should be covering the requested area) | ||
152 | MapLayerReplyPacket mapReply = new MapLayerReplyPacket(); | ||
153 | mapReply.AgentData.AgentID = this.AgentID; | ||
154 | mapReply.AgentData.Flags = 0; | ||
155 | mapReply.LayerData = new MapLayerReplyPacket.LayerDataBlock[1]; | ||
156 | mapReply.LayerData[0] = new MapLayerReplyPacket.LayerDataBlock(); | ||
157 | mapReply.LayerData[0].Bottom = 0; | ||
158 | mapReply.LayerData[0].Left = 0; | ||
159 | mapReply.LayerData[0].Top = 30000; | ||
160 | mapReply.LayerData[0].Right = 30000; | ||
161 | mapReply.LayerData[0].ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); | ||
162 | this.OutPacket(mapReply); | ||
163 | } | ||
164 | |||
165 | public void RequestMapBlocks(int minX, int minY, int maxX, int maxY) | ||
166 | { | ||
167 | /* | ||
168 | IList simMapProfiles = m_gridServer.RequestMapBlocks(minX, minY, maxX, maxY); | ||
169 | MapBlockReplyPacket mbReply = new MapBlockReplyPacket(); | ||
170 | mbReply.AgentData.AgentID = this.AgentID; | ||
171 | int len; | ||
172 | if (simMapProfiles == null) | ||
173 | len = 0; | ||
174 | else | ||
175 | len = simMapProfiles.Count; | ||
176 | |||
177 | mbReply.Data = new MapBlockReplyPacket.DataBlock[len]; | ||
178 | int iii; | ||
179 | for (iii = 0; iii < len; iii++) | ||
180 | { | ||
181 | Hashtable mp = (Hashtable)simMapProfiles[iii]; | ||
182 | mbReply.Data[iii] = new MapBlockReplyPacket.DataBlock(); | ||
183 | mbReply.Data[iii].Name = System.Text.Encoding.UTF8.GetBytes((string)mp["name"]); | ||
184 | mbReply.Data[iii].Access = System.Convert.ToByte(mp["access"]); | ||
185 | mbReply.Data[iii].Agents = System.Convert.ToByte(mp["agents"]); | ||
186 | mbReply.Data[iii].MapImageID = new LLUUID((string)mp["map-image-id"]); | ||
187 | mbReply.Data[iii].RegionFlags = System.Convert.ToUInt32(mp["region-flags"]); | ||
188 | mbReply.Data[iii].WaterHeight = System.Convert.ToByte(mp["water-height"]); | ||
189 | mbReply.Data[iii].X = System.Convert.ToUInt16(mp["x"]); | ||
190 | mbReply.Data[iii].Y = System.Convert.ToUInt16(mp["y"]); | ||
191 | } | ||
192 | this.OutPacket(mbReply); | ||
193 | */ | ||
194 | } | ||
195 | |||
196 | |||
197 | } | ||
198 | } | ||
diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs new file mode 100644 index 0000000..191ef21 --- /dev/null +++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs | |||
@@ -0,0 +1,550 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using Nwc.XmlRpc; | ||
34 | using System.Net; | ||
35 | using System.Net.Sockets; | ||
36 | using System.IO; | ||
37 | using System.Threading; | ||
38 | using System.Timers; | ||
39 | using OpenSim.Framework.Interfaces; | ||
40 | using OpenSim.Framework.Types; | ||
41 | using OpenSim.Framework.Inventory; | ||
42 | using OpenSim.Framework.Utilities; | ||
43 | using OpenSim.Assets; | ||
44 | |||
45 | namespace OpenSim | ||
46 | { | ||
47 | public partial class ClientView | ||
48 | { | ||
49 | protected override void ProcessInPacket(Packet Pack) | ||
50 | { | ||
51 | ack_pack(Pack); | ||
52 | if (debug) | ||
53 | { | ||
54 | if (Pack.Type != PacketType.AgentUpdate) | ||
55 | { | ||
56 | Console.WriteLine(Pack.Type.ToString()); | ||
57 | } | ||
58 | } | ||
59 | |||
60 | if (this.ProcessPacketMethod(Pack)) | ||
61 | { | ||
62 | //there is a handler registered that handled this packet type | ||
63 | return; | ||
64 | } | ||
65 | else | ||
66 | { | ||
67 | System.Text.Encoding _enc = System.Text.Encoding.ASCII; | ||
68 | |||
69 | switch (Pack.Type) | ||
70 | { | ||
71 | case PacketType.ViewerEffect: | ||
72 | ViewerEffectPacket viewer = (ViewerEffectPacket)Pack; | ||
73 | foreach (ClientView client in m_clientThreads.Values) | ||
74 | { | ||
75 | if (client.AgentID != this.AgentID) | ||
76 | { | ||
77 | viewer.AgentData.AgentID = client.AgentID; | ||
78 | viewer.AgentData.SessionID = client.SessionID; | ||
79 | client.OutPacket(viewer); | ||
80 | } | ||
81 | } | ||
82 | break; | ||
83 | |||
84 | #region World/Avatar | ||
85 | case PacketType.ChatFromViewer: | ||
86 | ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack; | ||
87 | if (Util.FieldToString(inchatpack.ChatData.Message) == "") | ||
88 | { | ||
89 | //empty message so don't bother with it | ||
90 | break; | ||
91 | } | ||
92 | string fromName = ""; //ClientAvatar.firstname + " " + ClientAvatar.lastname; | ||
93 | byte[] message = inchatpack.ChatData.Message; | ||
94 | byte type = inchatpack.ChatData.Type; | ||
95 | LLVector3 fromPos = new LLVector3(); // ClientAvatar.Pos; | ||
96 | LLUUID fromAgentID = AgentID; | ||
97 | if (OnChatFromViewer != null) | ||
98 | { | ||
99 | this.OnChatFromViewer(message, type, fromPos, fromName, fromAgentID); | ||
100 | } | ||
101 | break; | ||
102 | case PacketType.RezObject: | ||
103 | RezObjectPacket rezPacket = (RezObjectPacket)Pack; | ||
104 | AgentInventory inven = this.m_inventoryCache.GetAgentsInventory(this.AgentID); | ||
105 | if (inven != null) | ||
106 | { | ||
107 | if (inven.InventoryItems.ContainsKey(rezPacket.InventoryData.ItemID)) | ||
108 | { | ||
109 | AssetBase asset = this.m_assetCache.GetAsset(inven.InventoryItems[rezPacket.InventoryData.ItemID].AssetID); | ||
110 | if (asset != null) | ||
111 | { | ||
112 | if (OnRezObject != null) | ||
113 | { | ||
114 | this.OnRezObject(asset, rezPacket.RezData.RayEnd); | ||
115 | this.m_inventoryCache.DeleteInventoryItem(this, rezPacket.InventoryData.ItemID); | ||
116 | } | ||
117 | } | ||
118 | } | ||
119 | } | ||
120 | break; | ||
121 | case PacketType.DeRezObject: | ||
122 | if (OnDeRezObject != null) | ||
123 | { | ||
124 | OnDeRezObject(Pack, this); | ||
125 | } | ||
126 | break; | ||
127 | case PacketType.ModifyLand: | ||
128 | ModifyLandPacket modify = (ModifyLandPacket)Pack; | ||
129 | if (modify.ParcelData.Length > 0) | ||
130 | { | ||
131 | if (OnModifyTerrain != null) | ||
132 | { | ||
133 | OnModifyTerrain(modify.ModifyBlock.Height, modify.ModifyBlock.Seconds, modify.ModifyBlock.BrushSize, | ||
134 | modify.ModifyBlock.Action, modify.ParcelData[0].North, modify.ParcelData[0].West); | ||
135 | } | ||
136 | } | ||
137 | break; | ||
138 | case PacketType.RegionHandshakeReply: | ||
139 | if (OnRegionHandShakeReply != null) | ||
140 | { | ||
141 | OnRegionHandShakeReply(this); | ||
142 | } | ||
143 | break; | ||
144 | case PacketType.AgentWearablesRequest: | ||
145 | if (OnRequestWearables != null) | ||
146 | { | ||
147 | OnRequestWearables(this); | ||
148 | } | ||
149 | if (OnRequestAvatarsData != null) | ||
150 | { | ||
151 | OnRequestAvatarsData(this); | ||
152 | } | ||
153 | break; | ||
154 | case PacketType.AgentSetAppearance: | ||
155 | AgentSetAppearancePacket appear = (AgentSetAppearancePacket)Pack; | ||
156 | if (OnSetAppearance != null) | ||
157 | { | ||
158 | OnSetAppearance(appear.ObjectData.TextureEntry, appear.VisualParam); | ||
159 | } | ||
160 | break; | ||
161 | case PacketType.CompleteAgentMovement: | ||
162 | if (OnCompleteMovementToRegion != null) | ||
163 | { | ||
164 | OnCompleteMovementToRegion(); | ||
165 | } | ||
166 | break; | ||
167 | case PacketType.AgentUpdate: | ||
168 | if (OnAgentUpdate != null) | ||
169 | { | ||
170 | AgentUpdatePacket agenUpdate = (AgentUpdatePacket) Pack; | ||
171 | OnAgentUpdate(this, agenUpdate.AgentData.ControlFlags, agenUpdate.AgentData.BodyRotation ); | ||
172 | } | ||
173 | break; | ||
174 | case PacketType.AgentAnimation: | ||
175 | if (!m_child) | ||
176 | { | ||
177 | AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack; | ||
178 | for (int i = 0; i < AgentAni.AnimationList.Length; i++) | ||
179 | { | ||
180 | if (AgentAni.AnimationList[i].StartAnim) | ||
181 | { | ||
182 | if (OnStartAnim != null) | ||
183 | { | ||
184 | OnStartAnim(AgentAni.AnimationList[i].AnimID, 1); | ||
185 | } | ||
186 | } | ||
187 | } | ||
188 | } | ||
189 | break; | ||
190 | |||
191 | #endregion | ||
192 | |||
193 | #region Objects/Prims | ||
194 | case PacketType.ObjectLink: | ||
195 | // OpenSim.Framework.Console.MainLog.Instance.Verbose( Pack.ToString()); | ||
196 | ObjectLinkPacket link = (ObjectLinkPacket)Pack; | ||
197 | uint parentprimid = 0; | ||
198 | List<uint> childrenprims = new List<uint>(); | ||
199 | if (link.ObjectData.Length > 1) | ||
200 | { | ||
201 | parentprimid = link.ObjectData[0].ObjectLocalID; | ||
202 | |||
203 | for (int i = 1; i < link.ObjectData.Length; i++) | ||
204 | { | ||
205 | childrenprims.Add(link.ObjectData[i].ObjectLocalID); | ||
206 | } | ||
207 | } | ||
208 | if (OnLinkObjects != null) | ||
209 | { | ||
210 | OnLinkObjects(parentprimid, childrenprims); | ||
211 | } | ||
212 | break; | ||
213 | case PacketType.ObjectAdd: | ||
214 | // m_world.AddNewPrim((ObjectAddPacket)Pack, this); | ||
215 | if (OnAddPrim != null) | ||
216 | { | ||
217 | OnAddPrim(Pack, this); | ||
218 | } | ||
219 | break; | ||
220 | case PacketType.ObjectShape: | ||
221 | ObjectShapePacket shape = (ObjectShapePacket)Pack; | ||
222 | for (int i = 0; i < shape.ObjectData.Length; i++) | ||
223 | { | ||
224 | if (OnUpdatePrimShape != null) | ||
225 | { | ||
226 | OnUpdatePrimShape(shape.ObjectData[i].ObjectLocalID, shape.ObjectData[i]); | ||
227 | } | ||
228 | } | ||
229 | break; | ||
230 | case PacketType.ObjectSelect: | ||
231 | ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack; | ||
232 | for (int i = 0; i < incomingselect.ObjectData.Length; i++) | ||
233 | { | ||
234 | if (OnObjectSelect != null) | ||
235 | { | ||
236 | OnObjectSelect(incomingselect.ObjectData[i].ObjectLocalID, this); | ||
237 | } | ||
238 | } | ||
239 | break; | ||
240 | case PacketType.ObjectFlagUpdate: | ||
241 | ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack; | ||
242 | if (OnUpdatePrimFlags != null) | ||
243 | { | ||
244 | OnUpdatePrimFlags(flags.AgentData.ObjectLocalID, Pack, this); | ||
245 | } | ||
246 | break; | ||
247 | case PacketType.ObjectImage: | ||
248 | ObjectImagePacket imagePack = (ObjectImagePacket)Pack; | ||
249 | for (int i = 0; i < imagePack.ObjectData.Length; i++) | ||
250 | { | ||
251 | if (OnUpdatePrimTexture != null) | ||
252 | { | ||
253 | OnUpdatePrimTexture(imagePack.ObjectData[i].ObjectLocalID, imagePack.ObjectData[i].TextureEntry, this); | ||
254 | } | ||
255 | } | ||
256 | break; | ||
257 | case PacketType.ObjectGrab: | ||
258 | ObjectGrabPacket grap = (ObjectGrabPacket)Pack; | ||
259 | if (OnGrapObject != null) | ||
260 | { | ||
261 | OnGrapObject(grap.ObjectData.LocalID, grap.ObjectData.GrabOffset, this); | ||
262 | } | ||
263 | break; | ||
264 | case PacketType.ObjectGrabUpdate: | ||
265 | ObjectGrabUpdatePacket grapUpdate = (ObjectGrabUpdatePacket)Pack; | ||
266 | if (OnGrapUpdate != null) | ||
267 | { | ||
268 | OnGrapUpdate(grapUpdate.ObjectData.ObjectID, grapUpdate.ObjectData.GrabOffsetInitial, grapUpdate.ObjectData.GrabPosition, this); | ||
269 | } | ||
270 | break; | ||
271 | case PacketType.ObjectDeGrab: | ||
272 | ObjectDeGrabPacket deGrap = (ObjectDeGrabPacket)Pack; | ||
273 | if (OnDeGrapObject != null) | ||
274 | { | ||
275 | OnDeGrapObject(deGrap.ObjectData.LocalID, this); | ||
276 | } | ||
277 | break; | ||
278 | #endregion | ||
279 | |||
280 | #region Inventory/Asset/Other related packets | ||
281 | case PacketType.RequestImage: | ||
282 | RequestImagePacket imageRequest = (RequestImagePacket)Pack; | ||
283 | for (int i = 0; i < imageRequest.RequestImage.Length; i++) | ||
284 | { | ||
285 | m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image); | ||
286 | } | ||
287 | break; | ||
288 | case PacketType.TransferRequest: | ||
289 | //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request"); | ||
290 | TransferRequestPacket transfer = (TransferRequestPacket)Pack; | ||
291 | m_assetCache.AddAssetRequest(this, transfer); | ||
292 | break; | ||
293 | case PacketType.AssetUploadRequest: | ||
294 | AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; | ||
295 | this.UploadAssets.HandleUploadPacket(request, request.AssetBlock.TransactionID.Combine(this.SecureSessionID)); | ||
296 | break; | ||
297 | case PacketType.RequestXfer: | ||
298 | //Console.WriteLine(Pack.ToString()); | ||
299 | break; | ||
300 | case PacketType.SendXferPacket: | ||
301 | this.UploadAssets.HandleXferPacket((SendXferPacketPacket)Pack); | ||
302 | break; | ||
303 | case PacketType.CreateInventoryFolder: | ||
304 | CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack; | ||
305 | m_inventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type, Util.FieldToString(invFolder.FolderData.Name), invFolder.FolderData.ParentID); | ||
306 | //Console.WriteLine(Pack.ToString()); | ||
307 | break; | ||
308 | case PacketType.CreateInventoryItem: | ||
309 | //Console.WriteLine(Pack.ToString()); | ||
310 | CreateInventoryItemPacket createItem = (CreateInventoryItemPacket)Pack; | ||
311 | if (createItem.InventoryBlock.TransactionID != LLUUID.Zero) | ||
312 | { | ||
313 | this.UploadAssets.CreateInventoryItem(createItem); | ||
314 | } | ||
315 | else | ||
316 | { | ||
317 | // Console.Write(Pack.ToString()); | ||
318 | this.CreateInventoryItem(createItem); | ||
319 | } | ||
320 | break; | ||
321 | case PacketType.FetchInventory: | ||
322 | //Console.WriteLine("fetch item packet"); | ||
323 | FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack; | ||
324 | m_inventoryCache.FetchInventory(this, FetchInventory); | ||
325 | break; | ||
326 | case PacketType.FetchInventoryDescendents: | ||
327 | FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack; | ||
328 | m_inventoryCache.FetchInventoryDescendents(this, Fetch); | ||
329 | break; | ||
330 | case PacketType.UpdateInventoryItem: | ||
331 | UpdateInventoryItemPacket update = (UpdateInventoryItemPacket)Pack; | ||
332 | //Console.WriteLine(Pack.ToString()); | ||
333 | for (int i = 0; i < update.InventoryData.Length; i++) | ||
334 | { | ||
335 | if (update.InventoryData[i].TransactionID != LLUUID.Zero) | ||
336 | { | ||
337 | AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID)); | ||
338 | if (asset != null) | ||
339 | { | ||
340 | // Console.WriteLine("updating inventory item, found asset" + asset.FullID.ToStringHyphenated() + " already in cache"); | ||
341 | m_inventoryCache.UpdateInventoryItemAsset(this, update.InventoryData[i].ItemID, asset); | ||
342 | } | ||
343 | else | ||
344 | { | ||
345 | asset = this.UploadAssets.AddUploadToAssetCache(update.InventoryData[i].TransactionID); | ||
346 | if (asset != null) | ||
347 | { | ||
348 | //Console.WriteLine("updating inventory item, adding asset" + asset.FullID.ToStringHyphenated() + " to cache"); | ||
349 | m_inventoryCache.UpdateInventoryItemAsset(this, update.InventoryData[i].ItemID, asset); | ||
350 | } | ||
351 | else | ||
352 | { | ||
353 | //Console.WriteLine("trying to update inventory item, but asset is null"); | ||
354 | } | ||
355 | } | ||
356 | } | ||
357 | else | ||
358 | { | ||
359 | m_inventoryCache.UpdateInventoryItemDetails(this, update.InventoryData[i].ItemID, update.InventoryData[i]); ; | ||
360 | } | ||
361 | } | ||
362 | break; | ||
363 | case PacketType.RequestTaskInventory: | ||
364 | // Console.WriteLine(Pack.ToString()); | ||
365 | RequestTaskInventoryPacket requesttask = (RequestTaskInventoryPacket)Pack; | ||
366 | ReplyTaskInventoryPacket replytask = new ReplyTaskInventoryPacket(); | ||
367 | bool foundent = false; | ||
368 | /* foreach (Entity ent in m_world.Entities.Values) | ||
369 | { | ||
370 | if (ent.localid == requesttask.InventoryData.LocalID) | ||
371 | { | ||
372 | replytask.InventoryData.TaskID = ent.uuid; | ||
373 | replytask.InventoryData.Serial = 0; | ||
374 | replytask.InventoryData.Filename = new byte[0]; | ||
375 | foundent = true; | ||
376 | } | ||
377 | } | ||
378 | if (foundent) | ||
379 | { | ||
380 | this.OutPacket(replytask); | ||
381 | }*/ | ||
382 | break; | ||
383 | case PacketType.UpdateTaskInventory: | ||
384 | // Console.WriteLine(Pack.ToString()); | ||
385 | UpdateTaskInventoryPacket updatetask = (UpdateTaskInventoryPacket)Pack; | ||
386 | AgentInventory myinventory = this.m_inventoryCache.GetAgentsInventory(this.AgentID); | ||
387 | /*if (myinventory != null) | ||
388 | { | ||
389 | if (updatetask.UpdateData.Key == 0) | ||
390 | { | ||
391 | if (myinventory.InventoryItems[updatetask.InventoryData.ItemID] != null) | ||
392 | { | ||
393 | if (myinventory.InventoryItems[updatetask.InventoryData.ItemID].Type == 7) | ||
394 | { | ||
395 | LLUUID noteaid = myinventory.InventoryItems[updatetask.InventoryData.ItemID].AssetID; | ||
396 | AssetBase assBase = this.m_assetCache.GetAsset(noteaid); | ||
397 | if (assBase != null) | ||
398 | { | ||
399 | foreach (Entity ent in m_world.Entities.Values) | ||
400 | { | ||
401 | if (ent.localid == updatetask.UpdateData.LocalID) | ||
402 | { | ||
403 | if (ent is OpenSim.world.Primitive) | ||
404 | { | ||
405 | this.m_world.AddScript(ent, Util.FieldToString(assBase.Data)); | ||
406 | } | ||
407 | } | ||
408 | } | ||
409 | } | ||
410 | } | ||
411 | } | ||
412 | } | ||
413 | }*/ | ||
414 | break; | ||
415 | case PacketType.MapLayerRequest: | ||
416 | this.RequestMapLayer(); | ||
417 | break; | ||
418 | case PacketType.MapBlockRequest: | ||
419 | MapBlockRequestPacket MapRequest = (MapBlockRequestPacket)Pack; | ||
420 | if (OnRequestMapBlocks != null) | ||
421 | { | ||
422 | OnRequestMapBlocks(this, MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY); | ||
423 | } | ||
424 | break; | ||
425 | case PacketType.TeleportLandmarkRequest: | ||
426 | TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack; | ||
427 | |||
428 | TeleportStartPacket tpStart = new TeleportStartPacket(); | ||
429 | tpStart.Info.TeleportFlags = 8; // tp via lm | ||
430 | this.OutPacket(tpStart); | ||
431 | |||
432 | TeleportProgressPacket tpProgress = new TeleportProgressPacket(); | ||
433 | tpProgress.Info.Message = (new System.Text.ASCIIEncoding()).GetBytes("sending_landmark"); | ||
434 | tpProgress.Info.TeleportFlags = 8; | ||
435 | tpProgress.AgentData.AgentID = tpReq.Info.AgentID; | ||
436 | this.OutPacket(tpProgress); | ||
437 | |||
438 | // Fetch landmark | ||
439 | LLUUID lmid = tpReq.Info.LandmarkID; | ||
440 | AssetBase lma = this.m_assetCache.GetAsset(lmid); | ||
441 | if (lma != null) | ||
442 | { | ||
443 | AssetLandmark lm = new AssetLandmark(lma); | ||
444 | |||
445 | if (lm.RegionID == m_regionData.SimUUID) | ||
446 | { | ||
447 | TeleportLocalPacket tpLocal = new TeleportLocalPacket(); | ||
448 | |||
449 | tpLocal.Info.AgentID = tpReq.Info.AgentID; | ||
450 | tpLocal.Info.TeleportFlags = 8; // Teleport via landmark | ||
451 | tpLocal.Info.LocationID = 2; | ||
452 | tpLocal.Info.Position = lm.Position; | ||
453 | OutPacket(tpLocal); | ||
454 | } | ||
455 | else | ||
456 | { | ||
457 | TeleportCancelPacket tpCancel = new TeleportCancelPacket(); | ||
458 | tpCancel.Info.AgentID = tpReq.Info.AgentID; | ||
459 | tpCancel.Info.SessionID = tpReq.Info.SessionID; | ||
460 | OutPacket(tpCancel); | ||
461 | } | ||
462 | } | ||
463 | else | ||
464 | { | ||
465 | Console.WriteLine("Cancelling Teleport - fetch asset not yet implemented"); | ||
466 | |||
467 | TeleportCancelPacket tpCancel = new TeleportCancelPacket(); | ||
468 | tpCancel.Info.AgentID = tpReq.Info.AgentID; | ||
469 | tpCancel.Info.SessionID = tpReq.Info.SessionID; | ||
470 | OutPacket(tpCancel); | ||
471 | } | ||
472 | break; | ||
473 | case PacketType.TeleportLocationRequest: | ||
474 | TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack; | ||
475 | // Console.WriteLine(tpLocReq.ToString()); | ||
476 | |||
477 | if (OnTeleportLocationRequest != null) | ||
478 | { | ||
479 | OnTeleportLocationRequest(this, tpLocReq.Info.RegionHandle, tpLocReq.Info.Position, tpLocReq.Info.LookAt, 16); | ||
480 | } | ||
481 | else | ||
482 | { | ||
483 | //no event handler so cancel request | ||
484 | TeleportCancelPacket tpCancel = new TeleportCancelPacket(); | ||
485 | tpCancel.Info.SessionID = tpLocReq.AgentData.SessionID; | ||
486 | tpCancel.Info.AgentID = tpLocReq.AgentData.AgentID; | ||
487 | OutPacket(tpCancel); | ||
488 | } | ||
489 | break; | ||
490 | #endregion | ||
491 | |||
492 | case PacketType.MoneyBalanceRequest: | ||
493 | this.SendMoneyBalance(LLUUID.Zero, true, new byte[0], 1000); | ||
494 | break; | ||
495 | |||
496 | #region Parcel related packets | ||
497 | case PacketType.ParcelPropertiesRequest: | ||
498 | ParcelPropertiesRequestPacket propertiesRequest = (ParcelPropertiesRequestPacket)Pack; | ||
499 | if (OnParcelPropertiesRequest != null) | ||
500 | { | ||
501 | OnParcelPropertiesRequest((int)Math.Round(propertiesRequest.ParcelData.West), (int)Math.Round(propertiesRequest.ParcelData.South), (int)Math.Round(propertiesRequest.ParcelData.East), (int)Math.Round(propertiesRequest.ParcelData.North), propertiesRequest.ParcelData.SequenceID, propertiesRequest.ParcelData.SnapSelection, this); | ||
502 | } | ||
503 | break; | ||
504 | case PacketType.ParcelDivide: | ||
505 | ParcelDividePacket parcelDivide = (ParcelDividePacket)Pack; | ||
506 | if (OnParcelDivideRequest != null) | ||
507 | { | ||
508 | OnParcelDivideRequest((int)Math.Round(parcelDivide.ParcelData.West), (int)Math.Round(parcelDivide.ParcelData.South), (int)Math.Round(parcelDivide.ParcelData.East), (int)Math.Round(parcelDivide.ParcelData.North), this); | ||
509 | } | ||
510 | break; | ||
511 | case PacketType.ParcelJoin: | ||
512 | ParcelJoinPacket parcelJoin = (ParcelJoinPacket)Pack; | ||
513 | if (OnParcelJoinRequest != null) | ||
514 | { | ||
515 | OnParcelJoinRequest((int)Math.Round(parcelJoin.ParcelData.West), (int)Math.Round(parcelJoin.ParcelData.South), (int)Math.Round(parcelJoin.ParcelData.East), (int)Math.Round(parcelJoin.ParcelData.North), this); | ||
516 | } | ||
517 | break; | ||
518 | case PacketType.ParcelPropertiesUpdate: | ||
519 | ParcelPropertiesUpdatePacket updatePacket = (ParcelPropertiesUpdatePacket)Pack; | ||
520 | if (OnParcelPropertiesUpdateRequest != null) | ||
521 | { | ||
522 | OnParcelPropertiesUpdateRequest(updatePacket, this); | ||
523 | } | ||
524 | break; | ||
525 | #endregion | ||
526 | |||
527 | #region Estate Packets | ||
528 | case PacketType.EstateOwnerMessage: | ||
529 | EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack; | ||
530 | if (OnEstateOwnerMessage != null) | ||
531 | { | ||
532 | OnEstateOwnerMessage(messagePacket, this); | ||
533 | } | ||
534 | break; | ||
535 | #endregion | ||
536 | |||
537 | #region unimplemented handlers | ||
538 | case PacketType.AgentIsNowWearing: | ||
539 | // AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack; | ||
540 | //Console.WriteLine(Pack.ToString()); | ||
541 | break; | ||
542 | case PacketType.ObjectScale: | ||
543 | //OpenSim.Framework.Console.MainLog.Instance.Verbose( Pack.ToString()); | ||
544 | break; | ||
545 | #endregion | ||
546 | } | ||
547 | } | ||
548 | } | ||
549 | } | ||
550 | } | ||
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs new file mode 100644 index 0000000..312da9d --- /dev/null +++ b/OpenSim/Region/ClientStack/ClientView.cs | |||
@@ -0,0 +1,273 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using Nwc.XmlRpc; | ||
34 | using System.Net; | ||
35 | using System.Net.Sockets; | ||
36 | using System.IO; | ||
37 | using System.Threading; | ||
38 | using System.Timers; | ||
39 | using OpenSim.Framework; | ||
40 | using OpenSim.Framework.Interfaces; | ||
41 | using OpenSim.Framework.Types; | ||
42 | using OpenSim.Framework.Inventory; | ||
43 | using OpenSim.Framework.Utilities; | ||
44 | using OpenSim.Assets; | ||
45 | using OpenSim.Caches; | ||
46 | |||
47 | namespace OpenSim | ||
48 | { | ||
49 | public delegate bool PacketMethod(ClientView simClient, Packet packet); | ||
50 | |||
51 | /// <summary> | ||
52 | /// Handles new client connections | ||
53 | /// Constructor takes a single Packet and authenticates everything | ||
54 | /// </summary> | ||
55 | public partial class ClientView : ClientViewBase, IClientAPI | ||
56 | { | ||
57 | public static TerrainManager TerrainManager; | ||
58 | |||
59 | protected static Dictionary<PacketType, PacketMethod> PacketHandlers = new Dictionary<PacketType, PacketMethod>(); //Global/static handlers for all clients | ||
60 | protected Dictionary<PacketType, PacketMethod> m_packetHandlers = new Dictionary<PacketType, PacketMethod>(); //local handlers for this instance | ||
61 | |||
62 | public LLUUID AgentID; | ||
63 | public LLUUID SessionID; | ||
64 | public LLUUID SecureSessionID = LLUUID.Zero; | ||
65 | public string firstName; | ||
66 | public string lastName; | ||
67 | public bool m_child = false; | ||
68 | private UseCircuitCodePacket cirpack; | ||
69 | public Thread ClientThread; | ||
70 | public LLVector3 startpos; | ||
71 | |||
72 | private AgentAssetUpload UploadAssets; | ||
73 | private LLUUID newAssetFolder = LLUUID.Zero; | ||
74 | private bool debug = false; | ||
75 | protected IWorld m_world; | ||
76 | private Dictionary<uint, ClientView> m_clientThreads; | ||
77 | private AssetCache m_assetCache; | ||
78 | private InventoryCache m_inventoryCache; | ||
79 | private int cachedtextureserial = 0; | ||
80 | private RegionInfo m_regionData; | ||
81 | protected AuthenticateSessionsBase m_authenticateSessionsHandler; | ||
82 | |||
83 | public ClientView(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, Dictionary<uint, ClientView> clientThreads, IWorld world, AssetCache assetCache, PacketServer packServer, InventoryCache inventoryCache, AuthenticateSessionsBase authenSessions ) | ||
84 | { | ||
85 | m_world = world; | ||
86 | m_clientThreads = clientThreads; | ||
87 | m_assetCache = assetCache; | ||
88 | |||
89 | m_networkServer = packServer; | ||
90 | m_inventoryCache = inventoryCache; | ||
91 | m_authenticateSessionsHandler = authenSessions; | ||
92 | |||
93 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "OpenSimClient.cs - Started up new client thread to handle incoming request"); | ||
94 | cirpack = initialcirpack; | ||
95 | userEP = remoteEP; | ||
96 | |||
97 | this.startpos = m_authenticateSessionsHandler.GetPosition(initialcirpack.CircuitCode.Code); | ||
98 | |||
99 | PacketQueue = new BlockingQueue<QueItem>(); | ||
100 | |||
101 | this.UploadAssets = new AgentAssetUpload(this, m_assetCache, m_inventoryCache); | ||
102 | AckTimer = new System.Timers.Timer(500); | ||
103 | AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed); | ||
104 | AckTimer.Start(); | ||
105 | |||
106 | this.RegisterLocalPacketHandlers(); | ||
107 | |||
108 | ClientThread = new Thread(new ThreadStart(AuthUser)); | ||
109 | ClientThread.IsBackground = true; | ||
110 | ClientThread.Start(); | ||
111 | } | ||
112 | |||
113 | # region Client Methods | ||
114 | |||
115 | public void KillClient() | ||
116 | { | ||
117 | KillObjectPacket kill = new KillObjectPacket(); | ||
118 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; | ||
119 | kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); | ||
120 | //kill.ObjectData[0].ID = this.ClientAvatar.localid; | ||
121 | foreach (ClientView client in m_clientThreads.Values) | ||
122 | { | ||
123 | client.OutPacket(kill); | ||
124 | } | ||
125 | |||
126 | this.m_inventoryCache.ClientLeaving(this.AgentID, null); | ||
127 | m_world.RemoveClient(this.AgentId); | ||
128 | |||
129 | m_clientThreads.Remove(this.CircuitCode); | ||
130 | m_networkServer.RemoveClientCircuit(this.CircuitCode); | ||
131 | this.ClientThread.Abort(); | ||
132 | } | ||
133 | #endregion | ||
134 | |||
135 | # region Packet Handling | ||
136 | public static bool AddPacketHandler(PacketType packetType, PacketMethod handler) | ||
137 | { | ||
138 | bool result = false; | ||
139 | lock (PacketHandlers) | ||
140 | { | ||
141 | if (!PacketHandlers.ContainsKey(packetType)) | ||
142 | { | ||
143 | PacketHandlers.Add(packetType, handler); | ||
144 | result = true; | ||
145 | } | ||
146 | } | ||
147 | return result; | ||
148 | } | ||
149 | |||
150 | public bool AddLocalPacketHandler(PacketType packetType, PacketMethod handler) | ||
151 | { | ||
152 | bool result = false; | ||
153 | lock (m_packetHandlers) | ||
154 | { | ||
155 | if (!m_packetHandlers.ContainsKey(packetType)) | ||
156 | { | ||
157 | m_packetHandlers.Add(packetType, handler); | ||
158 | result = true; | ||
159 | } | ||
160 | } | ||
161 | return result; | ||
162 | } | ||
163 | |||
164 | protected virtual bool ProcessPacketMethod(Packet packet) | ||
165 | { | ||
166 | bool result = false; | ||
167 | bool found = false; | ||
168 | PacketMethod method; | ||
169 | if (m_packetHandlers.TryGetValue(packet.Type, out method)) | ||
170 | { | ||
171 | //there is a local handler for this packet type | ||
172 | result = method(this, packet); | ||
173 | } | ||
174 | else | ||
175 | { | ||
176 | //there is not a local handler so see if there is a Global handler | ||
177 | lock (PacketHandlers) | ||
178 | { | ||
179 | found = PacketHandlers.TryGetValue(packet.Type, out method); | ||
180 | } | ||
181 | if (found) | ||
182 | { | ||
183 | result = method(this, packet); | ||
184 | } | ||
185 | } | ||
186 | return result; | ||
187 | } | ||
188 | |||
189 | protected virtual void ClientLoop() | ||
190 | { | ||
191 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "OpenSimClient.cs:ClientLoop() - Entered loop"); | ||
192 | while (true) | ||
193 | { | ||
194 | QueItem nextPacket = PacketQueue.Dequeue(); | ||
195 | if (nextPacket.Incoming) | ||
196 | { | ||
197 | //is a incoming packet | ||
198 | ProcessInPacket(nextPacket.Packet); | ||
199 | } | ||
200 | else | ||
201 | { | ||
202 | //is a out going packet | ||
203 | ProcessOutPacket(nextPacket.Packet); | ||
204 | } | ||
205 | } | ||
206 | } | ||
207 | # endregion | ||
208 | |||
209 | # region Setup | ||
210 | |||
211 | protected virtual void InitNewClient() | ||
212 | { | ||
213 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "OpenSimClient.cs:InitNewClient() - Adding viewer agent to world"); | ||
214 | this.m_world.AddNewClient(this, this.AgentID, false); | ||
215 | } | ||
216 | |||
217 | protected virtual void AuthUser() | ||
218 | { | ||
219 | // AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code); | ||
220 | AuthenticateResponse sessionInfo = this.m_authenticateSessionsHandler.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code); | ||
221 | if (!sessionInfo.Authorised) | ||
222 | { | ||
223 | //session/circuit not authorised | ||
224 | OpenSim.Framework.Console.MainLog.Instance.Notice("OpenSimClient.cs:AuthUser() - New user request denied to " + userEP.ToString()); | ||
225 | ClientThread.Abort(); | ||
226 | } | ||
227 | else | ||
228 | { | ||
229 | OpenSim.Framework.Console.MainLog.Instance.Notice("OpenSimClient.cs:AuthUser() - Got authenticated connection from " + userEP.ToString()); | ||
230 | //session is authorised | ||
231 | this.AgentID = cirpack.CircuitCode.ID; | ||
232 | this.SessionID = cirpack.CircuitCode.SessionID; | ||
233 | this.CircuitCode = cirpack.CircuitCode.Code; | ||
234 | this.firstName = sessionInfo.LoginInfo.First; | ||
235 | this.lastName = sessionInfo.LoginInfo.Last; | ||
236 | |||
237 | if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero) | ||
238 | { | ||
239 | this.SecureSessionID = sessionInfo.LoginInfo.SecureSession; | ||
240 | } | ||
241 | InitNewClient(); | ||
242 | |||
243 | ClientLoop(); | ||
244 | } | ||
245 | } | ||
246 | # endregion | ||
247 | |||
248 | |||
249 | protected override void KillThread() | ||
250 | { | ||
251 | this.ClientThread.Abort(); | ||
252 | } | ||
253 | |||
254 | #region Inventory Creation | ||
255 | private void SetupInventory(AuthenticateResponse sessionInfo) | ||
256 | { | ||
257 | |||
258 | } | ||
259 | private AgentInventory CreateInventory(LLUUID baseFolder) | ||
260 | { | ||
261 | AgentInventory inventory = null; | ||
262 | |||
263 | return inventory; | ||
264 | } | ||
265 | |||
266 | private void CreateInventoryItem(CreateInventoryItemPacket packet) | ||
267 | { | ||
268 | |||
269 | } | ||
270 | #endregion | ||
271 | |||
272 | } | ||
273 | } | ||
diff --git a/OpenSim/Region/ClientStack/ClientViewBase.cs b/OpenSim/Region/ClientStack/ClientViewBase.cs new file mode 100644 index 0000000..8b503f0 --- /dev/null +++ b/OpenSim/Region/ClientStack/ClientViewBase.cs | |||
@@ -0,0 +1,327 @@ | |||
1 | |||
2 | /* | ||
3 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
4 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * * Redistributions of source code must retain the above copyright | ||
9 | * notice, this list of conditions and the following disclaimer. | ||
10 | * * Redistributions in binary form must reproduce the above copyright | ||
11 | * notice, this list of conditions and the following disclaimer in the | ||
12 | * documentation and/or other materials provided with the distribution. | ||
13 | * * Neither the name of the OpenSim Project nor the | ||
14 | * names of its contributors may be used to endorse or promote products | ||
15 | * derived from this software without specific prior written permission. | ||
16 | * | ||
17 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
18 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
19 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
20 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
21 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
22 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
23 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
24 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
26 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
27 | * | ||
28 | */ | ||
29 | using System; | ||
30 | using System.Collections; | ||
31 | using System.Collections.Generic; | ||
32 | using libsecondlife; | ||
33 | using libsecondlife.Packets; | ||
34 | using System.Net; | ||
35 | using System.Net.Sockets; | ||
36 | using System.IO; | ||
37 | using System.Threading; | ||
38 | using System.Timers; | ||
39 | using OpenSim.Framework.Utilities; | ||
40 | using OpenSim.Framework.Interfaces; | ||
41 | |||
42 | namespace OpenSim | ||
43 | { | ||
44 | public class ClientViewBase | ||
45 | { | ||
46 | protected BlockingQueue<QueItem> PacketQueue; | ||
47 | protected Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>(); | ||
48 | protected Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>(); | ||
49 | |||
50 | protected System.Timers.Timer AckTimer; | ||
51 | protected uint Sequence = 0; | ||
52 | protected object SequenceLock = new object(); | ||
53 | protected const int MAX_APPENDED_ACKS = 10; | ||
54 | protected const int RESEND_TIMEOUT = 4000; | ||
55 | protected const int MAX_SEQUENCE = 0xFFFFFF; | ||
56 | |||
57 | public uint CircuitCode; | ||
58 | public EndPoint userEP; | ||
59 | |||
60 | protected PacketServer m_networkServer; | ||
61 | |||
62 | public ClientViewBase() | ||
63 | { | ||
64 | |||
65 | } | ||
66 | |||
67 | protected virtual void ProcessInPacket(Packet Pack) | ||
68 | { | ||
69 | |||
70 | } | ||
71 | |||
72 | protected virtual void ProcessOutPacket(Packet Pack) | ||
73 | { | ||
74 | // Keep track of when this packet was sent out | ||
75 | Pack.TickCount = Environment.TickCount; | ||
76 | |||
77 | if (!Pack.Header.Resent) | ||
78 | { | ||
79 | // Set the sequence number | ||
80 | lock (SequenceLock) | ||
81 | { | ||
82 | if (Sequence >= MAX_SEQUENCE) | ||
83 | Sequence = 1; | ||
84 | else | ||
85 | Sequence++; | ||
86 | Pack.Header.Sequence = Sequence; | ||
87 | } | ||
88 | |||
89 | if (Pack.Header.Reliable) //DIRTY HACK | ||
90 | { | ||
91 | lock (NeedAck) | ||
92 | { | ||
93 | if (!NeedAck.ContainsKey(Pack.Header.Sequence)) | ||
94 | { | ||
95 | try | ||
96 | { | ||
97 | NeedAck.Add(Pack.Header.Sequence, Pack); | ||
98 | } | ||
99 | catch (Exception e) // HACKY | ||
100 | { | ||
101 | e.ToString(); | ||
102 | // Ignore | ||
103 | // Seems to throw a exception here occasionally | ||
104 | // of 'duplicate key' despite being locked. | ||
105 | // !?!?!? | ||
106 | } | ||
107 | } | ||
108 | else | ||
109 | { | ||
110 | // Client.Log("Attempted to add a duplicate sequence number (" + | ||
111 | // packet.Header.Sequence + ") to the NeedAck dictionary for packet type " + | ||
112 | // packet.Type.ToString(), Helpers.LogLevel.Warning); | ||
113 | } | ||
114 | } | ||
115 | |||
116 | // Don't append ACKs to resent packets, in case that's what was causing the | ||
117 | // delivery to fail | ||
118 | if (!Pack.Header.Resent) | ||
119 | { | ||
120 | // Append any ACKs that need to be sent out to this packet | ||
121 | lock (PendingAcks) | ||
122 | { | ||
123 | if (PendingAcks.Count > 0 && PendingAcks.Count < MAX_APPENDED_ACKS && | ||
124 | Pack.Type != PacketType.PacketAck && | ||
125 | Pack.Type != PacketType.LogoutRequest) | ||
126 | { | ||
127 | Pack.Header.AckList = new uint[PendingAcks.Count]; | ||
128 | int i = 0; | ||
129 | |||
130 | foreach (uint ack in PendingAcks.Values) | ||
131 | { | ||
132 | Pack.Header.AckList[i] = ack; | ||
133 | i++; | ||
134 | } | ||
135 | |||
136 | PendingAcks.Clear(); | ||
137 | Pack.Header.AppendedAcks = true; | ||
138 | } | ||
139 | } | ||
140 | } | ||
141 | } | ||
142 | } | ||
143 | |||
144 | byte[] ZeroOutBuffer = new byte[4096]; | ||
145 | byte[] sendbuffer; | ||
146 | sendbuffer = Pack.ToBytes(); | ||
147 | |||
148 | try | ||
149 | { | ||
150 | if (Pack.Header.Zerocoded) | ||
151 | { | ||
152 | int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer); | ||
153 | m_networkServer.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP); | ||
154 | } | ||
155 | else | ||
156 | { | ||
157 | m_networkServer.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP); | ||
158 | } | ||
159 | } | ||
160 | catch (Exception) | ||
161 | { | ||
162 | OpenSim.Framework.Console.MainLog.Instance.Warn("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread"); | ||
163 | this.KillThread(); | ||
164 | } | ||
165 | |||
166 | } | ||
167 | |||
168 | public virtual void InPacket(Packet NewPack) | ||
169 | { | ||
170 | // Handle appended ACKs | ||
171 | if (NewPack.Header.AppendedAcks) | ||
172 | { | ||
173 | lock (NeedAck) | ||
174 | { | ||
175 | foreach (uint ack in NewPack.Header.AckList) | ||
176 | { | ||
177 | NeedAck.Remove(ack); | ||
178 | } | ||
179 | } | ||
180 | } | ||
181 | |||
182 | // Handle PacketAck packets | ||
183 | if (NewPack.Type == PacketType.PacketAck) | ||
184 | { | ||
185 | PacketAckPacket ackPacket = (PacketAckPacket)NewPack; | ||
186 | |||
187 | lock (NeedAck) | ||
188 | { | ||
189 | foreach (PacketAckPacket.PacketsBlock block in ackPacket.Packets) | ||
190 | { | ||
191 | NeedAck.Remove(block.ID); | ||
192 | } | ||
193 | } | ||
194 | } | ||
195 | else if ((NewPack.Type == PacketType.StartPingCheck)) | ||
196 | { | ||
197 | //reply to pingcheck | ||
198 | libsecondlife.Packets.StartPingCheckPacket startPing = (libsecondlife.Packets.StartPingCheckPacket)NewPack; | ||
199 | libsecondlife.Packets.CompletePingCheckPacket endPing = new CompletePingCheckPacket(); | ||
200 | endPing.PingID.PingID = startPing.PingID.PingID; | ||
201 | OutPacket(endPing); | ||
202 | } | ||
203 | else | ||
204 | { | ||
205 | QueItem item = new QueItem(); | ||
206 | item.Packet = NewPack; | ||
207 | item.Incoming = true; | ||
208 | this.PacketQueue.Enqueue(item); | ||
209 | } | ||
210 | |||
211 | } | ||
212 | |||
213 | public virtual void OutPacket(Packet NewPack) | ||
214 | { | ||
215 | QueItem item = new QueItem(); | ||
216 | item.Packet = NewPack; | ||
217 | item.Incoming = false; | ||
218 | this.PacketQueue.Enqueue(item); | ||
219 | } | ||
220 | |||
221 | # region Low Level Packet Methods | ||
222 | |||
223 | protected void ack_pack(Packet Pack) | ||
224 | { | ||
225 | if (Pack.Header.Reliable) | ||
226 | { | ||
227 | libsecondlife.Packets.PacketAckPacket ack_it = new PacketAckPacket(); | ||
228 | ack_it.Packets = new PacketAckPacket.PacketsBlock[1]; | ||
229 | ack_it.Packets[0] = new PacketAckPacket.PacketsBlock(); | ||
230 | ack_it.Packets[0].ID = Pack.Header.Sequence; | ||
231 | ack_it.Header.Reliable = false; | ||
232 | |||
233 | OutPacket(ack_it); | ||
234 | |||
235 | } | ||
236 | /* | ||
237 | if (Pack.Header.Reliable) | ||
238 | { | ||
239 | lock (PendingAcks) | ||
240 | { | ||
241 | uint sequence = (uint)Pack.Header.Sequence; | ||
242 | if (!PendingAcks.ContainsKey(sequence)) { PendingAcks[sequence] = sequence; } | ||
243 | } | ||
244 | }*/ | ||
245 | } | ||
246 | |||
247 | protected void ResendUnacked() | ||
248 | { | ||
249 | int now = Environment.TickCount; | ||
250 | |||
251 | lock (NeedAck) | ||
252 | { | ||
253 | foreach (Packet packet in NeedAck.Values) | ||
254 | { | ||
255 | if ((now - packet.TickCount > RESEND_TIMEOUT) && (!packet.Header.Resent)) | ||
256 | { | ||
257 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Resending " + packet.Type.ToString() + " packet, " + | ||
258 | (now - packet.TickCount) + "ms have passed"); | ||
259 | |||
260 | packet.Header.Resent = true; | ||
261 | OutPacket(packet); | ||
262 | } | ||
263 | } | ||
264 | } | ||
265 | } | ||
266 | |||
267 | protected void SendAcks() | ||
268 | { | ||
269 | lock (PendingAcks) | ||
270 | { | ||
271 | if (PendingAcks.Count > 0) | ||
272 | { | ||
273 | if (PendingAcks.Count > 250) | ||
274 | { | ||
275 | // FIXME: Handle the odd case where we have too many pending ACKs queued up | ||
276 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Too many ACKs queued up!"); | ||
277 | return; | ||
278 | } | ||
279 | |||
280 | //OpenSim.Framework.Console.MainLog.Instance.WriteLine("Sending PacketAck"); | ||
281 | |||
282 | |||
283 | int i = 0; | ||
284 | PacketAckPacket acks = new PacketAckPacket(); | ||
285 | acks.Packets = new PacketAckPacket.PacketsBlock[PendingAcks.Count]; | ||
286 | |||
287 | foreach (uint ack in PendingAcks.Values) | ||
288 | { | ||
289 | acks.Packets[i] = new PacketAckPacket.PacketsBlock(); | ||
290 | acks.Packets[i].ID = ack; | ||
291 | i++; | ||
292 | } | ||
293 | |||
294 | acks.Header.Reliable = false; | ||
295 | OutPacket(acks); | ||
296 | |||
297 | PendingAcks.Clear(); | ||
298 | } | ||
299 | } | ||
300 | } | ||
301 | |||
302 | protected void AckTimer_Elapsed(object sender, ElapsedEventArgs ea) | ||
303 | { | ||
304 | SendAcks(); | ||
305 | ResendUnacked(); | ||
306 | } | ||
307 | #endregion | ||
308 | |||
309 | protected virtual void KillThread() | ||
310 | { | ||
311 | |||
312 | } | ||
313 | |||
314 | #region Nested Classes | ||
315 | |||
316 | public class QueItem | ||
317 | { | ||
318 | public QueItem() | ||
319 | { | ||
320 | } | ||
321 | |||
322 | public Packet Packet; | ||
323 | public bool Incoming; | ||
324 | } | ||
325 | #endregion | ||
326 | } | ||
327 | } | ||
diff --git a/OpenSim/Region/ClientStack/OpenSim.Region.ClientStack.csproj b/OpenSim/Region/ClientStack/OpenSim.Region.ClientStack.csproj new file mode 100644 index 0000000..0b19359 --- /dev/null +++ b/OpenSim/Region/ClientStack/OpenSim.Region.ClientStack.csproj | |||
@@ -0,0 +1,173 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{DC3698B2-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.ClientStack</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.ClientStack</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="Db4objects.Db4o.dll" > | ||
66 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="libsecondlife.dll" > | ||
70 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="OpenSim.FrameworkGenericConfig.Xml" > | ||
74 | <HintPath>OpenSim.FrameworkGenericConfig.Xml.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System" > | ||
78 | <HintPath>System.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="System.Xml" > | ||
82 | <HintPath>System.Xml.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="XMLRPC.dll" > | ||
86 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | <ProjectReference Include="..\..\Framework\General\OpenSim.Framework.csproj"> | ||
92 | <Name>OpenSim.Framework</Name> | ||
93 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
94 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
95 | <Private>False</Private> | ||
96 | </ProjectReference> | ||
97 | <ProjectReference Include="..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
98 | <Name>OpenSim.Framework.Console</Name> | ||
99 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
100 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
101 | <Private>False</Private> | ||
102 | </ProjectReference> | ||
103 | <ProjectReference Include="..\..\Framework\Servers\OpenSim.Framework.Servers.csproj"> | ||
104 | <Name>OpenSim.Framework.Servers</Name> | ||
105 | <Project>{2CC71860-0000-0000-0000-000000000000}</Project> | ||
106 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
107 | <Private>False</Private> | ||
108 | </ProjectReference> | ||
109 | <ProjectReference Include="..\Caches\OpenSim.Region.Caches.csproj"> | ||
110 | <Name>OpenSim.Region.Caches</Name> | ||
111 | <Project>{61FCCDB3-0000-0000-0000-000000000000}</Project> | ||
112 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
113 | <Private>False</Private> | ||
114 | </ProjectReference> | ||
115 | <ProjectReference Include="..\Physics\Manager\OpenSim.Region.Physics.Manager.csproj"> | ||
116 | <Name>OpenSim.Region.Physics.Manager</Name> | ||
117 | <Project>{F4FF31EB-0000-0000-0000-000000000000}</Project> | ||
118 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
119 | <Private>False</Private> | ||
120 | </ProjectReference> | ||
121 | <ProjectReference Include="..\Terrain.BasicTerrain\OpenSim.Region.Terrain.BasicTerrain.csproj"> | ||
122 | <Name>OpenSim.Region.Terrain.BasicTerrain</Name> | ||
123 | <Project>{C9E0F891-0000-0000-0000-000000000000}</Project> | ||
124 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
125 | <Private>False</Private> | ||
126 | </ProjectReference> | ||
127 | </ItemGroup> | ||
128 | <ItemGroup> | ||
129 | <Compile Include="ClientStackNetworkHandler.cs"> | ||
130 | <SubType>Code</SubType> | ||
131 | </Compile> | ||
132 | <Compile Include="ClientView.AgentAssetUpload.cs"> | ||
133 | <SubType>Code</SubType> | ||
134 | </Compile> | ||
135 | <Compile Include="ClientView.API.cs"> | ||
136 | <SubType>Code</SubType> | ||
137 | </Compile> | ||
138 | <Compile Include="ClientView.cs"> | ||
139 | <SubType>Code</SubType> | ||
140 | </Compile> | ||
141 | <Compile Include="ClientView.PacketHandlers.cs"> | ||
142 | <SubType>Code</SubType> | ||
143 | </Compile> | ||
144 | <Compile Include="ClientView.ProcessPackets.cs"> | ||
145 | <SubType>Code</SubType> | ||
146 | </Compile> | ||
147 | <Compile Include="ClientViewBase.cs"> | ||
148 | <SubType>Code</SubType> | ||
149 | </Compile> | ||
150 | <Compile Include="PacketServer.cs"> | ||
151 | <SubType>Code</SubType> | ||
152 | </Compile> | ||
153 | <Compile Include="RegionApplicationBase.cs"> | ||
154 | <SubType>Code</SubType> | ||
155 | </Compile> | ||
156 | <Compile Include="UDPServer.cs"> | ||
157 | <SubType>Code</SubType> | ||
158 | </Compile> | ||
159 | <Compile Include="VersionInfo.cs"> | ||
160 | <SubType>Code</SubType> | ||
161 | </Compile> | ||
162 | <Compile Include="Assets\InventoryCache.cs"> | ||
163 | <SubType>Code</SubType> | ||
164 | </Compile> | ||
165 | </ItemGroup> | ||
166 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
167 | <PropertyGroup> | ||
168 | <PreBuildEvent> | ||
169 | </PreBuildEvent> | ||
170 | <PostBuildEvent> | ||
171 | </PostBuildEvent> | ||
172 | </PropertyGroup> | ||
173 | </Project> | ||
diff --git a/OpenSim/Region/ClientStack/OpenSim.Region.ClientStack.csproj.user b/OpenSim/Region/ClientStack/OpenSim.Region.ClientStack.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/ClientStack/OpenSim.Region.ClientStack.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/ClientStack/PacketServer.cs b/OpenSim/Region/ClientStack/PacketServer.cs new file mode 100644 index 0000000..229570c --- /dev/null +++ b/OpenSim/Region/ClientStack/PacketServer.cs | |||
@@ -0,0 +1,183 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife.Packets; | ||
32 | using OpenSim.Framework.Interfaces; | ||
33 | using OpenSim.Framework; | ||
34 | using System.Net; | ||
35 | using System.Net.Sockets; | ||
36 | using OpenSim.Assets; | ||
37 | using OpenSim.Caches; | ||
38 | |||
39 | namespace OpenSim | ||
40 | { | ||
41 | public class PacketServer | ||
42 | { | ||
43 | private ClientStackNetworkHandler _networkHandler; | ||
44 | private IWorld _localWorld; | ||
45 | public Dictionary<uint, ClientView> ClientThreads = new Dictionary<uint, ClientView>(); | ||
46 | public Dictionary<uint, IClientAPI> ClientAPIs = new Dictionary<uint, IClientAPI>(); | ||
47 | protected uint serverPort; | ||
48 | |||
49 | public PacketServer(ClientStackNetworkHandler networkHandler, uint port) | ||
50 | { | ||
51 | _networkHandler = networkHandler; | ||
52 | this.serverPort = port; | ||
53 | _networkHandler.RegisterPacketServer(this); | ||
54 | } | ||
55 | |||
56 | public IWorld LocalWorld | ||
57 | { | ||
58 | set | ||
59 | { | ||
60 | this._localWorld = value; | ||
61 | } | ||
62 | } | ||
63 | |||
64 | /// <summary> | ||
65 | /// | ||
66 | /// </summary> | ||
67 | /// <param name="circuitCode"></param> | ||
68 | /// <param name="packet"></param> | ||
69 | public virtual void ClientInPacket(uint circuitCode, Packet packet) | ||
70 | { | ||
71 | if (this.ClientThreads.ContainsKey(circuitCode)) | ||
72 | { | ||
73 | ClientThreads[circuitCode].InPacket(packet); | ||
74 | } | ||
75 | } | ||
76 | |||
77 | /// <summary> | ||
78 | /// | ||
79 | /// </summary> | ||
80 | /// <param name="circuitCode"></param> | ||
81 | /// <returns></returns> | ||
82 | public virtual bool AddNewCircuitCodeClient(uint circuitCode) | ||
83 | { | ||
84 | return false; | ||
85 | } | ||
86 | |||
87 | /// <summary> | ||
88 | /// | ||
89 | /// </summary> | ||
90 | /// <param name="packet"></param> | ||
91 | public virtual void SendPacketToAllClients(Packet packet) | ||
92 | { | ||
93 | |||
94 | } | ||
95 | |||
96 | /// <summary> | ||
97 | /// | ||
98 | /// </summary> | ||
99 | /// <param name="packet"></param> | ||
100 | /// <param name="simClient"></param> | ||
101 | public virtual void SendPacketToAllExcept(Packet packet, ClientView simClient) | ||
102 | { | ||
103 | |||
104 | } | ||
105 | |||
106 | /// <summary> | ||
107 | /// | ||
108 | /// </summary> | ||
109 | /// <param name="packetType"></param> | ||
110 | /// <param name="handler"></param> | ||
111 | public virtual void AddClientPacketHandler(PacketType packetType, PacketMethod handler) | ||
112 | { | ||
113 | |||
114 | } | ||
115 | |||
116 | /// <summary> | ||
117 | /// | ||
118 | /// </summary> | ||
119 | public virtual void RegisterClientPacketHandlers() | ||
120 | { | ||
121 | |||
122 | } | ||
123 | |||
124 | /// <summary> | ||
125 | /// | ||
126 | /// </summary> | ||
127 | /// <param name="remoteEP"></param> | ||
128 | /// <param name="initialcirpack"></param> | ||
129 | /// <param name="clientThreads"></param> | ||
130 | /// <param name="world"></param> | ||
131 | /// <param name="assetCache"></param> | ||
132 | /// <param name="packServer"></param> | ||
133 | /// <param name="inventoryCache"></param> | ||
134 | /// <param name="authenSessions"></param> | ||
135 | /// <returns></returns> | ||
136 | protected virtual ClientView CreateNewClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, Dictionary<uint, ClientView> clientThreads, IWorld world, AssetCache assetCache, PacketServer packServer, InventoryCache inventoryCache, AuthenticateSessionsBase authenSessions) | ||
137 | { | ||
138 | return new ClientView(remoteEP, initialcirpack, clientThreads, world, assetCache, packServer, inventoryCache, authenSessions ); | ||
139 | } | ||
140 | |||
141 | /// <summary> | ||
142 | /// | ||
143 | /// </summary> | ||
144 | /// <param name="epSender"></param> | ||
145 | /// <param name="useCircuit"></param> | ||
146 | /// <param name="assetCache"></param> | ||
147 | /// <param name="inventoryCache"></param> | ||
148 | /// <param name="authenticateSessionsClass"></param> | ||
149 | /// <returns></returns> | ||
150 | public virtual bool AddNewClient(EndPoint epSender, UseCircuitCodePacket useCircuit, AssetCache assetCache, InventoryCache inventoryCache, AuthenticateSessionsBase authenticateSessionsClass) | ||
151 | { | ||
152 | ClientView newuser = | ||
153 | CreateNewClient(epSender, useCircuit, ClientThreads, _localWorld, assetCache, this, inventoryCache, | ||
154 | authenticateSessionsClass); | ||
155 | |||
156 | this.ClientThreads.Add(useCircuit.CircuitCode.Code, newuser); | ||
157 | this.ClientAPIs.Add(useCircuit.CircuitCode.Code, (IClientAPI)newuser); | ||
158 | |||
159 | return true; | ||
160 | } | ||
161 | |||
162 | /// <summary> | ||
163 | /// | ||
164 | /// </summary> | ||
165 | /// <param name="buffer"></param> | ||
166 | /// <param name="size"></param> | ||
167 | /// <param name="flags"></param> | ||
168 | /// <param name="circuitcode"></param> | ||
169 | public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode) | ||
170 | { | ||
171 | this._networkHandler.SendPacketTo(buffer, size, flags, circuitcode); | ||
172 | } | ||
173 | |||
174 | /// <summary> | ||
175 | /// | ||
176 | /// </summary> | ||
177 | /// <param name="circuitcode"></param> | ||
178 | public virtual void RemoveClientCircuit(uint circuitcode) | ||
179 | { | ||
180 | this._networkHandler.RemoveClientCircuit(circuitcode); | ||
181 | } | ||
182 | } | ||
183 | } | ||
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs new file mode 100644 index 0000000..b421fbd --- /dev/null +++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs | |||
@@ -0,0 +1,129 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Text; | ||
30 | using System.IO; | ||
31 | using System.Threading; | ||
32 | using System.Net; | ||
33 | using System.Net.Sockets; | ||
34 | using System.Timers; | ||
35 | using System.Reflection; | ||
36 | using System.Collections; | ||
37 | using System.Collections.Generic; | ||
38 | using libsecondlife; | ||
39 | using libsecondlife.Packets; | ||
40 | using OpenSim.Terrain; | ||
41 | using OpenSim.Framework.Interfaces; | ||
42 | using OpenSim.Framework.Types; | ||
43 | using OpenSim.Framework; | ||
44 | using OpenSim.Assets; | ||
45 | using OpenSim.Caches; | ||
46 | using OpenSim.Framework.Console; | ||
47 | using OpenSim.Physics.Manager; | ||
48 | using Nwc.XmlRpc; | ||
49 | using OpenSim.Framework.Servers; | ||
50 | using OpenSim.Framework.GenericConfig; | ||
51 | |||
52 | namespace OpenSim | ||
53 | { | ||
54 | public class RegionApplicationBase | ||
55 | { | ||
56 | protected IGenericConfig localConfig; | ||
57 | protected PhysicsManager physManager; | ||
58 | protected AssetCache AssetCache; | ||
59 | protected InventoryCache InventoryCache; | ||
60 | protected Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>(); | ||
61 | protected DateTime startuptime; | ||
62 | protected NetworkServersInfo serversData; | ||
63 | |||
64 | public string m_physicsEngine; | ||
65 | public bool m_sandbox = false; | ||
66 | public bool m_loginserver; | ||
67 | public bool user_accounts = false; | ||
68 | public bool gridLocalAsset = false; | ||
69 | protected bool configFileSetup = false; | ||
70 | public string m_config; | ||
71 | |||
72 | protected List<UDPServer> m_udpServer = new List<UDPServer>(); | ||
73 | protected List<RegionInfo> regionData = new List<RegionInfo>(); | ||
74 | protected List<IWorld> m_localWorld = new List<IWorld>(); | ||
75 | protected BaseHttpServer httpServer; | ||
76 | protected List<AuthenticateSessionsBase> AuthenticateSessionsHandler = new List<AuthenticateSessionsBase>(); | ||
77 | |||
78 | protected LogBase m_log; | ||
79 | |||
80 | public RegionApplicationBase() | ||
81 | { | ||
82 | |||
83 | } | ||
84 | |||
85 | public RegionApplicationBase(bool sandBoxMode, bool startLoginServer, string physicsEngine, bool useConfigFile, bool silent, string configFile) | ||
86 | { | ||
87 | this.configFileSetup = useConfigFile; | ||
88 | m_sandbox = sandBoxMode; | ||
89 | m_loginserver = startLoginServer; | ||
90 | m_physicsEngine = physicsEngine; | ||
91 | m_config = configFile; | ||
92 | } | ||
93 | |||
94 | /*protected World m_localWorld; | ||
95 | public World LocalWorld | ||
96 | { | ||
97 | get { return m_localWorld; } | ||
98 | }*/ | ||
99 | |||
100 | /// <summary> | ||
101 | /// Performs initialisation of the world, such as loading configuration from disk. | ||
102 | /// </summary> | ||
103 | public virtual void StartUp() | ||
104 | { | ||
105 | } | ||
106 | |||
107 | protected virtual void SetupLocalGridServers() | ||
108 | { | ||
109 | } | ||
110 | |||
111 | protected virtual void SetupRemoteGridServers() | ||
112 | { | ||
113 | |||
114 | } | ||
115 | |||
116 | protected virtual void SetupWorld() | ||
117 | { | ||
118 | } | ||
119 | |||
120 | protected virtual void SetupHttpListener() | ||
121 | { | ||
122 | } | ||
123 | |||
124 | protected virtual void ConnectToRemoteGridServer() | ||
125 | { | ||
126 | |||
127 | } | ||
128 | } | ||
129 | } | ||
diff --git a/OpenSim/Region/ClientStack/UDPServer.cs b/OpenSim/Region/ClientStack/UDPServer.cs new file mode 100644 index 0000000..f2a02d9 --- /dev/null +++ b/OpenSim/Region/ClientStack/UDPServer.cs | |||
@@ -0,0 +1,208 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Text; | ||
30 | using System.IO; | ||
31 | using System.Threading; | ||
32 | using System.Net; | ||
33 | using System.Net.Sockets; | ||
34 | using System.Timers; | ||
35 | using System.Reflection; | ||
36 | using System.Collections; | ||
37 | using System.Collections.Generic; | ||
38 | using libsecondlife; | ||
39 | using libsecondlife.Packets; | ||
40 | using OpenSim.Terrain; | ||
41 | using OpenSim.Framework.Interfaces; | ||
42 | using OpenSim.Framework.Types; | ||
43 | using OpenSim.Assets; | ||
44 | using OpenSim.Caches; | ||
45 | using OpenSim.Framework.Console; | ||
46 | using OpenSim.Framework; | ||
47 | using Nwc.XmlRpc; | ||
48 | using OpenSim.Servers; | ||
49 | using OpenSim.GenericConfig; | ||
50 | |||
51 | namespace OpenSim | ||
52 | { | ||
53 | |||
54 | public class UDPServer : ClientStackNetworkHandler | ||
55 | { | ||
56 | protected Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>(); | ||
57 | public Socket Server; | ||
58 | protected IPEndPoint ServerIncoming; | ||
59 | protected byte[] RecvBuffer = new byte[4096]; | ||
60 | protected byte[] ZeroBuffer = new byte[8192]; | ||
61 | protected IPEndPoint ipeSender; | ||
62 | protected EndPoint epSender; | ||
63 | protected AsyncCallback ReceivedData; | ||
64 | protected PacketServer _packetServer; | ||
65 | |||
66 | protected int listenPort; | ||
67 | protected IWorld m_localWorld; | ||
68 | protected AssetCache m_assetCache; | ||
69 | protected InventoryCache m_inventoryCache; | ||
70 | protected LogBase m_log; | ||
71 | protected AuthenticateSessionsBase m_authenticateSessionsClass; | ||
72 | |||
73 | public PacketServer PacketServer | ||
74 | { | ||
75 | get | ||
76 | { | ||
77 | return _packetServer; | ||
78 | } | ||
79 | set | ||
80 | { | ||
81 | _packetServer = value; | ||
82 | } | ||
83 | } | ||
84 | |||
85 | public IWorld LocalWorld | ||
86 | { | ||
87 | set | ||
88 | { | ||
89 | this.m_localWorld = value; | ||
90 | this._packetServer.LocalWorld = this.m_localWorld; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | public UDPServer() | ||
95 | { | ||
96 | } | ||
97 | |||
98 | public UDPServer(int port, AssetCache assetCache, InventoryCache inventoryCache, LogBase console, AuthenticateSessionsBase authenticateClass) | ||
99 | { | ||
100 | listenPort = port; | ||
101 | this.m_assetCache = assetCache; | ||
102 | this.m_inventoryCache = inventoryCache; | ||
103 | this.m_log = console; | ||
104 | this.m_authenticateSessionsClass = authenticateClass; | ||
105 | this.CreatePacketServer(); | ||
106 | |||
107 | } | ||
108 | |||
109 | protected virtual void CreatePacketServer() | ||
110 | { | ||
111 | PacketServer packetServer = new PacketServer(this, (uint) listenPort); | ||
112 | } | ||
113 | |||
114 | protected virtual void OnReceivedData(IAsyncResult result) | ||
115 | { | ||
116 | ipeSender = new IPEndPoint(IPAddress.Any, 0); | ||
117 | epSender = (EndPoint)ipeSender; | ||
118 | Packet packet = null; | ||
119 | int numBytes = Server.EndReceiveFrom(result, ref epSender); | ||
120 | int packetEnd = numBytes - 1; | ||
121 | |||
122 | packet = Packet.BuildPacket(RecvBuffer, ref packetEnd, ZeroBuffer); | ||
123 | |||
124 | // do we already have a circuit for this endpoint | ||
125 | if (this.clientCircuits.ContainsKey(epSender)) | ||
126 | { | ||
127 | //if so then send packet to the packetserver | ||
128 | this._packetServer.ClientInPacket(this.clientCircuits[epSender], packet); | ||
129 | } | ||
130 | else if (packet.Type == PacketType.UseCircuitCode) | ||
131 | { | ||
132 | // new client | ||
133 | this.AddNewClient(packet); | ||
134 | } | ||
135 | else | ||
136 | { // invalid client | ||
137 | m_log.Warn("UDPServer.cs:OnReceivedData() - WARNING: Got a packet from an invalid client - " + epSender.ToString()); | ||
138 | } | ||
139 | |||
140 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); | ||
141 | } | ||
142 | |||
143 | protected virtual void AddNewClient(Packet packet) | ||
144 | { | ||
145 | UseCircuitCodePacket useCircuit = (UseCircuitCodePacket)packet; | ||
146 | this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code); | ||
147 | |||
148 | this.PacketServer.AddNewClient(epSender, useCircuit, m_assetCache, m_inventoryCache, m_authenticateSessionsClass); | ||
149 | } | ||
150 | |||
151 | public void ServerListener() | ||
152 | { | ||
153 | m_log.Status("UDPServer.cs:ServerListener() - Opening UDP socket on " + listenPort); | ||
154 | |||
155 | ServerIncoming = new IPEndPoint(IPAddress.Any, listenPort); | ||
156 | Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); | ||
157 | Server.Bind(ServerIncoming); | ||
158 | |||
159 | m_log.Verbose("UDPServer.cs:ServerListener() - UDP socket bound, getting ready to listen"); | ||
160 | |||
161 | ipeSender = new IPEndPoint(IPAddress.Any, 0); | ||
162 | epSender = (EndPoint)ipeSender; | ||
163 | ReceivedData = new AsyncCallback(this.OnReceivedData); | ||
164 | Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); | ||
165 | |||
166 | m_log.Verbose("UDPServer.cs:ServerListener() - Listening..."); | ||
167 | |||
168 | } | ||
169 | |||
170 | public virtual void RegisterPacketServer(PacketServer server) | ||
171 | { | ||
172 | this._packetServer = server; | ||
173 | } | ||
174 | |||
175 | public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)//EndPoint packetSender) | ||
176 | { | ||
177 | // find the endpoint for this circuit | ||
178 | EndPoint sendto = null; | ||
179 | foreach (KeyValuePair<EndPoint, uint> p in this.clientCircuits) | ||
180 | { | ||
181 | if (p.Value == circuitcode) | ||
182 | { | ||
183 | sendto = p.Key; | ||
184 | break; | ||
185 | } | ||
186 | } | ||
187 | if (sendto != null) | ||
188 | { | ||
189 | //we found the endpoint so send the packet to it | ||
190 | this.Server.SendTo(buffer, size, flags, sendto); | ||
191 | } | ||
192 | } | ||
193 | |||
194 | public virtual void RemoveClientCircuit(uint circuitcode) | ||
195 | { | ||
196 | foreach (KeyValuePair<EndPoint, uint> p in this.clientCircuits) | ||
197 | { | ||
198 | if (p.Value == circuitcode) | ||
199 | { | ||
200 | this.clientCircuits.Remove(p.Key); | ||
201 | break; | ||
202 | } | ||
203 | } | ||
204 | } | ||
205 | |||
206 | |||
207 | } | ||
208 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/ClientStack/VersionInfo.cs b/OpenSim/Region/ClientStack/VersionInfo.cs new file mode 100644 index 0000000..5d1354e --- /dev/null +++ b/OpenSim/Region/ClientStack/VersionInfo.cs | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | |||
30 | namespace OpenSim | ||
31 | { | ||
32 | /// <summary> | ||
33 | /// </summary> | ||
34 | public class VersionInfo | ||
35 | { | ||
36 | public static string Version = "0.3, SVN build "; | ||
37 | } | ||
38 | } | ||
diff --git a/OpenSim/Region/Examples/SimpleApp/MyWorld.cs b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs new file mode 100644 index 0000000..01e0c59 --- /dev/null +++ b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs | |||
@@ -0,0 +1,113 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Framework.Interfaces; | ||
5 | using OpenSim.Framework.Types; | ||
6 | using OpenSim.Framework.Console; | ||
7 | using libsecondlife; | ||
8 | using OpenSim.Region; | ||
9 | using Avatar=OpenSim.Region.Scenes.ScenePresence; | ||
10 | using OpenSim.Region.Scenes; | ||
11 | using OpenSim.Framework; | ||
12 | using OpenSim.Caches; | ||
13 | using OpenGrid.Framework.Communications; | ||
14 | using OpenSim.Servers; | ||
15 | |||
16 | namespace SimpleApp | ||
17 | { | ||
18 | public class MyWorld : Scene | ||
19 | { | ||
20 | private RegionInfo m_regionInfo; | ||
21 | private List<OpenSim.Region.Scenes.ScenePresence> m_avatars; | ||
22 | |||
23 | public MyWorld(Dictionary<uint, IClientAPI> clientThreads, RegionInfo regionInfo, AuthenticateSessionsBase authen, CommunicationsManager commsMan, AssetCache assetCach, BaseHttpServer httpServer) | ||
24 | : base(clientThreads, regionInfo, authen, commsMan, assetCach, httpServer) | ||
25 | { | ||
26 | m_regionInfo = regionInfo; | ||
27 | m_avatars = new List<Avatar>(); | ||
28 | } | ||
29 | |||
30 | public override void SendLayerData(IClientAPI remoteClient) | ||
31 | { | ||
32 | float[] map = new float[65536]; | ||
33 | |||
34 | for (int i = 0; i < 65536; i++) | ||
35 | { | ||
36 | int x = i % 256; | ||
37 | int y = i / 256; | ||
38 | |||
39 | map[i] = (float)(x + y / 2); | ||
40 | } | ||
41 | |||
42 | remoteClient.SendLayerData(map); | ||
43 | } | ||
44 | |||
45 | #region IWorld Members | ||
46 | |||
47 | override public void AddNewClient(IClientAPI client, LLUUID agentID, bool child) | ||
48 | |||
49 | { | ||
50 | LLVector3 pos = new LLVector3(128, 128, 128); | ||
51 | |||
52 | client.OnRegionHandShakeReply += SendLayerData; | ||
53 | client.OnChatFromViewer += | ||
54 | delegate(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) | ||
55 | { | ||
56 | // Echo it (so you know what you typed) | ||
57 | client.SendChatMessage(message, type, fromPos, fromName, fromAgentID); | ||
58 | client.SendChatMessage("Ready.", 1, pos, "System", LLUUID.Zero ); | ||
59 | }; | ||
60 | |||
61 | client.OnRequestWearables += SendWearables; | ||
62 | |||
63 | client.OnCompleteMovementToRegion += delegate() | ||
64 | { | ||
65 | client.MoveAgentIntoRegion(m_regionInfo, pos, LLVector3.Zero ); | ||
66 | }; | ||
67 | |||
68 | client.OnCompleteMovementToRegion += delegate() | ||
69 | { | ||
70 | client.SendAvatarData(m_regionInfo.RegionHandle, client.FirstName, | ||
71 | client.LastName, client.AgentId, 0, | ||
72 | pos, null); | ||
73 | |||
74 | client.SendChatMessage("Welcome to My World.", 1, pos, "System", LLUUID.Zero ); | ||
75 | }; | ||
76 | |||
77 | client.SendRegionHandshake(m_regionInfo); | ||
78 | |||
79 | OpenSim.Region.Scenes.ScenePresence avatar = new Avatar( client, this, m_regionInfo ); | ||
80 | |||
81 | } | ||
82 | |||
83 | private void SendWearables( IClientAPI client ) | ||
84 | { | ||
85 | client.SendWearables( AvatarWearable.DefaultWearables ); | ||
86 | } | ||
87 | |||
88 | |||
89 | override public void RemoveClient(LLUUID agentID) | ||
90 | { | ||
91 | |||
92 | } | ||
93 | |||
94 | public RegionInfo RegionInfo | ||
95 | { | ||
96 | get { return m_regionInfo; } | ||
97 | } | ||
98 | |||
99 | public object SyncRoot | ||
100 | { | ||
101 | get { return this; } | ||
102 | } | ||
103 | |||
104 | private uint m_nextLocalId = 1; | ||
105 | |||
106 | public uint NextLocalId | ||
107 | { | ||
108 | get { return m_nextLocalId++; } | ||
109 | } | ||
110 | |||
111 | #endregion | ||
112 | } | ||
113 | } | ||
diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs new file mode 100644 index 0000000..e1465d1 --- /dev/null +++ b/OpenSim/Region/Examples/SimpleApp/Program.cs | |||
@@ -0,0 +1,128 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim; | ||
5 | using OpenSim.GridInterfaces.Local; | ||
6 | using OpenSim.Framework.Interfaces; | ||
7 | using OpenSim.Framework.Types; | ||
8 | using OpenSim.Framework.Console; | ||
9 | using OpenSim.Assets; | ||
10 | using libsecondlife; | ||
11 | using OpenSim.Servers; | ||
12 | using OpenSim.Framework; | ||
13 | using OpenSim.Caches; | ||
14 | using OpenGrid.Framework.Communications; | ||
15 | using OpenSim.LocalCommunications; | ||
16 | |||
17 | namespace SimpleApp | ||
18 | { | ||
19 | class Program : IAssetReceiver, conscmd_callback | ||
20 | { | ||
21 | private LogBase m_log; | ||
22 | AuthenticateSessionsBase m_circuitManager; | ||
23 | |||
24 | private void Run() | ||
25 | { | ||
26 | m_log = new LogBase(null, "SimpleApp", this, false); | ||
27 | MainLog.Instance = m_log; | ||
28 | |||
29 | // CheckSumServer checksumServer = new CheckSumServer(12036); | ||
30 | // checksumServer.ServerListener(); | ||
31 | |||
32 | string simAddr = "127.0.0.1"; | ||
33 | int simPort = 9000; | ||
34 | /* | ||
35 | LoginServer loginServer = new LoginServer( simAddr, simPort, 0, 0, false ); | ||
36 | loginServer.Startup(); | ||
37 | loginServer.SetSessionHandler( AddNewSessionHandler );*/ | ||
38 | |||
39 | m_circuitManager = new AuthenticateSessionsBase(); | ||
40 | |||
41 | InventoryCache inventoryCache = new InventoryCache(); | ||
42 | |||
43 | LocalAssetServer assetServer = new LocalAssetServer(); | ||
44 | assetServer.SetServerInfo("http://127.0.0.1:8003/", ""); | ||
45 | assetServer.SetReceiver(this); | ||
46 | |||
47 | AssetCache assetCache = new AssetCache(assetServer); | ||
48 | |||
49 | UDPServer udpServer = new UDPServer(simPort, assetCache, inventoryCache, m_log, m_circuitManager ); | ||
50 | PacketServer packetServer = new PacketServer( udpServer, (uint) simPort ); | ||
51 | udpServer.ServerListener(); | ||
52 | |||
53 | ClientView.TerrainManager = new TerrainManager(new SecondLife()); | ||
54 | |||
55 | CommunicationsManager communicationsManager = new CommunicationsLocal(null); | ||
56 | |||
57 | RegionInfo regionInfo = new RegionInfo( ); | ||
58 | BaseHttpServer httpServer = new BaseHttpServer(simPort); | ||
59 | udpServer.LocalWorld = new MyWorld( packetServer.ClientAPIs, regionInfo, m_circuitManager, communicationsManager, assetCache, httpServer ); | ||
60 | |||
61 | // World world = new World(udpServer.PacketServer.ClientAPIs, regionInfo); | ||
62 | // PhysicsScene physicsScene = new NullPhysicsScene(); | ||
63 | // world.PhysicsScene = physicsScene; | ||
64 | // udpServer.LocalWorld = world; | ||
65 | |||
66 | // httpServer.AddXmlRPCHandler( "login_to_simulator", loginServer.XmlRpcLoginMethod ); | ||
67 | httpServer.Start(); | ||
68 | |||
69 | m_log.WriteLine( LogPriority.NORMAL, "Press enter to quit."); | ||
70 | m_log.ReadLine(); | ||
71 | } | ||
72 | |||
73 | private bool AddNewSessionHandler(ulong regionHandle, Login loginData) | ||
74 | { | ||
75 | m_log.WriteLine(LogPriority.NORMAL, "Region [{0}] recieved Login from [{1}] [{2}]", regionHandle, loginData.First, loginData.Last); | ||
76 | |||
77 | AgentCircuitData agent = new AgentCircuitData(); | ||
78 | agent.AgentID = loginData.Agent; | ||
79 | agent.firstname = loginData.First; | ||
80 | agent.lastname = loginData.Last; | ||
81 | agent.SessionID = loginData.Session; | ||
82 | agent.SecureSessionID = loginData.SecureSession; | ||
83 | agent.circuitcode = loginData.CircuitCode; | ||
84 | agent.BaseFolder = loginData.BaseFolder; | ||
85 | agent.InventoryFolder = loginData.InventoryFolder; | ||
86 | agent.startpos = new LLVector3(128, 128, 70); | ||
87 | |||
88 | m_circuitManager.AddNewCircuit(agent.circuitcode, agent); | ||
89 | |||
90 | return true; | ||
91 | } | ||
92 | |||
93 | #region IAssetReceiver Members | ||
94 | |||
95 | public void AssetReceived( AssetBase asset, bool IsTexture) | ||
96 | { | ||
97 | throw new Exception("The method or operation is not implemented."); | ||
98 | } | ||
99 | |||
100 | public void AssetNotFound( AssetBase asset) | ||
101 | { | ||
102 | throw new Exception("The method or operation is not implemented."); | ||
103 | } | ||
104 | |||
105 | #endregion | ||
106 | |||
107 | #region conscmd_callback Members | ||
108 | |||
109 | public void RunCmd(string cmd, string[] cmdparams) | ||
110 | { | ||
111 | throw new Exception("The method or operation is not implemented."); | ||
112 | } | ||
113 | |||
114 | public void Show(string ShowWhat) | ||
115 | { | ||
116 | throw new Exception("The method or operation is not implemented."); | ||
117 | } | ||
118 | |||
119 | #endregion | ||
120 | |||
121 | static void Main(string[] args) | ||
122 | { | ||
123 | Program app = new Program(); | ||
124 | |||
125 | app.Run(); | ||
126 | } | ||
127 | } | ||
128 | } | ||
diff --git a/OpenSim/Region/Examples/SimpleApp/Properties/AssemblyInfo.cs b/OpenSim/Region/Examples/SimpleApp/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0f9bf0f --- /dev/null +++ b/OpenSim/Region/Examples/SimpleApp/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,33 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("SimpleApp")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("Playahead AB")] | ||
12 | [assembly: AssemblyProduct("SimpleApp")] | ||
13 | [assembly: AssemblyCopyright("Copyright © Playahead AB 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("a5cfa45f-5acf-4b2e-9c50-1dd1fd7608ee")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | [assembly: AssemblyVersion("1.0.0.0")] | ||
33 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Region/Examples/SimpleApp/SimpleApp.csproj b/OpenSim/Region/Examples/SimpleApp/SimpleApp.csproj new file mode 100644 index 0000000..5129be2 --- /dev/null +++ b/OpenSim/Region/Examples/SimpleApp/SimpleApp.csproj | |||
@@ -0,0 +1,154 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{24B12448-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>SimpleApp</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Exe</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>SimpleApp</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="OpenSim.Servers" > | ||
66 | <HintPath>OpenSim.Servers.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Data.dll" > | ||
74 | <HintPath>..\..\..\..\bin\System.Data.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="XMLRPC.dll" > | ||
82 | <HintPath>..\..\..\..\bin\XMLRPC.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | </ItemGroup> | ||
86 | <ItemGroup> | ||
87 | <ProjectReference Include="..\..\..\Framework\General\OpenSim.Framework.csproj"> | ||
88 | <Name>OpenSim.Framework</Name> | ||
89 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
90 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
91 | <Private>False</Private> | ||
92 | </ProjectReference> | ||
93 | <ProjectReference Include="..\..\..\Framework\Communications\OpenSim.Framework.Communications.csproj"> | ||
94 | <Name>OpenSim.Framework.Communications</Name> | ||
95 | <Project>{CB52B7E7-0000-0000-0000-000000000000}</Project> | ||
96 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
97 | <Private>False</Private> | ||
98 | </ProjectReference> | ||
99 | <ProjectReference Include="..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
100 | <Name>OpenSim.Framework.Console</Name> | ||
101 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
102 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
103 | <Private>False</Private> | ||
104 | </ProjectReference> | ||
105 | <ProjectReference Include="..\..\Caches\OpenSim.Region.Caches.csproj"> | ||
106 | <Name>OpenSim.Region.Caches</Name> | ||
107 | <Project>{61FCCDB3-0000-0000-0000-000000000000}</Project> | ||
108 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
109 | <Private>False</Private> | ||
110 | </ProjectReference> | ||
111 | <ProjectReference Include="..\..\ClientStack\OpenSim.Region.ClientStack.csproj"> | ||
112 | <Name>OpenSim.Region.ClientStack</Name> | ||
113 | <Project>{DC3698B2-0000-0000-0000-000000000000}</Project> | ||
114 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
115 | <Private>False</Private> | ||
116 | </ProjectReference> | ||
117 | <ProjectReference Include="..\..\GridInterfaces\Local\OpenSim.Region.GridInterfaces.Local.csproj"> | ||
118 | <Name>OpenSim.Region.GridInterfaces.Local</Name> | ||
119 | <Project>{241A8CDD-0000-0000-0000-000000000000}</Project> | ||
120 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
121 | <Private>False</Private> | ||
122 | </ProjectReference> | ||
123 | <ProjectReference Include="..\..\LocalCommunications\OpenSim.Region.LocalCommunications.csproj"> | ||
124 | <Name>OpenSim.Region.LocalCommunications</Name> | ||
125 | <Project>{EB3A1BA8-0000-0000-0000-000000000000}</Project> | ||
126 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
127 | <Private>False</Private> | ||
128 | </ProjectReference> | ||
129 | <ProjectReference Include="..\..\Simulation\OpenSim.Region.Simulation.csproj"> | ||
130 | <Name>OpenSim.Region.Simulation</Name> | ||
131 | <Project>{C0DAB338-0000-0000-0000-000000000000}</Project> | ||
132 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
133 | <Private>False</Private> | ||
134 | </ProjectReference> | ||
135 | </ItemGroup> | ||
136 | <ItemGroup> | ||
137 | <Compile Include="MyWorld.cs"> | ||
138 | <SubType>Code</SubType> | ||
139 | </Compile> | ||
140 | <Compile Include="Program.cs"> | ||
141 | <SubType>Code</SubType> | ||
142 | </Compile> | ||
143 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
144 | <SubType>Code</SubType> | ||
145 | </Compile> | ||
146 | </ItemGroup> | ||
147 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
148 | <PropertyGroup> | ||
149 | <PreBuildEvent> | ||
150 | </PreBuildEvent> | ||
151 | <PostBuildEvent> | ||
152 | </PostBuildEvent> | ||
153 | </PropertyGroup> | ||
154 | </Project> | ||
diff --git a/OpenSim/Region/Examples/SimpleApp/SimpleApp.csproj.user b/OpenSim/Region/Examples/SimpleApp/SimpleApp.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Examples/SimpleApp/SimpleApp.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/GridInterfaces/Local/AssemblyInfo.cs b/OpenSim/Region/GridInterfaces/Local/AssemblyInfo.cs new file mode 100644 index 0000000..52ecd6b --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Local/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("LocalGridServers")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("LocalGridServers")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs b/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs new file mode 100644 index 0000000..87eff49 --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Local/LocalAssetServer.cs | |||
@@ -0,0 +1,312 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Threading; | ||
32 | using System.IO; | ||
33 | using OpenSim.Framework.Interfaces; | ||
34 | using OpenSim.Framework.Types; | ||
35 | using OpenSim.Framework.Utilities; | ||
36 | using OpenSim.Framework.Console; | ||
37 | using libsecondlife; | ||
38 | using Db4objects.Db4o; | ||
39 | using Db4objects.Db4o.Query; | ||
40 | |||
41 | namespace OpenSim.GridInterfaces.Local | ||
42 | { | ||
43 | public class LocalAssetPlugin : IAssetPlugin | ||
44 | { | ||
45 | public LocalAssetPlugin() | ||
46 | { | ||
47 | |||
48 | } | ||
49 | |||
50 | public IAssetServer GetAssetServer() | ||
51 | { | ||
52 | return (new LocalAssetServer()); | ||
53 | } | ||
54 | } | ||
55 | |||
56 | public class LocalAssetServer : IAssetServer | ||
57 | { | ||
58 | private IAssetReceiver _receiver; | ||
59 | private BlockingQueue<ARequest> _assetRequests; | ||
60 | private IObjectContainer db; | ||
61 | private Thread _localAssetServerThread; | ||
62 | |||
63 | public LocalAssetServer() | ||
64 | { | ||
65 | bool yapfile; | ||
66 | this._assetRequests = new BlockingQueue<ARequest>(); | ||
67 | yapfile = System.IO.File.Exists("assets.yap"); | ||
68 | |||
69 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Local Asset Server class created"); | ||
70 | try | ||
71 | { | ||
72 | db = Db4oFactory.OpenFile("assets.yap"); | ||
73 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Db4 Asset database creation"); | ||
74 | } | ||
75 | catch (Exception e) | ||
76 | { | ||
77 | db.Close(); | ||
78 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(LogPriority.MEDIUM, "Db4 Asset server :Constructor - Exception occured"); | ||
79 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
80 | } | ||
81 | if (!yapfile) | ||
82 | { | ||
83 | this.SetUpAssetDatabase(); | ||
84 | } | ||
85 | this._localAssetServerThread = new Thread(new ThreadStart(RunRequests)); | ||
86 | this._localAssetServerThread.IsBackground = true; | ||
87 | this._localAssetServerThread.Start(); | ||
88 | |||
89 | } | ||
90 | |||
91 | public void SetReceiver(IAssetReceiver receiver) | ||
92 | { | ||
93 | this._receiver = receiver; | ||
94 | } | ||
95 | |||
96 | public void RequestAsset(LLUUID assetID, bool isTexture) | ||
97 | { | ||
98 | ARequest req = new ARequest(); | ||
99 | req.AssetID = assetID; | ||
100 | req.IsTexture = isTexture; | ||
101 | this._assetRequests.Enqueue(req); | ||
102 | } | ||
103 | |||
104 | public void UpdateAsset(AssetBase asset) | ||
105 | { | ||
106 | |||
107 | } | ||
108 | |||
109 | public void UploadNewAsset(AssetBase asset) | ||
110 | { | ||
111 | AssetStorage store = new AssetStorage(); | ||
112 | store.Data = asset.Data; | ||
113 | store.Name = asset.Name; | ||
114 | store.UUID = asset.FullID; | ||
115 | db.Set(store); | ||
116 | db.Commit(); | ||
117 | } | ||
118 | |||
119 | public void SetServerInfo(string ServerUrl, string ServerKey) | ||
120 | { | ||
121 | |||
122 | } | ||
123 | public void Close() | ||
124 | { | ||
125 | if (db != null) | ||
126 | { | ||
127 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Closing local asset server database"); | ||
128 | db.Close(); | ||
129 | } | ||
130 | } | ||
131 | |||
132 | private void RunRequests() | ||
133 | { | ||
134 | while (true) | ||
135 | { | ||
136 | byte[] idata = null; | ||
137 | bool found = false; | ||
138 | AssetStorage foundAsset = null; | ||
139 | ARequest req = this._assetRequests.Dequeue(); | ||
140 | IObjectSet result = db.Query(new AssetUUIDQuery(req.AssetID)); | ||
141 | if (result.Count > 0) | ||
142 | { | ||
143 | foundAsset = (AssetStorage)result.Next(); | ||
144 | found = true; | ||
145 | } | ||
146 | |||
147 | AssetBase asset = new AssetBase(); | ||
148 | if (found) | ||
149 | { | ||
150 | asset.FullID = foundAsset.UUID; | ||
151 | asset.Type = foundAsset.Type; | ||
152 | asset.InvType = foundAsset.Type; | ||
153 | asset.Name = foundAsset.Name; | ||
154 | idata = foundAsset.Data; | ||
155 | } | ||
156 | else | ||
157 | { | ||
158 | asset.FullID = LLUUID.Zero; | ||
159 | } | ||
160 | asset.Data = idata; | ||
161 | _receiver.AssetReceived(asset, req.IsTexture); | ||
162 | } | ||
163 | |||
164 | } | ||
165 | |||
166 | private void SetUpAssetDatabase() | ||
167 | { | ||
168 | try | ||
169 | { | ||
170 | |||
171 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "Setting up asset database"); | ||
172 | |||
173 | AssetBase Image = new AssetBase(); | ||
174 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000001"); | ||
175 | Image.Name = "Bricks"; | ||
176 | this.LoadAsset(Image, true, "bricks.jp2"); | ||
177 | AssetStorage store = new AssetStorage(); | ||
178 | store.Data = Image.Data; | ||
179 | store.Name = Image.Name; | ||
180 | store.UUID = Image.FullID; | ||
181 | db.Set(store); | ||
182 | db.Commit(); | ||
183 | |||
184 | Image = new AssetBase(); | ||
185 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000002"); | ||
186 | Image.Name = "Plywood"; | ||
187 | this.LoadAsset(Image, true, "plywood.jp2"); | ||
188 | store = new AssetStorage(); | ||
189 | store.Data = Image.Data; | ||
190 | store.Name = Image.Name; | ||
191 | store.UUID = Image.FullID; | ||
192 | db.Set(store); | ||
193 | db.Commit(); | ||
194 | |||
195 | Image = new AssetBase(); | ||
196 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000003"); | ||
197 | Image.Name = "Rocks"; | ||
198 | this.LoadAsset(Image, true, "rocks.jp2"); | ||
199 | store = new AssetStorage(); | ||
200 | store.Data = Image.Data; | ||
201 | store.Name = Image.Name; | ||
202 | store.UUID = Image.FullID; | ||
203 | db.Set(store); | ||
204 | db.Commit(); | ||
205 | |||
206 | Image = new AssetBase(); | ||
207 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000004"); | ||
208 | Image.Name = "Granite"; | ||
209 | this.LoadAsset(Image, true, "granite.jp2"); | ||
210 | store = new AssetStorage(); | ||
211 | store.Data = Image.Data; | ||
212 | store.Name = Image.Name; | ||
213 | store.UUID = Image.FullID; | ||
214 | db.Set(store); | ||
215 | db.Commit(); | ||
216 | |||
217 | Image = new AssetBase(); | ||
218 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000005"); | ||
219 | Image.Name = "Hardwood"; | ||
220 | this.LoadAsset(Image, true, "hardwood.jp2"); | ||
221 | store = new AssetStorage(); | ||
222 | store.Data = Image.Data; | ||
223 | store.Name = Image.Name; | ||
224 | store.UUID = Image.FullID; | ||
225 | db.Set(store); | ||
226 | db.Commit(); | ||
227 | |||
228 | Image = new AssetBase(); | ||
229 | Image.FullID = new LLUUID("00000000-0000-0000-5005-000000000005"); | ||
230 | Image.Name = "Prim Base Texture"; | ||
231 | this.LoadAsset(Image, true, "plywood.jp2"); | ||
232 | store = new AssetStorage(); | ||
233 | store.Data = Image.Data; | ||
234 | store.Name = Image.Name; | ||
235 | store.UUID = Image.FullID; | ||
236 | db.Set(store); | ||
237 | db.Commit(); | ||
238 | |||
239 | Image = new AssetBase(); | ||
240 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000006"); | ||
241 | Image.Name = "Map Base Texture"; | ||
242 | this.LoadAsset(Image, true, "map_base.jp2"); | ||
243 | store = new AssetStorage(); | ||
244 | store.Data = Image.Data; | ||
245 | store.Name = Image.Name; | ||
246 | store.UUID = Image.FullID; | ||
247 | db.Set(store); | ||
248 | db.Commit(); | ||
249 | |||
250 | Image = new AssetBase(); | ||
251 | Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000007"); | ||
252 | Image.Name = "Map Texture"; | ||
253 | this.LoadAsset(Image, true, "map1.jp2"); | ||
254 | store = new AssetStorage(); | ||
255 | store.Data = Image.Data; | ||
256 | store.Name = Image.Name; | ||
257 | store.UUID = Image.FullID; | ||
258 | db.Set(store); | ||
259 | db.Commit(); | ||
260 | |||
261 | Image = new AssetBase(); | ||
262 | Image.FullID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73"); | ||
263 | Image.Name = "Shape"; | ||
264 | this.LoadAsset(Image, false, "base_shape.dat"); | ||
265 | store = new AssetStorage(); | ||
266 | store.Data = Image.Data; | ||
267 | store.Name = Image.Name; | ||
268 | store.UUID = Image.FullID; | ||
269 | db.Set(store); | ||
270 | db.Commit(); | ||
271 | } | ||
272 | catch (Exception e) | ||
273 | { | ||
274 | Console.WriteLine(e.Message); | ||
275 | } | ||
276 | |||
277 | } | ||
278 | |||
279 | private void LoadAsset(AssetBase info, bool image, string filename) | ||
280 | { | ||
281 | //should request Asset from storage manager | ||
282 | //but for now read from file | ||
283 | |||
284 | string dataPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder; | ||
285 | string fileName = Path.Combine(dataPath, filename); | ||
286 | FileInfo fInfo = new FileInfo(fileName); | ||
287 | long numBytes = fInfo.Length; | ||
288 | FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); | ||
289 | byte[] idata = new byte[numBytes]; | ||
290 | BinaryReader br = new BinaryReader(fStream); | ||
291 | idata = br.ReadBytes((int)numBytes); | ||
292 | br.Close(); | ||
293 | fStream.Close(); | ||
294 | info.Data = idata; | ||
295 | //info.loaded=true; | ||
296 | } | ||
297 | } | ||
298 | public class AssetUUIDQuery : Predicate | ||
299 | { | ||
300 | private LLUUID _findID; | ||
301 | |||
302 | public AssetUUIDQuery(LLUUID find) | ||
303 | { | ||
304 | _findID = find; | ||
305 | } | ||
306 | public bool Match(AssetStorage asset) | ||
307 | { | ||
308 | return (asset.UUID == _findID); | ||
309 | } | ||
310 | } | ||
311 | |||
312 | } | ||
diff --git a/OpenSim/Region/GridInterfaces/Local/OpenSim.Region.GridInterfaces.Local.csproj b/OpenSim/Region/GridInterfaces/Local/OpenSim.Region.GridInterfaces.Local.csproj new file mode 100644 index 0000000..484a205 --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Local/OpenSim.Region.GridInterfaces.Local.csproj | |||
@@ -0,0 +1,107 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{241A8CDD-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.GridInterfaces.Local</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.GridInterfaces.Local</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Xml" > | ||
74 | <HintPath>System.Xml.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | <ProjectReference Include="..\..\..\Framework\General\OpenSim.Framework.csproj"> | ||
80 | <Name>OpenSim.Framework</Name> | ||
81 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
82 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
83 | <Private>False</Private> | ||
84 | </ProjectReference> | ||
85 | <ProjectReference Include="..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
86 | <Name>OpenSim.Framework.Console</Name> | ||
87 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
88 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
89 | <Private>False</Private> | ||
90 | </ProjectReference> | ||
91 | </ItemGroup> | ||
92 | <ItemGroup> | ||
93 | <Compile Include="AssemblyInfo.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="LocalAssetServer.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | </ItemGroup> | ||
100 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
101 | <PropertyGroup> | ||
102 | <PreBuildEvent> | ||
103 | </PreBuildEvent> | ||
104 | <PostBuildEvent> | ||
105 | </PostBuildEvent> | ||
106 | </PropertyGroup> | ||
107 | </Project> | ||
diff --git a/OpenSim/Region/GridInterfaces/Local/OpenSim.Region.GridInterfaces.Local.csproj.user b/OpenSim/Region/GridInterfaces/Local/OpenSim.Region.GridInterfaces.Local.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Local/OpenSim.Region.GridInterfaces.Local.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/GridInterfaces/Remote/AssemblyInfo.cs b/OpenSim/Region/GridInterfaces/Remote/AssemblyInfo.cs new file mode 100644 index 0000000..51596d0 --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Remote/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("RemoteGridServers")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("RemoteGridServers")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Region/GridInterfaces/Remote/OpenSim.Region.GridInterfaces.Remote.csproj b/OpenSim/Region/GridInterfaces/Remote/OpenSim.Region.GridInterfaces.Remote.csproj new file mode 100644 index 0000000..793fde2 --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Remote/OpenSim.Region.GridInterfaces.Remote.csproj | |||
@@ -0,0 +1,107 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{98C7B681-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.GridInterfaces.Remote</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.GridInterfaces.Remote</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Xml" > | ||
70 | <HintPath>System.Xml.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="XMLRPC.dll" > | ||
74 | <HintPath>..\..\..\..\bin\XMLRPC.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | <ProjectReference Include="..\..\..\Framework\General\OpenSim.Framework.csproj"> | ||
80 | <Name>OpenSim.Framework</Name> | ||
81 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
82 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
83 | <Private>False</Private> | ||
84 | </ProjectReference> | ||
85 | <ProjectReference Include="..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
86 | <Name>OpenSim.Framework.Console</Name> | ||
87 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
88 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
89 | <Private>False</Private> | ||
90 | </ProjectReference> | ||
91 | </ItemGroup> | ||
92 | <ItemGroup> | ||
93 | <Compile Include="AssemblyInfo.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="RemoteAssetServer.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | </ItemGroup> | ||
100 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
101 | <PropertyGroup> | ||
102 | <PreBuildEvent> | ||
103 | </PreBuildEvent> | ||
104 | <PostBuildEvent> | ||
105 | </PostBuildEvent> | ||
106 | </PropertyGroup> | ||
107 | </Project> | ||
diff --git a/OpenSim/Region/GridInterfaces/Remote/OpenSim.Region.GridInterfaces.Remote.csproj.user b/OpenSim/Region/GridInterfaces/Remote/OpenSim.Region.GridInterfaces.Remote.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Remote/OpenSim.Region.GridInterfaces.Remote.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/GridInterfaces/Remote/RemoteAssetServer.cs b/OpenSim/Region/GridInterfaces/Remote/RemoteAssetServer.cs new file mode 100644 index 0000000..ca01c68 --- /dev/null +++ b/OpenSim/Region/GridInterfaces/Remote/RemoteAssetServer.cs | |||
@@ -0,0 +1,135 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Threading; | ||
32 | using System.Net; | ||
33 | using System.Net.Sockets; | ||
34 | using System.IO; | ||
35 | using libsecondlife; | ||
36 | using OpenSim.Framework.Interfaces; | ||
37 | using OpenSim.Framework.Types; | ||
38 | using OpenSim.Framework.Utilities; | ||
39 | |||
40 | namespace OpenSim.GridInterfaces.Remote | ||
41 | { | ||
42 | public class RemoteAssetServer : IAssetServer | ||
43 | { | ||
44 | private IAssetReceiver _receiver; | ||
45 | private BlockingQueue<ARequest> _assetRequests; | ||
46 | private Thread _remoteAssetServerThread; | ||
47 | private string AssetServerUrl; | ||
48 | private string AssetSendKey; | ||
49 | |||
50 | public RemoteAssetServer() | ||
51 | { | ||
52 | this._assetRequests = new BlockingQueue<ARequest>(); | ||
53 | this._remoteAssetServerThread = new Thread(new ThreadStart(RunRequests)); | ||
54 | this._remoteAssetServerThread.IsBackground = true; | ||
55 | this._remoteAssetServerThread.Start(); | ||
56 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Remote Asset Server class created"); | ||
57 | } | ||
58 | |||
59 | public void SetReceiver(IAssetReceiver receiver) | ||
60 | { | ||
61 | this._receiver = receiver; | ||
62 | } | ||
63 | |||
64 | public void RequestAsset(LLUUID assetID, bool isTexture) | ||
65 | { | ||
66 | ARequest req = new ARequest(); | ||
67 | req.AssetID = assetID; | ||
68 | req.IsTexture = isTexture; | ||
69 | this._assetRequests.Enqueue(req); | ||
70 | } | ||
71 | |||
72 | public void UpdateAsset(AssetBase asset) | ||
73 | { | ||
74 | |||
75 | } | ||
76 | |||
77 | public void UploadNewAsset(AssetBase asset) | ||
78 | { | ||
79 | Encoding Windows1252Encoding = Encoding.GetEncoding(1252); | ||
80 | string ret = Windows1252Encoding.GetString(asset.Data); | ||
81 | byte[] buffer = Windows1252Encoding.GetBytes(ret); | ||
82 | WebClient client = new WebClient(); | ||
83 | client.UploadData(this.AssetServerUrl + "assets/" + asset.FullID, buffer); | ||
84 | |||
85 | } | ||
86 | |||
87 | public void SetServerInfo(string ServerUrl, string ServerKey) | ||
88 | { | ||
89 | this.AssetServerUrl = ServerUrl; | ||
90 | this.AssetSendKey = ServerKey; | ||
91 | } | ||
92 | |||
93 | private void RunRequests() | ||
94 | { | ||
95 | while (true) | ||
96 | { | ||
97 | //we need to add support for the asset server not knowing about a requested asset | ||
98 | // 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 | ||
99 | ARequest req = this._assetRequests.Dequeue(); | ||
100 | LLUUID assetID = req.AssetID; | ||
101 | // OpenSim.Framework.Console.MainLog.Instance.Verbose(" RemoteAssetServer- Got a AssetServer request, processing it - " + this.AssetServerUrl + "assets/" + assetID); | ||
102 | WebRequest AssetLoad = WebRequest.Create(this.AssetServerUrl + "assets/" + assetID); | ||
103 | WebResponse AssetResponse = AssetLoad.GetResponse(); | ||
104 | byte[] idata = new byte[(int)AssetResponse.ContentLength]; | ||
105 | BinaryReader br = new BinaryReader(AssetResponse.GetResponseStream()); | ||
106 | idata = br.ReadBytes((int)AssetResponse.ContentLength); | ||
107 | br.Close(); | ||
108 | |||
109 | AssetBase asset = new AssetBase(); | ||
110 | asset.FullID = assetID; | ||
111 | asset.Data = idata; | ||
112 | _receiver.AssetReceived(asset, req.IsTexture); | ||
113 | } | ||
114 | } | ||
115 | |||
116 | public void Close() | ||
117 | { | ||
118 | |||
119 | } | ||
120 | } | ||
121 | |||
122 | public class RemoteAssetPlugin : IAssetPlugin | ||
123 | { | ||
124 | public RemoteAssetPlugin() | ||
125 | { | ||
126 | |||
127 | } | ||
128 | |||
129 | public IAssetServer GetAssetServer() | ||
130 | { | ||
131 | return (new RemoteAssetServer()); | ||
132 | } | ||
133 | } | ||
134 | |||
135 | } | ||
diff --git a/OpenSim/Region/LocalCommunications/CommunicationsLocal.cs b/OpenSim/Region/LocalCommunications/CommunicationsLocal.cs new file mode 100644 index 0000000..743b9b4 --- /dev/null +++ b/OpenSim/Region/LocalCommunications/CommunicationsLocal.cs | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using libsecondlife; | ||
33 | using OpenSim.Framework; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Framework.Types; | ||
36 | using OpenGrid.Framework.Communications; | ||
37 | |||
38 | |||
39 | namespace OpenSim.LocalCommunications | ||
40 | { | ||
41 | public class CommunicationsLocal : CommunicationsManager | ||
42 | { | ||
43 | public LocalBackEndServices SandBoxServices = new LocalBackEndServices(); | ||
44 | public LocalUserServices UserServices; | ||
45 | |||
46 | public CommunicationsLocal(NetworkServersInfo serversInfo) | ||
47 | : base(serversInfo) | ||
48 | { | ||
49 | UserServices = new LocalUserServices(this , serversInfo.DefaultHomeLocX, serversInfo.DefaultHomeLocY); | ||
50 | UserServices.AddPlugin("OpenGrid.Framework.Data.DB4o.dll"); | ||
51 | UserServer = UserServices; | ||
52 | GridServer = SandBoxServices; | ||
53 | InterRegion = SandBoxServices; | ||
54 | } | ||
55 | |||
56 | internal void InformRegionOfLogin(ulong regionHandle, Login login) | ||
57 | { | ||
58 | this.SandBoxServices.AddNewSession(regionHandle, login); | ||
59 | } | ||
60 | } | ||
61 | } | ||
diff --git a/OpenSim/Region/LocalCommunications/LocalBackEndServices.cs b/OpenSim/Region/LocalCommunications/LocalBackEndServices.cs new file mode 100644 index 0000000..ce48c6e --- /dev/null +++ b/OpenSim/Region/LocalCommunications/LocalBackEndServices.cs | |||
@@ -0,0 +1,209 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenGrid.Framework.Communications; | ||
32 | using libsecondlife; | ||
33 | using OpenSim.Framework.Types; | ||
34 | using OpenSim.Framework; | ||
35 | |||
36 | namespace OpenSim.LocalCommunications | ||
37 | { | ||
38 | |||
39 | public class LocalBackEndServices : IGridServices, IInterRegionCommunications | ||
40 | { | ||
41 | protected Dictionary<ulong, RegionInfo> regions = new Dictionary<ulong, RegionInfo>(); | ||
42 | protected Dictionary<ulong, RegionCommsListener> regionHosts = new Dictionary<ulong, RegionCommsListener>(); | ||
43 | |||
44 | public LocalBackEndServices() | ||
45 | { | ||
46 | |||
47 | } | ||
48 | |||
49 | /// <summary> | ||
50 | /// Register a region method with the BackEnd Services. | ||
51 | /// </summary> | ||
52 | /// <param name="regionInfo"></param> | ||
53 | /// <returns></returns> | ||
54 | public RegionCommsListener RegisterRegion(RegionInfo regionInfo, GridInfo gridInfo) | ||
55 | { | ||
56 | //Console.WriteLine("CommsManager - Region " + regionInfo.RegionHandle + " , " + regionInfo.RegionLocX + " , "+ regionInfo.RegionLocY +" is registering"); | ||
57 | if (!this.regions.ContainsKey((uint)regionInfo.RegionHandle)) | ||
58 | { | ||
59 | //Console.WriteLine("CommsManager - Adding Region " + regionInfo.RegionHandle ); | ||
60 | this.regions.Add(regionInfo.RegionHandle, regionInfo); | ||
61 | RegionCommsListener regionHost = new RegionCommsListener(); | ||
62 | this.regionHosts.Add(regionInfo.RegionHandle, regionHost); | ||
63 | |||
64 | return regionHost; | ||
65 | } | ||
66 | |||
67 | //already in our list of regions so for now lets return null | ||
68 | return null; | ||
69 | } | ||
70 | |||
71 | /// <summary> | ||
72 | /// </summary> | ||
73 | /// <param name="regionInfo"></param> | ||
74 | /// <returns></returns> | ||
75 | public List<RegionInfo> RequestNeighbours(RegionInfo regionInfo) | ||
76 | { | ||
77 | // Console.WriteLine("Finding Neighbours to " + regionInfo.RegionHandle); | ||
78 | List<RegionInfo> neighbours = new List<RegionInfo>(); | ||
79 | |||
80 | foreach (RegionInfo reg in this.regions.Values) | ||
81 | { | ||
82 | // Console.WriteLine("CommsManager- RequestNeighbours() checking region " + reg.RegionLocX + " , "+ reg.RegionLocY); | ||
83 | if (reg.RegionHandle != regionInfo.RegionHandle) | ||
84 | { | ||
85 | //Console.WriteLine("CommsManager- RequestNeighbours() - found a different region in list, checking location"); | ||
86 | if ((reg.RegionLocX > (regionInfo.RegionLocX - 2)) && (reg.RegionLocX < (regionInfo.RegionLocX + 2))) | ||
87 | { | ||
88 | if ((reg.RegionLocY > (regionInfo.RegionLocY - 2)) && (reg.RegionLocY < (regionInfo.RegionLocY + 2))) | ||
89 | { | ||
90 | neighbours.Add(reg); | ||
91 | } | ||
92 | } | ||
93 | } | ||
94 | } | ||
95 | return neighbours; | ||
96 | } | ||
97 | |||
98 | /// <summary> | ||
99 | /// | ||
100 | /// </summary> | ||
101 | /// <param name="regionHandle"></param> | ||
102 | /// <returns></returns> | ||
103 | public RegionInfo RequestNeighbourInfo(ulong regionHandle) | ||
104 | { | ||
105 | if (this.regions.ContainsKey(regionHandle)) | ||
106 | { | ||
107 | return this.regions[regionHandle]; | ||
108 | } | ||
109 | return null; | ||
110 | } | ||
111 | |||
112 | /// <summary> | ||
113 | /// | ||
114 | /// </summary> | ||
115 | /// <param name="minX"></param> | ||
116 | /// <param name="minY"></param> | ||
117 | /// <param name="maxX"></param> | ||
118 | /// <param name="maxY"></param> | ||
119 | /// <returns></returns> | ||
120 | public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY) | ||
121 | { | ||
122 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); | ||
123 | foreach(RegionInfo regInfo in this.regions.Values) | ||
124 | { | ||
125 | if (((regInfo.RegionLocX >= minX) && (regInfo.RegionLocX <= maxX)) && ((regInfo.RegionLocY >= minY) && (regInfo.RegionLocY <= maxY))) | ||
126 | { | ||
127 | MapBlockData map = new MapBlockData(); | ||
128 | map.Name = regInfo.RegionName; | ||
129 | map.X = (ushort)regInfo.RegionLocX; | ||
130 | map.Y = (ushort)regInfo.RegionLocY; | ||
131 | map.WaterHeight =(byte) regInfo.estateSettings.waterHeight; | ||
132 | map.MapImageId = regInfo.estateSettings.terrainImageID; //new LLUUID("00000000-0000-0000-9999-000000000007"); | ||
133 | map.Agents = 1; | ||
134 | map.RegionFlags = 72458694; | ||
135 | map.Access = 13; | ||
136 | mapBlocks.Add(map); | ||
137 | } | ||
138 | } | ||
139 | return mapBlocks; | ||
140 | } | ||
141 | |||
142 | /// <summary> | ||
143 | /// </summary> | ||
144 | /// <param name="regionHandle"></param> | ||
145 | /// <param name="agentData"></param> | ||
146 | /// <returns></returns> | ||
147 | public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData) //should change from agentCircuitData | ||
148 | { | ||
149 | //Console.WriteLine("CommsManager- Trying to Inform a region to expect child agent"); | ||
150 | if (this.regionHosts.ContainsKey(regionHandle)) | ||
151 | { | ||
152 | // Console.WriteLine("CommsManager- Informing a region to expect child agent"); | ||
153 | this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agentData); | ||
154 | return true; | ||
155 | } | ||
156 | return false; | ||
157 | } | ||
158 | |||
159 | /// <summary> | ||
160 | /// | ||
161 | /// </summary> | ||
162 | /// <param name="regionHandle"></param> | ||
163 | /// <param name="agentID"></param> | ||
164 | /// <param name="position"></param> | ||
165 | /// <returns></returns> | ||
166 | public bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position) | ||
167 | { | ||
168 | if (this.regionHosts.ContainsKey(regionHandle)) | ||
169 | { | ||
170 | // Console.WriteLine("CommsManager- Informing a region to expect avatar crossing"); | ||
171 | this.regionHosts[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position); | ||
172 | return true; | ||
173 | } | ||
174 | return false; | ||
175 | } | ||
176 | |||
177 | /// <summary> | ||
178 | /// Is a Sandbox mode method, used by the local Login server to inform a region of a connection user/session | ||
179 | /// </summary> | ||
180 | /// <param name="regionHandle"></param> | ||
181 | /// <param name="loginData"></param> | ||
182 | /// <returns></returns> | ||
183 | public bool AddNewSession(ulong regionHandle, Login loginData) | ||
184 | { | ||
185 | //Console.WriteLine(" comms manager been told to expect new user"); | ||
186 | AgentCircuitData agent = new AgentCircuitData(); | ||
187 | agent.AgentID = loginData.Agent; | ||
188 | agent.firstname = loginData.First; | ||
189 | agent.lastname = loginData.Last; | ||
190 | agent.SessionID = loginData.Session; | ||
191 | agent.SecureSessionID = loginData.SecureSession; | ||
192 | agent.circuitcode = loginData.CircuitCode; | ||
193 | agent.BaseFolder = loginData.BaseFolder; | ||
194 | agent.InventoryFolder = loginData.InventoryFolder; | ||
195 | agent.startpos = new LLVector3(128, 128, 70); | ||
196 | agent.CapsPath = loginData.CapsPath; | ||
197 | |||
198 | if (this.regionHosts.ContainsKey(regionHandle)) | ||
199 | { | ||
200 | this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agent); | ||
201 | return true; | ||
202 | } | ||
203 | |||
204 | // region not found | ||
205 | return false; | ||
206 | } | ||
207 | } | ||
208 | } | ||
209 | |||
diff --git a/OpenSim/Region/LocalCommunications/LocalUserServices.cs b/OpenSim/Region/LocalCommunications/LocalUserServices.cs new file mode 100644 index 0000000..a7f7aa4 --- /dev/null +++ b/OpenSim/Region/LocalCommunications/LocalUserServices.cs | |||
@@ -0,0 +1,118 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using System.Text; | ||
5 | |||
6 | using OpenGrid.Framework.Communications; | ||
7 | //using OpenSim.Framework.User; | ||
8 | using OpenGrid.Framework.UserManagement; | ||
9 | using OpenGrid.Framework.Data; | ||
10 | using OpenSim.Framework.Types; | ||
11 | using OpenSim.Framework.Utilities; | ||
12 | |||
13 | using libsecondlife; | ||
14 | |||
15 | namespace OpenSim.LocalCommunications | ||
16 | { | ||
17 | public class LocalUserServices : UserManagerBase, IUserServices | ||
18 | { | ||
19 | private CommunicationsLocal m_Parent; | ||
20 | |||
21 | private uint defaultHomeX ; | ||
22 | private uint defaultHomeY; | ||
23 | public LocalUserServices(CommunicationsLocal parent, uint defHomeX, uint defHomeY) | ||
24 | { | ||
25 | m_Parent = parent; | ||
26 | defaultHomeX = defHomeX; | ||
27 | defaultHomeY = defHomeY; | ||
28 | } | ||
29 | |||
30 | public UserProfileData GetUserProfile(string firstName, string lastName) | ||
31 | { | ||
32 | return GetUserProfile(firstName + " " + lastName); | ||
33 | } | ||
34 | |||
35 | public UserProfileData GetUserProfile(string name) | ||
36 | { | ||
37 | return this.getUserProfile(name); | ||
38 | } | ||
39 | public UserProfileData GetUserProfile(LLUUID avatarID) | ||
40 | { | ||
41 | return this.getUserProfile(avatarID); | ||
42 | } | ||
43 | |||
44 | /// <summary> | ||
45 | /// | ||
46 | /// </summary> | ||
47 | /// <returns></returns> | ||
48 | public override string GetMessage() | ||
49 | { | ||
50 | return "Welcome to OpenSim"; | ||
51 | } | ||
52 | |||
53 | public override UserProfileData GetTheUser(string firstname, string lastname) | ||
54 | { | ||
55 | UserProfileData profile = getUserProfile(firstname, lastname); | ||
56 | if (profile != null) | ||
57 | { | ||
58 | |||
59 | return profile; | ||
60 | } | ||
61 | |||
62 | //no current user account so make one | ||
63 | Console.WriteLine("No User account found so creating a new one "); | ||
64 | this.AddUserProfile(firstname, lastname, "test", defaultHomeX, defaultHomeY); | ||
65 | |||
66 | profile = getUserProfile(firstname, lastname); | ||
67 | |||
68 | return profile; | ||
69 | } | ||
70 | |||
71 | public override bool AuthenticateUser(ref UserProfileData profile, string password) | ||
72 | { | ||
73 | //for now we will accept any password in sandbox mode | ||
74 | Console.WriteLine("authorising user"); | ||
75 | return true; | ||
76 | } | ||
77 | |||
78 | public override void CustomiseResponse(ref LoginResponse response, ref UserProfileData theUser) | ||
79 | { | ||
80 | ulong currentRegion = theUser.currentAgent.currentHandle; | ||
81 | RegionInfo reg = m_Parent.GridServer.RequestNeighbourInfo(currentRegion); | ||
82 | |||
83 | |||
84 | if (reg != null) | ||
85 | { | ||
86 | response.Home = "{'region_handle':[r" + (reg.RegionLocX * 256).ToString() + ",r" + (reg.RegionLocY * 256).ToString() + "], " + | ||
87 | "'position':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "], " + | ||
88 | "'look_at':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "]}"; | ||
89 | string capsPath = Util.GetRandomCapsPath(); | ||
90 | response.SimAddress = reg.CommsIPListenAddr; | ||
91 | response.SimPort = (Int32)reg.CommsIPListenPort; | ||
92 | response.RegionX = reg.RegionLocX ; | ||
93 | response.RegionY = reg.RegionLocY ; | ||
94 | response.SeedCapability = "http://" + reg.CommsIPListenAddr + ":" + "9000" + "/CAPS/" + capsPath + "0000/"; | ||
95 | theUser.currentAgent.currentRegion = reg.SimUUID; | ||
96 | theUser.currentAgent.currentHandle = reg.RegionHandle; | ||
97 | |||
98 | Login _login = new Login(); | ||
99 | //copy data to login object | ||
100 | _login.First = response.Firstname; | ||
101 | _login.Last = response.Lastname; | ||
102 | _login.Agent = response.AgentID; | ||
103 | _login.Session = response.SessionID; | ||
104 | _login.SecureSession = response.SecureSessionID; | ||
105 | _login.CircuitCode = (uint)response.CircuitCode; | ||
106 | _login.CapsPath = capsPath; | ||
107 | |||
108 | m_Parent.InformRegionOfLogin(currentRegion, _login); | ||
109 | } | ||
110 | else | ||
111 | { | ||
112 | Console.WriteLine("not found region " + currentRegion); | ||
113 | } | ||
114 | |||
115 | } | ||
116 | |||
117 | } | ||
118 | } | ||
diff --git a/OpenSim/Region/LocalCommunications/OpenSim.Region.LocalCommunications.csproj b/OpenSim/Region/LocalCommunications/OpenSim.Region.LocalCommunications.csproj new file mode 100644 index 0000000..6b2b78c --- /dev/null +++ b/OpenSim/Region/LocalCommunications/OpenSim.Region.LocalCommunications.csproj | |||
@@ -0,0 +1,121 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{EB3A1BA8-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.LocalCommunications</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.LocalCommunications</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Xml" > | ||
70 | <HintPath>System.Xml.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | </ItemGroup> | ||
74 | <ItemGroup> | ||
75 | <ProjectReference Include="..\..\Framework\General\OpenSim.Framework.csproj"> | ||
76 | <Name>OpenSim.Framework</Name> | ||
77 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
78 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
79 | <Private>False</Private> | ||
80 | </ProjectReference> | ||
81 | <ProjectReference Include="..\..\Framework\Communications\OpenSim.Framework.Communications.csproj"> | ||
82 | <Name>OpenSim.Framework.Communications</Name> | ||
83 | <Project>{CB52B7E7-0000-0000-0000-000000000000}</Project> | ||
84 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
85 | <Private>False</Private> | ||
86 | </ProjectReference> | ||
87 | <ProjectReference Include="..\..\Framework\Data\OpenSim.Framework.Data.csproj"> | ||
88 | <Name>OpenSim.Framework.Data</Name> | ||
89 | <Project>{36B72A9B-0000-0000-0000-000000000000}</Project> | ||
90 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
91 | <Private>False</Private> | ||
92 | </ProjectReference> | ||
93 | <ProjectReference Include="..\..\Framework\UserManager\OpenSim.Framework.UserManagement.csproj"> | ||
94 | <Name>OpenSim.Framework.UserManagement</Name> | ||
95 | <Project>{586E2916-0000-0000-0000-000000000000}</Project> | ||
96 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
97 | <Private>False</Private> | ||
98 | </ProjectReference> | ||
99 | </ItemGroup> | ||
100 | <ItemGroup> | ||
101 | <Compile Include="CommunicationsLocal.cs"> | ||
102 | <SubType>Code</SubType> | ||
103 | </Compile> | ||
104 | <Compile Include="LocalBackEndServices.cs"> | ||
105 | <SubType>Code</SubType> | ||
106 | </Compile> | ||
107 | <Compile Include="LocalUserServices.cs"> | ||
108 | <SubType>Code</SubType> | ||
109 | </Compile> | ||
110 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
111 | <SubType>Code</SubType> | ||
112 | </Compile> | ||
113 | </ItemGroup> | ||
114 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
115 | <PropertyGroup> | ||
116 | <PreBuildEvent> | ||
117 | </PreBuildEvent> | ||
118 | <PostBuildEvent> | ||
119 | </PostBuildEvent> | ||
120 | </PropertyGroup> | ||
121 | </Project> | ||
diff --git a/OpenSim/Region/LocalCommunications/OpenSim.Region.LocalCommunications.csproj.user b/OpenSim/Region/LocalCommunications/OpenSim.Region.LocalCommunications.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/LocalCommunications/OpenSim.Region.LocalCommunications.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/LocalCommunications/Properties/AssemblyInfo.cs b/OpenSim/Region/LocalCommunications/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8e6e711 --- /dev/null +++ b/OpenSim/Region/LocalCommunications/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenSim.LocalCommunications")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenSim.LocalCommunications")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("fb173926-bd0a-4cd0-bb45-185b2f72ddfb")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/AssemblyInfo.cs new file mode 100644 index 0000000..177c49d --- /dev/null +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("PhysXplugin")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("PhysXplugin")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs new file mode 100644 index 0000000..dcb8f3b --- /dev/null +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs | |||
@@ -0,0 +1,294 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenSim.Physics.Manager; | ||
31 | |||
32 | namespace OpenSim.Region.Physics.BasicPhysicsPlugin | ||
33 | { | ||
34 | /// <summary> | ||
35 | /// Will be the PhysX plugin but for now will be a very basic physics engine | ||
36 | /// </summary> | ||
37 | public class BasicPhysicsPlugin : IPhysicsPlugin | ||
38 | { | ||
39 | private BasicScene _mScene; | ||
40 | |||
41 | public BasicPhysicsPlugin() | ||
42 | { | ||
43 | |||
44 | } | ||
45 | |||
46 | public bool Init() | ||
47 | { | ||
48 | return true; | ||
49 | } | ||
50 | |||
51 | public PhysicsScene GetScene() | ||
52 | { | ||
53 | return new BasicScene(); | ||
54 | } | ||
55 | |||
56 | public string GetName() | ||
57 | { | ||
58 | return("basicphysics"); | ||
59 | } | ||
60 | |||
61 | public void Dispose() | ||
62 | { | ||
63 | |||
64 | } | ||
65 | } | ||
66 | |||
67 | public class BasicScene :PhysicsScene | ||
68 | { | ||
69 | private List<BasicActor> _actors = new List<BasicActor>(); | ||
70 | private float[] _heightMap; | ||
71 | |||
72 | public BasicScene() | ||
73 | { | ||
74 | |||
75 | } | ||
76 | |||
77 | public override PhysicsActor AddAvatar(PhysicsVector position) | ||
78 | { | ||
79 | BasicActor act = new BasicActor(); | ||
80 | act.Position = position; | ||
81 | _actors.Add(act); | ||
82 | return act; | ||
83 | } | ||
84 | |||
85 | public override void RemoveAvatar(PhysicsActor actor) | ||
86 | { | ||
87 | BasicActor act = (BasicActor)actor; | ||
88 | if(_actors.Contains(act)) | ||
89 | { | ||
90 | _actors.Remove(act); | ||
91 | } | ||
92 | |||
93 | } | ||
94 | |||
95 | public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) | ||
96 | { | ||
97 | return null; | ||
98 | } | ||
99 | |||
100 | public override void Simulate(float timeStep) | ||
101 | { | ||
102 | foreach (BasicActor actor in _actors) | ||
103 | { | ||
104 | actor.Position.X = actor.Position.X + (actor.Velocity.X * timeStep); | ||
105 | actor.Position.Y = actor.Position.Y + (actor.Velocity.Y * timeStep); | ||
106 | actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep); | ||
107 | /*if(actor.Flying) | ||
108 | { | ||
109 | actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep); | ||
110 | } | ||
111 | else | ||
112 | { | ||
113 | actor.Position.Z = actor.Position.Z + ((-9.8f + actor.Velocity.Z) * timeStep); | ||
114 | } | ||
115 | if(actor.Position.Z < (_heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1)) | ||
116 | {*/ | ||
117 | if ((actor.Position.Y > 0 && actor.Position.Y < 256) && (actor.Position.X > 0 && actor.Position.X < 256)) | ||
118 | { | ||
119 | actor.Position.Z = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X] + 1; | ||
120 | } | ||
121 | else | ||
122 | { | ||
123 | if (actor.Position.Y < 0) | ||
124 | { | ||
125 | actor.Position.Y = 0; | ||
126 | } | ||
127 | else if (actor.Position.Y > 256) | ||
128 | { | ||
129 | actor.Position.Y = 256; | ||
130 | } | ||
131 | |||
132 | if (actor.Position.X < 0) | ||
133 | { | ||
134 | actor.Position.X = 0; | ||
135 | } | ||
136 | if (actor.Position.X > 256) | ||
137 | { | ||
138 | actor.Position.X = 256; | ||
139 | } | ||
140 | } | ||
141 | //} | ||
142 | |||
143 | |||
144 | |||
145 | // This code needs sorting out - border crossings etc | ||
146 | /* if(actor.Position.X<0) | ||
147 | { | ||
148 | ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z)); | ||
149 | actor.Position.X = 0; | ||
150 | actor.Velocity.X = 0; | ||
151 | } | ||
152 | if(actor.Position.Y < 0) | ||
153 | { | ||
154 | ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z)); | ||
155 | actor.Position.Y = 0; | ||
156 | actor.Velocity.Y = 0; | ||
157 | } | ||
158 | if(actor.Position.X > 255) | ||
159 | { | ||
160 | ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z)); | ||
161 | actor.Position.X = 255; | ||
162 | actor.Velocity.X = 0; | ||
163 | } | ||
164 | if(actor.Position.Y > 255) | ||
165 | { | ||
166 | ControllingClient.CrossSimBorder(new LLVector3(this.Position.X,this.Position.Y,this.Position.Z)); | ||
167 | actor.Position.Y = 255; | ||
168 | actor.Velocity.X = 0; | ||
169 | }*/ | ||
170 | } | ||
171 | } | ||
172 | |||
173 | public override void GetResults() | ||
174 | { | ||
175 | |||
176 | } | ||
177 | |||
178 | public override bool IsThreaded | ||
179 | { | ||
180 | get | ||
181 | { | ||
182 | return(false); // for now we won't be multithreaded | ||
183 | } | ||
184 | } | ||
185 | |||
186 | public override void SetTerrain(float[] heightMap) | ||
187 | { | ||
188 | this._heightMap = heightMap; | ||
189 | } | ||
190 | |||
191 | public override void DeleteTerrain() | ||
192 | { | ||
193 | |||
194 | } | ||
195 | } | ||
196 | |||
197 | public class BasicActor : PhysicsActor | ||
198 | { | ||
199 | private PhysicsVector _position; | ||
200 | private PhysicsVector _velocity; | ||
201 | private PhysicsVector _acceleration; | ||
202 | private bool flying; | ||
203 | public BasicActor() | ||
204 | { | ||
205 | _velocity = new PhysicsVector(); | ||
206 | _position = new PhysicsVector(); | ||
207 | _acceleration = new PhysicsVector(); | ||
208 | } | ||
209 | |||
210 | public override bool Flying | ||
211 | { | ||
212 | get | ||
213 | { | ||
214 | return false; | ||
215 | } | ||
216 | set | ||
217 | { | ||
218 | flying= value; | ||
219 | } | ||
220 | } | ||
221 | |||
222 | public override PhysicsVector Position | ||
223 | { | ||
224 | get | ||
225 | { | ||
226 | return _position; | ||
227 | } | ||
228 | set | ||
229 | { | ||
230 | _position = value; | ||
231 | } | ||
232 | } | ||
233 | |||
234 | public override PhysicsVector Velocity | ||
235 | { | ||
236 | get | ||
237 | { | ||
238 | return _velocity; | ||
239 | } | ||
240 | set | ||
241 | { | ||
242 | _velocity = value; | ||
243 | } | ||
244 | } | ||
245 | |||
246 | public override Axiom.MathLib.Quaternion Orientation | ||
247 | { | ||
248 | get | ||
249 | { | ||
250 | return Axiom.MathLib.Quaternion.Identity; | ||
251 | } | ||
252 | set | ||
253 | { | ||
254 | |||
255 | } | ||
256 | } | ||
257 | |||
258 | public override PhysicsVector Acceleration | ||
259 | { | ||
260 | get | ||
261 | { | ||
262 | return _acceleration; | ||
263 | } | ||
264 | |||
265 | } | ||
266 | |||
267 | public override bool Kinematic | ||
268 | { | ||
269 | get | ||
270 | { | ||
271 | return true; | ||
272 | } | ||
273 | set | ||
274 | { | ||
275 | |||
276 | } | ||
277 | } | ||
278 | public void SetAcceleration (PhysicsVector accel) | ||
279 | { | ||
280 | this._acceleration = accel; | ||
281 | } | ||
282 | |||
283 | public override void AddForce(PhysicsVector force) | ||
284 | { | ||
285 | |||
286 | } | ||
287 | |||
288 | public override void SetMomentum(PhysicsVector momentum) | ||
289 | { | ||
290 | |||
291 | } | ||
292 | } | ||
293 | |||
294 | } | ||
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/OpenSim.Region.Physics.BasicPhysicsPlugin.csproj b/OpenSim/Region/Physics/BasicPhysicsPlugin/OpenSim.Region.Physics.BasicPhysicsPlugin.csproj new file mode 100644 index 0000000..7dad533 --- /dev/null +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/OpenSim.Region.Physics.BasicPhysicsPlugin.csproj | |||
@@ -0,0 +1,93 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{15B4FEF3-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Physics.BasicPhysicsPlugin</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Physics.BasicPhysicsPlugin</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\Physics\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\Physics\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | </ItemGroup> | ||
70 | <ItemGroup> | ||
71 | <ProjectReference Include="..\Manager\OpenSim.Region.Physics.Manager.csproj"> | ||
72 | <Name>OpenSim.Region.Physics.Manager</Name> | ||
73 | <Project>{F4FF31EB-0000-0000-0000-000000000000}</Project> | ||
74 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
75 | <Private>False</Private> | ||
76 | </ProjectReference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | <Compile Include="AssemblyInfo.cs"> | ||
80 | <SubType>Code</SubType> | ||
81 | </Compile> | ||
82 | <Compile Include="BasicPhysicsPlugin.cs"> | ||
83 | <SubType>Code</SubType> | ||
84 | </Compile> | ||
85 | </ItemGroup> | ||
86 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
87 | <PropertyGroup> | ||
88 | <PreBuildEvent> | ||
89 | </PreBuildEvent> | ||
90 | <PostBuildEvent> | ||
91 | </PostBuildEvent> | ||
92 | </PropertyGroup> | ||
93 | </Project> | ||
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/OpenSim.Region.Physics.BasicPhysicsPlugin.csproj.user b/OpenSim/Region/Physics/BasicPhysicsPlugin/OpenSim.Region.Physics.BasicPhysicsPlugin.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/OpenSim.Region.Physics.BasicPhysicsPlugin.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Physics/Manager/AssemblyInfo.cs b/OpenSim/Region/Physics/Manager/AssemblyInfo.cs new file mode 100644 index 0000000..132f64a --- /dev/null +++ b/OpenSim/Region/Physics/Manager/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("PhysicsManager")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("PhysicsManager")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Region/Physics/Manager/OpenSim.Region.Physics.Manager.csproj b/OpenSim/Region/Physics/Manager/OpenSim.Region.Physics.Manager.csproj new file mode 100644 index 0000000..f340400 --- /dev/null +++ b/OpenSim/Region/Physics/Manager/OpenSim.Region.Physics.Manager.csproj | |||
@@ -0,0 +1,112 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{F4FF31EB-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Physics.Manager</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Physics.Manager</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Xml" > | ||
70 | <HintPath>System.Xml.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | </ItemGroup> | ||
74 | <ItemGroup> | ||
75 | <ProjectReference Include="..\..\..\Framework\General\OpenSim.Framework.csproj"> | ||
76 | <Name>OpenSim.Framework</Name> | ||
77 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
78 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
79 | <Private>False</Private> | ||
80 | </ProjectReference> | ||
81 | <ProjectReference Include="..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
82 | <Name>OpenSim.Framework.Console</Name> | ||
83 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
84 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
85 | <Private>False</Private> | ||
86 | </ProjectReference> | ||
87 | </ItemGroup> | ||
88 | <ItemGroup> | ||
89 | <Compile Include="AssemblyInfo.cs"> | ||
90 | <SubType>Code</SubType> | ||
91 | </Compile> | ||
92 | <Compile Include="PhysicsActor.cs"> | ||
93 | <SubType>Code</SubType> | ||
94 | </Compile> | ||
95 | <Compile Include="PhysicsManager.cs"> | ||
96 | <SubType>Code</SubType> | ||
97 | </Compile> | ||
98 | <Compile Include="PhysicsScene.cs"> | ||
99 | <SubType>Code</SubType> | ||
100 | </Compile> | ||
101 | <Compile Include="PhysicsVector.cs"> | ||
102 | <SubType>Code</SubType> | ||
103 | </Compile> | ||
104 | </ItemGroup> | ||
105 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
106 | <PropertyGroup> | ||
107 | <PreBuildEvent> | ||
108 | </PreBuildEvent> | ||
109 | <PostBuildEvent> | ||
110 | </PostBuildEvent> | ||
111 | </PropertyGroup> | ||
112 | </Project> | ||
diff --git a/OpenSim/Region/Physics/Manager/OpenSim.Region.Physics.Manager.csproj.user b/OpenSim/Region/Physics/Manager/OpenSim.Region.Physics.Manager.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Physics/Manager/OpenSim.Region.Physics.Manager.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs new file mode 100644 index 0000000..6366fb8 --- /dev/null +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Physics.Manager | ||
33 | { | ||
34 | public abstract class PhysicsActor | ||
35 | { | ||
36 | public static PhysicsActor Null | ||
37 | { | ||
38 | get | ||
39 | { | ||
40 | return new NullPhysicsActor(); | ||
41 | } | ||
42 | } | ||
43 | |||
44 | public abstract PhysicsVector Position | ||
45 | { | ||
46 | get; | ||
47 | set; | ||
48 | } | ||
49 | |||
50 | public abstract PhysicsVector Velocity | ||
51 | { | ||
52 | get; | ||
53 | set; | ||
54 | } | ||
55 | |||
56 | public abstract PhysicsVector Acceleration | ||
57 | { | ||
58 | get; | ||
59 | } | ||
60 | |||
61 | public abstract Axiom.MathLib.Quaternion Orientation | ||
62 | { | ||
63 | get; | ||
64 | set; | ||
65 | } | ||
66 | |||
67 | public abstract bool Flying | ||
68 | { | ||
69 | get; | ||
70 | set; | ||
71 | } | ||
72 | |||
73 | public abstract bool Kinematic | ||
74 | { | ||
75 | get; | ||
76 | set; | ||
77 | } | ||
78 | |||
79 | public abstract void AddForce(PhysicsVector force); | ||
80 | |||
81 | public abstract void SetMomentum(PhysicsVector momentum); | ||
82 | } | ||
83 | |||
84 | public class NullPhysicsActor : PhysicsActor | ||
85 | { | ||
86 | public override PhysicsVector Position | ||
87 | { | ||
88 | get | ||
89 | { | ||
90 | return PhysicsVector.Zero; | ||
91 | } | ||
92 | set | ||
93 | { | ||
94 | return; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | public override PhysicsVector Velocity | ||
99 | { | ||
100 | get | ||
101 | { | ||
102 | return PhysicsVector.Zero; | ||
103 | } | ||
104 | set | ||
105 | { | ||
106 | return; | ||
107 | } | ||
108 | } | ||
109 | |||
110 | public override Axiom.MathLib.Quaternion Orientation | ||
111 | { | ||
112 | get | ||
113 | { | ||
114 | return Axiom.MathLib.Quaternion.Identity; | ||
115 | } | ||
116 | set | ||
117 | { | ||
118 | |||
119 | } | ||
120 | } | ||
121 | |||
122 | public override PhysicsVector Acceleration | ||
123 | { | ||
124 | get { return PhysicsVector.Zero; } | ||
125 | } | ||
126 | |||
127 | public override bool Flying | ||
128 | { | ||
129 | get | ||
130 | { | ||
131 | return false; | ||
132 | } | ||
133 | set | ||
134 | { | ||
135 | return; | ||
136 | } | ||
137 | } | ||
138 | |||
139 | public override bool Kinematic | ||
140 | { | ||
141 | get | ||
142 | { | ||
143 | return true; | ||
144 | } | ||
145 | set | ||
146 | { | ||
147 | return; | ||
148 | } | ||
149 | } | ||
150 | |||
151 | public override void AddForce(PhysicsVector force) | ||
152 | { | ||
153 | return; | ||
154 | } | ||
155 | |||
156 | public override void SetMomentum(PhysicsVector momentum) | ||
157 | { | ||
158 | return; | ||
159 | } | ||
160 | } | ||
161 | } | ||
diff --git a/OpenSim/Region/Physics/Manager/PhysicsManager.cs b/OpenSim/Region/Physics/Manager/PhysicsManager.cs new file mode 100644 index 0000000..efccb36 --- /dev/null +++ b/OpenSim/Region/Physics/Manager/PhysicsManager.cs | |||
@@ -0,0 +1,117 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Collections; | ||
31 | using System.IO; | ||
32 | using System.Reflection; | ||
33 | using Axiom.MathLib; | ||
34 | using OpenSim.Framework.Console; | ||
35 | |||
36 | namespace OpenSim.Physics.Manager | ||
37 | { | ||
38 | /// <summary> | ||
39 | /// Description of MyClass. | ||
40 | /// </summary> | ||
41 | public class PhysicsManager | ||
42 | { | ||
43 | private Dictionary<string, IPhysicsPlugin> _plugins=new Dictionary<string, IPhysicsPlugin>(); | ||
44 | |||
45 | public PhysicsManager() | ||
46 | { | ||
47 | |||
48 | } | ||
49 | |||
50 | public PhysicsScene GetPhysicsScene(string engineName) | ||
51 | { | ||
52 | if (String.IsNullOrEmpty(engineName)) | ||
53 | { | ||
54 | return new NullPhysicsScene(); | ||
55 | } | ||
56 | |||
57 | if(_plugins.ContainsKey(engineName)) | ||
58 | { | ||
59 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(LogPriority.LOW,"creating "+engineName); | ||
60 | return _plugins[engineName].GetScene(); | ||
61 | } | ||
62 | else | ||
63 | { | ||
64 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(LogPriority.MEDIUM,"couldn't find physicsEngine: {0}",engineName); | ||
65 | throw new ArgumentException(String.Format("couldn't find physicsEngine: {0}",engineName)); | ||
66 | } | ||
67 | } | ||
68 | |||
69 | public void LoadPlugins() | ||
70 | { | ||
71 | string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory ,"Physics"); | ||
72 | string[] pluginFiles = Directory.GetFiles(path, "*.dll"); | ||
73 | |||
74 | |||
75 | for(int i= 0; i<pluginFiles.Length; i++) | ||
76 | { | ||
77 | this.AddPlugin(pluginFiles[i]); | ||
78 | } | ||
79 | } | ||
80 | |||
81 | private void AddPlugin(string FileName) | ||
82 | { | ||
83 | Assembly pluginAssembly = Assembly.LoadFrom(FileName); | ||
84 | |||
85 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
86 | { | ||
87 | if (pluginType.IsPublic) | ||
88 | { | ||
89 | if (!pluginType.IsAbstract) | ||
90 | { | ||
91 | Type typeInterface = pluginType.GetInterface("IPhysicsPlugin", true); | ||
92 | |||
93 | if (typeInterface != null) | ||
94 | { | ||
95 | IPhysicsPlugin plug = (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
96 | plug.Init(); | ||
97 | this._plugins.Add(plug.GetName(),plug); | ||
98 | |||
99 | } | ||
100 | |||
101 | typeInterface = null; | ||
102 | } | ||
103 | } | ||
104 | } | ||
105 | |||
106 | pluginAssembly = null; | ||
107 | } | ||
108 | } | ||
109 | |||
110 | public interface IPhysicsPlugin | ||
111 | { | ||
112 | bool Init(); | ||
113 | PhysicsScene GetScene(); | ||
114 | string GetName(); | ||
115 | void Dispose(); | ||
116 | } | ||
117 | } | ||
diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs new file mode 100644 index 0000000..0901c2f --- /dev/null +++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Console; | ||
32 | |||
33 | namespace OpenSim.Physics.Manager | ||
34 | { | ||
35 | public abstract class PhysicsScene | ||
36 | { | ||
37 | public static PhysicsScene Null | ||
38 | { | ||
39 | get | ||
40 | { | ||
41 | return new NullPhysicsScene(); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | public abstract PhysicsActor AddAvatar(PhysicsVector position); | ||
46 | |||
47 | public abstract void RemoveAvatar(PhysicsActor actor); | ||
48 | |||
49 | public abstract PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size); | ||
50 | |||
51 | public abstract void Simulate(float timeStep); | ||
52 | |||
53 | public abstract void GetResults(); | ||
54 | |||
55 | public abstract void SetTerrain(float[] heightMap); | ||
56 | |||
57 | public abstract void DeleteTerrain(); | ||
58 | |||
59 | public abstract bool IsThreaded | ||
60 | { | ||
61 | get; | ||
62 | } | ||
63 | } | ||
64 | |||
65 | public class NullPhysicsScene : PhysicsScene | ||
66 | { | ||
67 | private static int m_workIndicator; | ||
68 | |||
69 | public override PhysicsActor AddAvatar(PhysicsVector position) | ||
70 | { | ||
71 | OpenSim.Framework.Console.MainLog.Instance.Verbose("NullPhysicsScene : AddAvatar({0})", position); | ||
72 | return PhysicsActor.Null; | ||
73 | } | ||
74 | |||
75 | public override void RemoveAvatar(PhysicsActor actor) | ||
76 | { | ||
77 | |||
78 | } | ||
79 | |||
80 | public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) | ||
81 | { | ||
82 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "NullPhysicsScene : AddPrim({0},{1})", position, size); | ||
83 | return PhysicsActor.Null; | ||
84 | } | ||
85 | |||
86 | public override void Simulate(float timeStep) | ||
87 | { | ||
88 | m_workIndicator = (m_workIndicator + 1) % 10; | ||
89 | |||
90 | //OpenSim.Framework.Console.MainLog.Instance.SetStatus(m_workIndicator.ToString()); | ||
91 | } | ||
92 | |||
93 | public override void GetResults() | ||
94 | { | ||
95 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "NullPhysicsScene : GetResults()"); | ||
96 | } | ||
97 | |||
98 | public override void SetTerrain(float[] heightMap) | ||
99 | { | ||
100 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "NullPhysicsScene : SetTerrain({0} items)", heightMap.Length); | ||
101 | } | ||
102 | |||
103 | public override void DeleteTerrain() | ||
104 | { | ||
105 | |||
106 | } | ||
107 | |||
108 | public override bool IsThreaded | ||
109 | { | ||
110 | get { return false; } | ||
111 | } | ||
112 | } | ||
113 | } | ||
diff --git a/OpenSim/Region/Physics/Manager/PhysicsVector.cs b/OpenSim/Region/Physics/Manager/PhysicsVector.cs new file mode 100644 index 0000000..888dbb5 --- /dev/null +++ b/OpenSim/Region/Physics/Manager/PhysicsVector.cs | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Physics.Manager | ||
33 | { | ||
34 | public class PhysicsVector | ||
35 | { | ||
36 | public float X; | ||
37 | public float Y; | ||
38 | public float Z; | ||
39 | |||
40 | public PhysicsVector() | ||
41 | { | ||
42 | |||
43 | } | ||
44 | |||
45 | public PhysicsVector(float x, float y, float z) | ||
46 | { | ||
47 | X = x; | ||
48 | Y = y; | ||
49 | Z = z; | ||
50 | } | ||
51 | |||
52 | public static readonly PhysicsVector Zero = new PhysicsVector(0f, 0f, 0f); | ||
53 | } | ||
54 | } | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs new file mode 100644 index 0000000..b49c8da --- /dev/null +++ b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("RealPhysXplugin")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("RealPhysXplugin")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs new file mode 100644 index 0000000..8aca851 --- /dev/null +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | |||
@@ -0,0 +1,456 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenSim.Physics.Manager; | ||
31 | using Ode.NET; | ||
32 | |||
33 | namespace OpenSim.Region.Physics.OdePlugin | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// ODE plugin | ||
37 | /// </summary> | ||
38 | public class OdePlugin : IPhysicsPlugin | ||
39 | { | ||
40 | private OdeScene _mScene; | ||
41 | |||
42 | public OdePlugin() | ||
43 | { | ||
44 | |||
45 | } | ||
46 | |||
47 | public bool Init() | ||
48 | { | ||
49 | return true; | ||
50 | } | ||
51 | |||
52 | public PhysicsScene GetScene() | ||
53 | { | ||
54 | if (_mScene == null) | ||
55 | { | ||
56 | _mScene = new OdeScene(); | ||
57 | } | ||
58 | return (_mScene); | ||
59 | } | ||
60 | |||
61 | public string GetName() | ||
62 | { | ||
63 | return ("OpenDynamicsEngine"); | ||
64 | } | ||
65 | |||
66 | public void Dispose() | ||
67 | { | ||
68 | |||
69 | } | ||
70 | } | ||
71 | |||
72 | public class OdeScene : PhysicsScene | ||
73 | { | ||
74 | static public IntPtr world; | ||
75 | static public IntPtr space; | ||
76 | static private IntPtr contactgroup; | ||
77 | static private IntPtr LandGeom; | ||
78 | //static private IntPtr Land; | ||
79 | private double[] _heightmap; | ||
80 | static private d.NearCallback nearCallback = near; | ||
81 | private List<OdeCharacter> _characters = new List<OdeCharacter>(); | ||
82 | private static d.ContactGeom[] contacts = new d.ContactGeom[30]; | ||
83 | private static d.Contact contact; | ||
84 | |||
85 | public OdeScene() | ||
86 | { | ||
87 | contact.surface.mode = d.ContactFlags.Bounce | d.ContactFlags.SoftCFM; | ||
88 | contact.surface.mu = d.Infinity; | ||
89 | contact.surface.mu2 = 0.0f; | ||
90 | contact.surface.bounce = 0.1f; | ||
91 | contact.surface.bounce_vel = 0.1f; | ||
92 | contact.surface.soft_cfm = 0.01f; | ||
93 | |||
94 | world = d.WorldCreate(); | ||
95 | space = d.HashSpaceCreate(IntPtr.Zero); | ||
96 | contactgroup = d.JointGroupCreate(0); | ||
97 | d.WorldSetGravity(world, 0.0f, 0.0f, -0.5f); | ||
98 | //d.WorldSetCFM(world, 1e-5f); | ||
99 | d.WorldSetAutoDisableFlag(world, false); | ||
100 | d.WorldSetContactSurfaceLayer(world, 0.001f); | ||
101 | // d.CreatePlane(space, 0, 0, 1, 0); | ||
102 | this._heightmap = new double[65536]; | ||
103 | } | ||
104 | |||
105 | // This function blatantly ripped off from BoxStack.cs | ||
106 | static private void near(IntPtr space, IntPtr g1, IntPtr g2) | ||
107 | { | ||
108 | IntPtr b1 = d.GeomGetBody(g1); | ||
109 | IntPtr b2 = d.GeomGetBody(g2); | ||
110 | if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact)) | ||
111 | return; | ||
112 | |||
113 | int count = d.Collide(g1, g2, 500, contacts, d.ContactGeom.SizeOf); | ||
114 | for (int i = 0; i < count; ++i) | ||
115 | { | ||
116 | contact.geom = contacts[i]; | ||
117 | IntPtr joint = d.JointCreateContact(world, contactgroup, ref contact); | ||
118 | d.JointAttach(joint, b1, b2); | ||
119 | } | ||
120 | |||
121 | } | ||
122 | |||
123 | public override PhysicsActor AddAvatar(PhysicsVector position) | ||
124 | { | ||
125 | PhysicsVector pos = new PhysicsVector(); | ||
126 | pos.X = position.X; | ||
127 | pos.Y = position.Y; | ||
128 | pos.Z = position.Z + 20; | ||
129 | OdeCharacter newAv = new OdeCharacter(this, pos); | ||
130 | this._characters.Add(newAv); | ||
131 | return newAv; | ||
132 | } | ||
133 | |||
134 | public override void RemoveAvatar(PhysicsActor actor) | ||
135 | { | ||
136 | |||
137 | } | ||
138 | |||
139 | public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) | ||
140 | { | ||
141 | PhysicsVector pos = new PhysicsVector(); | ||
142 | pos.X = position.X; | ||
143 | pos.Y = position.Y; | ||
144 | pos.Z = position.Z; | ||
145 | PhysicsVector siz = new PhysicsVector(); | ||
146 | siz.X = size.X; | ||
147 | siz.Y = size.Y; | ||
148 | siz.Z = size.Z; | ||
149 | return new OdePrim(); | ||
150 | } | ||
151 | |||
152 | public override void Simulate(float timeStep) | ||
153 | { | ||
154 | foreach (OdeCharacter actor in _characters) | ||
155 | { | ||
156 | actor.Move(timeStep * 5f); | ||
157 | } | ||
158 | d.SpaceCollide(space, IntPtr.Zero, nearCallback); | ||
159 | d.WorldQuickStep(world, timeStep * 5f); | ||
160 | d.JointGroupEmpty(contactgroup); | ||
161 | foreach (OdeCharacter actor in _characters) | ||
162 | { | ||
163 | actor.UpdatePosition(); | ||
164 | } | ||
165 | |||
166 | } | ||
167 | |||
168 | public override void GetResults() | ||
169 | { | ||
170 | |||
171 | } | ||
172 | |||
173 | public override bool IsThreaded | ||
174 | { | ||
175 | get | ||
176 | { | ||
177 | return (false); // for now we won't be multithreaded | ||
178 | } | ||
179 | } | ||
180 | |||
181 | public override void SetTerrain(float[] heightMap) | ||
182 | { | ||
183 | for (int i = 0; i < 65536; i++) | ||
184 | { | ||
185 | // this._heightmap[i] = (double)heightMap[i]; | ||
186 | // dbm (danx0r) -- heightmap x,y must be swapped for Ode (should fix ODE, but for now...) | ||
187 | int x = i & 0xff; | ||
188 | int y = i >> 8; | ||
189 | this._heightmap[i] = (double)heightMap[x * 256 + y]; | ||
190 | } | ||
191 | IntPtr HeightmapData = d.GeomHeightfieldDataCreate(); | ||
192 | d.GeomHeightfieldDataBuildDouble(HeightmapData, _heightmap, 0, 256, 256, 256, 256, 1.0f, 0.0f, 2.0f, 0); | ||
193 | d.GeomHeightfieldDataSetBounds(HeightmapData, 256, 256); | ||
194 | LandGeom = d.CreateHeightfield(space, HeightmapData, 1); | ||
195 | d.Matrix3 R = new d.Matrix3(); | ||
196 | |||
197 | Axiom.MathLib.Quaternion q1 =Axiom.MathLib.Quaternion.FromAngleAxis(1.5707f, new Axiom.MathLib.Vector3(1,0,0)); | ||
198 | Axiom.MathLib.Quaternion q2 =Axiom.MathLib.Quaternion.FromAngleAxis(1.5707f, new Axiom.MathLib.Vector3(0,1,0)); | ||
199 | //Axiom.MathLib.Quaternion q3 = Axiom.MathLib.Quaternion.FromAngleAxis(3.14f, new Axiom.MathLib.Vector3(0, 0, 1)); | ||
200 | |||
201 | q1 = q1 * q2; | ||
202 | //q1 = q1 * q3; | ||
203 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(); | ||
204 | float angle = 0; | ||
205 | q1.ToAngleAxis(ref angle, ref v3); | ||
206 | |||
207 | d.RFromAxisAndAngle(out R, v3.x, v3.y, v3.z, angle); | ||
208 | d.GeomSetRotation(LandGeom, ref R); | ||
209 | d.GeomSetPosition(LandGeom, 128, 128, 0); | ||
210 | } | ||
211 | |||
212 | public override void DeleteTerrain() | ||
213 | { | ||
214 | |||
215 | } | ||
216 | } | ||
217 | |||
218 | public class OdeCharacter : PhysicsActor | ||
219 | { | ||
220 | private PhysicsVector _position; | ||
221 | private PhysicsVector _velocity; | ||
222 | private PhysicsVector _acceleration; | ||
223 | private bool flying; | ||
224 | //private float gravityAccel; | ||
225 | private IntPtr BoundingCapsule; | ||
226 | IntPtr capsule_geom; | ||
227 | d.Mass capsule_mass; | ||
228 | |||
229 | public OdeCharacter(OdeScene parent_scene, PhysicsVector pos) | ||
230 | { | ||
231 | _velocity = new PhysicsVector(); | ||
232 | _position = pos; | ||
233 | _acceleration = new PhysicsVector(); | ||
234 | d.MassSetCapsule(out capsule_mass, 5.0f, 3, 0.5f, 2f); | ||
235 | capsule_geom = d.CreateCapsule(OdeScene.space, 0.5f, 2f); | ||
236 | this.BoundingCapsule = d.BodyCreate(OdeScene.world); | ||
237 | d.BodySetMass(BoundingCapsule, ref capsule_mass); | ||
238 | d.BodySetPosition(BoundingCapsule, pos.X, pos.Y, pos.Z); | ||
239 | d.GeomSetBody(capsule_geom, BoundingCapsule); | ||
240 | } | ||
241 | |||
242 | public override bool Flying | ||
243 | { | ||
244 | get | ||
245 | { | ||
246 | return flying; | ||
247 | } | ||
248 | set | ||
249 | { | ||
250 | flying = value; | ||
251 | } | ||
252 | } | ||
253 | |||
254 | public override PhysicsVector Position | ||
255 | { | ||
256 | get | ||
257 | { | ||
258 | return _position; | ||
259 | } | ||
260 | set | ||
261 | { | ||
262 | _position = value; | ||
263 | } | ||
264 | } | ||
265 | |||
266 | public override PhysicsVector Velocity | ||
267 | { | ||
268 | get | ||
269 | { | ||
270 | return _velocity; | ||
271 | } | ||
272 | set | ||
273 | { | ||
274 | _velocity = value; | ||
275 | } | ||
276 | } | ||
277 | |||
278 | public override bool Kinematic | ||
279 | { | ||
280 | get | ||
281 | { | ||
282 | return false; | ||
283 | } | ||
284 | set | ||
285 | { | ||
286 | |||
287 | } | ||
288 | } | ||
289 | |||
290 | public override Axiom.MathLib.Quaternion Orientation | ||
291 | { | ||
292 | get | ||
293 | { | ||
294 | return Axiom.MathLib.Quaternion.Identity; | ||
295 | } | ||
296 | set | ||
297 | { | ||
298 | |||
299 | } | ||
300 | } | ||
301 | |||
302 | public override PhysicsVector Acceleration | ||
303 | { | ||
304 | get | ||
305 | { | ||
306 | return _acceleration; | ||
307 | } | ||
308 | |||
309 | } | ||
310 | public void SetAcceleration(PhysicsVector accel) | ||
311 | { | ||
312 | this._acceleration = accel; | ||
313 | } | ||
314 | |||
315 | public override void AddForce(PhysicsVector force) | ||
316 | { | ||
317 | |||
318 | } | ||
319 | |||
320 | public override void SetMomentum(PhysicsVector momentum) | ||
321 | { | ||
322 | |||
323 | } | ||
324 | |||
325 | public void Move(float timeStep) | ||
326 | { | ||
327 | PhysicsVector vec = new PhysicsVector(); | ||
328 | vec.X = this._velocity.X * timeStep; | ||
329 | vec.Y = this._velocity.Y * timeStep; | ||
330 | if (flying) | ||
331 | { | ||
332 | vec.Z = (this._velocity.Z + 0.5f) * timeStep; | ||
333 | } | ||
334 | d.BodySetLinearVel(this.BoundingCapsule, vec.X, vec.Y, vec.Z); | ||
335 | } | ||
336 | |||
337 | public void UpdatePosition() | ||
338 | { | ||
339 | d.Vector3 vec = d.BodyGetPosition(BoundingCapsule); | ||
340 | this._position.X = vec.X; | ||
341 | this._position.Y = vec.Y; | ||
342 | this._position.Z = vec.Z+1.0f; | ||
343 | } | ||
344 | } | ||
345 | |||
346 | public class OdePrim : PhysicsActor | ||
347 | { | ||
348 | private PhysicsVector _position; | ||
349 | private PhysicsVector _velocity; | ||
350 | private PhysicsVector _acceleration; | ||
351 | |||
352 | public OdePrim() | ||
353 | { | ||
354 | _velocity = new PhysicsVector(); | ||
355 | _position = new PhysicsVector(); | ||
356 | _acceleration = new PhysicsVector(); | ||
357 | } | ||
358 | public override bool Flying | ||
359 | { | ||
360 | get | ||
361 | { | ||
362 | return false; //no flying prims for you | ||
363 | } | ||
364 | set | ||
365 | { | ||
366 | |||
367 | } | ||
368 | } | ||
369 | public override PhysicsVector Position | ||
370 | { | ||
371 | get | ||
372 | { | ||
373 | PhysicsVector pos = new PhysicsVector(); | ||
374 | // PhysicsVector vec = this._prim.Position; | ||
375 | //pos.X = vec.X; | ||
376 | //pos.Y = vec.Y; | ||
377 | //pos.Z = vec.Z; | ||
378 | return pos; | ||
379 | |||
380 | } | ||
381 | set | ||
382 | { | ||
383 | /*PhysicsVector vec = value; | ||
384 | PhysicsVector pos = new PhysicsVector(); | ||
385 | pos.X = vec.X; | ||
386 | pos.Y = vec.Y; | ||
387 | pos.Z = vec.Z; | ||
388 | this._prim.Position = pos;*/ | ||
389 | } | ||
390 | } | ||
391 | |||
392 | public override PhysicsVector Velocity | ||
393 | { | ||
394 | get | ||
395 | { | ||
396 | return _velocity; | ||
397 | } | ||
398 | set | ||
399 | { | ||
400 | _velocity = value; | ||
401 | } | ||
402 | } | ||
403 | |||
404 | public override bool Kinematic | ||
405 | { | ||
406 | get | ||
407 | { | ||
408 | return false; | ||
409 | //return this._prim.Kinematic; | ||
410 | } | ||
411 | set | ||
412 | { | ||
413 | //this._prim.Kinematic = value; | ||
414 | } | ||
415 | } | ||
416 | |||
417 | public override Axiom.MathLib.Quaternion Orientation | ||
418 | { | ||
419 | get | ||
420 | { | ||
421 | Axiom.MathLib.Quaternion res = new Axiom.MathLib.Quaternion(); | ||
422 | return res; | ||
423 | } | ||
424 | set | ||
425 | { | ||
426 | |||
427 | } | ||
428 | } | ||
429 | |||
430 | public override PhysicsVector Acceleration | ||
431 | { | ||
432 | get | ||
433 | { | ||
434 | return _acceleration; | ||
435 | } | ||
436 | |||
437 | } | ||
438 | public void SetAcceleration(PhysicsVector accel) | ||
439 | { | ||
440 | this._acceleration = accel; | ||
441 | } | ||
442 | |||
443 | public override void AddForce(PhysicsVector force) | ||
444 | { | ||
445 | |||
446 | } | ||
447 | |||
448 | public override void SetMomentum(PhysicsVector momentum) | ||
449 | { | ||
450 | |||
451 | } | ||
452 | |||
453 | |||
454 | } | ||
455 | |||
456 | } | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/OpenSim.Region.Physics.OdePlugin.csproj b/OpenSim/Region/Physics/OdePlugin/OpenSim.Region.Physics.OdePlugin.csproj new file mode 100644 index 0000000..490c681 --- /dev/null +++ b/OpenSim/Region/Physics/OdePlugin/OpenSim.Region.Physics.OdePlugin.csproj | |||
@@ -0,0 +1,97 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{90620634-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Physics.OdePlugin</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Physics.OdePlugin</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\Physics\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\Physics\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="Ode.NET.dll" > | ||
66 | <HintPath>..\..\..\..\bin\Ode.NET.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | </ItemGroup> | ||
74 | <ItemGroup> | ||
75 | <ProjectReference Include="..\Manager\OpenSim.Region.Physics.Manager.csproj"> | ||
76 | <Name>OpenSim.Region.Physics.Manager</Name> | ||
77 | <Project>{F4FF31EB-0000-0000-0000-000000000000}</Project> | ||
78 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
79 | <Private>False</Private> | ||
80 | </ProjectReference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <Compile Include="AssemblyInfo.cs"> | ||
84 | <SubType>Code</SubType> | ||
85 | </Compile> | ||
86 | <Compile Include="OdePlugin.cs"> | ||
87 | <SubType>Code</SubType> | ||
88 | </Compile> | ||
89 | </ItemGroup> | ||
90 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
91 | <PropertyGroup> | ||
92 | <PreBuildEvent> | ||
93 | </PreBuildEvent> | ||
94 | <PostBuildEvent> | ||
95 | </PostBuildEvent> | ||
96 | </PropertyGroup> | ||
97 | </Project> | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/OpenSim.Region.Physics.OdePlugin.csproj.user b/OpenSim/Region/Physics/OdePlugin/OpenSim.Region.Physics.OdePlugin.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Physics/OdePlugin/OpenSim.Region.Physics.OdePlugin.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Physics/PhysXPlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/PhysXPlugin/AssemblyInfo.cs new file mode 100644 index 0000000..b49c8da --- /dev/null +++ b/OpenSim/Region/Physics/PhysXPlugin/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("RealPhysXplugin")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("RealPhysXplugin")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Region/Physics/PhysXPlugin/OpenSim.Region.Physics.PhysXPlugin.csproj b/OpenSim/Region/Physics/PhysXPlugin/OpenSim.Region.Physics.PhysXPlugin.csproj new file mode 100644 index 0000000..77da908 --- /dev/null +++ b/OpenSim/Region/Physics/PhysXPlugin/OpenSim.Region.Physics.PhysXPlugin.csproj | |||
@@ -0,0 +1,97 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{A6D191D8-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Physics.PhysXPlugin</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Physics.PhysXPlugin</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\Physics\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\Physics\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="PhysX_Wrapper_Dotnet.dll" > | ||
66 | <HintPath>..\..\..\..\bin\PhysX_Wrapper_Dotnet.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | </ItemGroup> | ||
74 | <ItemGroup> | ||
75 | <ProjectReference Include="..\Manager\OpenSim.Region.Physics.Manager.csproj"> | ||
76 | <Name>OpenSim.Region.Physics.Manager</Name> | ||
77 | <Project>{F4FF31EB-0000-0000-0000-000000000000}</Project> | ||
78 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
79 | <Private>False</Private> | ||
80 | </ProjectReference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <Compile Include="AssemblyInfo.cs"> | ||
84 | <SubType>Code</SubType> | ||
85 | </Compile> | ||
86 | <Compile Include="PhysXPlugin.cs"> | ||
87 | <SubType>Code</SubType> | ||
88 | </Compile> | ||
89 | </ItemGroup> | ||
90 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
91 | <PropertyGroup> | ||
92 | <PreBuildEvent> | ||
93 | </PreBuildEvent> | ||
94 | <PostBuildEvent> | ||
95 | </PostBuildEvent> | ||
96 | </PropertyGroup> | ||
97 | </Project> | ||
diff --git a/OpenSim/Region/Physics/PhysXPlugin/OpenSim.Region.Physics.PhysXPlugin.csproj.user b/OpenSim/Region/Physics/PhysXPlugin/OpenSim.Region.Physics.PhysXPlugin.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Physics/PhysXPlugin/OpenSim.Region.Physics.PhysXPlugin.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs new file mode 100644 index 0000000..8bf794b --- /dev/null +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs | |||
@@ -0,0 +1,424 @@ | |||
1 | /*/* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenSim.Physics.Manager; | ||
31 | using PhysXWrapper; | ||
32 | |||
33 | namespace OpenSim.Region.Physics.PhysXPlugin | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// Will be the PhysX plugin but for now will be a very basic physics engine | ||
37 | /// </summary> | ||
38 | public class PhysXPlugin : IPhysicsPlugin | ||
39 | { | ||
40 | private PhysXScene _mScene; | ||
41 | |||
42 | public PhysXPlugin() | ||
43 | { | ||
44 | |||
45 | } | ||
46 | |||
47 | public bool Init() | ||
48 | { | ||
49 | return true; | ||
50 | } | ||
51 | |||
52 | public PhysicsScene GetScene() | ||
53 | { | ||
54 | if(_mScene == null) | ||
55 | { | ||
56 | _mScene = new PhysXScene(); | ||
57 | } | ||
58 | return(_mScene); | ||
59 | } | ||
60 | |||
61 | public string GetName() | ||
62 | { | ||
63 | return("RealPhysX"); | ||
64 | } | ||
65 | |||
66 | public void Dispose() | ||
67 | { | ||
68 | |||
69 | } | ||
70 | } | ||
71 | |||
72 | public class PhysXScene :PhysicsScene | ||
73 | { | ||
74 | private List<PhysXCharacter> _characters = new List<PhysXCharacter>(); | ||
75 | private List<PhysXPrim> _prims = new List<PhysXPrim>(); | ||
76 | private float[] _heightMap = null; | ||
77 | private NxPhysicsSDK mySdk; | ||
78 | private NxScene scene; | ||
79 | |||
80 | public PhysXScene() | ||
81 | { | ||
82 | mySdk = NxPhysicsSDK.CreateSDK(); | ||
83 | Console.WriteLine("Sdk created - now creating scene"); | ||
84 | scene = mySdk.CreateScene(); | ||
85 | |||
86 | } | ||
87 | |||
88 | public override PhysicsActor AddAvatar(PhysicsVector position) | ||
89 | { | ||
90 | Vec3 pos = new Vec3(); | ||
91 | pos.X = position.X; | ||
92 | pos.Y = position.Y; | ||
93 | pos.Z = position.Z; | ||
94 | PhysXCharacter act = new PhysXCharacter( scene.AddCharacter(pos)); | ||
95 | act.Position = position; | ||
96 | _characters.Add(act); | ||
97 | return act; | ||
98 | } | ||
99 | |||
100 | public override void RemoveAvatar(PhysicsActor actor) | ||
101 | { | ||
102 | |||
103 | } | ||
104 | |||
105 | public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) | ||
106 | { | ||
107 | Vec3 pos = new Vec3(); | ||
108 | pos.X = position.X; | ||
109 | pos.Y = position.Y; | ||
110 | pos.Z = position.Z; | ||
111 | Vec3 siz = new Vec3(); | ||
112 | siz.X = size.X; | ||
113 | siz.Y = size.Y; | ||
114 | siz.Z = size.Z; | ||
115 | PhysXPrim act = new PhysXPrim( scene.AddNewBox(pos, siz)); | ||
116 | _prims.Add(act); | ||
117 | return act; | ||
118 | } | ||
119 | public override void Simulate(float timeStep) | ||
120 | { | ||
121 | try | ||
122 | { | ||
123 | foreach (PhysXCharacter actor in _characters) | ||
124 | { | ||
125 | actor.Move(timeStep); | ||
126 | } | ||
127 | scene.Simulate(timeStep); | ||
128 | scene.FetchResults(); | ||
129 | scene.UpdateControllers(); | ||
130 | |||
131 | foreach (PhysXCharacter actor in _characters) | ||
132 | { | ||
133 | actor.UpdatePosition(); | ||
134 | } | ||
135 | } | ||
136 | catch (Exception e) | ||
137 | { | ||
138 | Console.WriteLine(e.Message); | ||
139 | } | ||
140 | |||
141 | } | ||
142 | |||
143 | public override void GetResults() | ||
144 | { | ||
145 | |||
146 | } | ||
147 | |||
148 | public override bool IsThreaded | ||
149 | { | ||
150 | get | ||
151 | { | ||
152 | return(false); // for now we won't be multithreaded | ||
153 | } | ||
154 | } | ||
155 | |||
156 | public override void SetTerrain(float[] heightMap) | ||
157 | { | ||
158 | if (this._heightMap != null) | ||
159 | { | ||
160 | Console.WriteLine("PhysX - deleting old terrain"); | ||
161 | this.scene.DeleteTerrain(); | ||
162 | } | ||
163 | this._heightMap = heightMap; | ||
164 | this.scene.AddTerrain(heightMap); | ||
165 | } | ||
166 | |||
167 | public override void DeleteTerrain() | ||
168 | { | ||
169 | this.scene.DeleteTerrain(); | ||
170 | } | ||
171 | } | ||
172 | |||
173 | public class PhysXCharacter : PhysicsActor | ||
174 | { | ||
175 | private PhysicsVector _position; | ||
176 | private PhysicsVector _velocity; | ||
177 | private PhysicsVector _acceleration; | ||
178 | private NxCharacter _character; | ||
179 | private bool flying; | ||
180 | private float gravityAccel; | ||
181 | |||
182 | public PhysXCharacter(NxCharacter character) | ||
183 | { | ||
184 | _velocity = new PhysicsVector(); | ||
185 | _position = new PhysicsVector(); | ||
186 | _acceleration = new PhysicsVector(); | ||
187 | _character = character; | ||
188 | } | ||
189 | |||
190 | public override bool Flying | ||
191 | { | ||
192 | get | ||
193 | { | ||
194 | return flying; | ||
195 | } | ||
196 | set | ||
197 | { | ||
198 | flying = value; | ||
199 | } | ||
200 | } | ||
201 | |||
202 | public override PhysicsVector Position | ||
203 | { | ||
204 | get | ||
205 | { | ||
206 | return _position; | ||
207 | } | ||
208 | set | ||
209 | { | ||
210 | _position = value; | ||
211 | Vec3 ps = new Vec3(); | ||
212 | ps.X = value.X; | ||
213 | ps.Y = value.Y; | ||
214 | ps.Z = value.Z; | ||
215 | this._character.Position = ps; | ||
216 | } | ||
217 | } | ||
218 | |||
219 | public override PhysicsVector Velocity | ||
220 | { | ||
221 | get | ||
222 | { | ||
223 | return _velocity; | ||
224 | } | ||
225 | set | ||
226 | { | ||
227 | _velocity = value; | ||
228 | } | ||
229 | } | ||
230 | |||
231 | public override bool Kinematic | ||
232 | { | ||
233 | get | ||
234 | { | ||
235 | return false; | ||
236 | } | ||
237 | set | ||
238 | { | ||
239 | |||
240 | } | ||
241 | } | ||
242 | |||
243 | public override Axiom.MathLib.Quaternion Orientation | ||
244 | { | ||
245 | get | ||
246 | { | ||
247 | return Axiom.MathLib.Quaternion.Identity; | ||
248 | } | ||
249 | set | ||
250 | { | ||
251 | |||
252 | } | ||
253 | } | ||
254 | |||
255 | public override PhysicsVector Acceleration | ||
256 | { | ||
257 | get | ||
258 | { | ||
259 | return _acceleration; | ||
260 | } | ||
261 | |||
262 | } | ||
263 | public void SetAcceleration (PhysicsVector accel) | ||
264 | { | ||
265 | this._acceleration = accel; | ||
266 | } | ||
267 | |||
268 | public override void AddForce(PhysicsVector force) | ||
269 | { | ||
270 | |||
271 | } | ||
272 | |||
273 | public override void SetMomentum(PhysicsVector momentum) | ||
274 | { | ||
275 | |||
276 | } | ||
277 | |||
278 | public void Move(float timeStep) | ||
279 | { | ||
280 | Vec3 vec = new Vec3(); | ||
281 | vec.X = this._velocity.X * timeStep; | ||
282 | vec.Y = this._velocity.Y * timeStep; | ||
283 | if(flying) | ||
284 | { | ||
285 | vec.Z = ( this._velocity.Z) * timeStep; | ||
286 | } | ||
287 | else | ||
288 | { | ||
289 | gravityAccel+= -9.8f; | ||
290 | vec.Z = (gravityAccel + this._velocity.Z) * timeStep; | ||
291 | } | ||
292 | int res = this._character.Move(vec); | ||
293 | if(res == 1) | ||
294 | { | ||
295 | gravityAccel = 0; | ||
296 | } | ||
297 | } | ||
298 | |||
299 | public void UpdatePosition() | ||
300 | { | ||
301 | Vec3 vec = this._character.Position; | ||
302 | this._position.X = vec.X; | ||
303 | this._position.Y = vec.Y; | ||
304 | this._position.Z = vec.Z; | ||
305 | } | ||
306 | } | ||
307 | |||
308 | public class PhysXPrim : PhysicsActor | ||
309 | { | ||
310 | private PhysicsVector _position; | ||
311 | private PhysicsVector _velocity; | ||
312 | private PhysicsVector _acceleration; | ||
313 | private NxActor _prim; | ||
314 | |||
315 | public PhysXPrim(NxActor prim) | ||
316 | { | ||
317 | _velocity = new PhysicsVector(); | ||
318 | _position = new PhysicsVector(); | ||
319 | _acceleration = new PhysicsVector(); | ||
320 | _prim = prim; | ||
321 | } | ||
322 | public override bool Flying | ||
323 | { | ||
324 | get | ||
325 | { | ||
326 | return false; //no flying prims for you | ||
327 | } | ||
328 | set | ||
329 | { | ||
330 | |||
331 | } | ||
332 | } | ||
333 | public override PhysicsVector Position | ||
334 | { | ||
335 | get | ||
336 | { | ||
337 | PhysicsVector pos = new PhysicsVector(); | ||
338 | Vec3 vec = this._prim.Position; | ||
339 | pos.X = vec.X; | ||
340 | pos.Y = vec.Y; | ||
341 | pos.Z = vec.Z; | ||
342 | return pos; | ||
343 | |||
344 | } | ||
345 | set | ||
346 | { | ||
347 | PhysicsVector vec = value; | ||
348 | Vec3 pos = new Vec3(); | ||
349 | pos.X = vec.X; | ||
350 | pos.Y = vec.Y; | ||
351 | pos.Z = vec.Z; | ||
352 | this._prim.Position = pos; | ||
353 | } | ||
354 | } | ||
355 | |||
356 | public override PhysicsVector Velocity | ||
357 | { | ||
358 | get | ||
359 | { | ||
360 | return _velocity; | ||
361 | } | ||
362 | set | ||
363 | { | ||
364 | _velocity = value; | ||
365 | } | ||
366 | } | ||
367 | |||
368 | public override bool Kinematic | ||
369 | { | ||
370 | get | ||
371 | { | ||
372 | return this._prim.Kinematic; | ||
373 | } | ||
374 | set | ||
375 | { | ||
376 | this._prim.Kinematic = value; | ||
377 | } | ||
378 | } | ||
379 | |||
380 | public override Axiom.MathLib.Quaternion Orientation | ||
381 | { | ||
382 | get | ||
383 | { | ||
384 | Axiom.MathLib.Quaternion res = new Axiom.MathLib.Quaternion(); | ||
385 | PhysXWrapper.Quaternion quat = this._prim.GetOrientation(); | ||
386 | res.w = quat.W; | ||
387 | res.x = quat.X; | ||
388 | res.y = quat.Y; | ||
389 | res.z = quat.Z; | ||
390 | return res; | ||
391 | } | ||
392 | set | ||
393 | { | ||
394 | |||
395 | } | ||
396 | } | ||
397 | |||
398 | public override PhysicsVector Acceleration | ||
399 | { | ||
400 | get | ||
401 | { | ||
402 | return _acceleration; | ||
403 | } | ||
404 | |||
405 | } | ||
406 | public void SetAcceleration (PhysicsVector accel) | ||
407 | { | ||
408 | this._acceleration = accel; | ||
409 | } | ||
410 | |||
411 | public override void AddForce(PhysicsVector force) | ||
412 | { | ||
413 | |||
414 | } | ||
415 | |||
416 | public override void SetMomentum(PhysicsVector momentum) | ||
417 | { | ||
418 | |||
419 | } | ||
420 | |||
421 | |||
422 | } | ||
423 | |||
424 | } | ||
diff --git a/OpenSim/Region/Scripting/Properties/AssemblyInfo.cs b/OpenSim/Region/Scripting/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f5da4c0 --- /dev/null +++ b/OpenSim/Region/Scripting/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // General Information about an assembly is controlled through the following | ||
6 | // set of attributes. Change these attribute values to modify the information | ||
7 | // associated with an assembly. | ||
8 | [assembly: AssemblyTitle("OpenSim.Scripting")] | ||
9 | [assembly: AssemblyDescription("")] | ||
10 | [assembly: AssemblyConfiguration("")] | ||
11 | [assembly: AssemblyCompany("")] | ||
12 | [assembly: AssemblyProduct("OpenSim.Scripting")] | ||
13 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
14 | [assembly: AssemblyTrademark("")] | ||
15 | [assembly: AssemblyCulture("")] | ||
16 | |||
17 | // Setting ComVisible to false makes the types in this assembly not visible | ||
18 | // to COM components. If you need to access a type in this assembly from | ||
19 | // COM, set the ComVisible attribute to true on that type. | ||
20 | [assembly: ComVisible(false)] | ||
21 | |||
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
23 | [assembly: Guid("61eae1ad-82aa-4c77-8bc5-b5a8c9522b18")] | ||
24 | |||
25 | // Version information for an assembly consists of the following four values: | ||
26 | // | ||
27 | // Major Version | ||
28 | // Minor Version | ||
29 | // Build Number | ||
30 | // Revision | ||
31 | // | ||
32 | // You can specify all the values or you can default the Revision and Build Numbers | ||
33 | // by using the '*' as shown below: | ||
34 | [assembly: AssemblyVersion("1.0.0.0")] | ||
35 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Region/Scripting/Script.cs b/OpenSim/Region/Scripting/Script.cs new file mode 100644 index 0000000..0f4af00 --- /dev/null +++ b/OpenSim/Region/Scripting/Script.cs | |||
@@ -0,0 +1,32 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | using OpenSim.Framework.Console; | ||
6 | using OpenSim.Framework; | ||
7 | using OpenSim.Region; | ||
8 | using OpenSim.Region.Scenes; | ||
9 | |||
10 | namespace OpenSim.Scripting | ||
11 | { | ||
12 | public interface IScript | ||
13 | { | ||
14 | void Initialise(ScriptInfo scriptInfo); | ||
15 | } | ||
16 | |||
17 | public class TestScript : IScript | ||
18 | { | ||
19 | ScriptInfo script; | ||
20 | |||
21 | public void Initialise(ScriptInfo scriptInfo) | ||
22 | { | ||
23 | script = scriptInfo; | ||
24 | script.events.OnFrame += new OpenSim.Region.Scenes.EventManager.OnFrameDelegate(events_OnFrame); | ||
25 | } | ||
26 | |||
27 | void events_OnFrame() | ||
28 | { | ||
29 | script.logger.Verbose("Hello World!"); | ||
30 | } | ||
31 | } | ||
32 | } | ||
diff --git a/OpenSim/Region/Scripting/ScriptAccess.cs b/OpenSim/Region/Scripting/ScriptAccess.cs new file mode 100644 index 0000000..a9fede5 --- /dev/null +++ b/OpenSim/Region/Scripting/ScriptAccess.cs | |||
@@ -0,0 +1,31 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | using OpenSim.Region.Scenes; | ||
6 | using OpenSim.Framework.Console; | ||
7 | |||
8 | namespace OpenSim.Scripting | ||
9 | { | ||
10 | /// <summary> | ||
11 | /// Class which provides access to the world | ||
12 | /// </summary> | ||
13 | public class ScriptInfo | ||
14 | { | ||
15 | // Reference to world.eventsManager provided for convenience | ||
16 | public EventManager events; | ||
17 | |||
18 | // The main world | ||
19 | public Scene world; | ||
20 | |||
21 | // The console | ||
22 | public LogBase logger; | ||
23 | |||
24 | public ScriptInfo(Scene scene) | ||
25 | { | ||
26 | world = scene; | ||
27 | events = world.eventManager; | ||
28 | logger = OpenSim.Framework.Console.MainLog.Instance; | ||
29 | } | ||
30 | } | ||
31 | } | ||
diff --git a/OpenSim/Region/Simulation/Caps.cs b/OpenSim/Region/Simulation/Caps.cs new file mode 100644 index 0000000..13a351d --- /dev/null +++ b/OpenSim/Region/Simulation/Caps.cs | |||
@@ -0,0 +1,258 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using System.Text; | ||
5 | using System.IO; | ||
6 | using System.Xml; | ||
7 | using OpenSim.Servers; | ||
8 | using OpenSim.Framework; | ||
9 | using OpenSim.Framework.Utilities; | ||
10 | using OpenSim.Framework.Types; | ||
11 | using OpenSim.Caches; | ||
12 | using libsecondlife; | ||
13 | |||
14 | namespace OpenSim.Region | ||
15 | { | ||
16 | public delegate void UpLoadedTexture(LLUUID assetID, LLUUID inventoryItem, byte[] data); | ||
17 | |||
18 | public class Caps | ||
19 | { | ||
20 | private string httpListenerAddress; | ||
21 | private uint httpListenPort; | ||
22 | private string capsObjectPath = "00001-"; | ||
23 | private string requestPath = "0000/"; | ||
24 | private string mapLayerPath = "0001/"; | ||
25 | private string newInventory = "0002/"; | ||
26 | private string requestTexture = "0003/"; | ||
27 | private string eventQueue = "0100/"; | ||
28 | private BaseHttpServer httpListener; | ||
29 | private LLUUID agentID; | ||
30 | private AssetCache assetCache; | ||
31 | private int eventQueueCount = 1; | ||
32 | private Queue<string> CapsEventQueue = new Queue<string>(); | ||
33 | |||
34 | public Caps(AssetCache assetCach, BaseHttpServer httpServer, string httpListen, uint httpPort, string capsPath, LLUUID agent) | ||
35 | { | ||
36 | assetCache = assetCach; | ||
37 | capsObjectPath = capsPath; | ||
38 | httpListener = httpServer; | ||
39 | httpListenerAddress = httpListen; | ||
40 | httpListenPort = httpPort; | ||
41 | agentID = agent; | ||
42 | } | ||
43 | |||
44 | /// <summary> | ||
45 | /// | ||
46 | /// </summary> | ||
47 | public void RegisterHandlers() | ||
48 | { | ||
49 | Console.WriteLine("registering CAPS handlers"); | ||
50 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + requestPath, CapsRequest); | ||
51 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + mapLayerPath, MapLayer); | ||
52 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + newInventory, NewAgentInventory); | ||
53 | httpListener.AddRestHandler("POST", "/CAPS/" + capsObjectPath + eventQueue, ProcessEventQueue); | ||
54 | } | ||
55 | |||
56 | /// <summary> | ||
57 | /// | ||
58 | /// </summary> | ||
59 | /// <param name="request"></param> | ||
60 | /// <param name="path"></param> | ||
61 | /// <param name="param"></param> | ||
62 | /// <returns></returns> | ||
63 | public string CapsRequest(string request, string path, string param) | ||
64 | { | ||
65 | // Console.WriteLine("Caps Request " + request); | ||
66 | string result = ""; | ||
67 | result = LLSDHelpers.SerialiseLLSDReply(this.GetCapabilities()); | ||
68 | return result; | ||
69 | } | ||
70 | |||
71 | /// <summary> | ||
72 | /// | ||
73 | /// </summary> | ||
74 | /// <returns></returns> | ||
75 | protected LLSDCapsDetails GetCapabilities() | ||
76 | { | ||
77 | /* string capURLS = ""; | ||
78 | capURLS += "<key>MapLayer</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + mapLayerPath + "</string>"; | ||
79 | capURLS += "<key>NewFileAgentInventory</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + newInventory + "</string>"; | ||
80 | //capURLS += "<key>RequestTextureDownload</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + requestTexture + "</string>"; | ||
81 | //capURLS += "<key>EventQueueGet</key><string>http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + eventQueue + "</string>"; | ||
82 | return capURLS;*/ | ||
83 | |||
84 | LLSDCapsDetails caps = new LLSDCapsDetails(); | ||
85 | caps.MapLayer = "http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + mapLayerPath; | ||
86 | caps.NewFileAgentInventory = "http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + capsObjectPath + newInventory; | ||
87 | return caps; | ||
88 | } | ||
89 | |||
90 | /// <summary> | ||
91 | /// | ||
92 | /// </summary> | ||
93 | /// <param name="request"></param> | ||
94 | /// <param name="path"></param> | ||
95 | /// <param name="param"></param> | ||
96 | /// <returns></returns> | ||
97 | public string MapLayer(string request, string path, string param) | ||
98 | { | ||
99 | Encoding _enc = System.Text.Encoding.UTF8; | ||
100 | Hashtable hash =(Hashtable) LLSD.LLSDDeserialize(_enc.GetBytes(request)); | ||
101 | LLSDMapRequest mapReq = new LLSDMapRequest(); | ||
102 | LLSDHelpers.DeserialiseLLSDMap(hash, mapReq ); | ||
103 | |||
104 | LLSDMapLayerResponse mapResponse= new LLSDMapLayerResponse(); | ||
105 | mapResponse.LayerData.Array.Add(this.BuildLLSDMapLayerResponse()); | ||
106 | string res = LLSDHelpers.SerialiseLLSDReply(mapResponse); | ||
107 | |||
108 | //Console.WriteLine(" Maplayer response is " + res); | ||
109 | |||
110 | return res; | ||
111 | } | ||
112 | |||
113 | /// <summary> | ||
114 | /// | ||
115 | /// </summary> | ||
116 | /// <returns></returns> | ||
117 | protected LLSDMapLayer BuildLLSDMapLayerResponse() | ||
118 | { | ||
119 | LLSDMapLayer mapLayer = new LLSDMapLayer(); | ||
120 | mapLayer.Right = 5000; | ||
121 | mapLayer.Top = 5000; | ||
122 | mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); | ||
123 | |||
124 | return mapLayer; | ||
125 | } | ||
126 | |||
127 | public string ProcessEventQueue(string request, string path, string param) | ||
128 | { | ||
129 | // Console.WriteLine("event queue request " + request); | ||
130 | string res = ""; | ||
131 | int timer = 0; | ||
132 | |||
133 | /*while ((timer < 200) || (this.CapsEventQueue.Count < 1)) | ||
134 | { | ||
135 | timer++; | ||
136 | }*/ | ||
137 | if (this.CapsEventQueue.Count > 0) | ||
138 | { | ||
139 | lock (this.CapsEventQueue) | ||
140 | { | ||
141 | string item = CapsEventQueue.Dequeue(); | ||
142 | res = item; | ||
143 | } | ||
144 | } | ||
145 | else | ||
146 | { | ||
147 | res = this.CreateEmptyEventResponse(); | ||
148 | } | ||
149 | return res; | ||
150 | } | ||
151 | |||
152 | public string CreateEstablishAgentComms(string caps, string ipAddressPort) | ||
153 | { | ||
154 | string res = "<llsd><map><key>id</key><integer>" + eventQueueCount + "</integer>"; | ||
155 | res += "<key>events</key><array><map>"; | ||
156 | res += "<key>message</key><string>EstablishAgentCommunication</string>"; | ||
157 | res += "<key>body</key><map>"; | ||
158 | res += "<key>sim-ip-and-port</key><string>" + ipAddressPort + "</string>"; | ||
159 | res += "<key>seed-capability</key><string>" + caps + "</string>"; | ||
160 | res += "<key>agent-id</key><uuid>" + this.agentID.ToStringHyphenated() + "</uuid>"; | ||
161 | res += "</map>"; | ||
162 | res += "</map></array>"; | ||
163 | res += "</map></llsd>"; | ||
164 | eventQueueCount++; | ||
165 | this.CapsEventQueue.Enqueue(res); | ||
166 | return res; | ||
167 | } | ||
168 | |||
169 | public string CreateEmptyEventResponse() | ||
170 | { | ||
171 | string res = "<llsd><map><key>id</key><integer>" + eventQueueCount + "</integer>"; | ||
172 | res += "<key>events</key><array><map>"; | ||
173 | res += "</map></array>"; | ||
174 | res += "</map></llsd>"; | ||
175 | eventQueueCount++; | ||
176 | return res; | ||
177 | } | ||
178 | |||
179 | public string NewAgentInventory(string request, string path, string param) | ||
180 | { | ||
181 | //Console.WriteLine("received upload request:"+ request); | ||
182 | string res = ""; | ||
183 | LLUUID newAsset = LLUUID.Random(); | ||
184 | LLUUID newInvItem = LLUUID.Random(); | ||
185 | string uploaderPath = capsObjectPath + Util.RandomClass.Next(5000, 8000).ToString("0000"); | ||
186 | AssetUploader uploader = new AssetUploader(newAsset, newInvItem, uploaderPath, this.httpListener); | ||
187 | httpListener.AddRestHandler("POST", "/CAPS/" + uploaderPath, uploader.uploaderCaps); | ||
188 | string uploaderURL = "http://" + httpListenerAddress + ":" + httpListenPort.ToString() + "/CAPS/" + uploaderPath; | ||
189 | //Console.WriteLine("uploader url is " + uploaderURL); | ||
190 | res += "<llsd><map>"; | ||
191 | res += "<key>uploader</key><string>" + uploaderURL + "</string>"; | ||
192 | //res += "<key>success</key><boolean>true</boolean>"; | ||
193 | res += "<key>state</key><string>upload</string>"; | ||
194 | res += "</map></llsd>"; | ||
195 | uploader.OnUpLoad += this.UploadHandler; | ||
196 | return res; | ||
197 | } | ||
198 | |||
199 | public void UploadHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data) | ||
200 | { | ||
201 | // Console.WriteLine("upload handler called"); | ||
202 | AssetBase asset; | ||
203 | asset = new AssetBase(); | ||
204 | asset.FullID = assetID; | ||
205 | asset.Type = 0; | ||
206 | asset.InvType = 0; | ||
207 | asset.Name = "UploadedTexture" + Util.RandomClass.Next(1, 1000).ToString("000"); | ||
208 | asset.Data = data; | ||
209 | this.assetCache.AddAsset(asset); | ||
210 | } | ||
211 | |||
212 | public class AssetUploader | ||
213 | { | ||
214 | public event UpLoadedTexture OnUpLoad; | ||
215 | |||
216 | private string uploaderPath = ""; | ||
217 | private LLUUID newAssetID; | ||
218 | private LLUUID inventoryItemID; | ||
219 | private BaseHttpServer httpListener; | ||
220 | public AssetUploader(LLUUID assetID, LLUUID inventoryItem, string path, BaseHttpServer httpServer) | ||
221 | { | ||
222 | newAssetID = assetID; | ||
223 | inventoryItemID = inventoryItem; | ||
224 | uploaderPath = path; | ||
225 | httpListener = httpServer; | ||
226 | |||
227 | } | ||
228 | |||
229 | public string uploaderCaps(string request, string path, string param) | ||
230 | { | ||
231 | Encoding _enc = System.Text.Encoding.UTF8; | ||
232 | byte[] data = _enc.GetBytes(request); | ||
233 | //Console.WriteLine("recieved upload " + Util.FieldToString(data)); | ||
234 | LLUUID inv = this.inventoryItemID; | ||
235 | string res = ""; | ||
236 | res += "<llsd><map>"; | ||
237 | res += "<key>new_asset</key><string>" + newAssetID.ToStringHyphenated() + "</string>"; | ||
238 | res += "<key>new_inventory_item</key><uuid>" + inv.ToStringHyphenated() + "</uuid>"; | ||
239 | res += "<key>state</key><string>complete</string>"; | ||
240 | res += "</map></llsd>"; | ||
241 | |||
242 | // Console.WriteLine("asset " + newAssetID.ToStringHyphenated() + " , inventory item " + inv.ToStringHyphenated()); | ||
243 | httpListener.RemoveRestHandler("POST", "/CAPS/" + uploaderPath); | ||
244 | if (OnUpLoad != null) | ||
245 | { | ||
246 | OnUpLoad(newAssetID, inv, data); | ||
247 | } | ||
248 | |||
249 | /*FileStream fs = File.Create("upload.jp2"); | ||
250 | BinaryWriter bw = new BinaryWriter(fs); | ||
251 | bw.Write(data); | ||
252 | bw.Close(); | ||
253 | fs.Close();*/ | ||
254 | return res; | ||
255 | } | ||
256 | } | ||
257 | } | ||
258 | } | ||
diff --git a/OpenSim/Region/Simulation/EstateManager.cs b/OpenSim/Region/Simulation/EstateManager.cs new file mode 100644 index 0000000..dcb5564 --- /dev/null +++ b/OpenSim/Region/Simulation/EstateManager.cs | |||
@@ -0,0 +1,301 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using OpenSim.Framework.Types; | ||
32 | using OpenSim.Framework.Interfaces; | ||
33 | using OpenSim.Region; | ||
34 | using OpenSim.Region.Scenes; | ||
35 | using OpenSim; | ||
36 | using libsecondlife; | ||
37 | using libsecondlife.Packets; | ||
38 | using Avatar = OpenSim.Region.Scenes.ScenePresence; | ||
39 | |||
40 | |||
41 | namespace OpenSim.Region | ||
42 | { | ||
43 | |||
44 | /// <summary> | ||
45 | /// Processes requests regarding estates. Refer to EstateSettings.cs in OpenSim.Framework. Types for all of the core settings | ||
46 | /// </summary> | ||
47 | public class EstateManager | ||
48 | { | ||
49 | private Scene m_world; | ||
50 | private RegionInfo m_regInfo; | ||
51 | |||
52 | public EstateManager(Scene world,RegionInfo reginfo) | ||
53 | { | ||
54 | m_world = world; //Estate settings found at world.m_regInfo.estateSettings | ||
55 | m_regInfo = reginfo; | ||
56 | } | ||
57 | |||
58 | private bool convertParamStringToBool(byte[] field) | ||
59 | { | ||
60 | string s = Helpers.FieldToUTF8String(field); | ||
61 | if (s == "1" || s.ToLower() == "y" || s.ToLower() == "yes" || s.ToLower() == "t" || s.ToLower() == "true") | ||
62 | { | ||
63 | return true; | ||
64 | } | ||
65 | return false; | ||
66 | } | ||
67 | |||
68 | public void handleEstateOwnerMessage(EstateOwnerMessagePacket packet, IClientAPI remote_client) | ||
69 | { | ||
70 | if (remote_client.AgentId == m_regInfo.MasterAvatarAssignedUUID) | ||
71 | { | ||
72 | switch (Helpers.FieldToUTF8String(packet.MethodData.Method)) | ||
73 | { | ||
74 | case "getinfo": | ||
75 | Console.WriteLine("GETINFO Requested"); | ||
76 | this.sendRegionInfoPacketToAll(); | ||
77 | |||
78 | break; | ||
79 | case "setregioninfo": | ||
80 | if (packet.ParamList.Length != 9) | ||
81 | { | ||
82 | OpenSim.Framework.Console.MainLog.Instance.Error("EstateOwnerMessage: SetRegionInfo method has a ParamList of invalid length"); | ||
83 | } | ||
84 | else | ||
85 | { | ||
86 | m_regInfo.estateSettings.regionFlags = libsecondlife.Simulator.RegionFlags.None; | ||
87 | |||
88 | if (convertParamStringToBool(packet.ParamList[0].Parameter)) | ||
89 | { | ||
90 | m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | libsecondlife.Simulator.RegionFlags.BlockTerraform; | ||
91 | } | ||
92 | |||
93 | if (convertParamStringToBool(packet.ParamList[1].Parameter)) | ||
94 | { | ||
95 | m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | libsecondlife.Simulator.RegionFlags.NoFly; | ||
96 | } | ||
97 | |||
98 | if (convertParamStringToBool(packet.ParamList[2].Parameter)) | ||
99 | { | ||
100 | m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | libsecondlife.Simulator.RegionFlags.AllowDamage; | ||
101 | } | ||
102 | |||
103 | if (convertParamStringToBool(packet.ParamList[3].Parameter) == false) | ||
104 | { | ||
105 | m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | libsecondlife.Simulator.RegionFlags.BlockLandResell; | ||
106 | } | ||
107 | |||
108 | |||
109 | int tempMaxAgents = Convert.ToInt16(Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[4].Parameter))); | ||
110 | m_regInfo.estateSettings.maxAgents = (byte)tempMaxAgents; | ||
111 | |||
112 | float tempObjectBonusFactor = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[5].Parameter)); | ||
113 | m_regInfo.estateSettings.objectBonusFactor = tempObjectBonusFactor; | ||
114 | |||
115 | int tempMatureLevel = Convert.ToInt16(Helpers.FieldToUTF8String(packet.ParamList[6].Parameter)); | ||
116 | m_regInfo.estateSettings.simAccess = (libsecondlife.Simulator.SimAccess)tempMatureLevel; | ||
117 | |||
118 | |||
119 | if (convertParamStringToBool(packet.ParamList[7].Parameter)) | ||
120 | { | ||
121 | m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | libsecondlife.Simulator.RegionFlags.RestrictPushObject; | ||
122 | } | ||
123 | |||
124 | if (convertParamStringToBool(packet.ParamList[8].Parameter)) | ||
125 | { | ||
126 | m_regInfo.estateSettings.regionFlags = m_regInfo.estateSettings.regionFlags | libsecondlife.Simulator.RegionFlags.AllowParcelChanges; | ||
127 | } | ||
128 | |||
129 | sendRegionInfoPacketToAll(); | ||
130 | |||
131 | } | ||
132 | break; | ||
133 | case "texturebase": | ||
134 | foreach (EstateOwnerMessagePacket.ParamListBlock block in packet.ParamList) | ||
135 | { | ||
136 | string s = Helpers.FieldToUTF8String(block.Parameter); | ||
137 | string[] splitField = s.Split(' '); | ||
138 | if (splitField.Length == 2) | ||
139 | { | ||
140 | LLUUID tempUUID = new LLUUID(splitField[1]); | ||
141 | switch (Convert.ToInt16(splitField[0])) | ||
142 | { | ||
143 | case 0: | ||
144 | m_regInfo.estateSettings.terrainBase0 = tempUUID; | ||
145 | break; | ||
146 | case 1: | ||
147 | m_regInfo.estateSettings.terrainBase1 = tempUUID; | ||
148 | break; | ||
149 | case 2: | ||
150 | m_regInfo.estateSettings.terrainBase2 = tempUUID; | ||
151 | break; | ||
152 | case 3: | ||
153 | m_regInfo.estateSettings.terrainBase3 = tempUUID; | ||
154 | break; | ||
155 | } | ||
156 | } | ||
157 | } | ||
158 | break; | ||
159 | case "texturedetail": | ||
160 | foreach (EstateOwnerMessagePacket.ParamListBlock block in packet.ParamList) | ||
161 | { | ||
162 | |||
163 | string s = Helpers.FieldToUTF8String(block.Parameter); | ||
164 | string[] splitField = s.Split(' '); | ||
165 | if (splitField.Length == 2) | ||
166 | { | ||
167 | LLUUID tempUUID = new LLUUID(splitField[1]); | ||
168 | switch (Convert.ToInt16(splitField[0])) | ||
169 | { | ||
170 | case 0: | ||
171 | m_regInfo.estateSettings.terrainDetail0 = tempUUID; | ||
172 | break; | ||
173 | case 1: | ||
174 | m_regInfo.estateSettings.terrainDetail1 = tempUUID; | ||
175 | break; | ||
176 | case 2: | ||
177 | m_regInfo.estateSettings.terrainDetail2 = tempUUID; | ||
178 | break; | ||
179 | case 3: | ||
180 | m_regInfo.estateSettings.terrainDetail3 = tempUUID; | ||
181 | break; | ||
182 | } | ||
183 | } | ||
184 | } | ||
185 | break; | ||
186 | case "textureheights": | ||
187 | foreach (EstateOwnerMessagePacket.ParamListBlock block in packet.ParamList) | ||
188 | { | ||
189 | |||
190 | string s = Helpers.FieldToUTF8String(block.Parameter); | ||
191 | string[] splitField = s.Split(' '); | ||
192 | if (splitField.Length == 3) | ||
193 | { | ||
194 | |||
195 | float tempHeightLow = (float)Convert.ToDecimal(splitField[1]); | ||
196 | float tempHeightHigh = (float)Convert.ToDecimal(splitField[2]); | ||
197 | |||
198 | switch (Convert.ToInt16(splitField[0])) | ||
199 | { | ||
200 | case 0: | ||
201 | m_regInfo.estateSettings.terrainStartHeight0 = tempHeightLow; | ||
202 | m_regInfo.estateSettings.terrainHeightRange0 = tempHeightHigh; | ||
203 | break; | ||
204 | case 1: | ||
205 | m_regInfo.estateSettings.terrainStartHeight1 = tempHeightLow; | ||
206 | m_regInfo.estateSettings.terrainHeightRange1 = tempHeightHigh; | ||
207 | break; | ||
208 | case 2: | ||
209 | m_regInfo.estateSettings.terrainStartHeight2 = tempHeightLow; | ||
210 | m_regInfo.estateSettings.terrainHeightRange2 = tempHeightHigh; | ||
211 | break; | ||
212 | case 3: | ||
213 | m_regInfo.estateSettings.terrainStartHeight3 = tempHeightLow; | ||
214 | m_regInfo.estateSettings.terrainHeightRange3 = tempHeightHigh; | ||
215 | break; | ||
216 | } | ||
217 | } | ||
218 | } | ||
219 | break; | ||
220 | case "texturecommit": | ||
221 | sendRegionHandshakeToAll(); | ||
222 | break; | ||
223 | case "setregionterrain": | ||
224 | if (packet.ParamList.Length != 9) | ||
225 | { | ||
226 | OpenSim.Framework.Console.MainLog.Instance.Error("EstateOwnerMessage: SetRegionTerrain method has a ParamList of invalid length"); | ||
227 | } | ||
228 | else | ||
229 | { | ||
230 | m_regInfo.estateSettings.waterHeight = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[0].Parameter)); | ||
231 | m_regInfo.estateSettings.terrainRaiseLimit = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[1].Parameter)); | ||
232 | m_regInfo.estateSettings.terrainLowerLimit = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[2].Parameter)); | ||
233 | m_regInfo.estateSettings.useFixedSun = this.convertParamStringToBool(packet.ParamList[4].Parameter); | ||
234 | m_regInfo.estateSettings.sunHour = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(packet.ParamList[5].Parameter)); | ||
235 | |||
236 | sendRegionInfoPacketToAll(); | ||
237 | } | ||
238 | break; | ||
239 | default: | ||
240 | OpenSim.Framework.Console.MainLog.Instance.Error("EstateOwnerMessage: Unknown method requested\n" + packet.ToString()); | ||
241 | break; | ||
242 | } | ||
243 | } | ||
244 | } | ||
245 | |||
246 | public void sendRegionInfoPacketToAll() | ||
247 | { | ||
248 | List<Avatar> avatars = m_world.RequestAvatarList(); | ||
249 | |||
250 | for (int i = 0; i < avatars.Count; i++) | ||
251 | { | ||
252 | this.sendRegionInfoPacket(avatars[i].ControllingClient); | ||
253 | } | ||
254 | } | ||
255 | |||
256 | public void sendRegionHandshakeToAll() | ||
257 | { | ||
258 | List<Avatar> avatars = m_world.RequestAvatarList(); | ||
259 | |||
260 | for (int i = 0; i < avatars.Count; i++) | ||
261 | { | ||
262 | this.sendRegionHandshake(avatars[i].ControllingClient); | ||
263 | } | ||
264 | } | ||
265 | |||
266 | public void sendRegionInfoPacket(IClientAPI remote_client) | ||
267 | { | ||
268 | Encoding _enc = System.Text.Encoding.ASCII; | ||
269 | |||
270 | AgentCircuitData circuitData = remote_client.RequestClientInfo(); | ||
271 | |||
272 | RegionInfoPacket regionInfoPacket = new RegionInfoPacket(); | ||
273 | regionInfoPacket.AgentData.AgentID = circuitData.AgentID; | ||
274 | regionInfoPacket.AgentData.SessionID = circuitData.SessionID; | ||
275 | regionInfoPacket.RegionInfo.BillableFactor = m_regInfo.estateSettings.billableFactor; | ||
276 | regionInfoPacket.RegionInfo.EstateID = m_regInfo.estateSettings.estateID; | ||
277 | regionInfoPacket.RegionInfo.MaxAgents = m_regInfo.estateSettings.maxAgents; | ||
278 | regionInfoPacket.RegionInfo.ObjectBonusFactor = m_regInfo.estateSettings.objectBonusFactor; | ||
279 | regionInfoPacket.RegionInfo.ParentEstateID = m_regInfo.estateSettings.parentEstateID; | ||
280 | regionInfoPacket.RegionInfo.PricePerMeter = m_regInfo.estateSettings.pricePerMeter; | ||
281 | regionInfoPacket.RegionInfo.RedirectGridX = m_regInfo.estateSettings.redirectGridX; | ||
282 | regionInfoPacket.RegionInfo.RedirectGridY = m_regInfo.estateSettings.redirectGridY; | ||
283 | regionInfoPacket.RegionInfo.RegionFlags = (uint)m_regInfo.estateSettings.regionFlags; | ||
284 | regionInfoPacket.RegionInfo.SimAccess = (byte)m_regInfo.estateSettings.simAccess; | ||
285 | regionInfoPacket.RegionInfo.SimName = _enc.GetBytes( m_regInfo.RegionName); | ||
286 | regionInfoPacket.RegionInfo.SunHour = m_regInfo.estateSettings.sunHour; | ||
287 | regionInfoPacket.RegionInfo.TerrainLowerLimit = m_regInfo.estateSettings.terrainLowerLimit; | ||
288 | regionInfoPacket.RegionInfo.TerrainRaiseLimit = m_regInfo.estateSettings.terrainRaiseLimit; | ||
289 | regionInfoPacket.RegionInfo.UseEstateSun = !m_regInfo.estateSettings.useFixedSun; | ||
290 | regionInfoPacket.RegionInfo.WaterHeight = m_regInfo.estateSettings.waterHeight; | ||
291 | |||
292 | remote_client.OutPacket(regionInfoPacket); | ||
293 | } | ||
294 | |||
295 | public void sendRegionHandshake(IClientAPI remoteClient) | ||
296 | { | ||
297 | remoteClient.SendRegionHandshake(m_regInfo); | ||
298 | } | ||
299 | |||
300 | } | ||
301 | } | ||
diff --git a/OpenSim/Region/Simulation/OpenSim.Region.Simulation.csproj b/OpenSim/Region/Simulation/OpenSim.Region.Simulation.csproj new file mode 100644 index 0000000..7811a55 --- /dev/null +++ b/OpenSim/Region/Simulation/OpenSim.Region.Simulation.csproj | |||
@@ -0,0 +1,211 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{C0DAB338-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Simulation</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Simulation</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="Db4objects.Db4o.dll" > | ||
66 | <HintPath>..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="libsecondlife.dll" > | ||
70 | <HintPath>..\..\..\bin\libsecondlife.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System" > | ||
74 | <HintPath>System.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="XMLRPC.dll" > | ||
82 | <HintPath>..\..\..\bin\XMLRPC.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | </ItemGroup> | ||
86 | <ItemGroup> | ||
87 | <ProjectReference Include="..\..\Framework\General\OpenSim.Framework.csproj"> | ||
88 | <Name>OpenSim.Framework</Name> | ||
89 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
90 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
91 | <Private>False</Private> | ||
92 | </ProjectReference> | ||
93 | <ProjectReference Include="..\..\Framework\Communications\OpenSim.Framework.Communications.csproj"> | ||
94 | <Name>OpenSim.Framework.Communications</Name> | ||
95 | <Project>{CB52B7E7-0000-0000-0000-000000000000}</Project> | ||
96 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
97 | <Private>False</Private> | ||
98 | </ProjectReference> | ||
99 | <ProjectReference Include="..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
100 | <Name>OpenSim.Framework.Console</Name> | ||
101 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
102 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
103 | <Private>False</Private> | ||
104 | </ProjectReference> | ||
105 | <ProjectReference Include="..\..\Framework\GenericConfig\Xml\OpenSim.Framework.GenericConfig.Xml.csproj"> | ||
106 | <Name>OpenSim.Framework.GenericConfig.Xml</Name> | ||
107 | <Project>{C74E4A30-0000-0000-0000-000000000000}</Project> | ||
108 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
109 | <Private>False</Private> | ||
110 | </ProjectReference> | ||
111 | <ProjectReference Include="..\..\Framework\Servers\OpenSim.Framework.Servers.csproj"> | ||
112 | <Name>OpenSim.Framework.Servers</Name> | ||
113 | <Project>{2CC71860-0000-0000-0000-000000000000}</Project> | ||
114 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
115 | <Private>False</Private> | ||
116 | </ProjectReference> | ||
117 | <ProjectReference Include="..\Caches\OpenSim.Region.Caches.csproj"> | ||
118 | <Name>OpenSim.Region.Caches</Name> | ||
119 | <Project>{61FCCDB3-0000-0000-0000-000000000000}</Project> | ||
120 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
121 | <Private>False</Private> | ||
122 | </ProjectReference> | ||
123 | <ProjectReference Include="..\Physics\Manager\OpenSim.Region.Physics.Manager.csproj"> | ||
124 | <Name>OpenSim.Region.Physics.Manager</Name> | ||
125 | <Project>{F4FF31EB-0000-0000-0000-000000000000}</Project> | ||
126 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
127 | <Private>False</Private> | ||
128 | </ProjectReference> | ||
129 | <ProjectReference Include="..\Terrain.BasicTerrain\OpenSim.Region.Terrain.BasicTerrain.csproj"> | ||
130 | <Name>OpenSim.Region.Terrain.BasicTerrain</Name> | ||
131 | <Project>{C9E0F891-0000-0000-0000-000000000000}</Project> | ||
132 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
133 | <Private>False</Private> | ||
134 | </ProjectReference> | ||
135 | </ItemGroup> | ||
136 | <ItemGroup> | ||
137 | <Compile Include="Caps.cs"> | ||
138 | <SubType>Code</SubType> | ||
139 | </Compile> | ||
140 | <Compile Include="EstateManager.cs"> | ||
141 | <SubType>Code</SubType> | ||
142 | </Compile> | ||
143 | <Compile Include="ParcelManager.cs"> | ||
144 | <SubType>Code</SubType> | ||
145 | </Compile> | ||
146 | <Compile Include="RegionManager.cs"> | ||
147 | <SubType>Code</SubType> | ||
148 | </Compile> | ||
149 | <Compile Include="Scenes\Entity.cs"> | ||
150 | <SubType>Code</SubType> | ||
151 | </Compile> | ||
152 | <Compile Include="Scenes\IScenePresenceBody.cs"> | ||
153 | <SubType>Code</SubType> | ||
154 | </Compile> | ||
155 | <Compile Include="Scenes\Primitive.cs"> | ||
156 | <SubType>Code</SubType> | ||
157 | </Compile> | ||
158 | <Compile Include="Scenes\Scene.cs"> | ||
159 | <SubType>Code</SubType> | ||
160 | </Compile> | ||
161 | <Compile Include="Scenes\Scene.PacketHandlers.cs"> | ||
162 | <SubType>Code</SubType> | ||
163 | </Compile> | ||
164 | <Compile Include="Scenes\Scene.Scripting.cs"> | ||
165 | <SubType>Code</SubType> | ||
166 | </Compile> | ||
167 | <Compile Include="Scenes\SceneBase.cs"> | ||
168 | <SubType>Code</SubType> | ||
169 | </Compile> | ||
170 | <Compile Include="Scenes\SceneEvents.cs"> | ||
171 | <SubType>Code</SubType> | ||
172 | </Compile> | ||
173 | <Compile Include="Scenes\SceneObject.cs"> | ||
174 | <SubType>Code</SubType> | ||
175 | </Compile> | ||
176 | <Compile Include="Scenes\ScenePresence.Animations.cs"> | ||
177 | <SubType>Code</SubType> | ||
178 | </Compile> | ||
179 | <Compile Include="Scenes\ScenePresence.Body.cs"> | ||
180 | <SubType>Code</SubType> | ||
181 | </Compile> | ||
182 | <Compile Include="Scenes\ScenePresence.cs"> | ||
183 | <SubType>Code</SubType> | ||
184 | </Compile> | ||
185 | <Compile Include="Scenes\scripting\IScriptContext.cs"> | ||
186 | <SubType>Code</SubType> | ||
187 | </Compile> | ||
188 | <Compile Include="Scenes\scripting\IScriptEntity.cs"> | ||
189 | <SubType>Code</SubType> | ||
190 | </Compile> | ||
191 | <Compile Include="Scenes\scripting\IScriptHandler.cs"> | ||
192 | <SubType>Code</SubType> | ||
193 | </Compile> | ||
194 | <Compile Include="Scenes\scripting\Script.cs"> | ||
195 | <SubType>Code</SubType> | ||
196 | </Compile> | ||
197 | <Compile Include="Scenes\scripting\ScriptFactory.cs"> | ||
198 | <SubType>Code</SubType> | ||
199 | </Compile> | ||
200 | <Compile Include="Scenes\scripting\Scripts\FollowRandomAvatar.cs"> | ||
201 | <SubType>Code</SubType> | ||
202 | </Compile> | ||
203 | </ItemGroup> | ||
204 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
205 | <PropertyGroup> | ||
206 | <PreBuildEvent> | ||
207 | </PreBuildEvent> | ||
208 | <PostBuildEvent> | ||
209 | </PostBuildEvent> | ||
210 | </PropertyGroup> | ||
211 | </Project> | ||
diff --git a/OpenSim/Region/Simulation/OpenSim.Region.Simulation.csproj.user b/OpenSim/Region/Simulation/OpenSim.Region.Simulation.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Simulation/OpenSim.Region.Simulation.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Simulation/ParcelManager.cs b/OpenSim/Region/Simulation/ParcelManager.cs new file mode 100644 index 0000000..d15d77d --- /dev/null +++ b/OpenSim/Region/Simulation/ParcelManager.cs | |||
@@ -0,0 +1,892 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using OpenSim.Framework.Interfaces; | ||
34 | using OpenSim.Framework.Types; | ||
35 | using OpenSim.Region.Scenes; | ||
36 | using Avatar = OpenSim.Region.Scenes.ScenePresence; | ||
37 | |||
38 | namespace OpenSim.Region | ||
39 | { | ||
40 | |||
41 | |||
42 | #region ParcelManager Class | ||
43 | /// <summary> | ||
44 | /// Handles Parcel objects and operations requiring information from other Parcel objects (divide, join, etc) | ||
45 | /// </summary> | ||
46 | public class ParcelManager : OpenSim.Framework.Interfaces.ILocalStorageParcelReceiver | ||
47 | { | ||
48 | |||
49 | #region Constants | ||
50 | //Parcel types set with flags in ParcelOverlay. | ||
51 | //Only one of these can be used. | ||
52 | public const byte PARCEL_TYPE_PUBLIC = (byte)0; //Equals 00000000 | ||
53 | public const byte PARCEL_TYPE_OWNED_BY_OTHER = (byte)1; //Equals 00000001 | ||
54 | public const byte PARCEL_TYPE_OWNED_BY_GROUP = (byte)2; //Equals 00000010 | ||
55 | public const byte PARCEL_TYPE_OWNED_BY_REQUESTER = (byte)3; //Equals 00000011 | ||
56 | public const byte PARCEL_TYPE_IS_FOR_SALE = (byte)4; //Equals 00000100 | ||
57 | public const byte PARCEL_TYPE_IS_BEING_AUCTIONED = (byte)5; //Equals 00000101 | ||
58 | |||
59 | |||
60 | //Flags that when set, a border on the given side will be placed | ||
61 | //NOTE: North and East is assumable by the west and south sides (if parcel to east has a west border, then I have an east border; etc) | ||
62 | //This took forever to figure out -- jeesh. /blame LL for even having to send these | ||
63 | public const byte PARCEL_FLAG_PROPERTY_BORDER_WEST = (byte)64; //Equals 01000000 | ||
64 | public const byte PARCEL_FLAG_PROPERTY_BORDER_SOUTH = (byte)128; //Equals 10000000 | ||
65 | |||
66 | //RequestResults (I think these are right, they seem to work): | ||
67 | public const int PARCEL_RESULT_ONE_PARCEL = 0; // The request they made contained only one parcel | ||
68 | public const int PARCEL_RESULT_MULTIPLE_PARCELS = 1; // The request they made contained more than one parcel | ||
69 | |||
70 | //These are other constants. Yay! | ||
71 | public const int START_PARCEL_LOCAL_ID = 1; | ||
72 | #endregion | ||
73 | |||
74 | #region Member Variables | ||
75 | public Dictionary<int, Parcel> parcelList = new Dictionary<int, Parcel>(); | ||
76 | private int lastParcelLocalID = START_PARCEL_LOCAL_ID - 1; | ||
77 | private int[,] parcelIDList = new int[64, 64]; | ||
78 | |||
79 | private Scene m_world; | ||
80 | private RegionInfo m_regInfo; | ||
81 | |||
82 | #endregion | ||
83 | |||
84 | #region Constructors | ||
85 | public ParcelManager(Scene world, RegionInfo reginfo) | ||
86 | { | ||
87 | |||
88 | m_world = world; | ||
89 | m_regInfo = reginfo; | ||
90 | parcelIDList.Initialize(); | ||
91 | |||
92 | } | ||
93 | #endregion | ||
94 | |||
95 | #region Member Functions | ||
96 | |||
97 | #region Parcel From Storage Functions | ||
98 | public void ParcelFromStorage(ParcelData data) | ||
99 | { | ||
100 | Parcel new_parcel = new Parcel(data.ownerID, data.isGroupOwned, m_world); | ||
101 | new_parcel.parcelData = data.Copy(); | ||
102 | new_parcel.setParcelBitmapFromByteArray(); | ||
103 | addParcel(new_parcel); | ||
104 | |||
105 | } | ||
106 | |||
107 | public void NoParcelDataFromStorage() | ||
108 | { | ||
109 | resetSimParcels(); | ||
110 | } | ||
111 | #endregion | ||
112 | |||
113 | #region Parcel Add/Remove/Get/Create | ||
114 | /// <summary> | ||
115 | /// Creates a basic Parcel object without an owner (a zeroed key) | ||
116 | /// </summary> | ||
117 | /// <returns></returns> | ||
118 | public Parcel createBaseParcel() | ||
119 | { | ||
120 | return new Parcel(new LLUUID(), false, m_world); | ||
121 | } | ||
122 | |||
123 | /// <summary> | ||
124 | /// Adds a parcel to the stored list and adds them to the parcelIDList to what they own | ||
125 | /// </summary> | ||
126 | /// <param name="new_parcel">The parcel being added</param> | ||
127 | public void addParcel(Parcel new_parcel) | ||
128 | { | ||
129 | lastParcelLocalID++; | ||
130 | new_parcel.parcelData.localID = lastParcelLocalID; | ||
131 | parcelList.Add(lastParcelLocalID, new_parcel.Copy()); | ||
132 | |||
133 | |||
134 | bool[,] parcelBitmap = new_parcel.getParcelBitmap(); | ||
135 | int x, y; | ||
136 | for (x = 0; x < 64; x++) | ||
137 | { | ||
138 | for (y = 0; y < 64; y++) | ||
139 | { | ||
140 | if (parcelBitmap[x, y]) | ||
141 | { | ||
142 | parcelIDList[x, y] = lastParcelLocalID; | ||
143 | } | ||
144 | } | ||
145 | } | ||
146 | parcelList[lastParcelLocalID].forceUpdateParcelInfo(); | ||
147 | |||
148 | |||
149 | } | ||
150 | /// <summary> | ||
151 | /// Removes a parcel from the list. Will not remove if local_id is still owning an area in parcelIDList | ||
152 | /// </summary> | ||
153 | /// <param name="local_id">Parcel.localID of the parcel to remove.</param> | ||
154 | public void removeParcel(int local_id) | ||
155 | { | ||
156 | int x, y; | ||
157 | for (x = 0; x < 64; x++) | ||
158 | { | ||
159 | for (y = 0; y < 64; y++) | ||
160 | { | ||
161 | if (parcelIDList[x, y] == local_id) | ||
162 | { | ||
163 | throw new Exception("Could not remove parcel. Still being used at " + x + ", " + y); | ||
164 | } | ||
165 | } | ||
166 | } | ||
167 | m_world.localStorage.RemoveParcel(parcelList[local_id].parcelData); | ||
168 | parcelList.Remove(local_id); | ||
169 | } | ||
170 | |||
171 | private void performFinalParcelJoin(Parcel master, Parcel slave) | ||
172 | { | ||
173 | int x, y; | ||
174 | bool[,] parcelBitmapSlave = slave.getParcelBitmap(); | ||
175 | for (x = 0; x < 64; x++) | ||
176 | { | ||
177 | for (y = 0; y < 64; y++) | ||
178 | { | ||
179 | if (parcelBitmapSlave[x, y]) | ||
180 | { | ||
181 | parcelIDList[x, y] = master.parcelData.localID; | ||
182 | } | ||
183 | } | ||
184 | } | ||
185 | removeParcel(slave.parcelData.localID); | ||
186 | } | ||
187 | /// <summary> | ||
188 | /// Get the parcel at the specified point | ||
189 | /// </summary> | ||
190 | /// <param name="x">Value between 0 - 256 on the x axis of the point</param> | ||
191 | /// <param name="y">Value between 0 - 256 on the y axis of the point</param> | ||
192 | /// <returns>Parcel at the point supplied</returns> | ||
193 | public Parcel getParcel(int x, int y) | ||
194 | { | ||
195 | if (x > 256 || y > 256 || x < 0 || y < 0) | ||
196 | { | ||
197 | throw new Exception("Error: Parcel not found at point " + x + ", " + y); | ||
198 | } | ||
199 | else | ||
200 | { | ||
201 | return parcelList[parcelIDList[x / 4, y / 4]]; | ||
202 | } | ||
203 | |||
204 | } | ||
205 | #endregion | ||
206 | |||
207 | #region Parcel Modification | ||
208 | /// <summary> | ||
209 | /// Subdivides a parcel | ||
210 | /// </summary> | ||
211 | /// <param name="start_x">West Point</param> | ||
212 | /// <param name="start_y">South Point</param> | ||
213 | /// <param name="end_x">East Point</param> | ||
214 | /// <param name="end_y">North Point</param> | ||
215 | /// <param name="attempting_user_id">LLUUID of user who is trying to subdivide</param> | ||
216 | /// <returns>Returns true if successful</returns> | ||
217 | private bool subdivide(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) | ||
218 | { | ||
219 | //First, lets loop through the points and make sure they are all in the same parcel | ||
220 | //Get the parcel at start | ||
221 | Parcel startParcel = getParcel(start_x, start_y); | ||
222 | if (startParcel == null) return false; //No such parcel at the beginning | ||
223 | |||
224 | //Loop through the points | ||
225 | try | ||
226 | { | ||
227 | int totalX = end_x - start_x; | ||
228 | int totalY = end_y - start_y; | ||
229 | int x, y; | ||
230 | for (y = 0; y < totalY; y++) | ||
231 | { | ||
232 | for (x = 0; x < totalX; x++) | ||
233 | { | ||
234 | Parcel tempParcel = getParcel(start_x + x, start_y + y); | ||
235 | if (tempParcel == null) return false; //No such parcel at that point | ||
236 | if (tempParcel != startParcel) return false; //Subdividing over 2 parcels; no-no | ||
237 | } | ||
238 | } | ||
239 | } | ||
240 | catch (Exception) | ||
241 | { | ||
242 | return false; //Exception. For now, lets skip subdivision | ||
243 | } | ||
244 | |||
245 | //If we are still here, then they are subdividing within one parcel | ||
246 | //Check owner | ||
247 | if (startParcel.parcelData.ownerID != attempting_user_id) | ||
248 | { | ||
249 | return false; //They cant do this! | ||
250 | } | ||
251 | |||
252 | //Lets create a new parcel with bitmap activated at that point (keeping the old parcels info) | ||
253 | Parcel newParcel = startParcel.Copy(); | ||
254 | newParcel.parcelData.parcelName = "Subdivision of " + newParcel.parcelData.parcelName; | ||
255 | newParcel.parcelData.globalID = LLUUID.Random(); | ||
256 | |||
257 | newParcel.setParcelBitmap(Parcel.getSquareParcelBitmap(start_x, start_y, end_x, end_y)); | ||
258 | |||
259 | //Now, lets set the subdivision area of the original to false | ||
260 | int startParcelIndex = startParcel.parcelData.localID; | ||
261 | parcelList[startParcelIndex].setParcelBitmap(Parcel.modifyParcelBitmapSquare(startParcel.getParcelBitmap(), start_x, start_y, end_x, end_y, false)); | ||
262 | parcelList[startParcelIndex].forceUpdateParcelInfo(); | ||
263 | |||
264 | |||
265 | //Now add the new parcel | ||
266 | addParcel(newParcel); | ||
267 | |||
268 | |||
269 | |||
270 | |||
271 | |||
272 | return true; | ||
273 | } | ||
274 | /// <summary> | ||
275 | /// Join 2 parcels together | ||
276 | /// </summary> | ||
277 | /// <param name="start_x">x value in first parcel</param> | ||
278 | /// <param name="start_y">y value in first parcel</param> | ||
279 | /// <param name="end_x">x value in second parcel</param> | ||
280 | /// <param name="end_y">y value in second parcel</param> | ||
281 | /// <param name="attempting_user_id">LLUUID of the avatar trying to join the parcels</param> | ||
282 | /// <returns>Returns true if successful</returns> | ||
283 | private bool join(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) | ||
284 | { | ||
285 | end_x -= 4; | ||
286 | end_y -= 4; | ||
287 | |||
288 | //NOTE: The following only connects the parcels in each corner and not all the parcels that are within the selection box! | ||
289 | //This should be fixed later -- somewhat "incomplete code" --Ming | ||
290 | Parcel startParcel, endParcel; | ||
291 | |||
292 | try | ||
293 | { | ||
294 | startParcel = getParcel(start_x, start_y); | ||
295 | endParcel = getParcel(end_x, end_y); | ||
296 | } | ||
297 | catch (Exception) | ||
298 | { | ||
299 | return false; //Error occured when trying to get the start and end parcels | ||
300 | } | ||
301 | if (startParcel == endParcel) | ||
302 | { | ||
303 | return false; //Subdivision of the same parcel is not allowed | ||
304 | } | ||
305 | |||
306 | //Check the parcel owners: | ||
307 | if (startParcel.parcelData.ownerID != endParcel.parcelData.ownerID) | ||
308 | { | ||
309 | return false; | ||
310 | } | ||
311 | if (startParcel.parcelData.ownerID != attempting_user_id) | ||
312 | { | ||
313 | //TODO: Group editing stuff. Avatar owner support for now | ||
314 | return false; | ||
315 | } | ||
316 | |||
317 | //Same owners! Lets join them | ||
318 | //Merge them to startParcel | ||
319 | parcelList[startParcel.parcelData.localID].setParcelBitmap(Parcel.mergeParcelBitmaps(startParcel.getParcelBitmap(), endParcel.getParcelBitmap())); | ||
320 | performFinalParcelJoin(startParcel, endParcel); | ||
321 | |||
322 | return true; | ||
323 | |||
324 | |||
325 | |||
326 | } | ||
327 | #endregion | ||
328 | |||
329 | #region Parcel Updating | ||
330 | /// <summary> | ||
331 | /// Where we send the ParcelOverlay packet to the client | ||
332 | /// </summary> | ||
333 | /// <param name="remote_client">The object representing the client</param> | ||
334 | public void sendParcelOverlay(IClientAPI remote_client) | ||
335 | { | ||
336 | const int PARCEL_BLOCKS_PER_PACKET = 1024; | ||
337 | int x, y = 0; | ||
338 | byte[] byteArray = new byte[PARCEL_BLOCKS_PER_PACKET]; | ||
339 | int byteArrayCount = 0; | ||
340 | int sequenceID = 0; | ||
341 | ParcelOverlayPacket packet; | ||
342 | |||
343 | for (y = 0; y < 64; y++) | ||
344 | { | ||
345 | for (x = 0; x < 64; x++) | ||
346 | { | ||
347 | byte tempByte = (byte)0; //This represents the byte for the current 4x4 | ||
348 | Parcel currentParcelBlock = getParcel(x * 4, y * 4); | ||
349 | |||
350 | if (currentParcelBlock.parcelData.ownerID == remote_client.AgentId) | ||
351 | { | ||
352 | //Owner Flag | ||
353 | tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_OWNED_BY_REQUESTER); | ||
354 | } | ||
355 | else if (currentParcelBlock.parcelData.salePrice > 0 && (currentParcelBlock.parcelData.authBuyerID == LLUUID.Zero || currentParcelBlock.parcelData.authBuyerID == remote_client.AgentId)) | ||
356 | { | ||
357 | //Sale Flag | ||
358 | tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_IS_FOR_SALE); | ||
359 | } | ||
360 | else if (currentParcelBlock.parcelData.ownerID == LLUUID.Zero) | ||
361 | { | ||
362 | //Public Flag | ||
363 | tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_PUBLIC); | ||
364 | } | ||
365 | else | ||
366 | { | ||
367 | //Other Flag | ||
368 | tempByte = Convert.ToByte(tempByte | PARCEL_TYPE_OWNED_BY_OTHER); | ||
369 | } | ||
370 | |||
371 | |||
372 | //Now for border control | ||
373 | if (x == 0) | ||
374 | { | ||
375 | tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_WEST); | ||
376 | } | ||
377 | else if (getParcel((x - 1) * 4, y * 4) != currentParcelBlock) | ||
378 | { | ||
379 | tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_WEST); | ||
380 | } | ||
381 | |||
382 | if (y == 0) | ||
383 | { | ||
384 | tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_SOUTH); | ||
385 | } | ||
386 | else if (getParcel(x * 4, (y - 1) * 4) != currentParcelBlock) | ||
387 | { | ||
388 | tempByte = Convert.ToByte(tempByte | PARCEL_FLAG_PROPERTY_BORDER_SOUTH); | ||
389 | } | ||
390 | |||
391 | byteArray[byteArrayCount] = tempByte; | ||
392 | byteArrayCount++; | ||
393 | if (byteArrayCount >= PARCEL_BLOCKS_PER_PACKET) | ||
394 | { | ||
395 | byteArrayCount = 0; | ||
396 | packet = new ParcelOverlayPacket(); | ||
397 | packet.ParcelData.Data = byteArray; | ||
398 | packet.ParcelData.SequenceID = sequenceID; | ||
399 | remote_client.OutPacket((Packet)packet); | ||
400 | sequenceID++; | ||
401 | byteArray = new byte[PARCEL_BLOCKS_PER_PACKET]; | ||
402 | } | ||
403 | } | ||
404 | } | ||
405 | |||
406 | packet = new ParcelOverlayPacket(); | ||
407 | packet.ParcelData.Data = byteArray; | ||
408 | packet.ParcelData.SequenceID = sequenceID; //Eh? | ||
409 | remote_client.OutPacket((Packet)packet); | ||
410 | } | ||
411 | |||
412 | public void handleParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, IClientAPI remote_client) | ||
413 | { | ||
414 | //Get the parcels within the bounds | ||
415 | List<Parcel> temp = new List<Parcel>(); | ||
416 | int x, y, i; | ||
417 | int inc_x = end_x - start_x; | ||
418 | int inc_y = end_y - start_y; | ||
419 | for (x = 0; x < inc_x; x++) | ||
420 | { | ||
421 | for (y = 0; y < inc_y; y++) | ||
422 | { | ||
423 | OpenSim.Region.Parcel currentParcel = getParcel(start_x + x, start_y + y); | ||
424 | if (!temp.Contains(currentParcel)) | ||
425 | { | ||
426 | currentParcel.forceUpdateParcelInfo(); | ||
427 | temp.Add(currentParcel); | ||
428 | } | ||
429 | } | ||
430 | } | ||
431 | |||
432 | int requestResult = ParcelManager.PARCEL_RESULT_ONE_PARCEL; | ||
433 | if (temp.Count > 1) | ||
434 | { | ||
435 | requestResult = ParcelManager.PARCEL_RESULT_MULTIPLE_PARCELS; | ||
436 | } | ||
437 | |||
438 | for (i = 0; i < temp.Count; i++) | ||
439 | { | ||
440 | temp[i].sendParcelProperties(sequence_id, snap_selection, requestResult, remote_client); | ||
441 | } | ||
442 | |||
443 | |||
444 | sendParcelOverlay(remote_client); | ||
445 | } | ||
446 | |||
447 | public void handleParcelPropertiesUpdateRequest(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client) | ||
448 | { | ||
449 | if (parcelList.ContainsKey(packet.ParcelData.LocalID)) | ||
450 | { | ||
451 | parcelList[packet.ParcelData.LocalID].updateParcelProperties(packet, remote_client); | ||
452 | } | ||
453 | } | ||
454 | public void handleParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client) | ||
455 | { | ||
456 | subdivide(west, south, east, north, remote_client.AgentId); | ||
457 | } | ||
458 | public void handleParcelJoinRequest(int west, int south, int east, int north, IClientAPI remote_client) | ||
459 | { | ||
460 | join(west, south, east, north, remote_client.AgentId); | ||
461 | |||
462 | } | ||
463 | #endregion | ||
464 | |||
465 | /// <summary> | ||
466 | /// Resets the sim to the default parcel (full sim parcel owned by the default user) | ||
467 | /// </summary> | ||
468 | public void resetSimParcels() | ||
469 | { | ||
470 | //Remove all the parcels in the sim and add a blank, full sim parcel set to public | ||
471 | parcelList.Clear(); | ||
472 | lastParcelLocalID = START_PARCEL_LOCAL_ID - 1; | ||
473 | parcelIDList.Initialize(); | ||
474 | |||
475 | Parcel fullSimParcel = new Parcel(LLUUID.Zero, false, m_world); | ||
476 | |||
477 | fullSimParcel.setParcelBitmap(Parcel.getSquareParcelBitmap(0, 0, 256, 256)); | ||
478 | fullSimParcel.parcelData.parcelName = "Your Sim Parcel"; | ||
479 | fullSimParcel.parcelData.parcelDesc = ""; | ||
480 | |||
481 | fullSimParcel.parcelData.ownerID = m_regInfo.MasterAvatarAssignedUUID; | ||
482 | fullSimParcel.parcelData.salePrice = 1; | ||
483 | fullSimParcel.parcelData.parcelFlags = libsecondlife.Parcel.ParcelFlags.ForSale; | ||
484 | fullSimParcel.parcelData.parcelStatus = libsecondlife.Parcel.ParcelStatus.Leased; | ||
485 | |||
486 | addParcel(fullSimParcel); | ||
487 | |||
488 | } | ||
489 | #endregion | ||
490 | } | ||
491 | #endregion | ||
492 | |||
493 | |||
494 | #region Parcel Class | ||
495 | /// <summary> | ||
496 | /// Keeps track of a specific parcel's information | ||
497 | /// </summary> | ||
498 | public class Parcel | ||
499 | { | ||
500 | #region Member Variables | ||
501 | public ParcelData parcelData = new ParcelData(); | ||
502 | public Scene m_world; | ||
503 | |||
504 | private bool[,] parcelBitmap = new bool[64, 64]; | ||
505 | |||
506 | #endregion | ||
507 | |||
508 | |||
509 | #region Constructors | ||
510 | public Parcel(LLUUID owner_id, bool is_group_owned, Scene world) | ||
511 | { | ||
512 | m_world = world; | ||
513 | parcelData.ownerID = owner_id; | ||
514 | parcelData.isGroupOwned = is_group_owned; | ||
515 | |||
516 | } | ||
517 | #endregion | ||
518 | |||
519 | |||
520 | #region Member Functions | ||
521 | |||
522 | #region General Functions | ||
523 | /// <summary> | ||
524 | /// Checks to see if this parcel contains a point | ||
525 | /// </summary> | ||
526 | /// <param name="x"></param> | ||
527 | /// <param name="y"></param> | ||
528 | /// <returns>Returns true if the parcel contains the specified point</returns> | ||
529 | public bool containsPoint(int x, int y) | ||
530 | { | ||
531 | if (x >= 0 && y >= 0 && x <= 256 && x <= 256) | ||
532 | { | ||
533 | return (parcelBitmap[x / 4, y / 4] == true); | ||
534 | } | ||
535 | else | ||
536 | { | ||
537 | return false; | ||
538 | } | ||
539 | } | ||
540 | |||
541 | public Parcel Copy() | ||
542 | { | ||
543 | Parcel newParcel = new Parcel(this.parcelData.ownerID, this.parcelData.isGroupOwned, m_world); | ||
544 | |||
545 | //Place all new variables here! | ||
546 | newParcel.parcelBitmap = (bool[,])(this.parcelBitmap.Clone()); | ||
547 | newParcel.parcelData = parcelData.Copy(); | ||
548 | |||
549 | return newParcel; | ||
550 | } | ||
551 | |||
552 | #endregion | ||
553 | |||
554 | |||
555 | #region Packet Request Handling | ||
556 | /// <summary> | ||
557 | /// Sends parcel properties as requested | ||
558 | /// </summary> | ||
559 | /// <param name="sequence_id">ID sent by client for them to keep track of</param> | ||
560 | /// <param name="snap_selection">Bool sent by client for them to use</param> | ||
561 | /// <param name="remote_client">Object representing the client</param> | ||
562 | public void sendParcelProperties(int sequence_id, bool snap_selection, int request_result, IClientAPI remote_client) | ||
563 | { | ||
564 | |||
565 | ParcelPropertiesPacket updatePacket = new ParcelPropertiesPacket(); | ||
566 | updatePacket.ParcelData.AABBMax = parcelData.AABBMax; | ||
567 | updatePacket.ParcelData.AABBMin = parcelData.AABBMin; | ||
568 | updatePacket.ParcelData.Area = parcelData.area; | ||
569 | updatePacket.ParcelData.AuctionID = parcelData.auctionID; | ||
570 | updatePacket.ParcelData.AuthBuyerID = parcelData.authBuyerID; //unemplemented | ||
571 | |||
572 | updatePacket.ParcelData.Bitmap = parcelData.parcelBitmapByteArray; | ||
573 | |||
574 | updatePacket.ParcelData.Desc = libsecondlife.Helpers.StringToField(parcelData.parcelDesc); | ||
575 | updatePacket.ParcelData.Category = (byte)parcelData.category; | ||
576 | updatePacket.ParcelData.ClaimDate = parcelData.claimDate; | ||
577 | updatePacket.ParcelData.ClaimPrice = parcelData.claimPrice; | ||
578 | updatePacket.ParcelData.GroupID = parcelData.groupID; | ||
579 | updatePacket.ParcelData.GroupPrims = parcelData.groupPrims; | ||
580 | updatePacket.ParcelData.IsGroupOwned = parcelData.isGroupOwned; | ||
581 | updatePacket.ParcelData.LandingType = (byte)parcelData.landingType; | ||
582 | updatePacket.ParcelData.LocalID = parcelData.localID; | ||
583 | updatePacket.ParcelData.MaxPrims = 1000; //unemplemented | ||
584 | updatePacket.ParcelData.MediaAutoScale = parcelData.mediaAutoScale; | ||
585 | updatePacket.ParcelData.MediaID = parcelData.mediaID; | ||
586 | updatePacket.ParcelData.MediaURL = Helpers.StringToField(parcelData.mediaURL); | ||
587 | updatePacket.ParcelData.MusicURL = Helpers.StringToField(parcelData.musicURL); | ||
588 | updatePacket.ParcelData.Name = Helpers.StringToField(parcelData.parcelName); | ||
589 | updatePacket.ParcelData.OtherCleanTime = 0; //unemplemented | ||
590 | updatePacket.ParcelData.OtherCount = 0; //unemplemented | ||
591 | updatePacket.ParcelData.OtherPrims = 0; //unemplented | ||
592 | updatePacket.ParcelData.OwnerID = parcelData.ownerID; | ||
593 | updatePacket.ParcelData.OwnerPrims = 0; //unemplemented | ||
594 | updatePacket.ParcelData.ParcelFlags = (uint)parcelData.parcelFlags; //unemplemented | ||
595 | updatePacket.ParcelData.ParcelPrimBonus = (float)1.0; //unemplemented | ||
596 | updatePacket.ParcelData.PassHours = parcelData.passHours; | ||
597 | updatePacket.ParcelData.PassPrice = parcelData.passPrice; | ||
598 | updatePacket.ParcelData.PublicCount = 0; //unemplemented | ||
599 | updatePacket.ParcelData.RegionDenyAnonymous = false; //unemplemented | ||
600 | updatePacket.ParcelData.RegionDenyIdentified = false; //unemplemented | ||
601 | updatePacket.ParcelData.RegionDenyTransacted = false; //unemplemented | ||
602 | updatePacket.ParcelData.RegionPushOverride = true; //unemplemented | ||
603 | updatePacket.ParcelData.RentPrice = 0; //?? | ||
604 | updatePacket.ParcelData.RequestResult = request_result; | ||
605 | updatePacket.ParcelData.SalePrice = parcelData.salePrice; //unemplemented | ||
606 | updatePacket.ParcelData.SelectedPrims = 0; //unemeplemented | ||
607 | updatePacket.ParcelData.SelfCount = 0;//unemplemented | ||
608 | updatePacket.ParcelData.SequenceID = sequence_id; | ||
609 | updatePacket.ParcelData.SimWideMaxPrims = 15000; //unemplemented | ||
610 | updatePacket.ParcelData.SimWideTotalPrims = 0; //unemplemented | ||
611 | updatePacket.ParcelData.SnapSelection = snap_selection; | ||
612 | updatePacket.ParcelData.SnapshotID = parcelData.snapshotID; | ||
613 | updatePacket.ParcelData.Status = (byte)parcelData.parcelStatus; | ||
614 | updatePacket.ParcelData.TotalPrims = 0; //unemplemented | ||
615 | updatePacket.ParcelData.UserLocation = parcelData.userLocation; | ||
616 | updatePacket.ParcelData.UserLookAt = parcelData.userLookAt; | ||
617 | remote_client.OutPacket((Packet)updatePacket); | ||
618 | } | ||
619 | |||
620 | public void updateParcelProperties(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client) | ||
621 | { | ||
622 | if (remote_client.AgentId == parcelData.ownerID) | ||
623 | { | ||
624 | //Needs later group support | ||
625 | parcelData.authBuyerID = packet.ParcelData.AuthBuyerID; | ||
626 | parcelData.category = (libsecondlife.Parcel.ParcelCategory)packet.ParcelData.Category; | ||
627 | parcelData.parcelDesc = Helpers.FieldToUTF8String(packet.ParcelData.Desc); | ||
628 | parcelData.groupID = packet.ParcelData.GroupID; | ||
629 | parcelData.landingType = packet.ParcelData.LandingType; | ||
630 | parcelData.mediaAutoScale = packet.ParcelData.MediaAutoScale; | ||
631 | parcelData.mediaID = packet.ParcelData.MediaID; | ||
632 | parcelData.mediaURL = Helpers.FieldToUTF8String(packet.ParcelData.MediaURL); | ||
633 | parcelData.musicURL = Helpers.FieldToUTF8String(packet.ParcelData.MusicURL); | ||
634 | parcelData.parcelName = libsecondlife.Helpers.FieldToUTF8String(packet.ParcelData.Name); | ||
635 | parcelData.parcelFlags = (libsecondlife.Parcel.ParcelFlags)packet.ParcelData.ParcelFlags; | ||
636 | parcelData.passHours = packet.ParcelData.PassHours; | ||
637 | parcelData.passPrice = packet.ParcelData.PassPrice; | ||
638 | parcelData.salePrice = packet.ParcelData.SalePrice; | ||
639 | parcelData.snapshotID = packet.ParcelData.SnapshotID; | ||
640 | parcelData.userLocation = packet.ParcelData.UserLocation; | ||
641 | parcelData.userLookAt = packet.ParcelData.UserLookAt; | ||
642 | |||
643 | List<Avatar> avatars = m_world.RequestAvatarList(); | ||
644 | |||
645 | for (int i = 0; i < avatars.Count; i++) | ||
646 | { | ||
647 | Parcel over = m_world.parcelManager.getParcel((int)Math.Round(avatars[i].Pos.X), (int)Math.Round(avatars[i].Pos.Y)); | ||
648 | if (over == this) | ||
649 | { | ||
650 | sendParcelProperties(0, false, 0, avatars[i].ControllingClient); | ||
651 | } | ||
652 | } | ||
653 | |||
654 | } | ||
655 | } | ||
656 | #endregion | ||
657 | |||
658 | |||
659 | #region Update Functions | ||
660 | /// <summary> | ||
661 | /// Updates the AABBMin and AABBMax values after area/shape modification of parcel | ||
662 | /// </summary> | ||
663 | private void updateAABBAndAreaValues() | ||
664 | { | ||
665 | int min_x = 64; | ||
666 | int min_y = 64; | ||
667 | int max_x = 0; | ||
668 | int max_y = 0; | ||
669 | int tempArea = 0; | ||
670 | int x, y; | ||
671 | for (x = 0; x < 64; x++) | ||
672 | { | ||
673 | for (y = 0; y < 64; y++) | ||
674 | { | ||
675 | if (parcelBitmap[x, y] == true) | ||
676 | { | ||
677 | if (min_x > x) min_x = x; | ||
678 | if (min_y > y) min_y = y; | ||
679 | if (max_x < x) max_x = x; | ||
680 | if (max_y < y) max_y = y; | ||
681 | tempArea += 16; //16sqm parcel | ||
682 | } | ||
683 | } | ||
684 | } | ||
685 | parcelData.AABBMin = new LLVector3((float)(min_x * 4), (float)(min_y * 4), m_world.Terrain[(min_x * 4), (min_y * 4)]); | ||
686 | parcelData.AABBMax = new LLVector3((float)(max_x * 4), (float)(max_y * 4), m_world.Terrain[(max_x * 4), (max_y * 4)]); | ||
687 | parcelData.area = tempArea; | ||
688 | } | ||
689 | |||
690 | public void updateParcelBitmapByteArray() | ||
691 | { | ||
692 | parcelData.parcelBitmapByteArray = convertParcelBitmapToBytes(); | ||
693 | } | ||
694 | |||
695 | /// <summary> | ||
696 | /// Update all settings in parcel such as area, bitmap byte array, etc | ||
697 | /// </summary> | ||
698 | public void forceUpdateParcelInfo() | ||
699 | { | ||
700 | this.updateAABBAndAreaValues(); | ||
701 | this.updateParcelBitmapByteArray(); | ||
702 | } | ||
703 | |||
704 | public void setParcelBitmapFromByteArray() | ||
705 | { | ||
706 | parcelBitmap = convertBytesToParcelBitmap(); | ||
707 | } | ||
708 | #endregion | ||
709 | |||
710 | |||
711 | #region Parcel Bitmap Functions | ||
712 | /// <summary> | ||
713 | /// Sets the parcel's bitmap manually | ||
714 | /// </summary> | ||
715 | /// <param name="bitmap">64x64 block representing where this parcel is on a map</param> | ||
716 | public void setParcelBitmap(bool[,] bitmap) | ||
717 | { | ||
718 | if (bitmap.GetLength(0) != 64 || bitmap.GetLength(1) != 64 || bitmap.Rank != 2) | ||
719 | { | ||
720 | //Throw an exception - The bitmap is not 64x64 | ||
721 | throw new Exception("Error: Invalid Parcel Bitmap"); | ||
722 | } | ||
723 | else | ||
724 | { | ||
725 | //Valid: Lets set it | ||
726 | parcelBitmap = bitmap; | ||
727 | forceUpdateParcelInfo(); | ||
728 | |||
729 | } | ||
730 | } | ||
731 | /// <summary> | ||
732 | /// Gets the parcels bitmap manually | ||
733 | /// </summary> | ||
734 | /// <returns></returns> | ||
735 | public bool[,] getParcelBitmap() | ||
736 | { | ||
737 | return parcelBitmap; | ||
738 | } | ||
739 | /// <summary> | ||
740 | /// Converts the parcel bitmap to a packet friendly byte array | ||
741 | /// </summary> | ||
742 | /// <returns></returns> | ||
743 | private byte[] convertParcelBitmapToBytes() | ||
744 | { | ||
745 | byte[] tempConvertArr = new byte[512]; | ||
746 | byte tempByte = 0; | ||
747 | int x, y, i, byteNum = 0; | ||
748 | i = 0; | ||
749 | for (y = 0; y < 64; y++) | ||
750 | { | ||
751 | for (x = 0; x < 64; x++) | ||
752 | { | ||
753 | tempByte = Convert.ToByte(tempByte | Convert.ToByte(parcelBitmap[x, y]) << (i++ % 8)); | ||
754 | if (i % 8 == 0) | ||
755 | { | ||
756 | tempConvertArr[byteNum] = tempByte; | ||
757 | tempByte = (byte)0; | ||
758 | i = 0; | ||
759 | byteNum++; | ||
760 | } | ||
761 | } | ||
762 | } | ||
763 | return tempConvertArr; | ||
764 | } | ||
765 | |||
766 | private bool[,] convertBytesToParcelBitmap() | ||
767 | { | ||
768 | bool[,] tempConvertMap = new bool[64, 64]; | ||
769 | tempConvertMap.Initialize(); | ||
770 | byte tempByte = 0; | ||
771 | int x = 0, y = 0, i = 0, bitNum = 0; | ||
772 | for (i = 0; i < 512; i++) | ||
773 | { | ||
774 | tempByte = parcelData.parcelBitmapByteArray[i]; | ||
775 | for (bitNum = 0; bitNum < 8; bitNum++) | ||
776 | { | ||
777 | bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte)1); | ||
778 | tempConvertMap[x, y] = bit; | ||
779 | x++; | ||
780 | if (x > 63) | ||
781 | { | ||
782 | x = 0; | ||
783 | y++; | ||
784 | } | ||
785 | |||
786 | } | ||
787 | |||
788 | } | ||
789 | return tempConvertMap; | ||
790 | } | ||
791 | /// <summary> | ||
792 | /// Full sim parcel creation | ||
793 | /// </summary> | ||
794 | /// <returns></returns> | ||
795 | public static bool[,] basicFullRegionParcelBitmap() | ||
796 | { | ||
797 | return getSquareParcelBitmap(0, 0, 256, 256); | ||
798 | } | ||
799 | |||
800 | /// <summary> | ||
801 | /// Used to modify the bitmap between the x and y points. Points use 64 scale | ||
802 | /// </summary> | ||
803 | /// <param name="start_x"></param> | ||
804 | /// <param name="start_y"></param> | ||
805 | /// <param name="end_x"></param> | ||
806 | /// <param name="end_y"></param> | ||
807 | /// <returns></returns> | ||
808 | public static bool[,] getSquareParcelBitmap(int start_x, int start_y, int end_x, int end_y) | ||
809 | { | ||
810 | |||
811 | bool[,] tempBitmap = new bool[64, 64]; | ||
812 | tempBitmap.Initialize(); | ||
813 | |||
814 | tempBitmap = modifyParcelBitmapSquare(tempBitmap, start_x, start_y, end_x, end_y, true); | ||
815 | return tempBitmap; | ||
816 | } | ||
817 | |||
818 | /// <summary> | ||
819 | /// Change a parcel's bitmap at within a square and set those points to a specific value | ||
820 | /// </summary> | ||
821 | /// <param name="parcel_bitmap"></param> | ||
822 | /// <param name="start_x"></param> | ||
823 | /// <param name="start_y"></param> | ||
824 | /// <param name="end_x"></param> | ||
825 | /// <param name="end_y"></param> | ||
826 | /// <param name="set_value"></param> | ||
827 | /// <returns></returns> | ||
828 | public static bool[,] modifyParcelBitmapSquare(bool[,] parcel_bitmap, int start_x, int start_y, int end_x, int end_y, bool set_value) | ||
829 | { | ||
830 | if (parcel_bitmap.GetLength(0) != 64 || parcel_bitmap.GetLength(1) != 64 || parcel_bitmap.Rank != 2) | ||
831 | { | ||
832 | //Throw an exception - The bitmap is not 64x64 | ||
833 | throw new Exception("Error: Invalid Parcel Bitmap in modifyParcelBitmapSquare()"); | ||
834 | } | ||
835 | |||
836 | int x, y; | ||
837 | for (y = 0; y < 64; y++) | ||
838 | { | ||
839 | for (x = 0; x < 64; x++) | ||
840 | { | ||
841 | if (x >= start_x / 4 && x < end_x / 4 | ||
842 | && y >= start_y / 4 && y < end_y / 4) | ||
843 | { | ||
844 | parcel_bitmap[x, y] = set_value; | ||
845 | } | ||
846 | } | ||
847 | } | ||
848 | return parcel_bitmap; | ||
849 | } | ||
850 | /// <summary> | ||
851 | /// Join the true values of 2 bitmaps together | ||
852 | /// </summary> | ||
853 | /// <param name="bitmap_base"></param> | ||
854 | /// <param name="bitmap_add"></param> | ||
855 | /// <returns></returns> | ||
856 | public static bool[,] mergeParcelBitmaps(bool[,] bitmap_base, bool[,] bitmap_add) | ||
857 | { | ||
858 | if (bitmap_base.GetLength(0) != 64 || bitmap_base.GetLength(1) != 64 || bitmap_base.Rank != 2) | ||
859 | { | ||
860 | //Throw an exception - The bitmap is not 64x64 | ||
861 | throw new Exception("Error: Invalid Parcel Bitmap - Bitmap_base in mergeParcelBitmaps"); | ||
862 | } | ||
863 | if (bitmap_add.GetLength(0) != 64 || bitmap_add.GetLength(1) != 64 || bitmap_add.Rank != 2) | ||
864 | { | ||
865 | //Throw an exception - The bitmap is not 64x64 | ||
866 | throw new Exception("Error: Invalid Parcel Bitmap - Bitmap_add in mergeParcelBitmaps"); | ||
867 | |||
868 | } | ||
869 | |||
870 | int x, y; | ||
871 | for (y = 0; y < 64; y++) | ||
872 | { | ||
873 | for (x = 0; x < 64; x++) | ||
874 | { | ||
875 | if (bitmap_add[x, y]) | ||
876 | { | ||
877 | bitmap_base[x, y] = true; | ||
878 | } | ||
879 | } | ||
880 | } | ||
881 | return bitmap_base; | ||
882 | } | ||
883 | #endregion | ||
884 | |||
885 | #endregion | ||
886 | |||
887 | |||
888 | } | ||
889 | #endregion | ||
890 | |||
891 | |||
892 | } | ||
diff --git a/OpenSim/Region/Simulation/RegionManager.cs b/OpenSim/Region/Simulation/RegionManager.cs new file mode 100644 index 0000000..a317f0f --- /dev/null +++ b/OpenSim/Region/Simulation/RegionManager.cs | |||
@@ -0,0 +1,30 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenGrid.Framework.Communications; | ||
5 | using OpenSim.Framework; | ||
6 | using OpenSim.Framework.Types; | ||
7 | using OpenSim.Servers; | ||
8 | |||
9 | namespace OpenSim.Region | ||
10 | { | ||
11 | public class RegionManager //needs renaming , but first we need to rename the namespace | ||
12 | { | ||
13 | protected AuthenticateSessionsBase authenticateHandler; | ||
14 | protected RegionCommsListener regionCommsHost; | ||
15 | protected CommunicationsManager commsManager; | ||
16 | protected List<Caps> capsHandlers = new List<Caps>(); | ||
17 | protected BaseHttpServer httpListener; | ||
18 | |||
19 | protected Scenes.Scene m_Scene; | ||
20 | |||
21 | public ParcelManager parcelManager; | ||
22 | public EstateManager estateManager; | ||
23 | |||
24 | public RegionManager() | ||
25 | { | ||
26 | |||
27 | } | ||
28 | |||
29 | } | ||
30 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/Entity.cs b/OpenSim/Region/Simulation/Scenes/Entity.cs new file mode 100644 index 0000000..f8754f5 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/Entity.cs | |||
@@ -0,0 +1,194 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using Axiom.MathLib; | ||
32 | using OpenSim.Physics.Manager; | ||
33 | using libsecondlife; | ||
34 | using OpenSim.Region.Scripting; | ||
35 | |||
36 | namespace OpenSim.Region.Scenes | ||
37 | { | ||
38 | public abstract class Entity : IScriptReadonlyEntity | ||
39 | { | ||
40 | public libsecondlife.LLUUID uuid; | ||
41 | public Quaternion rotation; | ||
42 | protected List<Entity> children; | ||
43 | |||
44 | protected PhysicsActor _physActor; | ||
45 | protected Scene m_world; | ||
46 | protected string m_name; | ||
47 | |||
48 | /// <summary> | ||
49 | /// | ||
50 | /// </summary> | ||
51 | public virtual string Name | ||
52 | { | ||
53 | get { return m_name; } | ||
54 | } | ||
55 | |||
56 | protected LLVector3 m_pos; | ||
57 | /// <summary> | ||
58 | /// | ||
59 | /// </summary> | ||
60 | public virtual LLVector3 Pos | ||
61 | { | ||
62 | get | ||
63 | { | ||
64 | if (this._physActor != null) | ||
65 | { | ||
66 | m_pos.X = _physActor.Position.X; | ||
67 | m_pos.Y = _physActor.Position.Y; | ||
68 | m_pos.Z = _physActor.Position.Z; | ||
69 | } | ||
70 | |||
71 | return m_pos; | ||
72 | } | ||
73 | set | ||
74 | { | ||
75 | if (this._physActor != null) | ||
76 | { | ||
77 | try | ||
78 | { | ||
79 | lock (this.m_world.SyncRoot) | ||
80 | { | ||
81 | |||
82 | this._physActor.Position = new PhysicsVector(value.X, value.Y, value.Z); | ||
83 | } | ||
84 | } | ||
85 | catch (Exception e) | ||
86 | { | ||
87 | Console.WriteLine(e.Message); | ||
88 | } | ||
89 | } | ||
90 | |||
91 | m_pos = value; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | public LLVector3 velocity; | ||
96 | |||
97 | /// <summary> | ||
98 | /// | ||
99 | /// </summary> | ||
100 | public virtual LLVector3 Velocity | ||
101 | { | ||
102 | get | ||
103 | { | ||
104 | if (this._physActor != null) | ||
105 | { | ||
106 | velocity.X = _physActor.Velocity.X; | ||
107 | velocity.Y = _physActor.Velocity.Y; | ||
108 | velocity.Z = _physActor.Velocity.Z; | ||
109 | } | ||
110 | |||
111 | return velocity; | ||
112 | } | ||
113 | set | ||
114 | { | ||
115 | if (this._physActor != null) | ||
116 | { | ||
117 | try | ||
118 | { | ||
119 | lock (this.m_world.SyncRoot) | ||
120 | { | ||
121 | |||
122 | this._physActor.Velocity = new PhysicsVector(value.X, value.Y, value.Z); | ||
123 | } | ||
124 | } | ||
125 | catch (Exception e) | ||
126 | { | ||
127 | Console.WriteLine(e.Message); | ||
128 | } | ||
129 | } | ||
130 | |||
131 | velocity = value; | ||
132 | } | ||
133 | } | ||
134 | |||
135 | protected uint m_localId; | ||
136 | |||
137 | public uint LocalId | ||
138 | { | ||
139 | get { return m_localId; } | ||
140 | } | ||
141 | |||
142 | /// <summary> | ||
143 | /// Creates a new Entity (should not occur on it's own) | ||
144 | /// </summary> | ||
145 | public Entity() | ||
146 | { | ||
147 | uuid = new libsecondlife.LLUUID(); | ||
148 | |||
149 | m_pos = new LLVector3(); | ||
150 | velocity = new LLVector3(); | ||
151 | rotation = new Quaternion(); | ||
152 | m_name = "(basic entity)"; | ||
153 | children = new List<Entity>(); | ||
154 | } | ||
155 | |||
156 | /// <summary> | ||
157 | /// | ||
158 | /// </summary> | ||
159 | public virtual void updateMovement() | ||
160 | { | ||
161 | foreach (Entity child in children) | ||
162 | { | ||
163 | child.updateMovement(); | ||
164 | } | ||
165 | } | ||
166 | |||
167 | /// <summary> | ||
168 | /// Performs any updates that need to be done at each frame. This function is overridable from it's children. | ||
169 | /// </summary> | ||
170 | public virtual void update() { | ||
171 | // Do any per-frame updates needed that are applicable to every type of entity | ||
172 | foreach (Entity child in children) | ||
173 | { | ||
174 | child.update(); | ||
175 | } | ||
176 | } | ||
177 | |||
178 | /// <summary> | ||
179 | /// Called at a set interval to inform entities that they should back themsleves up to the DB | ||
180 | /// </summary> | ||
181 | public virtual void BackUp() | ||
182 | { | ||
183 | |||
184 | } | ||
185 | |||
186 | /// <summary> | ||
187 | /// Infoms the entity that the land (heightmap) has changed | ||
188 | /// </summary> | ||
189 | public virtual void LandRenegerated() | ||
190 | { | ||
191 | |||
192 | } | ||
193 | } | ||
194 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/IScenePresenceBody.cs b/OpenSim/Region/Simulation/Scenes/IScenePresenceBody.cs new file mode 100644 index 0000000..65077e6 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/IScenePresenceBody.cs | |||
@@ -0,0 +1,19 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using libsecondlife; | ||
5 | using libsecondlife.Packets; | ||
6 | using OpenSim.Physics.Manager; | ||
7 | using OpenSim.Framework.Interfaces; | ||
8 | using OpenSim.Framework.Types; | ||
9 | |||
10 | namespace OpenSim.Region.Scenes | ||
11 | { | ||
12 | public interface IScenePresenceBody | ||
13 | { | ||
14 | void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation); | ||
15 | void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam); | ||
16 | void SendOurAppearance(IClientAPI OurClient); | ||
17 | void SendAppearanceToOtherAgent(ScenePresence avatarInfo); | ||
18 | } | ||
19 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/Primitive.cs b/OpenSim/Region/Simulation/Scenes/Primitive.cs new file mode 100644 index 0000000..e04c711 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/Primitive.cs | |||
@@ -0,0 +1,582 @@ | |||
1 | |||
2 | /* | ||
3 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
4 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * * Redistributions of source code must retain the above copyright | ||
9 | * notice, this list of conditions and the following disclaimer. | ||
10 | * * Redistributions in binary form must reproduce the above copyright | ||
11 | * notice, this list of conditions and the following disclaimer in the | ||
12 | * documentation and/or other materials provided with the distribution. | ||
13 | * * Neither the name of the OpenSim Project nor the | ||
14 | * names of its contributors may be used to endorse or promote products | ||
15 | * derived from this software without specific prior written permission. | ||
16 | * | ||
17 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
18 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
19 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
20 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
21 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
22 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
23 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
24 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
26 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
27 | * | ||
28 | */ | ||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Text; | ||
32 | using libsecondlife; | ||
33 | using libsecondlife.Packets; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Physics.Manager; | ||
36 | using OpenSim.Framework.Types; | ||
37 | using OpenSim.Framework.Inventory; | ||
38 | |||
39 | namespace OpenSim.Region.Scenes | ||
40 | { | ||
41 | public class Primitive : Entity | ||
42 | { | ||
43 | internal PrimData primData; | ||
44 | private LLVector3 positionLastFrame = new LLVector3(0, 0, 0); | ||
45 | // private Dictionary<uint, IClientAPI> m_clientThreads; | ||
46 | private ulong m_regionHandle; | ||
47 | private const uint FULL_MASK_PERMISSIONS = 2147483647; | ||
48 | private bool physicsEnabled = false; | ||
49 | private byte updateFlag = 0; | ||
50 | private uint flags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456 + 128; | ||
51 | |||
52 | private Dictionary<LLUUID, InventoryItem> inventoryItems; | ||
53 | |||
54 | #region Properties | ||
55 | |||
56 | public LLVector3 Scale | ||
57 | { | ||
58 | set | ||
59 | { | ||
60 | this.primData.Scale = value; | ||
61 | //this.dirtyFlag = true; | ||
62 | } | ||
63 | get | ||
64 | { | ||
65 | return this.primData.Scale; | ||
66 | } | ||
67 | } | ||
68 | |||
69 | public PhysicsActor PhysActor | ||
70 | { | ||
71 | set | ||
72 | { | ||
73 | this._physActor = value; | ||
74 | } | ||
75 | } | ||
76 | |||
77 | public override LLVector3 Pos | ||
78 | { | ||
79 | get | ||
80 | { | ||
81 | return base.Pos; | ||
82 | } | ||
83 | set | ||
84 | { | ||
85 | base.Pos = value; | ||
86 | } | ||
87 | } | ||
88 | #endregion | ||
89 | |||
90 | /// <summary> | ||
91 | /// | ||
92 | /// </summary> | ||
93 | /// <param name="clientThreads"></param> | ||
94 | /// <param name="regionHandle"></param> | ||
95 | /// <param name="world"></param> | ||
96 | public Primitive( ulong regionHandle, Scene world) | ||
97 | { | ||
98 | // m_clientThreads = clientThreads; | ||
99 | m_regionHandle = regionHandle; | ||
100 | m_world = world; | ||
101 | inventoryItems = new Dictionary<LLUUID, InventoryItem>(); | ||
102 | } | ||
103 | |||
104 | /// <summary> | ||
105 | /// | ||
106 | /// </summary> | ||
107 | /// <param name="regionHandle"></param> | ||
108 | /// <param name="world"></param> | ||
109 | /// <param name="addPacket"></param> | ||
110 | /// <param name="ownerID"></param> | ||
111 | /// <param name="localID"></param> | ||
112 | public Primitive(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID) | ||
113 | { | ||
114 | // m_clientThreads = clientThreads; | ||
115 | m_regionHandle = regionHandle; | ||
116 | m_world = world; | ||
117 | inventoryItems = new Dictionary<LLUUID, InventoryItem>(); | ||
118 | this.CreateFromPacket(addPacket, ownerID, localID); | ||
119 | } | ||
120 | |||
121 | /// <summary> | ||
122 | /// | ||
123 | /// </summary> | ||
124 | /// <param name="clientThreads"></param> | ||
125 | /// <param name="regionHandle"></param> | ||
126 | /// <param name="world"></param> | ||
127 | /// <param name="owner"></param> | ||
128 | /// <param name="fullID"></param> | ||
129 | /// <param name="localID"></param> | ||
130 | public Primitive( ulong regionHandle, Scene world, LLUUID owner, LLUUID fullID, uint localID) | ||
131 | { | ||
132 | // m_clientThreads = clientThreads; | ||
133 | m_regionHandle = regionHandle; | ||
134 | m_world = world; | ||
135 | inventoryItems = new Dictionary<LLUUID, InventoryItem>(); | ||
136 | this.primData = new PrimData(); | ||
137 | this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
138 | this.primData.OwnerID = owner; | ||
139 | this.primData.FullID = this.uuid = fullID; | ||
140 | this.primData.LocalID = m_localId = localID; | ||
141 | } | ||
142 | |||
143 | /// <summary> | ||
144 | /// Constructor to create a default cube | ||
145 | /// </summary> | ||
146 | /// <param name="clientThreads"></param> | ||
147 | /// <param name="regionHandle"></param> | ||
148 | /// <param name="world"></param> | ||
149 | /// <param name="owner"></param> | ||
150 | /// <param name="localID"></param> | ||
151 | /// <param name="position"></param> | ||
152 | public Primitive( ulong regionHandle, Scene world, LLUUID owner, uint localID, LLVector3 position) | ||
153 | { | ||
154 | //m_clientThreads = clientThreads; | ||
155 | m_regionHandle = regionHandle; | ||
156 | m_world = world; | ||
157 | inventoryItems = new Dictionary<LLUUID, InventoryItem>(); | ||
158 | this.primData = PrimData.DefaultCube(); | ||
159 | this.primData.OwnerID = owner; | ||
160 | this.primData.LocalID = m_localId = localID; | ||
161 | this.Pos = this.primData.Position = position; | ||
162 | |||
163 | this.updateFlag = 1; | ||
164 | } | ||
165 | |||
166 | /// <summary> | ||
167 | /// | ||
168 | /// </summary> | ||
169 | /// <returns></returns> | ||
170 | public byte[] GetByteArray() | ||
171 | { | ||
172 | byte[] result = null; | ||
173 | List<byte[]> dataArrays = new List<byte[]>(); | ||
174 | dataArrays.Add(primData.ToBytes()); | ||
175 | foreach (Entity child in children) | ||
176 | { | ||
177 | if (child is OpenSim.Region.Scenes.Primitive) | ||
178 | { | ||
179 | dataArrays.Add(((OpenSim.Region.Scenes.Primitive)child).GetByteArray()); | ||
180 | } | ||
181 | } | ||
182 | byte[] primstart = Helpers.StringToField("<Prim>"); | ||
183 | byte[] primend = Helpers.StringToField("</Prim>"); | ||
184 | int totalLength = primstart.Length + primend.Length; | ||
185 | for (int i = 0; i < dataArrays.Count; i++) | ||
186 | { | ||
187 | totalLength += dataArrays[i].Length; | ||
188 | } | ||
189 | |||
190 | result = new byte[totalLength]; | ||
191 | int arraypos = 0; | ||
192 | Array.Copy(primstart, 0, result, 0, primstart.Length); | ||
193 | arraypos += primstart.Length; | ||
194 | for (int i = 0; i < dataArrays.Count; i++) | ||
195 | { | ||
196 | Array.Copy(dataArrays[i], 0, result, arraypos, dataArrays[i].Length); | ||
197 | arraypos += dataArrays[i].Length; | ||
198 | } | ||
199 | Array.Copy(primend, 0, result, arraypos, primend.Length); | ||
200 | |||
201 | return result; | ||
202 | } | ||
203 | |||
204 | #region Overridden Methods | ||
205 | |||
206 | /// <summary> | ||
207 | /// | ||
208 | /// </summary> | ||
209 | public override void update() | ||
210 | { | ||
211 | if (this.updateFlag == 1) // is a new prim just been created/reloaded | ||
212 | { | ||
213 | this.SendFullUpdateToAllClients(); | ||
214 | this.updateFlag = 0; | ||
215 | } | ||
216 | if (this.updateFlag == 2) //some change has been made so update the clients | ||
217 | { | ||
218 | this.SendTerseUpdateToALLClients(); | ||
219 | this.updateFlag = 0; | ||
220 | } | ||
221 | } | ||
222 | |||
223 | /// <summary> | ||
224 | /// | ||
225 | /// </summary> | ||
226 | public override void BackUp() | ||
227 | { | ||
228 | |||
229 | } | ||
230 | |||
231 | #endregion | ||
232 | |||
233 | #region Packet handlers | ||
234 | |||
235 | /// <summary> | ||
236 | /// | ||
237 | /// </summary> | ||
238 | /// <param name="pos"></param> | ||
239 | public void UpdatePosition(LLVector3 pos) | ||
240 | { | ||
241 | this.Pos = new LLVector3(pos.X, pos.Y, pos.Z); | ||
242 | this.updateFlag = 2; | ||
243 | } | ||
244 | |||
245 | /// <summary> | ||
246 | /// | ||
247 | /// </summary> | ||
248 | /// <param name="addPacket"></param> | ||
249 | public void UpdateShape(ObjectShapePacket.ObjectDataBlock updatePacket) | ||
250 | { | ||
251 | this.primData.PathBegin = updatePacket.PathBegin; | ||
252 | this.primData.PathEnd = updatePacket.PathEnd; | ||
253 | this.primData.PathScaleX = updatePacket.PathScaleX; | ||
254 | this.primData.PathScaleY = updatePacket.PathScaleY; | ||
255 | this.primData.PathShearX = updatePacket.PathShearX; | ||
256 | this.primData.PathShearY = updatePacket.PathShearY; | ||
257 | this.primData.PathSkew = updatePacket.PathSkew; | ||
258 | this.primData.ProfileBegin = updatePacket.ProfileBegin; | ||
259 | this.primData.ProfileEnd = updatePacket.ProfileEnd; | ||
260 | this.primData.PathCurve = updatePacket.PathCurve; | ||
261 | this.primData.ProfileCurve = updatePacket.ProfileCurve; | ||
262 | this.primData.ProfileHollow = updatePacket.ProfileHollow; | ||
263 | this.primData.PathRadiusOffset = updatePacket.PathRadiusOffset; | ||
264 | this.primData.PathRevolutions = updatePacket.PathRevolutions; | ||
265 | this.primData.PathTaperX = updatePacket.PathTaperX; | ||
266 | this.primData.PathTaperY = updatePacket.PathTaperY; | ||
267 | this.primData.PathTwist = updatePacket.PathTwist; | ||
268 | this.primData.PathTwistBegin = updatePacket.PathTwistBegin; | ||
269 | } | ||
270 | |||
271 | /// <summary> | ||
272 | /// | ||
273 | /// </summary> | ||
274 | /// <param name="tex"></param> | ||
275 | public void UpdateTexture(byte[] tex) | ||
276 | { | ||
277 | this.primData.TextureEntry = tex; | ||
278 | } | ||
279 | |||
280 | /// <summary> | ||
281 | /// | ||
282 | /// </summary> | ||
283 | /// <param name="pack"></param> | ||
284 | public void UpdateObjectFlags(ObjectFlagUpdatePacket pack) | ||
285 | { | ||
286 | |||
287 | } | ||
288 | |||
289 | /// <summary> | ||
290 | /// | ||
291 | /// </summary> | ||
292 | /// <param name="prim"></param> | ||
293 | public void AssignToParent(Primitive prim) | ||
294 | { | ||
295 | |||
296 | } | ||
297 | |||
298 | #endregion | ||
299 | |||
300 | # region Inventory Methods | ||
301 | /// <summary> | ||
302 | /// | ||
303 | /// </summary> | ||
304 | /// <param name="item"></param> | ||
305 | /// <returns></returns> | ||
306 | public bool AddToInventory(InventoryItem item) | ||
307 | { | ||
308 | return false; | ||
309 | } | ||
310 | |||
311 | /// <summary> | ||
312 | /// | ||
313 | /// </summary> | ||
314 | /// <param name="itemID"></param> | ||
315 | /// <returns></returns> | ||
316 | public InventoryItem RemoveFromInventory(LLUUID itemID) | ||
317 | { | ||
318 | return null; | ||
319 | } | ||
320 | |||
321 | /// <summary> | ||
322 | /// | ||
323 | /// </summary> | ||
324 | /// <param name="simClient"></param> | ||
325 | /// <param name="packet"></param> | ||
326 | public void RequestInventoryInfo(IClientAPI simClient, RequestTaskInventoryPacket packet) | ||
327 | { | ||
328 | |||
329 | } | ||
330 | |||
331 | /// <summary> | ||
332 | /// | ||
333 | /// </summary> | ||
334 | /// <param name="simClient"></param> | ||
335 | /// <param name="xferID"></param> | ||
336 | public void RequestXferInventory(IClientAPI simClient, ulong xferID) | ||
337 | { | ||
338 | //will only currently work if the total size of the inventory data array is under about 1000 bytes | ||
339 | SendXferPacketPacket send = new SendXferPacketPacket(); | ||
340 | |||
341 | send.XferID.ID = xferID; | ||
342 | send.XferID.Packet = 1 + 2147483648; | ||
343 | send.DataPacket.Data = this.ConvertInventoryToBytes(); | ||
344 | |||
345 | simClient.OutPacket(send); | ||
346 | } | ||
347 | |||
348 | /// <summary> | ||
349 | /// | ||
350 | /// </summary> | ||
351 | /// <returns></returns> | ||
352 | public byte[] ConvertInventoryToBytes() | ||
353 | { | ||
354 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
355 | byte[] result = new byte[0]; | ||
356 | List<byte[]> inventoryData = new List<byte[]>(); | ||
357 | int totallength = 0; | ||
358 | foreach (InventoryItem invItem in inventoryItems.Values) | ||
359 | { | ||
360 | byte[] data = enc.GetBytes(invItem.ExportString()); | ||
361 | inventoryData.Add(data); | ||
362 | totallength += data.Length; | ||
363 | } | ||
364 | //TODO: copy arrays into the single result array | ||
365 | |||
366 | return result; | ||
367 | } | ||
368 | |||
369 | /// <summary> | ||
370 | /// | ||
371 | /// </summary> | ||
372 | /// <param name="data"></param> | ||
373 | public void CreateInventoryFromBytes(byte[] data) | ||
374 | { | ||
375 | |||
376 | } | ||
377 | |||
378 | #endregion | ||
379 | |||
380 | #region Update viewers Methods | ||
381 | |||
382 | /// <summary> | ||
383 | /// | ||
384 | /// </summary> | ||
385 | /// <param name="remoteClient"></param> | ||
386 | public void SendFullUpdateForAllChildren(IClientAPI remoteClient) | ||
387 | { | ||
388 | this.SendFullUpdateToClient(remoteClient); | ||
389 | for (int i = 0; i < this.children.Count; i++) | ||
390 | { | ||
391 | if (this.children[i] is Primitive) | ||
392 | { | ||
393 | ((Primitive)this.children[i]).SendFullUpdateForAllChildren(remoteClient); | ||
394 | } | ||
395 | } | ||
396 | } | ||
397 | |||
398 | /// <summary> | ||
399 | /// | ||
400 | /// </summary> | ||
401 | /// <param name="remoteClient"></param> | ||
402 | public void SendFullUpdateToClient(IClientAPI remoteClient) | ||
403 | { | ||
404 | LLVector3 lPos; | ||
405 | if (this._physActor != null && this.physicsEnabled) | ||
406 | { | ||
407 | PhysicsVector pPos = this._physActor.Position; | ||
408 | lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z); | ||
409 | } | ||
410 | else | ||
411 | { | ||
412 | lPos = this.Pos; | ||
413 | } | ||
414 | |||
415 | remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.primData, lPos, new LLUUID("00000000-0000-0000-9999-000000000005"), this.flags); | ||
416 | } | ||
417 | |||
418 | /// <summary> | ||
419 | /// | ||
420 | /// </summary> | ||
421 | public void SendFullUpdateToAllClients() | ||
422 | { | ||
423 | List<ScenePresence> avatars = this.m_world.RequestAvatarList(); | ||
424 | for (int i = 0; i < avatars.Count; i++) | ||
425 | { | ||
426 | this.SendFullUpdateToClient(avatars[i].ControllingClient); | ||
427 | } | ||
428 | } | ||
429 | |||
430 | /// <summary> | ||
431 | /// | ||
432 | /// </summary> | ||
433 | /// <param name="RemoteClient"></param> | ||
434 | public void SendTerseUpdateToClient(IClientAPI RemoteClient) | ||
435 | { | ||
436 | LLVector3 lPos; | ||
437 | Axiom.MathLib.Quaternion lRot; | ||
438 | if (this._physActor != null && this.physicsEnabled) //is this needed ? doesn't the property fields do this for us? | ||
439 | { | ||
440 | PhysicsVector pPos = this._physActor.Position; | ||
441 | lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z); | ||
442 | lRot = this._physActor.Orientation; | ||
443 | } | ||
444 | else | ||
445 | { | ||
446 | lPos = this.Pos; | ||
447 | lRot = this.rotation; | ||
448 | } | ||
449 | LLQuaternion mRot = new LLQuaternion(lRot.x, lRot.y, lRot.z, lRot.w); | ||
450 | RemoteClient.SendPrimTerseUpdate(this.m_regionHandle, 64096, this.LocalId, lPos, mRot); | ||
451 | } | ||
452 | |||
453 | /// <summary> | ||
454 | /// | ||
455 | /// </summary> | ||
456 | public void SendTerseUpdateToALLClients() | ||
457 | { | ||
458 | List<ScenePresence> avatars = this.m_world.RequestAvatarList(); | ||
459 | for (int i = 0; i < avatars.Count; i++) | ||
460 | { | ||
461 | this.SendTerseUpdateToClient(avatars[i].ControllingClient); | ||
462 | } | ||
463 | } | ||
464 | |||
465 | #endregion | ||
466 | |||
467 | #region Create Methods | ||
468 | |||
469 | /// <summary> | ||
470 | /// | ||
471 | /// </summary> | ||
472 | /// <param name="addPacket"></param> | ||
473 | /// <param name="ownerID"></param> | ||
474 | /// <param name="localID"></param> | ||
475 | public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID ownerID, uint localID) | ||
476 | { | ||
477 | PrimData PData = new PrimData(); | ||
478 | this.primData = PData; | ||
479 | this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | ||
480 | |||
481 | PData.OwnerID = ownerID; | ||
482 | PData.PCode = addPacket.ObjectData.PCode; | ||
483 | PData.PathBegin = addPacket.ObjectData.PathBegin; | ||
484 | PData.PathEnd = addPacket.ObjectData.PathEnd; | ||
485 | PData.PathScaleX = addPacket.ObjectData.PathScaleX; | ||
486 | PData.PathScaleY = addPacket.ObjectData.PathScaleY; | ||
487 | PData.PathShearX = addPacket.ObjectData.PathShearX; | ||
488 | PData.PathShearY = addPacket.ObjectData.PathShearY; | ||
489 | PData.PathSkew = addPacket.ObjectData.PathSkew; | ||
490 | PData.ProfileBegin = addPacket.ObjectData.ProfileBegin; | ||
491 | PData.ProfileEnd = addPacket.ObjectData.ProfileEnd; | ||
492 | PData.Scale = addPacket.ObjectData.Scale; | ||
493 | PData.PathCurve = addPacket.ObjectData.PathCurve; | ||
494 | PData.ProfileCurve = addPacket.ObjectData.ProfileCurve; | ||
495 | PData.ParentID = 0; | ||
496 | PData.ProfileHollow = addPacket.ObjectData.ProfileHollow; | ||
497 | PData.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset; | ||
498 | PData.PathRevolutions = addPacket.ObjectData.PathRevolutions; | ||
499 | PData.PathTaperX = addPacket.ObjectData.PathTaperX; | ||
500 | PData.PathTaperY = addPacket.ObjectData.PathTaperY; | ||
501 | PData.PathTwist = addPacket.ObjectData.PathTwist; | ||
502 | PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin; | ||
503 | LLVector3 pos1 = addPacket.ObjectData.RayEnd; | ||
504 | this.primData.FullID = this.uuid = LLUUID.Random(); | ||
505 | this.primData.LocalID = m_localId = (uint)(localID); | ||
506 | this.primData.Position = this.Pos = pos1; | ||
507 | |||
508 | this.updateFlag = 1; | ||
509 | } | ||
510 | |||
511 | /// <summary> | ||
512 | /// | ||
513 | /// </summary> | ||
514 | /// <param name="data"></param> | ||
515 | public void CreateFromBytes(byte[] data) | ||
516 | { | ||
517 | |||
518 | } | ||
519 | |||
520 | /// <summary> | ||
521 | /// | ||
522 | /// </summary> | ||
523 | /// <param name="primData"></param> | ||
524 | public void CreateFromPrimData(PrimData primData) | ||
525 | { | ||
526 | this.CreateFromPrimData(primData, primData.Position, primData.LocalID, false); | ||
527 | } | ||
528 | |||
529 | /// <summary> | ||
530 | /// | ||
531 | /// </summary> | ||
532 | /// <param name="primData"></param> | ||
533 | /// <param name="posi"></param> | ||
534 | /// <param name="localID"></param> | ||
535 | /// <param name="newprim"></param> | ||
536 | public void CreateFromPrimData(PrimData primData, LLVector3 posi, uint localID, bool newprim) | ||
537 | { | ||
538 | |||
539 | } | ||
540 | |||
541 | public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) | ||
542 | { | ||
543 | // Console.WriteLine("moving prim to new location " + pos.X + " , " + pos.Y + " , " + pos.Z); | ||
544 | this.Pos = pos; | ||
545 | this.SendTerseUpdateToALLClients(); | ||
546 | } | ||
547 | |||
548 | public void GetProperites(IClientAPI client) | ||
549 | { | ||
550 | //needs changing | ||
551 | ObjectPropertiesPacket proper = new ObjectPropertiesPacket(); | ||
552 | proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1]; | ||
553 | proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock(); | ||
554 | proper.ObjectData[0].ItemID = LLUUID.Zero; | ||
555 | proper.ObjectData[0].CreationDate = (ulong)primData.CreationDate; | ||
556 | proper.ObjectData[0].CreatorID = primData.OwnerID; | ||
557 | proper.ObjectData[0].FolderID = LLUUID.Zero; | ||
558 | proper.ObjectData[0].FromTaskID = LLUUID.Zero; | ||
559 | proper.ObjectData[0].GroupID = LLUUID.Zero; | ||
560 | proper.ObjectData[0].InventorySerial = 0; | ||
561 | proper.ObjectData[0].LastOwnerID = LLUUID.Zero; | ||
562 | proper.ObjectData[0].ObjectID = this.uuid; | ||
563 | proper.ObjectData[0].OwnerID = primData.OwnerID; | ||
564 | proper.ObjectData[0].TouchName = new byte[0]; | ||
565 | proper.ObjectData[0].TextureID = new byte[0]; | ||
566 | proper.ObjectData[0].SitName = new byte[0]; | ||
567 | proper.ObjectData[0].Name = new byte[0]; | ||
568 | proper.ObjectData[0].Description = new byte[0]; | ||
569 | proper.ObjectData[0].OwnerMask = primData.OwnerMask; | ||
570 | proper.ObjectData[0].NextOwnerMask = primData.NextOwnerMask; | ||
571 | proper.ObjectData[0].GroupMask = primData.GroupMask; | ||
572 | proper.ObjectData[0].EveryoneMask = primData.EveryoneMask; | ||
573 | proper.ObjectData[0].BaseMask = primData.BaseMask; | ||
574 | |||
575 | client.OutPacket(proper); | ||
576 | |||
577 | } | ||
578 | |||
579 | #endregion | ||
580 | |||
581 | } | ||
582 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Simulation/Scenes/Scene.PacketHandlers.cs new file mode 100644 index 0000000..d1a2717 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/Scene.PacketHandlers.cs | |||
@@ -0,0 +1,305 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using OpenSim.Physics.Manager; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Framework.Types; | ||
36 | using OpenSim.Framework.Inventory; | ||
37 | using OpenSim.Framework.Utilities; | ||
38 | |||
39 | namespace OpenSim.Region.Scenes | ||
40 | { | ||
41 | public partial class Scene | ||
42 | { | ||
43 | /// <summary> | ||
44 | /// Modifies terrain using the specified information | ||
45 | /// </summary> | ||
46 | /// <param name="height">The height at which the user started modifying the terrain</param> | ||
47 | /// <param name="seconds">The number of seconds the modify button was pressed</param> | ||
48 | /// <param name="brushsize">The size of the brush used</param> | ||
49 | /// <param name="action">The action to be performed</param> | ||
50 | /// <param name="north">Distance from the north border where the cursor is located</param> | ||
51 | /// <param name="west">Distance from the west border where the cursor is located</param> | ||
52 | public void ModifyTerrain(float height, float seconds, byte brushsize, byte action, float north, float west) | ||
53 | { | ||
54 | // Shiny. | ||
55 | double size = (double)(1 << brushsize); | ||
56 | |||
57 | switch (action) | ||
58 | { | ||
59 | case 0: | ||
60 | // flatten terrain | ||
61 | Terrain.flatten(north, west, size, (double)seconds / 100.0); | ||
62 | RegenerateTerrain(true, (int)north, (int)west); | ||
63 | break; | ||
64 | case 1: | ||
65 | // raise terrain | ||
66 | Terrain.raise(north, west, size, (double)seconds / 100.0); | ||
67 | RegenerateTerrain(true, (int)north, (int)west); | ||
68 | break; | ||
69 | case 2: | ||
70 | //lower terrain | ||
71 | Terrain.lower(north, west, size, (double)seconds / 100.0); | ||
72 | RegenerateTerrain(true, (int)north, (int)west); | ||
73 | break; | ||
74 | case 3: | ||
75 | // smooth terrain | ||
76 | Terrain.smooth(north, west, size, (double)seconds / 100.0); | ||
77 | RegenerateTerrain(true, (int)north, (int)west); | ||
78 | break; | ||
79 | case 4: | ||
80 | // noise | ||
81 | Terrain.noise(north, west, size, (double)seconds / 100.0); | ||
82 | RegenerateTerrain(true, (int)north, (int)west); | ||
83 | break; | ||
84 | case 5: | ||
85 | // revert | ||
86 | Terrain.revert(north, west, size, (double)seconds / 100.0); | ||
87 | RegenerateTerrain(true, (int)north, (int)west); | ||
88 | break; | ||
89 | |||
90 | // CLIENT EXTENSIONS GO HERE | ||
91 | case 128: | ||
92 | // erode-thermal | ||
93 | break; | ||
94 | case 129: | ||
95 | // erode-aerobic | ||
96 | break; | ||
97 | case 130: | ||
98 | // erode-hydraulic | ||
99 | break; | ||
100 | } | ||
101 | return; | ||
102 | } | ||
103 | |||
104 | /// <summary> | ||
105 | /// | ||
106 | /// </summary> | ||
107 | /// <param name="message"></param> | ||
108 | /// <param name="type"></param> | ||
109 | /// <param name="fromPos"></param> | ||
110 | /// <param name="fromName"></param> | ||
111 | /// <param name="fromAgentID"></param> | ||
112 | public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) | ||
113 | { | ||
114 | Console.WriteLine("Chat message"); | ||
115 | ScenePresence avatar = null; | ||
116 | foreach (IClientAPI client in m_clientThreads.Values) | ||
117 | { | ||
118 | int dis = -1000; | ||
119 | if (this.Avatars.ContainsKey(client.AgentId)) | ||
120 | { | ||
121 | |||
122 | avatar = this.Avatars[client.AgentId]; | ||
123 | // int dis = Util.fast_distance2d((int)(client.ClientAvatar.Pos.X - simClient.ClientAvatar.Pos.X), (int)(client.ClientAvatar.Pos.Y - simClient.ClientAvatar.Pos.Y)); | ||
124 | dis= (int)avatar.Pos.GetDistanceTo(fromPos); | ||
125 | Console.WriteLine("found avatar at " +dis); | ||
126 | |||
127 | } | ||
128 | |||
129 | switch (type) | ||
130 | { | ||
131 | case 0: // Whisper | ||
132 | if ((dis < 10) && (dis > -10)) | ||
133 | { | ||
134 | //should change so the message is sent through the avatar rather than direct to the ClientView | ||
135 | client.SendChatMessage(message, type, fromPos, fromName, fromAgentID); | ||
136 | } | ||
137 | break; | ||
138 | case 1: // Say | ||
139 | if ((dis < 30) && (dis > -30)) | ||
140 | { | ||
141 | Console.WriteLine("sending chat"); | ||
142 | client.SendChatMessage(message, type, fromPos, fromName, fromAgentID); | ||
143 | } | ||
144 | break; | ||
145 | case 2: // Shout | ||
146 | if ((dis < 100) && (dis > -100)) | ||
147 | { | ||
148 | client.SendChatMessage(message, type, fromPos, fromName, fromAgentID); | ||
149 | } | ||
150 | break; | ||
151 | |||
152 | case 0xff: // Broadcast | ||
153 | client.SendChatMessage(message, type, fromPos, fromName, fromAgentID); | ||
154 | break; | ||
155 | } | ||
156 | |||
157 | } | ||
158 | } | ||
159 | |||
160 | /// <summary> | ||
161 | /// | ||
162 | /// </summary> | ||
163 | /// <param name="primAsset"></param> | ||
164 | /// <param name="pos"></param> | ||
165 | public void RezObject(AssetBase primAsset, LLVector3 pos) | ||
166 | { | ||
167 | |||
168 | } | ||
169 | |||
170 | /// <summary> | ||
171 | /// | ||
172 | /// </summary> | ||
173 | /// <param name="packet"></param> | ||
174 | /// <param name="simClient"></param> | ||
175 | public void DeRezObject(Packet packet, IClientAPI simClient) | ||
176 | { | ||
177 | |||
178 | } | ||
179 | |||
180 | /// <summary> | ||
181 | /// | ||
182 | /// </summary> | ||
183 | /// <param name="remoteClient"></param> | ||
184 | public void SendAvatarsToClient(IClientAPI remoteClient) | ||
185 | { | ||
186 | |||
187 | } | ||
188 | |||
189 | /// <summary> | ||
190 | /// | ||
191 | /// </summary> | ||
192 | /// <param name="parentPrim"></param> | ||
193 | /// <param name="childPrims"></param> | ||
194 | public void LinkObjects(uint parentPrim, List<uint> childPrims) | ||
195 | { | ||
196 | |||
197 | |||
198 | } | ||
199 | |||
200 | /// <summary> | ||
201 | /// | ||
202 | /// </summary> | ||
203 | /// <param name="primLocalID"></param> | ||
204 | /// <param name="shapeBlock"></param> | ||
205 | public void UpdatePrimShape(uint primLocalID, ObjectShapePacket.ObjectDataBlock shapeBlock) | ||
206 | { | ||
207 | |||
208 | } | ||
209 | |||
210 | /// <summary> | ||
211 | /// | ||
212 | /// </summary> | ||
213 | /// <param name="primLocalID"></param> | ||
214 | /// <param name="remoteClient"></param> | ||
215 | public void SelectPrim(uint primLocalID, IClientAPI remoteClient) | ||
216 | { | ||
217 | foreach (Entity ent in Entities.Values) | ||
218 | { | ||
219 | if (ent.LocalId == primLocalID) | ||
220 | { | ||
221 | ((OpenSim.Region.Scenes.Primitive)ent).GetProperites(remoteClient); | ||
222 | break; | ||
223 | } | ||
224 | } | ||
225 | } | ||
226 | |||
227 | public void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) | ||
228 | { | ||
229 | if (this.Entities.ContainsKey(objectID)) | ||
230 | { | ||
231 | ((Primitive)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient); | ||
232 | } | ||
233 | } | ||
234 | |||
235 | /// <summary> | ||
236 | /// | ||
237 | /// </summary> | ||
238 | /// <param name="localID"></param> | ||
239 | /// <param name="packet"></param> | ||
240 | /// <param name="remoteClient"></param> | ||
241 | public void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient) | ||
242 | { | ||
243 | |||
244 | } | ||
245 | |||
246 | /// <summary> | ||
247 | /// | ||
248 | /// </summary> | ||
249 | /// <param name="localID"></param> | ||
250 | /// <param name="texture"></param> | ||
251 | /// <param name="remoteClient"></param> | ||
252 | public void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient) | ||
253 | { | ||
254 | |||
255 | } | ||
256 | |||
257 | /// <summary> | ||
258 | /// | ||
259 | /// </summary> | ||
260 | /// <param name="localID"></param> | ||
261 | /// <param name="pos"></param> | ||
262 | /// <param name="remoteClient"></param> | ||
263 | public void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient) | ||
264 | { | ||
265 | foreach (Entity ent in Entities.Values) | ||
266 | { | ||
267 | if (ent.LocalId == localID) | ||
268 | { | ||
269 | ((OpenSim.Region.Scenes.Primitive)ent).UpdatePosition(pos); | ||
270 | break; | ||
271 | } | ||
272 | } | ||
273 | } | ||
274 | |||
275 | /// <summary> | ||
276 | /// | ||
277 | /// </summary> | ||
278 | /// <param name="localID"></param> | ||
279 | /// <param name="rot"></param> | ||
280 | /// <param name="remoteClient"></param> | ||
281 | public void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) | ||
282 | { | ||
283 | |||
284 | } | ||
285 | |||
286 | /// <summary> | ||
287 | /// | ||
288 | /// </summary> | ||
289 | /// <param name="localID"></param> | ||
290 | /// <param name="scale"></param> | ||
291 | /// <param name="remoteClient"></param> | ||
292 | public void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient) | ||
293 | { | ||
294 | } | ||
295 | |||
296 | /// <summary> | ||
297 | /// Sends prims to a client | ||
298 | /// </summary> | ||
299 | /// <param name="RemoteClient">Client to send to</param> | ||
300 | public void GetInitialPrims(IClientAPI RemoteClient) | ||
301 | { | ||
302 | |||
303 | } | ||
304 | } | ||
305 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/Scene.Scripting.cs b/OpenSim/Region/Simulation/Scenes/Scene.Scripting.cs new file mode 100644 index 0000000..7b53388 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/Scene.Scripting.cs | |||
@@ -0,0 +1,184 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.IO; | ||
32 | using System.Reflection; | ||
33 | using OpenSim.Framework; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Framework.Types; | ||
36 | using libsecondlife; | ||
37 | |||
38 | namespace OpenSim.Region.Scenes | ||
39 | { | ||
40 | public partial class Scene | ||
41 | { | ||
42 | private Dictionary<string, IScriptEngine> scriptEngines = new Dictionary<string, IScriptEngine>(); | ||
43 | |||
44 | /// <summary> | ||
45 | /// | ||
46 | /// </summary> | ||
47 | private void LoadScriptEngines() | ||
48 | { | ||
49 | this.LoadScriptPlugins(); | ||
50 | } | ||
51 | |||
52 | /// <summary> | ||
53 | /// | ||
54 | /// </summary> | ||
55 | public void LoadScriptPlugins() | ||
56 | { | ||
57 | string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "ScriptEngines"); | ||
58 | string[] pluginFiles = Directory.GetFiles(path, "*.dll"); | ||
59 | |||
60 | |||
61 | for (int i = 0; i < pluginFiles.Length; i++) | ||
62 | { | ||
63 | this.AddPlugin(pluginFiles[i]); | ||
64 | } | ||
65 | } | ||
66 | |||
67 | /// <summary> | ||
68 | /// | ||
69 | /// </summary> | ||
70 | /// <param name="FileName"></param> | ||
71 | private void AddPlugin(string FileName) | ||
72 | { | ||
73 | Assembly pluginAssembly = Assembly.LoadFrom(FileName); | ||
74 | |||
75 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
76 | { | ||
77 | if (pluginType.IsPublic) | ||
78 | { | ||
79 | if (!pluginType.IsAbstract) | ||
80 | { | ||
81 | Type typeInterface = pluginType.GetInterface("IScriptEngine", true); | ||
82 | |||
83 | if (typeInterface != null) | ||
84 | { | ||
85 | IScriptEngine plug = (IScriptEngine)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
86 | plug.Init(this); | ||
87 | this.scriptEngines.Add(plug.GetName(), plug); | ||
88 | |||
89 | } | ||
90 | |||
91 | typeInterface = null; | ||
92 | } | ||
93 | } | ||
94 | } | ||
95 | |||
96 | pluginAssembly = null; | ||
97 | } | ||
98 | |||
99 | /// <summary> | ||
100 | /// | ||
101 | /// </summary> | ||
102 | /// <param name="scriptType"></param> | ||
103 | /// <param name="scriptName"></param> | ||
104 | /// <param name="script"></param> | ||
105 | /// <param name="ent"></param> | ||
106 | public void LoadScript(string scriptType, string scriptName, string script, Entity ent) | ||
107 | { | ||
108 | if(this.scriptEngines.ContainsKey(scriptType)) | ||
109 | { | ||
110 | this.scriptEngines[scriptType].LoadScript(script, scriptName, ent.LocalId); | ||
111 | } | ||
112 | } | ||
113 | |||
114 | #region IScriptAPI Methods | ||
115 | |||
116 | /// <summary> | ||
117 | /// | ||
118 | /// </summary> | ||
119 | /// <param name="localID"></param> | ||
120 | /// <returns></returns> | ||
121 | public LLVector3 GetEntityPosition(uint localID) | ||
122 | { | ||
123 | LLVector3 res = new LLVector3(); | ||
124 | // Console.WriteLine("script- getting entity " + localID + " position"); | ||
125 | foreach (Entity entity in this.Entities.Values) | ||
126 | { | ||
127 | if (entity.LocalId == localID) | ||
128 | { | ||
129 | res.X = entity.Pos.X; | ||
130 | res.Y = entity.Pos.Y; | ||
131 | res.Z = entity.Pos.Z; | ||
132 | } | ||
133 | } | ||
134 | return res; | ||
135 | } | ||
136 | |||
137 | /// <summary> | ||
138 | /// | ||
139 | /// </summary> | ||
140 | /// <param name="localID"></param> | ||
141 | /// <param name="x"></param> | ||
142 | /// <param name="y"></param> | ||
143 | /// <param name="z"></param> | ||
144 | public void SetEntityPosition(uint localID, float x , float y, float z) | ||
145 | { | ||
146 | foreach (Entity entity in this.Entities.Values) | ||
147 | { | ||
148 | if (entity.LocalId == localID && entity is Primitive) | ||
149 | { | ||
150 | LLVector3 pos = entity.Pos; | ||
151 | pos.X = x; | ||
152 | pos.Y = y; | ||
153 | Primitive prim = entity as Primitive; | ||
154 | // Of course, we really should have asked the physEngine if this is possible, and if not, returned false. | ||
155 | //prim.UpdatePosition(pos); | ||
156 | // Console.WriteLine("script- setting entity " + localID + " positon"); | ||
157 | } | ||
158 | } | ||
159 | |||
160 | } | ||
161 | |||
162 | /// <summary> | ||
163 | /// | ||
164 | /// </summary> | ||
165 | /// <returns></returns> | ||
166 | public uint GetRandomAvatarID() | ||
167 | { | ||
168 | //Console.WriteLine("script- getting random avatar id"); | ||
169 | uint res = 0; | ||
170 | foreach (Entity entity in this.Entities.Values) | ||
171 | { | ||
172 | if (entity is ScenePresence) | ||
173 | { | ||
174 | res = entity.LocalId; | ||
175 | } | ||
176 | } | ||
177 | return res; | ||
178 | } | ||
179 | |||
180 | #endregion | ||
181 | |||
182 | |||
183 | } | ||
184 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/Scene.cs b/OpenSim/Region/Simulation/Scenes/Scene.cs new file mode 100644 index 0000000..bf2244e --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/Scene.cs | |||
@@ -0,0 +1,795 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using libsecondlife; | ||
30 | using libsecondlife.Packets; | ||
31 | using System.Collections.Generic; | ||
32 | using System.Text; | ||
33 | using System.Reflection; | ||
34 | using System.IO; | ||
35 | using System.Threading; | ||
36 | using System.Timers; | ||
37 | using OpenSim.Physics.Manager; | ||
38 | using OpenSim.Framework.Interfaces; | ||
39 | using OpenSim.Framework.Types; | ||
40 | using OpenSim.Framework.Inventory; | ||
41 | using OpenSim.Framework; | ||
42 | using OpenSim.Region.Scripting; | ||
43 | using OpenSim.Terrain; | ||
44 | using OpenGrid.Framework.Communications; | ||
45 | using OpenSim.Caches; | ||
46 | using OpenSim.Region; | ||
47 | using OpenSim.Servers; | ||
48 | |||
49 | namespace OpenSim.Region.Scenes | ||
50 | { | ||
51 | public delegate bool FilterAvatarList(ScenePresence avatar); | ||
52 | |||
53 | public partial class Scene : SceneBase, ILocalStorageReceiver, IScriptAPI | ||
54 | { | ||
55 | protected System.Timers.Timer m_heartbeatTimer = new System.Timers.Timer(); | ||
56 | protected Dictionary<libsecondlife.LLUUID, ScenePresence> Avatars; | ||
57 | protected Dictionary<libsecondlife.LLUUID, Primitive> Prims; | ||
58 | private PhysicsScene phyScene; | ||
59 | private float timeStep = 0.1f; | ||
60 | private Random Rand = new Random(); | ||
61 | private uint _primCount = 702000; | ||
62 | private int storageCount; | ||
63 | private Dictionary<LLUUID, ScriptHandler> m_scriptHandlers; | ||
64 | private Dictionary<string, ScriptFactory> m_scripts; | ||
65 | private Mutex updateLock; | ||
66 | |||
67 | protected AuthenticateSessionsBase authenticateHandler; | ||
68 | protected RegionCommsListener regionCommsHost; | ||
69 | protected CommunicationsManager commsManager; | ||
70 | |||
71 | protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>(); | ||
72 | protected BaseHttpServer httpListener; | ||
73 | |||
74 | public ParcelManager parcelManager; | ||
75 | public EstateManager estateManager; | ||
76 | public EventManager eventManager; | ||
77 | |||
78 | #region Properties | ||
79 | /// <summary> | ||
80 | /// | ||
81 | /// </summary> | ||
82 | public PhysicsScene PhysScene | ||
83 | { | ||
84 | set | ||
85 | { | ||
86 | this.phyScene = value; | ||
87 | } | ||
88 | get | ||
89 | { | ||
90 | return (this.phyScene); | ||
91 | } | ||
92 | } | ||
93 | |||
94 | #endregion | ||
95 | |||
96 | #region Constructors | ||
97 | /// <summary> | ||
98 | /// Creates a new World class, and a region to go with it. | ||
99 | /// </summary> | ||
100 | /// <param name="clientThreads">Dictionary to contain client threads</param> | ||
101 | /// <param name="regionHandle">Region Handle for this region</param> | ||
102 | /// <param name="regionName">Region Name for this region</param> | ||
103 | public Scene(Dictionary<uint, IClientAPI> clientThreads, RegionInfo regInfo, AuthenticateSessionsBase authen, CommunicationsManager commsMan, AssetCache assetCach, BaseHttpServer httpServer) | ||
104 | { | ||
105 | try | ||
106 | { | ||
107 | updateLock = new Mutex(false); | ||
108 | this.authenticateHandler = authen; | ||
109 | this.commsManager = commsMan; | ||
110 | this.assetCache = assetCach; | ||
111 | m_clientThreads = clientThreads; | ||
112 | m_regInfo = regInfo; | ||
113 | m_regionHandle = m_regInfo.RegionHandle; | ||
114 | m_regionName = m_regInfo.RegionName; | ||
115 | this.m_datastore = m_regInfo.DataStore; | ||
116 | this.RegisterRegionWithComms(); | ||
117 | |||
118 | parcelManager = new ParcelManager(this, this.m_regInfo); | ||
119 | estateManager = new EstateManager(this, this.m_regInfo); | ||
120 | |||
121 | eventManager = new EventManager(); | ||
122 | |||
123 | m_scriptHandlers = new Dictionary<LLUUID, ScriptHandler>(); | ||
124 | m_scripts = new Dictionary<string, ScriptFactory>(); | ||
125 | |||
126 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs - creating new entitities instance"); | ||
127 | Entities = new Dictionary<libsecondlife.LLUUID, Entity>(); | ||
128 | Avatars = new Dictionary<LLUUID, ScenePresence>(); | ||
129 | Prims = new Dictionary<LLUUID, Primitive>(); | ||
130 | |||
131 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs - creating LandMap"); | ||
132 | Terrain = new TerrainEngine(); | ||
133 | |||
134 | ScenePresence.LoadAnims(); | ||
135 | this.httpListener = httpServer; | ||
136 | |||
137 | } | ||
138 | catch (Exception e) | ||
139 | { | ||
140 | OpenSim.Framework.Console.MainLog.Instance.Error( "World.cs: Constructor failed with exception " + e.ToString()); | ||
141 | } | ||
142 | } | ||
143 | #endregion | ||
144 | |||
145 | /// <summary> | ||
146 | /// | ||
147 | /// </summary> | ||
148 | public void StartTimer() | ||
149 | { | ||
150 | m_heartbeatTimer.Enabled = true; | ||
151 | m_heartbeatTimer.Interval = 100; | ||
152 | m_heartbeatTimer.Elapsed += new ElapsedEventHandler(this.Heartbeat); | ||
153 | } | ||
154 | |||
155 | |||
156 | #region Update Methods | ||
157 | |||
158 | |||
159 | /// <summary> | ||
160 | /// Performs per-frame updates regularly | ||
161 | /// </summary> | ||
162 | /// <param name="sender"></param> | ||
163 | /// <param name="e"></param> | ||
164 | void Heartbeat(object sender, System.EventArgs e) | ||
165 | { | ||
166 | this.Update(); | ||
167 | } | ||
168 | |||
169 | /// <summary> | ||
170 | /// Performs per-frame updates on the world, this should be the central world loop | ||
171 | /// </summary> | ||
172 | public override void Update() | ||
173 | { | ||
174 | updateLock.WaitOne(); | ||
175 | try | ||
176 | { | ||
177 | if (this.phyScene.IsThreaded) | ||
178 | { | ||
179 | this.phyScene.GetResults(); | ||
180 | |||
181 | } | ||
182 | |||
183 | foreach (libsecondlife.LLUUID UUID in Entities.Keys) | ||
184 | { | ||
185 | Entities[UUID].updateMovement(); | ||
186 | } | ||
187 | |||
188 | lock (this.m_syncRoot) | ||
189 | { | ||
190 | this.phyScene.Simulate(timeStep); | ||
191 | } | ||
192 | |||
193 | foreach (libsecondlife.LLUUID UUID in Entities.Keys) | ||
194 | { | ||
195 | Entities[UUID].update(); | ||
196 | } | ||
197 | |||
198 | // New | ||
199 | eventManager.TriggerOnFrame(); | ||
200 | |||
201 | // TODO: Obsolete - Phase out | ||
202 | foreach (ScriptHandler scriptHandler in m_scriptHandlers.Values) | ||
203 | { | ||
204 | scriptHandler.OnFrame(); | ||
205 | } | ||
206 | foreach (IScriptEngine scripteng in this.scriptEngines.Values) | ||
207 | { | ||
208 | scripteng.OnFrame(); | ||
209 | } | ||
210 | |||
211 | //backup world data | ||
212 | this.storageCount++; | ||
213 | if (storageCount > 1200) //set to how often you want to backup | ||
214 | { | ||
215 | this.Backup(); | ||
216 | storageCount = 0; | ||
217 | } | ||
218 | } | ||
219 | catch (Exception e) | ||
220 | { | ||
221 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: Update() - Failed with exception " + e.ToString()); | ||
222 | } | ||
223 | updateLock.ReleaseMutex(); | ||
224 | |||
225 | } | ||
226 | |||
227 | /// <summary> | ||
228 | /// | ||
229 | /// </summary> | ||
230 | /// <returns></returns> | ||
231 | public bool Backup() | ||
232 | { | ||
233 | /* | ||
234 | try | ||
235 | { | ||
236 | // Terrain backup routines | ||
237 | if (Terrain.tainted > 0) | ||
238 | { | ||
239 | Terrain.tainted = 0; | ||
240 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: Backup() - Terrain tainted, saving."); | ||
241 | localStorage.SaveMap(Terrain.getHeights1D()); | ||
242 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: Backup() - Terrain saved, informing Physics."); | ||
243 | lock (this.m_syncRoot) | ||
244 | { | ||
245 | phyScene.SetTerrain(Terrain.getHeights1D()); | ||
246 | } | ||
247 | } | ||
248 | |||
249 | // Primitive backup routines | ||
250 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: Backup() - Backing up Primitives"); | ||
251 | foreach (libsecondlife.LLUUID UUID in Entities.Keys) | ||
252 | { | ||
253 | Entities[UUID].BackUp(); | ||
254 | } | ||
255 | |||
256 | //Parcel backup routines | ||
257 | ParcelData[] parcels = new ParcelData[parcelManager.parcelList.Count]; | ||
258 | int i = 0; | ||
259 | foreach (OpenSim.Region.Parcel parcel in parcelManager.parcelList.Values) | ||
260 | { | ||
261 | parcels[i] = parcel.parcelData; | ||
262 | i++; | ||
263 | } | ||
264 | localStorage.SaveParcels(parcels); | ||
265 | |||
266 | // Backup successful | ||
267 | return true; | ||
268 | } | ||
269 | catch (Exception e) | ||
270 | { | ||
271 | // Backup failed | ||
272 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, "World.cs: Backup() - Backup Failed with exception " + e.ToString()); | ||
273 | return false; | ||
274 | } | ||
275 | */ | ||
276 | return true; | ||
277 | } | ||
278 | #endregion | ||
279 | |||
280 | #region Regenerate Terrain | ||
281 | |||
282 | /// <summary> | ||
283 | /// Rebuilds the terrain using a procedural algorithm | ||
284 | /// </summary> | ||
285 | public void RegenerateTerrain() | ||
286 | { | ||
287 | try | ||
288 | { | ||
289 | Terrain.hills(); | ||
290 | |||
291 | lock (this.m_syncRoot) | ||
292 | { | ||
293 | this.phyScene.SetTerrain(Terrain.getHeights1D()); | ||
294 | } | ||
295 | this.localStorage.SaveMap(this.Terrain.getHeights1D()); | ||
296 | |||
297 | foreach (IClientAPI client in m_clientThreads.Values) | ||
298 | { | ||
299 | this.SendLayerData(client); | ||
300 | } | ||
301 | |||
302 | foreach (libsecondlife.LLUUID UUID in Entities.Keys) | ||
303 | { | ||
304 | Entities[UUID].LandRenegerated(); | ||
305 | } | ||
306 | } | ||
307 | catch (Exception e) | ||
308 | { | ||
309 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString()); | ||
310 | } | ||
311 | } | ||
312 | |||
313 | /// <summary> | ||
314 | /// Rebuilds the terrain using a 2D float array | ||
315 | /// </summary> | ||
316 | /// <param name="newMap">256,256 float array containing heights</param> | ||
317 | public void RegenerateTerrain(float[,] newMap) | ||
318 | { | ||
319 | try | ||
320 | { | ||
321 | this.Terrain.setHeights2D(newMap); | ||
322 | lock (this.m_syncRoot) | ||
323 | { | ||
324 | this.phyScene.SetTerrain(this.Terrain.getHeights1D()); | ||
325 | } | ||
326 | this.localStorage.SaveMap(this.Terrain.getHeights1D()); | ||
327 | |||
328 | foreach (IClientAPI client in m_clientThreads.Values) | ||
329 | { | ||
330 | this.SendLayerData(client); | ||
331 | } | ||
332 | |||
333 | foreach (libsecondlife.LLUUID UUID in Entities.Keys) | ||
334 | { | ||
335 | Entities[UUID].LandRenegerated(); | ||
336 | } | ||
337 | } | ||
338 | catch (Exception e) | ||
339 | { | ||
340 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString()); | ||
341 | } | ||
342 | } | ||
343 | |||
344 | /// <summary> | ||
345 | /// Rebuilds the terrain assuming changes occured at a specified point[?] | ||
346 | /// </summary> | ||
347 | /// <param name="changes">???</param> | ||
348 | /// <param name="pointx">???</param> | ||
349 | /// <param name="pointy">???</param> | ||
350 | public void RegenerateTerrain(bool changes, int pointx, int pointy) | ||
351 | { | ||
352 | try | ||
353 | { | ||
354 | if (changes) | ||
355 | { | ||
356 | /* Dont save here, rely on tainting system instead */ | ||
357 | |||
358 | foreach (IClientAPI client in m_clientThreads.Values) | ||
359 | { | ||
360 | this.SendLayerData(pointx, pointy, client); | ||
361 | } | ||
362 | } | ||
363 | } | ||
364 | catch (Exception e) | ||
365 | { | ||
366 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString()); | ||
367 | } | ||
368 | } | ||
369 | |||
370 | #endregion | ||
371 | |||
372 | #region Load Terrain | ||
373 | /// <summary> | ||
374 | /// Loads the World heightmap | ||
375 | /// </summary> | ||
376 | /// | ||
377 | public override void LoadWorldMap() | ||
378 | { | ||
379 | try | ||
380 | { | ||
381 | float[] map = this.localStorage.LoadWorld(); | ||
382 | if (map == null) | ||
383 | { | ||
384 | if (string.IsNullOrEmpty(this.m_regInfo.estateSettings.terrainFile)) | ||
385 | { | ||
386 | Console.WriteLine("No default terrain, procedurally generating..."); | ||
387 | this.Terrain.hills(); | ||
388 | |||
389 | this.localStorage.SaveMap(this.Terrain.getHeights1D()); | ||
390 | } | ||
391 | else | ||
392 | { | ||
393 | try | ||
394 | { | ||
395 | this.Terrain.loadFromFileF32(this.m_regInfo.estateSettings.terrainFile); | ||
396 | this.Terrain *= this.m_regInfo.estateSettings.terrainMultiplier; | ||
397 | } | ||
398 | catch | ||
399 | { | ||
400 | Console.WriteLine("Unable to load default terrain, procedurally generating instead..."); | ||
401 | Terrain.hills(); | ||
402 | } | ||
403 | this.localStorage.SaveMap(this.Terrain.getHeights1D()); | ||
404 | } | ||
405 | } | ||
406 | else | ||
407 | { | ||
408 | this.Terrain.setHeights1D(map); | ||
409 | } | ||
410 | |||
411 | CreateTerrainTexture(); | ||
412 | |||
413 | } | ||
414 | catch (Exception e) | ||
415 | { | ||
416 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadWorldMap() - Failed with exception " + e.ToString()); | ||
417 | } | ||
418 | } | ||
419 | |||
420 | /// <summary> | ||
421 | /// | ||
422 | /// </summary> | ||
423 | private void CreateTerrainTexture() | ||
424 | { | ||
425 | //create a texture asset of the terrain | ||
426 | byte[] data = this.Terrain.exportJpegImage("defaultstripe.png"); | ||
427 | this.m_regInfo.estateSettings.terrainImageID = LLUUID.Random(); | ||
428 | AssetBase asset = new AssetBase(); | ||
429 | asset.FullID = this.m_regInfo.estateSettings.terrainImageID; | ||
430 | asset.Data = data; | ||
431 | asset.Name = "terrainImage"; | ||
432 | asset.Type = 0; | ||
433 | this.assetCache.AddAsset(asset); | ||
434 | } | ||
435 | #endregion | ||
436 | |||
437 | #region Primitives Methods | ||
438 | |||
439 | |||
440 | /// <summary> | ||
441 | /// Loads the World's objects | ||
442 | /// </summary> | ||
443 | public void LoadPrimsFromStorage() | ||
444 | { | ||
445 | try | ||
446 | { | ||
447 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: LoadPrimsFromStorage() - Loading primitives"); | ||
448 | this.localStorage.LoadPrimitives(this); | ||
449 | } | ||
450 | catch (Exception e) | ||
451 | { | ||
452 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadPrimsFromStorage() - Failed with exception " + e.ToString()); | ||
453 | } | ||
454 | } | ||
455 | |||
456 | /// <summary> | ||
457 | /// Loads a specific object from storage | ||
458 | /// </summary> | ||
459 | /// <param name="prim">The object to load</param> | ||
460 | public void PrimFromStorage(PrimData prim) | ||
461 | { | ||
462 | |||
463 | } | ||
464 | |||
465 | /// <summary> | ||
466 | /// | ||
467 | /// </summary> | ||
468 | /// <param name="addPacket"></param> | ||
469 | /// <param name="agentClient"></param> | ||
470 | public void AddNewPrim(Packet addPacket, IClientAPI agentClient) | ||
471 | { | ||
472 | AddNewPrim((ObjectAddPacket)addPacket, agentClient.AgentId); | ||
473 | } | ||
474 | |||
475 | /// <summary> | ||
476 | /// | ||
477 | /// </summary> | ||
478 | /// <param name="addPacket"></param> | ||
479 | /// <param name="ownerID"></param> | ||
480 | public void AddNewPrim(ObjectAddPacket addPacket, LLUUID ownerID) | ||
481 | { | ||
482 | try | ||
483 | { | ||
484 | Primitive prim = new Primitive(m_regionHandle, this, addPacket, ownerID, this._primCount); | ||
485 | |||
486 | this.Entities.Add(prim.uuid, prim); | ||
487 | this._primCount++; | ||
488 | |||
489 | // Trigger event for listeners | ||
490 | eventManager.TriggerOnNewPrimitive(prim); | ||
491 | } | ||
492 | catch (Exception e) | ||
493 | { | ||
494 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: AddNewPrim() - Failed with exception " + e.ToString()); | ||
495 | } | ||
496 | } | ||
497 | |||
498 | #endregion | ||
499 | |||
500 | #region Add/Remove Avatar Methods | ||
501 | |||
502 | /// <summary> | ||
503 | /// | ||
504 | /// </summary> | ||
505 | /// <param name="remoteClient"></param | ||
506 | /// <param name="agentID"></param> | ||
507 | /// <param name="child"></param> | ||
508 | public override void AddNewClient(IClientAPI remoteClient, LLUUID agentID, bool child) | ||
509 | { | ||
510 | remoteClient.OnRegionHandShakeReply += this.SendLayerData; | ||
511 | //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims); | ||
512 | remoteClient.OnChatFromViewer += this.SimChat; | ||
513 | remoteClient.OnRequestWearables += this.InformClientOfNeighbours; | ||
514 | remoteClient.OnAddPrim += this.AddNewPrim; | ||
515 | remoteClient.OnUpdatePrimPosition += this.UpdatePrimPosition; | ||
516 | remoteClient.OnRequestMapBlocks += this.RequestMapBlocks; | ||
517 | remoteClient.OnTeleportLocationRequest += this.RequestTeleportLocation; | ||
518 | //remoteClient.OnObjectSelect += this.SelectPrim; | ||
519 | remoteClient.OnGrapUpdate += this.MoveObject; | ||
520 | |||
521 | /* remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest); | ||
522 | remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest); | ||
523 | remoteClient.OnParcelJoinRequest += new ParcelJoinRequest(parcelManager.handleParcelJoinRequest); | ||
524 | remoteClient.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(parcelManager.handleParcelPropertiesUpdateRequest); | ||
525 | remoteClient.OnEstateOwnerMessage += new EstateOwnerMessageRequest(estateManager.handleEstateOwnerMessage); | ||
526 | */ | ||
527 | |||
528 | ScenePresence newAvatar = null; | ||
529 | try | ||
530 | { | ||
531 | |||
532 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent"); | ||
533 | newAvatar = new ScenePresence(remoteClient, this, this.m_regInfo); | ||
534 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs:AddViewerAgent() - Adding new avatar to world"); | ||
535 | OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs:AddViewerAgent() - Starting RegionHandshake "); | ||
536 | |||
537 | //newAvatar.SendRegionHandshake(); | ||
538 | this.estateManager.sendRegionHandshake(remoteClient); | ||
539 | |||
540 | PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z); | ||
541 | lock (this.m_syncRoot) | ||
542 | { | ||
543 | newAvatar.PhysActor = this.phyScene.AddAvatar(pVec); | ||
544 | } | ||
545 | |||
546 | lock (Entities) | ||
547 | { | ||
548 | if (!Entities.ContainsKey(agentID)) | ||
549 | { | ||
550 | this.Entities.Add(agentID, newAvatar); | ||
551 | } | ||
552 | else | ||
553 | { | ||
554 | Entities[agentID] = newAvatar; | ||
555 | } | ||
556 | } | ||
557 | lock (Avatars) | ||
558 | { | ||
559 | if (Avatars.ContainsKey(agentID)) | ||
560 | { | ||
561 | Avatars[agentID] = newAvatar; | ||
562 | } | ||
563 | else | ||
564 | { | ||
565 | this.Avatars.Add(agentID, newAvatar); | ||
566 | } | ||
567 | } | ||
568 | } | ||
569 | catch (Exception e) | ||
570 | { | ||
571 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: AddViewerAgent() - Failed with exception " + e.ToString()); | ||
572 | } | ||
573 | return; | ||
574 | } | ||
575 | |||
576 | |||
577 | |||
578 | /// <summary> | ||
579 | /// | ||
580 | /// </summary> | ||
581 | /// <param name="agentID"></param> | ||
582 | public override void RemoveClient(LLUUID agentID) | ||
583 | { | ||
584 | eventManager.TriggerOnRemovePresence(agentID); | ||
585 | |||
586 | return; | ||
587 | } | ||
588 | #endregion | ||
589 | |||
590 | #region Request Avatars List Methods | ||
591 | //The idea is to have a group of method that return a list of avatars meeting some requirement | ||
592 | // ie it could be all Avatars within a certain range of the calling prim/avatar. | ||
593 | |||
594 | /// <summary> | ||
595 | /// Request a List of all Avatars in this World | ||
596 | /// </summary> | ||
597 | /// <returns></returns> | ||
598 | public List<ScenePresence> RequestAvatarList() | ||
599 | { | ||
600 | List<ScenePresence> result = new List<ScenePresence>(); | ||
601 | |||
602 | foreach (ScenePresence avatar in Avatars.Values) | ||
603 | { | ||
604 | result.Add(avatar); | ||
605 | } | ||
606 | |||
607 | return result; | ||
608 | } | ||
609 | |||
610 | /// <summary> | ||
611 | /// Request a filtered list of Avatars in this World | ||
612 | /// </summary> | ||
613 | /// <returns></returns> | ||
614 | public List<ScenePresence> RequestAvatarList(FilterAvatarList filter) | ||
615 | { | ||
616 | List<ScenePresence> result = new List<ScenePresence>(); | ||
617 | |||
618 | foreach (ScenePresence avatar in Avatars.Values) | ||
619 | { | ||
620 | if (filter(avatar)) | ||
621 | { | ||
622 | result.Add(avatar); | ||
623 | } | ||
624 | } | ||
625 | |||
626 | return result; | ||
627 | } | ||
628 | |||
629 | /// <summary> | ||
630 | /// Request a Avatar by UUID | ||
631 | /// </summary> | ||
632 | /// <param name="avatarID"></param> | ||
633 | /// <returns></returns> | ||
634 | public ScenePresence RequestAvatar(LLUUID avatarID) | ||
635 | { | ||
636 | if (this.Avatars.ContainsKey(avatarID)) | ||
637 | { | ||
638 | return Avatars[avatarID]; | ||
639 | } | ||
640 | return null; | ||
641 | } | ||
642 | #endregion | ||
643 | |||
644 | |||
645 | #region RegionCommsHost | ||
646 | |||
647 | /// <summary> | ||
648 | /// | ||
649 | /// </summary> | ||
650 | public void RegisterRegionWithComms() | ||
651 | { | ||
652 | GridInfo gridSettings = new GridInfo(); | ||
653 | this.regionCommsHost = this.commsManager.GridServer.RegisterRegion(this.m_regInfo,gridSettings); | ||
654 | if (this.regionCommsHost != null) | ||
655 | { | ||
656 | this.regionCommsHost.OnExpectUser += new ExpectUserDelegate(this.NewUserConnection); | ||
657 | this.regionCommsHost.OnAvatarCrossingIntoRegion += new AgentCrossing(this.AgentCrossing); | ||
658 | } | ||
659 | } | ||
660 | |||
661 | /// <summary> | ||
662 | /// | ||
663 | /// </summary> | ||
664 | /// <param name="regionHandle"></param> | ||
665 | /// <param name="agent"></param> | ||
666 | public void NewUserConnection(ulong regionHandle, AgentCircuitData agent) | ||
667 | { | ||
668 | // Console.WriteLine("World.cs - add new user connection"); | ||
669 | //should just check that its meant for this region | ||
670 | if (regionHandle == this.m_regInfo.RegionHandle) | ||
671 | { | ||
672 | if (agent.CapsPath != "") | ||
673 | { | ||
674 | //Console.WriteLine("new user, so creating caps handler for it"); | ||
675 | Caps cap = new Caps(this.assetCache, httpListener, this.m_regInfo.CommsIPListenAddr, 9000, agent.CapsPath, agent.AgentID); | ||
676 | cap.RegisterHandlers(); | ||
677 | this.capsHandlers.Add(agent.AgentID, cap); | ||
678 | } | ||
679 | this.authenticateHandler.AddNewCircuit(agent.circuitcode, agent); | ||
680 | } | ||
681 | } | ||
682 | |||
683 | public void AgentCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position) | ||
684 | { | ||
685 | if (regionHandle == this.m_regInfo.RegionHandle) | ||
686 | { | ||
687 | if (this.Avatars.ContainsKey(agentID)) | ||
688 | { | ||
689 | this.Avatars[agentID].MakeAvatar(position); | ||
690 | } | ||
691 | } | ||
692 | } | ||
693 | |||
694 | /// <summary> | ||
695 | /// | ||
696 | /// </summary> | ||
697 | public void InformClientOfNeighbours(IClientAPI remoteClient) | ||
698 | { | ||
699 | // Console.WriteLine("informing client of neighbouring regions"); | ||
700 | List<RegionInfo> neighbours = this.commsManager.GridServer.RequestNeighbours(this.m_regInfo); | ||
701 | |||
702 | //Console.WriteLine("we have " + neighbours.Count + " neighbouring regions"); | ||
703 | if (neighbours != null) | ||
704 | { | ||
705 | for (int i = 0; i < neighbours.Count; i++) | ||
706 | { | ||
707 | // Console.WriteLine("sending neighbours data"); | ||
708 | AgentCircuitData agent = remoteClient.RequestClientInfo(); | ||
709 | agent.BaseFolder = LLUUID.Zero; | ||
710 | agent.InventoryFolder = LLUUID.Zero; | ||
711 | agent.startpos = new LLVector3(128, 128, 70); | ||
712 | agent.child = true; | ||
713 | this.commsManager.InterRegion.InformRegionOfChildAgent(neighbours[i].RegionHandle, agent); | ||
714 | remoteClient.InformClientOfNeighbour(neighbours[i].RegionHandle, System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr), (ushort)neighbours[i].CommsIPListenPort); | ||
715 | //this.capsHandlers[remoteClient.AgentId].CreateEstablishAgentComms("", System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr) + ":" + neighbours[i].CommsIPListenPort); | ||
716 | } | ||
717 | } | ||
718 | } | ||
719 | |||
720 | /// <summary> | ||
721 | /// | ||
722 | /// </summary> | ||
723 | /// <param name="regionHandle"></param> | ||
724 | /// <returns></returns> | ||
725 | public RegionInfo RequestNeighbouringRegionInfo(ulong regionHandle) | ||
726 | { | ||
727 | return this.commsManager.GridServer.RequestNeighbourInfo(regionHandle); | ||
728 | } | ||
729 | |||
730 | /// <summary> | ||
731 | /// | ||
732 | /// </summary> | ||
733 | /// <param name="minX"></param> | ||
734 | /// <param name="minY"></param> | ||
735 | /// <param name="maxX"></param> | ||
736 | /// <param name="maxY"></param> | ||
737 | public void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY) | ||
738 | { | ||
739 | List<MapBlockData> mapBlocks; | ||
740 | mapBlocks = this.commsManager.GridServer.RequestNeighbourMapBlocks(minX, minY, maxX, maxY); | ||
741 | remoteClient.SendMapBlock(mapBlocks); | ||
742 | } | ||
743 | |||
744 | /// <summary> | ||
745 | /// | ||
746 | /// </summary> | ||
747 | /// <param name="remoteClient"></param> | ||
748 | /// <param name="RegionHandle"></param> | ||
749 | /// <param name="position"></param> | ||
750 | /// <param name="lookAt"></param> | ||
751 | /// <param name="flags"></param> | ||
752 | public void RequestTeleportLocation(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags) | ||
753 | { | ||
754 | if (regionHandle == this.m_regionHandle) | ||
755 | { | ||
756 | if (this.Avatars.ContainsKey(remoteClient.AgentId)) | ||
757 | { | ||
758 | remoteClient.SendTeleportLocationStart(); | ||
759 | remoteClient.SendLocalTeleport(position, lookAt, flags); | ||
760 | this.Avatars[remoteClient.AgentId].Teleport(position); | ||
761 | } | ||
762 | } | ||
763 | else | ||
764 | { | ||
765 | RegionInfo reg = this.RequestNeighbouringRegionInfo(regionHandle); | ||
766 | if (reg != null) | ||
767 | { | ||
768 | remoteClient.SendTeleportLocationStart(); | ||
769 | AgentCircuitData agent = remoteClient.RequestClientInfo(); | ||
770 | agent.BaseFolder = LLUUID.Zero; | ||
771 | agent.InventoryFolder = LLUUID.Zero; | ||
772 | agent.startpos = new LLVector3(128, 128, 70); | ||
773 | agent.child = true; | ||
774 | this.commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent); | ||
775 | this.commsManager.InterRegion.ExpectAvatarCrossing(regionHandle, remoteClient.AgentId, position); | ||
776 | remoteClient.SendRegionTeleport(regionHandle, 13, reg.CommsIPListenAddr, (ushort)reg.CommsIPListenPort, 4, (1 << 4)); | ||
777 | } | ||
778 | //remoteClient.SendTeleportCancel(); | ||
779 | } | ||
780 | } | ||
781 | |||
782 | /// <summary> | ||
783 | /// | ||
784 | /// </summary> | ||
785 | /// <param name="regionhandle"></param> | ||
786 | /// <param name="agentID"></param> | ||
787 | /// <param name="position"></param> | ||
788 | public bool InformNeighbourOfCrossing(ulong regionhandle, LLUUID agentID, LLVector3 position) | ||
789 | { | ||
790 | return this.commsManager.InterRegion.ExpectAvatarCrossing(regionhandle, agentID, position); | ||
791 | } | ||
792 | |||
793 | #endregion | ||
794 | } | ||
795 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/SceneBase.cs b/OpenSim/Region/Simulation/Scenes/SceneBase.cs new file mode 100644 index 0000000..4dbd374 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/SceneBase.cs | |||
@@ -0,0 +1,201 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using libsecondlife; | ||
30 | using libsecondlife.Packets; | ||
31 | using System.Collections.Generic; | ||
32 | using System.Text; | ||
33 | using System.Reflection; | ||
34 | using System.IO; | ||
35 | using System.Threading; | ||
36 | using OpenSim.Physics.Manager; | ||
37 | using OpenSim.Framework.Interfaces; | ||
38 | using OpenSim.Framework.Types; | ||
39 | using OpenSim.Framework.Inventory; | ||
40 | using OpenSim.Region.Scripting; | ||
41 | using OpenSim.Terrain; | ||
42 | using OpenSim.Caches; | ||
43 | |||
44 | namespace OpenSim.Region.Scenes | ||
45 | { | ||
46 | public abstract class SceneBase : IWorld | ||
47 | { | ||
48 | public Dictionary<libsecondlife.LLUUID, Entity> Entities; | ||
49 | protected Dictionary<uint, IClientAPI> m_clientThreads; | ||
50 | protected ulong m_regionHandle; | ||
51 | protected string m_regionName; | ||
52 | protected RegionInfo m_regInfo; | ||
53 | |||
54 | public TerrainEngine Terrain; | ||
55 | |||
56 | public string m_datastore; | ||
57 | public ILocalStorage localStorage; | ||
58 | |||
59 | protected object m_syncRoot = new object(); | ||
60 | private uint m_nextLocalId = 8880000; | ||
61 | protected AssetCache assetCache; | ||
62 | |||
63 | #region Update Methods | ||
64 | /// <summary> | ||
65 | /// Normally called once every frame/tick to let the world preform anything required (like running the physics simulation) | ||
66 | /// </summary> | ||
67 | public abstract void Update(); | ||
68 | |||
69 | #endregion | ||
70 | |||
71 | #region Terrain Methods | ||
72 | |||
73 | /// <summary> | ||
74 | /// Loads the World heightmap | ||
75 | /// </summary> | ||
76 | public abstract void LoadWorldMap(); | ||
77 | |||
78 | /// <summary> | ||
79 | /// Loads a new storage subsystem from a named library | ||
80 | /// </summary> | ||
81 | /// <param name="dllName">Storage Library</param> | ||
82 | /// <returns>Successful or not</returns> | ||
83 | public bool LoadStorageDLL(string dllName) | ||
84 | { | ||
85 | try | ||
86 | { | ||
87 | Assembly pluginAssembly = Assembly.LoadFrom(dllName); | ||
88 | ILocalStorage store = null; | ||
89 | |||
90 | foreach (Type pluginType in pluginAssembly.GetTypes()) | ||
91 | { | ||
92 | if (pluginType.IsPublic) | ||
93 | { | ||
94 | if (!pluginType.IsAbstract) | ||
95 | { | ||
96 | Type typeInterface = pluginType.GetInterface("ILocalStorage", true); | ||
97 | |||
98 | if (typeInterface != null) | ||
99 | { | ||
100 | ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); | ||
101 | store = plug; | ||
102 | |||
103 | store.Initialise(this.m_datastore); | ||
104 | break; | ||
105 | } | ||
106 | |||
107 | typeInterface = null; | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | pluginAssembly = null; | ||
112 | this.localStorage = store; | ||
113 | return (store == null); | ||
114 | } | ||
115 | catch (Exception e) | ||
116 | { | ||
117 | OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadStorageDLL() - Failed with exception " + e.ToString()); | ||
118 | return false; | ||
119 | } | ||
120 | } | ||
121 | |||
122 | |||
123 | /// <summary> | ||
124 | /// Send the region heightmap to the client | ||
125 | /// </summary> | ||
126 | /// <param name="RemoteClient">Client to send to</param> | ||
127 | public virtual void SendLayerData(IClientAPI RemoteClient) | ||
128 | { | ||
129 | RemoteClient.SendLayerData(Terrain.getHeights1D()); | ||
130 | } | ||
131 | |||
132 | /// <summary> | ||
133 | /// Sends a specified patch to a client | ||
134 | /// </summary> | ||
135 | /// <param name="px">Patch coordinate (x) 0..16</param> | ||
136 | /// <param name="py">Patch coordinate (y) 0..16</param> | ||
137 | /// <param name="RemoteClient">The client to send to</param> | ||
138 | public virtual void SendLayerData(int px, int py, IClientAPI RemoteClient) | ||
139 | { | ||
140 | RemoteClient.SendLayerData(px, py, Terrain.getHeights1D()); | ||
141 | } | ||
142 | |||
143 | #endregion | ||
144 | |||
145 | #region Add/Remove Agent/Avatar | ||
146 | /// <summary> | ||
147 | /// | ||
148 | /// </summary> | ||
149 | /// <param name="remoteClient"></param> | ||
150 | /// <param name="agentID"></param> | ||
151 | /// <param name="child"></param> | ||
152 | public abstract void AddNewClient(IClientAPI remoteClient, LLUUID agentID, bool child); | ||
153 | |||
154 | /// <summary> | ||
155 | /// | ||
156 | /// </summary> | ||
157 | /// <param name="agentID"></param> | ||
158 | public abstract void RemoveClient(LLUUID agentID); | ||
159 | |||
160 | #endregion | ||
161 | |||
162 | /// <summary> | ||
163 | /// | ||
164 | /// </summary> | ||
165 | /// <returns></returns> | ||
166 | public virtual RegionInfo RegionInfo | ||
167 | { | ||
168 | get { return this.m_regInfo; } | ||
169 | } | ||
170 | |||
171 | public object SyncRoot | ||
172 | { | ||
173 | get { return m_syncRoot; } | ||
174 | } | ||
175 | |||
176 | public uint NextLocalId | ||
177 | { | ||
178 | get { return m_nextLocalId++; } | ||
179 | } | ||
180 | |||
181 | #region Shutdown | ||
182 | /// <summary> | ||
183 | /// Tidy before shutdown | ||
184 | /// </summary> | ||
185 | public virtual void Close() | ||
186 | { | ||
187 | try | ||
188 | { | ||
189 | this.localStorage.ShutDown(); | ||
190 | } | ||
191 | catch (Exception e) | ||
192 | { | ||
193 | OpenSim.Framework.Console.MainLog.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, "World.cs: Close() - Failed with exception " + e.ToString()); | ||
194 | } | ||
195 | } | ||
196 | |||
197 | #endregion | ||
198 | |||
199 | |||
200 | } | ||
201 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/SceneEvents.cs b/OpenSim/Region/Simulation/Scenes/SceneEvents.cs new file mode 100644 index 0000000..2898578 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/SceneEvents.cs | |||
@@ -0,0 +1,52 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | namespace OpenSim.Region.Scenes | ||
6 | { | ||
7 | /// <summary> | ||
8 | /// A class for triggering remote scene events. | ||
9 | /// </summary> | ||
10 | public class EventManager | ||
11 | { | ||
12 | public delegate void OnFrameDelegate(); | ||
13 | public event OnFrameDelegate OnFrame; | ||
14 | |||
15 | public delegate void OnNewPresenceDelegate(ScenePresence presence); | ||
16 | public event OnNewPresenceDelegate OnNewPresence; | ||
17 | |||
18 | public delegate void OnNewPrimitiveDelegate(Primitive prim); | ||
19 | public event OnNewPrimitiveDelegate OnNewPrimitive; | ||
20 | |||
21 | public delegate void OnRemovePresenceDelegate(libsecondlife.LLUUID uuid); | ||
22 | public event OnRemovePresenceDelegate OnRemovePresence; | ||
23 | |||
24 | public void TriggerOnFrame() | ||
25 | { | ||
26 | if (OnFrame != null) | ||
27 | { | ||
28 | OnFrame(); | ||
29 | } | ||
30 | } | ||
31 | |||
32 | public void TriggerOnNewPrimitive(Primitive prim) | ||
33 | { | ||
34 | if (OnNewPrimitive != null) | ||
35 | OnNewPrimitive(prim); | ||
36 | } | ||
37 | |||
38 | public void TriggerOnNewPresence(ScenePresence presence) | ||
39 | { | ||
40 | if (OnNewPresence != null) | ||
41 | OnNewPresence(presence); | ||
42 | } | ||
43 | |||
44 | public void TriggerOnRemovePresence(libsecondlife.LLUUID uuid) | ||
45 | { | ||
46 | if (OnRemovePresence != null) | ||
47 | { | ||
48 | OnRemovePresence(uuid); | ||
49 | } | ||
50 | } | ||
51 | } | ||
52 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/SceneObject.cs b/OpenSim/Region/Simulation/Scenes/SceneObject.cs new file mode 100644 index 0000000..5df87bf --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/SceneObject.cs | |||
@@ -0,0 +1,128 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using OpenSim.Framework.Interfaces; | ||
34 | using OpenSim.Physics.Manager; | ||
35 | using OpenSim.Framework.Types; | ||
36 | using OpenSim.Framework.Inventory; | ||
37 | |||
38 | namespace OpenSim.Region.Scenes | ||
39 | { | ||
40 | public class SceneObject : Entity | ||
41 | { | ||
42 | private LLUUID rootUUID; | ||
43 | //private Dictionary<LLUUID, Primitive> ChildPrimitives = new Dictionary<LLUUID, Primitive>(); | ||
44 | protected Primitive rootPrimitive; | ||
45 | private Scene m_world; | ||
46 | protected ulong regionHandle; | ||
47 | |||
48 | /// <summary> | ||
49 | /// | ||
50 | /// </summary> | ||
51 | public SceneObject() | ||
52 | { | ||
53 | |||
54 | } | ||
55 | |||
56 | /// <summary> | ||
57 | /// | ||
58 | /// </summary> | ||
59 | /// <param name="addPacket"></param> | ||
60 | /// <param name="agentID"></param> | ||
61 | /// <param name="localID"></param> | ||
62 | public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID) | ||
63 | { | ||
64 | this.rootPrimitive = new Primitive( this.regionHandle, this.m_world, addPacket, agentID, localID); | ||
65 | } | ||
66 | |||
67 | /// <summary> | ||
68 | /// | ||
69 | /// </summary> | ||
70 | /// <param name="data"></param> | ||
71 | public void CreateFromBytes(byte[] data) | ||
72 | { | ||
73 | |||
74 | } | ||
75 | |||
76 | /// <summary> | ||
77 | /// | ||
78 | /// </summary> | ||
79 | public override void update() | ||
80 | { | ||
81 | |||
82 | } | ||
83 | |||
84 | /// <summary> | ||
85 | /// | ||
86 | /// </summary> | ||
87 | public override void BackUp() | ||
88 | { | ||
89 | |||
90 | } | ||
91 | |||
92 | /// <summary> | ||
93 | /// | ||
94 | /// </summary> | ||
95 | /// <param name="client"></param> | ||
96 | public void GetProperites(IClientAPI client) | ||
97 | { | ||
98 | //needs changing | ||
99 | ObjectPropertiesPacket proper = new ObjectPropertiesPacket(); | ||
100 | proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1]; | ||
101 | proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock(); | ||
102 | proper.ObjectData[0].ItemID = LLUUID.Zero; | ||
103 | proper.ObjectData[0].CreationDate = (ulong)this.rootPrimitive.primData.CreationDate; | ||
104 | proper.ObjectData[0].CreatorID = this.rootPrimitive.primData.OwnerID; | ||
105 | proper.ObjectData[0].FolderID = LLUUID.Zero; | ||
106 | proper.ObjectData[0].FromTaskID = LLUUID.Zero; | ||
107 | proper.ObjectData[0].GroupID = LLUUID.Zero; | ||
108 | proper.ObjectData[0].InventorySerial = 0; | ||
109 | proper.ObjectData[0].LastOwnerID = LLUUID.Zero; | ||
110 | proper.ObjectData[0].ObjectID = this.uuid; | ||
111 | proper.ObjectData[0].OwnerID = this.rootPrimitive.primData.OwnerID; | ||
112 | proper.ObjectData[0].TouchName = new byte[0]; | ||
113 | proper.ObjectData[0].TextureID = new byte[0]; | ||
114 | proper.ObjectData[0].SitName = new byte[0]; | ||
115 | proper.ObjectData[0].Name = new byte[0]; | ||
116 | proper.ObjectData[0].Description = new byte[0]; | ||
117 | proper.ObjectData[0].OwnerMask = this.rootPrimitive.primData.OwnerMask; | ||
118 | proper.ObjectData[0].NextOwnerMask = this.rootPrimitive.primData.NextOwnerMask; | ||
119 | proper.ObjectData[0].GroupMask = this.rootPrimitive.primData.GroupMask; | ||
120 | proper.ObjectData[0].EveryoneMask = this.rootPrimitive.primData.EveryoneMask; | ||
121 | proper.ObjectData[0].BaseMask = this.rootPrimitive.primData.BaseMask; | ||
122 | |||
123 | client.OutPacket(proper); | ||
124 | |||
125 | } | ||
126 | |||
127 | } | ||
128 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/ScenePresence.Animations.cs b/OpenSim/Region/Simulation/Scenes/ScenePresence.Animations.cs new file mode 100644 index 0000000..f0a8721 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/ScenePresence.Animations.cs | |||
@@ -0,0 +1,76 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using System.Xml; | ||
33 | |||
34 | namespace OpenSim.Region.Scenes | ||
35 | { | ||
36 | partial class ScenePresence | ||
37 | { | ||
38 | public class AvatarAnimations | ||
39 | { | ||
40 | |||
41 | public Dictionary<string, LLUUID> AnimsLLUUID = new Dictionary<string, LLUUID>(); | ||
42 | public Dictionary<LLUUID, string> AnimsNames = new Dictionary<LLUUID, string>(); | ||
43 | |||
44 | public AvatarAnimations() | ||
45 | { | ||
46 | } | ||
47 | |||
48 | public void LoadAnims() | ||
49 | { | ||
50 | //OpenSim.Framework.Console.MainLog.Instance.Verbose("Avatar.cs:LoadAnims() - Loading avatar animations"); | ||
51 | XmlTextReader reader = new XmlTextReader("data/avataranimations.xml"); | ||
52 | |||
53 | XmlDocument doc = new XmlDocument(); | ||
54 | doc.Load(reader); | ||
55 | foreach (XmlNode nod in doc.DocumentElement.ChildNodes) | ||
56 | { | ||
57 | |||
58 | if (nod.Attributes["name"] != null) | ||
59 | { | ||
60 | AnimsLLUUID.Add(nod.Attributes["name"].Value, nod.InnerText); | ||
61 | } | ||
62 | |||
63 | } | ||
64 | |||
65 | reader.Close(); | ||
66 | |||
67 | // OpenSim.Framework.Console.MainLog.Instance.Verbose("Loaded " + AnimsLLUUID.Count.ToString() + " animation(s)"); | ||
68 | |||
69 | foreach (KeyValuePair<string, LLUUID> kp in OpenSim.Region.Scenes.ScenePresence.Animations.AnimsLLUUID) | ||
70 | { | ||
71 | AnimsNames.Add(kp.Value, kp.Key); | ||
72 | } | ||
73 | } | ||
74 | } | ||
75 | } | ||
76 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/ScenePresence.Body.cs b/OpenSim/Region/Simulation/Scenes/ScenePresence.Body.cs new file mode 100644 index 0000000..d21b11f --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/ScenePresence.Body.cs | |||
@@ -0,0 +1,90 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using libsecondlife.Packets; | ||
33 | using OpenSim.Physics.Manager; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Framework.Types; | ||
36 | |||
37 | namespace OpenSim.Region.Scenes | ||
38 | { | ||
39 | partial class ScenePresence | ||
40 | { | ||
41 | public class Avatar : IScenePresenceBody | ||
42 | { | ||
43 | public Avatar() | ||
44 | { | ||
45 | |||
46 | } | ||
47 | |||
48 | public void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation) | ||
49 | { | ||
50 | } | ||
51 | |||
52 | public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam) | ||
53 | { | ||
54 | } | ||
55 | |||
56 | public void SendOurAppearance(IClientAPI OurClient) | ||
57 | { | ||
58 | } | ||
59 | |||
60 | public void SendAppearanceToOtherAgent(ScenePresence avatarInfo) | ||
61 | { | ||
62 | } | ||
63 | } | ||
64 | |||
65 | public class ChildAgent : IScenePresenceBody //is a ghost | ||
66 | { | ||
67 | public ChildAgent() | ||
68 | { | ||
69 | |||
70 | } | ||
71 | |||
72 | public void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation) | ||
73 | { | ||
74 | } | ||
75 | |||
76 | public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam) | ||
77 | { | ||
78 | } | ||
79 | |||
80 | public void SendOurAppearance(IClientAPI OurClient) | ||
81 | { | ||
82 | } | ||
83 | |||
84 | public void SendAppearanceToOtherAgent(ScenePresence avatarInfo) | ||
85 | { | ||
86 | } | ||
87 | } | ||
88 | } | ||
89 | |||
90 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/ScenePresence.cs b/OpenSim/Region/Simulation/Scenes/ScenePresence.cs new file mode 100644 index 0000000..45d3fed --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/ScenePresence.cs | |||
@@ -0,0 +1,525 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Text; | ||
32 | using libsecondlife; | ||
33 | using libsecondlife.Packets; | ||
34 | using OpenSim.Physics.Manager; | ||
35 | using OpenSim.Framework.Inventory; | ||
36 | using OpenSim.Framework.Interfaces; | ||
37 | using OpenSim.Framework.Types; | ||
38 | using Axiom.MathLib; | ||
39 | |||
40 | namespace OpenSim.Region.Scenes | ||
41 | { | ||
42 | public partial class ScenePresence : Entity | ||
43 | { | ||
44 | public static bool PhysicsEngineFlying = false; | ||
45 | public static AvatarAnimations Animations; | ||
46 | public static byte[] DefaultTexture; | ||
47 | public string firstname; | ||
48 | public string lastname; | ||
49 | public IClientAPI ControllingClient; | ||
50 | public LLUUID current_anim; | ||
51 | public int anim_seq; | ||
52 | private bool updateflag = false; | ||
53 | private byte movementflag = 0; | ||
54 | private List<NewForce> forcesList = new List<NewForce>(); | ||
55 | private short _updateCount = 0; | ||
56 | private Axiom.MathLib.Quaternion bodyRot; | ||
57 | private LLObject.TextureEntry avatarAppearanceTexture = null; | ||
58 | private byte[] visualParams; | ||
59 | private AvatarWearable[] Wearables; | ||
60 | private LLVector3 positionLastFrame = new LLVector3(0, 0, 0); | ||
61 | private ulong m_regionHandle; | ||
62 | private bool childAgent = false; | ||
63 | private bool newForce = false; | ||
64 | private bool newAvatar = false; | ||
65 | private IScenePresenceBody m_body; | ||
66 | |||
67 | protected RegionInfo m_regionInfo; | ||
68 | |||
69 | #region Properties | ||
70 | /// <summary> | ||
71 | /// | ||
72 | /// </summary> | ||
73 | public PhysicsActor PhysActor | ||
74 | { | ||
75 | set | ||
76 | { | ||
77 | this._physActor = value; | ||
78 | } | ||
79 | get | ||
80 | { | ||
81 | return _physActor; | ||
82 | } | ||
83 | } | ||
84 | #endregion | ||
85 | |||
86 | #region Constructor(s) | ||
87 | /// <summary> | ||
88 | /// | ||
89 | /// </summary> | ||
90 | /// <param name="theClient"></param> | ||
91 | /// <param name="world"></param> | ||
92 | /// <param name="clientThreads"></param> | ||
93 | /// <param name="regionDat"></param> | ||
94 | public ScenePresence(IClientAPI theClient, Scene world, RegionInfo reginfo) | ||
95 | { | ||
96 | |||
97 | m_world = world; | ||
98 | this.uuid = theClient.AgentId; | ||
99 | |||
100 | m_regionInfo = reginfo; | ||
101 | m_regionHandle = reginfo.RegionHandle; | ||
102 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Avatar.cs "); | ||
103 | ControllingClient = theClient; | ||
104 | this.firstname = ControllingClient.FirstName; | ||
105 | this.lastname = ControllingClient.LastName; | ||
106 | m_localId = m_world.NextLocalId; | ||
107 | Pos = ControllingClient.StartPos; | ||
108 | visualParams = new byte[218]; | ||
109 | for (int i = 0; i < 218; i++) | ||
110 | { | ||
111 | visualParams[i] = 100; | ||
112 | } | ||
113 | |||
114 | Wearables = AvatarWearable.DefaultWearables; | ||
115 | |||
116 | this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); | ||
117 | |||
118 | //register for events | ||
119 | ControllingClient.OnRequestWearables += this.SendOurAppearance; | ||
120 | //ControllingClient.OnSetAppearance += new SetAppearance(this.SetAppearance); | ||
121 | ControllingClient.OnCompleteMovementToRegion += this.CompleteMovement; | ||
122 | ControllingClient.OnCompleteMovementToRegion += this.SendInitialData; | ||
123 | ControllingClient.OnAgentUpdate += this.HandleAgentUpdate; | ||
124 | // ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack); | ||
125 | // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); | ||
126 | //ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); | ||
127 | |||
128 | } | ||
129 | #endregion | ||
130 | |||
131 | #region Status Methods | ||
132 | /// <summary> | ||
133 | /// Not Used, most likely can be deleted | ||
134 | /// </summary> | ||
135 | /// <param name="status"></param> | ||
136 | public void ChildStatusChange(bool status) | ||
137 | { | ||
138 | this.childAgent = status; | ||
139 | |||
140 | if (this.childAgent == true) | ||
141 | { | ||
142 | this.Velocity = new LLVector3(0, 0, 0); | ||
143 | this.Pos = new LLVector3(128, 128, 70); | ||
144 | |||
145 | } | ||
146 | } | ||
147 | |||
148 | /// <summary> | ||
149 | /// | ||
150 | /// </summary> | ||
151 | /// <param name="pos"></param> | ||
152 | public void MakeAvatar(LLVector3 pos) | ||
153 | { | ||
154 | //this.childAvatar = false; | ||
155 | this.Pos = pos; | ||
156 | this.newAvatar = true; | ||
157 | this.childAgent = false; | ||
158 | } | ||
159 | |||
160 | protected void MakeChildAgent() | ||
161 | { | ||
162 | this.Velocity = new LLVector3(0, 0, 0); | ||
163 | this.Pos = new LLVector3(128, 128, 70); | ||
164 | this.childAgent = true; | ||
165 | } | ||
166 | |||
167 | /// <summary> | ||
168 | /// | ||
169 | /// </summary> | ||
170 | /// <param name="pos"></param> | ||
171 | public void Teleport(LLVector3 pos) | ||
172 | { | ||
173 | this.Pos = pos; | ||
174 | this.SendTerseUpdateToALLClients(); | ||
175 | } | ||
176 | |||
177 | /// <summary> | ||
178 | /// | ||
179 | /// </summary> | ||
180 | public void StopMovement() | ||
181 | { | ||
182 | |||
183 | } | ||
184 | #endregion | ||
185 | |||
186 | #region Event Handlers | ||
187 | /// <summary> | ||
188 | /// | ||
189 | /// </summary> | ||
190 | /// <param name="texture"></param> | ||
191 | /// <param name="visualParam"></param> | ||
192 | public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam) | ||
193 | { | ||
194 | |||
195 | } | ||
196 | |||
197 | /// <summary> | ||
198 | /// Complete Avatar's movement into the region | ||
199 | /// </summary> | ||
200 | public void CompleteMovement() | ||
201 | { | ||
202 | LLVector3 look = this.Velocity; | ||
203 | if ((look.X == 0) && (look.Y == 0) && (look.Z == 0)) | ||
204 | { | ||
205 | look = new LLVector3(0.99f, 0.042f, 0); | ||
206 | } | ||
207 | this.ControllingClient.MoveAgentIntoRegion(m_regionInfo, Pos, look); | ||
208 | if (this.childAgent) | ||
209 | { | ||
210 | this.childAgent = false; | ||
211 | } | ||
212 | } | ||
213 | |||
214 | /// <summary> | ||
215 | /// | ||
216 | /// </summary> | ||
217 | /// <param name="pack"></param> | ||
218 | public void HandleAgentUpdate(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation) | ||
219 | { | ||
220 | if ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_AT_POS) != 0) | ||
221 | { | ||
222 | Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | ||
223 | if (((movementflag & 1) == 0) || (q != this.bodyRot)) | ||
224 | { | ||
225 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0); | ||
226 | this.AddNewMovement(v3, q); | ||
227 | movementflag = 1; | ||
228 | this.bodyRot = q; | ||
229 | } | ||
230 | } | ||
231 | else if ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_AT_NEG) != 0) | ||
232 | { | ||
233 | Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | ||
234 | if (((movementflag & 2) == 0) || (q != this.bodyRot)) | ||
235 | { | ||
236 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(-1, 0, 0); | ||
237 | this.AddNewMovement(v3, q); | ||
238 | movementflag = 2; | ||
239 | this.bodyRot = q; | ||
240 | } | ||
241 | } | ||
242 | else | ||
243 | { | ||
244 | if ((movementflag) != 0) | ||
245 | { | ||
246 | NewForce newVelocity = new NewForce(); | ||
247 | newVelocity.X = 0; | ||
248 | newVelocity.Y = 0; | ||
249 | newVelocity.Z = 0; | ||
250 | this.forcesList.Add(newVelocity); | ||
251 | movementflag = 0; | ||
252 | } | ||
253 | } | ||
254 | |||
255 | } | ||
256 | |||
257 | protected void AddNewMovement(Axiom.MathLib.Vector3 vec, Axiom.MathLib.Quaternion rotation) | ||
258 | { | ||
259 | NewForce newVelocity = new NewForce(); | ||
260 | Axiom.MathLib.Vector3 direc = rotation * vec; | ||
261 | direc.Normalize(); | ||
262 | |||
263 | direc = direc * ((0.03f) * 128f); | ||
264 | if (this._physActor.Flying) | ||
265 | direc *= 4; | ||
266 | |||
267 | newVelocity.X = direc.x; | ||
268 | newVelocity.Y = direc.y; | ||
269 | newVelocity.Z = direc.z; | ||
270 | this.forcesList.Add(newVelocity); | ||
271 | } | ||
272 | |||
273 | #endregion | ||
274 | |||
275 | #region Overridden Methods | ||
276 | /// <summary> | ||
277 | /// | ||
278 | /// </summary> | ||
279 | public override void LandRenegerated() | ||
280 | { | ||
281 | |||
282 | } | ||
283 | |||
284 | /// <summary> | ||
285 | /// | ||
286 | /// </summary> | ||
287 | public override void update() | ||
288 | { | ||
289 | if (this.childAgent == false) | ||
290 | { | ||
291 | if (this.newForce) | ||
292 | { | ||
293 | this.SendTerseUpdateToALLClients(); | ||
294 | _updateCount = 0; | ||
295 | } | ||
296 | else if (movementflag != 0) | ||
297 | { | ||
298 | _updateCount++; | ||
299 | if (_updateCount > 3) | ||
300 | { | ||
301 | this.SendTerseUpdateToALLClients(); | ||
302 | _updateCount = 0; | ||
303 | } | ||
304 | } | ||
305 | |||
306 | this.CheckForBorderCrossing(); | ||
307 | } | ||
308 | } | ||
309 | #endregion | ||
310 | |||
311 | #region Update Client(s) | ||
312 | /// <summary> | ||
313 | /// | ||
314 | /// </summary> | ||
315 | /// <param name="RemoteClient"></param> | ||
316 | public void SendTerseUpdateToClient(IClientAPI RemoteClient) | ||
317 | { | ||
318 | LLVector3 pos = this.Pos; | ||
319 | LLVector3 vel = this.Velocity; | ||
320 | RemoteClient.SendAvatarTerseUpdate(this.m_regionHandle, 64096, this.LocalId, new LLVector3(pos.X, pos.Y, pos.Z), new LLVector3(vel.X, vel.Y, vel.Z)); | ||
321 | } | ||
322 | |||
323 | /// <summary> | ||
324 | /// | ||
325 | /// </summary> | ||
326 | public void SendTerseUpdateToALLClients() | ||
327 | { | ||
328 | List<ScenePresence> avatars = this.m_world.RequestAvatarList(); | ||
329 | for (int i = 0; i < avatars.Count; i++) | ||
330 | { | ||
331 | this.SendTerseUpdateToClient(avatars[i].ControllingClient); | ||
332 | } | ||
333 | } | ||
334 | |||
335 | /// <summary> | ||
336 | /// | ||
337 | /// </summary> | ||
338 | /// <param name="remoteAvatar"></param> | ||
339 | public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar) | ||
340 | { | ||
341 | remoteAvatar.ControllingClient.SendAvatarData(m_regionInfo.RegionHandle, this.firstname, this.lastname, this.uuid, this.LocalId, this.Pos, DefaultTexture); | ||
342 | } | ||
343 | |||
344 | /// <summary> | ||
345 | /// | ||
346 | /// </summary> | ||
347 | public void SendInitialData() | ||
348 | { | ||
349 | this.ControllingClient.SendAvatarData(m_regionInfo.RegionHandle, this.firstname, this.lastname, this.uuid, this.LocalId, this.Pos, DefaultTexture); | ||
350 | if (this.newAvatar) | ||
351 | { | ||
352 | this.m_world.InformClientOfNeighbours(this.ControllingClient); | ||
353 | this.newAvatar = false; | ||
354 | } | ||
355 | } | ||
356 | |||
357 | /// <summary> | ||
358 | /// | ||
359 | /// </summary> | ||
360 | /// <param name="OurClient"></param> | ||
361 | public void SendOurAppearance(IClientAPI OurClient) | ||
362 | { | ||
363 | this.ControllingClient.SendWearables(this.Wearables); | ||
364 | } | ||
365 | |||
366 | /// <summary> | ||
367 | /// | ||
368 | /// </summary> | ||
369 | /// <param name="avatarInfo"></param> | ||
370 | public void SendAppearanceToOtherAgent(ScenePresence avatarInfo) | ||
371 | { | ||
372 | |||
373 | } | ||
374 | |||
375 | /// <summary> | ||
376 | /// | ||
377 | /// </summary> | ||
378 | /// <param name="animID"></param> | ||
379 | /// <param name="seq"></param> | ||
380 | public void SendAnimPack(LLUUID animID, int seq) | ||
381 | { | ||
382 | |||
383 | |||
384 | } | ||
385 | |||
386 | /// <summary> | ||
387 | /// | ||
388 | /// </summary> | ||
389 | public void SendAnimPack() | ||
390 | { | ||
391 | |||
392 | } | ||
393 | #endregion | ||
394 | |||
395 | #region Border Crossing Methods | ||
396 | /// <summary> | ||
397 | /// | ||
398 | /// </summary> | ||
399 | protected void CheckForBorderCrossing() | ||
400 | { | ||
401 | LLVector3 pos2 = this.Pos; | ||
402 | LLVector3 vel = this.Velocity; | ||
403 | |||
404 | float timeStep = 0.2f; | ||
405 | pos2.X = pos2.X + (vel.X * timeStep); | ||
406 | pos2.Y = pos2.Y + (vel.Y * timeStep); | ||
407 | pos2.Z = pos2.Z + (vel.Z * timeStep); | ||
408 | |||
409 | if ((pos2.X < 0) || (pos2.X > 256)) | ||
410 | { | ||
411 | this.CrossToNewRegion(); | ||
412 | } | ||
413 | |||
414 | if ((pos2.Y < 0) || (pos2.Y > 256)) | ||
415 | { | ||
416 | this.CrossToNewRegion(); | ||
417 | } | ||
418 | } | ||
419 | |||
420 | /// <summary> | ||
421 | /// | ||
422 | /// </summary> | ||
423 | protected void CrossToNewRegion() | ||
424 | { | ||
425 | LLVector3 pos = this.Pos; | ||
426 | LLVector3 newpos = new LLVector3(pos.X, pos.Y, pos.Z); | ||
427 | uint neighbourx = this.m_regionInfo.RegionLocX; | ||
428 | uint neighboury = this.m_regionInfo.RegionLocY; | ||
429 | |||
430 | if (pos.X < 2) | ||
431 | { | ||
432 | neighbourx -= 1; | ||
433 | newpos.X = 254; | ||
434 | } | ||
435 | if (pos.X > 253) | ||
436 | { | ||
437 | neighbourx += 1; | ||
438 | newpos.X = 1; | ||
439 | } | ||
440 | if (pos.Y < 2) | ||
441 | { | ||
442 | neighboury -= 1; | ||
443 | newpos.Y = 254; | ||
444 | } | ||
445 | if (pos.Y > 253) | ||
446 | { | ||
447 | neighboury += 1; | ||
448 | newpos.Y = 1; | ||
449 | } | ||
450 | |||
451 | LLVector3 vel = this.velocity; | ||
452 | ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * 256), (uint)(neighboury * 256)); | ||
453 | RegionInfo neighbourRegion = this.m_world.RequestNeighbouringRegionInfo(neighbourHandle); | ||
454 | if (neighbourRegion != null) | ||
455 | { | ||
456 | bool res = this.m_world.InformNeighbourOfCrossing(neighbourHandle, this.ControllingClient.AgentId, newpos); | ||
457 | if (res) | ||
458 | { | ||
459 | this.MakeChildAgent(); | ||
460 | this.ControllingClient.CrossRegion(neighbourHandle, newpos, vel, System.Net.IPAddress.Parse(neighbourRegion.CommsIPListenAddr), (ushort)neighbourRegion.CommsIPListenPort); | ||
461 | } | ||
462 | } | ||
463 | } | ||
464 | #endregion | ||
465 | |||
466 | /// <summary> | ||
467 | /// | ||
468 | /// </summary> | ||
469 | public static void LoadAnims() | ||
470 | { | ||
471 | |||
472 | } | ||
473 | |||
474 | /// <summary> | ||
475 | /// | ||
476 | /// </summary> | ||
477 | public override void updateMovement() | ||
478 | { | ||
479 | newForce = false; | ||
480 | lock (this.forcesList) | ||
481 | { | ||
482 | if (this.forcesList.Count > 0) | ||
483 | { | ||
484 | for (int i = 0; i < this.forcesList.Count; i++) | ||
485 | { | ||
486 | NewForce force = this.forcesList[i]; | ||
487 | |||
488 | this.updateflag = true; | ||
489 | this.Velocity = new LLVector3(force.X, force.Y, force.Z); | ||
490 | this.newForce = true; | ||
491 | } | ||
492 | for (int i = 0; i < this.forcesList.Count; i++) | ||
493 | { | ||
494 | this.forcesList.RemoveAt(0); | ||
495 | } | ||
496 | } | ||
497 | } | ||
498 | } | ||
499 | |||
500 | public static void LoadTextureFile(string name) | ||
501 | { | ||
502 | FileInfo fInfo = new FileInfo(name); | ||
503 | long numBytes = fInfo.Length; | ||
504 | FileStream fStream = new FileStream(name, FileMode.Open, FileAccess.Read); | ||
505 | BinaryReader br = new BinaryReader(fStream); | ||
506 | byte[] data1 = br.ReadBytes((int)numBytes); | ||
507 | br.Close(); | ||
508 | fStream.Close(); | ||
509 | DefaultTexture = data1; | ||
510 | } | ||
511 | |||
512 | public class NewForce | ||
513 | { | ||
514 | public float X; | ||
515 | public float Y; | ||
516 | public float Z; | ||
517 | |||
518 | public NewForce() | ||
519 | { | ||
520 | |||
521 | } | ||
522 | } | ||
523 | } | ||
524 | |||
525 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/scripting/IScriptContext.cs b/OpenSim/Region/Simulation/Scenes/scripting/IScriptContext.cs new file mode 100644 index 0000000..daa1b92 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/scripting/IScriptContext.cs | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Region.Scripting | ||
34 | { | ||
35 | public interface IScriptContext | ||
36 | { | ||
37 | IScriptEntity Entity { get; } | ||
38 | bool TryGetRandomAvatar(out IScriptReadonlyEntity avatar); | ||
39 | } | ||
40 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/scripting/IScriptEntity.cs b/OpenSim/Region/Simulation/Scenes/scripting/IScriptEntity.cs new file mode 100644 index 0000000..44b886f --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/scripting/IScriptEntity.cs | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Region.Scripting | ||
34 | { | ||
35 | public interface IScriptReadonlyEntity | ||
36 | { | ||
37 | LLVector3 Pos { get; } | ||
38 | string Name { get; } | ||
39 | } | ||
40 | |||
41 | public interface IScriptEntity | ||
42 | { | ||
43 | LLVector3 Pos { get; set; } | ||
44 | string Name { get; } | ||
45 | } | ||
46 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/scripting/IScriptHandler.cs b/OpenSim/Region/Simulation/Scenes/scripting/IScriptHandler.cs new file mode 100644 index 0000000..797998d --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/scripting/IScriptHandler.cs | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | using OpenSim.Physics.Manager; | ||
33 | using OpenSim.Region; | ||
34 | using OpenSim.Region.Scenes; | ||
35 | using Avatar=OpenSim.Region.Scenes.ScenePresence; | ||
36 | using Primitive = OpenSim.Region.Scenes.Primitive; | ||
37 | |||
38 | namespace OpenSim.Region.Scripting | ||
39 | { | ||
40 | public delegate void ScriptEventHandler(IScriptContext context); | ||
41 | |||
42 | public class ScriptHandler : IScriptContext, IScriptEntity, IScriptReadonlyEntity | ||
43 | { | ||
44 | private Scene m_world; | ||
45 | private Script m_script; | ||
46 | private Entity m_entity; | ||
47 | |||
48 | public LLUUID ScriptId | ||
49 | { | ||
50 | get | ||
51 | { | ||
52 | return m_script.ScriptId; | ||
53 | } | ||
54 | } | ||
55 | |||
56 | public void OnFrame() | ||
57 | { | ||
58 | m_script.OnFrame(this); | ||
59 | } | ||
60 | |||
61 | public ScriptHandler(Script script, Entity entity, Scene world) | ||
62 | { | ||
63 | m_script = script; | ||
64 | m_entity = entity; | ||
65 | m_world = world; | ||
66 | } | ||
67 | |||
68 | #region IScriptContext Members | ||
69 | |||
70 | IScriptEntity IScriptContext.Entity | ||
71 | { | ||
72 | get | ||
73 | { | ||
74 | return this; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | bool IScriptContext.TryGetRandomAvatar(out IScriptReadonlyEntity avatar) | ||
79 | { | ||
80 | foreach (Entity entity in m_world.Entities.Values ) | ||
81 | { | ||
82 | if( entity is Avatar ) | ||
83 | { | ||
84 | avatar = entity; | ||
85 | return true; | ||
86 | } | ||
87 | } | ||
88 | |||
89 | avatar = null; | ||
90 | return false; | ||
91 | } | ||
92 | |||
93 | #endregion | ||
94 | |||
95 | #region IScriptEntity and IScriptReadonlyEntity Members | ||
96 | |||
97 | public string Name | ||
98 | { | ||
99 | get | ||
100 | { | ||
101 | return m_entity.Name; | ||
102 | } | ||
103 | } | ||
104 | |||
105 | public LLVector3 Pos | ||
106 | { | ||
107 | get | ||
108 | { | ||
109 | return m_entity.Pos; | ||
110 | } | ||
111 | |||
112 | set | ||
113 | { | ||
114 | if (m_entity is Primitive) | ||
115 | { | ||
116 | Primitive prim = m_entity as Primitive; | ||
117 | // Of course, we really should have asked the physEngine if this is possible, and if not, returned false. | ||
118 | // prim.UpdatePosition( value ); | ||
119 | } | ||
120 | } | ||
121 | } | ||
122 | |||
123 | #endregion | ||
124 | } | ||
125 | |||
126 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/scripting/Script.cs b/OpenSim/Region/Simulation/Scenes/scripting/Script.cs new file mode 100644 index 0000000..1d01f3c --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/scripting/Script.cs | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Region.Scripting | ||
34 | { | ||
35 | public class Script | ||
36 | { | ||
37 | private LLUUID m_scriptId; | ||
38 | public virtual LLUUID ScriptId | ||
39 | { | ||
40 | get | ||
41 | { | ||
42 | return m_scriptId; | ||
43 | } | ||
44 | } | ||
45 | |||
46 | public Script( LLUUID scriptId ) | ||
47 | { | ||
48 | m_scriptId = scriptId; | ||
49 | } | ||
50 | |||
51 | public ScriptEventHandler OnFrame; | ||
52 | } | ||
53 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/scripting/ScriptFactory.cs b/OpenSim/Region/Simulation/Scenes/scripting/ScriptFactory.cs new file mode 100644 index 0000000..32ef046 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/scripting/ScriptFactory.cs | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Region.Scripting | ||
33 | { | ||
34 | public delegate Script ScriptFactory(); | ||
35 | } | ||
diff --git a/OpenSim/Region/Simulation/Scenes/scripting/Scripts/FollowRandomAvatar.cs b/OpenSim/Region/Simulation/Scenes/scripting/Scripts/FollowRandomAvatar.cs new file mode 100644 index 0000000..21f07a8 --- /dev/null +++ b/OpenSim/Region/Simulation/Scenes/scripting/Scripts/FollowRandomAvatar.cs | |||
@@ -0,0 +1,64 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using libsecondlife; | ||
32 | |||
33 | namespace OpenSim.Region.Scripting | ||
34 | { | ||
35 | public class FollowRandomAvatar : Script | ||
36 | { | ||
37 | public FollowRandomAvatar() | ||
38 | : base(LLUUID.Random()) | ||
39 | { | ||
40 | OnFrame += MyOnFrame; | ||
41 | } | ||
42 | |||
43 | private void MyOnFrame(IScriptContext context) | ||
44 | { | ||
45 | LLVector3 pos = context.Entity.Pos; | ||
46 | |||
47 | IScriptReadonlyEntity avatar; | ||
48 | |||
49 | if (context.TryGetRandomAvatar(out avatar)) | ||
50 | { | ||
51 | LLVector3 avatarPos = avatar.Pos; | ||
52 | |||
53 | float x = pos.X + ((float)avatarPos.X.CompareTo(pos.X)) / 2; | ||
54 | float y = pos.Y + ((float)avatarPos.Y.CompareTo(pos.Y)) / 2; | ||
55 | |||
56 | LLVector3 newPos = new LLVector3(x, y, pos.Z); | ||
57 | |||
58 | context.Entity.Pos = newPos; | ||
59 | } | ||
60 | } | ||
61 | } | ||
62 | |||
63 | |||
64 | } | ||
diff --git a/OpenSim/Region/Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs new file mode 100644 index 0000000..ab3c34c --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs | |||
@@ -0,0 +1,117 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | // BDB Support | ||
30 | // Apparently broken on Mono | ||
31 | |||
32 | using System; | ||
33 | using System.Collections.Generic; | ||
34 | using System.Data; | ||
35 | using libsecondlife; | ||
36 | using OpenSim.Framework.Interfaces; | ||
37 | using OpenSim.Framework.Types; | ||
38 | using BerkeleyDb; | ||
39 | using Kds.Serialization; | ||
40 | using Kds.Serialization.Buffer; | ||
41 | |||
42 | namespace OpenSim.Storage.LocalStorageBDB | ||
43 | { | ||
44 | public class BDBLocalStorage : ILocalStorage | ||
45 | { | ||
46 | const string simDbName = "localsim.db"; | ||
47 | |||
48 | DbHash sim; | ||
49 | Db DB; | ||
50 | //BEFormatter formatter; | ||
51 | |||
52 | public BDBLocalStorage() | ||
53 | { | ||
54 | DB = new Db(DbCreateFlags.None); | ||
55 | sim = (DbHash)DB.Open(null, simDbName, null, BerkeleyDb.DbType.Hash, Db.OpenFlags.Create, 0); | ||
56 | //vendorDb = (DbBTree)db.Open(null, VendorDbName, null, DbType.BTree, Db.OpenFlags.Create, 0); | ||
57 | } | ||
58 | |||
59 | public void Initialise(string file) | ||
60 | { | ||
61 | // Blank | ||
62 | } | ||
63 | |||
64 | public void StorePrim(PrimData prim) | ||
65 | { | ||
66 | DbEntry key = new DbEntry(); | ||
67 | DbEntry data = new DbEntry(); | ||
68 | lock (sim) | ||
69 | { | ||
70 | sim.PutUnique(null, ref key, ref data, DbFile.WriteFlags.AutoCommit); | ||
71 | } | ||
72 | } | ||
73 | public void RemovePrim(LLUUID primID) | ||
74 | { | ||
75 | |||
76 | } | ||
77 | public void LoadPrimitives(ILocalStorageReceiver receiver) | ||
78 | { | ||
79 | |||
80 | } | ||
81 | public float[] LoadWorld() | ||
82 | { | ||
83 | return new float[65536]; | ||
84 | } | ||
85 | public void SaveMap(float[] heightmap) | ||
86 | { | ||
87 | |||
88 | } | ||
89 | |||
90 | public void SaveParcels(ParcelData[] parcel_data) | ||
91 | { | ||
92 | } | ||
93 | |||
94 | public void SaveParcel(ParcelData parcel) | ||
95 | { | ||
96 | } | ||
97 | |||
98 | public void RemoveParcel(ParcelData parcel) | ||
99 | { | ||
100 | } | ||
101 | |||
102 | public void RemoveAllParcels() | ||
103 | { | ||
104 | } | ||
105 | |||
106 | public void LoadParcels(ILocalStorageParcelReceiver recv) | ||
107 | { | ||
108 | recv.NoParcelDataFromStorage(); | ||
109 | } | ||
110 | |||
111 | public void ShutDown() | ||
112 | { | ||
113 | sim.GetDb().Close(); | ||
114 | DB.Close(); | ||
115 | } | ||
116 | } | ||
117 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Region.Storage.LocalStorageBerkeleyDB.csproj b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Region.Storage.LocalStorageBerkeleyDB.csproj new file mode 100644 index 0000000..b956c9b --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Region.Storage.LocalStorageBerkeleyDB.csproj | |||
@@ -0,0 +1,112 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{A4691E59-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Storage.LocalStorageBerkeleyDB</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Storage.LocalStorageBerkeleyDB</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Kds.Serialization.dll" > | ||
62 | <HintPath>..\..\..\..\bin\Kds.Serialization.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libdb_dotNET43.dll" > | ||
66 | <HintPath>..\..\..\..\bin\libdb_dotNET43.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="libsecondlife.dll" > | ||
70 | <HintPath>..\..\..\..\bin\libsecondlife.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System" > | ||
74 | <HintPath>System.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Data" > | ||
78 | <HintPath>System.Data.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="System.Xml" > | ||
82 | <HintPath>System.Xml.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | </ItemGroup> | ||
86 | <ItemGroup> | ||
87 | <ProjectReference Include="..\..\..\Framework\General\OpenSim.Framework.csproj"> | ||
88 | <Name>OpenSim.Framework</Name> | ||
89 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
90 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
91 | <Private>False</Private> | ||
92 | </ProjectReference> | ||
93 | <ProjectReference Include="..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
94 | <Name>OpenSim.Framework.Console</Name> | ||
95 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
96 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
97 | <Private>False</Private> | ||
98 | </ProjectReference> | ||
99 | </ItemGroup> | ||
100 | <ItemGroup> | ||
101 | <Compile Include="BDBLocalStorage.cs"> | ||
102 | <SubType>Code</SubType> | ||
103 | </Compile> | ||
104 | </ItemGroup> | ||
105 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
106 | <PropertyGroup> | ||
107 | <PreBuildEvent> | ||
108 | </PreBuildEvent> | ||
109 | <PostBuildEvent> | ||
110 | </PostBuildEvent> | ||
111 | </PropertyGroup> | ||
112 | </Project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Region.Storage.LocalStorageBerkeleyDB.csproj.user b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Region.Storage.LocalStorageBerkeleyDB.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Region.Storage.LocalStorageBerkeleyDB.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Storage.LocalStorageBerkeleyDB.dll.build b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Storage.LocalStorageBerkeleyDB.dll.build new file mode 100644 index 0000000..bc2d8ec --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageBerkeleyDB/OpenSim.Storage.LocalStorageBerkeleyDB.dll.build | |||
@@ -0,0 +1,46 @@ | |||
1 | <?xml version="1.0" ?> | ||
2 | <project name="OpenSim.Storage.LocalStorageBerkeleyDB" default="build"> | ||
3 | <target name="build"> | ||
4 | <echo message="Build Directory is ${project::get-base-directory()}/${build.dir}" /> | ||
5 | <mkdir dir="${project::get-base-directory()}/${build.dir}" /> | ||
6 | <copy todir="${project::get-base-directory()}/${build.dir}"> | ||
7 | <fileset basedir="${project::get-base-directory()}"> | ||
8 | </fileset> | ||
9 | </copy> | ||
10 | <csc target="library" debug="${build.debug}" unsafe="False" define="TRACE;DEBUG" output="${project::get-base-directory()}/${build.dir}/${project::get-name()}.dll"> | ||
11 | <resources prefix="OpenSim.Storage.LocalStorageBerkeleyDB" dynamicprefix="true" > | ||
12 | </resources> | ||
13 | <sources failonempty="true"> | ||
14 | <include name="BDBLocalStorage.cs" /> | ||
15 | </sources> | ||
16 | <references basedir="${project::get-base-directory()}"> | ||
17 | <lib> | ||
18 | <include name="${project::get-base-directory()}" /> | ||
19 | <include name="${project::get-base-directory()}/${build.dir}" /> | ||
20 | </lib> | ||
21 | <include name="../../../bin/Kds.Serialization.dll" /> | ||
22 | <include name="../../../bin/libdb_dotNET43.dll" /> | ||
23 | <include name="../../../bin/libsecondlife.dll" /> | ||
24 | <include name="../../../bin/OpenSim.Framework.dll" /> | ||
25 | <include name="../../../bin/OpenSim.Framework.Console.dll" /> | ||
26 | <include name="System.dll" /> | ||
27 | <include name="System.Data.dll" /> | ||
28 | <include name="System.Xml.dll" /> | ||
29 | </references> | ||
30 | </csc> | ||
31 | <echo message="Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/../../../bin/" /> | ||
32 | <mkdir dir="${project::get-base-directory()}/../../../bin/"/> | ||
33 | <copy todir="${project::get-base-directory()}/../../../bin/"> | ||
34 | <fileset basedir="${project::get-base-directory()}/${build.dir}/" > | ||
35 | <include name="*.dll"/> | ||
36 | <include name="*.exe"/> | ||
37 | </fileset> | ||
38 | </copy> | ||
39 | </target> | ||
40 | <target name="clean"> | ||
41 | <delete dir="${bin.dir}" failonerror="false" /> | ||
42 | <delete dir="${obj.dir}" failonerror="false" /> | ||
43 | </target> | ||
44 | <target name="doc" description="Creates documentation."> | ||
45 | </target> | ||
46 | </project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/AssemblyInfo.cs b/OpenSim/Region/Storage/LocalStorageDb4o/AssemblyInfo.cs new file mode 100644 index 0000000..ea2b62e --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageDb4o/AssemblyInfo.cs | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // Information about this assembly is defined by the following | ||
33 | // attributes. | ||
34 | // | ||
35 | // change them to the information which is associated with the assembly | ||
36 | // you compile. | ||
37 | |||
38 | [assembly: AssemblyTitle("Db4LocalStorage")] | ||
39 | [assembly: AssemblyDescription("")] | ||
40 | [assembly: AssemblyConfiguration("")] | ||
41 | [assembly: AssemblyCompany("")] | ||
42 | [assembly: AssemblyProduct("Db4LocalStorage")] | ||
43 | [assembly: AssemblyCopyright("")] | ||
44 | [assembly: AssemblyTrademark("")] | ||
45 | [assembly: AssemblyCulture("")] | ||
46 | |||
47 | // This sets the default COM visibility of types in the assembly to invisible. | ||
48 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
49 | [assembly: ComVisible(false)] | ||
50 | |||
51 | // The assembly version has following format : | ||
52 | // | ||
53 | // Major.Minor.Build.Revision | ||
54 | // | ||
55 | // You can specify all values by your own or you can build default build and revision | ||
56 | // numbers with the '*' character (the default): | ||
57 | |||
58 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs b/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs new file mode 100644 index 0000000..8e6b04d --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs | |||
@@ -0,0 +1,271 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using Db4objects.Db4o; | ||
31 | using Db4objects.Db4o.Query; | ||
32 | |||
33 | using libsecondlife; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Framework.Types; | ||
36 | using OpenSim.Framework.Console; | ||
37 | |||
38 | |||
39 | namespace OpenSim.Storage.LocalStorageDb4o | ||
40 | { | ||
41 | /// <summary> | ||
42 | /// | ||
43 | /// </summary> | ||
44 | public class Db4LocalStorage : ILocalStorage | ||
45 | { | ||
46 | private IObjectContainer db; | ||
47 | private string datastore; | ||
48 | |||
49 | public Db4LocalStorage() | ||
50 | { | ||
51 | |||
52 | } | ||
53 | |||
54 | public void Initialise(string dfile) | ||
55 | { | ||
56 | OpenSim.Framework.Console.MainLog.Instance.Warn("Db4LocalStorage Opening " + dfile); | ||
57 | datastore = dfile; | ||
58 | try | ||
59 | { | ||
60 | db = Db4oFactory.OpenFile(datastore); | ||
61 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Db4LocalStorage creation"); | ||
62 | } | ||
63 | catch (Exception e) | ||
64 | { | ||
65 | db.Close(); | ||
66 | OpenSim.Framework.Console.MainLog.Instance.Warn("Db4LocalStorage :Constructor - Exception occured"); | ||
67 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
68 | } | ||
69 | } | ||
70 | |||
71 | public void StorePrim(PrimData prim) | ||
72 | { | ||
73 | IObjectSet result = db.Query(new UUIDPrimQuery(prim.FullID)); | ||
74 | if (result.Count > 0) | ||
75 | { | ||
76 | //prim already in storage | ||
77 | //so update it | ||
78 | PrimData found = (PrimData)result.Next(); | ||
79 | found.PathBegin = prim.PathBegin; | ||
80 | found.PathCurve = prim.PathCurve; | ||
81 | found.PathEnd = prim.PathEnd; | ||
82 | found.PathRadiusOffset = prim.PathRadiusOffset; | ||
83 | found.PathRevolutions = prim.PathRevolutions; | ||
84 | found.PathScaleX = prim.PathScaleX; | ||
85 | found.PathScaleY = prim.PathScaleY; | ||
86 | found.PathShearX = prim.PathShearX; | ||
87 | found.PathShearY = prim.PathShearY; | ||
88 | found.PathSkew = prim.PathSkew; | ||
89 | found.PathTaperX = prim.PathTaperX; | ||
90 | found.PathTaperY = prim.PathTaperY; | ||
91 | found.PathTwist = prim.PathTwist; | ||
92 | found.PathTwistBegin = prim.PathTwistBegin; | ||
93 | found.PCode = prim.PCode; | ||
94 | found.ProfileBegin = prim.ProfileBegin; | ||
95 | found.ProfileCurve = prim.ProfileCurve; | ||
96 | found.ProfileEnd = prim.ProfileEnd; | ||
97 | found.ProfileHollow = prim.ProfileHollow; | ||
98 | found.Position = prim.Position; | ||
99 | found.Rotation = prim.Rotation; | ||
100 | found.TextureEntry = prim.TextureEntry; | ||
101 | db.Set(found); | ||
102 | db.Commit(); | ||
103 | } | ||
104 | else | ||
105 | { | ||
106 | //not in storage | ||
107 | db.Set(prim); | ||
108 | db.Commit(); | ||
109 | } | ||
110 | } | ||
111 | |||
112 | public void RemovePrim(LLUUID primID) | ||
113 | { | ||
114 | IObjectSet result = db.Query(new UUIDPrimQuery(primID)); | ||
115 | if (result.Count > 0) | ||
116 | { | ||
117 | PrimData found = (PrimData)result.Next(); | ||
118 | db.Delete(found); | ||
119 | } | ||
120 | } | ||
121 | |||
122 | |||
123 | public void LoadPrimitives(ILocalStorageReceiver receiver) | ||
124 | { | ||
125 | IObjectSet result = db.Get(typeof(PrimData)); | ||
126 | OpenSim.Framework.Console.MainLog.Instance.Verbose("Db4LocalStorage.cs: LoadPrimitives() - number of prims in storages is " + result.Count); | ||
127 | foreach (PrimData prim in result) | ||
128 | { | ||
129 | receiver.PrimFromStorage(prim); | ||
130 | } | ||
131 | } | ||
132 | |||
133 | public float[] LoadWorld() | ||
134 | { | ||
135 | OpenSim.Framework.Console.MainLog.Instance.Verbose("LoadWorld() - Loading world...."); | ||
136 | float[] heightmap = null; | ||
137 | OpenSim.Framework.Console.MainLog.Instance.Verbose("LoadWorld() - Looking for a heightmap in local DB"); | ||
138 | IObjectSet world_result = db.Get(typeof(MapStorage)); | ||
139 | if (world_result.Count > 0) | ||
140 | { | ||
141 | OpenSim.Framework.Console.MainLog.Instance.Verbose("LoadWorld() - Found a heightmap in local database, loading"); | ||
142 | MapStorage map = (MapStorage)world_result.Next(); | ||
143 | //blank.LandMap = map.Map; | ||
144 | heightmap = map.Map; | ||
145 | } | ||
146 | return heightmap; | ||
147 | } | ||
148 | |||
149 | public void SaveMap(float[] heightmap) | ||
150 | { | ||
151 | IObjectSet world_result = db.Get(typeof(MapStorage)); | ||
152 | if (world_result.Count > 0) | ||
153 | { | ||
154 | OpenSim.Framework.Console.MainLog.Instance.Verbose("SaveWorld() - updating saved copy of heightmap in local database"); | ||
155 | MapStorage map = (MapStorage)world_result.Next(); | ||
156 | db.Delete(map); | ||
157 | } | ||
158 | MapStorage map1 = new MapStorage(); | ||
159 | map1.Map = heightmap; //OpenSim_Main.local_world.LandMap; | ||
160 | db.Set(map1); | ||
161 | db.Commit(); | ||
162 | } | ||
163 | |||
164 | public void SaveParcel(ParcelData parcel) | ||
165 | { | ||
166 | IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID)); | ||
167 | if (result.Count > 0) | ||
168 | { | ||
169 | //Old Parcel | ||
170 | ParcelData updateParcel = (ParcelData)result.Next(); | ||
171 | updateParcel.AABBMax = parcel.AABBMax; | ||
172 | updateParcel.AABBMin = parcel.AABBMin; | ||
173 | updateParcel.area = parcel.area; | ||
174 | updateParcel.auctionID = parcel.auctionID; | ||
175 | updateParcel.authBuyerID = parcel.authBuyerID; | ||
176 | updateParcel.category = parcel.category; | ||
177 | updateParcel.claimDate = parcel.claimDate; | ||
178 | updateParcel.claimPrice = parcel.claimPrice; | ||
179 | updateParcel.groupID = parcel.groupID; | ||
180 | updateParcel.groupPrims = parcel.groupPrims; | ||
181 | updateParcel.isGroupOwned = parcel.isGroupOwned; | ||
182 | updateParcel.landingType = parcel.landingType; | ||
183 | updateParcel.mediaAutoScale = parcel.mediaAutoScale; | ||
184 | updateParcel.mediaID = parcel.mediaID; | ||
185 | updateParcel.mediaURL = parcel.mediaURL; | ||
186 | updateParcel.musicURL = parcel.musicURL; | ||
187 | updateParcel.localID = parcel.localID; | ||
188 | updateParcel.ownerID = parcel.ownerID; | ||
189 | updateParcel.passHours = parcel.passHours; | ||
190 | updateParcel.passPrice = parcel.passPrice; | ||
191 | updateParcel.parcelBitmapByteArray = (byte[])parcel.parcelBitmapByteArray.Clone(); | ||
192 | updateParcel.parcelDesc = parcel.parcelDesc; | ||
193 | updateParcel.parcelFlags = parcel.parcelFlags; | ||
194 | updateParcel.parcelName = parcel.parcelName; | ||
195 | updateParcel.parcelStatus = parcel.parcelStatus; | ||
196 | updateParcel.salePrice = parcel.salePrice; | ||
197 | updateParcel.snapshotID = parcel.snapshotID; | ||
198 | updateParcel.userLocation = parcel.userLocation; | ||
199 | updateParcel.userLookAt = parcel.userLookAt; | ||
200 | |||
201 | db.Set(updateParcel); | ||
202 | } | ||
203 | else | ||
204 | { | ||
205 | db.Set(parcel); | ||
206 | } | ||
207 | db.Commit(); | ||
208 | } | ||
209 | |||
210 | public void SaveParcels(ParcelData[] parcel_data) | ||
211 | { | ||
212 | MainLog.Instance.Notice("Parcel Backup: Saving Parcels..."); | ||
213 | int i; | ||
214 | for (i = 0; i < parcel_data.GetLength(0); i++) | ||
215 | { | ||
216 | |||
217 | SaveParcel(parcel_data[i]); | ||
218 | |||
219 | } | ||
220 | MainLog.Instance.Notice("Parcel Backup: Parcel Save Complete"); | ||
221 | } | ||
222 | |||
223 | public void RemoveParcel(ParcelData parcel) | ||
224 | { | ||
225 | IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID)); | ||
226 | if (result.Count > 0) | ||
227 | { | ||
228 | db.Delete(result[0]); | ||
229 | } | ||
230 | db.Commit(); | ||
231 | } | ||
232 | public void RemoveAllParcels() | ||
233 | { | ||
234 | MainLog.Instance.Notice("Parcel Backup: Removing all parcels..."); | ||
235 | IObjectSet result = db.Get(typeof(ParcelData)); | ||
236 | if (result.Count > 0) | ||
237 | { | ||
238 | foreach (ParcelData parcelData in result) | ||
239 | { | ||
240 | RemoveParcel(parcelData); | ||
241 | } | ||
242 | } | ||
243 | } | ||
244 | |||
245 | public void LoadParcels(ILocalStorageParcelReceiver recv) | ||
246 | { | ||
247 | MainLog.Instance.Notice("Parcel Backup: Loading Parcels..."); | ||
248 | IObjectSet result = db.Get(typeof(ParcelData)); | ||
249 | if (result.Count > 0) | ||
250 | { | ||
251 | MainLog.Instance.Notice("Parcel Backup: Parcels exist in database."); | ||
252 | foreach (ParcelData parcelData in result) | ||
253 | { | ||
254 | |||
255 | recv.ParcelFromStorage(parcelData); | ||
256 | } | ||
257 | } | ||
258 | else | ||
259 | { | ||
260 | MainLog.Instance.Notice("Parcel Backup: No parcels exist. Creating basic parcel."); | ||
261 | recv.NoParcelDataFromStorage(); | ||
262 | } | ||
263 | MainLog.Instance.Notice("Parcel Backup: Parcels Restored"); | ||
264 | } | ||
265 | public void ShutDown() | ||
266 | { | ||
267 | db.Commit(); | ||
268 | db.Close(); | ||
269 | } | ||
270 | } | ||
271 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/MapStorage.cs b/OpenSim/Region/Storage/LocalStorageDb4o/MapStorage.cs new file mode 100644 index 0000000..56387ac --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageDb4o/MapStorage.cs | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | |||
32 | namespace OpenSim.Storage.LocalStorageDb4o | ||
33 | { | ||
34 | public class MapStorage | ||
35 | { | ||
36 | public float[] Map; | ||
37 | |||
38 | public MapStorage() | ||
39 | { | ||
40 | |||
41 | } | ||
42 | } | ||
43 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/OpenSim.Region.Storage.LocalStorageDb4o.csproj b/OpenSim/Region/Storage/LocalStorageDb4o/OpenSim.Region.Storage.LocalStorageDb4o.csproj new file mode 100644 index 0000000..147158c --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageDb4o/OpenSim.Region.Storage.LocalStorageDb4o.csproj | |||
@@ -0,0 +1,116 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{43DB702D-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Storage.LocalStorageDb4o</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Storage.LocalStorageDb4o</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Db4objects.Db4o.dll" > | ||
62 | <HintPath>..\..\..\..\bin\Db4objects.Db4o.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System" > | ||
70 | <HintPath>System.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Xml" > | ||
74 | <HintPath>System.Xml.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | </ItemGroup> | ||
78 | <ItemGroup> | ||
79 | <ProjectReference Include="..\..\..\Framework\General\OpenSim.Framework.csproj"> | ||
80 | <Name>OpenSim.Framework</Name> | ||
81 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
82 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
83 | <Private>False</Private> | ||
84 | </ProjectReference> | ||
85 | <ProjectReference Include="..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
86 | <Name>OpenSim.Framework.Console</Name> | ||
87 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
88 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
89 | <Private>False</Private> | ||
90 | </ProjectReference> | ||
91 | </ItemGroup> | ||
92 | <ItemGroup> | ||
93 | <Compile Include="AssemblyInfo.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="Db4LocalStorage.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | <Compile Include="MapStorage.cs"> | ||
100 | <SubType>Code</SubType> | ||
101 | </Compile> | ||
102 | <Compile Include="UUIDParcelQuery.cs"> | ||
103 | <SubType>Code</SubType> | ||
104 | </Compile> | ||
105 | <Compile Include="UUIDPrimQuery.cs"> | ||
106 | <SubType>Code</SubType> | ||
107 | </Compile> | ||
108 | </ItemGroup> | ||
109 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
110 | <PropertyGroup> | ||
111 | <PreBuildEvent> | ||
112 | </PreBuildEvent> | ||
113 | <PostBuildEvent> | ||
114 | </PostBuildEvent> | ||
115 | </PropertyGroup> | ||
116 | </Project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/OpenSim.Region.Storage.LocalStorageDb4o.csproj.user b/OpenSim/Region/Storage/LocalStorageDb4o/OpenSim.Region.Storage.LocalStorageDb4o.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageDb4o/OpenSim.Region.Storage.LocalStorageDb4o.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/UUIDParcelQuery.cs b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDParcelQuery.cs new file mode 100644 index 0000000..d24fb5f --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDParcelQuery.cs | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using Db4objects.Db4o; | ||
32 | using Db4objects.Db4o.Query; | ||
33 | using libsecondlife; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Framework.Types; | ||
36 | |||
37 | namespace OpenSim.Storage.LocalStorageDb4o | ||
38 | { | ||
39 | public class UUIDParcelQuery : Predicate | ||
40 | { | ||
41 | private LLUUID globalIDSearch; | ||
42 | |||
43 | public UUIDParcelQuery(LLUUID find) | ||
44 | { | ||
45 | globalIDSearch = find; | ||
46 | } | ||
47 | public bool Match(ParcelData parcel) | ||
48 | { | ||
49 | return (parcel.globalID == globalIDSearch); | ||
50 | } | ||
51 | } | ||
52 | } | ||
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/UUIDPrimQuery.cs b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDPrimQuery.cs new file mode 100644 index 0000000..b2e8a91 --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageDb4o/UUIDPrimQuery.cs | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using Db4objects.Db4o; | ||
32 | using Db4objects.Db4o.Query; | ||
33 | using libsecondlife; | ||
34 | using OpenSim.Framework.Interfaces; | ||
35 | using OpenSim.Framework.Types; | ||
36 | |||
37 | namespace OpenSim.Storage.LocalStorageDb4o | ||
38 | { | ||
39 | public class UUIDPrimQuery : Predicate | ||
40 | { | ||
41 | private LLUUID _findID; | ||
42 | |||
43 | public UUIDPrimQuery(LLUUID find) | ||
44 | { | ||
45 | _findID = find; | ||
46 | } | ||
47 | public bool Match(PrimData prim) | ||
48 | { | ||
49 | return (prim.FullID == _findID); | ||
50 | } | ||
51 | } | ||
52 | } | ||
diff --git a/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Region.Storage.LocalStorageSQLite.csproj b/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Region.Storage.LocalStorageSQLite.csproj new file mode 100644 index 0000000..d1353a5 --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Region.Storage.LocalStorageSQLite.csproj | |||
@@ -0,0 +1,111 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{477B9270-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Storage.LocalStorageSQLite</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Storage.LocalStorageSQLite</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libsecondlife.dll" > | ||
62 | <HintPath>..\..\..\..\bin\libsecondlife.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="System" > | ||
66 | <HintPath>System.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="System.Data" > | ||
70 | <HintPath>System.Data.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System.Data.SQLite.dll" > | ||
74 | <HintPath>..\..\..\..\bin\System.Data.SQLite.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Xml" > | ||
78 | <HintPath>System.Xml.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | </ItemGroup> | ||
82 | <ItemGroup> | ||
83 | <ProjectReference Include="..\..\..\Framework\General\OpenSim.Framework.csproj"> | ||
84 | <Name>OpenSim.Framework</Name> | ||
85 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
86 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
87 | <Private>False</Private> | ||
88 | </ProjectReference> | ||
89 | <ProjectReference Include="..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
90 | <Name>OpenSim.Framework.Console</Name> | ||
91 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
92 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
93 | <Private>False</Private> | ||
94 | </ProjectReference> | ||
95 | </ItemGroup> | ||
96 | <ItemGroup> | ||
97 | <Compile Include="SQLiteLocalStorage.cs"> | ||
98 | <SubType>Code</SubType> | ||
99 | </Compile> | ||
100 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
101 | <SubType>Code</SubType> | ||
102 | </Compile> | ||
103 | </ItemGroup> | ||
104 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
105 | <PropertyGroup> | ||
106 | <PreBuildEvent> | ||
107 | </PreBuildEvent> | ||
108 | <PostBuildEvent> | ||
109 | </PostBuildEvent> | ||
110 | </PropertyGroup> | ||
111 | </Project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Region.Storage.LocalStorageSQLite.csproj.user b/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Region.Storage.LocalStorageSQLite.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Region.Storage.LocalStorageSQLite.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Storage.LocalStorageSQLite.dll.build b/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Storage.LocalStorageSQLite.dll.build new file mode 100644 index 0000000..bd4c731 --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageSQLite/OpenSim.Storage.LocalStorageSQLite.dll.build | |||
@@ -0,0 +1,46 @@ | |||
1 | <?xml version="1.0" ?> | ||
2 | <project name="OpenSim.Storage.LocalStorageSQLite" default="build"> | ||
3 | <target name="build"> | ||
4 | <echo message="Build Directory is ${project::get-base-directory()}/${build.dir}" /> | ||
5 | <mkdir dir="${project::get-base-directory()}/${build.dir}" /> | ||
6 | <copy todir="${project::get-base-directory()}/${build.dir}"> | ||
7 | <fileset basedir="${project::get-base-directory()}"> | ||
8 | </fileset> | ||
9 | </copy> | ||
10 | <csc target="library" debug="${build.debug}" unsafe="False" define="TRACE;DEBUG" output="${project::get-base-directory()}/${build.dir}/${project::get-name()}.dll"> | ||
11 | <resources prefix="OpenSim.Storage.LocalStorageSQLite" dynamicprefix="true" > | ||
12 | </resources> | ||
13 | <sources failonempty="true"> | ||
14 | <include name="SQLiteLocalStorage.cs" /> | ||
15 | <include name="Properties/AssemblyInfo.cs" /> | ||
16 | </sources> | ||
17 | <references basedir="${project::get-base-directory()}"> | ||
18 | <lib> | ||
19 | <include name="${project::get-base-directory()}" /> | ||
20 | <include name="${project::get-base-directory()}/${build.dir}" /> | ||
21 | </lib> | ||
22 | <include name="../../../bin/libsecondlife.dll" /> | ||
23 | <include name="../../../bin/OpenSim.Framework.dll" /> | ||
24 | <include name="../../../bin/OpenSim.Framework.Console.dll" /> | ||
25 | <include name="System.dll" /> | ||
26 | <include name="System.Data.dll" /> | ||
27 | <include name="../../../bin/System.Data.SQLite.dll" /> | ||
28 | <include name="System.Xml.dll" /> | ||
29 | </references> | ||
30 | </csc> | ||
31 | <echo message="Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/../../../bin/" /> | ||
32 | <mkdir dir="${project::get-base-directory()}/../../../bin/"/> | ||
33 | <copy todir="${project::get-base-directory()}/../../../bin/"> | ||
34 | <fileset basedir="${project::get-base-directory()}/${build.dir}/" > | ||
35 | <include name="*.dll"/> | ||
36 | <include name="*.exe"/> | ||
37 | </fileset> | ||
38 | </copy> | ||
39 | </target> | ||
40 | <target name="clean"> | ||
41 | <delete dir="${bin.dir}" failonerror="false" /> | ||
42 | <delete dir="${obj.dir}" failonerror="false" /> | ||
43 | </target> | ||
44 | <target name="doc" description="Creates documentation."> | ||
45 | </target> | ||
46 | </project> | ||
diff --git a/OpenSim/Region/Storage/LocalStorageSQLite/Properties/AssemblyInfo.cs b/OpenSim/Region/Storage/LocalStorageSQLite/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b45debf --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageSQLite/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // General Information about an assembly is controlled through the following | ||
33 | // set of attributes. Change these attribute values to modify the information | ||
34 | // associated with an assembly. | ||
35 | [assembly: AssemblyTitle("OpenSim.Storage.LocalStorageSQLite")] | ||
36 | [assembly: AssemblyDescription("")] | ||
37 | [assembly: AssemblyConfiguration("")] | ||
38 | [assembly: AssemblyCompany("")] | ||
39 | [assembly: AssemblyProduct("OpenSim.Storage.LocalStorageSQLite")] | ||
40 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
41 | [assembly: AssemblyTrademark("")] | ||
42 | [assembly: AssemblyCulture("")] | ||
43 | |||
44 | // Setting ComVisible to false makes the types in this assembly not visible | ||
45 | // to COM components. If you need to access a type in this assembly from | ||
46 | // COM, set the ComVisible attribute to true on that type. | ||
47 | [assembly: ComVisible(false)] | ||
48 | |||
49 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
50 | [assembly: Guid("ecd6e0c1-7909-413e-9e3f-659678ac3bc3")] | ||
51 | |||
52 | // Version information for an assembly consists of the following four values: | ||
53 | // | ||
54 | // Major Version | ||
55 | // Minor Version | ||
56 | // Build Number | ||
57 | // Revision | ||
58 | // | ||
59 | // You can specify all the values or you can default the Revision and Build Numbers | ||
60 | // by using the '*' as shown below: | ||
61 | [assembly: AssemblyVersion("1.0.0.*")] | ||
62 | [assembly: AssemblyFileVersion("1.0.0.*")] | ||
diff --git a/OpenSim/Region/Storage/LocalStorageSQLite/SQLiteLocalStorage.cs b/OpenSim/Region/Storage/LocalStorageSQLite/SQLiteLocalStorage.cs new file mode 100644 index 0000000..8a7893e --- /dev/null +++ b/OpenSim/Region/Storage/LocalStorageSQLite/SQLiteLocalStorage.cs | |||
@@ -0,0 +1,198 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | |||
29 | // SQLite Support | ||
30 | // A bad idea, but the IRC people told me to! | ||
31 | |||
32 | using System; | ||
33 | using System.Collections.Generic; | ||
34 | using System.Data; | ||
35 | using System.Data.SQLite; | ||
36 | using libsecondlife; | ||
37 | using OpenSim.Framework.Interfaces; | ||
38 | using OpenSim.Framework.Types; | ||
39 | |||
40 | namespace OpenSim.Storage.LocalStorageSQLite | ||
41 | { | ||
42 | public class SQLiteLocalStorage : ILocalStorage | ||
43 | { | ||
44 | IDbConnection db; | ||
45 | |||
46 | public SQLiteLocalStorage() | ||
47 | { | ||
48 | try | ||
49 | { | ||
50 | string connectionstring = "URI=file:localsim.sdb"; | ||
51 | db = (IDbConnection)new SQLiteConnection(connectionstring); | ||
52 | db.Open(); | ||
53 | } | ||
54 | catch (Exception e) | ||
55 | { | ||
56 | db.Close(); | ||
57 | OpenSim.Framework.Console.MainLog.Instance.Warn("SQLiteLocalStorage :Constructor - Exception occured"); | ||
58 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
59 | } | ||
60 | } | ||
61 | |||
62 | public void Initialise(string file) | ||
63 | { | ||
64 | // Blank | ||
65 | } | ||
66 | |||
67 | public void StorePrim(PrimData prim) | ||
68 | { | ||
69 | IDbCommand cmd = db.CreateCommand(); | ||
70 | |||
71 | //SECURITY WARNING: | ||
72 | // These parameters wont produce SQL injections since they are all integer based, however. | ||
73 | // if inserting strings such as name or description, you will need to use appropriate | ||
74 | // measures to prevent SQL injection (although the value of SQL injection in this is limited). | ||
75 | |||
76 | string sql = "REPLACE INTO prim (OwnerID,PCode,PathBegin,PathEnd,PathScaleX,PathScaleY,PathShearX,PathShearY,PathSkew,ProfileBegin,ProfileEnd,Scale,PathCurve,ProfileCurve,ParentID,ProfileHollow,PathRadiusOffset,PathRevolutions,PathTaperX,PathTaperY,PathTwist,PathTwistBegin,Texture,CreationDate,OwnerMask,NextOwnerMask,GroupMask,EveryoneMask,BaseMask,Position,Rotation,LocalID,FullID) "; | ||
77 | sql += "VALUES ("; | ||
78 | sql += "\"" + prim.OwnerID.ToStringHyphenated() + "\","; // KILL ME NOW! | ||
79 | sql += "\"" + prim.PCode.ToString() + "\","; | ||
80 | sql += "\"" + prim.PathBegin.ToString() + "\","; | ||
81 | sql += "\"" + prim.PathEnd.ToString() + "\","; | ||
82 | sql += "\"" + prim.PathScaleX.ToString() + "\","; | ||
83 | sql += "\"" + prim.PathScaleY.ToString() + "\","; | ||
84 | sql += "\"" + prim.PathShearX.ToString() + "\","; | ||
85 | sql += "\"" + prim.PathShearY.ToString() + "\","; | ||
86 | sql += "\"" + prim.PathSkew.ToString() + "\","; | ||
87 | sql += "\"" + prim.ProfileBegin.ToString() + "\","; | ||
88 | sql += "\"" + prim.ProfileEnd.ToString() + "\","; | ||
89 | sql += "\"" + prim.Scale.ToString() + "\","; | ||
90 | sql += "\"" + prim.PathCurve.ToString() + "\","; | ||
91 | sql += "\"" + prim.ProfileCurve.ToString() + "\","; | ||
92 | sql += "\"" + prim.ParentID.ToString() + "\","; | ||
93 | sql += "\"" + prim.ProfileHollow.ToString() + "\","; | ||
94 | sql += "\"" + prim.PathRadiusOffset.ToString() + "\","; | ||
95 | sql += "\"" + prim.PathRevolutions.ToString() + "\","; | ||
96 | sql += "\"" + prim.PathTaperX.ToString() + "\","; | ||
97 | sql += "\"" + prim.PathTaperY.ToString() + "\","; | ||
98 | sql += "\"" + prim.PathTwist.ToString() + "\","; | ||
99 | sql += "\"" + prim.PathTwistBegin.ToString() + "\","; | ||
100 | sql += "\"" + prim.TextureEntry.ToString() + "\","; | ||
101 | sql += "\"" + prim.CreationDate.ToString() + "\","; | ||
102 | sql += "\"" + prim.OwnerMask.ToString() + "\","; | ||
103 | sql += "\"" + prim.NextOwnerMask.ToString() + "\","; | ||
104 | sql += "\"" + prim.GroupMask.ToString() + "\","; | ||
105 | sql += "\"" + prim.EveryoneMask.ToString() + "\","; | ||
106 | sql += "\"" + prim.BaseMask.ToString() + "\","; | ||
107 | sql += "\"" + prim.Position.ToString() + "\","; | ||
108 | sql += "\"" + prim.Rotation.ToString() + "\","; | ||
109 | sql += "\"" + prim.LocalID.ToString() + "\","; | ||
110 | sql += "\"" + prim.FullID.ToString() + "\")"; | ||
111 | |||
112 | cmd.CommandText = sql; | ||
113 | |||
114 | try | ||
115 | { | ||
116 | cmd.ExecuteNonQuery(); | ||
117 | } | ||
118 | catch (Exception e) | ||
119 | { | ||
120 | OpenSim.Framework.Console.MainLog.Instance.Warn("SQLiteLocalStorage :StorePrim - Exception occured"); | ||
121 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
122 | } | ||
123 | |||
124 | cmd.Dispose(); | ||
125 | cmd = null; | ||
126 | } | ||
127 | |||
128 | public void RemovePrim(LLUUID primID) | ||
129 | { | ||
130 | IDbCommand cmd = db.CreateCommand(); | ||
131 | |||
132 | //SECURITY WARNING: | ||
133 | // These parameters wont produce SQL injections since they are all integer based, however. | ||
134 | // if inserting strings such as name or description, you will need to use appropriate | ||
135 | // measures to prevent SQL injection (although the value of SQL injection in this is limited). | ||
136 | |||
137 | string sql = "DELETE FROM prim WHERE FullID = \"" + primID.ToStringHyphenated() + "\""; | ||
138 | |||
139 | cmd.CommandText = sql; | ||
140 | |||
141 | try | ||
142 | { | ||
143 | cmd.ExecuteNonQuery(); | ||
144 | } | ||
145 | catch (Exception e) | ||
146 | { | ||
147 | OpenSim.Framework.Console.MainLog.Instance.Warn("SQLiteLocalStorage :RemovePrim - Exception occured"); | ||
148 | OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString()); | ||
149 | } | ||
150 | |||
151 | cmd.Dispose(); | ||
152 | cmd = null; | ||
153 | } | ||
154 | |||
155 | public void LoadPrimitives(ILocalStorageReceiver receiver) | ||
156 | { | ||
157 | |||
158 | } | ||
159 | |||
160 | public float[] LoadWorld() | ||
161 | { | ||
162 | return new float[65536]; | ||
163 | } | ||
164 | |||
165 | public void SaveMap(float[] heightmap) | ||
166 | { | ||
167 | |||
168 | } | ||
169 | |||
170 | public void SaveParcels(ParcelData[] parcel_manager) | ||
171 | { | ||
172 | |||
173 | } | ||
174 | |||
175 | public void SaveParcel(ParcelData parcel) | ||
176 | { | ||
177 | } | ||
178 | |||
179 | public void RemoveParcel(ParcelData parcel) | ||
180 | { | ||
181 | } | ||
182 | |||
183 | public void RemoveAllParcels() | ||
184 | { | ||
185 | } | ||
186 | |||
187 | public void LoadParcels(ILocalStorageParcelReceiver recv) | ||
188 | { | ||
189 | recv.NoParcelDataFromStorage(); | ||
190 | } | ||
191 | |||
192 | public void ShutDown() | ||
193 | { | ||
194 | db.Close(); | ||
195 | db = null; | ||
196 | } | ||
197 | } | ||
198 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Terrain.BasicTerrain/OpenSim.Region.Terrain.BasicTerrain.csproj b/OpenSim/Region/Terrain.BasicTerrain/OpenSim.Region.Terrain.BasicTerrain.csproj new file mode 100644 index 0000000..24667e5 --- /dev/null +++ b/OpenSim/Region/Terrain.BasicTerrain/OpenSim.Region.Terrain.BasicTerrain.csproj | |||
@@ -0,0 +1,110 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>8.0.50727</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{C9E0F891-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.Terrain.BasicTerrain</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.Terrain.BasicTerrain</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="libTerrain-BSD.dll" > | ||
62 | <HintPath>..\..\..\bin\libTerrain-BSD.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="Microsoft.JScript" > | ||
66 | <HintPath>Microsoft.JScript.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="openjpegnet.dll" > | ||
70 | <HintPath>..\..\..\bin\openjpegnet.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="System" > | ||
74 | <HintPath>System.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="System.Data" > | ||
78 | <HintPath>System.Data.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="System.Drawing" > | ||
82 | <HintPath>System.Drawing.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="System.Xml" > | ||
86 | <HintPath>System.Xml.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | </ItemGroup> | ||
90 | <ItemGroup> | ||
91 | </ItemGroup> | ||
92 | <ItemGroup> | ||
93 | <Compile Include="TerrainEngine.cs"> | ||
94 | <SubType>Code</SubType> | ||
95 | </Compile> | ||
96 | <Compile Include="TerrainFilter.cs"> | ||
97 | <SubType>Code</SubType> | ||
98 | </Compile> | ||
99 | <Compile Include="Properties\AssemblyInfo.cs"> | ||
100 | <SubType>Code</SubType> | ||
101 | </Compile> | ||
102 | </ItemGroup> | ||
103 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
104 | <PropertyGroup> | ||
105 | <PreBuildEvent> | ||
106 | </PreBuildEvent> | ||
107 | <PostBuildEvent> | ||
108 | </PostBuildEvent> | ||
109 | </PropertyGroup> | ||
110 | </Project> | ||
diff --git a/OpenSim/Region/Terrain.BasicTerrain/OpenSim.Region.Terrain.BasicTerrain.csproj.user b/OpenSim/Region/Terrain.BasicTerrain/OpenSim.Region.Terrain.BasicTerrain.csproj.user new file mode 100644 index 0000000..6841907 --- /dev/null +++ b/OpenSim/Region/Terrain.BasicTerrain/OpenSim.Region.Terrain.BasicTerrain.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\New Folder\second-life-viewer\opensim-dailys2\opensim15-06\NameSpaceChanges\bin\</ReferencePath> | ||
6 | <LastOpenVersion>8.0.50727</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/Terrain.BasicTerrain/Properties/AssemblyInfo.cs b/OpenSim/Region/Terrain.BasicTerrain/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..827c68f --- /dev/null +++ b/OpenSim/Region/Terrain.BasicTerrain/Properties/AssemblyInfo.cs | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System.Reflection; | ||
29 | using System.Runtime.CompilerServices; | ||
30 | using System.Runtime.InteropServices; | ||
31 | |||
32 | // General Information about an assembly is controlled through the following | ||
33 | // set of attributes. Change these attribute values to modify the information | ||
34 | // associated with an assembly. | ||
35 | [assembly: AssemblyTitle("OpenSim.Terrain.BasicTerrain")] | ||
36 | [assembly: AssemblyDescription("")] | ||
37 | [assembly: AssemblyConfiguration("")] | ||
38 | [assembly: AssemblyCompany("")] | ||
39 | [assembly: AssemblyProduct("OpenSim.Terrain.BasicTerrain")] | ||
40 | [assembly: AssemblyCopyright("Copyright © 2007")] | ||
41 | [assembly: AssemblyTrademark("")] | ||
42 | [assembly: AssemblyCulture("")] | ||
43 | |||
44 | // Setting ComVisible to false makes the types in this assembly not visible | ||
45 | // to COM components. If you need to access a type in this assembly from | ||
46 | // COM, set the ComVisible attribute to true on that type. | ||
47 | [assembly: ComVisible(false)] | ||
48 | |||
49 | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||
50 | [assembly: Guid("3263f5b5-0a41-4ed5-91a2-9baaaeecc849")] | ||
51 | |||
52 | // Version information for an assembly consists of the following four values: | ||
53 | // | ||
54 | // Major Version | ||
55 | // Minor Version | ||
56 | // Build Number | ||
57 | // Revision | ||
58 | // | ||
59 | // You can specify all the values or you can default the Revision and Build Numbers | ||
60 | // by using the '*' as shown below: | ||
61 | [assembly: AssemblyVersion("1.0.0.0")] | ||
62 | [assembly: AssemblyFileVersion("1.0.0.0")] | ||
diff --git a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs new file mode 100644 index 0000000..4f989fa --- /dev/null +++ b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs | |||
@@ -0,0 +1,786 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://www.openmetaverse.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | * | ||
27 | */ | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Text; | ||
31 | using System.Drawing; | ||
32 | using libTerrain; | ||
33 | using OpenJPEGNet; | ||
34 | |||
35 | namespace OpenSim.Terrain | ||
36 | { | ||
37 | public class TerrainCommand | ||
38 | { | ||
39 | public virtual bool run(string[] cmdargs, ref string output) | ||
40 | { | ||
41 | return false; | ||
42 | } | ||
43 | |||
44 | public string args; | ||
45 | public string help; | ||
46 | } | ||
47 | |||
48 | public class TerrainEngine | ||
49 | { | ||
50 | /// <summary> | ||
51 | /// Plugin library for scripts | ||
52 | /// </summary> | ||
53 | public FilterHost customFilters = new FilterHost(); | ||
54 | |||
55 | /// <summary> | ||
56 | /// A [normally] 256x256 heightmap | ||
57 | /// </summary> | ||
58 | public Channel heightmap; | ||
59 | |||
60 | /// <summary> | ||
61 | /// A copy of heightmap at the last save point (for reverting) | ||
62 | /// </summary> | ||
63 | public Channel revertmap; | ||
64 | |||
65 | /// <summary> | ||
66 | /// Water heightmap (needs clientside mods to work) | ||
67 | /// </summary> | ||
68 | public Channel watermap; | ||
69 | |||
70 | /// <summary> | ||
71 | /// Whether or not the terrain has been modified since it was last saved and sent to the Physics engine. | ||
72 | /// Counts the number of modifications since the last save. (0 = Untainted) | ||
73 | /// </summary> | ||
74 | public int tainted; | ||
75 | |||
76 | int w, h; | ||
77 | |||
78 | /// <summary> | ||
79 | /// Generate a new TerrainEngine instance and creates a new heightmap | ||
80 | /// </summary> | ||
81 | public TerrainEngine() | ||
82 | { | ||
83 | w = 256; | ||
84 | h = 256; | ||
85 | heightmap = new Channel(w, h); | ||
86 | |||
87 | tainted++; | ||
88 | } | ||
89 | |||
90 | /// <summary> | ||
91 | /// Converts the heightmap to a 65536 value 1D floating point array | ||
92 | /// </summary> | ||
93 | /// <returns>A float[65536] array containing the heightmap</returns> | ||
94 | public float[] getHeights1D() | ||
95 | { | ||
96 | float[] heights = new float[w * h]; | ||
97 | int i; | ||
98 | |||
99 | for (i = 0; i < w * h; i++) | ||
100 | { | ||
101 | heights[i] = (float)heightmap.map[i / w, i % w]; | ||
102 | } | ||
103 | |||
104 | return heights; | ||
105 | } | ||
106 | |||
107 | /// <summary> | ||
108 | /// Converts the heightmap to a 256x256 value 2D floating point array. | ||
109 | /// </summary> | ||
110 | /// <returns>An array of 256,256 values containing the heightmap</returns> | ||
111 | public float[,] getHeights2D() | ||
112 | { | ||
113 | float[,] heights = new float[w, h]; | ||
114 | int x, y; | ||
115 | for (x = 0; x < w; x++) | ||
116 | { | ||
117 | for (y = 0; y < h; y++) | ||
118 | { | ||
119 | heights[x, y] = (float)heightmap.map[x, y]; | ||
120 | } | ||
121 | } | ||
122 | return heights; | ||
123 | } | ||
124 | |||
125 | /// <summary> | ||
126 | /// Imports a 1D floating point array into the 2D heightmap array | ||
127 | /// </summary> | ||
128 | /// <param name="heights">The array to import (must have 65536 members)</param> | ||
129 | public void setHeights1D(float[] heights) | ||
130 | { | ||
131 | int i; | ||
132 | for (i = 0; i < w * h; i++) | ||
133 | { | ||
134 | heightmap.map[i / w, i % w] = heights[i]; | ||
135 | } | ||
136 | |||
137 | tainted++; | ||
138 | } | ||
139 | |||
140 | /// <summary> | ||
141 | /// Loads a 2D array of values into the heightmap | ||
142 | /// </summary> | ||
143 | /// <param name="heights">An array of 256,256 float values</param> | ||
144 | public void setHeights2D(float[,] heights) | ||
145 | { | ||
146 | int x, y; | ||
147 | for (x = 0; x < w; x++) | ||
148 | { | ||
149 | for (y = 0; y < h; y++) | ||
150 | { | ||
151 | heightmap.set(x, y, (double)heights[x, y]); | ||
152 | } | ||
153 | } | ||
154 | tainted++; | ||
155 | } | ||
156 | |||
157 | /// <summary> | ||
158 | /// Swaps the two heightmap buffers (the 'revert map' and the heightmap) | ||
159 | /// </summary> | ||
160 | public void swapRevertMaps() | ||
161 | { | ||
162 | Channel backup = heightmap.copy(); | ||
163 | heightmap = revertmap; | ||
164 | revertmap = backup; | ||
165 | } | ||
166 | |||
167 | /// <summary> | ||
168 | /// Saves the current heightmap into the revertmap | ||
169 | /// </summary> | ||
170 | public void saveRevertMap() | ||
171 | { | ||
172 | revertmap = heightmap.copy(); | ||
173 | } | ||
174 | |||
175 | /// <summary> | ||
176 | /// Processes a terrain-specific command | ||
177 | /// </summary> | ||
178 | /// <param name="args">Commandline arguments (space seperated)</param> | ||
179 | /// <param name="resultText">Reference that returns error or help text if returning false</param> | ||
180 | /// <returns>If the operation was successful (if not, the error is placed into resultText)</returns> | ||
181 | public bool RunTerrainCmd(string[] args, ref string resultText) | ||
182 | { | ||
183 | string command = args[0]; | ||
184 | |||
185 | try | ||
186 | { | ||
187 | |||
188 | switch (command) | ||
189 | { | ||
190 | case "help": | ||
191 | resultText += "terrain regenerate - rebuilds the sims terrain using a default algorithm\n"; | ||
192 | resultText += "terrain voronoi <points> <blocksize> - generates a worley fractal with X points per block"; | ||
193 | resultText += "terrain seed <seed> - sets the random seed value to <seed>\n"; | ||
194 | resultText += "terrain load <type> <filename> - loads a terrain from disk, type can be 'F32', 'F64', 'RAW' or 'IMG'\n"; | ||
195 | resultText += "terrain save <type> <filename> - saves a terrain to disk, type can be 'F32', 'F64' or 'PNG'\n"; | ||
196 | resultText += "terrain save grdmap <filename> <gradient map> - creates a PNG snapshot of the region using a named gradient map\n"; | ||
197 | resultText += "terrain rescale <min> <max> - rescales a terrain to be between <min> and <max> meters high\n"; | ||
198 | resultText += "terrain erode aerobic <windspeed> <pickupmin> <dropmin> <carry> <rounds> <lowest>\n"; | ||
199 | resultText += "terrain erode thermal <talus> <rounds> <carry>\n"; | ||
200 | resultText += "terrain multiply <val> - multiplies a terrain by <val>\n"; | ||
201 | resultText += "terrain revert - reverts the terrain to the stored original\n"; | ||
202 | resultText += "terrain bake - saves the current terrain into the revert map\n"; | ||
203 | resultText += "terrain csfilter <filename.cs> - loads a new filter from the specified .cs file\n"; | ||
204 | resultText += "terrain jsfilter <filename.js> - loads a new filter from the specified .js file\n"; | ||
205 | foreach (KeyValuePair<string, ITerrainFilter> filter in customFilters.filters) | ||
206 | { | ||
207 | resultText += filter.Value.Help(); | ||
208 | } | ||
209 | |||
210 | return false; | ||
211 | |||
212 | case "revert": | ||
213 | swapRevertMaps(); | ||
214 | saveRevertMap(); | ||
215 | break; | ||
216 | |||
217 | case "bake": | ||
218 | saveRevertMap(); | ||
219 | break; | ||
220 | |||
221 | case "seed": | ||
222 | setSeed(Convert.ToInt32(args[1])); | ||
223 | break; | ||
224 | |||
225 | case "erode": | ||
226 | return consoleErosion(args, ref resultText); | ||
227 | |||
228 | case "voronoi": | ||
229 | double[] c = new double[2]; | ||
230 | c[0] = -1; | ||
231 | c[1] = 1; | ||
232 | heightmap.voronoiDiagram(Convert.ToInt32(args[1]), Convert.ToInt32(args[2]), c); | ||
233 | break; | ||
234 | |||
235 | case "hills": | ||
236 | return consoleHills(args, ref resultText); | ||
237 | |||
238 | case "regenerate": | ||
239 | hills(); | ||
240 | break; | ||
241 | |||
242 | case "rescale": | ||
243 | setRange(Convert.ToSingle(args[1]), Convert.ToSingle(args[2])); | ||
244 | break; | ||
245 | |||
246 | case "multiply": | ||
247 | heightmap *= Convert.ToDouble(args[1]); | ||
248 | break; | ||
249 | |||
250 | case "load": | ||
251 | switch (args[1].ToLower()) | ||
252 | { | ||
253 | case "f32": | ||
254 | loadFromFileF32(args[2]); | ||
255 | break; | ||
256 | |||
257 | case "f64": | ||
258 | loadFromFileF64(args[2]); | ||
259 | break; | ||
260 | |||
261 | case "raw": | ||
262 | loadFromFileSLRAW(args[2]); | ||
263 | break; | ||
264 | |||
265 | case "img": | ||
266 | heightmap.loadImage(args[2]); | ||
267 | return false; | ||
268 | |||
269 | default: | ||
270 | resultText = "Unknown image or data format"; | ||
271 | return false; | ||
272 | } | ||
273 | break; | ||
274 | |||
275 | case "save": | ||
276 | switch (args[1].ToLower()) | ||
277 | { | ||
278 | case "f32": | ||
279 | writeToFileF32(args[2]); | ||
280 | break; | ||
281 | |||
282 | case "f64": | ||
283 | writeToFileF64(args[2]); | ||
284 | break; | ||
285 | |||
286 | case "grdmap": | ||
287 | exportImage(args[2], args[3]); | ||
288 | break; | ||
289 | |||
290 | case "png": | ||
291 | heightmap.saveImage(args[2]); | ||
292 | break; | ||
293 | |||
294 | default: | ||
295 | resultText = "Unknown image or data format"; | ||
296 | return false; | ||
297 | } | ||
298 | break; | ||
299 | |||
300 | case "csfilter": | ||
301 | customFilters.LoadFilterCSharp(args[1]); | ||
302 | break; | ||
303 | case "jsfilter": | ||
304 | customFilters.LoadFilterJScript(args[1]); | ||
305 | break; | ||
306 | |||
307 | default: | ||
308 | // Run any custom registered filters | ||
309 | if (customFilters.filters.ContainsKey(command)) | ||
310 | { | ||
311 | customFilters.filters[command].Filter(heightmap, args); | ||
312 | break; | ||
313 | } | ||
314 | else | ||
315 | { | ||
316 | resultText = "Unknown terrain command"; | ||
317 | return false; | ||
318 | } | ||
319 | } | ||
320 | return true; | ||
321 | } | ||
322 | catch (Exception e) | ||
323 | { | ||
324 | resultText = "Error running terrain command: " + e.ToString(); | ||
325 | return false; | ||
326 | } | ||
327 | } | ||
328 | |||
329 | private bool consoleErosion(string[] args, ref string resultText) | ||
330 | { | ||
331 | switch (args[1].ToLower()) | ||
332 | { | ||
333 | case "aerobic": | ||
334 | // WindSpeed, PickupMinimum,DropMinimum,Carry,Rounds,Lowest | ||
335 | heightmap.AerobicErosion(Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToInt32(args[6]), Convert.ToBoolean(args[7])); | ||
336 | break; | ||
337 | case "thermal": | ||
338 | heightmap.thermalWeathering(Convert.ToDouble(args[2]), Convert.ToInt32(args[3]), Convert.ToDouble(args[4])); | ||
339 | break; | ||
340 | default: | ||
341 | resultText = "Unknown erosion type"; | ||
342 | return false; | ||
343 | } | ||
344 | return true; | ||
345 | } | ||
346 | |||
347 | private bool consoleHills(string[] args, ref string resultText) | ||
348 | { | ||
349 | int count; | ||
350 | double sizeMin; | ||
351 | double sizeRange; | ||
352 | bool island; | ||
353 | bool additive; | ||
354 | bool noisy; | ||
355 | |||
356 | if (args.GetLength(0) > 2) | ||
357 | { | ||
358 | count = Convert.ToInt32(args[2]); | ||
359 | sizeMin = Convert.ToDouble(args[3]); | ||
360 | sizeRange = Convert.ToDouble(args[4]); | ||
361 | island = Convert.ToBoolean(args[5]); | ||
362 | additive = Convert.ToBoolean(args[6]); | ||
363 | noisy = Convert.ToBoolean(args[7]); | ||
364 | } | ||
365 | else | ||
366 | { | ||
367 | count = 200; | ||
368 | sizeMin = 20; | ||
369 | sizeRange = 40; | ||
370 | island = true; | ||
371 | additive = true; | ||
372 | noisy = false; | ||
373 | } | ||
374 | |||
375 | switch (args[1].ToLower()) | ||
376 | { | ||
377 | case "blocks": | ||
378 | heightmap.hillsBlocks(count, sizeMin, sizeRange, island, additive, noisy); | ||
379 | break; | ||
380 | case "cones": | ||
381 | heightmap.hillsCones(count, sizeMin, sizeRange, island, additive, noisy); | ||
382 | break; | ||
383 | case "spheres": | ||
384 | heightmap.hillsSpheres(count, sizeMin, sizeRange, island, additive, noisy); | ||
385 | break; | ||
386 | case "squared": | ||
387 | heightmap.hillsSquared(count, sizeMin, sizeRange, island, additive, noisy); | ||
388 | break; | ||
389 | default: | ||
390 | resultText = "Unknown hills type"; | ||
391 | return false; | ||
392 | } | ||
393 | return true; | ||
394 | } | ||
395 | |||
396 | /// <summary> | ||
397 | /// Renormalises the array between min and max | ||
398 | /// </summary> | ||
399 | /// <param name="min">Minimum value of the new array</param> | ||
400 | /// <param name="max">Maximum value of the new array</param> | ||
401 | public void setRange(float min, float max) | ||
402 | { | ||
403 | heightmap.normalise((double)min, (double)max); | ||
404 | tainted++; | ||
405 | } | ||
406 | |||
407 | /// <summary> | ||
408 | /// Loads a file consisting of 256x256 doubles and imports it as an array into the map. | ||
409 | /// </summary> | ||
410 | /// <remarks>TODO: Move this to libTerrain itself</remarks> | ||
411 | /// <param name="filename">The filename of the double array to import</param> | ||
412 | public void loadFromFileF64(string filename) | ||
413 | { | ||
414 | System.IO.FileInfo file = new System.IO.FileInfo(filename); | ||
415 | System.IO.FileStream s = file.Open(System.IO.FileMode.Open, System.IO.FileAccess.Read); | ||
416 | System.IO.BinaryReader bs = new System.IO.BinaryReader(s); | ||
417 | int x, y; | ||
418 | for (x = 0; x < w; x++) | ||
419 | { | ||
420 | for (y = 0; y < h; y++) | ||
421 | { | ||
422 | heightmap.map[x, y] = bs.ReadDouble(); | ||
423 | } | ||
424 | } | ||
425 | |||
426 | bs.Close(); | ||
427 | s.Close(); | ||
428 | |||
429 | tainted++; | ||
430 | } | ||
431 | |||
432 | /// <summary> | ||
433 | /// Loads a file consisting of 256x256 floats and imports it as an array into the map. | ||
434 | /// </summary> | ||
435 | /// <remarks>TODO: Move this to libTerrain itself</remarks> | ||
436 | /// <param name="filename">The filename of the float array to import</param> | ||
437 | public void loadFromFileF32(string filename) | ||
438 | { | ||
439 | System.IO.FileInfo file = new System.IO.FileInfo(filename); | ||
440 | System.IO.FileStream s = file.Open(System.IO.FileMode.Open, System.IO.FileAccess.Read); | ||
441 | System.IO.BinaryReader bs = new System.IO.BinaryReader(s); | ||
442 | int x, y; | ||
443 | for (x = 0; x < w; x++) | ||
444 | { | ||
445 | for (y = 0; y < h; y++) | ||
446 | { | ||
447 | heightmap.map[x, y] = (double)bs.ReadSingle(); | ||
448 | } | ||
449 | } | ||
450 | |||
451 | bs.Close(); | ||
452 | s.Close(); | ||
453 | |||
454 | tainted++; | ||
455 | } | ||
456 | |||
457 | /// <summary> | ||
458 | /// Loads a file formatted in the SL .RAW Format used on the main grid | ||
459 | /// </summary> | ||
460 | /// <remarks>This file format stinks and is best avoided.</remarks> | ||
461 | /// <param name="filename">A path to the .RAW format</param> | ||
462 | public void loadFromFileSLRAW(string filename) | ||
463 | { | ||
464 | System.IO.FileInfo file = new System.IO.FileInfo(filename); | ||
465 | System.IO.FileStream s = file.Open(System.IO.FileMode.Open, System.IO.FileAccess.Read); | ||
466 | System.IO.BinaryReader bs = new System.IO.BinaryReader(s); | ||
467 | int x, y; | ||
468 | for (x = 0; x < w; x++) | ||
469 | { | ||
470 | for (y = 0; y < h; y++) | ||
471 | { | ||
472 | heightmap.map[x, y] = (double)bs.ReadByte() * ((double)bs.ReadByte() / 127.0); | ||
473 | bs.ReadBytes(11); // Advance the stream to next bytes. | ||
474 | } | ||
475 | } | ||
476 | |||
477 | bs.Close(); | ||
478 | s.Close(); | ||
479 | |||
480 | tainted++; | ||
481 | } | ||
482 | |||
483 | /// <summary> | ||
484 | /// Writes the current terrain heightmap to disk, in the format of a 65536 entry double[] array. | ||
485 | /// </summary> | ||
486 | /// <param name="filename">The desired output filename</param> | ||
487 | public void writeToFileF64(string filename) | ||
488 | { | ||
489 | System.IO.FileInfo file = new System.IO.FileInfo(filename); | ||
490 | System.IO.FileStream s = file.Open(System.IO.FileMode.CreateNew, System.IO.FileAccess.Write); | ||
491 | System.IO.BinaryWriter bs = new System.IO.BinaryWriter(s); | ||
492 | |||
493 | int x, y; | ||
494 | for (x = 0; x < w; x++) | ||
495 | { | ||
496 | for (y = 0; y < h; y++) | ||
497 | { | ||
498 | bs.Write(heightmap.get(x, y)); | ||
499 | } | ||
500 | } | ||
501 | |||
502 | bs.Close(); | ||
503 | s.Close(); | ||
504 | } | ||
505 | |||
506 | /// <summary> | ||
507 | /// Writes the current terrain heightmap to disk, in the format of a 65536 entry float[] array | ||
508 | /// </summary> | ||
509 | /// <param name="filename">The desired output filename</param> | ||
510 | public void writeToFileF32(string filename) | ||
511 | { | ||
512 | System.IO.FileInfo file = new System.IO.FileInfo(filename); | ||
513 | System.IO.FileStream s = file.Open(System.IO.FileMode.CreateNew, System.IO.FileAccess.Write); | ||
514 | System.IO.BinaryWriter bs = new System.IO.BinaryWriter(s); | ||
515 | |||
516 | int x, y; | ||
517 | for (x = 0; x < w; x++) | ||
518 | { | ||
519 | for (y = 0; y < h; y++) | ||
520 | { | ||
521 | bs.Write((float)heightmap.get(x, y)); | ||
522 | } | ||
523 | } | ||
524 | |||
525 | bs.Close(); | ||
526 | s.Close(); | ||
527 | } | ||
528 | |||
529 | /// <summary> | ||
530 | /// Sets the random seed to be used by procedural functions which involve random numbers. | ||
531 | /// </summary> | ||
532 | /// <param name="val">The desired seed</param> | ||
533 | public void setSeed(int val) | ||
534 | { | ||
535 | heightmap.seed = val; | ||
536 | } | ||
537 | |||
538 | /// <summary> | ||
539 | /// Raises land in a sphere around the specified coordinates | ||
540 | /// </summary> | ||
541 | /// <param name="rx">Center of the sphere on the X axis</param> | ||
542 | /// <param name="ry">Center of the sphere on the Y axis</param> | ||
543 | /// <param name="size">The radius of the sphere</param> | ||
544 | /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param> | ||
545 | public void raise(double rx, double ry, double size, double amount) | ||
546 | { | ||
547 | lock (heightmap) | ||
548 | { | ||
549 | heightmap.raise(rx, ry, size, amount); | ||
550 | } | ||
551 | |||
552 | tainted++; | ||
553 | } | ||
554 | |||
555 | /// <summary> | ||
556 | /// Lowers the land in a sphere around the specified coordinates | ||
557 | /// </summary> | ||
558 | /// <param name="rx">The center of the sphere at the X axis</param> | ||
559 | /// <param name="ry">The center of the sphere at the Y axis</param> | ||
560 | /// <param name="size">The radius of the sphere in meters</param> | ||
561 | /// <param name="amount">Scale the height of the sphere by this amount (recommended 0..2)</param> | ||
562 | public void lower(double rx, double ry, double size, double amount) | ||
563 | { | ||
564 | lock (heightmap) | ||
565 | { | ||
566 | heightmap.lower(rx, ry, size, amount); | ||
567 | } | ||
568 | |||
569 | tainted++; | ||
570 | } | ||
571 | |||
572 | /// <summary> | ||
573 | /// Flattens the land under the brush of specified coordinates (spherical mask) | ||
574 | /// </summary> | ||
575 | /// <param name="rx">Center of sphere</param> | ||
576 | /// <param name="ry">Center of sphere</param> | ||
577 | /// <param name="size">Radius of the sphere</param> | ||
578 | /// <param name="amount">Thickness of the mask (0..2 recommended)</param> | ||
579 | public void flatten(double rx, double ry, double size, double amount) | ||
580 | { | ||
581 | lock (heightmap) | ||
582 | { | ||
583 | heightmap.flatten(rx, ry, size, amount); | ||
584 | } | ||
585 | |||
586 | tainted++; | ||
587 | } | ||
588 | |||
589 | /// <summary> | ||
590 | /// Creates noise within the specified bounds | ||
591 | /// </summary> | ||
592 | /// <param name="rx">Center of the bounding sphere</param> | ||
593 | /// <param name="ry">Center of the bounding sphere</param> | ||
594 | /// <param name="size">The radius of the sphere</param> | ||
595 | /// <param name="amount">Strength of the mask (0..2) recommended</param> | ||
596 | public void noise(double rx, double ry, double size, double amount) | ||
597 | { | ||
598 | lock (heightmap) | ||
599 | { | ||
600 | Channel smoothed = new Channel(); | ||
601 | smoothed.noise(); | ||
602 | |||
603 | Channel mask = new Channel(); | ||
604 | mask.raise(rx, ry, size, amount); | ||
605 | |||
606 | heightmap.blend(smoothed, mask); | ||
607 | } | ||
608 | |||
609 | tainted++; | ||
610 | } | ||
611 | |||
612 | /// <summary> | ||
613 | /// Reverts land within the specified bounds | ||
614 | /// </summary> | ||
615 | /// <param name="rx">Center of the bounding sphere</param> | ||
616 | /// <param name="ry">Center of the bounding sphere</param> | ||
617 | /// <param name="size">The radius of the sphere</param> | ||
618 | /// <param name="amount">Strength of the mask (0..2) recommended</param> | ||
619 | public void revert(double rx, double ry, double size, double amount) | ||
620 | { | ||
621 | lock (heightmap) | ||
622 | { | ||
623 | Channel mask = new Channel(); | ||
624 | mask.raise(rx, ry, size, amount); | ||
625 | |||
626 | heightmap.blend(revertmap, mask); | ||
627 | } | ||
628 | |||
629 | tainted++; | ||
630 | } | ||
631 | |||
632 | /// <summary> | ||
633 | /// Smooths land under the brush of specified coordinates (spherical mask) | ||
634 | /// </summary> | ||
635 | /// <param name="rx">Center of the sphere</param> | ||
636 | /// <param name="ry">Center of the sphere</param> | ||
637 | /// <param name="size">Radius of the sphere</param> | ||
638 | /// <param name="amount">Thickness of the mask (0..2 recommended)</param> | ||
639 | public void smooth(double rx, double ry, double size, double amount) | ||
640 | { | ||
641 | lock (heightmap) | ||
642 | { | ||
643 | Channel smoothed = heightmap.copy(); | ||
644 | smoothed.smooth(amount); | ||
645 | |||
646 | Channel mask = new Channel(); | ||
647 | mask.raise(rx,ry,size,amount); | ||
648 | |||
649 | heightmap.blend(smoothed, mask); | ||
650 | } | ||
651 | |||
652 | tainted++; | ||
653 | } | ||
654 | |||
655 | /// <summary> | ||
656 | /// Generates a simple set of hills in the shape of an island | ||
657 | /// </summary> | ||
658 | public void hills() | ||
659 | { | ||
660 | lock (heightmap) | ||
661 | { | ||
662 | heightmap.hillsSpheres(200, 20, 40, true, true, false); | ||
663 | heightmap.normalise(); | ||
664 | heightmap *= 60.0; // Raise to 60m | ||
665 | } | ||
666 | |||
667 | tainted++; | ||
668 | } | ||
669 | |||
670 | /// <summary> | ||
671 | /// Multiplies the heightfield by val | ||
672 | /// </summary> | ||
673 | /// <param name="meep">The heightfield</param> | ||
674 | /// <param name="val">The multiplier</param> | ||
675 | /// <returns></returns> | ||
676 | public static TerrainEngine operator *(TerrainEngine meep, Double val) | ||
677 | { | ||
678 | meep.heightmap *= val; | ||
679 | meep.tainted++; | ||
680 | return meep; | ||
681 | } | ||
682 | |||
683 | /// <summary> | ||
684 | /// Returns the height at the coordinates x,y | ||
685 | /// </summary> | ||
686 | /// <param name="x">X Coordinate</param> | ||
687 | /// <param name="y">Y Coordinate</param> | ||
688 | /// <returns></returns> | ||
689 | public float this[int x, int y] | ||
690 | { | ||
691 | get | ||
692 | { | ||
693 | return (float)heightmap.get(x, y); | ||
694 | } | ||
695 | set | ||
696 | { | ||
697 | tainted++; | ||
698 | heightmap.set(x, y, (double)value); | ||
699 | } | ||
700 | } | ||
701 | |||
702 | /// <summary> | ||
703 | /// Exports the current heightmap to a PNG file | ||
704 | /// </summary> | ||
705 | /// <param name="filename">The destination filename for the image</param> | ||
706 | /// <param name="gradientmap">A 1x*height* image which contains the colour gradient to export with. Must be at least 1x2 pixels, 1x256 or more is ideal.</param> | ||
707 | public void exportImage(string filename, string gradientmap) | ||
708 | { | ||
709 | try | ||
710 | { | ||
711 | Bitmap gradientmapLd = new Bitmap(gradientmap); | ||
712 | |||
713 | int pallete = gradientmapLd.Height; | ||
714 | |||
715 | Bitmap bmp = new Bitmap(heightmap.w, heightmap.h); | ||
716 | Color[] colours = new Color[pallete]; | ||
717 | |||
718 | for (int i = 0; i < pallete; i++) | ||
719 | { | ||
720 | colours[i] = gradientmapLd.GetPixel(0, i); | ||
721 | } | ||
722 | |||
723 | Channel copy = heightmap.copy(); | ||
724 | for (int x = 0; x < copy.w; x++) | ||
725 | { | ||
726 | for (int y = 0; y < copy.h; y++) | ||
727 | { | ||
728 | // 512 is the largest possible height before colours clamp | ||
729 | int colorindex = (int)(Math.Max(Math.Min(1.0, copy.get(x, y) / 512.0), 0.0) * pallete); | ||
730 | bmp.SetPixel(x, y, colours[colorindex]); | ||
731 | } | ||
732 | } | ||
733 | |||
734 | bmp.Save(filename, System.Drawing.Imaging.ImageFormat.Png); | ||
735 | } | ||
736 | catch (Exception e) | ||
737 | { | ||
738 | Console.WriteLine("Failed generating terrain map: " + e.ToString()); | ||
739 | } | ||
740 | } | ||
741 | |||
742 | /// <summary> | ||
743 | /// Exports the current heightmap in Jpeg2000 format to a byte[] | ||
744 | /// </summary> | ||
745 | /// <param name="gradientmap">A 1x*height* image which contains the colour gradient to export with. Must be at least 1x2 pixels, 1x256 or more is ideal.</param> | ||
746 | public byte[] exportJpegImage(string gradientmap) | ||
747 | { | ||
748 | byte[] imageData = null; | ||
749 | try | ||
750 | { | ||
751 | Bitmap gradientmapLd = new Bitmap(gradientmap); | ||
752 | |||
753 | int pallete = gradientmapLd.Height; | ||
754 | |||
755 | Bitmap bmp = new Bitmap(heightmap.w, heightmap.h); | ||
756 | Color[] colours = new Color[pallete]; | ||
757 | |||
758 | for (int i = 0; i < pallete; i++) | ||
759 | { | ||
760 | colours[i] = gradientmapLd.GetPixel(0, i); | ||
761 | } | ||
762 | |||
763 | Channel copy = heightmap.copy(); | ||
764 | for (int x = 0; x < copy.w; x++) | ||
765 | { | ||
766 | for (int y = 0; y < copy.h; y++) | ||
767 | { | ||
768 | // 512 is the largest possible height before colours clamp | ||
769 | int colorindex = (int)(Math.Max(Math.Min(1.0, copy.get(copy.h - y, x) / 512.0), 0.0) * pallete); | ||
770 | bmp.SetPixel(x, y, colours[colorindex]); | ||
771 | } | ||
772 | } | ||
773 | |||
774 | //bmp.Save(filename, System.Drawing.Imaging.ImageFormat.Png); | ||
775 | imageData = OpenJPEGNet.OpenJPEG.EncodeFromImage(bmp, "map"); | ||
776 | |||
777 | } | ||
778 | catch (Exception e) | ||
779 | { | ||
780 | Console.WriteLine("Failed generating terrain map: " + e.ToString()); | ||
781 | } | ||
782 | |||
783 | return imageData; | ||
784 | } | ||
785 | } | ||
786 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Terrain.BasicTerrain/TerrainFilter.cs b/OpenSim/Region/Terrain.BasicTerrain/TerrainFilter.cs new file mode 100644 index 0000000..689375d --- /dev/null +++ b/OpenSim/Region/Terrain.BasicTerrain/TerrainFilter.cs | |||
@@ -0,0 +1,103 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | |||
5 | using System.CodeDom.Compiler; | ||
6 | using System.CodeDom; | ||
7 | using Microsoft.CSharp; | ||
8 | using Microsoft.JScript; | ||
9 | |||
10 | using libTerrain; | ||
11 | |||
12 | namespace OpenSim.Terrain | ||
13 | { | ||
14 | public interface ITerrainFilter | ||
15 | { | ||
16 | void Filter(Channel heightmap, string[] args); | ||
17 | string Register(); | ||
18 | string Help(); | ||
19 | } | ||
20 | |||
21 | public class TestFilter : ITerrainFilter | ||
22 | { | ||
23 | public void Filter(Channel heightmap, string[] args) | ||
24 | { | ||
25 | Console.WriteLine("Hello world"); | ||
26 | } | ||
27 | |||
28 | public string Register() | ||
29 | { | ||
30 | return "demofilter"; | ||
31 | } | ||
32 | |||
33 | public string Help() | ||
34 | { | ||
35 | return "demofilter - Does nothing"; | ||
36 | } | ||
37 | } | ||
38 | |||
39 | public class FilterHost | ||
40 | { | ||
41 | public Dictionary<string, ITerrainFilter> filters = new Dictionary<string, ITerrainFilter>(); | ||
42 | |||
43 | private void LoadFilter(ICodeCompiler compiler, string filename) | ||
44 | { | ||
45 | CompilerParameters compilerParams = new CompilerParameters(); | ||
46 | CompilerResults compilerResults; | ||
47 | compilerParams.GenerateExecutable = false; | ||
48 | compilerParams.GenerateInMemory = true; | ||
49 | compilerParams.IncludeDebugInformation = false; | ||
50 | compilerParams.ReferencedAssemblies.Add("libTerrain-BSD.dll"); | ||
51 | compilerParams.ReferencedAssemblies.Add("OpenSim.Terrain.BasicTerrain.dll"); | ||
52 | compilerParams.ReferencedAssemblies.Add("System.dll"); | ||
53 | |||
54 | compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename); | ||
55 | |||
56 | if (compilerResults.Errors.Count > 0) | ||
57 | { | ||
58 | Console.WriteLine("Compile errors:"); | ||
59 | foreach (CompilerError error in compilerResults.Errors) | ||
60 | { | ||
61 | Console.WriteLine(error.Line.ToString() + ": " + error.ErrorText.ToString()); | ||
62 | } | ||
63 | } | ||
64 | else | ||
65 | { | ||
66 | foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes()) | ||
67 | { | ||
68 | Type testInterface = pluginType.GetInterface("ITerrainFilter",true); | ||
69 | |||
70 | if (testInterface != null) | ||
71 | { | ||
72 | ITerrainFilter filter = (ITerrainFilter)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString()); | ||
73 | |||
74 | string filterName = filter.Register(); | ||
75 | Console.WriteLine("Plugin: " + filterName + " loaded."); | ||
76 | |||
77 | if (!filters.ContainsKey(filterName)) | ||
78 | { | ||
79 | filters.Add(filterName, filter); | ||
80 | } | ||
81 | else | ||
82 | { | ||
83 | filters[filterName] = filter; | ||
84 | } | ||
85 | } | ||
86 | } | ||
87 | } | ||
88 | |||
89 | } | ||
90 | |||
91 | public void LoadFilterCSharp(string filename) | ||
92 | { | ||
93 | CSharpCodeProvider compiler = new CSharpCodeProvider(); | ||
94 | LoadFilter(compiler.CreateCompiler(), filename); | ||
95 | } | ||
96 | |||
97 | public void LoadFilterJScript(string filename) | ||
98 | { | ||
99 | JScriptCodeProvider compiler = new JScriptCodeProvider(); | ||
100 | LoadFilter(compiler.CreateCompiler(), filename); | ||
101 | } | ||
102 | } | ||
103 | } | ||