Patch 7 of the region patches. Finish off the region parts of the estate dialog. Full user functionality. Terrain textures, heights, water, avatar counts, prim bonus, debug settings and region toggles can now be set from the dialog on a per-region basis. Estate stuff defaults to sane values where there are no defaults, to estate_settings.xml otherwise. Sun still b0rked :(
Make all of the toggles go live. Utilizes the new database table for almost everything. Remove lots of now unneeded settings from the EstateSettings class
Patch 5 in the region settings series. Adds a migration to ensure corrupted
data is purged and re-read from defaults. Some changes. Still no full
functionality
Changes the permissions module to make scripts permissive only when intended
Adds security checks to asset transfers to prevent hacked clients fron
requesting script sources.
Adds security checks to llClientView to verify all aspects of ownership
and permissions for inventory based script retrieval.
* This will work as long as those servers are actually registering any threads they use (does not include stuff plucked from the thread pool)
* command is now "show threads" rather than threads
The attached patch tries to read the SVN revision from local file
"svn_revision" before checking "../.svn/entries".
This allows simulators not running from the source tree to properly
display the SVN revision, if the installer generates the
"svn_revision" file.
UserManager.UpdateUserProfile(UserProfileData).
Adding UpdateUserProfile(UserProfileData) to IUserService interface.
Adding RemoteAdminPlugin.XmlRpcUpdateUserAccountMethod(...) to provide
a remote update capability.
* Migration should be automatic on sqlite and mysql
* Migration is not automatic on mssql, you will need to drop the invType column manually
* Migration should be fine, but as for any db change, I would recommend making sure you have backups before moving past this revision
And reverted CachedUserInfo back to revision 5262.
I don't think most of the inventory problems that people are reporting are due to these, but its easier to deal with one set of potential problems at a time, and I'm not going to get any time in the week to work on this anyway.
The Login service should now read/create new inventory on the inventory server that is set in a users profile.
Also added "Add-InventoryHost" console command to add a support for a new server to a region.
So it would be good if someone could test this. Set up the grid as normal, but then also run extra inventory server on a different computer (well actually it just has to be on a different network hostname, so one using "http://localhost:8004" and one using "http://127.0.0.1:8005" should work) then you need to manually edit the user profile database to set the new servers url in a user's "userInventoryURI" field.
Then on a region server, use the Add-InventoryHost to add the new server url (always include the full url, including http, but don't add a final /)
Login with that account and see if the inventory works.
Of course these needs to be made more user friendly.
TODO next is to make the login server read/write a users inventory from the correct server (the inventory url set in a userprofile)
On the region side, although not tested with multiple servers it should work if that inventory url was set, and the inventory servers urls have been added to the CommunicationsManager, using CommunicationsManager.AddInventoryService(string hostUrl)
* commented out [Obsolete(....)] attributes where no replacement feature
was available: if we want to attribute code that we think needs to be
reworked, we should define a new attribute and use that instead
(together with a little tool to retrieve all the attributed code then)
* commenting out unused variables
Currently module loading is done ad-hoc. I propose creating a simple
loader class that leverages Mono.Addins (and perhaps the new .NET
addins when they become available in mono). Attached is a basic
patch for review that compiles into HEAD, but doesn't yet replace
any existing ad-hoc loaders.
Fixes:
- Wearable icon and name sreset to default on copy/paste
- Cache is not updated when renaming/moving folders
- Partial refactor to make inventory less dependen on AssetBase having a "Name" field
- Add llGiveInventoryList() function
Add util functions to compress and uncompress strings.
Fixed a couple of modules so they use SceneCommunicationService rather than directly call functions on the CommsManager.
In function "ReadInExtraParamsBytes", parameter "data" is used without a boundary check.
if data.Length==0, an "out of index" exception will be thrown.
* Enables regular jpeg map images to be served directly from the region.
* EX: http://192.168.1.127:9000/index.php?method=regionImagecc4583cd269b41bfa525dd198e19a5c5
* This is actually HTTP server address + port + index.php?method=regionImage<REGIONUUID, no dashes>
* The Webmap image location gets printed on the console when the simulator starts up.
* JPEG data is cached so we only create the webjpeg once.
* This currently has various bugs which are more to do with the way its been hacked together than the feature itself (e.g. on save-oar, ghost prims will appear of the saved
contained items). These will be found and eliminated in subsequent patches.
* Not yet ready for use
* Only generates a new maptile after a refresh interval
* Maptile names have the UnixTimeSinceEpoch that they were generated and the regionUUID they're from, so you can know which ones are no longer necessary.
* Updates RegionInfo, so backup your /bin/Region/*.xml files.
* Implemented a hack so regions beyond the 10,000m range will show the map without having to click on the map before they'll start to show. The hack shows regions around the one you're in, but it won't show the one you're in.. you still need to click on the map to get that (not sure why yet). Additionally, the map still only shows pictures for regions that are hosted on the same instance (no change).
* Please feel free to comment if the periodic logging is causing you problems in some way - I'm loathe to add yet another switch to OpenSim.ini but will if it proves necessary
* This is the GC.GetTotalMemory() method, which I'm guessing does not include memory used by the VM (hence the memory usage reported in top on linux would be much higher)
* Unfortunately, there's some kludges with the Async manager and the llDetected functions that I have yet to decipher... so llDetected functions don't work with collision events at the moment....
having reached the intermediate level of .NET's XmlSudoku, i've
now figured out how to do deserialization using different
XmlSerializers (this stuff begins to grow on me, sigh).
[still not used code, work-in-progress]
* adding convenience property on OSHttpRequest.cs (from awebb)
having spent the last couple of days wrestling with .NET XmlSerializer
and trying to get it to do what is required by XMPP (RFC 3920 & 3921)
this is the preliminary result of that wrestling (you should see the
other guy!): XmppSerializer allows us to serialize Xmpp stanza (and
theoretically deserialize [or reify] them), XmppWriter helps avoiding
various gratuitous crap added in by off-the-shelf XmlSerializer.
this is currently not used anywhere but the plan is to use it for
at least an XMPPBridgeModule.
* You'll need to start-up the MessageingServer and set it up. It sets up like any of the other grid servers.
* All user presence data is kept in memory for speed, while the agent is online. That means if you shutdown the messaging server or the messaging server crashes, it forgets who's online/offline.
* Occasionally the region-cache will get stale if regions move around a lot. if it gets stale, run clear-cache on the messaging server console to clear the region cache.
* User tries to log-in but is already logged in. Userserver will send message to simulator user was in to log the user out there.
* From the UserServer, admin types 'logoff-user firstname lastname message'.
* Some regions may not get the message because they're not updated yet.
* Looks up UUIDNames for script time and colliders in a separate thread.
* Hopefully this'll allow you to look at top scripts on a region that has a lot of scripts without crashing your client thread.
llLoopSound sends out one packet to clients in view, so it doesn't work anymore
when clients enter later on, or the prim is modified in any way.
Solution: Stored sound data on prim, send full update instead.
llStartSound and llLoopSound now accept both LLUUIDs to a sound as well as object
inventory sound names. llStopSound clears prim data and sends full update.
If a request is made for an asset which is not in the cache yet,
but has already been requested by something else, queue up the
callbacks on that requester instead of swamping the asset server
with multiple requests for the same asset.
There's some oddness with the parcel counts, but if you can get past the oddness, you can return objects under an owner that you have permission to return.
Nothing huge, but the new button code for producing
a new script does well, but the script will not allow
for name change once created. It reverts back to new script.
i've added the OSHttpStatusCodes enumeration of HTTP status codes, have adapted
BaseHttpServer to use those.
then RestPlugin now has proper Failure handling returning proper HTTP status
codes. Regions/POSTHandler is work-in-progress.
* If a caller attempts to set PrimitiveBaseShape.ProfileCurve with a HollowShape or ProfileShape component which is not a valid enum, a warning is spat out and a default shape
subtituted
* This does not solve any underlying problem if we're missing some enum values (though it's not obvious what these are), but it should allow save-xml2/load-xml2 to be used
without causing invalid enum value related exceptions. The checks will also guard against badly behaved clients.
* This change alters the order of shape values in the xml, since it appears properties are serialized after fields (at least this is the case in mono). .net native
deserialization can cope with this it appears, though people manipulating xml manually may need to adapt (if there are any).
* This may be a good argument against relying on .net [de]serialization for our xml format.
provide OSHttpRequest and OSHttpResponse to our REST handler.
also, this adds proper RestPlugin.IsGod() checking against the X-OpenSim-Godkey
HTTP request header.
last, i added XML doc comments to RestPlugin.cs
the "if (request.UserAgent != null)" branch in the wrong place: as a result BaseHttpServer would not do
anything if the user agent header field was present....ARGH! BAAAAAAD.
You sure can. This change set restores pants (and the rest of the
default appearance) in grid mode. The
root issue had to do with serializing multi-faced textures to the
grid server. This also restores the lookup path through the avatar
factory module, as that seems the reasonable place to have it live.
Some clean up patches are coming later as well, plus testing on
standalone, but this should be in a good kicking around state for
grid users.
Fixes a bug in BaseRequestHandler.
If the length of the patter is equal to, or greater than, the length of
the actual request path, then an exception is thrown. System using is
added to support use of String.Empty. Exception is used to ensure most
efficient operation on (assumed to be most common) successful case.
This patch adds an additional handler to the existing BaseHttpServer.
It does not affect any of the existing behaviors except insofar as the
new handler may be selected.
It is selected first because its Agent-oriented nature means that it
should not be pre-empted. The new handler type is defined by IHttpAgentHandler
in Framework/Servers and has two interface methods: Match and Handle.
The Match function returns a boolean result based upon examination of
information presented in the User-Agent header.
The Handle function expects to get the request and response instances
associated with the flow. The handler is responsible for ALL activity
associated with the request except in the event of an unhandled exception,
in which case the HandleAgentRequest routine will generate a 500 status
message and close the stream.
There are two immediateley apparent (and VERY easy to implement)
improvements that could be made:
1. The Match call could be allowed to operate over the entire
request context., rather than just agent identity.
2. The Handler could return a boolean indication of whether or not
the request was actually handled, and if not, the remaining handler
mechanism could take a shot at it. This would eliminate issues
arising from pre-empted streams.
enhancing IStreamHandler and IStreamedHandler interfaces so that OSHttp{Request,Response} get passed in,
allowing RestHandlers to set response status code, redirections, etc.
* In theory, this should be a somewhat useless statistic since the user server will already have tried to use the inventory service to retrieve the avatar's skeleton. If this
fails, login is halted completely.
* Nonetheless I'm recording it anyway just to see whether it happens (yes, I'm too lazy to scan the logs...)
the attached patch set adds the (still work-in-progress but already
working) RestPlugin base class and the RestRegionPlugin code. we are using
XML serialization.
currently working:
GET /admin/regions/ -> returns UUID list of known regions
GET /admin/regions/<UUID> -> returns detailed region information
we'll be adding support for POST/DELETE/PUT and also for
/admin/regions/<UUID>/name etc.
* If the status cannot be retrieved, then the region startup will terminate.
* The aim of this is for earlier detection of situations where the region can send messages out but cannot accept incoming requests (often due to firewall issues)
* This is currently an extremely simplistic check which completely trusts whatever http uri is given by the region
* This contact may be problematic, though since the user service needs to be able to contact the region http uri, it doesn't seem unreasonable for the grid to have to be able to do so too at this stage
* This change will require a prebuild
* This is not functional anywhere, but is a incomplete proposed replacement class for IClientAPI. Assistance filling this out would be appreciated. Use IClientAPI.cs as a reference, but make sure not to copy it - instead rewrite and abstract.
This patch just tightens up console handling in BasOpenSimServer
and removes (or redirects) a couple of messages that were being issued
using Console.Writeline.