Merge branch 'careminster-presence-refactor' of ssh://3dhosting.de/var/git/careminster into careminster-presence-refactor
						commit
						413f0c6848
					
				|  | @ -669,10 +669,6 @@ namespace OpenSim.Data.SQLite | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// | ||||
|         /// </summary> | ||||
|         /// <param name="globalID"></param> | ||||
|         public void RemoveLandObject(UUID globalID) | ||||
|         { | ||||
|             lock (ds) | ||||
|  | @ -698,7 +694,6 @@ namespace OpenSim.Data.SQLite | |||
|                 if (landRow != null) | ||||
|                 { | ||||
|                     landRow.Delete(); | ||||
|                     land.Rows.Remove(landRow); | ||||
|                 } | ||||
|                 List<DataRow> rowsToDelete = new List<DataRow>(); | ||||
|                 foreach (DataRow rowToCheck in landaccesslist.Rows) | ||||
|  | @ -709,7 +704,6 @@ namespace OpenSim.Data.SQLite | |||
|                 for (int iter = 0; iter < rowsToDelete.Count; iter++) | ||||
|                 { | ||||
|                     rowsToDelete[iter].Delete(); | ||||
|                     landaccesslist.Rows.Remove(rowsToDelete[iter]); | ||||
|                 } | ||||
|             } | ||||
|             Commit(); | ||||
|  |  | |||
|  | @ -1030,11 +1030,12 @@ namespace OpenSim | |||
|                         delegate(Scene scene) | ||||
|                             { | ||||
|                                 MainConsole.Instance.Output(String.Format( | ||||
|                                            "Region Name: {0}, Region XLoc: {1}, Region YLoc: {2}, Region Port: {3}", | ||||
|                                            "Region Name: {0}, Region XLoc: {1}, Region YLoc: {2}, Region Port: {3}, Estate Name: {4}", | ||||
|                                            scene.RegionInfo.RegionName, | ||||
|                                            scene.RegionInfo.RegionLocX, | ||||
|                                            scene.RegionInfo.RegionLocY, | ||||
|                                            scene.RegionInfo.InternalEndPoint.Port)); | ||||
|                                            scene.RegionInfo.InternalEndPoint.Port, | ||||
|                                            scene.RegionInfo.EstateSettings.EstateName)); | ||||
|                             }); | ||||
|                     break; | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ | |||
| 
 | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Diagnostics; | ||||
| using System.IO; | ||||
| using System.Net; | ||||
| using System.Net.Sockets; | ||||
|  | @ -639,10 +640,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|             { | ||||
|                 object[] array = new object[] { buffer, packet }; | ||||
| 
 | ||||
|                 if (m_asyncPacketHandling) | ||||
|                     Util.FireAndForget(HandleUseCircuitCode, array); | ||||
|                 else | ||||
|                     HandleUseCircuitCode(array); | ||||
|                 Util.FireAndForget(HandleUseCircuitCode, array); | ||||
| 
 | ||||
|                 return; | ||||
|             } | ||||
|  | @ -859,10 +857,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|             // Begin the process of adding the client to the simulator | ||||
|             AddNewClient((UseCircuitCodePacket)packet, remoteEndPoint); | ||||
| 
 | ||||
|             // Acknowledge the UseCircuitCode packet | ||||
|             // Send ack | ||||
|             SendAckImmediate(remoteEndPoint, packet.Header.Sequence); | ||||
|              | ||||
| //            m_log.DebugFormat( | ||||
| 
 | ||||
|             //            m_log.DebugFormat( | ||||
| //                "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",  | ||||
| //                buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds); | ||||
|         } | ||||
|  | @ -926,25 +924,32 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
| 
 | ||||
|         protected virtual void AddClient(uint circuitCode, UUID agentID, UUID sessionID, IPEndPoint remoteEndPoint, AuthenticateResponse sessionInfo) | ||||
|         { | ||||
|             // Create the LLUDPClient | ||||
|             LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, m_throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO); | ||||
|             IClientAPI existingClient; | ||||
| 
 | ||||
