aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/UDPServer.cs
diff options
context:
space:
mode:
authorTeravus Ovares2008-02-18 05:32:25 +0000
committerTeravus Ovares2008-02-18 05:32:25 +0000
commit27afeaec746194d60a865b0f9c7dfdafd86b0b56 (patch)
tree27d2667597bf3243a86388d4968d60da4e80aab3 /OpenSim/Region/ClientStack/UDPServer.cs
parentThank you very much Ahzzmandius for adding the support (diff)
downloadopensim-SC-27afeaec746194d60a865b0f9c7dfdafd86b0b56.zip
opensim-SC-27afeaec746194d60a865b0f9c7dfdafd86b0b56.tar.gz
opensim-SC-27afeaec746194d60a865b0f9c7dfdafd86b0b56.tar.bz2
opensim-SC-27afeaec746194d60a865b0f9c7dfdafd86b0b56.tar.xz
* Added /even more/ debugging messages to the UDP server to help people in resolving the Sakai issue. A few locks a few fixes, nothing that'll solve the problem in itself though.
Diffstat (limited to 'OpenSim/Region/ClientStack/UDPServer.cs')
-rw-r--r--OpenSim/Region/ClientStack/UDPServer.cs79
1 files changed, 71 insertions, 8 deletions
diff --git a/OpenSim/Region/ClientStack/UDPServer.cs b/OpenSim/Region/ClientStack/UDPServer.cs
index 0a301b5..73f2ac1 100644
--- a/OpenSim/Region/ClientStack/UDPServer.cs
+++ b/OpenSim/Region/ClientStack/UDPServer.cs
@@ -111,7 +111,7 @@ namespace OpenSim.Region.ClientStack
111 epSender = (EndPoint) ipeSender; 111 epSender = (EndPoint) ipeSender;
112 Packet packet = null; 112 Packet packet = null;
113 113
114 int numBytes; 114 int numBytes = 1;
115 115
116 try 116 try
117 { 117 {
@@ -173,8 +173,9 @@ namespace OpenSim.Region.ClientStack
173 // Stupid I know.. 173 // Stupid I know..
174 // but Flusing the buffer would be even more stupid... so, we're stuck with this ugly method. 174 // but Flusing the buffer would be even more stupid... so, we're stuck with this ugly method.
175 } 175 }
176 catch (SocketException) 176 catch (SocketException e2)
177 { 177 {
178 m_log.Error("[UDPSERVER]: " + e2.ToString());
178 } 179 }
179 180
180 // Here's some reference code! :D 181 // Here's some reference code! :D
@@ -187,12 +188,28 @@ namespace OpenSim.Region.ClientStack
187 break; 188 break;
188 } 189 }
189 190
190 return; 191 //return;
191 } 192 }
192 catch (ObjectDisposedException e) 193 catch (ObjectDisposedException e)
193 { 194 {
194 m_log.Debug("[UDPSERVER]: " + e.ToString()); 195 m_log.Debug("[UDPSERVER]: " + e.ToString());
195 return; 196 try
197 {
198 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender,
199 ReceivedData, null);
200
201 // Ter: For some stupid reason ConnectionReset basically kills our async event structure..
202 // so therefore.. we've got to tell the server to BeginReceiveFrom again.
203 // This will happen over and over until we've gone through all packets
204 // sent to and from this particular user.
205 // Stupid I know..
206 // but Flusing the buffer would be even more stupid... so, we're stuck with this ugly method.
207 }
208 catch (SocketException e2)
209 {
210 m_log.Error("[UDPSERVER]: " + e2.ToString());
211 }
212 //return;
196 } 213 }
197 214
198 int packetEnd = numBytes - 1; 215 int packetEnd = numBytes - 1;
@@ -221,7 +238,16 @@ namespace OpenSim.Region.ClientStack
221 { 238 {
222 // new client 239 // new client
223 m_log.Debug("[UDPSERVER]: Adding New Client"); 240 m_log.Debug("[UDPSERVER]: Adding New Client");
224 AddNewClient(packet); 241 try
242 {
243 AddNewClient(packet);
244 }
245 catch (Exception e3)
246 {
247 m_log.Error("[UDPSERVER]: Adding New Client threw exception " + e3.ToString());
248 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender,
249 ReceivedData, null);
250 }
225 } 251 }
226 else 252 else
227 { 253 {
@@ -231,8 +257,38 @@ namespace OpenSim.Region.ClientStack
231 257
232 } 258 }
233 } 259 }
260 try
261 {
262 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
263 }
264 catch (SocketException e4)
265 {
266 try
267 {
268 CloseEndPoint(epSender);
269 }
270 catch (Exception a)
271 {
272 m_log.Info("[UDPSERVER]: " + a.ToString());
273 }
274 try
275 {
276 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender,
277 ReceivedData, null);
278
279 // Ter: For some stupid reason ConnectionReset basically kills our async event structure..
280 // so therefore.. we've got to tell the server to BeginReceiveFrom again.
281 // This will happen over and over until we've gone through all packets
282 // sent to and from this particular user.
283 // Stupid I know..
284 // but Flusing the buffer would be even more stupid... so, we're stuck with this ugly method.
285 }
286 catch (SocketException e5)
287 {
288 m_log.Error("[UDPSERVER]: " + e5.ToString());
289 }
234 290
235 Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); 291 }
236 } 292 }
237 293
238 private void CloseEndPoint(EndPoint sender) 294 private void CloseEndPoint(EndPoint sender)
@@ -247,8 +303,15 @@ namespace OpenSim.Region.ClientStack
247 protected virtual void AddNewClient(Packet packet) 303 protected virtual void AddNewClient(Packet packet)
248 { 304 {
249 UseCircuitCodePacket useCircuit = (UseCircuitCodePacket) packet; 305 UseCircuitCodePacket useCircuit = (UseCircuitCodePacket) packet;
250 clientCircuits.Add(epSender, useCircuit.CircuitCode.Code); 306 lock (clientCircuits)
251 clientCircuits_reverse.Add(useCircuit.CircuitCode.Code, epSender); 307 {
308 clientCircuits.Add(epSender, useCircuit.CircuitCode.Code);
309 }
310 lock (clientCircuits_reverse)
311 {
312 if (!clientCircuits_reverse.ContainsKey(useCircuit.CircuitCode.Code))
313 clientCircuits_reverse.Add(useCircuit.CircuitCode.Code, epSender);
314 }
252 315
253 PacketServer.AddNewClient(epSender, useCircuit, m_assetCache, m_authenticateSessionsClass); 316 PacketServer.AddNewClient(epSender, useCircuit, m_assetCache, m_authenticateSessionsClass);
254 } 317 }