aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/Console/LogBase.cs14
-rw-r--r--OpenSim/Framework/Data.MySQL/MySQLDataStore.cs5
-rw-r--r--OpenSim/Framework/RegionInfo.cs16
-rw-r--r--OpenSim/Framework/SerializableRegionInfo.cs2
-rw-r--r--OpenSim/Region/ClientStack/RegionApplicationBase.cs10
-rw-r--r--OpenSim/Region/ClientStack/UDPServer.cs45
6 files changed, 78 insertions, 14 deletions
diff --git a/OpenSim/Framework/Console/LogBase.cs b/OpenSim/Framework/Console/LogBase.cs
index 0036921..f7d0d1f 100644
--- a/OpenSim/Framework/Console/LogBase.cs
+++ b/OpenSim/Framework/Console/LogBase.cs
@@ -67,7 +67,19 @@ namespace OpenSim.Framework.Console
67 67
68 System.Console.WriteLine("Logs will be saved to current directory in " + LogFile); 68 System.Console.WriteLine("Logs will be saved to current directory in " + LogFile);
69 69
70 Log = File.AppendText(LogFile); 70 try
71 {
72 Log = File.AppendText(LogFile);
73 }
74 catch (Exception ex)
75 {
76 System.Console.WriteLine("Unable to open log file. Do you already have another copy of OpenSim running? Permission problem?");
77 System.Console.WriteLine(ex.Message);
78 System.Console.WriteLine("");
79 System.Console.WriteLine("Application is terminating.");
80 System.Console.WriteLine("");
81 System.Threading.Thread.CurrentThread.Abort();
82 }
71 Log.WriteLine("========================================================================"); 83 Log.WriteLine("========================================================================");
72 Log.WriteLine(componentname + " Started at " + DateTime.Now.ToString()); 84 Log.WriteLine(componentname + " Started at " + DateTime.Now.ToString());
73 } 85 }
diff --git a/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs b/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs
index 7ac4bde..45d0720 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs
@@ -417,8 +417,9 @@ namespace OpenSim.Framework.Data.MySQL
417 417
418 public void StoreLandObject(Land parcel, LLUUID regionUUID) 418 public void StoreLandObject(Land parcel, LLUUID regionUUID)
419 { 419 {
420 MainLog.Instance.Verbose("DATASTORE", "Tedds temp fix: Waiting 3 seconds for stuff to catch up. (Someone please fix! :))"); 420 // Does the new locking fix it?
421 System.Threading.Thread.Sleep(3000); 421 //MainLog.Instance.Verbose("DATASTORE", "Tedds temp fix: Waiting 3 seconds for stuff to catch up. (Someone please fix! :))");
422 //System.Threading.Thread.Sleep(3000);
422 423
423 lock (DBAccessLock) 424 lock (DBAccessLock)
424 { 425 {
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 8d4e905..b843774 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -67,6 +67,7 @@ namespace OpenSim.Framework
67 m_internalEndPoint = ConvertFrom.InternalEndPoint; 67 m_internalEndPoint = ConvertFrom.InternalEndPoint;
68 m_externalHostName = ConvertFrom.ExternalHostName; 68 m_externalHostName = ConvertFrom.ExternalHostName;
69 m_remotingPort = ConvertFrom.RemotingPort; 69 m_remotingPort = ConvertFrom.RemotingPort;
70 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
70 RemotingAddress = ConvertFrom.RemotingAddress; 71 RemotingAddress = ConvertFrom.RemotingAddress;
71 RegionID = LLUUID.Zero; 72 RegionID = LLUUID.Zero;
72 } 73 }
@@ -80,6 +81,7 @@ namespace OpenSim.Framework
80 get { return m_remotingPort; } 81 get { return m_remotingPort; }
81 set { m_remotingPort = value; } 82 set { m_remotingPort = value; }
82 } 83 }
84 public bool m_allow_alternate_ports;
83 85
84 public string RemotingAddress; 86 public string RemotingAddress;
85 87
@@ -125,6 +127,8 @@ namespace OpenSim.Framework
125 set { m_externalHostName = value; } 127 set { m_externalHostName = value; }
126 } 128 }
127 129
130 protected bool Allow_Alternate_Ports;
131
128 protected IPEndPoint m_internalEndPoint; 132 protected IPEndPoint m_internalEndPoint;
129 133
130 public IPEndPoint InternalEndPoint 134 public IPEndPoint InternalEndPoint
@@ -163,6 +167,8 @@ namespace OpenSim.Framework
163 public bool isSandbox = false; 167 public bool isSandbox = false;
164 public bool commFailTF = false; 168 public bool commFailTF = false;
165 169
170 public bool m_allow_alternate_ports;
171
166 public LLUUID MasterAvatarAssignedUUID = LLUUID.Zero; 172 public LLUUID MasterAvatarAssignedUUID = LLUUID.Zero;
167 public LLUUID CovenantID = LLUUID.Zero; 173 public LLUUID CovenantID = LLUUID.Zero;
168 public string MasterAvatarFirstName = String.Empty; 174 public string MasterAvatarFirstName = String.Empty;
@@ -217,6 +223,7 @@ namespace OpenSim.Framework
217 m_internalEndPoint = ConvertFrom.InternalEndPoint; 223 m_internalEndPoint = ConvertFrom.InternalEndPoint;
218 m_externalHostName = ConvertFrom.ExternalHostName; 224 m_externalHostName = ConvertFrom.ExternalHostName;
219 m_remotingPort = ConvertFrom.RemotingPort; 225 m_remotingPort = ConvertFrom.RemotingPort;
226 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
220 RemotingAddress = ConvertFrom.RemotingAddress; 227 RemotingAddress = ConvertFrom.RemotingAddress;
221 RegionID = LLUUID.Zero; 228 RegionID = LLUUID.Zero;
222 } 229 }
@@ -228,6 +235,7 @@ namespace OpenSim.Framework
228 m_internalEndPoint = ConvertFrom.InternalEndPoint; 235 m_internalEndPoint = ConvertFrom.InternalEndPoint;
229 m_externalHostName = ConvertFrom.ExternalHostName; 236 m_externalHostName = ConvertFrom.ExternalHostName;
230 m_remotingPort = ConvertFrom.RemotingPort; 237 m_remotingPort = ConvertFrom.RemotingPort;
238 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
231 RemotingAddress = ConvertFrom.RemotingAddress; 239 RemotingAddress = ConvertFrom.RemotingAddress;
232 RegionID = LLUUID.Zero; 240 RegionID = LLUUID.Zero;
233 } 241 }
@@ -300,6 +308,9 @@ namespace OpenSim.Framework
300 configMember.addConfigurationOption("internal_ip_port", ConfigurationOption.ConfigurationTypes.TYPE_INT32, 308 configMember.addConfigurationOption("internal_ip_port", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
301 "Internal IP Port for incoming UDP client connections", 309 "Internal IP Port for incoming UDP client connections",
302 NetworkServersInfo.DefaultHttpListenerPort.ToString(), false); 310 NetworkServersInfo.DefaultHttpListenerPort.ToString(), false);
311 configMember.addConfigurationOption("allow_alternate_ports", ConfigurationOption.ConfigurationTypes.TYPE_BOOLEAN,
312 "Allow sim to find alternate UDP ports when ports are in use?",
313 "false", false);
303 configMember.addConfigurationOption("external_host_name", 314 configMember.addConfigurationOption("external_host_name",
304 ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, 315 ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY,
305 "External Host Name", "127.0.0.1", false); 316 "External Host Name", "127.0.0.1", false);
@@ -357,7 +368,10 @@ namespace OpenSim.Framework
357 m_internalEndPoint = new IPEndPoint(address, 0); 368 m_internalEndPoint = new IPEndPoint(address, 0);
358 break; 369 break;
359 case "internal_ip_port": 370 case "internal_ip_port":
360 m_internalEndPoint.Port = (int) configuration_result; 371 m_internalEndPoint.Port = (int)configuration_result;
372 break;
373 case "allow_alternate_ports":
374 m_allow_alternate_ports = (bool)configuration_result;
361 break; 375 break;
362 case "external_host_name": 376 case "external_host_name":
363 if ((string) configuration_result != "SYSTEMIP") 377 if ((string) configuration_result != "SYSTEMIP")
diff --git a/OpenSim/Framework/SerializableRegionInfo.cs b/OpenSim/Framework/SerializableRegionInfo.cs
index 18a3829..0097fe4 100644
--- a/OpenSim/Framework/SerializableRegionInfo.cs
+++ b/OpenSim/Framework/SerializableRegionInfo.cs
@@ -49,6 +49,7 @@ namespace OpenSim.Framework
49 m_internalEndPoint = ConvertFrom.InternalEndPoint; 49 m_internalEndPoint = ConvertFrom.InternalEndPoint;
50 m_externalHostName = ConvertFrom.ExternalHostName; 50 m_externalHostName = ConvertFrom.ExternalHostName;
51 m_remotingPort = ConvertFrom.RemotingPort; 51 m_remotingPort = ConvertFrom.RemotingPort;
52 m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
52 RemotingAddress = ConvertFrom.RemotingAddress; 53 RemotingAddress = ConvertFrom.RemotingAddress;
53 } 54 }
54 55
@@ -80,6 +81,7 @@ namespace OpenSim.Framework
80 get { return m_remotingPort; } 81 get { return m_remotingPort; }
81 set { m_remotingPort = value; } 82 set { m_remotingPort = value; }
82 } 83 }
84 public bool m_allow_alternate_ports;
83 85
84 public string RemotingAddress; 86 public string RemotingAddress;
85 87
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
index e74873d..f8b0c9e 100644
--- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs
+++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs
@@ -109,10 +109,16 @@ namespace OpenSim.Region.ClientStack
109 protected Scene SetupScene(RegionInfo regionInfo, out UDPServer udpServer, bool m_permissions) 109 protected Scene SetupScene(RegionInfo regionInfo, out UDPServer udpServer, bool m_permissions)
110 { 110 {
111 AgentCircuitManager circuitManager = new AgentCircuitManager(); 111 AgentCircuitManager circuitManager = new AgentCircuitManager();
112 udpServer = new UDPServer((uint) regionInfo.InternalEndPoint.Port, m_assetCache, m_log, circuitManager); 112 IPAddress listenIP;
113 if (!IPAddress.TryParse(regionInfo.ExternalHostName, out listenIP))
114 listenIP = IPAddress.Parse("0.0.0.0");
113 115
114 Scene scene = CreateScene(regionInfo, m_storageManager, circuitManager); 116 uint port = (uint) regionInfo.InternalEndPoint.Port;
117 udpServer = new UDPServer(listenIP, ref port, regionInfo.m_allow_alternate_ports, m_assetCache, m_log, circuitManager);
118 regionInfo.InternalEndPoint.Port = (int)port;
115 119
120 Scene scene = CreateScene(regionInfo, m_storageManager, circuitManager);
121
116 udpServer.LocalScene = scene; 122 udpServer.LocalScene = scene;
117 123
118 scene.LoadWorldMap(); 124 scene.LoadWorldMap();
diff --git a/OpenSim/Region/ClientStack/UDPServer.cs b/OpenSim/Region/ClientStack/UDPServer.cs
index dc76c20..e292c2c 100644
--- a/OpenSim/Region/ClientStack/UDPServer.cs
+++ b/OpenSim/Region/ClientStack/UDPServer.cs
@@ -52,6 +52,8 @@ namespace OpenSim.Region.ClientStack
52 protected ulong m_regionHandle; 52 protected ulong m_regionHandle;
53 53
54 protected uint listenPort; 54 protected uint listenPort;
55 protected bool Allow_Alternate_Port;
56 protected IPAddress listenIP = IPAddress.Parse("0.0.0.0");
55 protected IScene m_localScene; 57 protected IScene m_localScene;
56 protected AssetCache m_assetCache; 58 protected AssetCache m_assetCache;
57 protected LogBase m_log; 59 protected LogBase m_log;
@@ -82,13 +84,20 @@ namespace OpenSim.Region.ClientStack
82 { 84 {
83 } 85 }
84 86
85 public UDPServer(uint port, AssetCache assetCache, LogBase console, AgentCircuitManager authenticateClass) 87 public UDPServer(IPAddress _listenIP, ref uint port, bool allow_alternate_port, AssetCache assetCache, LogBase console, AgentCircuitManager authenticateClass)
86 { 88 {
89 listenIP = _listenIP;
87 listenPort = port; 90 listenPort = port;
91 Allow_Alternate_Port = allow_alternate_port;
88 m_assetCache = assetCache; 92 m_assetCache = assetCache;
89 m_log = console; 93 m_log = console;
90 m_authenticateSessionsClass = authenticateClass; 94 m_authenticateSessionsClass = authenticateClass;
91 CreatePacketServer(); 95 CreatePacketServer();
96
97 // Return new port
98 // This because in Grid mode it is not really important what port the region listens to as long as it is correctly registered.
99 // So the option allow_alternate_ports="true" was added to default.xml
100 port = listenPort;
92 } 101 }
93 102
94 protected virtual void CreatePacketServer() 103 protected virtual void CreatePacketServer()
@@ -98,7 +107,7 @@ namespace OpenSim.Region.ClientStack
98 107
99 protected virtual void OnReceivedData(IAsyncResult result) 108 protected virtual void OnReceivedData(IAsyncResult result)
100 { 109 {
101 ipeSender = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0); 110 ipeSender = new IPEndPoint(listenIP, 0);
102 epSender = (EndPoint) ipeSender; 111 epSender = (EndPoint) ipeSender;
103 Packet packet = null; 112 Packet packet = null;
104 113
@@ -246,20 +255,40 @@ namespace OpenSim.Region.ClientStack
246 255
247 public void ServerListener() 256 public void ServerListener()
248 { 257 {
249 m_log.Verbose("SERVER", "Opening UDP socket on " + listenPort.ToString());
250 258
251 ServerIncoming = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int) listenPort); 259 uint newPort = listenPort;
252 Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 260 for (uint i = 0; i < 10; i++)
253 Server.Bind(ServerIncoming); 261 {
262 newPort = listenPort + i;
263 m_log.Verbose("SERVER", "Opening UDP socket on " + listenIP.ToString() + " " + newPort + ". Allow alternate ports: " + Allow_Alternate_Port.ToString());
264 try
265 {
266 ServerIncoming = new IPEndPoint(listenIP, (int) newPort);
267 Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
268 Server.Bind(ServerIncoming);
269 listenPort = newPort;
270 break;
271 }
272 catch (Exception ex)
273 {
274 // We are not looking for alternate ports?
275 if (!Allow_Alternate_Port)
276 throw (ex);
277
278 // We are looking for alternate ports!
279 m_log.Verbose("SERVER", "UDP socket on " + listenIP.ToString() + " " + listenPort.ToString() + " is not available, trying next.");
280 }
281 System.Threading.Thread.Sleep(100); // Wait before we retry socket
282 }
254 283
255 m_log.Verbose("SERVER", "UDP socket bound, getting ready to listen"); 284 m_log.Verbose("SERVER", "UDP socket bound, getting ready to listen");
256 285
257 ipeSender = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0); 286 ipeSender = new IPEndPoint(listenIP, 0);
258 epSender = (EndPoint) ipeSender; 287 epSender = (EndPoint) ipeSender;
259 ReceivedData = new AsyncCallback(OnReceivedData); 288 ReceivedData = new AsyncCallback(OnReceivedData);
260 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); 289 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
261 290
262 m_log.Status("SERVER", "Listening..."); 291 m_log.Status("SERVER", "Listening on port " + newPort);
263 } 292 }
264 293
265 public virtual void RegisterPacketServer(PacketServer server) 294 public virtual void RegisterPacketServer(PacketServer server)