[Opensim-dev] Event Queue

Hurliman, John john.hurliman at intel.com
Wed Dec 3 19:15:44 UTC 2008


> -----Original Message-----
> From: opensim-dev-bounces at lists.berlios.de [mailto:opensim-dev- 
> bounces at lists.berlios.de] On Behalf Of Cristina Videira Lopes
> Sent: Wednesday, December 03, 2008 9:40 AM
> To: opensim-dev at lists.berlios.de
> Subject: [Opensim-dev] Event Queue
> 
> Apologies in advance for bringing up everyone's favorite hate topic,
> but having spent most of yesterday tracking TP/crossing problems
> (again), I can't help but bringing this up to a wider audience. I know
> everyone hates the EQ. As it stands, there are several broken elements
> with the EQ in OpenSim, beyond the obvious bugs caused by its
> management. I'm just wondering if there is something here that I'm
> completely missing, or if this is really this bad:
> 
> 1) It's implemented as an optional region module (!!!), configurable in
> OpenSim.ini (!!!). That explains why, for example, I could not reproduce
> crashes that other people have reported with older viewers. It turns out
> that those people are not just using older viewers; they are using
> OpenSim servers configured with EventQueue=false. A complete
> miscommunication.
> 
> 2) It's implemented as an optional region module -- the sequel. It is
> being considered a [optional] part of the Region Environment,
> something a region may or may not do. I'm afraid, this is the incorrect model.
> The server side doesn't have any choice on this, if it wants to
> interact with the current version of the LL viewer. The EQ should be
> hand-in-hand with LLClientView. After all, it's the new channel of
> communications between a server and the LL viewer. Things that used to
> go over UDP are now sent via the EQ, period, no choice. Region
> Environment should be completely oblivious to that change. As it is
> now, this pattern occurs all over Region Environment classes:
> 
>             IEventQueue eq =
>             [scene.]RequestModuleInterface<IEventQueue>(); if (eq !=
>             null) {
>                 // send the event over EQ
>             }
>             else
>             {
>                 // call the right IClientAPI method to send the event
> [over UDP]
>             }
>  This is infecting the server side with things that should be purely
> client side. It's a horrendous way of getting at the question "what
> version of the LL viewer are you supporting in your region?". If there
> is such a thing as a wrong question to ask, this is one of them. If we
> want to support viewers with older communication stacks, then let's make
> that explicit in OpenSim and subclass LLClientView for the N previous
> versions of the LL viewer's communications stack. Region Environment,
> and the whole of the OpenSim framework, should be insulated from that
> mess, that's what the IClientAPI is there for. No OpenSim.ini
> configuration variables, other than the already existing one:
> clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll"
> 
> What will happen when Rex comes along? ... what version of the LL
> viewer is that based on? ...
> 
> Sorry for venting! I'm just sending this out to find the answer to
> these three questions:
> 
> a) Am I missing something?
> 
> b) Are there any objections to placing EQ under
> OpenSim.Region.ClientStack.LindenUDP? (besides that name now being
> somewhat incorrect)
> 
> c) Should OpenSim be backwards compatible with viewers forked off from
> older LL viewers *for the specific aspect of communications*? If so,
> what design pattern should be used?, subclassing or alternative code
> paths inside methods?
> 


In light of the security exploits found in the UDP protocol with RegionCrossed and EnableSimulator packets, there's a strong argument to be made for dropping support for insecure clients completely. Any client that has support for the event queue (any client released in the last year and a half I think) can receive packet events from the event queue, and recent clients can *only* receive certain events from the event queue. The event queue has been a fundamental part of the Second Life(tm) protocol for quite a while and IMO should be baked into the client stack right next to the UDP packet handling as a non-optional component.

I share the wider sentiments that doing reverse HTTP to send event messages to clients is a poor design decision. However, time would be better spent designing an improved protocol and modularizing the GPL client or developing a new client where the protocol stack can be manipulated.

John



More information about the Opensim-dev mailing list