aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs151
1 files changed, 75 insertions, 76 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 2dc4e1e..9d182b6 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -51,33 +51,32 @@ namespace OpenSim.Region.ClientStack.LindenUDP
51 /// A shim around LLUDPServer that implements the IClientNetworkServer interface 51 /// A shim around LLUDPServer that implements the IClientNetworkServer interface
52 /// </summary> 52 /// </summary>
53 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LLUDPServerShim")] 53 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LLUDPServerShim")]
54 public sealed class LLUDPServerShim : INonSharedRegionModule 54 public class LLUDPServerShim : INonSharedRegionModule
55 { 55 {
56 private bool m_Enabled = true; 56 protected IConfigSource m_Config;
57 private IConfigSource m_Config; 57 protected LLUDPServer m_udpServer;
58 LLUDPServer m_udpServer;
59 58
60 #region INonSharedRegionModule 59 #region INonSharedRegionModule
61 public string Name 60 public virtual string Name
62 { 61 {
63 get { return "LLUDPServerShim"; } 62 get { return "LLUDPServerShim"; }
64 } 63 }
65 64
66 public Type ReplaceableInterface 65 public virtual Type ReplaceableInterface
67 { 66 {
68 get { return null; } 67 get { return null; }
69 } 68 }
70 69
71 public void Initialise(IConfigSource source) 70 public virtual void Initialise(IConfigSource source)
72 { 71 {
73 m_Config = source; 72 m_Config = source;
74 } 73 }
75 74
76 public void Close() 75 public virtual void Close()
77 { 76 {
78 } 77 }
79 78
80 public void AddRegion(Scene scene) 79 public virtual void AddRegion(Scene scene)
81 { 80 {
82 uint port = (uint)scene.RegionInfo.InternalEndPoint.Port; 81 uint port = (uint)scene.RegionInfo.InternalEndPoint.Port;
83 82
@@ -88,23 +87,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP
88 AddScene(scene); 87 AddScene(scene);
89 } 88 }
90 89
91 public void RemoveRegion(Scene scene) 90 public virtual void RemoveRegion(Scene scene)
92 { 91 {
93 Stop(); 92 Stop();
94 } 93 }
95 94
96 public void RegionLoaded(Scene scene) 95 public virtual void RegionLoaded(Scene scene)
97 { 96 {
98 Start(); 97 Start();
99 } 98 }
100 #endregion 99 #endregion
101 100
102 public void Initialise(IPAddress listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, IConfigSource configSource, AgentCircuitManager circuitManager) 101 public virtual void Initialise(IPAddress listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, IConfigSource configSource, AgentCircuitManager circuitManager)
103 { 102 {
104 m_udpServer = new LLUDPServer(listenIP, ref port, proxyPortOffsetParm, allow_alternate_port, configSource, circuitManager); 103 m_udpServer = new LLUDPServer(listenIP, ref port, proxyPortOffsetParm, allow_alternate_port, configSource, circuitManager);
105 } 104 }
106 105
107 public void AddScene(IScene scene) 106 public virtual void AddScene(IScene scene)
108 { 107 {
109 m_udpServer.AddScene(scene); 108 m_udpServer.AddScene(scene);
110 109
@@ -228,17 +227,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
228 StatVerbosity.Debug)); 227 StatVerbosity.Debug));
229 } 228 }
230 229
231 public bool HandlesRegion(Location x) 230 public virtual bool HandlesRegion(Location x)
232 { 231 {
233 return m_udpServer.HandlesRegion(x); 232 return m_udpServer.HandlesRegion(x);
234 } 233 }
235 234
236 public void Start() 235 public virtual void Start()
237 { 236 {
238 m_udpServer.Start(); 237 m_udpServer.Start();
239 } 238 }
240 239
241 public void Stop() 240 public virtual void Stop()
242 { 241 {
243 m_udpServer.Stop(); 242 m_udpServer.Stop();
244 } 243 }
@@ -257,7 +256,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
257 public const int MTU = 1400; 256 public const int MTU = 1400;
258 257
259 /// <summary>Number of forced client logouts due to no receipt of packets before timeout.</summary> 258 /// <summary>Number of forced client logouts due to no receipt of packets before timeout.</summary>
260 public int ClientLogoutsDueToNoReceives { get; private set; } 259 public int ClientLogoutsDueToNoReceives { get; protected set; }
261 260
262 /// <summary> 261 /// <summary>
263 /// Default packet debug level given to new clients 262 /// Default packet debug level given to new clients
@@ -284,12 +283,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
284 /// <summary>Handlers for incoming packets</summary> 283 /// <summary>Handlers for incoming packets</summary>
285 //PacketEventDictionary packetEvents = new PacketEventDictionary(); 284 //PacketEventDictionary packetEvents = new PacketEventDictionary();
286 /// <summary>Incoming packets that are awaiting handling</summary> 285 /// <summary>Incoming packets that are awaiting handling</summary>
287 //private OpenMetaverse.BlockingQueue<IncomingPacket> packetInbox = new OpenMetaverse.BlockingQueue<IncomingPacket>(); 286 //protected OpenMetaverse.BlockingQueue<IncomingPacket> packetInbox = new OpenMetaverse.BlockingQueue<IncomingPacket>();
288 287
289 private OpenSim.Framework.BlockingQueue<IncomingPacket> packetInbox = new OpenSim.Framework.BlockingQueue<IncomingPacket>(); 288 protected OpenSim.Framework.BlockingQueue<IncomingPacket> packetInbox = new OpenSim.Framework.BlockingQueue<IncomingPacket>();
290 289
291 /// <summary>Bandwidth throttle for this UDP server</summary> 290 /// <summary>Bandwidth throttle for this UDP server</summary>
292 public TokenBucket Throttle { get; private set; } 291 public TokenBucket Throttle { get; protected set; }
293 292
294 /// <summary>Per client throttle rates enforced by this server</summary> 293 /// <summary>Per client throttle rates enforced by this server</summary>
295 /// <remarks> 294 /// <remarks>
@@ -297,43 +296,43 @@ namespace OpenSim.Region.ClientStack.LindenUDP
297 /// The other rates (resend, asset, etc.) are the defaults for a new client and can be changed (and usually 296 /// The other rates (resend, asset, etc.) are the defaults for a new client and can be changed (and usually
298 /// do get changed immediately). They do not need to sum to the total. 297 /// do get changed immediately). They do not need to sum to the total.
299 /// </remarks> 298 /// </remarks>
300 public ThrottleRates ThrottleRates { get; private set; } 299 public ThrottleRates ThrottleRates { get; protected set; }
301 300
302 /// <summary>Manages authentication for agent circuits</summary> 301 /// <summary>Manages authentication for agent circuits</summary>
303 private AgentCircuitManager m_circuitManager; 302 protected AgentCircuitManager m_circuitManager;
304 303
305 /// <summary>Reference to the scene this UDP server is attached to</summary> 304 /// <summary>Reference to the scene this UDP server is attached to</summary>
306 public Scene Scene { get; private set; } 305 public Scene Scene { get; protected set; }
307 306
308 /// <summary>The X/Y coordinates of the scene this UDP server is attached to</summary> 307 /// <summary>The X/Y coordinates of the scene this UDP server is attached to</summary>
309 private Location m_location; 308 protected Location m_location;
310 309
311 /// <summary>The size of the receive buffer for the UDP socket. This value 310 /// <summary>The size of the receive buffer for the UDP socket. This value
312 /// is passed up to the operating system and used in the system networking 311 /// is passed up to the operating system and used in the system networking
313 /// stack. Use zero to leave this value as the default</summary> 312 /// stack. Use zero to leave this value as the default</summary>
314 private int m_recvBufferSize; 313 protected int m_recvBufferSize;
315 314
316 /// <summary>Flag to process packets asynchronously or synchronously</summary> 315 /// <summary>Flag to process packets asynchronously or synchronously</summary>
317 private bool m_asyncPacketHandling; 316 protected bool m_asyncPacketHandling;
318 317
319 /// <summary>Tracks whether or not a packet was sent each round so we know 318 /// <summary>Tracks whether or not a packet was sent each round so we know
320 /// whether or not to sleep</summary> 319 /// whether or not to sleep</summary>
321 private bool m_packetSent; 320 protected bool m_packetSent;
322 321
323 /// <summary>Environment.TickCount of the last time that packet stats were reported to the scene</summary> 322 /// <summary>Environment.TickCount of the last time that packet stats were reported to the scene</summary>
324 private int m_elapsedMSSinceLastStatReport = 0; 323 protected int m_elapsedMSSinceLastStatReport = 0;
325 324
326 /// <summary>Environment.TickCount of the last time the outgoing packet handler executed</summary> 325 /// <summary>Environment.TickCount of the last time the outgoing packet handler executed</summary>
327 private int m_tickLastOutgoingPacketHandler; 326 protected int m_tickLastOutgoingPacketHandler;
328 327
329 /// <summary>Keeps track of the number of elapsed milliseconds since the last time the outgoing packet handler looped</summary> 328 /// <summary>Keeps track of the number of elapsed milliseconds since the last time the outgoing packet handler looped</summary>
330 private int m_elapsedMSOutgoingPacketHandler; 329 protected int m_elapsedMSOutgoingPacketHandler;
331 330
332 /// <summary>Keeps track of the number of 100 millisecond periods elapsed in the outgoing packet handler executed</summary> 331 /// <summary>Keeps track of the number of 100 millisecond periods elapsed in the outgoing packet handler executed</summary>
333 private int m_elapsed100MSOutgoingPacketHandler; 332 protected int m_elapsed100MSOutgoingPacketHandler;
334 333
335 /// <summary>Keeps track of the number of 500 millisecond periods elapsed in the outgoing packet handler executed</summary> 334 /// <summary>Keeps track of the number of 500 millisecond periods elapsed in the outgoing packet handler executed</summary>
336 private int m_elapsed500MSOutgoingPacketHandler; 335 protected int m_elapsed500MSOutgoingPacketHandler;
337 336
338 /// <summary>Flag to signal when clients should check for resends</summary> 337 /// <summary>Flag to signal when clients should check for resends</summary>
339 protected bool m_resendUnacked; 338 protected bool m_resendUnacked;
@@ -344,7 +343,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
344 /// <summary>Flag to signal when clients should send pings</summary> 343 /// <summary>Flag to signal when clients should send pings</summary>
345 protected bool m_sendPing; 344 protected bool m_sendPing;
346 345
347 private int m_animationSequenceNumber; 346 protected int m_animationSequenceNumber;
348 347
349 public int NextAnimationSequenceNumber 348 public int NextAnimationSequenceNumber
350 { 349 {
@@ -359,7 +358,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
359 358
360 359
361 360
362 private ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>> m_pendingCache = new ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>>(); 361 protected ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>> m_pendingCache = new ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>>();
363 362
364 /// <summary> 363 /// <summary>
365 /// Event used to signal when queued packets are available for sending. 364 /// Event used to signal when queued packets are available for sending.
@@ -369,25 +368,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
369 /// Some data is sent immediately and not queued. That data would not trigger this event. 368 /// Some data is sent immediately and not queued. That data would not trigger this event.
370 /// WRONG use. May be usefull in future revision 369 /// WRONG use. May be usefull in future revision
371 /// </remarks> 370 /// </remarks>
372// private AutoResetEvent m_dataPresentEvent = new AutoResetEvent(false); 371// protected AutoResetEvent m_dataPresentEvent = new AutoResetEvent(false);
373 372
374 private Pool<IncomingPacket> m_incomingPacketPool; 373 protected Pool<IncomingPacket> m_incomingPacketPool;
375 374
376 /// <summary> 375 /// <summary>
377 /// Stat for number of packets in the main pool awaiting use. 376 /// Stat for number of packets in the main pool awaiting use.
378 /// </summary> 377 /// </summary>
379 private Stat m_poolCountStat; 378 protected Stat m_poolCountStat;
380 379
381 /// <summary> 380 /// <summary>
382 /// Stat for number of packets in the inbound packet pool awaiting use. 381 /// Stat for number of packets in the inbound packet pool awaiting use.
383 /// </summary> 382 /// </summary>
384 private Stat m_incomingPacketPoolStat; 383 protected Stat m_incomingPacketPoolStat;
385 384
386 private int m_defaultRTO = 0; 385 protected int m_defaultRTO = 0;
387 private int m_maxRTO = 0; 386 protected int m_maxRTO = 0;
388 private int m_ackTimeout = 0; 387 protected int m_ackTimeout = 0;
389 private int m_pausedAckTimeout = 0; 388 protected int m_pausedAckTimeout = 0;
390 private bool m_disableFacelights = false; 389 protected bool m_disableFacelights = false;
391 390
392 public Socket Server { get { return null; } } 391 public Socket Server { get { return null; } }
393 392
@@ -409,28 +408,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
409 /// <summary> 408 /// <summary>
410 /// Record how many inbound packets could not be recognized as LLUDP packets. 409 /// Record how many inbound packets could not be recognized as LLUDP packets.
411 /// </summary> 410 /// </summary>
412 public int IncomingMalformedPacketCount { get; private set; } 411 public int IncomingMalformedPacketCount { get; protected set; }
413 412
414 /// <summary> 413 /// <summary>
415 /// Record how many inbound packets could not be associated with a simulator circuit. 414 /// Record how many inbound packets could not be associated with a simulator circuit.
416 /// </summary> 415 /// </summary>
417 public int IncomingOrphanedPacketCount { get; private set; } 416 public int IncomingOrphanedPacketCount { get; protected set; }
418 417
419 /// <summary> 418 /// <summary>
420 /// Record current outgoing client for monitoring purposes. 419 /// Record current outgoing client for monitoring purposes.
421 /// </summary> 420 /// </summary>
422 private IClientAPI m_currentOutgoingClient; 421 protected IClientAPI m_currentOutgoingClient;
423 422
424 /// <summary> 423 /// <summary>
425 /// Recording current incoming client for monitoring purposes. 424 /// Recording current incoming client for monitoring purposes.
426 /// </summary> 425 /// </summary>
427 private IClientAPI m_currentIncomingClient; 426 protected IClientAPI m_currentIncomingClient;
428 427
429 /// <summary> 428 /// <summary>
430 /// Queue some low priority but potentially high volume async requests so that they don't overwhelm available 429 /// Queue some low priority but potentially high volume async requests so that they don't overwhelm available
431 /// threadpool threads. 430 /// threadpool threads.
432 /// </summary> 431 /// </summary>
433 public JobEngine IpahEngine { get; private set; } 432 public JobEngine IpahEngine { get; protected set; }
434 433
435 /// <summary> 434 /// <summary>
436 /// Run queue empty processing within a single persistent thread. 435 /// Run queue empty processing within a single persistent thread.
@@ -440,7 +439,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
440 /// connection schedule its own job in the threadpool which causes performance problems when there are many 439 /// connection schedule its own job in the threadpool which causes performance problems when there are many
441 /// connections. 440 /// connections.
442 /// </remarks> 441 /// </remarks>
443 public JobEngine OqrEngine { get; private set; } 442 public JobEngine OqrEngine { get; protected set; }
444 443
445 public LLUDPServer( 444 public LLUDPServer(
446 IPAddress listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port, 445 IPAddress listenIP, ref uint port, int proxyPortOffsetParm, bool allow_alternate_port,
@@ -662,7 +661,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
662 /// If the outgoing UDP thread times out, then return client that was being processed to help with debugging. 661 /// If the outgoing UDP thread times out, then return client that was being processed to help with debugging.
663 /// </summary> 662 /// </summary>
664 /// <returns></returns> 663 /// <returns></returns>
665 private string GetWatchdogIncomingAlarmData() 664 protected string GetWatchdogIncomingAlarmData()
666 { 665 {
667 return string.Format( 666 return string.Format(
668 "Client is {0}", 667 "Client is {0}",
@@ -673,7 +672,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
673 /// If the outgoing UDP thread times out, then return client that was being processed to help with debugging. 672 /// If the outgoing UDP thread times out, then return client that was being processed to help with debugging.
674 /// </summary> 673 /// </summary>
675 /// <returns></returns> 674 /// <returns></returns>
676 private string GetWatchdogOutgoingAlarmData() 675 protected string GetWatchdogOutgoingAlarmData()
677 { 676 {
678 return string.Format( 677 return string.Format(
679 "Client is {0}", 678 "Client is {0}",
@@ -1237,7 +1236,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1237 outgoingPacket.TickCount = Environment.TickCount & Int32.MaxValue; 1236 outgoingPacket.TickCount = Environment.TickCount & Int32.MaxValue;
1238 } 1237 }
1239 1238
1240 private void RecordMalformedInboundPacket(IPEndPoint endPoint) 1239 protected void RecordMalformedInboundPacket(IPEndPoint endPoint)
1241 { 1240 {
1242// if (m_malformedCount < 100) 1241// if (m_malformedCount < 100)
1243// m_log.DebugFormat("[LLUDPSERVER]: Dropped malformed packet: " + e.ToString()); 1242// m_log.DebugFormat("[LLUDPSERVER]: Dropped malformed packet: " + e.ToString());
@@ -1666,7 +1665,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1666 1665
1667 #endregion BinaryStats 1666 #endregion BinaryStats
1668 1667
1669 private void HandleUseCircuitCode(object o) 1668 protected void HandleUseCircuitCode(object o)
1670 { 1669 {
1671 IPEndPoint endPoint = null; 1670 IPEndPoint endPoint = null;
1672 IClientAPI client = null; 1671 IClientAPI client = null;
@@ -1775,7 +1774,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1775 } 1774 }
1776 } 1775 }
1777/* 1776/*
1778 private void HandleCompleteMovementIntoRegion(object o) 1777 protected void HandleCompleteMovementIntoRegion(object o)
1779 { 1778 {
1780 IPEndPoint endPoint = null; 1779 IPEndPoint endPoint = null;
1781 IClientAPI client = null; 1780 IClientAPI client = null;
@@ -1895,7 +1894,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1895 /// </remarks> 1894 /// </remarks>
1896 /// <param name="remoteEndpoint"></param> 1895 /// <param name="remoteEndpoint"></param>
1897 /// <param name="sequenceNumber"></param> 1896 /// <param name="sequenceNumber"></param>
1898 private void SendAckImmediate(IPEndPoint remoteEndpoint, uint sequenceNumber) 1897 protected void SendAckImmediate(IPEndPoint remoteEndpoint, uint sequenceNumber)
1899 { 1898 {
1900 PacketAckPacket ack = new PacketAckPacket(); 1899 PacketAckPacket ack = new PacketAckPacket();
1901 ack.Header.Reliable = false; 1900 ack.Header.Reliable = false;
@@ -1919,7 +1918,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1919 AsyncBeginSend(buffer); 1918 AsyncBeginSend(buffer);
1920 } 1919 }
1921 1920
1922 private bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo) 1921 protected bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo)
1923 { 1922 {
1924 UUID agentID = useCircuitCode.CircuitCode.ID; 1923 UUID agentID = useCircuitCode.CircuitCode.ID;
1925 UUID sessionID = useCircuitCode.CircuitCode.SessionID; 1924 UUID sessionID = useCircuitCode.CircuitCode.SessionID;
@@ -1989,7 +1988,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1989 /// </remarks> 1988 /// </remarks>
1990 /// <param name='client'></param> 1989 /// <param name='client'></param>
1991 /// <param name='timeoutTicks'></param> 1990 /// <param name='timeoutTicks'></param>
1992 private void DeactivateClientDueToTimeout(LLClientView client, int timeoutTicks) 1991 protected void DeactivateClientDueToTimeout(LLClientView client, int timeoutTicks)
1993 { 1992 {
1994 lock (client.CloseSyncLock) 1993 lock (client.CloseSyncLock)
1995 { 1994 {
@@ -2010,7 +2009,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2010 client.Close(true,true); 2009 client.Close(true,true);
2011 } 2010 }
2012 2011
2013 private void IncomingPacketHandler() 2012 protected void IncomingPacketHandler()
2014 { 2013 {
2015 Thread.CurrentThread.Priority = ThreadPriority.Highest; 2014 Thread.CurrentThread.Priority = ThreadPriority.Highest;
2016 IncomingPacket incomingPacket; 2015 IncomingPacket incomingPacket;
@@ -2052,7 +2051,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2052 Watchdog.RemoveThread(); 2051 Watchdog.RemoveThread();
2053 } 2052 }
2054 2053
2055 private void OutgoingPacketHandler() 2054 protected void OutgoingPacketHandler()
2056 { 2055 {
2057 Thread.CurrentThread.Priority = ThreadPriority.Highest; 2056 Thread.CurrentThread.Priority = ThreadPriority.Highest;
2058 2057
@@ -2181,27 +2180,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2181 #region Emergency Monitoring 2180 #region Emergency Monitoring
2182 // Alternative packet handler fuull of instrumentation 2181 // Alternative packet handler fuull of instrumentation
2183 // Handy for hunting bugs 2182 // Handy for hunting bugs
2184 private Stopwatch watch1 = new Stopwatch(); 2183 protected Stopwatch watch1 = new Stopwatch();
2185 private Stopwatch watch2 = new Stopwatch(); 2184 protected Stopwatch watch2 = new Stopwatch();
2186 2185
2187 private float avgProcessingTicks = 0; 2186 protected float avgProcessingTicks = 0;
2188 private float avgResendUnackedTicks = 0; 2187 protected float avgResendUnackedTicks = 0;
2189 private float avgSendAcksTicks = 0; 2188 protected float avgSendAcksTicks = 0;
2190 private float avgSendPingTicks = 0; 2189 protected float avgSendPingTicks = 0;
2191 private float avgDequeueTicks = 0; 2190 protected float avgDequeueTicks = 0;
2192 private long nticks = 0; 2191 protected long nticks = 0;
2193 private long nticksUnack = 0; 2192 protected long nticksUnack = 0;
2194 private long nticksAck = 0; 2193 protected long nticksAck = 0;
2195 private long nticksPing = 0; 2194 protected long nticksPing = 0;
2196 private int npacksSent = 0; 2195 protected int npacksSent = 0;
2197 private int npackNotSent = 0; 2196 protected int npackNotSent = 0;
2198 2197
2199 /// <summary> 2198 /// <summary>
2200 /// Number of inbound packets processed since startup. 2199 /// Number of inbound packets processed since startup.
2201 /// </summary> 2200 /// </summary>
2202 public long IncomingPacketsProcessed { get; private set; } 2201 public long IncomingPacketsProcessed { get; protected set; }
2203 2202
2204 private void MonitoredClientOutgoingPacketHandler(IClientAPI client) 2203 protected void MonitoredClientOutgoingPacketHandler(IClientAPI client)
2205 { 2204 {
2206 nticks++; 2205 nticks++;
2207 watch1.Start(); 2206 watch1.Start();
@@ -2296,7 +2295,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2296 2295
2297 #endregion 2296 #endregion
2298 2297
2299 private void ProcessInPacket(IncomingPacket incomingPacket) 2298 protected void ProcessInPacket(IncomingPacket incomingPacket)
2300 { 2299 {
2301 Packet packet = incomingPacket.Packet; 2300 Packet packet = incomingPacket.Packet;
2302 LLClientView client = incomingPacket.Client; 2301 LLClientView client = incomingPacket.Client;