|             if (!m_scene.TryGetClient(agentID, out existingClient)) | ||||
|             // In priciple there shouldn't be more than one thread here, ever. | ||||
|             // But in case that happens, we need to synchronize this piece of code | ||||
|             // because it's too important | ||||
|             lock (this)  | ||||
|             { | ||||
|                 // Create the LLClientView | ||||
|                 LLClientView client = new LLClientView(remoteEndPoint, m_scene, this, udpClient, sessionInfo, agentID, sessionID, circuitCode); | ||||
|                 client.OnLogout += LogoutHandler; | ||||
|                 IClientAPI existingClient; | ||||
| 
 | ||||
|                 client.DisableFacelights = m_disableFacelights; | ||||
|                 if (!m_scene.TryGetClient(agentID, out existingClient)) | ||||
|                 { | ||||
|                     // Create the LLUDPClient | ||||
|                     LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, m_throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO); | ||||
|                     // Create the LLClientView | ||||
|                     LLClientView client = new LLClientView(remoteEndPoint, m_scene, this, udpClient, sessionInfo, agentID, sessionID, circuitCode); | ||||
|                     client.OnLogout += LogoutHandler; | ||||
| 
 | ||||
|                 // Start the IClientAPI | ||||
|                 client.Start(); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 m_log.WarnFormat("[LLUDPSERVER]: Ignoring a repeated UseCircuitCode from {0} at {1} for circuit {2}", | ||||
|                     udpClient.AgentID, remoteEndPoint, circuitCode); | ||||
|                     client.DisableFacelights = m_disableFacelights; | ||||
| 
 | ||||
|                     // Start the IClientAPI | ||||
|                     client.Start(); | ||||
| 
 | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     m_log.WarnFormat("[LLUDPSERVER]: Ignoring a repeated UseCircuitCode from {0} at {1} for circuit {2}", | ||||
|                         existingClient.AgentId, remoteEndPoint, circuitCode); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  | @ -1055,6 +1060,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
| 
 | ||||
|                     #endregion Update Timers | ||||
| 
 | ||||
|                     // Use this for emergency monitoring -- bug hunting | ||||
|                     //if (m_scene.EmergencyMonitoring) | ||||
|                     //    clientPacketHandler = MonitoredClientOutgoingPacketHandler; | ||||
|                     //else | ||||
|                     //    clientPacketHandler = ClientOutgoingPacketHandler; | ||||
| 
 | ||||
|                     // Handle outgoing packets, resends, acknowledgements, and pings for each | ||||
|                     // client. m_packetSent will be set to true if a packet is sent | ||||
|                     m_scene.ForEachClient(clientPacketHandler); | ||||
|  | @ -1070,6 +1081,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|                 { | ||||
|                     m_log.Error("[LLUDPSERVER]: OutgoingPacketHandler loop threw an exception: " + ex.Message, ex); | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
|             Watchdog.RemoveThread(); | ||||
|  | @ -1107,6 +1119,112 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         #region Emergency Monitoring | ||||
|         // Alternative packet handler fuull of instrumentation | ||||
|         // Handy for hunting bugs | ||||
|         private Stopwatch watch1 = new Stopwatch(); | ||||
|         private Stopwatch watch2 = new Stopwatch(); | ||||
| 
 | ||||
|         private float avgProcessingTicks = 0; | ||||
|         private float avgResendUnackedTicks = 0; | ||||
|         private float avgSendAcksTicks = 0; | ||||
|         private float avgSendPingTicks = 0; | ||||
|         private float avgDequeueTicks = 0; | ||||
|         private long nticks = 0; | ||||
|         private long nticksUnack = 0; | ||||
|         private long nticksAck = 0; | ||||
|         private long nticksPing = 0; | ||||
|         private int npacksSent = 0; | ||||
|         private int npackNotSent = 0; | ||||
| 
 | ||||
|         private void MonitoredClientOutgoingPacketHandler(IClientAPI client) | ||||
|         { | ||||
|             nticks++; | ||||
|             watch1.Start(); | ||||
|             try | ||||
|             { | ||||
|                 if (client is LLClientView) | ||||
|                 { | ||||
|                     LLUDPClient udpClient = ((LLClientView)client).UDPClient; | ||||
| 
 | ||||
|                     if (udpClient.IsConnected) | ||||
|                     { | ||||
|                         if (m_resendUnacked) | ||||
|                         { | ||||
|                             nticksUnack++; | ||||
|                             watch2.Start(); | ||||
| 
 | ||||
|                             ResendUnacked(udpClient); | ||||
| 
 | ||||
|                             watch2.Stop(); | ||||
|                             avgResendUnackedTicks = (nticksUnack - 1)/(float)nticksUnack * avgResendUnackedTicks + (watch2.ElapsedTicks / (float)nticksUnack); | ||||
|                             watch2.Reset(); | ||||
|                         } | ||||
| 
 | ||||
|                         if (m_sendAcks) | ||||
|                         { | ||||
|                             nticksAck++; | ||||
|                             watch2.Start(); | ||||
|                              | ||||
|                             SendAcks(udpClient); | ||||
| 
 | ||||
|                             watch2.Stop(); | ||||
|                             avgSendAcksTicks = (nticksAck - 1) / (float)nticksAck * avgSendAcksTicks + (watch2.ElapsedTicks / (float)nticksAck); | ||||
|                             watch2.Reset(); | ||||
|                         } | ||||
| 
 | ||||
|                         if (m_sendPing) | ||||
|                         { | ||||
|                             nticksPing++; | ||||
|                             watch2.Start(); | ||||
|                              | ||||
|                             SendPing(udpClient); | ||||
| 
 | ||||
|                             watch2.Stop(); | ||||
|                             avgSendPingTicks = (nticksPing - 1) / (float)nticksPing * avgSendPingTicks + (watch2.ElapsedTicks / (float)nticksPing); | ||||
|                             watch2.Reset(); | ||||
|                         } | ||||
| 
 | ||||
|                         watch2.Start(); | ||||
|                         // Dequeue any outgoing packets that are within the throttle limits | ||||
|                         if (udpClient.DequeueOutgoing()) | ||||
|                         { | ||||
|                             m_packetSent = true; | ||||
|                             npacksSent++; | ||||
|                         } | ||||
|                         else | ||||
|                             npackNotSent++; | ||||
| 
 | ||||
|                         watch2.Stop(); | ||||
|                         avgDequeueTicks = (nticks - 1) / (float)nticks * avgDequeueTicks + (watch2.ElapsedTicks / (float)nticks); | ||||
|                         watch2.Reset(); | ||||
| 
 | ||||
|                     } | ||||
|                     else | ||||
|                         m_log.WarnFormat("[LLUDPSERVER]: Client is not connected"); | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 m_log.Error("[LLUDPSERVER]: OutgoingPacketHandler iteration for " + client.Name + | ||||
|                     " threw an exception: " + ex.Message, ex); | ||||
|             } | ||||
|             watch1.Stop(); | ||||
|             avgProcessingTicks = (nticks - 1) / (float)nticks * avgProcessingTicks + (watch1.ElapsedTicks / (float)nticks); | ||||
|             watch1.Reset(); | ||||
| 
 | ||||
|             // reuse this -- it's every ~100ms | ||||
|             if (m_scene.EmergencyMonitoring && nticks % 100 == 0) | ||||
|             { | ||||
|                 m_log.InfoFormat("[LLUDPSERVER]: avg processing ticks: {0} avg unacked: {1} avg acks: {2} avg ping: {3} avg dequeue: {4} (TickCountRes: {5} sent: {6} notsent: {7})",  | ||||
|                     avgProcessingTicks, avgResendUnackedTicks, avgSendAcksTicks, avgSendPingTicks, avgDequeueTicks, TickCountResolution, npacksSent, npackNotSent); | ||||
|                 npackNotSent = npacksSent = 0; | ||||
|             } | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         #endregion  | ||||
| 
 | ||||
|         private void ProcessInPacket(object state) | ||||
|         { | ||||
|             IncomingPacket incomingPacket = (IncomingPacket)state; | ||||
|  |  | |||
|  | @ -141,46 +141,35 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
|         private void ProcessQueues() | ||||
|         { | ||||
|             // Process all the pending adds | ||||
| 
 | ||||
|             OutgoingPacket pendingAdd; | ||||
|             if (m_pendingAdds != null) | ||||
|             { | ||||
|                 while (m_pendingAdds.TryDequeue(out pendingAdd)) | ||||
|                 { | ||||
|                     if (pendingAdd != null && m_packets != null) | ||||
|                     { | ||||
|                         m_packets[pendingAdd.SequenceNumber] = pendingAdd; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             while (m_pendingAdds.TryDequeue(out pendingAdd)) | ||||
|                 if (pendingAdd != null) | ||||
|                     m_packets[pendingAdd.SequenceNumber] = pendingAdd; | ||||
|              | ||||
|             // Process all the pending removes, including updating statistics and round-trip times | ||||
|             PendingAck pendingRemove; | ||||
|             OutgoingPacket ackedPacket; | ||||
|             if (m_pendingRemoves != null) | ||||
|             while (m_pendingRemoves.TryDequeue(out pendingRemove)) | ||||
|             { | ||||
|                 while (m_pendingRemoves.TryDequeue(out pendingRemove)) | ||||
|                 if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket)) | ||||
|                 { | ||||
|                     if (m_pendingRemoves != null && m_packets != null) | ||||
|                     if (ackedPacket != null) | ||||
|                     { | ||||
|                         if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket)) | ||||
|                         m_packets.Remove(pendingRemove.SequenceNumber); | ||||
| 
 | ||||
|                         // Update stats | ||||
|                         Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength); | ||||
| 
 | ||||
|                         if (!pendingRemove.FromResend) | ||||
|                         { | ||||
|                             m_packets.Remove(pendingRemove.SequenceNumber); | ||||
| 
 | ||||
|                             // Update stats | ||||
|                             Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength); | ||||
| 
 | ||||
|                             if (!pendingRemove.FromResend) | ||||
|                             { | ||||
|                                 // Calculate the round-trip time for this packet and its ACK | ||||
|                                 int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount; | ||||
|                                 if (rtt > 0) | ||||
|                                     ackedPacket.Client.UpdateRoundTrip(rtt); | ||||
|                             } | ||||
|                             // Calculate the round-trip time for this packet and its ACK | ||||
|                             int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount; | ||||
|                             if (rtt > 0) | ||||
|                                 ackedPacket.Client.UpdateRoundTrip(rtt); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
|  | @ -139,7 +139,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
|              | ||||
|             if (scene != null) | ||||
|             { | ||||
|                 UserAccount account = scene.UserAccountService.GetUserAccount(UUID.Zero, userID); | ||||
|                 UserAccount account = scene.UserAccountService.GetUserAccount(UUID.Zero, new UUID(userID)); | ||||
|                 isAuthorized = IsAuthorizedForRegion(userID, account.FirstName, account.LastName, | ||||
|                     account.Email, scene.RegionInfo.RegionName, regionID, out message); | ||||
|             } | ||||
|  |  | |||
|  | @ -0,0 +1,156 @@ | |||
| /* | ||||
|  * Copyright (c) Contributors, http://opensimulator.org/ | ||||
|  * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are met: | ||||
|  *     * Redistributions of source code must retain the above copyright | ||||
|  *       notice, this list of conditions and the following disclaimer. | ||||
|  *     * Redistributions in binary form must reproduce the above copyright | ||||
|  *       notice, this list of conditions and the following disclaimer in the | ||||
|  *       documentation and/or other materials provided with the distribution. | ||||
|  *     * Neither the name of the OpenSimulator Project nor the | ||||
|  *       names of its contributors may be used to endorse or promote products | ||||
|  *       derived from this software without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||||
|  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||||
|  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
|  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||||
|  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||||
|  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
|  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||||
|  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
|  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||||
|  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using System.Reflection; | ||||
| using System.Security; | ||||
| using log4net; | ||||
| using Nini.Config; | ||||
| using OpenMetaverse; | ||||
| using OpenSim.Framework; | ||||
| using OpenSim.Region.Framework.Interfaces; | ||||
| using OpenSim.Region.Framework.Scenes; | ||||
| 
 | ||||
| namespace OpenSim.Region.CoreModules.World.Estate | ||||
| { | ||||
|     public class EstateManagementCommands | ||||
|     { | ||||
|         private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||||
|          | ||||
|         protected EstateManagementModule m_module; | ||||
|          | ||||
|         public EstateManagementCommands(EstateManagementModule module) | ||||
|         { | ||||
|             m_module = module; | ||||
|         } | ||||
|          | ||||
|         public void Initialise() | ||||
|         {             | ||||
|             m_module.Scene.AddCommand(this, "set terrain texture", | ||||
|                                "set terrain texture <number> <uuid> [<x>] [<y>]", | ||||
|                                "Sets the terrain <number> to <uuid>, if <x> or <y> are specified, it will only " + | ||||
|                                "set it on regions with a matching coordinate. Specify -1 in <x> or <y> to wildcard" + | ||||
|                                " that coordinate.", | ||||
|                                consoleSetTerrainTexture); | ||||
| 
 | ||||
|             m_module.Scene.AddCommand(this, "set terrain heights", | ||||
|                                "set terrain heights <corner> <min> <max> [<x>] [<y>]", | ||||
|                                "Sets the terrain texture heights on corner #<corner> to <min>/<max>, if <x> or <y> are specified, it will only " + | ||||
|                                "set it on regions with a matching coordinate. Specify -1 in <x> or <y> to wildcard" + | ||||
|                                " that coordinate. Corner # SW = 0, NW = 1, SE = 2, NE = 3.", | ||||
|                                consoleSetTerrainHeights);             | ||||
|         }           | ||||
|          | ||||
|         protected void consoleSetTerrainTexture(string module, string[] args) | ||||
|         { | ||||
|             string num = args[3]; | ||||
|             string uuid = args[4]; | ||||
|             int x = (args.Length > 5 ? int.Parse(args[5]) : -1); | ||||
|             int y = (args.Length > 6 ? int.Parse(args[6]) : -1); | ||||
| 
 | ||||
|             if (x == -1 || m_module.Scene.RegionInfo.RegionLocX == x) | ||||
|             { | ||||
|                 if (y == -1 || m_module.Scene.RegionInfo.RegionLocY == y) | ||||
|                 { | ||||
|                     int corner = int.Parse(num); | ||||
|                     UUID texture = UUID.Parse(uuid); | ||||
| 
 | ||||
|                     m_log.Debug("[ESTATEMODULE]: Setting terrain textures for " + m_module.Scene.RegionInfo.RegionName + | ||||
|                                 string.Format(" (C#{0} = {1})", corner, texture)); | ||||
| 
 | ||||
|                     switch (corner) | ||||
|                     { | ||||
|                         case 0: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.TerrainTexture1 = texture; | ||||
|                             break; | ||||
|                         case 1: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.TerrainTexture2 = texture; | ||||
|                             break; | ||||
|                         case 2: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.TerrainTexture3 = texture; | ||||
|                             break; | ||||
|                         case 3: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.TerrainTexture4 = texture; | ||||
|                             break; | ||||
|                     } | ||||
|                      | ||||
|                     m_module.Scene.RegionInfo.RegionSettings.Save(); | ||||
|                     m_module.TriggerRegionInfoChange(); | ||||
|                     m_module.sendRegionInfoPacketToAll(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|   | ||||
|         protected void consoleSetTerrainHeights(string module, string[] args) | ||||
|         { | ||||
|             string num = args[3]; | ||||
|             string min = args[4]; | ||||
|             string max = args[5]; | ||||
|             int x = (args.Length > 6 ? int.Parse(args[6]) : -1); | ||||
|             int y = (args.Length > 7 ? int.Parse(args[7]) : -1); | ||||
| 
 | ||||
|             if (x == -1 || m_module.Scene.RegionInfo.RegionLocX == x) | ||||
|             { | ||||
|                 if (y == -1 || m_module.Scene.RegionInfo.RegionLocY == y) | ||||
|                 { | ||||
|                     int corner = int.Parse(num); | ||||
|                     float lowValue = float.Parse(min, Culture.NumberFormatInfo); | ||||
|                     float highValue = float.Parse(max, Culture.NumberFormatInfo); | ||||
| 
 | ||||
|                     m_log.Debug("[ESTATEMODULE]: Setting terrain heights " + m_module.Scene.RegionInfo.RegionName + | ||||
|                                 string.Format(" (C{0}, {1}-{2}", corner, lowValue, highValue)); | ||||
| 
 | ||||
|                     switch (corner) | ||||
|                     { | ||||
|                         case 0: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation1SW = lowValue; | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation2SW = highValue; | ||||
|                             break; | ||||
|                         case 1: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation1NW = lowValue; | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation2NW = highValue; | ||||
|                             break; | ||||
|                         case 2: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation1SE = lowValue; | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation2SE = highValue; | ||||
|                             break; | ||||
|                         case 3: | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation1NE = lowValue; | ||||
|                             m_module.Scene.RegionInfo.RegionSettings.Elevation2NE = highValue; | ||||
|                             break; | ||||
|                     } | ||||
|                      | ||||
|                     m_module.Scene.RegionInfo.RegionSettings.Save(); | ||||
|                     m_module.TriggerRegionInfoChange(); | ||||
|                     m_module.sendRegionHandshakeToAll(); | ||||
|                 } | ||||
|             } | ||||
|         }      | ||||
|     } | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -764,10 +764,11 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
| 
 | ||||
|             if (!responseMap.ContainsKey(itemtype.ToString())) // remote sim doesnt have the stated region handle | ||||
|             { | ||||
|                 if (!m_blacklistedregions.ContainsKey(regionhandle)) | ||||
|                 m_log.DebugFormat("[WORLD MAP]: Remote sim does not have the stated region. Blacklisting."); | ||||
|                 lock (m_blacklistedregions) | ||||
|                 { | ||||
|                     m_log.DebugFormat("[WORLD MAP]: Remote sim does not have the stated region. Blacklisting."); | ||||
|                     m_blacklistedregions.Add(regionhandle, Environment.TickCount); | ||||
|                     if (!m_blacklistedregions.ContainsKey(regionhandle)) | ||||
|                         m_blacklistedregions.Add(regionhandle, Environment.TickCount); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|  |  | |||
|  | @ -64,6 +64,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|         #region Fields | ||||
| 
 | ||||
|         public bool EmergencyMonitoring = false; | ||||
| 
 | ||||
|         public SynchronizeSceneHandler SynchronizeScene; | ||||
|         public SimStatsReporter StatsReporter; | ||||
|         public List<Border> NorthBorders = new List<Border>(); | ||||
|  |  | |||
|  | @ -95,7 +95,15 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
|                 "Show throttle settings for each client and for the server overall",  | ||||
|                 "Without the 'full' option, only root agents are shown." | ||||
|                   + "  With the 'full' option child agents are also shown.",                                           | ||||
|                 ShowThrottlesReport);                              | ||||
|                 ShowThrottlesReport); | ||||
| 
 | ||||
|             scene.AddCommand( | ||||
|                 this, "emergency-monitoring", | ||||
|                 "Go on/off emergency monitoring mode", | ||||
|                 "Go on/off emergency monitoring mode", | ||||
|                 "Go on/off emergency monitoring mode", | ||||
|                 EmergencyMonitoring);                              | ||||
| 
 | ||||
|         } | ||||
|          | ||||
|         public void RemoveRegion(Scene scene) | ||||
|  | @ -120,7 +128,25 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
|         { | ||||
|             MainConsole.Instance.Output(GetThrottlesReport(cmd)); | ||||
|         } | ||||
|          | ||||
| 
 | ||||
|         protected void EmergencyMonitoring(string module, string[] cmd) | ||||
|         { | ||||
|             bool mode = true; | ||||
|             if (cmd.Length == 1 || (cmd.Length > 1 && cmd[1] == "on")) | ||||
|             { | ||||
|                 mode = true; | ||||
|                 MainConsole.Instance.Output("Emergency Monitoring ON"); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 mode = false; | ||||
|                 MainConsole.Instance.Output("Emergency Monitoring OFF"); | ||||
|             } | ||||
| 
 | ||||
|             foreach (Scene s in m_scenes.Values) | ||||
|                 s.EmergencyMonitoring = mode; | ||||
|         } | ||||
| 
 | ||||
|         protected string GetColumnEntry(string entry, int maxLength, int columnPadding) | ||||
|         {                        | ||||
|             return string.Format( | ||||
|  | @ -335,7 +361,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
|             ThrottleRates throttleRates = udpServer.ThrottleRates; | ||||
|             report.AppendFormat( | ||||
|                 "{0,7} {1,8} {2,7} {3,7} {4,7} {5,7} {6,9} {7,7}", | ||||
|                 "n/a", | ||||
|                 (throttleRates.Total * 8) / 1000, | ||||
|                 (throttleRates.ResendLimit * 8) / 1000, | ||||
|                 (throttleRates.LandLimit * 8) / 1000, | ||||
|                 (throttleRates.WindLimit * 8) / 1000, | ||||
|  |  | |||
|  | @ -205,6 +205,11 @@ namespace OpenSim.Server.Handlers.Simulation | |||
| 
 | ||||
|             // We're behind a proxy | ||||
|             Hashtable headers = (Hashtable)request["headers"]; | ||||
| 
 | ||||
|             //// DEBUG | ||||
|             //foreach (object o in headers.Keys) | ||||
|             //    m_log.DebugFormat("XXX {0} = {1}", o.ToString(), (headers[o] == null? "null" : headers[o].ToString())); | ||||
| 
 | ||||
|             string xff = "X-Forwarded-For"; | ||||
|             if (headers.ContainsKey(xff.ToLower())) | ||||
|                 xff = xff.ToLower(); | ||||
|  |  | |||
|  | @ -306,6 +306,9 @@ | |||
| [ODEPhysicsSettings] | ||||
|     ;# {mesh_sculpted_prim} {[Startup]physics:OpenDynamicsEngine} {Mesh sculpties so they collide as they look?} {true false} true | ||||
|     ;; Do we want to mesh sculpted prim to collide like they look? | ||||
|     ;; If you are seeing sculpt texture decode problems  | ||||
|     ;; (messages such as "Decoded image with unhandled number of components: 0 shortly followed by a physcs exception") | ||||
|     ;; then you might want to try setting this to false. | ||||
|     ; mesh_sculpted_prim = true | ||||
| 
 | ||||
|     ;# {use_NINJA_physics_joints} {[Startup]physics:OpenDynamicsEngine} {Use jointed (NINJA) physics?} {true false} false | ||||
|  |  | |||
							
								
								
									
										
											BIN
										
									
								
								bin/sqlite3.dll
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/sqlite3.dll
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	 Melanie
						Melanie