Compare commits

...

988 Commits

Author SHA1 Message Date
Talun
d1320993a4 Mantis 6343: Turn a prim to flexy to OFF don't work llSetPrimParams
Correction so that scripts can turn Flexi off as well as on.
2013-02-08 21:28:48 +00:00
Oren Hurvitz
319069d193 Assign the SmartThreadPool name in the constructor
This is required because some threads are created in the constructor, so assigning the name afterwards would be too late.
2013-02-08 21:26:05 +00:00
Justin Clark-Casey (justincc)
82268d715e Explicitly stop PollServiceRequestManager() rather than relying on its destructor.
Hopes to address occasional shutdown failures from http://opensimulator.org/mantis/view.php?id=6503
2013-02-08 21:25:57 +00:00
Talun
efcbae372b Mantis 6507 keys returned by llGetAgentList incorrect for llList2Key
The type of the keys returned by llGetAgentList corrected to LSL_Key
2013-02-08 21:25:47 +00:00
Justin Clark-Casey (justincc)
8f32e16497 minor: Fix full scene part console report to show proper Light* names rather than all wrongly FlexiDrag 2013-01-26 00:33:28 +00:00
Justin Clark-Casey (justincc)
c42e2c6906 minor: Call down to base OpenSimTestCase.SetUp() in NPCModuleTests to disable any enabled logging from previous tests 2013-01-26 00:33:19 +00:00
Justin Clark-Casey (justincc)
6bd57f2455 Bump version up to 0.7.5-rc2 2013-01-26 00:09:43 +00:00
Justin Clark-Casey (justincc)
af5a3f2d73 Restore previous client AO behaviour by not allowing them to remove the default animation but continue to allow scripts to do so.
This keeps the fix from http://opensimulator.org/mantis/view.php?id=6327
and fixes the behaviour regression in http://opensimulator.org/mantis/view.php?id=6483
Animations may still exhibit different behaviour if both scripts and clients are adjusting animations.
A change in the behaviour of client AO to not remove all animations may be a better long term approach.
2013-01-25 23:54:53 +00:00
Justin Clark-Casey (justincc)
0ba01ce699 Check the existing ScenePresence.ParentPart to make sure we're not trying to sit on a prim we're already sat upon, rather than looking up the part from scratch.
An adaptation of commit 055b8a2
Having both ParentID and ParentPart references now is redundant.  ParentID should probably be eliminated.
2013-01-25 23:53:16 +00:00
Talun
70e1dd54fa New constants for llGetObjectDetails
New constants for llGetObjectDetails OBJECT_CHARACTER_TIME,
OBJECT_ROOT, OBJECT_ATTACHED_POINT, OBJECT_PATHFINDING_TYPE,
OBJECT_PHYSICS, OBJECT_PHANTOM and OBJECT_TEMP_ON_REZ
also Pathfining constants, 3 of which are used by llGetObjectDetails
2013-01-25 23:52:55 +00:00
Justin Clark-Casey (justincc)
c42bff5388 Fix use of scene debug commands when region is set to root or a specific region where there is more than one region on the simulator. 2013-01-25 23:52:36 +00:00
Justin Clark-Casey (justincc)
10b3c6b5aa Add "debug set set animations true|false" region console command.
Setting this logs extra information about animation add/remove, such as uuid and animation name
Unfortunately cannot be done per client yet
2013-01-25 23:52:25 +00:00
Robert Adams
8ecf6ed08e Add utility function to clamp a vector to a maximum magnitude. 2013-01-25 23:51:50 +00:00
Diva Canto
09450448b0 Changed a couple of debug messages at the request of osgrid. 2013-01-25 23:51:36 +00:00
dahlia
e2823bfefe move resit fix to ScenePresence.cs and allow for requesting sit on objects other than the object currently sat on 2013-01-25 23:51:17 +00:00
Justin Clark-Casey (justincc)
795009cae2 Print full stacktrace from plugin loading failure to help determine what went wrong, rather than a possibly unhelpful simple exception message. 2013-01-25 23:51:09 +00:00
Robert Adams
cc8fbf76e6 Fix exception reporting in SceneObjectPart so it logs what the exception is rather than just saying it happened. 2013-01-25 23:50:57 +00:00
dahlia
af27180131 add some sanity checking to HandleAgentRequestSit handler 2013-01-25 23:50:48 +00:00
Justin Clark-Casey (justincc)
c182157d4d Fix a regression in the last few scene commands changes where setting these via the viewer estate dialog stopped working.
Forgot to register the new interface.
Also removes some code which got included by adpating an existing module.
2013-01-25 23:50:29 +00:00
Justin Clark-Casey (justincc)
1cda887d9b Add "debug scene get" console command to list current scene options 2013-01-25 23:50:22 +00:00
Justin Clark-Casey (justincc)
0ba0ac4669 Move scene debug commands into separate module. Command changes from "debug scene <key> <value>" to "debug scene set <key> <value>" to accomodate future settings 2013-01-25 23:50:15 +00:00
Justin Clark-Casey (justincc)
ce8b30d868 minor: Capitalize GroupsModule command category 2013-01-25 23:49:47 +00:00
Justin Clark-Casey (justincc)
d4c4cb3e67 minor: add missing newline to "debug scene" console command 2013-01-25 23:49:40 +00:00
Justin Clark-Casey (justincc)
ac4300664e Remove unimplemented "debug teleport" console command 2013-01-25 23:49:34 +00:00
Justin Clark-Casey (justincc)
069e2d6443 Add "debug scene pbackup true|false" console command. This enables or disable periodic scene backup. For debug purposes.
If false, scene is still saved on shutdown.
2013-01-25 23:49:26 +00:00
Justin Clark-Casey (justincc)
30eded2bda revert accidental change to MemoryWatchdog stat calculation in previous b1b4687 2013-01-25 23:49:14 +00:00
Justin Clark-Casey (justincc)
2563553f80 Add "show script timers" command to show script timers. For debug purposes.
Also, "show sensors" changes to "show script sensors".
2013-01-25 23:49:06 +00:00
Justin Clark-Casey (justincc)
9ddddde42e Add "show sensors" command to show script sensor information for debug purposes. 2013-01-25 23:48:59 +00:00
Justin Clark-Casey (justincc)
99a5ea9f90 minor: Remove unnecessary commented out code from last commit c28a2f05 and fix up code comment 2013-01-25 23:48:52 +00:00
Justin Clark-Casey (justincc)
880b2361f5 minor: make spacing consistent in console help output 2013-01-25 23:48:42 +00:00
Justin Clark-Casey (justincc)
f47f3dd8b9 minor: Fix command match of "debug script" command to "debug scripts" to match other scripts commands (and it's own short help text) 2013-01-25 23:48:31 +00:00
Justin Clark-Casey (justincc)
8ee078c86b minor: Allow "script *" console commands to take multiple script item ids 2013-01-25 23:48:20 +00:00
Melanie
17d54a7c37 Add the new UpdateAgentInformation cap to make maturity on more recent viewers
work.
2013-01-25 23:47:58 +00:00
Justin Clark-Casey (justincc)
6f928f52dd Flip version to 0.7.5.RC1 2013-01-04 21:59:49 +00:00
Justin Clark-Casey (justincc)
7199ac09ee Set default particle burst count to 1 instead of 0 in any set particle system script call that does not have an empty list.
As per http://opensimulator.org/mantis/view.php?id=6353
2013-01-04 21:50:38 +00:00
Justin Clark-Casey (justincc)
59263fe78e Fix build break caused by missing ) from dce2809.
Was hand-typing in a line of code I had tested before but not retested this time
2013-01-04 21:50:28 +00:00
Justin Clark-Casey (justincc)
3c631fea9e Automatically grant sit-related llRequestPermissions() for subsequent avatars sitting on the same scene obejct, instead of wrongly popping up request permissions dialog.
Resolves http://opensimulator.org/mantis/view.php?id=6478
2013-01-04 21:50:22 +00:00
Justin Clark-Casey (justincc)
ebfcb9d4e4 refactor: simplify llGetNumberOfPrims() to return prim count + sitting avatar count rather than independently inspecting every scene presence 2013-01-04 21:50:14 +00:00
Justin Clark-Casey (justincc)
03142980ee Fix llGetLinkName() to return the name of the last avatar sat as the last link number.
As per http://wiki.secondlife.com/wiki/LlGetLinkName
2013-01-04 21:50:09 +00:00
Justin Clark-Casey (justincc)
ae355720ab Fix llGetLinkKey() to return the last sat avatar as the last link number.
As per http://wiki.secondlife.com/wiki/LlGetLinkKey
This is done by keeping a scene-object wide list of sitters.
This also fixes bugs in this function where linknums 0 and 1 weren't treated properly if there were sitting avatars on a single prim.
This also fixes a minor race condition for multiple concurrent sitters on a prim with no current sitters by locking on the object-wide list rather than individual sop lists
Addresses http://opensimulator.org/mantis/view.php?id=6477
2013-01-04 21:50:03 +00:00
Justin Clark-Casey (justincc)
d87d9af1a5 minor: Add some doc to the extremely unhelpful 'fudge....' comment as to why we're deselecting the prim in code before scheduling an update on attachment 2013-01-04 21:49:55 +00:00
Justin Clark-Casey (justincc)
b00935015a Fix problem where object attached from ground often does not get attached properly.
It seems this is happening because we send a kill for objects that are selected when attached.
A code comment says that this is to get the client to deselect it, but v3 and v1 clients do this just fine without the kill.
Aims to address http://opensimulator.org/mantis/view.php?id=6456
2013-01-04 21:49:48 +00:00
SignpostMarv
0022f48d42 Improving documentation of AttachToAvatar and GetLine methods in LSL_Api.cs based on doxygen error output 2013-01-04 21:49:30 +00:00
SignpostMarv
ce448adf91 updating documentation in SampleMoneyModule based on doxygen error log output; changing an xml-style hint to a uri-style hint in the class summary, improving documentation of Initialise method and removing a superfluous parameter, improving documentating of ClientClosed method and documenting an omitted parameter 2013-01-04 21:48:55 +00:00
SignpostMarv
c4fd1c6297 updating config properties added during upgrade process, adding error log file to doxygen config, adding doxygen output directory & error log to .gitignore 2013-01-04 21:48:33 +00:00
SignpostMarv
bbe5018b95 ran doxygen -s -u to upgrade the doxygen config file 2013-01-04 21:48:19 +00:00
Oren Hurvitz
eeeb787f36 Fixed: the AvatarEnteringNewParcel event wasn't triggered in some cases
If an avatar moved between regions: A -> B -> A, then when returning to region A the AvatarEnteringNewParcel wasn't triggered. This happened because the ScenePresence in region A still remembered its previous 'currentParcelUUID', so it appeared as if the avatar didn't change parcels. Now, however, when a ScenePresence becomes a child presence we clear its 'currentParcelUUID'.
2013-01-04 21:47:32 +00:00
Justin Clark-Casey (justincc)
70e46ba815 Change nant distbin target to also remove ThirdParty/ source code when making binary distribution 2013-01-04 00:47:54 +00:00
Justin Clark-Casey (justincc)
f69731b955 minor: Change channel digger replacement message in TerrainModule to Info from Warn.
This is to stop this unnecessarily triggering log analysis code which reports warn and error level statements.
2013-01-04 00:47:43 +00:00
Oren Hurvitz
e5e6fe8c41 Added locking in NullRegionData.
This prevents errors when one thread iterates over the regions (e.g., from RegenerateMaptileAndReregister()) while another thread is adding a region.
2013-01-04 00:47:26 +00:00
Justin Clark-Casey (justincc)
226d655f23 Fix indenting on ConsoleDisplayTable, align indenting on "show animations" console command 2013-01-04 00:47:20 +00:00
Justin Clark-Casey (justincc)
afcf5a7591 minor: Allow objects to be added directly to a row on a ConsoleDisplayTable rather than having to ToString() them first 2013-01-04 00:46:58 +00:00
Oren Hurvitz
39d2cafb5c Implemented Return Objects when it's invoked from the Top Colliders or Top Scripts dialogs 2013-01-04 00:46:52 +00:00
Justin Clark-Casey (justincc)
2b6f12a1d3 Add "show animations" console command for debug purposes.
This shows the current animation sequence and default anims for avatars.
2013-01-04 00:46:44 +00:00
Justin Clark-Casey (justincc)
acd9d62af2 If an NPC is unowned, then always auto-grant permissions requested via llRequestPermissions()
This is consistent with all other OSSL NPC functions that allow unowned avatars to be manipulated.
Aims to address http://opensimulator.org/mantis/view.php?id=6483
2013-01-04 00:46:37 +00:00
Robert Adams
aa236b2020 BulletSim: add parameter to have Bullet output performance statistics
every so many frames. Default to off.
2013-01-01 17:27:34 -08:00
Robert Adams
b14b65ea95 BulletSim: move selection of the unmanaged Bullet DLL from BSPlugin
into the unmanaged Bullet interface class.
2013-01-01 17:27:33 -08:00
Robert Adams
9d840fd2ee BulletSim: move over and port the interface for BulletXNA.
Copied BulletSNPlugin.BulletSimAPI to a new
BulletSPlugin.BSAPIXNA.cs and then modifyed the latter to
comply with the BSAPITemplate definition. Not totally debugged
but the code is all there for an INI variable to select either
unmanaged C++ Bullet or the C# version of Bullet.
2013-01-01 17:27:33 -08:00
Robert Adams
0662d109c2 BulletSim: fix line endings. 2013-01-01 17:27:33 -08:00
Robert Adams
04132d3af4 BulletSim: subclass Bullet[World|Body|Shape|Constraint] for unmanaged
to have pointers and managed to have objects.
Initial paste of XNA code. Commented out.
2013-01-01 17:27:32 -08:00
Oren Hurvitz
a0739a80a8 Fixed bugs when getting the root folder.
1. The error checking for the case where there's no "My Inventory" folder was
incorrect: it checked the wrong variable.
2. If GetSystemFolderForType() is called to get AssetType.RootFolder then
it should return the root folder immediately; not look for another root
folder below it.
2013-01-02 00:04:14 +00:00
Justin Clark-Casey (justincc)
bc9a7ba0d6 minor: Assign names to the different SmartThreadPools for debugging purposes.
A different approach to the patch in http://opensimulator.org/mantis/view.php?id=6462
that doesn't involve further forking of SmartThreadPool
2013-01-01 23:57:20 +00:00
Justin Clark-Casey (justincc)
416244051d refactor: call Util.InitThreadPool() if we are initializing an uninitialized pool on first use rather than constructing it ourselves.
No functional change.
2013-01-01 23:50:38 +00:00
Justin Clark-Casey (justincc)
e8a3cc7019 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2013-01-01 23:27:10 +00:00
Justin Clark-Casey (justincc)
96e196a9dd Clarify that AllowLightShareFunctions setting is false, which is the default in OpenSimDefaults.ini and the code. 2013-01-01 23:23:08 +00:00
Robert Adams
db3b6e8921 BulletSim: remove unused unmanaged memory reference functions from BSAPITemplate. 2012-12-31 19:57:26 -08:00
Robert Adams
6988b5ceaf BulletSim: remove rigid body contruction functions from BSAPITemplate that relied on prebuilt construction info structures. 2012-12-31 19:57:25 -08:00
Robert Adams
9396ccc078 BulletSim: eliminate the use of the unmanaged HeightMapInfo structure.
Remove all related calls from the unmanaged and BSAPITemplate interfaces.
Update DLLs and SOs to include the version without HeightMapInfo structures.
2012-12-31 19:57:25 -08:00
Robert Adams
3d0fc70864 BulletSim: complete movement of BulletSimAPI functions to BSAPITemplate.
Update BulletSim DLLs and SOs with simplier step function interface.
2012-12-31 19:57:24 -08:00
Robert Adams
c2a7af18b6 BulletSim: nearly complete in conversion from BulletSimAPI to BSAPITemplate. Only initialization and debug fuctions left. 2012-12-31 19:57:23 -08:00
Robert Adams
5379d6d112 BulletSim: remove all the debug printing of pointer formatting (.ToString(X)) and replace it with a method on BulletBody, BulletShape, ... 2012-12-31 19:57:22 -08:00
Robert Adams
9218748321 BulletSim: another round of conversion: dynamics world and collision object functions. 2012-12-31 19:57:22 -08:00
Robert Adams
9fd0e1b080 BulletSim: add the implementation files for the two versions of Bullet:
unmanaged (C++) and managed (C#).
2012-12-31 19:57:21 -08:00
Robert Adams
48f718f39f BulletSim: first round of conversion from direct BulletSimAPI interfacing by BulletSim core to using the BulletSimAPITemplate. Physical object creation and destruction first. 2012-12-31 19:57:21 -08:00
Robert Adams
203588e3c0 BulletSim: change physical data structures to classes. Add default
instantiations for PhysBody and PhysShape when BSPhysObject is created
to account for them being classes and not structures.
Update TODO list.
2012-12-31 19:57:21 -08:00
Robert Adams
4914d6c0ea Resolve Mantis 6480 (http://opensimulator.org/mantis/view.php?id=6480)
by reversing the sign on the recoil computation and adding a
[XEngine]RecoilScaleFactor parameter which defaults to zero.
Testing in SL seems to show that there is not a recoil action there.
Or, at least, it is very small. If someone knows how small, the default
for the scale factor should be changed.
2012-12-31 19:57:20 -08:00
Robert Adams
26f364cc5d Comment out test messages that go directly to the console. 2012-12-31 19:57:20 -08:00
Justin Clark-Casey (justincc)
d698df1f37 Remove out-of-date and unused xsd schemas 2012-12-31 22:14:50 +00:00
Justin Clark-Casey (justincc)
c18e2e4545 Remove php dir which was only populated with a single file that generated a long out-of-date user profile array. 2012-12-31 22:12:20 +00:00
Justin Clark-Casey (justincc)
00874eb90e minor: Add README to doc/ to explain that all user-level doc is at http://opensimulator.org rather than here. 2012-12-31 21:42:00 +00:00
Robert Adams
28a8949b9f BulletSim: remove check for small motor movement because, while it
did the right thing for stopping (speed reducing to zero), it prevented
movement from starting (speed increasing from zero). Will revisit
when the generalize PID motor is debugged.
2012-12-29 10:19:47 -08:00
Robert Adams
0538096fa3 BulletSim: an 'if' to suppress multiple setting of avatar orientation.
Looks like the viewer bombards the server with avatar orientation
information (we're talking several hundred a second) when the avatar
is being turned or when walking. This change just reduces the number
of 'set' calls into unmanaged code.
2012-12-29 08:32:57 -08:00
Robert Adams
db6c0363f0 BulletSim: tweeking avatar capsule code in an attempt to have
asymmetrical avatar capsule work now that rotation is being passed
from the simulator. Turns out the Bullet capsule is just not very
functional: it doesn't scale properly, the implementation only half
does asymmetry and, in general, is hard to work with.
Avatar shape is about what it was before these changes.
Added initial data structures for avatar shape mesh.
2012-12-29 08:03:57 -08:00
Robert Adams
976023366f BulletSim: update values in OpenSimDefaults.ini to reflect the values really used by the code. 2012-12-28 16:31:45 -08:00
Robert Adams
fdf8732cd7 ScenePresence passes the avatar rotation down to the physics engine. This will be a no-op for ODE but enables asymmetrical avatars for BulletSim. 2012-12-28 16:29:16 -08:00
Robert Adams
7266eeca6e BulletSim: add 'AvatarAlwaysRunFactor' parameter and use in setTargetVelocity
to implement the 'always run' feature.
2012-12-28 12:01:57 -08:00
Robert Adams
70e0a86601 BulletSim: fix problem of avatars appearing to walk through walls
by moving the movement motor to a pre-step action and out of its
questionable previous home in UpdateProperties.
2012-12-28 11:56:07 -08:00
Robert Adams
1f6aaad0b5 BulletSim: correct collision mask definition for linkset children.
Remove unused code. Add comments and TODOs.
2012-12-27 22:12:28 -08:00
Robert Adams
422f0fd6ec BulletSim: fix physical object not interacting with static objects.
Another instance of the underlying Bullet doing, ah, helpful things
when items are added to the world.
2012-12-27 22:12:28 -08:00
Robert Adams
c1e7539c77 BulletSim: Parameterize nominal frame rate (55) and add parameters to dynamially turn on/off detailed, unmanaged data dumping of prims and vehicles. 2012-12-27 22:12:28 -08:00
Robert Adams
7a5f598399 BulletSim: move logic for IsColliding, CollidingGround and CollidingObj from individual sub-classes and up to parent BSPhysObject class. 2012-12-27 22:12:27 -08:00
Robert Adams
5afab9bcfe Add check to always push terse updates for presences that have new velocities of zero. 2012-12-27 22:12:27 -08:00
Robert Adams
e57c0e6731 BulletSim: fix buoyancy so it's properly set by a script when an
object is selected.
Update TODO list.
2012-12-27 22:12:26 -08:00
Robert Adams
7230990679 BulletSim: fix odd code that wasn't really recomputing the mass of a
rebuilt linkset. I was burnt by making get/set methods with side
effects. I should know better.
2012-12-27 22:12:26 -08:00
Robert Adams
f3baed5827 BulletSim: add physical parameter min/max constants in BSParam. I just don't like raw numbers scattered around the code. 2012-12-27 22:12:25 -08:00
Robert Adams
e98e223927 BulletSim: complete applyImpulse function in BSCharacter (like I said
I did last time).
2012-12-27 22:12:25 -08:00
teravus
29cdf0f3dd * Merges BulletSim Updates to BulletSimN(BulletSNPlugin) 2012-12-18 15:00:10 -05:00
Robert Adams
225b564573 BulletSim: scale the force for external AddForce by the simulation
step time so it will be applied completely the next step. The internal
AddForce routine does not scale the force.
2012-12-26 10:25:50 -08:00
Robert Adams
d1ede1df3a BulletSim: make llBuoyancy work. For some reason, Bullet resets an
object's individual gravity to the world gravity when the object
is added to the physical world.
2012-12-25 23:55:25 -08:00
Robert Adams
5f71ee57c4 BulletSim: stop avatar from sliding VERY slowly after walking by
only zeroing the movement motor in the UpdateProperties routine.
2012-12-25 23:54:10 -08:00
Robert Adams
bbc5a5089f BulletSim: Rename some of the interface structures (BulletWorld, ...)
to get ready for...
Start creation of BulletAPITemplate. This defines the abstract interface
functions. Following commits will move over to the new interface.
This will enable switching between the managed and unmanaged version of
Bullet.
2012-12-24 20:18:06 -08:00
Robert Adams
4759a8acee BulletSim: Default avatar density changed to 3.5 which is WAY closer
to the SL value.
Fixed frictin values for physical materials which were just wrong
which caused things that should have slipped to not.
2012-12-24 20:16:10 -08:00
Robert Adams
80cee1b85a BulletSim: Fix single physical prim reporting its mass as zero.
Properly return root mass as mass of just the root prim rather
than the mass of the linkset. SOG has the logic to add the masses
together to get the linkset mass.
Update TODO list.
2012-12-24 08:56:02 -08:00
teravus
9318870607 * Update BulletSimN terrain implementation to default to Heightfield, it's less CPU intensive. 2012-12-23 16:17:18 -05:00
teravus
1a841dfc59 * Update Example to include BulletSimN option and description. 2012-12-23 15:44:29 -05:00
teravus
cb4949fc15 * Added third party license for Bullet-xna. 2012-12-23 15:24:15 -05:00
teravus
92e4f9f412 * Initial commit of BulletSimN (BulletSNPlugin). Purely C# implementation of BulletSim. This is designed to be /as close as possible/ to the BulletSim plugin while still being entirely in the managed space to make keeping it up to date easy as possible (no thinking work). This implementation is /slower/ then the c++ version just because it's fully managed, so it's not appropriate for huge sims, but it will run small ones OK. At the moment, it supports all known features of BulletSim. Think of it like.. POS but everything works. To use this plugin, set the physics plugin to BulletSimN. 2012-12-23 15:21:25 -05:00
Melanie
50ee50bcd5 Revert "Whitespace change to trigger bot"
This reverts commit 7b0604dc49.
2012-12-23 19:23:20 +00:00
Melanie
aaf0ad5898 Revert "White space change to trigger bot"
This reverts commit bad9cb918a.
2012-12-23 19:22:15 +00:00
Melanie
bad9cb918a White space change to trigger bot 2012-12-23 19:21:20 +00:00
Melanie
7b0604dc49 Whitespace change to trigger bot 2012-12-23 19:19:46 +00:00
Robert Adams
30807b81cc BulletSim: modify avatar motor code to make falling movement better. Clean up some usages. Disable motor when done. 2012-12-22 17:09:40 -08:00
Robert Adams
144322a7c9 BulletSim: remove post step one-time taints (doesn't make any sense). Rename pre and post step event invocation routines to Trigger* to be consistant. Remove old, unused code. 2012-12-22 17:07:52 -08:00
Robert Adams
16e49035f7 BulletSim: add Enabled parameter and operation to motors. 2012-12-22 17:06:13 -08:00
Robert Adams
3e3c168987 Add helper routine Util.InRange() 2012-12-22 17:04:53 -08:00
Robert Adams
5b2cbc0ae6 BulletSim: remove all special vehicle code from BSScene. Replace per-frame updates for vehicles with per-frame action registration. One fewer special case. 2012-12-21 23:24:31 -08:00
Robert Adams
a54392d7cc BulletSim: remove the movement decay while flying. Made flying slow down over time. 2012-12-21 23:05:05 -08:00
Robert Adams
37fb691ba5 BulletSim: Fix llApplyImpulse so it works after the first impulse. The problem was Bullet deactivating the object between the pushes (when, as far as the physics engine is concerned, it isn't moving). 2012-12-21 23:03:27 -08:00
Robert Adams
3d659fe97d BulletSim: add BSPhysObject code to manage registrations of preStep events. Use same to implement setForce and setTorque so the values are restored at the beginning of each step (since Bullet zeros forces applied last step). Simplify implementation of AddForce and AddTorque by relying on the addition of forces in Bullet. 2012-12-21 17:27:53 -08:00
Robert Adams
6dbf9c8ed4 BulletSim: repair vehicle problems introduced in previous 'improvements'. Fix line endings in BSParams. 2012-12-21 15:21:32 -08:00
Robert Adams
ae4d932e7f BulletSim: Move all the parameter variables, tables and get and fetch logic to a separate, static class for easier addition and to remove all that bulk from the BSScene class. 2012-12-21 13:35:44 -08:00
Robert Adams
2e3e95e846 BulletSim: small fix to avatar movement motor use which keeps avatar from flying up forever. This doesn't fix the overall problem but keeps avatar flying from being totally unusable. 2012-12-21 10:04:12 -08:00
Robert Adams
8c99f63239 BulletSim: avatar movement smoothed with motor that modifies avatar velocity to target velocity. Fails in incorporating physical world effects (gravity) so avatar doesn't fly correctly. 2012-12-21 10:00:03 -08:00
Robert Adams
b4f8a05e9a BulletSim: Better detail logging of VMotor actions. 2012-12-21 09:56:31 -08:00
Robert Adams
750492796d BulletSim: begin movement of parameters from pinned memory block to variables all in managed code. Add note to TODO list to remember to do the rest. Other updates to TODO list. 2012-12-21 09:55:20 -08:00
Robert Adams
9d2f569d60 BulletSim: fix incorrectly defined property changed flag. 2012-12-20 16:06:52 -08:00
Robert Adams
e522bdb96a BulletSim: Check for unspecified TimeScale in BSVMotor and don't scale if not specified. Add test dump routine. Don'e zero current and target values when error goes to zero as the values could be used externally to store the actual target values, etc. 2012-12-20 16:05:33 -08:00
Robert Adams
a5b2539cf9 BulletSim: replace use of funky nullable values for vehicle property update control (m_known* stuff). Bitmaps will be quicker to test and to clear. 2012-12-20 10:32:33 -08:00
Robert Adams
e73dac4deb BulletSim: angularMotorUp working again (seems a little slow as it takes longer than timescale to correct, but getting better). Disabled angularDeflection (need to resolve interactions between angular corrections). Update TODO list. 2012-12-20 10:19:16 -08:00
Robert Adams
b7ad44e3a6 BulletSim: reorganize motor step code to separate error computation allowing subclass for PID error correction. 2012-12-20 08:35:36 -08:00
Robert Adams
a9b9c0f035 BulletSim: improve angularVerticalAttraction calculation to compute angular correction velocity rather than estimating correction (excuse to use trig functions). 2012-12-18 23:05:59 -08:00
Robert Adams
7b84bcfbb8 BulletSim: initial implementation of a PID motor. Not hooked up yet. 2012-12-18 22:59:59 -08:00
Robert Adams
cf89e29ac3 BulletSim: comments and TODO list update 2012-12-18 19:25:51 -08:00
Robert Adams
d15bfcf614 Replace axis rotation numeric constants (STATUS_ROTATE_XYZ) with symbols. Also made it so llSetStatus() can individually enable disable rotation axi using the bitmask of flags. 2012-12-18 19:25:40 -08:00
Justin Clark-Casey (justincc)
ae67435146 Disable UDPPacketBuffer pooling for now to resolve an issue on Windows of interference between incoming packets.
On Windows, concurrent multi-threaded processing of inbound UDP somehow allows different data input processing to interfere with each other.
Possibly the endpoint reference is being switched, though I don't yet know the mechanism.  Not seen on Mono.
Also resolveable by setting RecyclePackets = false or RecycleBaseUDPPackets = false in [PacketPool]
Or async_packet_handling = false in [ClientStack.LindenUDP]
For now, will simply disable this particular pooling though will revisit this issue.
In response to http://opensimulator.org/mantis/view.php?id=6468
2012-12-19 01:51:30 +00:00
Justin Clark-Casey (justincc)
235afebf03 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-17 22:19:42 +00:00
Robert Adams
8653ea93b2 BulletSim: apply friction to linear and angular motion before returning advanced motor value. This seems to be the problem with BulletSim vehicles turning too quickly. Also removed the configuration parameter that controlled the timestep scaling kludge for angular velocity that was added to research the question of quick turning. 2012-12-17 13:51:39 -08:00
Justin Clark-Casey (justincc)
e6fd8365af Extend default 1 second wait for event completion to other thread script reset (as called by llResetOtherScript()).
As with script stop (via llDie()) aborting other scripts event threads, llResetOtherScript() can also abort any current event thread on another script.
On mono 2.6, 2.10 and possibly later this may cause locking problems in certain code areas.
This commit reuses the recently introduced [XEngine] WaitForEventCompletionOnScriptStop to make this a 1 sec timeout, rather than 0 secs.
2012-12-17 21:37:02 +00:00
Robert Adams
11532a4390 BulletSim: fix vehicles going underground when unsat. Problem was that, when doing unsit, the order of operations on the prims and the vehicle is very chaotic and not in a good order so the root prim was being left physical and thus it fell for a bit. Also changed default of velocity scaling to be closer to the movement standard. 2012-12-17 13:22:04 -08:00
Robert Adams
021623a17d BulletSim: fix vehicles being shot in the air at border crossings because of mis-application of correction to postion for below groundness. 2012-12-16 22:31:22 -08:00
Robert Adams
2b8efa24dd BulletSim: add parameter to UpdateProperties call into the linkset so changes from the physics engine can be differentiated from changes made by the user. This eliminates a linkset rebuild loop. Also add logic to not rebuild or freak out when the object/linkset crosses a terrain boundry. 2012-12-16 21:19:13 -08:00
Robert Adams
3f2aaffd4d BulletSim: add even more to the TODO list. 2012-12-16 21:19:13 -08:00
Robert Adams
7ed860d3ac BulletSim: add check for border crossing in character position sanity check. 2012-12-16 21:19:12 -08:00
Robert Adams
4cbc5082ff BulletSim: refactor to combine common terrain height testing code. Add function to test if a position is over known terrain. 2012-12-16 21:19:12 -08:00
Robert Adams
8a95953bb7 BulletSim: experimentally remove unit displacement from prim border crossing test. This seems to cause border crossing to be sensed either a little early or a little late depending on which directin the object is moving. If border crossings become totally borked or someone remembers why this was displacement was done, revert this change. 2012-12-16 21:19:12 -08:00
Robert Adams
21dc5f4a1a Add stack dump function that takes an alternate printer outter. I've found that log4net can be slowish so, if one is generating A LOT of debug output, alternate printers are better 2012-12-16 21:19:11 -08:00
Robert Adams
f3b1efd889 BulletSim: remove some errors on shutdown by moving terrain destruction until after physical object destruction. TerrainManager also made disposable and that feature used. 2012-12-16 21:19:11 -08:00
Robert Adams
ace1f1e931 BulletSim: rip out old code for linkset child position fetching. BulletSim doesn't need to do that bookkeeping because SOG/SOP already does it. 2012-12-16 21:19:10 -08:00
Justin Clark-Casey (justincc)
1a262bdde7 Make WebStatsModule properly handle scenes added or removed after initial startup.
This may have been the cause of the DivByZero in http://opensimulator.org/mantis/view.php?id=6460
2012-12-15 00:45:27 +00:00
Justin Clark-Casey (justincc)
494e6a5f11 minor: If the physics module tells us that an object has gone out of bounds, more helpfully log the name, id, position and region of that object. 2012-12-15 00:30:17 +00:00
Justin Clark-Casey (justincc)
56ec177b3b minor: Add commented out log lines to ScenePresenceAnimator for future debug use (such as logging anim pack contents sent to clients) 2012-12-14 23:42:23 +00:00
Justin Clark-Casey (justincc)
2816551215 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-14 23:29:33 +00:00
Justin Clark-Casey (justincc)
750ad2d3af Fix issue where calling llVolumeDetect(FALSE) would not remove phantom flag, causing subsequent issues if physics was re-enabled.
Added regression tests
Addresses http://opensimulator.org/mantis/view.php?id=6365
2012-12-14 22:15:40 +00:00
Robert Adams
664dad53dd BulletSim: Add more to the TODO list. Clean up and improve some comments. 2012-12-13 23:08:01 -08:00
Robert Adams
469c6c000a Return the last set targetVelocity rather than the current velocity as the default action made available in PhysicsActor.TargetVelocity. Doesn't change any physics operation but makes DSG work better as the targetVelocity value does not keep moving around. 2012-12-13 16:32:25 -08:00
Robert Adams
31d3952477 BulletSim: fix problem with continuious rebuilding of physical linksets. This caused movement problems and large prim vehicles to take up a LOT of simulation time. 2012-12-13 16:32:19 -08:00
Robert Adams
60950bfab5 BulletSim: correct line endings in new BulletSimData.cs file. 2012-12-13 16:32:12 -08:00
Robert Adams
3b2b785a46 BulletSim: Add 'BulletSimData' which separates structures created
for the operation of BulletSim and those defintiions/structures defined
so they can be used in the unmanaged world.
Consolidate setting of collision flags so implementation is not scattered.
2012-12-13 16:32:06 -08:00
Robert Adams
9e0dd9952b BulletSim: remove extra linkset rebuilds. 2012-12-13 16:32:00 -08:00
Robert Adams
4a67b93618 Independently control logging for per region module loading. I just got sick of, when debugging, the zillions of log lines verifying that each module is being added to each region. 2012-12-13 16:31:53 -08:00
Justin Clark-Casey (justincc)
0b93a68030 minor: add some more detail to the logging if an LLClientView fails to process a packet 2012-12-13 23:32:28 +00:00
Justin Clark-Casey (justincc)
3c91d0e00d Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-13 23:21:52 +00:00
Justin Clark-Casey (justincc)
523213060b Add WaitForEventCompletionOnScriptStop [XEngine] config param to OpenSimDefaults.ini to allow change of the wait time for an event to complete on script removal before aborting its thread
Default is 1000, as has previously been the case.
This parameter exists for further debug work concerning mono 2.10 crashes that may be related to locks not being removed on Thread.Abort
2012-12-13 23:21:25 +00:00
Dan Lake
88b094cbf7 Simplify sit code a bit by determining correct animation in HandleSit instead of HandleSitRequest. This eliminates m_nextSitAnimation, an unneeded state-saving variable in ScenePresence 2012-12-13 13:05:28 -08:00
BlueWall
6f002733b1 Fix formatting 2012-12-13 13:38:57 -05:00
BlueWall (James Hughes)
5f11b4658e Fix module pathname handling for Windows 2012-12-13 13:15:57 -05:00
BlueWall
203b492fce Update mono addins
Push a small fix for the mono addins
2012-12-13 00:05:34 -05:00
BlueWall
7a87c35f94 Merge branch 'master' of /home/opensim/var/repo/opensim 2012-12-12 23:34:20 -05:00
Justin Clark-Casey (justincc)
8e8da20af2 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-13 01:12:12 +00:00
Justin Clark-Casey (justincc)
6fca93f0b1 Fix sounds so that they play from inventory after teleport rather than only on initial login region.
Regression from commit ed162a10 (Fri Oct 5 13:50:12 2012)
We had started listening for the client login event for attaching the sound trigger event rather than OnNewClient
Addresses http://opensimulator.org/mantis/view.php?id=6453
Many thanks to danbanner for identifying the exact commit where this went wrong, which made identifying the fix easy.
2012-12-13 01:03:35 +00:00
Robert Adams
e1814aa827 BulletSim: fix problem of avatar's floating off the ground after unsitting. Reworked size/scale logic so physical scale is kept in Bullet and physObject scale is the preferred size -- usually same as size but avatars are computed differently. 2012-12-12 16:51:43 -08:00
Robert Adams
6f1f7f0206 BulletSim: non-functional commenting and reorganization of material attribute specifications. 2012-12-12 16:51:36 -08:00
Robert Adams
7bb5613dc6 BulletSim: updates and rearrangement of the TODO list. 2012-12-12 16:51:29 -08:00
Justin Clark-Casey (justincc)
512e4c9313 Log situations where workitem event threads are aborted on stop request because they failed to complete event processing within the given timeout.
This is for bug hunting purposes where thread aborts may be causing dangling lock issues and subsequent vm crashes on mono (with ReaderWriterLockSlim, etc.)
2012-12-12 23:30:26 +00:00
Justin Clark-Casey (justincc)
047270bdc8 Add "debug script log" command to allow setting a numeric debug level on individual IScriptInstances for debugging purposes.
Current, state changes and event fires can be logged for individual scripts.
See command help for more details.
2012-12-12 23:13:34 +00:00
BlueWall
7be13d16c8 Move setting to correct locations in ini 2012-12-12 17:11:30 -05:00
Justin Clark-Casey (justincc)
418c0cb01d Add asset id to "show script" and "show scripts" command output to make it easier to extract and inspect the script's asset via "dump asset" 2012-12-12 22:06:09 +00:00
BlueWall
c5d333c16c Merge branch 'master' of /home/opensim/var/repo/opensim 2012-12-12 16:15:32 -05:00
Robert Adams
bb6eeb5429 BulletSim: do not return the current velocity for targetVelocity. 2012-12-12 11:01:36 -08:00
BlueWall
d7c4f16928 Replace Mono.Addins libraries
Mono.Addins.Setup uses Ionic.Zip for compression. Libraries Compiled on Win32
2012-12-11 21:54:27 -05:00
Robert Adams
a082ce9da7 BulletSim: fix crash caused by the creation of a linkset child that is under the terrain. Users can sure find some interesting corner conditions. 2012-12-11 14:27:09 -08:00
BlueWall
b1849e7fde Hide some console output when initializing addin repository
We do this in OpenSim.exe to hide output when unmanaged dll are scanned by mono addins. Libomv has hard-coded path to "." for the openjpeg libraries, causing output to the console when they are scanned. We will cover this up for now, then look at getting libomv to look for the libs outside the "." later.
2012-12-11 17:03:42 -05:00
Robert Adams
d4e0e98c00 BulletSim: protect character property setting to remove crash from taints setting properties after the destroy character taint. 2012-12-11 13:54:26 -08:00
Robert Adams
63099184db BulletSim: protect prim property setting to remove crash from taints setting properties after the destroy object taint has happened. 2012-12-11 13:42:23 -08:00
Robert Adams
905d7c43ad BulletSim: modify LIMIT_MOTOR_UP to limit BOAT types to be at water rather than ground level. This makes boats float at water level better but not perfectly. There probably needs to be some interaction between HOVER and LIMIT_MOTOR_UP. 2012-12-11 00:35:16 -08:00
Robert Adams
8b861e880a BulletSim: add ini file and command line parameters to control
dumping of physical vehicle parameters (out of Bullet) on each
simulation step and to optionally scale vehicle angular velocity
by the time step. The latter looks to be part of a difference
between angular parameters for ODE and BulletSim. SL docs say
angular velocity is measured in radians/timeScale. Not sure if this
is different than what ODE does.
2012-12-11 00:13:13 -08:00
Robert Adams
ebf30e7ba6 BulletSim: set mass for single prim linksets when going physical. This fixes single prim vehicles not working (the surf board now zooms). 2012-12-11 00:02:20 -08:00
Robert Adams
93393fb975 BulletSim: comment out some chatty debug logging. Rearrange some code in BSDynamics to make velocity vs force calculation clearer. 2012-12-10 16:46:12 -08:00
Robert Adams
9df85eadf4 BulletSim: Fix crash on the destruction of physical linksets.
While fixing the above, add methods to physical body and shape pointer
wrapper so routines won't have to know that IntPtr.Zero means no
physical instance.
Fix problem with physical linksets failing after a few sits and
unsits by properly restoring child prom positions for compound
linksets after multiple selection and deselections.
2012-12-10 15:35:53 -08:00
Robert Adams
a19896cc56 BulletSim: some comments about rebuilding linksets (having to recompute and restore a child's position in the world based on its position in the moved linkset). 2012-12-09 22:32:46 -08:00
Robert Adams
ce5083a504 BulletSim: adjust friction and restitution based on material type. 2012-12-09 22:32:46 -08:00
Diva Canto
af8d53657d HGAssetMapper: Get wasn't really working. It's true that some assets are copied in the process of being gathered their UUID, but not all. Specifically, terminal assets like textures aren't copied. We have to go one more time through the ids. 2012-12-09 22:05:12 -08:00
Diva Canto
b8178f5a50 Switched the order by which foreign inventory and foreign assets are brought in, to avoid race conditions on the client. 2012-12-09 22:03:21 -08:00
Diva Canto
39b388a094 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-09 15:31:50 -08:00
Diva Canto
cb80d8a29c UserManagementModule: search the local cache for names too.
Inventory transfers: don't do async on asset transfers or now.
2012-12-09 15:31:11 -08:00
Diva Canto
5732ce9184 Replaced Mono.Addins dlls with ones compiled in Windows 64-bit. 2012-12-09 15:28:56 -08:00
BlueWall
8efae93b51 Restrict IPresenceData.VerifyAgent
Restrict IPresenceData.VerifyAgent to only return bool result
2012-12-09 15:08:32 -05:00
BlueWall
a37040d07a Merge branch 'master' of /home/opensim/var/repo/opensim 2012-12-08 17:34:08 -05:00
BlueWall
f85b23edea Add agent verification to Presence 2012-12-08 17:33:03 -05:00
BlueWall
bd14fa15e4 Add back openjpeg dll for Windows
May generate some error output during startup on Robust - ignore for now, will fix soon.
2012-12-08 17:15:35 -05:00
Robert Adams
04e64d73df BulletSim: set material properties for static objects. Move Linkset.MakeStatic() after call to ForceActivationState2() since linkset might change activation state. Make BSPrim.CreateGeomAndObject public as linkset rebuilding might need access to it. Only rebuild prim if selection state is actually changes -- OpenSimulator calls PhysObject.Selected() multiple times whenever a prim is selected or deselected. 2012-12-08 09:14:40 -08:00
Robert Adams
216c121935 BulletSim: fix small problem with setting size/scale of native shapes which caused the native shapes to be rebuilt when not necessary. 2012-12-08 09:14:34 -08:00
Robert Adams
addb791f3d BulletSim: update comments and add more to TODO list. 2012-12-08 09:14:28 -08:00
Justin Clark-Casey (justincc)
8de9f9dd4a Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-08 01:37:10 +00:00
Justin Clark-Casey (justincc)
63cff49bce Re-enable code disabled in f605a62 to allow a TaskInventoryAccepted message to nominate a non-root destination folder.
This is in relation to http://opensimulator.org/mantis/view.php?id=6311
This is after further analysis which shows the viewer expects the server to move the folder for #RLV give but then should be renaming the folder itself.
For some reason this is not happening, possibly because we are not sending BulkUpdates or because we are not using transaction IDs properly.
This needs to be fixed in the future.
However, moving the folder even if the rename isn't correctly triggered in the viewer seems preferable to disabling this code altogether.
2012-12-08 01:29:58 +00:00
BlueWall
77e88fab06 Format change
Removed some white space in a line, looking to trigger a build
2012-12-07 20:19:16 -05:00
BlueWall
063f37cf73 One more time...
needed one more "../" in the path (copy paste): Thanks BrucePatton for catching that one
2012-12-07 20:03:15 -05:00
BlueWall
a6e5a2f4df Prebuild fix
Had moved the class to a different namespace but failed to add the reference
2012-12-07 19:41:07 -05:00
BlueWall
cba1390ffd Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-07 16:56:03 -05:00
Diva Canto
16d18afe21 Added missing config var in grided sims. 2012-12-07 12:38:19 -08:00
BlueWall
0b455d2882 Merge branch 'master' into connector_plugin 2012-12-07 15:36:43 -05:00
Diva Canto
3c9f8c9c46 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-06 20:04:59 -08:00
Diva Canto
8b29db98bd Trying to prevent old route of sending attachments, simulator version unknown maybe due to timeout. mantis #6450 2012-12-06 20:04:32 -08:00
Justin Clark-Casey (justincc)
4e622f6816 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-07 00:53:47 +00:00
Justin Clark-Casey (justincc)
0568c76a88 Use a thread abort safe version of OpenMetaverse.DoubleDictionary with the aim of avoiding OpenSimulator problems due to script thread aborts.
When an object is removed, its scripts are stopped and then the thread running them is aborted if stop takes too long.
However, it appears that aborting a thread at just the wrong moment when it is obtaining a ReaderWriterLockSlim lock can leave this lock in an inconsistent state.
One symptom of this is that mono leaps to 100% cpu and a vm thread dump reveals lots of threads waiting for a ReaderWriterLockSlim lock without any thread actually holding it.
This is probably the same problem as encountered originally in commit 12cebb12
This commit looks to plaster this problem by putting lock obtaining methods inside finally blocks which should be uninterruptible by thread aborts.
2012-12-07 00:47:04 +00:00
Robert Adams
707e186aa3 BulletSim: update DLLs and SOs with vehicle collision event check 2012-12-06 09:34:30 -08:00
Robert Adams
7fd8202ae3 BulletSim: rewrite and improve vehicle angularDeflection, verticalAttraction,
linearMotorUp and related vehicle forces.
Fixed problems with downward vehicle position correction forces being too large.
Add vehicle collision flag so can sense whether vehicle is on the ground.
2012-12-06 09:31:12 -08:00
Robert Adams
edd1b353a5 BulletSim: update and add to the TODO list. 2012-12-06 09:31:05 -08:00
Robert Adams
18fe35906d BulletSim: add detail logging detail flag so I don't have to comment and uncomment the detail logging when changing the depth of logged info. 2012-12-06 09:30:57 -08:00
Robert Adams
cc59e3cbdf BulletSim: only check position sanity if the prim is physical -- the user can do anything dumb they wish. 2012-12-06 09:30:50 -08:00
Robert Adams
2ecd8e6720 BulletSim: add values for material friction and restitution. Fix line endings in material definition file. 2012-12-06 09:30:42 -08:00
Robert Adams
6d7f66f781 BulletSim: Don't add gravity to down force -- let Bullet do that. Add VehicleAddForce to set of managed vehicle prim properties. 2012-12-06 09:30:35 -08:00
Robert Adams
e599a8b242 BulletSim: Vehicle angular vertical attraction works. Other vehicle angular forces commented out for the moment for debugging. 2012-12-06 09:30:28 -08:00
nebadon
f1d4e8f792 fix openjpeg on 64 bit OSX we were pointing to a file taht did not
exist.
2012-12-06 09:52:18 -07:00
Justin Clark-Casey (justincc)
68daeee434 minor: change method doc on GetTextureHandler.TryParseRange(), mainly to trigger another build 2012-12-06 01:36:30 +00:00
Justin Clark-Casey (justincc)
acc01bb85d Allow GetTexture calls with no second value in the range header (e.g. just 5333-)
It looks like the latest Kokua is doing this.
As per http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html, leaving off the second value is legal
This indicates the caller wants the rest of the entity.
2012-12-06 01:12:12 +00:00
Justin Clark-Casey (justincc)
1c9ecc55d3 Instead of printing script errors out to console, put to debug log so that we also get timestamps.
This commit also adds script name, part name, uuid, etc. for later identification.
This information has been sent to console since 2009 but may be turned down if it proves too noisy.
However, I still currently need it to investigate some region problems probably triggered by scripting.
2012-12-06 00:22:52 +00:00
Justin Clark-Casey (justincc)
e60fe958df minor: Fix more compiler warnings in CoreModules tests by properly overriding OpenSimTestCase.SetUp() 2012-12-05 23:44:12 +00:00
Justin Clark-Casey (justincc)
ec765de7e5 Add engine-wide events queued and events processed numbers to output of "xengine status" console command. For debugging purposes. 2012-12-05 23:41:50 +00:00
Justin Clark-Casey (justincc)
66982c8a59 Remove some mono warnings in script tests, chiefly where SetUp() wasn't properly calling to OpenSimTestCase.SetUp() 2012-12-05 23:36:15 +00:00
Justin Clark-Casey (justincc)
5ba99cbf55 Add IScriptInstance.EventsQueued to match EventsProcessed instead of asking callers to lock and directly inspect the EventQueue 2012-12-05 23:33:48 +00:00
Justin Clark-Casey (justincc)
652f4bcb42 For now, sort "show scripts" output in descending order sorted by events processed.
For debug purposes - should later add options to allow different sorting or show only highest 10, etc.
2012-12-05 23:27:50 +00:00
Justin Clark-Casey (justincc)
e8df0f1b4c Add IScriptInstance.EventsProcessed stat so that we can record this information and display in "show scripts" for debug purposes 2012-12-05 22:33:46 +00:00
Justin Clark-Casey (justincc)
0f3ebe0971 Remove very probably unused PrimitiveBaseShape(bool) constructor to reduce code complexity 2012-12-05 22:12:45 +00:00
Justin Clark-Casey (justincc)
b60c6bc3f8 Don't pointlessly set ExtraParams = byte[1] in PrimitiveBaseShape since this is ignored by the ExtraParams properly anyway 2012-12-05 22:01:47 +00:00
Justin Clark-Casey (justincc)
2342d20a7e minor: tidy up spacing at bottom of MundaneFrameworkTests 2012-12-05 21:53:25 +00:00
Justin Clark-Casey (justincc)
fdf8876e20 In BaseHttpServer.HandleRequest(), use Culture.SetCurrentCulture() rather than creating a new CultureInfo separately 2012-12-05 21:52:10 +00:00
Justin Clark-Casey (justincc)
ea786414c2 In XEngine.DoOnRezScript() use Culture.SetCurrentCulture() instead of constructing a new CultureInfo separately 2012-12-05 21:51:08 +00:00
Justin Clark-Casey (justincc)
d97440c7cf On XEngine.ProcessEventHandler(), instead of creating a new CultureInfo on every call use the single one set by Culture.SetCurrentCulture()
This is slightly different in that SetCurrentCulture() does not use overridden settings if the system culture matches en-US but some settings there have been changed.
This is what we want - we do not want to use any system overriden settings.
2012-12-05 21:40:28 +00:00
Justin Clark-Casey (justincc)
1b5f21f761 minor: also comment out the debug log message which reports searching for child agents in simulator scenes for now. 2012-12-04 23:07:26 +00:00
Justin Clark-Casey (justincc)
0d4047e641 minor: Comment out "Delivering IM to..." messages for now. 2012-12-04 23:06:02 +00:00
Justin Clark-Casey (justincc)
fb26d32a5c minor: Put Scene.PhysicsRequestAsset() into standard C# xml format. 2012-12-04 22:33:25 +00:00
Justin Clark-Casey (justincc)
7fdc251774 Add path references for Mono.Addins where they were missing for DataSnapshot and UserStatistics.
Should address http://opensimulator.org/mantis/view.php?id=6444
Appears that nant doesn't need these paths but building directly in monodevelop does.
2012-12-04 22:24:51 +00:00
Diva Canto
583e44103c Bug fix in OfflineMessageModule. Mantis #6446 2012-12-04 08:36:54 -08:00
Diva Canto
a4821c5e01 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-04 08:08:58 -08:00
Diva Canto
dc80c2afb3 Improvement in HGInstantMessageService: account for the existence of an offline IM service. 2012-12-04 08:08:34 -08:00
BlueWall
0c7d6adef1 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-12-03 20:17:00 -05:00
BlueWall
ac65085cc3 XmlRpcGridRouter
Flesh out XmlRpcGridRouter to reap unused channels from gateway when scripts or objects are removed, or when the llCloseRemoteDataChannel is called.

  See: http://http://forge.opensimulator.org/gf/project/xmlrpcrouter/ or
       https://github.com/BlueWall/XmlRpcRouter

  for php gateway and test code.
2012-12-03 20:16:44 -05:00
Robert Adams
787636b97a BulletSim: Reduce idle region physics overhead where there are MANY
static objects by more restrictive selection of objects that collide
    with static objects.
Rename collision mask fuctions from 'filter' to 'group' so it is clear
    what is being set.
Rename BulletSimAPI.SetCollisionFilterMask() to SetCollisionGroupMask to match above.
Restore passing of time step to linear and angular motion component routines.
Use buffering vehicle physical parameter get/set routines consistantly.
Make range enforcement clearer by using ClampInRange() function for parameter setting.
Remove commented out experimental vehicle calculations.
2012-12-03 16:25:51 -08:00
Robert Adams
41f1c5b7f7 BulletSim: rework angular corrections to remove any hybrid code and compute absolute collections. 2012-12-03 07:59:56 -08:00
Robert Adams
2586bab2dd BulletSim: add stubs for generalization of preStep actions. Will eventually replace the specialized vehicle processing with preStep event processing. Add TODO comments about this feature. Redo line endings in TODO file to be all Linux. 2012-12-03 07:59:52 -08:00
Robert Adams
dc0497c1b8 BulletSim: begin tracking a TODO list. There just are so many things to remember to do. 2012-12-03 07:59:49 -08:00
Robert Adams
10fcc70b36 BulletSim: revert angular vertical attraction from motor to code. The motor code did not return the restoring difference but the current value. Remove unused commented out code. 2012-12-03 07:59:46 -08:00
Robert Adams
f9fed421fe BulletSim: format vehicle detail logging messages so vehicle changs are grouped better in the log output. 2012-12-03 07:59:42 -08:00
Robert Adams
20c3ec7d92 BulletSim: localize vehicle property setting so the vehicle prim is only updated at the end of the vehicle simulation step and the push of the physics property update event only happens if the properties are actually changed. 2012-12-03 07:59:39 -08:00
Robert Adams
b124aae05e BulletSim: Add DumpActivationInfo2 function. Change static objects from DISABLE_SIMULATION to ISLAND_SLEEPING. Update DLLs and SOs to add DumpActivationInfo2 function. 2012-12-01 15:39:13 -08:00
Robert Adams
ec63e4ff29 BulletSim: remove time scaling of computed vehicle absolute velocity since Bullet will scale the movement by the time slice. Restore LIMIT_MOTOR_UP to definitition of BOAT simce some vehicle engines use it even for land vehicles. Push vehicle parameter updates through the regular property update to solve vehicles floating off when they should be stopped. 2012-11-29 22:21:45 -08:00
Robert Adams
0bda35e18f BulletSim: add copyright header where it is missing. Remove some unnecessary 'using' requirements so testing framework is less complicated. 2012-11-29 09:53:59 -08:00
Robert Adams
0cd99c74a7 BulletSim: add expanded call to IMesher/Meshmerizer which enables/disables mesh caching. Since BulletSim caches and tracks the unmanaged memory version of meshes, the Meshmerizer itself does not need to cache built meshes once BulletSim has made the physical proxy mesh. 2012-11-29 09:24:53 -08:00
Robert Adams
b8a7cbb9e9 BulletSim: reverse direction of hover correction. Removes problem with vehicles being orbited. 2012-11-29 08:03:30 -08:00
Robert Adams
2ccd4c1302 BulletSim: fix boats floating low by removing LIMIT_MOTOR_UP flag from TYPE_BOAT definition. 2012-11-28 09:48:48 -08:00
Robert Adams
24b3b4df2e BulletSim: update DLLs and SOs to remove simulator crash when calling SetInterpolationAngularVelocity. 2012-11-28 09:48:41 -08:00
Robert Adams
0a66317fa6 BulletSim: move GetWaterLevelAtXYZ from BSScene to BSPhysTerrain. 2012-11-28 09:48:33 -08:00
Diva Canto
d656ec8f33 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-27 21:11:19 -08:00
Diva Canto
92a766e8cb Bug fix in Offline IM for inventory transfers. The items were being placed twice in the receiver's inventory. 2012-11-27 21:10:58 -08:00
Justin Clark-Casey (justincc)
aae76f7be4 Stop logging spurious asset data for {0} is zero length error for sculpts/mesh
ODEPrim, for instance, always hits this code path twice at the moment
Firstly before any sculpt data has been loaded (hence the spurious message)
Secondly when any sculpt data has been loaded or failed to load (when the message would be valid).
Hence comment this out and rely on the message in ODEPrim.MeshAssetReceived() instead
(though this is not ideal since it requires all physics plugins to copy/paste similar code).
2012-11-28 02:01:04 +00:00
Justin Clark-Casey (justincc)
8a1d3b322f Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-28 02:00:34 +00:00
Justin Clark-Casey (justincc)
c17ea2049b Show many more primitive properties on console command "show part name/id/pos" 2012-11-28 01:42:58 +00:00
Diva Canto
a82f699f43 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-27 14:43:01 -08:00
Diva Canto
2cd88787af Prevent the core Groups module from being enabled when its name doesn't match the "default" ini choice 2012-11-27 14:42:28 -08:00
Robert Adams
8e459a0346 BulletSim: reorganize linear movement routine into separate subroutines enabling external calibration routines and unit tests. 2012-11-27 10:04:00 -08:00
Robert Adams
a5100cafee BulletSim: fix terrain mesh generation for problem with regions that have unequal edge heights. Thanks UBit. 2012-11-27 10:03:55 -08:00
Robert Adams
68fe7dff20 BulletSim: reorganize angular movement routine into separate subroutines enabling external calibration routines and unit testing. 2012-11-27 10:03:49 -08:00
Robert Adams
59554758b1 BulletSim: implementation of vertical attraction motor. 2012-11-27 10:03:44 -08:00
Robert Adams
9e0db36c82 BulletSim: add 'infinite' timescale that does not reduce motor target or friction. 2012-11-27 10:03:38 -08:00
Justin Clark-Casey (justincc)
16e4019eca Fix database service unit test failures by temporarily reverting BasicDataServiceTest extending OpenSimTestCase.
Mono 2.4.3 doesn't like this when running nunit, with nunit throwing
AssetTests`2 : System.MemberAccessException : Cannot create an instance of OpenSim.Data.Tests.AssetTests`2[TConn,TAssetData] because Type.ContainsGenericParameters is true.
and similar.  Mono 2.10.8.1 does not have this issue.
So will wait until min version of mono bumps before restoring.
2012-11-26 22:25:36 +00:00
Robert Adams
5685b33071 BulletSim: increase vehicle stability by suppressing Bullet's update to angular velocity. 2012-11-26 10:47:34 -08:00
BlueWall
88f2fbc8f1 Merge branch 'master' into connector_plugin 2012-11-26 06:55:03 -05:00
Robert Adams
084e3926ca BulletSim: use m_angularMotor to do the basic movement. Add the setting of same. Rename the angular forces and add comments to match MoveAngular to the form of MoveLinear. 2012-11-25 20:04:33 -08:00
Robert Adams
d7126a14e1 BulletSim: up the vehicle angular damping to 0.95. Still trying to overcome the movement added by Bullet. 2012-11-25 20:04:33 -08:00
Robert Adams
4c077a0694 BulletSim: organize MoveLinear code for understandability. Make LIMIT_MOTOR_UP contribution a velocity and not a force. 2012-11-25 20:04:32 -08:00
Robert Adams
f977131fe0 BulletSim: add ToString override to BSVMotor. 2012-11-25 20:04:32 -08:00
Robert Adams
319ec3235c BulletSim: add BSVMotor as BSDynamics linear motor.
Properly limit *_MOTOR_DECAY_TIMESCALE to 120 as per specs.
Invode BSDynamics.Refresh() when vehicle type is changed. Previously
   the vehicle properties weren't getting set because the physical
   properties were set before the vehicle type was set.
Add a "use name" to BSMotors for identification while debugging.
Correct current and target confusion in BSVMotor design.
Rename CurrentValueReductionTimescale to FrictionTimescale.
Event more detailed logging.
2012-11-25 20:04:31 -08:00
Robert Adams
bd635e264a BulletSim: update DLLs and SOs with new collision margin setting function. 2012-11-25 20:04:31 -08:00
Robert Adams
9b98011714 BulletSim: update OpenSimDefaults.ini with current default values for friction and collision margin. Remove some of the BulletSim parameters that are very esoteric and dangerous. Most of the remaining parameters are features one can 'see'. 2012-11-25 20:04:30 -08:00
Robert Adams
980edabc2e BulletSim: clean up TODO list. It is kept somewhere wlse that should be more public. Add error logging for the detail log writer so a message is output when it cannot write to the specified logging directory. Modify friction defaults to be closer to ODE's values. Add new collision margin and vehicle angular damping parameters. 2012-11-25 20:04:29 -08:00
Robert Adams
9a42405944 BulletSim: small change to add position correction force with AddForce rather than just storing it in the variable 2012-11-25 20:04:28 -08:00
Robert Adams
22d5bf8ff9 BulletSim: complete vector motor. Correct line endings. 2012-11-25 20:04:28 -08:00
Robert Adams
d1480ac7ee BulletSim: add terrain collision margin and vehicle angular damping
parameters to the parameter block.
New API call for setting collision margin.
2012-11-25 20:04:27 -08:00
Robert Adams
c3f30fef96 BulletSim: add parameter for terrain collision margin.
Add locking around unlikely but possible race conditions on terrain list.
2012-11-25 20:04:27 -08:00
Robert Adams
4ae30873ad BulletSim: Add tables and initialization for different attributes for different materials. For the moment, the per material tables are not used. 2012-11-25 20:04:26 -08:00
BlueWall
c754003944 Merge branch 'master' into connector_plugin
Conflicts:
	OpenSim/Server/Base/ServicesServerBase.cs
2012-11-25 17:03:14 -05:00
Justin Clark-Casey (justincc)
02db8b9adb Combine TestDeleteSceneObjectAsync() with TestDeRezSceneObject() as they are functionally identical.
Move TestDeleteSceneObjectAsync() and TestDeleteSceneObjectAsyncToUserInventory() from SceneObjectBasicTests -> SceneObjectDeRezTests
2012-11-24 03:49:23 +00:00
Justin Clark-Casey (justincc)
a4ce63d0cd Fix regression TestDeleteSceneObjectAsyncToUserInventory by adding a BasicInventoryAccessModule() and re-enable in test suite. 2012-11-24 03:38:15 +00:00
Justin Clark-Casey (justincc)
22d4c52ffc Consistenly make NUnit test cases inherit from OpenSimTestCase which automatically turns off any logging enabled between tests 2012-11-24 03:15:24 +00:00
Justin Clark-Casey (justincc)
e9be85442f In ArchiverTests, use the local instantiated SceneManager rather than potentially cross-contaminating tests by relying on the static SceneManager.Instance 2012-11-24 02:57:43 +00:00
Justin Clark-Casey (justincc)
82690e1384 Fix bug where loading an OAR with a deeded parcel would always set the parcel owner ID to the estate owner even if the group UUID was present.
Aims to address http://opensimulator.org/mantis/view.php?id=6355
As part of this work, an incomplete IXGroupsData was added which currently only allows store/fetch/delete of group records
(i.e. no membership data etc)
This is subject to change and currently only an in-memory storage implementation exists for regression test purposes.
2012-11-24 02:43:31 +00:00
Justin Clark-Casey (justincc)
cda531bc3c minor: Add some currently commented out debug log lines for investigating issues resolving group IDs for land parcels on OAR loading where groups do not exist 2012-11-23 05:44:31 +00:00
Justin Clark-Casey (justincc)
999cb4b20c Make "show threads" and "thread abort" console commands available on all servers 2012-11-23 04:40:49 +00:00
Justin Clark-Casey (justincc)
e0a3e01850 Make "force gc" console command available across all servers 2012-11-23 04:27:04 +00:00
Justin Clark-Casey (justincc)
4b46a0d536 Make "show version" console command available across all servers 2012-11-23 04:19:08 +00:00
Justin Clark-Casey (justincc)
065d6d6fe1 Delete unused BaseHttpServer.HandleAgentRequest() 2012-11-23 04:15:21 +00:00
Justin Clark-Casey (justincc)
edbdbd44b9 Enable further client stack packet pooling by default by setting RecycleBaseUDPPackets = true by default.
This reduces base memory churn of every client connection, improving the garbage collection situation.
The effect is a significant portion of base load (an avatar standing still on a completely blank island)
but will probably still be swallowed up by other memory use on active regions.
Tests have shown no noticeable impact on speed of processing incoming packets, though setting remains
in case a switch back is needed.
2012-11-23 04:09:45 +00:00
Justin Clark-Casey (justincc)
acc1810af2 minor: remove some mono compiler warnings 2012-11-23 04:08:17 +00:00
Justin Clark-Casey (justincc)
1f336579c8 minor: Make note in log if scene was restarted due to an unrecoverable physics error 2012-11-23 04:06:48 +00:00
Justin Clark-Casey (justincc)
f473252fa8 Add AllowRegionRestartFromClient setting to [EstateManagement] section of OpenSim.ini.
Setting this to false will block all restart requests from the viewer even if they are otherwise legitimate.
One use is to block region restarts if necessary whilst restart functionality remains buggy or triggers bugs in modules,
though these should be fixed as soon as practicable.
Default is true, as has been the case historically.
2012-11-23 03:56:53 +00:00
Justin Clark-Casey (justincc)
36c6edac69 Remove the redundant BypassPermissions() checks in EstateManagmentModule.
This is repeated in the PermissionsModule and checking it earlier does not allow a force override of the bypass value
2012-11-23 03:29:50 +00:00
Justin Clark-Casey (justincc)
9b60c14bb1 minor: Add some console feedback on region restart and log who requested a region restart if done from the viewer. 2012-11-23 03:05:30 +00:00
Justin Clark-Casey (justincc)
8c8c8a00a4 Fix problem where restarting the currently selected region would stop various console commands (e.g. "show users") from working.
This was because the "currently selected" scene reference was being left as the dead scene instead of the restarted Scene object.
2012-11-23 02:22:30 +00:00
Justin Clark-Casey (justincc)
049987925d Add regression test for checking scene close when SceneManager is asked to close 2012-11-23 02:05:30 +00:00
Justin Clark-Casey (justincc)
eb1921ff93 Add "help all" console command which will list all commands alphabetically in a single list 2012-11-23 01:52:48 +00:00
justincc
7133b6bb4f Fix recent windows build break.
Add missing OpenSim.Framework.Servers reference
2012-11-23 01:43:11 +00:00
Justin Clark-Casey (justincc)
61808d148e Fix regression where we stopped closing scenes on simulator exit.
If we don't do this, then these scenes don't get deregistered from the grid, amongst other things.
Regression was introduced in commit 8c130bc (Mon Nov 12 22:50:28 2012 +0000)
2012-11-23 01:01:39 +00:00
Melanie
3b2caa63b0 Rename BulletSim's PhysicsShapeType to BSPhysicsShapeType because it
conflicts with PhysicsShape type defined in later libOMV
2012-11-22 14:45:41 +00:00
Justin Clark-Casey (justincc)
3ce00e97cc Factor out command script code.
This also allows comments in command scripts (lines starting with ;, # or //) to be used across all servers
2012-11-22 05:57:20 +00:00
Justin Clark-Casey (justincc)
9fcf3f1a3f Make "config show/set/get/save" console commands available on all servers 2012-11-22 05:48:41 +00:00
Justin Clark-Casey (justincc)
8269d2b893 Factor out common pid file creation and removal code.
Log path at which pid file is created or reason for failure to create.
2012-11-22 05:14:43 +00:00
Justin Clark-Casey (justincc)
42e87a6582 Add "get log level" command - this returns the current server session console logging level.
This supersedes getting information by calling "set log level" without a 4th argument, which is confusing.
2012-11-22 04:57:45 +00:00
Justin Clark-Casey (justincc)
34ff96a119 Remove unused BaseOpenSimServer.ShowHelp() 2012-11-22 04:52:29 +00:00
Justin Clark-Casey (justincc)
4c4379b50f Make "set log level" command available across all servers 2012-11-22 04:50:09 +00:00
Justin Clark-Casey (justincc)
45d1e6ab09 Make "show info" command available across all servers
This helpfully lists version information, startup location and console log level
2012-11-22 04:45:53 +00:00
Justin Clark-Casey (justincc)
cf03d6ea92 Factor out common registration of "show uptime" command 2012-11-22 04:11:03 +00:00
Justin Clark-Casey (justincc)
5c48d7a378 factor out common HandleShow code for "show uptime" 2012-11-22 04:05:09 +00:00
Justin Clark-Casey (justincc)
74a20a62ee refactor: Factor out copy/pasted server uptime report code 2012-11-22 03:43:21 +00:00
Justin Clark-Casey (justincc)
448811ccdd If an asset POST does not contain well-formed XML, return a 400 (Bad Request) HTTP status rather than simply dropping the request. 2012-11-22 03:03:37 +00:00
Justin Clark-Casey (justincc)
33a4f07c4e Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-22 03:01:26 +00:00
Robert Adams
56ef180c92 BulletSim: update DLLs and SOs. No functional changes. Only the parameter block format changed. 2012-11-21 16:44:02 -08:00
Robert Adams
cbc7e7bf85 BulletSim: Make avatar capsule so it is not circular.
Simple attempt to make avatars better shaped.
Replace parameter 'avatarCapsuleRadius' with 'avatarCapsuleWidth'
and 'avatarCapsuleDepth'.
More tweeking to avatar height calculation. A little better but
short avatar's feet are above the terrain and tall avatar's feet
are a little below the ground.
2012-11-21 16:43:53 -08:00
Robert Adams
4a0de01704 BulletSim: Properly position mesh terrain on creation (fixes terrain not appearing to be working). Centralize terrain shape creation logic. Remove very chatty detail log messages. 2012-11-21 16:43:45 -08:00
Robert Adams
a59368c4a1 BulletSim: add terrainImplementation parameter with default to Mesh. 2012-11-21 16:43:37 -08:00
Robert Adams
2dc7e9d3fa BulletSim: fix line endings to be all Linux style (windows style keeps creeping in) 2012-11-21 16:43:29 -08:00
Robert Adams
34cbc738a8 BulletSim: enablement and debugging of mesh terrain. 2012-11-21 16:43:21 -08:00
Robert Adams
71b9640dfa BulletSim: pull heightmap implementation out of the terrain manager so a mesh terrain can be implemented. 2012-11-21 16:43:14 -08:00
Robert Adams
8dd5813889 BulletSim: rename SHAPE_AVATAR to SHAPE_CAPSULE with the eye to eventually having mesh avatars. 2012-11-21 16:43:06 -08:00
Robert Adams
65e55ada87 BulletSim: uplevel FixedShapeKey out of ShapeData structure (since it is getting simplified out of existance someday) and update all the references to same. 2012-11-21 16:42:58 -08:00
Robert Adams
d6db0d5740 BulletSim: uplevel PhysicsShapeType out of ShapeData structure (since it is getting simplified out of existance someday) and update all the references to that enum. 2012-11-21 16:42:50 -08:00
Robert Adams
4d29488216 BulletSim: change PositionSanityCheck to apply a force to correct position corrections (below ground and floating). 2012-11-21 16:42:42 -08:00
Robert Adams
2f5fe4b88e BulletSim: tweek avatar capsule parameters so avatar feet don't go below ground. This solves the bouncing, short avatar problem (Mantis 6403). 2012-11-21 16:42:34 -08:00
Justin Clark-Casey (justincc)
bac8ac32da Add regression test for a good request made to the asset service post handler.
Adds new OpenSim.Server.Handlers.Tests.dll to test suite
2012-11-21 23:42:34 +00:00
Justin Clark-Casey (justincc)
f656adee31 If GetAgents() is called with an empty userIDs array then don't bother with a useless potentially network call on the scene presence service connector.
This also eliminates the "[PRESENCE HANDLER]: GetAgents called without required uuids argument"
which has started to pop up in the logs when a call is made with an empty uuid array as occasionally happens.
2012-11-20 10:22:49 +00:00
Justin Clark-Casey (justincc)
ea65a64f7b refactor: Move common presence connector code into BasePresenceServiceConnector 2012-11-20 10:11:57 +00:00
Justin Clark-Casey (justincc)
5aec4f6dd0 Add Iain Oliver to CONTRIBUTORS.txt 2012-11-20 05:15:04 +00:00
Justin Clark-Casey (justincc)
597a101b9f Minor formatting for 0962a35d and a few one-line comments as to why that code is there 2012-11-20 05:09:44 +00:00
Iain Oliver
0962a35d2f Fix movetotarget on mega regions. 2012-11-20 04:54:13 +00:00
Justin Clark-Casey (justincc)
dc5711ad62 minor: If logging full incoming HTTP data, don't deceptively print ... at the end of the body. 2012-11-20 04:10:03 +00:00
BlueWall
665f79e15c Expose configuration options for the XmlRpcGridRouter
Expose configuration options for the XmlRpcGridRouter to allow simulators to register llRemoteData channels with an external routing service
2012-11-19 21:51:37 -05:00
Robert Adams
6c961d8add BulletSim: Use base class constructors for initialization of BSShape and other classes. 2012-11-18 22:58:36 -08:00
Robert Adams
22be36be69 BulletSim: fix the problem with flying being disabled when crossing region boundries. 2012-11-18 22:57:26 -08:00
Robert Adams
079a1e704f BulletSim: remove the obsolete interface to the Bullet code. Update BulletSim libraries with code stripped of the obsolete code. 2012-11-18 18:17:30 -08:00
Justin Clark-Casey (justincc)
5b79bfc4df Remove old InventoryService, which has for a long time been replaced by XInventoryService. 2012-11-17 01:32:01 +00:00
Justin Clark-Casey (justincc)
392e84e554 Remove unnecessary ability to directly set InventoryItemBase.CreatorIdAsUuid
This was necessary historically but hasn't been for many years.
Can still get CreatorIdAsUuid, which is really just a UUID cached version of the string CreatorId
2012-11-17 01:23:29 +00:00
Justin Clark-Casey (justincc)
2aa58c5843 Do not allow invariants to change on calls to XInventoryService.UpdateItem()
This is to help track down http://opensimulator.org/mantis/view.php?id=6359 where creator IDs on items and rezzed objects have been reported to sometimes change.
This should never happen - a particular item should never change creators (if an item is given then a new item (with new id) is created).
Invariants are inventory type, asset type, folder (changed only on MoveItems()), CreatorIdentification and Owner.
If caller attempts to change an invariant, warning is logged but other properties are still changed.
If you see this warning, reporting on Mantis 6359 would be very welcome with the exact operation being done at the time.
2012-11-17 01:01:14 +00:00
Justin Clark-Casey (justincc)
e25c51330a Add basic XInventoryServicesTests.TestAddItem() regression test. 2012-11-17 00:12:25 +00:00
Justin Clark-Casey (justincc)
55f889cc66 refactor: Move stat classes out of StatManager and into their own files for clarity. 2012-11-16 05:02:06 +00:00
Justin Clark-Casey (justincc)
cbc635a9c6 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-16 04:48:55 +00:00
Justin Clark-Casey (justincc)
cd088757e9 Add a first draft mechanism for the IncomingPacketsProcessedStat to show the delta over time.
The chief motivation for this is to be able to tell whether there's any impact on incoming packet processing from enabling extra packet pooling.
2012-11-16 04:36:22 +00:00
Diva Canto
df62d113ab The last few AssemblyInfos. Finished! 2012-11-14 21:18:18 -08:00
Justin Clark-Casey (justincc)
350cd58e5e refactor: move common inventory folder version update code to parent class in mysql, mssql and sqlite database plugins 2012-11-15 04:01:30 +00:00
Justin Clark-Casey (justincc)
16dd94b956 Improve inventory folder version updating for mssql database plugin.
I am not in a position to test this so the updates have been done blind.
If it needs any fixing will probably require patches.
2012-11-15 03:39:17 +00:00
Justin Clark-Casey (justincc)
0c4efdc6a8 Fix build break from 1aa0271 by adding System.Core to prebuild.xml 2012-11-15 03:32:03 +00:00
Justin Clark-Casey (justincc)
1aa0271239 Implement folder version updating for the sqlite inventory plugin 2012-11-15 03:29:55 +00:00
Justin Clark-Casey (justincc)
daf03bfb56 Handle Map block requests on a separate thread rather than the main packet handling thread.
This prevents a slow grid information network call from holding up the main packet handling thread.
There's no obvious race condition reason for not doing this asynchronously.
2012-11-15 03:09:20 +00:00
Justin Clark-Casey (justincc)
57273ef7b2 Do HandleMapLayerRequest on its own thread rather than on the main inbound udp packet handling thread.
There's no obvious race condition reason for doing this on the main packet handling thread.
2012-11-15 03:07:45 +00:00
Justin Clark-Casey (justincc)
df4da51f04 Following on from 4f982596, launch map name requests on an async thread from LLClientView directly.
This releases the inbound packet handling thread marginally quicker and is more consistent with the other async packet handling
2012-11-15 03:04:46 +00:00
Justin Clark-Casey (justincc)
038528dc80 Make PacketPool class stats pull stats instead of push stats so they can be lifted up into LLUDPServer and be distiguished by scene name 2012-11-15 02:02:59 +00:00
Justin Clark-Casey (justincc)
2c36106675 Add IncomingPacketsProcessedCount stat for diagnostics.
Also puts some packet processing counts in a container named after the scene so that stats can be collected from more than one scene.
2012-11-15 01:14:18 +00:00
Diva Canto
35fd4474b2 Added AssemblyInfos in the OpenSim.Server namespace dlls. 2012-11-14 11:20:55 -08:00
Diva Canto
aeeaa3a0a9 Added AssemblyInfos to every dll in the OpenSim.Region namespace. 2012-11-14 11:09:43 -08:00
Diva Canto
27b12cebbb A few more AssemblyInfos in a few more dlls. 2012-11-14 08:10:15 -08:00
Diva Canto
fcaddd901c Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-14 07:50:58 -08:00
Diva Canto
c88e6fb445 Possibly fixes mantis #6429 (Flotsam cache having a null ref to the asset service) 2012-11-14 07:50:19 -08:00
Justin Clark-Casey (justincc)
94da908813 More consistently dispose of SqliteCommand in OpenSim.Data.SQLite where possible.
Not doing SQLiteInventoryStore since this is no longer used and should disappear in the future.
2012-11-14 04:45:59 +00:00
Justin Clark-Casey (justincc)
2ccb53b42d If no ISimulationDataStore or IEstateDataStore implementations could be loaded then halt with informative message rather than a later NRE.
Halt already occurs if the relevant config sections are not present.
So it also makes sense to halt if the implementations themselves cannot be loaded.
2012-11-14 04:17:39 +00:00
Diva Canto
790b595aa0 Added a few more AssemblyInfos. (Plus added the one in OptionalModules, which had been forgotten.) 2012-11-13 19:50:19 -08:00
Diva Canto
f3e90cbffc Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-13 19:27:02 -08:00
Diva Canto
e4cb7af98a Updated all existing AssemblyVersions's to 0.7.5.*. Many DLLs still don't have an AssemblyInfo file. 2012-11-13 19:26:43 -08:00
Justin Clark-Casey (justincc)
7861090a17 Replace old Prebuild.exe accidentally added back in f977291 with one built without <copy> nant target generation and on mono 2.4.3 2012-11-14 02:44:10 +00:00
Justin Clark-Casey (justincc)
f977291a44 Replace previously updated Prebuild.exe with one built directly with mono 2.4.3 2012-11-14 02:40:37 +00:00
Justin Clark-Casey (justincc)
564fe35d4d Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-14 02:30:12 +00:00
Justin Clark-Casey (justincc)
90c6d2e50c Stop Prebuild from generating <copy> statements which unnecessarily copy files into bin/Debug or bin/Release
nant_0.91~alpha2+dfsg-3_all.deb in Ubuntu 12.04 and earlier actually ignored these due to a bug
However, nant 0.92~rc1+dfsg-2 in Ubuntu 12.10 fixes this bug (possibly https://github.com/nant/nant/pull/39).
Which makes nant time-consumingly copy these files when the aren't actually used.
Tested removal of <copy> on both nant 0.91 and nant 0.92
Will be submitting this patch to prebuild project for comment though I suspect there's nobody there to pay attention.
2012-11-14 02:25:07 +00:00
Diva Canto
1f9d39c15d Deleted OptionalModules.addin.xml. Added AssemblyInfo.cs for that dll. 2012-11-13 09:54:52 -08:00
Diva Canto
18c5d33f0a All optional modules' directives moved out of addin.xml 2012-11-13 09:48:56 -08:00
Diva Canto
89a1388857 Deleted .addin.xml. Added AssemblyInfo.cs 2012-11-13 09:04:32 -08:00
Diva Canto
922425a205 Last 27 modules' directives (service connectors out). 2012-11-13 08:49:52 -08:00
Diva Canto
457395d9c1 Another 11 modules' directions moved out of .addin.xml 2012-11-13 08:36:44 -08:00
Diva Canto
608444c9f7 Another 21 modules' directives moved out of .addin.xml 2012-11-13 08:27:51 -08:00
Diva Canto
d73aa8c1a6 Moved the WindModule and its own plugins out of .addin.xml 2012-11-12 21:27:23 -08:00
Diva Canto
99ccd4ea44 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-12 21:15:35 -08:00
Diva Canto
31177d9259 Another 10 modules' directives moved from .addin.xml 2012-11-12 21:14:58 -08:00
Justin Clark-Casey (justincc)
2fd36653b9 minor: Add some explanative method doc to SceneHelpers.SetupSceneModules() 2012-11-13 04:34:03 +00:00
Justin Clark-Casey (justincc)
f605a62427 Disable code to get server-side to move given items to a destination folder on TaskInventoryAccepted.
This is because the fixes to inventory versioning (so that they better match viewer expections)
now appear to allow the viewer to execute #RLV moves, as happens on the LL grid.
Doing it again server-side now wrongly creates another child #RLV folder underneath the root one.
As per http://opensimulator.org/mantis/view.php?id=6311
2012-11-13 04:15:21 +00:00
Diva Canto
48577af325 More module cleanup: removed the CoreModules.Framework modules directives out of .addin.xml. 2012-11-12 18:23:20 -08:00
Diva Canto
335ff4359c Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-12 18:08:27 -08:00
Diva Canto
86903f23dd Cleanup on region modules: gave short node id's to all of them. 2012-11-12 18:08:02 -08:00
Melanie
40d5148bbc Update ScriptModuleComms name space to CoreModules 2012-11-13 01:56:32 +00:00
Melanie
4edaa4e41a Completely remove the IRegionModule interface 2012-11-12 22:56:59 +00:00
Melanie
faca755995 Stop closing old style modules 2012-11-12 22:51:24 +00:00
Melanie
8c130bcaf5 Remove the old style module loader and all references to it 2012-11-12 22:50:28 +00:00
Melanie
e41374dd01 Remove IRegionModule support from the test setup helper 2012-11-12 22:25:35 +00:00
Melanie
0d15a6a01f Remove any mention of IRegionModule from region names and comments to aid
grepping for remaining uses
2012-11-12 19:18:20 +00:00
Diva Canto
152d5dc2a7 Fix mantis #6425 2012-11-11 21:13:14 -08:00
Diva Canto
db418bff2b Fix issues with the DynamicTextureModule and corresponding unit tests. 2012-11-11 19:39:21 -08:00
Diva Canto
113a9704f2 One more module converted: WebStatsModule. 2012-11-11 17:02:22 -08:00
Diva Canto
64fad2f80e Two more modules converted: XmlRpcGridRouterModule and XmlRpcRouterModule. 2012-11-11 16:44:59 -08:00
Diva Canto
4e8c8b2cd8 One more module converted: MRMModule. 2012-11-11 16:18:47 -08:00
Diva Canto
abef034d1b One more module converted: IRCStackModule. 2012-11-11 16:10:47 -08:00
Diva Canto
ba2318bd61 One more module converted: PermissionsModule. 2012-11-11 15:59:09 -08:00
Diva Canto
571f6a0300 One more module converted: XMLRPCModule. Removed it from the special loading at start. 2012-11-11 15:29:25 -08:00
Diva Canto
4de8915ddd One more module converted: VectorRenderModule. 2012-11-11 15:04:02 -08:00
Diva Canto
9f45198516 One more module: DynamicTextureModule. Removed it from the special load in the beginning. 2012-11-11 14:54:40 -08:00
Diva Canto
6759ed1013 One more module converted: LoadImageURLModule. Also removed it from its hard-coded instantiation (I think I understood what the problem was, and that I've done it right). 2012-11-11 14:46:22 -08:00
Diva Canto
963b1e861c One more module converted: ScriptsHttpRequests. 2012-11-11 14:22:06 -08:00
Diva Canto
84be90e5f8 One more module converted: EmailModule. 2012-11-11 14:00:58 -08:00
SignpostMarv
f560d581bb document & 80-character width terminal formatting
Signed-off-by: Diva Canto <diva@metaverseink.com>
2012-11-11 13:50:38 -08:00
SignpostMarv
23605cf93d converting NPC module to ISharedRegionModule
Signed-off-by: Diva Canto <diva@metaverseink.com>
2012-11-11 13:50:38 -08:00
Diva Canto
c60e1a1ae6 J2KDecoderModule: move the code out of PostInitialise() 2012-11-11 13:49:07 -08:00
Melanie
3c48b44b68 Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim 2012-11-11 21:16:29 +00:00
Melanie
b9f602cc77 Prevent datasnapshot from crashing the simulator 2012-11-11 21:16:07 +00:00
PixelTomsen
37c9700904 moving windlight-sources to correct namespace-named folder (world); add LightShare as Interface
Signed-off-by: Diva Canto <diva@metaverseink.com>
2012-11-11 11:17:40 -08:00
PixelTomsen
a180fef99e remove entry OpenGridProtocol in OpenSimDefaults.ini - module was deleted
Signed-off-by: Diva Canto <diva@metaverseink.com>
2012-11-11 11:16:52 -08:00
Diva Canto
6cf90e5516 One more module converted: LightShareModule. 2012-11-11 08:38:39 -08:00
Diva Canto
d589a8bc04 Deleted 2 obsolete modules: OGSRadmin and OpenGridProtocol. They were still IRegionModule's and they have been dead for a very long time, so no need to drag them along in this revamping of region modules. 2012-11-11 08:14:58 -08:00
Diva Canto
f85d054bc6 One more module converted: MonitorModule. 2012-11-11 07:46:12 -08:00
Diva Canto
79d51c27bb One more module converted: InventoryArchiverModule. 2012-11-11 07:31:25 -08:00
Diva Canto
09deaa890d One more module converted: GroupsModule. 2012-11-10 17:56:25 -08:00
Diva Canto
2ef0062664 One more module converted: XferModule. 2012-11-10 17:48:04 -08:00
Diva Canto
562c585bc6 One more module converted: GodsModule. 2012-11-10 17:34:42 -08:00
Diva Canto
cdcb67a952 One more module converted: GesturesModule. 2012-11-10 17:21:09 -08:00
SignpostMarv
d5f9f5c9c3 document, 80-character width terminal formatting converting comments to documentation for IDE & doxygen goodness
Signed-off-by: Diva Canto <diva@metaverseink.com>
2012-11-10 17:09:47 -08:00
SignpostMarv
b3dddd7447 document & 80-character width terminal formatting
Signed-off-by: Diva Canto <diva@metaverseink.com>
2012-11-10 17:09:47 -08:00
SignpostMarv
a87c4c7d89 Converting WorldCommModule to INonSharedRegionModule
Signed-off-by: Diva Canto <diva@metaverseink.com>
2012-11-10 17:09:46 -08:00
Diva Canto
fe2fa70c74 One more module converted: Combat/CombatModule. 2012-11-10 16:42:52 -08:00
Diva Canto
74dd38db70 One more module converted: AvatarFactoryModule. 2012-11-10 16:24:15 -08:00
Diva Canto
5fb5758103 Cleaning up some confusion with Addin names introduced in a prior commit. Also the Flotsam cache module was being given a different Addin name, I removed that. 2012-11-10 15:54:11 -08:00
Diva Canto
e10d61ea8c One more module converted: CloudModule. 2012-11-10 11:59:08 -08:00
Diva Canto
b3574d23e4 One more module converted: DataSnapshot. 2012-11-10 11:26:03 -08:00
Diva Canto
3a5e317f65 One more module converted: ObjectAdd. 2012-11-10 10:35:27 -08:00
Diva Canto
26a94610fc Fix Unit tests -- the module contract was not being honored in the set up of scenes. 2012-11-10 10:21:37 -08:00
Diva Canto
4ac857f902 One more module: EventQueueGetModule. Also making it non-optional for this dll. 2012-11-10 08:48:31 -08:00
SignpostMarv
fb7bbe167a formatting DialogModule for 80-character width terminal 2012-11-10 08:12:31 -08:00
SignpostMarv
5cba04e2d6 Converting DialogModule to INonSharedRegionModule 2012-11-10 08:12:31 -08:00
SignpostMarv
d0742cea3e 80 character-width terminal formatting of IDialogModule interface, removing superfluous whitespace & line-endings. 2012-11-10 08:12:30 -08:00
SignpostMarv
ee3d06220e Documenting parameters of methods on the IDialogModule interface 2012-11-10 08:12:30 -08:00
Diva Canto
791c4d5b9f One more module converted: J2KDecoderModule. 2012-11-10 08:10:43 -08:00
Diva Canto
86b22604fa One more more converted: IPBanModule. 2012-11-09 22:21:11 -08:00
Diva Canto
a4fee98352 One more module converted: TreePopulator. 2012-11-09 22:09:08 -08:00
Diva Canto
bbff036944 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-09 21:59:01 -08:00
Diva Canto
492515cf3f One more module converted: Vegetation. 2012-11-09 21:58:39 -08:00
Justin Clark-Casey (justincc)
12c62d30e1 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-10 05:44:50 +00:00
Justin Clark-Casey (justincc)
c94240ba5b Uncomment SceneObjectBasicTests.TestDeleteSceneObjectAsyncToUserInventory() and make it compile again
Not currently in test suite since not yet working.
Also add method doc to Scene.DeRezObjects()
2012-11-10 05:43:57 +00:00
Diva Canto
4f98259617 Minor improvement in the MapSearchModule. Stop blocking the client thread if the search takes too long. 2012-11-09 20:39:55 -08:00
Diva Canto
2540132a54 MapSearchModule also converted to new region module interface (37 to go). 2012-11-09 16:40:55 -08:00
Diva Canto
19aab3e6fe Converted the WindModule to the new region module interface (38 to go). Also added both the WindModule and the SunModule to the Plugin manifest. 2012-11-09 16:28:30 -08:00
Diva Canto
7dfd1468cc Converted the SunModule to the new region module interface. (39 to go...) 2012-11-09 15:38:10 -08:00
PixelTomsen
64c80aec64 llSetLinkCamera implementation
wiki: http://wiki.secondlife.com/wiki/LlSetLinkCamera

mantis: http://opensimulator.org/mantis/view.php?id=6397
2012-11-09 14:31:56 -08:00
SignpostMarv
5bff741544 marking IRegionModule interface as obsolete via System.ObsoleteAttribute, intentionally triggering a bunch of warnings in compiler output in hopes of encouraging other developers to refactor built-in modules when they have free time. 2012-11-09 14:20:24 -08:00
Justin Clark-Casey (justincc)
61b816ebba minor: Adjust method doc on IXInventoryData MoveItem() and MoveFolder() to make it clear we're moving to an existing folder. 2012-11-09 01:18:11 +00:00
Justin Clark-Casey (justincc)
75c880a6f3 Update parent inventory folder version numbers when folders are moved/created/deleted to match version numbers cached by viewers.
This is done in the way that one would expect (e.g. moving a folder increments version number on both source and destination parent folders).
This should hopefully improve viewer reuse of its cached inventory information.
Currently MySQL only but will be implement for SQLite/MSSQL if there are no issues.
2012-11-09 01:13:19 +00:00
Dan Lake
9bc0419679 ODECharacter overrides TargetVelocity. No change to existing behavior 2012-11-08 01:18:25 -08:00
Diva Canto
a407eb287f Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-07 20:05:30 -08:00
Diva Canto
eb273b808e HG: Hopefully this fixes the issues with port 80 once and for all. 2012-11-07 19:59:54 -08:00
Robert Adams
3666518319 BulletSim: add skeleton classes for shape objectification. This will eventually replace all the if's and switches in ShapeCollection with polymorphism. 2012-11-07 15:29:51 -08:00
Robert Adams
67d5dbbb49 BulletSim: add classes for physics motors. Eventually these will replace the manual code for vehicles and add PID functionality to avatar movement. 2012-11-07 15:28:06 -08:00
Robert Adams
6df9d40d99 BulletSim: update the DLLs and SOs 2012-11-06 18:17:00 -08:00
Robert Adams
ee00c5c885 BulletSim: many changes to tune vehicles for BulletSim.
The problem left is that the vehicle sitting on something needs
to press down for gravity and what its sitting on pushes up
so the vehicle does not penetrate. The effect is Bullet calculates
a lot of random angular motion for the vehicle. Various schemes
of damping and zeroing has not resolved the problem.
2012-11-06 18:16:47 -08:00
Robert Adams
76cc303031 BulletSim: Add ZeroAngularMotion method to physical objects. Add inTaint flag to ZeroMotion method. Update the references to those functions. 2012-11-06 18:16:35 -08:00
Robert Adams
e2130817e5 BulletSim: remove limit on taints that can happen before a step. Remove some debugging code (detail log flushing). 2012-11-06 18:16:23 -08:00
Robert Adams
f70a3099b5 BulletSim: recalculate the compound shape bounding box when built. 2012-11-06 18:16:12 -08:00
Robert Adams
702fd1e094 BulletSim: only compute linkset mass when membership changes rather than everytime someone asks for it. 2012-11-06 18:16:00 -08:00
Robert Adams
36d77fe27c BulletSim: Add separate linear and angular damping function calls. Add function for recalculating compound shape bounding box. 2012-11-06 18:15:48 -08:00
teravus
b2dfa6f022 To keep things consistent allowing an UnregisterModuleInterface... Force the GodModule to request the dialog module interface on a kickuser call and not to use the 'in memory cached one'. Thanks Ar3s for locating the offending inconsistency. 2012-11-06 19:03:41 -05:00
Justin Clark-Casey (justincc)
bf469819a6 Update folder version numbers when moving items and making the Delete(string[], string[]) call (not just string, string).
This is to stop viewer inventory cache version numbers becoming out of sync with grid stored numbers when viewer performs these actions.
If there are no problems with these changes, they will be propogated to SQLite (and MSSQL if that's simple enough).
May also need to do the same on folder store/create/delete and maybe propogate version increments up the folder hierarchy, but that requires investigation.
2012-11-06 23:44:52 +00:00
Justin Clark-Casey (justincc)
a8424490ae Increment version number of a folder when an object it contains is deleted.
Not doing this was allowing the viewer inventory cache to become out of sync if an item was directly deleted.
2012-11-06 23:40:33 +00:00
Melanie
236cc1f268 Change user message on TeskInventoryAccepted to let the viewer format it
properly
2012-11-05 00:05:01 +00:00
Diva Canto
89322aaf94 Prevent IMs being sent to prims when avies decline inventory offers from them. 2012-11-04 15:17:47 -08:00
Melanie
f391d028de Add a method to query all registered script constants to allow non-XEngine
script engines to use them.
2012-11-04 22:39:15 +00:00
Robert Adams
895d28f14d BulletSim: update the DLLs and SOs 2012-11-03 21:28:23 -07:00
Robert Adams
79f7c466a1 BulletSim: fix compound linkset crash by not freeing shape of child prims.
Remove all compilation warnings (mostly 'protected' in sealed classes.)
Add the dynamicAabbEnable parameter to creation of compound shapes.
2012-11-03 21:16:02 -07:00
Robert Adams
894bb4893b BulletSim: search the mesh and hull lists to find shapes if type is not known. This makes sure the correct accounting is done for the particular shape. 2012-11-03 21:15:54 -07:00
Robert Adams
498ea76e63 BulletSim: Move construction of compound linkset from ShapeCollection
into LinksetCompound where it should be.
Create meshes for native shapes when part of a compound linkset because
    scale is currently per object and not per collision shape.
Don't schedule a LinksetCompound refresh if just changing properties.
2012-11-03 21:15:46 -07:00
Robert Adams
1dc23b2b97 BulletSim: parameterize selection of linkset implementation 2012-11-03 21:15:39 -07:00
Robert Adams
b0eccd5044 BulletSim: debugging of compound shape implementation of linksets.
Add compound shape creation and freeing in shape manager.
Add optional taint-time execution method and update code to use it.
Add API2 linkage for more compound shape methods (get num, get/remove by index, ...)
Modify perferred shape return so linkset children can have differet shapes than root.
Add Position and Orientation calls to linksets so children can be moved around by
    the linkset by its own calculation. Allows for very general linkset implementations.
2012-11-03 21:15:30 -07:00
Robert Adams
f53b4e7a21 BulletSim: Add RawPosition and RawOrientation to BSPhysObject and rename MassRaw to RawMass. Fix BSShapeCollection to use Raw* for creating the body to eliminate exception from referencing the physical body before it has been created. 2012-11-03 21:15:22 -07:00
Robert Adams
39c02dcc8c BulletSim: Remove use of shapeData in ShapeCollection and rely on the available BSPhysObject varaiables. Fix line endings in BSLinksetCompound. 2012-11-03 21:15:14 -07:00
Robert Adams
364a7c3088 BulletSim: rename BSBody and BSShape to PhysBody and PhysShape. Add skeleton of BSLinksetCompound. 2012-11-03 21:15:06 -07:00
Robert Adams
28e2cd3fa2 BulletSim: vehicle tweeking.
Add AddTorque() method to BSPrim. Remove some manual motor actions
in computing angular force (will eventually be replaced with motor class).
Remove some experimental changes.
2012-11-03 21:14:58 -07:00
Robert Adams
52be581f71 BulletSim: remove center-of-mass setting for linksets because it causes the constraint calculation to pull the objects together. 2012-11-03 21:14:49 -07:00
Robert Adams
93fe384cce BulletSim: Use the PostTaints operation to build the linkset once before the next simulation step. This eliminates the management of children vs taintChildren and simplifies the constratin creation code. 2012-11-03 21:14:41 -07:00
Robert Adams
42d65840c8 BulletSim: Add gravity force to vehicle. Some debugging additions. 2012-11-03 21:14:33 -07:00
Robert Adams
dae038a117 BulletSim: fix problem with multiple linksets stepping on each other if they are built at the same time. 2012-11-03 21:14:25 -07:00
Robert Adams
4cfa3be4ef BulletSim: add definitions for linkset collision mask 2012-11-03 21:14:16 -07:00
Robert Adams
bc43c7007d BulletSim: code rearrangement 2012-11-03 21:14:08 -07:00
Robert Adams
8c9e4c1f7b BulletSim: Use Refresh/PostTaints to cause recomputing of constraint variables before the simulation step. Update logging and messages to properly name LinksetConstraints. Use UpdatePhysicalMassProperties to put the whole linkset mass into all the physical linkset members so they have the inertia to move the whole linkset. 2012-11-03 21:14:00 -07:00
Robert Adams
9568f24c26 BulletSim: add post taint taints and post step taints. The post taints operation is most useful and is used by linksets to build and rebuild only once before the simulation step. 2012-11-03 21:13:52 -07:00
Robert Adams
2f25f70316 BulletSim: remove unneeded parameter from Refresh(). 2012-11-03 21:13:44 -07:00
Robert Adams
e20bad12cc BulletSim: centralize mass/inertia computation with UpdatePhysicalMassProperties() function. Didn't add setMassRaw because assignment with side effect is dirty. 2012-11-03 21:13:35 -07:00
Robert Adams
7af28724ac BulletSim: rename constraint classes so they show up together alphabetically. 2012-11-03 21:13:27 -07:00
Robert Adams
92d3c611e5 BulletSim: many small changes for vehicles simulation. 2012-11-03 21:13:19 -07:00
Robert Adams
2b75035aef BulletSim: add ForEachMember(action) call for linkset. 2012-11-03 21:13:11 -07:00
Robert Adams
8fa83cf430 BulletSim: Add activations after vehicle properties change. Problem was the vehicle was going to sleep while waiting for commands. Make AddAngularForce work the same way as AddForce -- accumulates values and pushes them once into Bullet. 2012-11-03 21:13:03 -07:00
Robert Adams
b83449ae9a BulletSim: correct spelling of Bullet call. It's 'swept' not 'sweep'. 2012-11-03 21:12:54 -07:00
Robert Adams
804b332d45 BulletSim: Add banking and other new code to vechile dynamics. Add third party license and contributor in for for Aurora-Sim project for physics code. 2012-11-03 21:12:46 -07:00
Diva Canto
783443705d HG Suitcase Inventory: if RootFolder type doesn't work, look for any folder with parentID=UUID.Zero 2012-11-03 12:03:47 -07:00
Diva Canto
7412795a0b HG: flip all configs to HG2.0. PLEASE CHECK YOUR EXISTING HG CONFIGS AGAINST THESE. 2012-11-02 08:05:56 -07:00
Dan Lake
2e106cd5de Change to earlier commit for TargetVelocity to support distributed physics. 2012-11-02 03:09:04 -07:00
Justin Clark-Casey (justincc)
ce7beb6f20 Add [AssetService] AllowRemoteDeleteAllTypes (default false).
This allows a closed grid to delete asset types other than maptile remotely.
Only operational if AllowRemoteDelete = true also.
Defaults to false - do not enable if anybody other than you can make asset service requests.
2012-11-02 01:41:38 +00:00
Justin Clark-Casey (justincc)
462ad336dc Move check to allow only deletion of maptiles up to AssetServerDeleteHandler from AssetService.
This allows us to use a common check for both AssetService and XAssetService.
It also allows future console commands to delete an asset.
As before, deletion of maptile assets is not allowed remotely unless this is explicitly configured.
2012-11-02 00:02:10 +00:00
Justin Clark-Casey (justincc)
8dfe59d7b8 Comment out checks not to overwrite existing IAR/OAR files for now on "save iar/oar" since this causes problems for some backup systems.
Needs more thought, maybe an explicit --force/--overwrite switch
Comments on http://opensimulator.org/mantis/view.php?id=6389
2012-11-01 03:42:15 +00:00
Justin Clark-Casey (justincc)
a7d9f5598f Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-11-01 03:34:11 +00:00
Justin Clark-Casey (justincc)
ccb17eab71 Replace the 64 bit macosx version of libopenjpeg-dotnet.dylib with a 32-bit version from libopenmetaverse commit 3731ee4
This is because macosx mono is 32-bit and this can't p/invoke 64-bit binaries.
However, the reverse is also true.
If OpenSimulator stops working for you then please complain!  Long term alternative is probably to build a fat binary with both architectures.
2012-11-01 03:31:30 +00:00
Dan Lake
ffe4d738fb Add TargetVelocity to PhysicsActor interface to support distributed physics. No change to existing functions. 2012-10-31 17:13:18 -07:00
Justin Clark-Casey (justincc)
566aaef1f4 Also add the additional ScriptException constructor necessary to get [Serializable] to work. 2012-10-31 00:56:41 +00:00
Justin Clark-Casey (justincc)
b3072cf343 Mark ScriptException as [Serializable] for when it has to cross AppDomains 2012-10-31 00:46:07 +00:00
Justin Clark-Casey (justincc)
4ba48151b2 Handle UUIDGroupName and ObjectGroup viewer UDP requests asynchronously rather than synchronously.
This is to avoid the entire scene loop being held up when the group service is slow to respond.
There's no obvious reason for these queries to be sync rather than async.
2012-10-31 00:39:45 +00:00
Justin Clark-Casey (justincc)
6235d16c31 Make "show object part" command correctly display script status.
Uses new IEntityInventory.TryGetScriptInstanceRunning()
Makes it clearer that TaskInventoryItem.ScriptRunning cannot be used as it is temporary and not updated.
2012-10-31 00:31:18 +00:00
Melanie
3388534ff5 Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim 2012-10-30 23:14:06 +00:00
Melanie
fd9cb3cb68 Store and send the current movement animation state to a new sim on crossing 2012-10-30 23:08:22 +00:00
Melanie
9e05067a4f Add AnimState to CADU 2012-10-30 22:11:02 +00:00
Justin Clark-Casey (justincc)
984faf24df Only create a new list to check if objects have reached targets if there actually are any targets. 2012-10-30 01:48:05 +00:00
Justin Clark-Casey (justincc)
ff6c69000e Log warning if mesh/sculpt asset couldn't be found by ODEPrim.MeshAssetReceived() callback.
Presumably this is now more useful if the false positive from the old method of loading mesh assets have been eliminated.
2012-10-30 01:40:59 +00:00
Justin Clark-Casey (justincc)
9bc4dc6c5f Add method doc to IAssetService.Get(string, object, AssetRetrieved) outlining the situations in which AssetRetrieved may be called back with a null AssetBase.
These situations include asset not found and remote service not responding.
2012-10-30 01:19:32 +00:00
Justin Clark-Casey (justincc)
cccf695327 Add asset != null check to ODEPrim.MeshAssetReceived instead of throwing exception.
In some cases (such as failure to receive response from asset service), it is possible for a null to be returned from IAssetService.Get(string, object, AssetRetrieved).
2012-10-30 01:14:48 +00:00
Justin Clark-Casey (justincc)
37de965233 Make MeshAssetReceived private.
Keep methods private unless they need to be opened up to external callers.  Reduces analysis complexity.
2012-10-30 01:08:00 +00:00
Justin Clark-Casey (justincc)
aeeed29d62 correct ODEPrim.MeshAssetReveived -> MeshAssetReceived 2012-10-30 01:07:14 +00:00
SignpostMarv
a09cba6da3 refactoring to use assembly:classname style of configuration 2012-10-29 23:39:01 +00:00
SignpostMarv
a16ddbee41 Renaming module back to SoundModule as the hypothetical plan was to make another module using the shared region module interface, but this was pointed out by Melanie_T to be mostly pointless. 2012-10-29 23:39:01 +00:00
SignpostMarv
e308841de9 SianaGearz notes stop sound flag is 1 << 5, so using that for ISoundModule.StopSound rather than setting gain to zero 2012-10-29 23:39:01 +00:00
SignpostMarv
e0b5a3cd90 tweaking configuration logic so that the INonSharedRegionModule will load by default 2012-10-29 23:39:01 +00:00
SignpostMarv
2bb0419251 documenting some params on ISoundModule methods 2012-10-29 23:39:01 +00:00
SignpostMarv
dcac2a7f71 refactoring llCollisionSound to use new KeyOrName method 2012-10-29 23:39:01 +00:00
SignpostMarv
a9999a9676 Refactoring llTriggerSoundLimited with a new method on ISoundModule, as the LL Wiki spec for llTriggerSoundLimited states an axis-aligned bounding box, not radial constraint 2012-10-29 23:39:01 +00:00
SignpostMarv
56965dd959 fixing poorly-formatted xml doc string for Util.IsInsideBox 2012-10-29 23:39:00 +00:00
SignpostMarv
ef15711089 refactoring llTriggerSoundLimited to not use the LSL methods, since that will cause unnecessary calls to m_host.AddScriptLPS(1) 2012-10-29 23:39:00 +00:00
SignpostMarv
af9dc483e9 refactoring llGetPos() to take advantage of implicit converter 2012-10-29 23:39:00 +00:00
SignpostMarv
f9923d4423 shifting from two instances of typecasting to one instance of typecasting in llTriggerSoundLimited 2012-10-29 23:39:00 +00:00
SignpostMarv
c796f7861e 80-character width terminal formatting of recent commits to llPlaySound, llPlaySoundSlave, llTriggerSound and llTriggerSoundLimited 2012-10-29 23:39:00 +00:00
SignpostMarv
c5af16aef8 shuffling code around so that the interface for ISoundModule.SendSound() specifies a UUID rather than a string 2012-10-29 23:39:00 +00:00
SignpostMarv
5abcecc735 moving SendSound from SceneObjectPart to ISoundModule 2012-10-29 23:39:00 +00:00
SignpostMarv
af39af1cc4 fixing a bug in SceneObjectPart.SendSound where sounds would always come from the root prim rather than the source prim 2012-10-29 23:39:00 +00:00
SignpostMarv
57940087d1 Factoring out a superfluous local variable & repeated assignment in SceneObjectPart.SendSound as linksets are only meant to have a single owner 2012-10-29 23:38:59 +00:00
SignpostMarv
e75596524a Formatting SoundModuleNonShared.LoopSound, consistent indentation 2012-10-29 23:38:59 +00:00
SignpostMarv
9df510157e deduplicating code into a single LoopSound method 2012-10-29 23:38:59 +00:00
SignpostMarv
22693304fb removing superfluous lines from SceneObjectPart.SendSound 2012-10-29 23:38:59 +00:00
SignpostMarv
3d8f59aac3 refactoring StopSound into a private static method to skip repeating m_scene.TryGetSceneObjectPart 2012-10-29 23:38:59 +00:00
SignpostMarv
e5df8cafb8 Removing a locked iteration over SceneObjectGroup.LoopSoundSlavePrims as the SL Wiki spec does not state that slaves are set to match master values 2012-10-29 23:38:59 +00:00
SignpostMarv
d7ffcace8f adjusting parameter order of PreloadSound to be more logical 2012-10-29 23:38:59 +00:00
SignpostMarv
29a8ae48b5 transposing LoopSoundMaster to Sound Module 2012-10-29 23:38:59 +00:00
SignpostMarv
a68e2fe169 transposing preload sound onto sound module 2012-10-29 23:38:58 +00:00
SignpostMarv
8763a637b5 transposing stop sound into sound module 2012-10-29 23:38:58 +00:00
SignpostMarv
206a694c6b moving comment for llStopSound inside the method block prior to transposition to sound module 2012-10-29 23:38:58 +00:00
SignpostMarv
b9e0f1cd2b documenting ISoundModule methods & fields 2012-10-29 23:38:58 +00:00
SignpostMarv
d4034271eb formatting ISoundModule prior to documentation 2012-10-29 23:38:58 +00:00
SignpostMarv
1c618843b8 formatting changes to SceneObjectPart.SendSound; consistent indentation 2012-10-29 23:38:58 +00:00
SignpostMarv
32db725dd7 SceneObjectPart.SendSound can exit early if a sound module was not found. 2012-10-29 23:38:58 +00:00
SignpostMarv
f4fe8763ad Changing the logic order in the TaskInventory iterator of ScenObjectPart.SendSound, since we can currently have non-unique object inventory names so we should check the asset type first. 2012-10-29 23:38:58 +00:00
SignpostMarv
b42cfe49a2 Replacing double-if block in SceneObjectPart.SendSound with Util.Clip 2012-10-29 23:38:57 +00:00
SignpostMarv
6440892788 TryGetScenePresence in TriggerSound is probably meant to be using the ownerID, not the objectID 2012-10-29 23:38:57 +00:00
SignpostMarv
516ee244b4 swapping GetSceneObjectPart for TryGetSceneObjectPart in PlayAttachedSound to imply why we're doing an early return. 2012-10-29 23:38:57 +00:00
SignpostMarv
1d47bcb6b6 stripping whitespace from ISoundModule, formatting SoundModuleNonShared.cs 2012-10-29 23:38:57 +00:00
SignpostMarv
20be6a4b48 refactoring thisSpGain in PlayAttachedSound as it was previously using two typecasts in the assignment and had the assignment on a separate line to the declaration 2012-10-29 23:38:57 +00:00
SignpostMarv
6bd1f0f209 Factoring out an if-else block in PlayAttachedSound as it was using the previously hard-coded max distance value. 2012-10-29 23:38:57 +00:00
SignpostMarv
375fb66589 making the max distance for sounds to be heard from their origin a configurable option exposed via a public field on ISoundModule (with private setter in the implementation) 2012-10-29 23:38:57 +00:00
SignpostMarv
ed162a10be Converting the ISoundModule implementation from an IRegionModule to an INonSharedRegionModule 2012-10-29 23:38:57 +00:00
SignpostMarv
7560010f34 Immediately setting gain to zero as a workaround for code not stopping sound started by llPlaySound 2012-10-29 23:38:56 +00:00
Justin Clark-Casey (justincc)
09f4e72d6a Fix memory leak where removing an NPC did not remove its circuits.
This was because we were removing by circuitcode where NPCs have no code.
Now removing by agent ID instead.
This commit also fixes the "show circuits" console command to work properly where the circuit has no associated IP address.
2012-10-29 23:22:40 +00:00
Justin Clark-Casey (justincc)
5681e812a5 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-29 23:19:06 +00:00
Justin Clark-Casey (justincc)
c97890ca69 Add "force gc" region console command which manually invokes garbage collection.
For debugging purposes.
2012-10-29 22:53:06 +00:00
Melanie
5a96ef52cb Deep copy the collection of at_target objects so it can't be modified while
it's being iterated
2012-10-28 18:41:47 +00:00
Justin Clark-Casey (justincc)
3531f29a6a minor: Fix verbose IAR save message to make it a bit clearer that item data is being saved at that point, not asset data. 2012-10-27 00:24:25 +01:00
Justin Clark-Casey (justincc)
cc204497e0 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-26 23:10:52 +01:00
Justin Clark-Casey (justincc)
67432fcbf2 Fix "save iar" hanging permanently if the asset request phase times out.
Unlike "save oar", this was happening on the same thread as the original request.
The timeout happens on another so the original thread is never aborted.
On "save oar" this leaves the thread hanging (still bad) but on "save iar" it left the console thread hanging.
Temporary fix is to make "save iar" do asset request on a separate thread, like "save oar".
Longer term fix will be to restructure asset save to use a ManualResetEvent rather than a separate timeout timer.
2012-10-26 23:08:59 +01:00
Melanie
1c5f6e48b8 Separate LSL's notion of the default anim from the actually playing anims. 2012-10-26 21:23:20 +01:00
Melanie
de6f147d3c Revert "Fix for Mantis 0006376: Avatar no longer show Walking animation when any AO hud is"
This reverts commit fa484c3494.
2012-10-26 21:16:27 +01:00
Justin Clark-Casey (justincc)
16809bd0ea minor: Make the error thrown logged when a simulator in grid mode is trying to set estate owner to a user that doesn't exist a little more obvious. 2012-10-26 02:36:58 +01:00
SignpostMarv
80dcc13af2 refactoring IWorldCommListenerInfo.GetRegexBitfield() method to be a field with a private setter 2012-10-26 02:08:00 +01:00
SignpostMarv
e977761071 adding ability for listeners to be filtered by regular expressions and a general-purpose function to see if a given string matches a given regex 2012-10-26 02:08:00 +01:00
SignpostMarv
18b1ee6f37 Formatting and casing correction in WorldCommModule, trailing new line in OSSL to get git diff to not complain 2012-10-26 02:08:00 +01:00
Justin Clark-Casey (justincc)
1b3b7a61ac minor: Add comment as to why we are pulcking plain old ints out of the LSL_List when converting values from LSL for modInvoke() 2012-10-26 01:50:46 +01:00
SignpostMarv
ecdb88679e Removing the apparently superfluous explicit namespace reference so that the if-else-if-else block in ConvertFromLSL can have a consistent appearance 2012-10-26 01:43:54 +01:00
SignpostMarv
01972cc9e8 system ints can end up in LSL lists, which can cause counter-intuitive unknown list element type errors in ConvertFromLSL (via modInvoke) 2012-10-26 01:43:53 +01:00
Justin Clark-Casey (justincc)
2fb89b5aac Comment out InventoryTransferModule.NeedSceneCacheClear() and invocations since the call itself does nothing and the return value is ignored by all callers.
This is a very old method (+4 years) so is probably confusing code cruft.
2012-10-26 01:15:16 +01:00
Oren Hurvitz
85c909c0b5 Fixed saving non-square multi-region OARs 2012-10-26 00:06:44 +01:00
Justin Clark-Casey (justincc)
dc17cee044 minor: if a scene is already shutting down on Scene.Close(), warn and exit instead of attempting to run another shutdown concurrently.
Thanks to Oren Hurvitz for this change.
2012-10-25 23:47:55 +01:00
Oren Hurvitz
b4923da334 Changed "course" to "coarse" in several places 2012-10-25 23:32:37 +01:00
Oren Hurvitz
424f68b64b Changed duplicate Asset ID's to unique ID's in CollisionSoundsAssetSet.xml 2012-10-25 23:30:48 +01:00
Justin Clark-Casey (justincc)
0482758e96 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-25 23:17:07 +01:00
Justin Clark-Casey (justincc)
22e216fd12 In Scene.Close(), dispose of the physics scene after base.Close() since script events can still access Physics scene until the script engine shuts down (triggered off base.Close())
XEngine listeners to EventManager.OnShutdown which is triggered from base.Close().
Possibly it could listen for the earlier OnSceneShuttingDown instead, but the easier solution right now is to relocate disposal of the physics scene.
This bug has existed since c150320 (Thu Jul 26 15:27:18 2012) and was in 0.7.4
2012-10-25 22:55:29 +01:00
nebadon
fa484c3494 Fix for Mantis 0006376: Avatar no longer show Walking animation when any AO hud is
loaded.  Thank you tglion
2012-10-25 11:31:25 -07:00
Justin Clark-Casey (justincc)
c13a99dc5c Fix script error messages not showing up in viewer 3 and associated viewers.
Viewer 3 will discard such a message if the chat message owner does not match the avatar.
We were filling the ownerID with the primID, so this never matched, hence viewer 3 did not see any script error messages.
This commit fills the ownerID in with the prim ownerID so the script owner will receive script error messages.
This does not affect viewer 1 and associated viewers which continue to process script errors as normal.
2012-10-25 03:26:12 +01:00
Justin Clark-Casey (justincc)
8af8319b95 Get osNpcCreate() and osNpcLoadAppearance() to generate a script error if appearance notecard does not exist, rather than returning UUID.Zero or silently failing. 2012-10-25 03:02:00 +01:00
Justin Clark-Casey (justincc)
d9aaf51561 When scripts generate expected exceptions (e.g. due to checked bad parameter) throw ScriptException instead of just a plain old exception.
This is to make it easier to distinguish these exceptions from unexpected OpenSimulator problems internally and in regression tests.
No functional changes.
2012-10-25 02:52:20 +01:00
Justin Clark-Casey (justincc)
ae662b54ea Make osNpcCreate() return UUID.Zero instead of throwing an exception if notecard name is invalid. Make osNpcLoadAppearance() fail silently in same circumstance rather than throwing exception. 2012-10-25 01:07:06 +01:00
Justin Clark-Casey (justincc)
5d4ac5a90f Add TestOsNpcLoadAppearance() 2012-10-25 00:59:27 +01:00
Justin Clark-Casey (justincc)
1743fe5d62 Move npc creation tests involving appearance from OSSL_ApiAppearanceTest to OSSL_ApiNpcTests
This is a more intuitive location.
2012-10-25 00:29:50 +01:00
Justin Clark-Casey (justincc)
81aeecc907 Allow "show object", "show part", "dump object" and "delete object" to accept a local ID as well as a UUID.
This means that the sub-commands are now id rather than uuid, e.g. show object id
2012-10-24 04:10:22 +01:00
Justin Clark-Casey (justincc)
f76dceb90b Get "save oar" and "save iar" to tell you in a more friendly manner if the filename to save already exists, rather than exception throwing.
Also changes ConsoleUtil.CheckFileExists to CheckFileDoesNotExist() since this is more meaningful in the context, even though it does result in double negatives.
2012-10-24 03:08:58 +01:00
Justin Clark-Casey (justincc)
73db057fa1 Add "dump object uuid" console command. This allows any object in the scene to be serialized and dumped to XML for debug purposes. 2012-10-24 02:05:28 +01:00
Justin Clark-Casey (justincc)
326f1507fa Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-24 02:04:26 +01:00
Robert Adams
de47646c3d BulletSim: update binaries with small change that insures that manual position/rotation setting results in an update event. 2012-10-23 17:34:14 -07:00
Justin Clark-Casey (justincc)
938fa96b9f minor: Move co-ordinate related help to object commands to common ConsoleUtil.CoordHelp 2012-10-24 01:33:21 +01:00
Robert Adams
b6fc5bad00 BulletSim: fix problem with avatars sinking into the ground.
Change terrain activation state to DISABLE_SIMULATION for better performance.
2012-10-23 17:30:43 -07:00
Robert Adams
b49f8a377b BulletSim: minor change to insure avatar body recreation when shape changes. 2012-10-23 08:02:26 -07:00
Robert Adams
36bfd3667c BulletSim: remove chatty debug message. 2012-10-22 22:25:06 -07:00
Robert Adams
14eeb8b31b BulletSim: fix bug that caused error (and a crash on 32 bit Linux) when mesh assets weren't already in the cache. Comment cleanups. 2012-10-22 22:24:59 -07:00
Robert Adams
7272a4cae8 BulletSim: fix problem of not rebuilding shape by clearing last rebuild failed flag in BSPrim.ForceBodyShapeRebuild() 2012-10-22 22:24:51 -07:00
Robert Adams
65c131c4a3 BulletSim: remove trailing spaces to make git happy. 2012-10-22 22:24:44 -07:00
Robert Adams
c245178eee BulletSim: encorporate UBit's suggestion to save a copy of mesh raw data. 2012-10-22 22:24:37 -07:00
Robert Adams
a61f20ac74 BulletSim: Create LinkSet abstract class and sparate constraint based linksets into own subclass. Will eventually add manual movement linkset subclass. 2012-10-22 22:24:30 -07:00
Justin Clark-Casey (justincc)
319ebaca06 Make it possible to turn the base UDP object packet pools on and off whilst running via the "debug lludp pool <on|off>" console command. For debug purposes.
This does not currently apply to the higher LLUDP packetpool.
2012-10-23 02:44:15 +01:00
Justin Clark-Casey (justincc)
4578ff74fe Add object count stats for new IncomingPacket and UDPPacketBuffer pools if they are enabled. Add count stats for existing LLUDP pool.
This introduces a pull stat type in addition to the push stat type.
A pull stat takes a method on construction which knows how to update the stat on request.
In this way, special interfaces for pull stat collection are not necessary.
2012-10-23 01:52:10 +01:00
Justin Clark-Casey (justincc)
2206132ab9 minor: Get content type handler logger to log "unset" for the content type instead of blank if no content type was set. 2012-10-23 00:44:47 +01:00
Justin Clark-Casey (justincc)
542d075376 minor: Use LogIncomingToContentTypeHandler() method for incoming HTTP data where this wasn't already used.
This allows log level 5 (log sample or large part of incoming post data) to operate and removes copy/paste.
2012-10-23 00:39:59 +01:00
Melanie
efae7c6fc2 Refactor: Move Dwell reply to a module that can be disabled. The prior,
hardcoded approach disabled the use of non-core dwell tracking modules.
2012-10-21 21:12:34 +01:00
PixelTomsen
20eac8d6d0 SQLite DB: some values of land data will be not saved / loaded
http://opensimulator.org/mantis/view.php?id=6370

Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-10-21 10:41:23 -04:00
BlueWall
07f1d44174 Merge branch 'master' into connector_plugin 2012-10-20 05:25:58 -04:00
PixelTomsen
d7fa4cacb3 Fix: invinite loading for Viewer3 : parcelinfo request of traffic-value (implementation of dwell-value in LandData + eventhandler, return always 0); source-formatting of LandData
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-10-20 05:06:46 -04:00
BlueWall
af9cd7d30c Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-20 04:32:45 -04:00
BlueWall
2aac113ac1 Add CLICK_ACTION_ZOOM
Add support for V2/3 CLICK_ACTION_ZOOM to llSetClickAction
2012-10-20 04:32:04 -04:00
Justin Clark-Casey (justincc)
5bc07a15f5 minor: remove unnecessary bit of method doc from OdePrim.BadMeshAssetCollideBits that monodevelop inserted automatically 2012-10-20 02:52:38 +01:00
Justin Clark-Casey (justincc)
d2b19f00da Fix minor issues from commit 28483150
Fix spelling of collide, change to more self-documenting property BadMeshAssetCollideBits, add method doc, change to private to reduce code analysis complexity
2012-10-20 02:49:16 +01:00
Justin Clark-Casey (justincc)
d55f72f3df minor: Rename assetCache constructor param in UUIDGatherer to assetService which is what it is. 2012-10-20 02:35:39 +01:00
Justin Clark-Casey (justincc)
ac037dfe21 Add method doc for IPresenceService 2012-10-20 02:26:08 +01:00
Justin Clark-Casey (justincc)
1937e5f1ec Relocate temporary debug message for sending group IMs to online members only so that we can add ms it takes to send.
This is chiefly to assess how long it may still take to send messages to such filtered groups.
2012-10-20 02:13:00 +01:00
Justin Clark-Casey (justincc)
da2b23f18d Improve efficiency of friends notification by only make one PresenceService call for all friends rather than one for each friend.
However, large groups could still take a very long time since we still need to message each avatar on different simulators.
2012-10-20 02:02:13 +01:00
Justin Clark-Casey (justincc)
cd3762ca9f Add experimental [Groups] MessageOnlineUsersOnly option for Flotsam XmlRpc groups.
This retrieves and caches information from the PresenceService to only send messages to online users.
This is reported to much improve performance for large groups where most users are offline.
Cache is 20 seconds to balance requests against users not receiving messages until cache updates.
This is an alternative to an approach where login/logout notification is sent directly from simulator to groups service.
However, I'm not convinced that this PresenceService approach is actually better.  Needs more thought.
2012-10-20 01:26:04 +01:00
Justin Clark-Casey (justincc)
6cca713679 Fix build break from commit e469879 2012-10-20 01:08:52 +01:00
Justin Clark-Casey (justincc)
de869028cb Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-20 01:04:08 +01:00
Robert Adams
45df324ab3 Bulletsim: update DLLs and SOs. Brings C++ routine in sync with C# sources and fixes problem where BulletSim would crash on startup on 32 bit Linux. 2012-10-19 15:47:51 -07:00
Justin Clark-Casey (justincc)
e469879725 Add "debug groups verbose <true|false>" region console command
This allows one to turn on super-verbose groups debug logging on and off whilst the region is in operation.
2012-10-19 23:45:55 +01:00
Robert Adams
d94c4646cc BulletSim: add asset fetching so BulletSim works with new physics asset handling.
Refactor some names to make them available for the asset tracking and fetching.
2012-10-19 15:43:31 -07:00
Robert Adams
f422b9b388 BulletSim: reorder avatar collision checking to eliminate double collision_end.
Various tweekings to avatar shape/mass/inertia/etc.
Remove change from avatar radius to diameter. But still the avatar sinks.
Collision_end now happens immediately rather than at the next subscription time.
2012-10-19 10:52:31 -07:00
Robert Adams
e87a179c89 BulletSim: change nonimal physics frame rate to 55 to give same numbers as ODE.
Change character scaling to represent size of capsule (diameter rather than radius)
Modify create capsule call to pass radius and height.
Eliminate errors when calculating shape inertia (should have some type checking).
2012-10-19 10:52:23 -07:00
Robert Adams
fc33afddd3 BulletSim: remove code in ShapeCollection that hinted at shape sharing.
Add new function to ParameterDefn for calling BulletSimAPI to set values.
Tweaking to BSCharacter parameter setting to try and have avatars stand.
2012-10-19 10:52:14 -07:00
Robert Adams
eaccfa6d99 BulletSim: Fix small problems with last patch: BSScene.World properly initialized and setting of C++ parameters commented out. Comments and logging added. 2012-10-19 10:52:06 -07:00
Robert Adams
fd7a097849 BulletSim: Update BSCharacter to use API2 interface.
Add capsule shape to BSShapeCollection().
Remember last updated values so inter frame diffs can be computed.
Parameterize avatarStandingFriction and reduce to 10 from 999.
    The latter high value made avatars very hard to push.
Set CCD parameters for prims and characters of specified.
2012-10-19 10:51:58 -07:00
BlueWall
276600ab71 Merge branch 'master' into connector_plugin 2012-10-19 07:46:00 -04:00
BlueWall
99bb6c9304 Move PluginManager
Move PluginManager out to OpenSimFramework for general use
2012-10-19 07:38:36 -04:00
Justin Clark-Casey (justincc)
f7dcd33008 minor: Increase attachment name field from 36 to 50 chars in "attachments show" report 2012-10-19 03:12:58 +01:00
Justin Clark-Casey (justincc)
6ba42e9e75 Fix a few minor issues in ArchiveReadRequest logging. 2012-10-19 02:54:13 +01:00
Justin Clark-Casey (justincc)
71b73d6dc3 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-19 02:52:12 +01:00
SignpostMarv
af5383e479 altering documentation for llGetLinkName, as the current documentation is rather lengthy for a "summary". 2012-10-19 02:48:59 +01:00
SignpostMarv
645e3171b4 since llGetLinkName has a "simplest case", it should be the first check made. 2012-10-19 02:48:59 +01:00
SignpostMarv
597df51f91 the simplest case for llGetLinkName also applies to the LINK_THIS constant 2012-10-19 02:48:59 +01:00
SignpostMarv
ec044537d5 ensuring that operand order in llGetLinkName is internally consistent 2012-10-19 02:48:59 +01:00
UbitUmarov
32171708c3 normalize quaternion.Slerp outputs
Signed-off-by: Melanie <melanie@t-data.com>
2012-10-19 01:37:46 +01:00
UbitUmarov
28483150e2 [UNTESTED] core Ode: let broken mesh physical prims collide with land as
the defaul basic box so they don't go off world.
2012-10-19 01:19:48 +01:00
Justin Clark-Casey (justincc)
0f70460a32 minor: comment out currently unused logger in DynamicTextureModule 2012-10-19 00:39:18 +01:00
Justin Clark-Casey (justincc)
9417176389 Make "show part" console commands print out information about each item the part contains 2012-10-19 00:37:25 +01:00
Melanie
38e96afa38 Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim 2012-10-19 00:31:30 +01:00
UbitUmarov
b058ba5859 [UNTESTED] core Ode: stop trying to load a broken asset. Make broken
assets behave like phantom by Nebadon request
2012-10-19 00:30:48 +01:00
Justin Clark-Casey (justincc)
845228b35e minor: Convert ad-hoc list building in ObjectCommandsModule to use ConsoleDisplayList 2012-10-18 23:58:29 +01:00
Justin Clark-Casey (justincc)
75f5e66d1c Add local and UUID to information output of "show object" and "show part" region console commands 2012-10-18 23:45:07 +01:00
Justin Clark-Casey (justincc)
1f3c9db2b9 Add --full option to "show object name/uuid/pos" to show info on all parts of an object, not just whole object summary information. 2012-10-18 23:41:18 +01:00
Justin Clark-Casey (justincc)
8aa43e72e5 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-18 23:32:40 +01:00
Justin Clark-Casey (justincc)
a960273e91 Add number of inventory items to information displayed via "show part" console command 2012-10-18 23:02:57 +01:00
Melanie
a2c93133be Remove extraneous calls to the now commented CheckSculptAndLoad 2012-10-18 21:23:57 +01:00
UbitUmarov
afab5f5cd1 extend coment to include all unused SOG CheckSculptAndLoad() 2012-10-18 21:13:25 +01:00
UbitUmarov
7ab83f9eb2 [DANGER UNTESTED] ODE mesh assets. Other plugins will not do meshs/sculpts
now

Signed-off-by: Melanie <melanie@t-data.com>
2012-10-18 21:13:02 +01:00
UbitUmarov
de44e93aa2 missing changed file
Signed-off-by: Melanie <melanie@t-data.com>
2012-10-18 20:58:34 +01:00
UbitUmarov
1e7fb2dc36 i update core ode plugin and make it load is meshs (i hope)
Signed-off-by: Melanie <melanie@t-data.com>
2012-10-18 20:58:12 +01:00
Justin Clark-Casey (justincc)
991151250d If we're avoiding printing a long request warning for a GetTexture CAP call, check we received a request handler first since this is not guaranteed.
Resolves harmless logged exception when content type and generic xml rpc requests take more than 3 seconds.
2012-10-18 00:39:43 +01:00
Justin Clark-Casey (justincc)
0811f3d28d minor: Remove event method doc from LLClientView that I forgot in the last commit (1de80c) 2012-10-18 00:34:10 +01:00
Justin Clark-Casey (justincc)
1de80cdafe minor: move recent OnAgentUpdate/OnPreAgentUpdate event doc up into IClientAPI from LLClientView 2012-10-18 00:04:23 +01:00
Justin Clark-Casey (justincc)
3ec2923022 Reuse the same AgentUpdateArgs object for each AgentUpdate UDP packet (of which there are 10 a second) rather than constructing a new one every time.
We can do this because AgentUpdate packets are handled synchronously.
2012-10-17 23:54:05 +01:00
Justin Clark-Casey (justincc)
faf6b56839 Explicitly return only the incoming AgentUpdate packet as this is the only one we pool atm, rather than attempting to return all incoming packets. 2012-10-17 23:08:14 +01:00
Justin Clark-Casey (justincc)
2ed59ad8ac If RecycleBaseUDPPackets = true, also pool IncomingPackets to reduce memory churn 2012-10-17 21:08:15 +01:00
Justin Clark-Casey (justincc)
f35826eb31 minor: Make BasicCircuitTests.SetUp() call overriden base method instead of ignoring it. 2012-10-16 23:50:45 +01:00
Justin Clark-Casey (justincc)
4e5b2346a5 Add LastMemoryChurn stat using existing data so we can more quickly tell how memory churn changes rather than waiting for the average to move. 2012-10-16 23:44:52 +01:00
Justin Clark-Casey (justincc)
fc861c7904 Add optional pool for the UDPPacketBuffer objects that handle all incoming UDP data.
Even when an avatar is standing still, it's sending in a constant stream of AgentUpdate packets that the client creates new UDPPacketBuffer objects to handle.
This option pools those objects.  This reduces memory churn.
Currently off by default.  Works but the scope can be expanded.
2012-10-16 23:35:05 +01:00
Justin Clark-Casey (justincc)
db4ca57590 Make it possible to separate start and stop lludp packet processing from the console for debug processes.
This is controlled via the "debug lludp start <in|out|all>" and "debug lludp stop <in|out|all>" region console commands.
The command "debug lludp status" will show current status.
2012-10-16 21:55:00 +01:00
Justin Clark-Casey (justincc)
8459b98f68 minor: Comment out log message on every FRIENDS SIM CONNECTOR request for now. 2012-10-16 01:40:25 +01:00
Justin Clark-Casey (justincc)
ab0294f010 Add missing category paremeter to llGiveInventoryList grid IM construction.
This was a regression from 16c9c1df Sat Oct 6 02:34:49 2012 +0100.
Should resolve http://opensimulator.org/mantis/view.php?id=6360
2012-10-16 01:33:35 +01:00
Justin Clark-Casey (justincc)
0eb457442d minor: Add missing newlines and spacing to help for "debug eq" console command 2012-10-16 01:31:51 +01:00
Justin Clark-Casey (justincc)
d469bde849 minor: Add/correct some doc messages associated with entity teleport.
I believe UseCircuitCode is sent on EnableSimulator EQ message, rather than EstablishAgentCommunication
At least with LL 3.3.4, EstablishAgentCommunication appears unnecessary in the teleport context -
viewer still requests it though possibly only after TeleportFinish().  However, we will continue to send it.
2012-10-16 01:20:41 +01:00
Justin Clark-Casey (justincc)
3ac6a423f7 minor: comment out "Registered seed capability" message for "Received SEED caps request" message for now.
I think this is more useful right now since it tells us if the viewer requested a seed caps at all in various scenarios (such as when teleporting to a new region).
2012-10-16 00:54:25 +01:00
Justin Clark-Casey (justincc)
8c2564c05c minor: Comment out the region console caps message for now. 2012-10-16 00:40:28 +01:00
Justin Clark-Casey (justincc)
dc460579fd minor: Fix and elaborate on log information printed when an unrecognized estate method is received from the client. 2012-10-13 01:47:10 +01:00
Justin Clark-Casey (justincc)
946c2e7e7c Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-13 01:05:28 +01:00
Justin Clark-Casey (justincc)
330b976a62 Improve on TBG Renfold's fix to llRequestSimulatorData DATA_SIM_POS by only performing HG regionflags service check if the region secret is not empty.
An empty RegionSecret is never HG, whilst a non-empty one may be HG or being genuinely used as a RegionSecret.
2012-10-13 01:03:09 +01:00
TBG Renfold
f6e166cd0b Now using region flags for llRequestSimulatorData DATA_SIM_POS.
If the region is not classed a hypergrid region, then the region secret is checked to make sure that it is a valid UUID.

Just a temporary fix at this time.
2012-10-13 00:50:34 +01:00
Robert Adams
8c40215834 BulletSim: only use native sphere shape if it is a sphere. 2012-10-12 07:41:31 -07:00
Justin Clark-Casey (justincc)
fba59d905c Get rid of accidental scene start left in ScenePresenceAutopilotTests 2012-10-12 03:20:27 +01:00
Justin Clark-Casey (justincc)
b9c2a1508e Fix problems with regression tests by allowing invoke of Update() with a finite number of frames even if the scene isn't active. 2012-10-12 03:19:12 +01:00
Justin Clark-Casey (justincc)
ab7b7c5d3d Get Watchdog to log thread removal 2012-10-12 02:59:28 +01:00
Justin Clark-Casey (justincc)
b5a3c74a5c Add "active true|false" to "debug scene" console command.
This allows the scene update and maintenance loops to be started and stopped for debug purposes.
2012-10-12 02:52:08 +01:00
Justin Clark-Casey (justincc)
b7e75d467c minor: Use && instead of & when deciding whether to print Improve/ObjectUpdate packet out messages when debug is turned on.
Practical effect is probably none.
2012-10-12 02:10:30 +01:00
Justin Clark-Casey (justincc)
8873a4a8fc minor: Fix bug in categorization of blocks reused stat from packetpool 2012-10-12 01:59:47 +01:00
Justin Clark-Casey (justincc)
1e86c58822 Remove now unnecessary OpenSim.Framework.Console reference from Monitoring.
Properly resolve circular reference which no longer appeared in Mono build as there were no using statements for it.
2012-10-12 01:58:46 +01:00
Justin Clark-Casey (justincc)
21d0cbf703 Add AgentUpdate to PacketPool. This is the most common inbound packet from viewers. 2012-10-12 01:39:37 +01:00
Robert Adams
87a87ebb9a BulletSim: fix problem with some shapes (like cylinders) being implemented as cubes. 2012-10-11 17:37:27 -07:00
Justin Clark-Casey (justincc)
3af2095cbc minor: Comment out "Client requested range for texture ... but" message. This is not useful during normal operation. 2012-10-12 00:27:12 +01:00
Justin Clark-Casey (justincc)
59a17ad676 Fix percentage stats to multiply by 100. Adjust container name for packetpool stats. 2012-10-12 00:26:15 +01:00
Justin Clark-Casey (justincc)
8a402850dd Enable reuse of data blocks for ImprovedTerseObjectUpdate using existing Packetpool code. 2012-10-12 00:21:45 +01:00
Justin Clark-Casey (justincc)
387ce8ef35 Fix build break by moving OpenSim.Framework.Console back below HttpServer in the build order.
Luckily, it turns out Framework.Monitoring doesn't need to reference Console directly.
2012-10-12 00:10:51 +01:00
Justin Clark-Casey (justincc)
2e9ef015f7 Fix packetpool for ImprovedTerseObjectUpdate packets.
These were neither being returned or in many places reused.
Getting packets from a pool rather than deallocating and reallocating reduces memory churn which in turn reduces garbage collection time and frequency.
2012-10-11 23:58:37 +01:00
Justin Clark-Casey (justincc)
f5f5f2e3fb Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-11 23:56:03 +01:00
Justin Clark-Casey (justincc)
1f2472d0fc Extend "show stats" command to "show stats [list|all|<category name>]"
This allows different categories of stats to be shown, with options to list categories or show all stats.
Currently categories are scene and simulator and only a very few stats are currently registered via this mechanism.
This commit also adds percentage stats for packets and blocks reused from the packet pool.
2012-10-11 23:28:53 +01:00
Robert Adams
b63134764f BulletSim: update the DLLs and SOs 2012-10-11 14:01:35 -07:00
Robert Adams
b24190ec98 BulletSim: remove some unused API2 calls because they were removed from Bullet 2.81 2012-10-11 14:01:29 -07:00
Robert Adams
5b82f18d64 BulletSim: normalize physics FPS to 45 (for real this time). 2012-10-11 14:01:25 -07:00
Robert Adams
a86fedd25f BulletSim: normalize physics FPS to 45. 2012-10-11 14:01:22 -07:00
Robert Adams
3a458e2a36 BulletSim: Use full linkset mass when computing vehicle gravity force. Add taint-time specification to new AddForce(). 2012-10-11 14:01:18 -07:00
Robert Adams
919569f6ec BulletSim: Change defaults for constraint CFM and ERP to make large linksets more rigid. Remove mass calculation for terrain (it should stay a static object). 2012-10-11 14:01:14 -07:00
Robert Adams
a791620622 BulletSim: cosmetic changes (comments and renaming). Give mass to terrain to improve interactions. 2012-10-11 14:01:10 -07:00
Robert Adams
68698975f1 BulletSim: Add Force* operations to objects to allow direct push to engine.
Update BSDynamics to use same (don't want to delay updates til next taint-time.
Suppress queuing a taint update for position and orientation calls if value
    does not change.
Move Bullet timing statistics call from C# back to C++ code.
Throttle taints per simulation step and add parameter to set.
By default, don't create hulls for physical objects. Add a
    parameter to turn on and off.
2012-10-11 14:01:07 -07:00
Robert Adams
87825b0abe BulletSim: Fix crash when linking large physical linksets.
Properly remove and restore linkage constraints when upgrading
    a prim's mesh to a hull.
Lots more debug logging.
Definitions and use of Bullet structure dumping.
Centralize detail logging so a Flush() can be added for debugging.
2012-10-11 14:01:03 -07:00
Diva Canto
311a03befa Updated Robust.HG.ini.example. Thanks Austin Tate. 2012-10-11 13:57:29 -07:00
BlueWall
c8393dd0be Add logging to help track sequence of events 2012-10-11 07:38:15 -04:00
Justin Clark-Casey (justincc)
b768c35f6f Assign endVector before control leaves ObjectCommandsModule.TryParseVectorRange() in order to fix mono 2.4.3 compile failure.
This doesn't fail the compile on mono 2.10.8.
2012-10-11 00:05:34 +01:00
Justin Clark-Casey (justincc)
efd9791506 Add "delete object pos <start-coord> to <end-coord>" console command.
This allows one to delete objects within a certain volume.
See help on console for more details.
2012-10-10 23:30:48 +01:00
BlueWall
83073ebd03 Implement plugin unloading
Plugin may be enabled and disabled on the fly.
2012-10-10 09:35:08 -04:00
BlueWall
08f6c8065e Add System.Core to references 2012-10-10 09:32:31 -04:00
Justin Clark-Casey (justincc)
756ac4f321 Correct osSetContentType() threat check to query osSetContentType rather than osSetResponseType 2012-10-10 01:39:47 +01:00
Justin Clark-Casey (justincc)
11d8119a21 Remove osDropAttachment threat level check wrongly placed in OSSL_Api.ShoutErrorOnLackingOwnerPerms. 2012-10-10 01:37:57 +01:00
Justin Clark-Casey (justincc)
528085adef minor: Add method doc to EventManager.OnNewClient, OnClientLogin, ClientClosed, OnRemovePresence that any long-running operations should be launched on a thread separate to the event thread. 2012-10-10 00:48:20 +01:00
Justin Clark-Casey (justincc)
e76b01a201 Lock on AgentCircuitData during Scene.AddClient() and RemoveClient() to prevent an inactive connection being left behind if the user closes the viewer whilst the connection is being established.
This should remove the need to run the console command "kick user --force" when these connections are left around.
2012-10-10 00:26:43 +01:00
Justin Clark-Casey (justincc)
a3c0e3ed26 minor: elaborate method doc on Scene.NewUserConnection() 2012-10-09 22:19:47 +01:00
Justin Clark-Casey (justincc)
785671e242 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-09 17:29:44 +01:00
Justin Clark-Casey (justincc)
40bf789ad7 Disambiguate use of RegionFlags in NullRegionData
This was not necessary with the nant build but is for xbuild, since xbuild includes associated project DLLs
And so picks up OpenMetaverse.dll even though it isn't referenced by OpenSim.Data.Null.dll
2012-10-09 17:20:01 +01:00
teravus
7e90ea3551 av_av_collisions_off = false OdePhysics Settings in OpenSimDefaults.ini - No Avatar Avatar Collisions. This causes avatar to be able to walk through each other as if they're ghosts but still interact with the environment. 2012-10-09 10:41:16 -04:00
teravus
764270a0d8 Add config option to plant avatar where they are reducing avatar avatar 'pushability' av_planted see OpenSimDefaults.ini. Use when you have unruly visitors that rudely push each other around. Still allows a small amount of movement based on the avatar movement PID controller settings. You can increase the spring tension in the PID controller and really prevent any movement if you would like. 2012-10-09 09:26:11 -04:00
BlueWall
a960efeaba Fix registry issue
Rebuild registry if loading from a local dll to give access to the addin data for it on the first pass.
2012-10-09 08:00:02 -04:00
BlueWall
92849c5cc3 missed some conflict markup 2012-10-09 07:59:44 -04:00
BlueWall
252af020b0 Merge branch 'master' into connector_plugin
Conflicts:
	OpenSim/Server/ServerMain.cs
2012-10-09 06:44:14 -04:00
Justin Clark-Casey (justincc)
ef3cc2e507 minor: Add documentation to IGridService.GetRegionFlags() 2012-10-09 01:40:55 +01:00
Justin Clark-Casey (justincc)
a0d047413b Once again, forgot to add a file. 2012-10-09 01:37:02 +01:00
Justin Clark-Casey (justincc)
73c9abf5f2 Move OpenSim.Data.RegionFlags -> OpenSim.Framework.RegionFlags to make it easier for other code to use (e.g. LSL_Api) without having to reference OpenSim.Data just for this. 2012-10-09 01:35:27 +01:00
Dan Lake
d342adaa87 Merge branch 'master' of git://opensimulator.org/git/opensim 2012-10-08 15:25:26 -07:00
Melanie
f65218f826 Fix build break 2012-10-08 19:02:21 +01:00
Melanie
839aa57b42 Update the example 2012-10-08 18:01:56 +01:00
Melanie
ff92330523 Add a ServiceList section to Robust .ini to get rid of the long string 2012-10-08 17:57:22 +01:00
Melanie
90a39379f0 Allow other whitespace characters than spaces in Robust connection string 2012-10-08 17:36:40 +01:00
BlueWall
440726250c Added parts to manage repositories and plugin management
This is working - more testing to follow, then soem documentation
2012-10-06 11:48:21 -04:00
Justin Clark-Casey (justincc)
13c4fd7271 refactor: Rename UserSessioNID -> UserSession in WebStatsModule since this is what it actually represents 2012-10-06 04:06:27 +01:00
Justin Clark-Casey (justincc)
9de991301c Make UserSessionID a class rather than a struct, so that later updates to value suceed (rather than having to pull the data out and reinsert back into the Dictionary).
Fixes http://opensimulator.org/mantis/view.php?id=6338
2012-10-06 04:04:50 +01:00
Justin Clark-Casey (justincc)
16c9c1dff7 On receiving TaskInventoryAccepted with a destination folder in the binary bucket slot for RLV, notify the viewer about inventory folder updates.
The viewer would not see the folder move without this, either on accept or decline.
This commit also updates the TaskInventoryOffered message to better conform with the data LL uses
Changes are, agentID is prim owner rather than prim id, agent name is now simply object name rather than name with owner detail,
message is just folder name in single quotes, message is not timestamped.
However, folder is not renamed "still #RLV/~<name>".  Long term solution is probably not to do these operations server-side.
Notes will be added to http://opensimulator.org/mantis/view.php?id=6311
2012-10-06 02:34:49 +01:00
Dan Lake
91ca3117cb Add bool to TriggerSceneObjectPartUpdated where full = true indicates a full update. There should be a better way to indicate which properties have changed that is non LLUDP-centric 2012-10-05 17:32:07 -07:00
Dan Lake
6f220a8679 Trigger ObjectAddedToScene when loading objects from oarfile. Already triggers when creating, duplicating or loading from database, incoming attachments, etc 2012-10-05 17:30:27 -07:00
Justin Clark-Casey (justincc)
1fb53e7103 Fix bug in implementation of "show part pos" that would not filter probably.
Also refactors more of ObjectCommandsModule to remove duplicate code
2012-10-05 04:31:43 +01:00
Justin Clark-Casey (justincc)
22f6fa49e3 Add "show part pos" console command to match "show object pos" 2012-10-05 04:22:08 +01:00
Justin Clark-Casey (justincc)
16feed456a refactor: eliminate some now duplicate code in ObjectCommandsModule 2012-10-05 04:16:38 +01:00
Justin Clark-Casey (justincc)
68859af3f8 Add Vector3.Zero return on TryParseConsoleVector() which fails on mono 2.4.3 but not mono 2.10.9 2012-10-05 03:58:52 +01:00
Justin Clark-Casey (justincc)
633e1ed62c Add missing ConsoleUtil from last commit 2012-10-05 03:57:35 +01:00
Justin Clark-Casey (justincc)
130768b16a Add "show object pos <start-coord> to <end-coord>" command to simulator console.
This allows you to display details of all objects in a given bounding box.
Values parts of the co-ord can be left out as appropriate (e.g. to get all objects between the ground and z=30.
See "help show object pos" for more details.
2012-10-05 03:52:42 +01:00
Justin Clark-Casey (justincc)
8cd1dc8d60 minor: Add missing license information from the top of IUserManagement 2012-10-05 02:07:28 +01:00
Justin Clark-Casey (justincc)
d87813a194 Finally fix build break by allowing UserManagementModule (which constructs a packet directly) to reference OpenSim.Region.ClientStack.LindenUDP.
This time I actually properly did a clean build
2012-10-05 02:02:19 +01:00
Justin Clark-Casey (justincc)
046113c137 Print number of objects found with "show object name" and "show part name" simulator console commands 2012-10-05 01:46:28 +01:00
Justin Clark-Casey (justincc)
03136df1a7 Forgot to actually remove the packetpool set code from scene. 2012-10-05 01:45:49 +01:00
Justin Clark-Casey (justincc)
7c7cdf3431 Read PacketPool config in LLUDPServer with other config params rather than in Scene.
This is to resolve previous build break.
This unnecessarily but harmlessly reads and sets the parameter multiple times - scene was doing the same thing.
2012-10-05 01:43:29 +01:00
Justin Clark-Casey (justincc)
4832ed6960 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-05 01:32:02 +01:00
Justin Clark-Casey (justincc)
f0178a6a41 refactor: Move OpenSim.Framework.PacketPool to OpenSim.Region.Clientstack.Linden.UDP
This is to allow it to use OpenSim.Framework.Monitoring in the future.
This is also a better location since the packet pool is linden udp specific
2012-10-05 01:12:56 +01:00
Diva Canto
276fdbc1b3 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-10-04 15:33:17 -07:00
Diva Canto
5b90f5bb17 One more abstraction for GridUser so that it can be overridden in a sub-class. 2012-10-04 15:32:49 -07:00
Mic Bowman
d98af79f77 Make the asset retrieval concurrency a config switch. The current value
of 30 is still hanging badly on some mono versions. The switch defaults to
30 to preserve current behavior.
2012-10-04 08:41:06 -07:00
Melanie
b977f962fa Allow default animation to be stopped to be replaced with another one.
Fixes Mantis #6327
2012-10-04 15:42:52 +01:00
BlueWall
741471e02c Remove duplicate files
We are keeping these in bin/lib(32/64) now
2012-10-03 21:49:58 -04:00
Justin Clark-Casey (justincc)
aa52c8b20f Output monitor data in response to console command on MainConsole.Instance rather than m_log
This should really be happening for all console commands (though many don't).
However, things might get difficult if both a console command and other code invoke the same paths.
2012-10-04 02:17:57 +01:00
Justin Clark-Casey (justincc)
3d36a6d55c Add generic PercentageStat.
Not yet used.
2012-10-04 01:27:40 +01:00
BlueWall
227cfbdc67 Update Mono.Addins
Update Mono.Addins to latest - 3177b22e958c82bf2c5655ac3d4ef7ad25cc2588
2012-10-03 19:48:54 -04:00
Justin Clark-Casey (justincc)
e717398f6c Add experimental "slow frames" stat, available in "show stats" and via the monitoring module.
This increments a SlowFrames counter if a frame takes over 120% of maximum time.
This commit also introduces a generic OpenSim.Framework.Monitoring.Stat which is available to any code that wants to register a statistic.
This is more granualar than asking objects to create their own reports.
At some point this will supersede earlier IMonitor and IAlert facilities in MonitoringModule which are only available to scene code.
2012-10-04 00:32:42 +01:00
BlueWall
e6c9b09006 Merge branch 'master' of /home/opensim/var/repo/opensim into modular_config 2012-10-03 19:14:40 -04:00
teravus
a2ab3b88de Soliciting for comments on smoothness of physics objects for this build.
This introduces expected contact point hints to the ODE Collider to better determine when to throttle updates as excessive.   This /should/ smooth physics objects out again, however, I cannot know every configuration of OpenSimulator, so I'm requesting that testers please examine this change on their build.
Thanks!
2012-10-03 18:30:44 -04:00
BlueWall
3e71c71cbf Add modular configuration for Robust connectors
We can provide modular ini for connectors...

    look for our configuration in the following places...
      1) in the default ini/-inifile
      2) in the named file (ConfigName) located in the configured directory
            (see Robust[.HG].ini [Start] section for ConfigDirectory)
      3) in the repository named in the connector (ConfigURL)
           In this case, the file will be written into the configured
           directory with the specified

  See example connector/service @ https://github.com/BlueWall/SlipStream
  for testing.
2012-10-03 16:07:11 -04:00
Mic Bowman
b9baab5521 Fix the use of the wrong index when locating the assets associated
with wearables. The fact that this hasn't caused problems earlier
suggests either that no one is using multiple layers of wearables or
that this code is useless because the assets are coming in with the
wearables request.
2012-10-03 10:45:57 -07:00
Melanie
653a98e891 Fix a viewer crash issue
Conflicts:

	OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
2012-10-03 17:39:13 +01:00
teravus
e56ef2720e I propose that 0.5m/step change for linear velocity is too big of a change to control the reporting of a new angular velocity. I think that this could be here for one of two reasons, 1. vehicles and llMoveToTarget with axis lock, or 2. To attempt to make things look more stable in the physics scene then they really are, however, this also really affects the angular velocity reporting negatively causing things to spin wildly and jump back into place repeatedly. To compromise, if the prim is a vehicle or is being used as a motor target, the original functionality is still applied. If that's not the case, angular velocity is reported with a linear velocity of 0.02m/step. To be clear on the effect of the physical world... When you push things, there's still a lag time where you walk into the object but once the object is in motion, it begins to move as you would expect so results in slightly more realistic motion. 2012-10-03 02:30:23 -04:00
teravus
df3d1d1301 Minor Modification, switch /2 to 0.5f in ODEPrim.Velocity 2012-10-02 23:14:35 -04:00
Robert Adams
a5b8359b8e BulletSim: fix crash on load that showed up on 32bit Linux. 2012-10-02 17:04:33 -07:00
Melanie
ca5c0814f4 Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim 2012-10-02 23:02:53 +01:00
Melanie
f1886c449c Attempt to fix Mantis #6311. Honor a destination folder if one is given 2012-10-02 23:02:01 +01:00
SignpostMarv
a1679517d3 correcting typo 2012-10-02 22:14:47 +01:00
SignpostMarv
f555febdb7 taking into account the recent introduction of implicit operators 2012-10-02 22:14:46 +01:00
SignpostMarv
ce7694c108 added perms checking, duplicated functionality to methods that do not require perms and have higher threat level 2012-10-02 22:14:46 +01:00
SignpostMarv
c677c04f10 fixing copypasta 2012-10-02 22:14:46 +01:00
SignpostMarv
35b7c80e0b implementing osDropAttachment & osDropAttachmentAt 2012-10-02 22:14:46 +01:00
SignpostMarv
e81e19a3b4 string format arguments in wrong order 2012-10-02 22:11:40 +01:00
Robert Adams
210f227fe6 BulletSim: Make parameter value defaults match what should be the default and what is in OpenSimDefaults.ini. Comment and debug printout changes. 2012-10-02 11:14:15 -07:00
Robert Adams
ce47d0c454 BulletSim: Add ForcePosition and ForceOrientation to BSPhysObject and to its children of BSPrim and BSCharacter. 2012-10-02 11:14:09 -07:00
Robert Adams
d8a786870b BulletSim: Fix problem where box shapes were not being rebuilt if the shape type changed. 2012-10-02 11:14:03 -07:00
Robert Adams
ce97ebdc88 BulletSim: Fix linkset problem where delayed manipulations of child objects was using the child shape address at call time rather than the one created at taint time. 2012-10-02 11:13:57 -07:00
Robert Adams
b6b505163c BulletSim: call ForcePosition and ForceOrientation in BSDynamics so there is no lag between what the vehicle code sees and what the physics engine is using. 2012-10-02 11:13:51 -07:00
Robert Adams
1e5869dcf6 Add Flush() method to LogWriter. Also correct line endings to Linux form. 2012-10-02 11:13:45 -07:00
Robert Adams
f2c78281ce BulletSim: fix the FloatOnWater code so avatars can normally go underwater. 2012-10-02 11:13:39 -07:00
Robert Adams
33617e09a1 BulletSim: impliment FloatOnWater OS function. 2012-10-02 11:13:32 -07:00
Robert Adams
c1740a2903 Correct my name in CONTRIBUTORS.txt 2012-10-02 11:13:26 -07:00
Robert Adams
5221f2421e BulletSim: remove warnings for unused variables. 2012-10-02 11:13:20 -07:00
Melanie
54ec8b197b Add money event routing to the script engine. 2012-10-02 01:25:55 +01:00
Melanie
14b659e550 Send money() events to the clicked prim. Reverting a change I made over a year ago. 2012-10-02 01:17:46 +01:00
Melanie
402128bb53 Prevent the ExtraSettings code from crashing SQLite driven sims. 2012-10-02 00:51:38 +01:00
Diva Canto
0b9bf236dd On more virtual method 2012-10-01 15:55:24 -07:00
Melanie
503ce70f74 Allow setting connection limits, part 2 2012-09-30 16:31:23 +01:00
Melanie
060d6fe8f4 Allow setting max connections for an endpoint 2012-09-30 16:30:16 +01:00
Melanie
7cc89cdadc Add using clause I missed 2012-09-30 15:57:49 +01:00
Melanie
f8a4b61954 Allow up to 12 simultaneous connections to a given endpoint rather than 2 2012-09-30 15:49:51 +01:00
Diva Canto
91a5c602e3 Revert "Added request.Proxy=null everywhere, as discussed in http://stackoverflow.com/questions/2519655/httpwebrequest-is-extremely-slow."
But the patch is here, in case anyone wants to try it.

This reverts commit 531edd51d8.
2012-09-30 07:48:03 -07:00
Diva Canto
531edd51d8 Added request.Proxy=null everywhere, as discussed in http://stackoverflow.com/questions/2519655/httpwebrequest-is-extremely-slow.
Thanks R.Gunther (rigun@rigutech.nl) https://lists.berlios.de/pipermail/opensim-users/2012-September/010986.html
2012-09-30 07:22:55 -07:00
Diva Canto
14a4b146bf Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-30 06:52:19 -07:00
Diva Canto
5b69872655 Made a method of GridUserService virtual so it can be overridden. 2012-09-30 06:51:49 -07:00
Justin Clark-Casey (justincc)
4e9509dafa Get rid of some unnecessary casts in RemoteAdminPlugin.
This was stopping http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass from working with some methods (e.g. create_user).
However, this casting has been around for at least 2 years so I'm puzzled that it worked in the first place, though it probably is extremely old sample code.
2012-09-29 02:57:28 +01:00
Justin Clark-Casey (justincc)
f457952755 Fix bug where debug http level 6 could not be specified. Also converts newlines at this level to '\n' to enable them to be logged. 2012-09-29 02:38:21 +01:00
Justin Clark-Casey (justincc)
818379ba14 Fire EventManager.TriggerOnAttach (and hence LSL attach event) when an object is attached from the scene.
Enables previously disabled regression test.
Based on SingpostMarv's patch in http://opensimulator.org/mantis/view.php?id=6302 but I prefer a simpler approach that does not expose a resume scripts option right now.
2012-09-29 01:14:23 +01:00
Justin Clark-Casey (justincc)
fae869c4ca Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-29 00:09:12 +01:00
Justin Clark-Casey (justincc)
d588467d5b Extend attachment regression test to check for appropriate attach event firing.
This reveals that the event is not being fired when an object is attached from ground, which is incorrect.
This check is temporairly disabled.
2012-09-29 00:07:11 +01:00
nebadon
e3d6d36c72 testing for xml-rpc errors in git repo. 2012-09-28 13:00:08 -07:00
Robert Adams
7f96bb601a BulletSim: update SOs and DLLs 2012-09-28 12:51:47 -07:00
Robert Adams
76e9cc41bd BulletSim: remember to release the physical body and shape when a prim is destroyed. This fixes many problems with physical linksets. 2012-09-28 12:34:50 -07:00
Robert Adams
6f89975526 BulletSim: add separate runtime and taint-time linkset children lists to keep the creation of constraints separate from runtime. 2012-09-27 22:02:13 -07:00
Robert Adams
74dea4cfd5 BulletSim: rename some constraint variables to be consistant with other name use.
Added callbacks for shape and body changes in GetBodyAndShape() so the linkset
    constraints can be picked up and restored. A better design might be to have
    a "prim shape changed" event. Think about that.
Added constraint types to general constraint class.
2012-09-27 22:02:08 -07:00
Robert Adams
7b65985047 BulletSim: remove the trailing spaces from lines to make git happier 2012-09-27 22:02:03 -07:00
Robert Adams
5781d4d52d BulletSim: remove the unused body management code from BSPrim. There is no going back now. 2012-09-27 22:01:57 -07:00
Robert Adams
f82b903dee BulletSim: Fix linkset crash. Caused by the different body and shape
pointers at runtime and at taint-time. Now passes the body into the
    taint.
Vehicles zero inertia when active to eliminate Bullet's contribution
    to vehicle motion.
2012-09-27 22:01:52 -07:00
Robert Adams
4589bc84a3 BulletSim: Terrain sets proper collision flags on creation.
Static objects are set to ISLAND_SLEEPING rather than DISABLE_SIMULATION.
    Might reconsider this and, alternatively, have dynamic objects force activation.
Clean up use of DetailLog().
2012-09-27 22:01:47 -07:00
Robert Adams
735d89e369 BulletSim: btGhostObjects working to make 'volume detect' work.
Rearrangement and cleanup of shape collection code. Much more readable.
Enabling and use of collision filters and masks.
Addition of ID to body creation BulletSimAPI calls so always set in
    shape for collision reporting.
Change default of ShouldSplitSimulationIslands and ShouldRandomizeSolverOrder
    from 'false' to 'true'. When 'false', this suppresses NO_CONTACT_RESPONSE
    which makes volume detect fail.
2012-09-27 22:01:42 -07:00
Robert Adams
d016051fa0 BulletSim: renamed members of BulletShape, BulletSim and BulletBody
so the members case is consistant. Caused modifications everywhere.
New logic in BSShapeCollection to track use and sharing of shapes.
    I just reslized, though, that shapes cannot be shared because the
    shape's UserPointer is the localID of the prim and is required
    for tracking collisions. More changes coming.
Added DuplicateCollisionShape2() to API and changed BuildNativeShape2
    to take a ShapeData structure so don't have to pass so many parameters.
    This matches the latest version of BulletSim.dll.
Additions and removal of DetailLog() statements for debugging.
2012-09-27 22:01:37 -07:00
Robert Adams
42802669dd BulletSim: fix regression that caused cylindar shapes to have a box collision shape 2012-09-27 22:01:31 -07:00
Robert Adams
22290ef35a BulletSim: complete code for managed code shape and body tracking. Not debugged.
Eliminate some null exceptions created adding the above code.
Add and remove some detailed logging statements.
2012-09-27 22:01:26 -07:00
Robert Adams
a27e4ce6cb BulletSim: add class and infrastructure for shape and object
tracking in the C# code. Needed for the changing body type
    (to and from GhostObjects) for volumeDetect.
2012-09-27 22:01:21 -07:00
Robert Adams
91efccabdc BulletSim: Convert BSCharacter to use common BSPhysObject code and variables.
Fix avatar height calculation to properly account for the capsule ends.
Rearrange some locking in TerrainManager to eliminate possible race conditions.
Move DetailLog() definition into common BSPhysObject class.
Some variable renaming to make usage clearer (refactor.rename makes this so easy).
2012-09-27 22:01:16 -07:00
Robert Adams
ee7cda261c BulletSim: move a bunch of common logic out of BSPrim and BSCharacter
and into the parent class BSPhysObject.
Rework collision logic to enable extra collision after done colliding.
Rename 'Scene' to 'PhysicsScene' to differentiate it from the simulator 'Scene'.
2012-09-27 22:01:11 -07:00
Justin Clark-Casey (justincc)
d26fbf727a Comment out unused RestPlugins text in OpenSimDefaults.ini 2012-09-28 02:19:15 +01:00
Justin Clark-Casey (justincc)
b5af17c8e3 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-28 01:54:39 +01:00
Justin Clark-Casey (justincc)
3db10fdbef Lock GDI+ portion og VectorRenderModule.GetDrawStringSize() to prevent concurrent thread use provoking mono crashes.
Same rationale as commit 13690582.
2012-09-28 01:50:21 +01:00
Diva Canto
6511c3b5c6 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-27 16:43:38 -07:00
Diva Canto
7a50705188 Removed the bits about the TOSModule. That module doesn't go into core. WARNING: migration on GridUser withdrawn too, but left the migration number there. 2012-09-27 16:43:18 -07:00
nebadon
0e5d3d051b another osgitbot test from github.. mistakes were made! 2012-09-27 06:51:14 -07:00
nebadon
f5fac2c916 another test to see if gitbot is alive yet 2012-09-27 06:37:43 -07:00
nebadon
581e76942f just testing to see if pcampbot is alive yet 2012-09-26 17:49:48 -07:00
Justin Clark-Casey (justincc)
2bf42f30af Add MaxPrimsUndo config setting to [Startup] section of OpenSim.ini.
This controls how many undo steps the simulator will store for each prim.
Default is now 20 rather than 5 as it briefly was.
The default number could be increased through this is a memory tradeoff which will scale with the number of prims in the sim and level of activity.
2012-09-27 00:12:34 +01:00
Justin Clark-Casey (justincc)
b9934fc4db Don't store undo states if a scene object is manipulated when it is not in a scene.
Adds regression test for this.
2012-09-26 23:31:10 +01:00
Justin Clark-Casey (justincc)
31c636f1e4 refactor: Change control structures in SOP.StoreUndoState() to reduce nesting. 2012-09-26 23:25:50 +01:00
Justin Clark-Casey (justincc)
36e3123069 Make it possible to rescale SOGs when they are not in a scene. 2012-09-26 23:17:21 +01:00
Justin Clark-Casey (justincc)
327320d1a7 Enforce existing 5 action hardcoded undo limit.
This was present in the code but not enforced, which led to a memory leak over time as part properties were changed, whether by viewer, script or another source.
This commit enforces that limit, which will soon become configurable.
Regression test for undo limit added
Should help with http://opensimulator.org/mantis/view.php?id=6279
2012-09-26 22:49:44 +01:00
Justin Clark-Casey (justincc)
21f30a1b5f Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-26 22:49:05 +01:00
Justin Clark-Casey (justincc)
90dd5844d6 Add basic undo/redo regression tests. 2012-09-26 21:28:43 +01:00
Diva Canto
3c77b8f463 Use GridUser properly for foreign users. 2012-09-26 12:40:41 -07:00
Diva Canto
80133f9ebe Show the user's home url too on the console command. 2012-09-26 11:27:31 -07:00
Diva Canto
2f61763923 Not really a change, just added a reminder to fix something here. 2012-09-26 11:26:51 -07:00
Diva Canto
7d2cd0d935 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-25 20:04:10 -07:00
Diva Canto
ae58cf4224 TOS module. WARNING: migration in GridUser table. 2012-09-25 20:03:49 -07:00
Diva Canto
495a3e7daf Oops, that should be inside the curly bracket. 2012-09-25 19:54:42 -07:00
Justin Clark-Casey (justincc)
92afa6aa44 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-25 23:32:52 +01:00
Justin Clark-Casey (justincc)
ddd9384b39 Fix very recently introduced race condition where a CreateNewItem outracing an UploadAsset request could throw an exception because m_asset did not yet exist.
This was accidentally introduced in 4fc0cfb
This commit also consistently removes the AssetXferUploader when the transaction completes, no matter if it completed on asset upload or item operation.
The amount of data being retained was small, since this was clothing/bodypart metadata in the asset rather than textures themselves.
2012-09-25 23:30:25 +01:00
BlueWall
4dc27aa91f Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-25 18:14:06 -04:00
Justin Clark-Casey (justincc)
b96a53962b Comment out old m_storeLocal from AssetXferUploader.
This was only used if none of new item, update item or update task item had been set.
But since all transactions go through these paths this old code is redundant.
2012-09-25 23:13:45 +01:00
BlueWall
3c2fb77133 Format OpenSim.ini.example
Make lines fint in 80x24 terminal for easier reading
2012-09-25 18:13:32 -04:00
Justin Clark-Casey (justincc)
eb5bec96e4 Insert transaction ID into AssetXferUploader constructor rather than at UploadAsset() to prevent item creation failure when NewInventoryItem thread reachs the object first.
This was preventing the previous race condition fix in 4fc0cfb from actually working.
This commit also removes some of the pointless transaction id checks - these conditions are already being enforced in AgentAssetsTransactions.
2012-09-25 22:54:20 +01:00
Justin Clark-Casey (justincc)
2f795e4fa6 Move UDP update task item code to AssetXferUploader to match existing create user item and update user item mechanisms
This is done for consistency and to allow removal or some access methods that increase code complexity.
However, this path has not been used for a long time, not even by LL 1.23 - viewers use caps http upload for this instead
2012-09-25 22:08:11 +01:00
Justin Clark-Casey (justincc)
4fc0cfba3c Fix occasional race condition failure when creating new clothing/body parts in the viewer or updating existing assets.
On creating these items, the viewer sends a UDP AssetUploadRequest followed by a CreateInventoryItem.
It was possible for the CreateInventoryItem/UpdateInventoryItem to occasionally outrace the AssetUploadRequest and fail to find an initialized Xfer object, at which point the item create would fail.
So instead we always set up a Xfer object on either the asset or inventory item update request.
This does not introduce a new race because code already exists to delay the item operation until the asset is uploaded if necessary (but this only worked if the xfer object already existed)
2012-09-25 21:35:39 +01:00
Diva Canto
77355295da Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-25 10:46:42 -07:00
Diva Canto
4ec2fc4cc2 Deleted extraneous debug message 2012-09-25 10:46:21 -07:00
SignpostMarv
020103c51e Documenting object-related events 2012-09-24 22:59:02 +01:00
Justin Clark-Casey (justincc)
ac02cadbdb Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-24 22:52:33 +01:00
SignpostMarv
1cfd63d0b4 Documenting LSL script-related events 2012-09-24 22:44:37 +01:00
Diva Canto
1c42337381 HG Rez object: warn the user if the item or asset cannot be found. 2012-09-22 14:41:19 -07:00
Diva Canto
87d810217e Guard against inventory get failures. 2012-09-22 14:01:51 -07:00
Diva Canto
772aedc731 Make BaseHttpServer throws say something useful. 2012-09-22 14:01:07 -07:00
Diva Canto
fb6d6e5cca HG 2.0: User Agent Service now can also control where the local users can go. Domain-name and user-level based. \o/ 2012-09-22 11:11:48 -07:00
Diva Canto
48f4b32d7f More HG 2.0: access control at the Gatekeeper. \o/ 2012-09-21 21:03:14 -07:00
Diva Canto
ebd99c9e3e Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-21 17:59:42 -07:00
Diva Canto
21a6ef5bb6 This fixes HG attachments' missing assets (textures, etc).
Also, further improvements on HGUuidGatherer: if the assets are already in this grid don't fetch them again.
2012-09-21 17:58:44 -07:00
Michelle Argus
a6f7328216 Remove deprecated parameters for region_id.
Remove deprecated parameters for region_id as anounced in january 2012.
2012-09-22 01:30:38 +01:00
Justin Clark-Casey (justincc)
b36ef60aca Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-22 01:05:33 +01:00
SignpostMarv
8d7b1f8aa0 Documenting non-LSL script-related events 2012-09-22 00:57:29 +01:00
Diva Canto
b0da4b8d13 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-21 16:45:35 -07:00
Diva Canto
cfa022700d Moved the small HGUuidGatherer class to the file where its parent class is. No need to keep 2 separate files. 2012-09-21 16:45:16 -07:00
Justin Clark-Casey (justincc)
9ab5c5040d Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-22 00:26:32 +01:00
Justin Clark-Casey (justincc)
5df3944607 Fix llListFindList() returning no match when there is a match with a script constant component in the source list.
Adds regression test for this case.
Based on http://opensimulator.org/mantis/view.php?id=6156
Thanks SignpostMarv.
2012-09-22 00:23:25 +01:00
Diva Canto
fb2ace6fff Removed redundant asset fetches on HGAssetMapper. The UuidGatherer already downloads the assets, so we don't need to do it again... 2012-09-21 15:55:58 -07:00
Diva Canto
f931c0a868 Minor: may avoid crashes of sims that still don't have this configuration section. 2012-09-21 15:04:41 -07:00
Diva Canto
f4cc19968c Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-21 07:45:26 -07:00
Diva Canto
b542622b3a HG 2.0: added asset import/export policies at the sim too. 2012-09-21 07:44:18 -07:00
Diva Canto
5f97b3e1d9 Minor: change the return value of unsuccessful posts to string.Empty. 2012-09-21 06:41:32 -07:00
Diva Canto
e379566e6e Improvement over last commit: refactor the asset permissions code, so that it can be used by both the HG Asset Service and the simulator. Also renamed the config vars to something more intuitive 2012-09-20 19:50:57 -07:00
Justin Clark-Casey (justincc)
80f486c778 minor: Make slow outgoing request log messages consistent with other log messages 2012-09-21 01:59:28 +01:00
Justin Clark-Casey (justincc)
632a42e2b1 Rename UuidGather.m_assetCache to m_assetService. If HGUuidGatherer hasn't been instantiated with an assetServerURL then call down to overriden UuidGatherer.GetAsset() instead of calling m_assetService.GetAsset() itself - these two codepaths are now identical. 2012-09-21 01:57:13 +01:00
Justin Clark-Casey (justincc)
bceef401fa Simplify UuidGatherer by performing asset fetch synchronously rather than using the async call but waiting for completion anyway! 2012-09-21 01:36:23 +01:00
Justin Clark-Casey (justincc)
1b0abf8f0c Comment out the long unused afaik HTTP agent handlers.
As far as I know, this was only used by the IBM Rest modules, much of which has been commented out for a very long time now.  Other similar code uses HTTP or stream handlers instead.
So commenting this out to reduce code complexity and the need to make this facility consistent with the others where it may not be used anyway.
If this facility is actually being used then please notify me or uncomment it if you are core.
2012-09-21 00:29:13 +01:00
Justin Clark-Casey (justincc)
e29d563557 Add request number counting to incoming HTTP requests in the same way that this was already being done for outgoing HTTP requests.
This allows us to associate debug logging messages with the right request.
It also allows us to put a request number on 'long request' logging even if other debug logging is not enabled, which gives us some idea of whether every request is suffering this problem or only some.
This is a separate internal number not associated with any incoming number in the opensim-request-id header, this will be clarified when logging of this incoming request number is re-enabled.
This commit also adds port number to HTTP IN logging to allow us to distinguish between different request numbers on different ports.
2012-09-21 00:09:17 +01:00
Diva Canto
33aa6d172f Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-20 15:51:27 -07:00
Diva Canto
3089b6d824 More HG2.0: Added permission policies in HGAsset Service based on asset types. The policies are given in the config. This is only half of the story. The other half, pertaining to exports/imports made by the sim, will be done next. 2012-09-20 15:49:22 -07:00
Justin Clark-Casey (justincc)
a5b3989e5d Insert a new log level 4 for HTTP IN and HTTP OUT that will log how long the request took.
This is only printed if debug http level >= 4 and the request didn't take more than the time considered 'long', in which case the existing log message is printed.
This displaces the previous log levels 4 and 5 which are now 5 and 6 respectively.
2012-09-20 23:18:19 +01:00
Justin Clark-Casey (justincc)
387a1bb283 Add ability to turn on/off logging of outgoing HTTP requests flowing through WebUtil.
This is for debugging purposes.
This is controlled via the "debug http" command which can already log incoming requests.
This now gains a mandatory parameter of in, out or all to control what is logged.
Log messages are also shortened and labelled and HTTP IN or HTTP OUT to be consistent with existing UDP PACKET IN and PACKET OUT messages.
2012-09-20 23:17:44 +01:00
Justin Clark-Casey (justincc)
b481a78234 Don't fail to create an IRC nick if nick randomization is disabled in the IRC module.
Patch from http://opensimulator.org/mantis/view.php?id=6293
Thanks Starflower.
2012-09-20 02:01:01 +01:00
SignpostMarv
d667f9d260 Documentation of teleport-related events 2012-09-20 01:56:18 +01:00
SignpostMarv
696b3f66c4 minor tweaks to existing comments for IDE goodness 2012-09-20 01:50:40 +01:00
SignpostMarv
49e2872f9e Documentation of agent-related events 2012-09-20 01:50:40 +01:00
SignpostMarv
61f4523e01 Documentation of object-related events 2012-09-20 01:48:50 +01:00
SignpostMarv
a74167bb06 Documentation of OnPluginConsole 2012-09-20 01:47:03 +01:00
Justin Clark-Casey (justincc)
f2a9d26118 Make ResendAppearanceUpdates = true by default in [Appearance] in OpenSimDefaults.ini.
This resends appearance uuids to avatars in the scene once a minute.
I have seen this help in the past resolve grey appearance problems where viewers have for unknown reasons sometimes ignored the packet.
The overhead is very small since only the UUIDs are sent - the viewer then requests the texture only if it does not have it cached.
This setting will not help with cloudy avatars which are usually due to the viewer not uploading baked texture data or uploading something that isn't valid JPEG2000
2012-09-20 01:40:05 +01:00
Justin Clark-Casey (justincc)
e50b6b5334 Update libopenjpeg libraries used by libopenmetaverse back up to 1.5, this time using lkalif's linux libraries built against a much earlier libc (2.7) 2012-09-20 01:26:35 +01:00
Justin Clark-Casey (justincc)
967d42d393 Correctly override and call base OpenSimTestCase.SetUp() method in GridConnectorsTests and ArchiverTests.
Remove unrelated compile warning from AttachmentsModuleTests.
2012-09-19 01:06:42 +01:00
Justin Clark-Casey (justincc)
e50155ebca Downgrade libopenjpeg back to 1.3 from 1.5.
This is because libopenjpeg 1.5 appears to require a minimum of glibc 2.14, whereas at least one fairly recent distro (openSUSE 11.4 from 2011-03-10) only has glibc
Further investigation pending.
2012-09-19 00:35:06 +01:00
Justin Clark-Casey (justincc)
f99278c956 Add openmetaverse_data from libopenmetaverse to allow testing of texture baking via bot rather than just throwing out errors 2012-09-18 23:57:00 +01:00
justincc
95809cabd9 Update libopenmetaverse components to commit f5cecaa
Among other things this allows pCampbot to work under Windows since libopenmateverse now ships the same log4net.dll (publicly signed) as OpenSimulator
This also updates the libopenmetaverse embedded libopenjpeg from 1.3 to 1.5.
DLL naming and mapping for non-Windows libopenjpeg changes to remove version number to make future udpates easier and bring it into line with names of other shipped DLLs.
libopenjpeg updates have been made for OSX, Windows (32 and 64 bit) and Linux (32 and 64 bit).  Please report any issues.
2012-09-18 23:45:06 +01:00
BlueWall
9d973ec3b3 Cleanup from prev. commit
Make correct defaults to Phys/nonPhys prims to fix errors in prev. commit
2012-09-18 10:12:32 -04:00
BlueWall
d29fc53052 Fix some inconsistencies in configurartion: NonPhys prims
Fix inconsistencies between configuration parameter names and their description names. Changing the configuration parameters for non physical prim size min-max from Nonphys* to NonPhys*.

  Please update your OpenSim.ini and Regions.ini to reflect these changes.
2012-09-18 09:53:45 -04:00
Mic Bowman
91312daeb2 Moving ScriptModuleComms into the CoreModules tree. 2012-09-17 09:04:54 -07:00
SignpostMarv
0e5f5538bc Documentation of IScriptModuleComms.RegisterConstant and IScriptModuleComms.LookupModConstant
Signed-off-by: Melanie <melanie@t-data.com>
2012-09-17 14:15:52 +01:00
SignpostMarv
f9721573d9 Implementing ability to register script constants and invocations on a region module automatically 2012-09-17 14:15:47 +01:00
SignpostMarv
c7948a669a preventing a null reference exception from being thrown
Signed-off-by: Melanie <melanie@t-data.com>
2012-09-17 13:29:15 +01:00
SignpostMarv
5e626ce55d script invocations cannot have void return type 2012-09-17 13:29:01 +01:00
Diva Canto
380962d359 HG2.0: Generalized the allowed HG appearances to be more than 1. 2012-09-16 16:45:57 -07:00
Diva Canto
daa4745fb7 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-15 19:35:33 -07:00
Diva Canto
de69a24574 More on HG2.0: added the possibility of controlling the appearance that avies use to visit other grids. Not as good as I wanted, but good enough. Unfortunately we can't switch the appearance from under the avie without getting into a lot of weirdnesses because appearance is viewer-controlled. So instead, when this control is on, I'm disallowing HG-TP unless the user is wearing an allowed HG appearance -- the user gets a warning and needs to switch appearance. WARNING: I'm still not committing the config vars because this is still not ready for ppl to test. 2012-09-15 19:33:51 -07:00
Robert Adams
b602b476ad BulletSim: update DLLs and SOs and remove some debugging code. 2012-09-15 15:36:13 -07:00
Robert Adams
c77be802d2 BulletSim: some debugging prints in BSPrim for tracking changes in linkset children. 2012-09-15 15:32:16 -07:00
Robert Adams
1826b2b18e BulletSim: add the debugging routine DumpRigidBody2() to API2. 2012-09-15 15:32:11 -07:00
Robert Adams
f35bd6eb7d BulletSim: another attempt at computing physics FPS correctly. 2012-09-15 15:32:05 -07:00
Robert Adams
dcb94b8a24 BulletSim: remove timeStep parameter from calls for vehicle parameter setting. There is no reason these should be using the simulation time interval for parameter calculation. 2012-09-15 15:31:59 -07:00
Robert Adams
6632eb7c05 BulletSim: Remove calculation and passing of unused collied object type.
Fix collision code to properly sense mega-region children regions as terrain.
When setting an object physical, reset all the physical properties (friction, ...).
2012-09-15 15:31:54 -07:00
Robert Adams
f0a098924e BulletSim: set all linkset objects center of mass to the whole linkset's center of mass 2012-09-15 15:31:49 -07:00
Robert Adams
7c347f4c5c BulletSim: Add calls to linkset class when object going static or dynamic.
Reset center of mass on an object when going dynamic.
2012-09-15 15:31:44 -07:00
Robert Adams
d86cbe6379 BulletSim: remove unused NeedsMeshing() code from BSScene. 2012-09-15 15:31:39 -07:00
Robert Adams
c0fec70b1a BulletSim: Add 'IsNativeShape2' call 2012-09-15 15:31:34 -07:00
Robert Adams
2c5ff93990 BulletSim: Way too many changes in one commit.
Many changes to BSDynamic for readability and commentary.
Linkset hacking for vehicles: don't over mass the root prim.
Add parameter for link constraint solver iterations.
Correct uses of timestep in timescale calculations for vehicles.
Reorganize code/logic for making objects static and dynamic for readability
    and use of API2.
Changed most calls in BSPrim to use API2 calls (the new way).
Avatars do not generate default Bullet collision events but do call up
    to the simulator for every avatar. Reduces overhead.
Objects added to collision list only if they are processing collisions.
    Reduces overhead especially for large numbers of avatars.
Generalize call for water height to GetWaterHeightAtXYZ().
Catch and correct exception getting terrain height when out of bounds.
Correct race condition in Terrain Manager where creation wasn't at taint-time.
Add API calls for constructing compound shapes.
Move NeedsMeshing() logic into object class.
Reorganize logic for object meshing to reduce rebuilding of meshs/hulls.
2012-09-15 15:31:29 -07:00
Justin Clark-Casey (justincc)
1ec84ac8b1 Add basic asset connector tests to check behaviour for normal, local and temporary assets.
Make AssetServiceConnector return more useful data on failure, such as what DLL it was trying to load
Allow LocalAssetServiceConnector.GetData() to work without a cache present, as works for the other lasc Get* methods.
2012-09-15 02:12:26 +01:00
Justin Clark-Casey (justincc)
d5c8c6bc12 For FlotsamAssetCache, always update access times of cached scene assets before looking for files to expire.
This is to resolve a problem where an asset marked as local but not temporary but still used in the scene would be removed.
The timed expiry scan no longer tries to refetch assets from the scene that are not currently in the cache - this is not helpful since it just drags a lot of data into the cache that may never be referenced.
This removes the DeepScanBeforePurge option since setting this to false will introduce the above problem.  This previously had a default of true.
2012-09-15 01:08:15 +01:00
Oren Hurvitz
5dd2569bf7 Added unit tests for multi-region OARs 2012-09-14 20:32:25 +01:00
Justin Clark-Casey (justincc)
d7e6fe488d Rename ArchiveWriteRequestPreparatio nto ArchiveWriteRequest since after the multi-OAR patch there is now only one class that handles this operation.
Adapation of 0004-Renamed-ArchiveWriteRequestPreparation-to-ArchiveWri.patch in http://opensimulator.org/mantis/view.php?id=6105
since that did not directly apply
2012-09-14 20:25:44 +01:00
Oren Hurvitz
ce468215d5 Support multi-region OAR files
Merged ArchiveWriteRequestPreparation.cs and ArchiveWriteRequestExecution.cs. This simplifies the code, and it's faster to write each scene to the archive as it's found rather than all at once at the end.
2012-09-14 20:25:03 +01:00
Justin Clark-Casey (justincc)
6f7825e310 Don't store the unnecessary VERSIONMIN. VERSIONMAX, METHOD or UserID (present as column PrincipalID) parameters in the Avatars table.
These are used to invoke avatar service calls but are not in themselves persistable avatar data.
2012-09-14 00:07:39 +01:00
Diva Canto
dd0a89a0e6 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-13 10:00:52 -07:00
Diva Canto
190f9c258b Restarting to work on HGSuitcaseInventoryService: added the ability for the outside world to retrieve appearance items. Not ACLed yet. 2012-09-13 10:00:29 -07:00
SignpostMarv
46d8405229 Documentation of parcel-related events
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-09-13 09:59:25 -04:00
SignpostMarv
9598c1af9e correcting a typo that causes c# express to complain about xml comment containing invalid xml
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-09-13 09:59:25 -04:00
Justin Clark-Casey (justincc)
82487549f7 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-12 23:47:09 +01:00
Justin Clark-Casey (justincc)
cdc3781f42 Fix usage statement on "debug http" console command since max level is now 5 rather than 3 2012-09-12 23:02:25 +01:00
Justin Clark-Casey (justincc)
7df7b86ec5 Fix bug in logging sample input at debug http level 4.
Also converts newlines to "\n" text.
2012-09-12 23:01:07 +01:00
BlueWall
81fda6f947 Revert "Fix prebuild.xml format for reference"
This reverts commit 96f889b20e.
2012-09-11 23:43:37 -04:00
BlueWall
e9322b0bf7 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-11 22:58:21 -04:00
BlueWall
96f889b20e Fix prebuild.xml format for reference
Mono.Data.SQL entry was bad
2012-09-11 22:56:29 -04:00
Justin Clark-Casey (justincc)
224efe7b76 minor: Comment out friends notification log spam for now. 2012-09-12 01:58:01 +01:00
Justin Clark-Casey (justincc)
ebb394bbda Fix indentation and issues where tabs were used instead of spaces in commit 783ee949 2012-09-12 01:45:34 +01:00
SignpostMarv
c17965eec4 mathematically & hypothetically speaking we want to avoid negative values being written 2012-09-12 01:26:22 +01:00
Justin Clark-Casey (justincc)
4ead48f09f Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-12 01:24:17 +01:00
SignpostMarv
41f3f2400e Documentation of economy-related EventManager events 2012-09-12 01:23:47 +01:00
Mic Bowman
f06394f195 Allow an incoming identifier to be specified for a JsonStore. 2012-09-11 16:42:07 -07:00
Justin Clark-Casey (justincc)
d53a53d4c5 Make "show http-handlers" command available for ROBUST instances as well as the simulator executable. 2012-09-12 00:10:48 +01:00
Justin Clark-Casey (justincc)
757d9163fa Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-12 00:07:56 +01:00
Justin Clark-Casey (justincc)
25111e703f Add levels 4 and 5 to "debug http" console command that will log a sample of incoming request data and the entire incoming data respectively.
See "help debug http" for more details.
2012-09-11 21:48:51 +01:00
SignpostMarv
ad1b9bbba6 documentation (OnSceneObjectPartCopy) 2012-09-11 20:12:45 +01:00
SignpostMarv
97b8739c1d documentation (OnRemovePresence) 2012-09-11 20:12:45 +01:00
SignpostMarv
0760121eb9 documentation (OnNewPresence) 2012-09-11 20:12:44 +01:00
SignpostMarv
0a22e78f59 documentation (OnClientConnect) 2012-09-11 20:12:44 +01:00
SignpostMarv
5e51f16ceb documentation (OnBackup) 2012-09-11 20:12:44 +01:00
SignpostMarv
fd8a7e64b9 documentation (OnTerrainTick) 2012-09-11 20:12:44 +01:00
SignpostMarv
ed5f574356 documentation (OnTerrainTainted) 2012-09-11 20:12:44 +01:00
SignpostMarv
44349f742e documentation (OnClientMovement) 2012-09-11 20:12:43 +01:00
SignpostMarv
e3993eefa5 Documenting some of the events on OpenSim.Region.Framework.Scenes.EventManager (OnFrame) 2012-09-11 20:12:43 +01:00
SignpostMarv
8db5d79f4b passing in the function name to MOD_Api.ConvertFromLSL for more user-friendly error messages 2012-09-10 13:15:32 +01:00
BlueWall
bf56b30024 Adjust namespce of FlotsamCache
Place FloatsamCache in the same namespace as our other core asset caches
2012-09-09 14:35:48 -04:00
BlueWall
8321ecb7a2 Revert "Move addin information to CoreModulePlugin.addin.xml"
This reverts commit 2ec34580ce.

  Moving the attributes for mono addins back to the source file - this also fixes http://opensimulator.org/mantis/view.php?id=6278.
2012-09-09 13:50:44 -04:00
SignpostMarv
783ee949ea implementing per-region configuration of limits on the number of prims one can have in a linkset
Applied with changes - patch was based on a repo different from core

Signed-off-by: Melanie <melanie@t-data.com>
2012-09-09 12:59:25 +01:00
SignpostMarv
e041f09750 refactoring to allow Scene.GetLandData to accept Vector3 as an argument. Note that the prior work on LSL_Vector implicit operators means one does not need to explicitly cast a LSL_Vector to Vector3 2012-09-08 00:44:27 +01:00
Justin Clark-Casey (justincc)
fa3edcf55c Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-08 00:17:57 +01:00
SignpostMarv
874bde366a 4096 is used in various places as the maximum height of a region, refactoring to be a constant 2012-09-08 00:14:39 +01:00
Robert Adams
d8df2d6bed BulletSim: update the DLLs and SOs 2012-09-07 16:05:34 -07:00
Robert Adams
126eae7100 BulletSim: Add Bullet body and shape to BSPhysObject and rename
'Body' to 'BSBody' for disambiguation when reading code.
Complete the API2 interface so nearly all methods on bullet
    classes are available to the managed code. The efficient
    single call simulation step is kept in place while all
    other creation/destruction/parameterization can be done
    in the managed code.
2012-09-07 16:05:28 -07:00
Robert Adams
3c097cb7a9 BulletSim: Add some comments (gasp) and log messages. 2012-09-07 16:05:22 -07:00
Robert Adams
189f51233e BulletSim: PhysicsActorType() now returns the correct value rather than 'unknown'. 2012-09-07 16:05:16 -07:00
Robert Adams
76dc29dc37 BulletSim: Modify collision flag calls to return the current flags.
Track current collision flags in BSPrim.
Add BulletSimAPI calls for saving and restoring rigidBodies using
    construction information structure.
2012-09-07 16:05:11 -07:00
SignpostMarv
df3914c7cd renaming to markdown file 2012-09-08 00:02:27 +01:00
SignpostMarv
740eac192b multi-paragraph list item 2012-09-08 00:02:27 +01:00
SignpostMarv
783ecd01f4 headers 2012-09-08 00:02:26 +01:00
SignpostMarv
a0e3e23aa9 removing redundant header; this is the building.txt file for opensim 2012-09-08 00:02:26 +01:00
SignpostMarv
1acee36822 code blocks 2012-09-08 00:02:26 +01:00
SignpostMarv
ac90322f1b markdown-formatted link 2012-09-08 00:02:26 +01:00
SignpostMarv
2ca93cb144 renaming to markdown file 2012-09-08 00:02:26 +01:00
SignpostMarv
4e2805496c header syntax 2012-09-08 00:02:26 +01:00
SignpostMarv
46af3a3d92 casing 2012-09-08 00:02:26 +01:00
BlueWall
717b11856e Move addin attributes to RegionCombinerModule.addin.xml
Will help in automation of setting version info for addin dependencies.
2012-09-07 13:21:06 -04:00
BlueWall
0199abd625 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-07 11:43:22 -04:00
BlueWall
550f6c4ad2 Revert "Move addin information to RegionCombinerModule.addin.xml"
This reverts commit ab446bc692782b75fd27105fc3370a16b4fc17d8.
  Need to look into this
2012-09-07 11:41:47 -04:00
Diva Canto
2b506cffb1 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-07 08:10:03 -07:00
Diva Canto
33469a0d2b Moved the new vars in Robust.HG.ini to the proper section. 2012-09-07 08:09:44 -07:00
BlueWall
1f18ce516f Move addin information to RegionCombinerModule.addin.xml
Move addin information from attributes to RegionCombinerModule.addin.xml to aid in automation of addin dependency tracking.
2012-09-07 11:07:19 -04:00
BlueWall
2ec34580ce Move addin information to CoreModulePlugin.addin.xml
Move the addin information from attributes in the source file to the CoreModulePlugin.xml, which is the standard. This will help us automate addin version dependency information when we make new OpenSim releases.
2012-09-07 10:18:00 -04:00
Justin Clark-Casey (justincc)
288baaecaf Add warning chevrons around the GC.Collect added to Warp3DImageModule in commit 5eb2526
Manually calling GC.Collect() really shouldnt' be necessary and is generally regarded as a bad idea.
A GC should occur anyway pretty shortly afterwards.
However, can leave this in development code for now to see if it does actually make a significant difference rather than simply doing a GC a little earlier.
2012-09-07 00:46:24 +01:00
Justin Clark-Casey (justincc)
d2b00749ef Add missing DynamicTexture.cs file from last commit 2012-09-06 23:14:48 +01:00
Justin Clark-Casey (justincc)
8f02fd926e If reusing dynamic textures, do not reuse small data length textures that fall below current viewer discard level 2 thresholds.
Viewer LL 3.3.4 and before sometimes fail to properly redisplay dynamic textures that have a small data length compared to pixel size when pulled from cache.
This appears to happen when the data length is smaller than the estimate discard level 2 size the viewer uses when making this GetTexture request.
This commit works around this by always regenerating dynamic textures that fall below this threshold rather than reusing them if ReuseDynamicTextures = true
This can be controlled by the [Textures] ReuseDynamicLowDataTextures config setting which defaults to false.
2012-09-06 22:12:05 +01:00
Diva Canto
9f914327c6 Added missing configs, and deleted the [Profile] part on the Hypergrind config. 2012-09-06 12:42:14 -07:00
SignpostMarv
4215877b48 adding utility method for getting SceneObjectGroup from scene
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-09-06 06:32:56 -04:00
SignpostMarv
d2e79e26d7 adding utility method for getting SceneObjectPart from scene
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-09-06 06:32:46 -04:00
SignpostMarv
3f6c6eed33 pasting in show uptime code
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>
2012-09-06 06:13:07 -04:00
BlueWall
0a71e3ab39 Add file to .gitignore
Add OpenSim.userprefs which is created by Monodevelop to .gitignore
2012-09-06 05:36:00 -04:00
BlueWall
8fe8fdb0c9 Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-06 05:19:15 -04:00
Justin Clark-Casey (justincc)
fbfd28a61b Merge branch 'master' of ssh://opensimulator.org/var/git/opensim 2012-09-06 00:16:40 +01:00
Justin Clark-Casey (justincc)
a0d0c9f751 If the GetTexture capability receives a request for a range of data beyond that of an otherwise valid asset, return HTTP PartialContent rather than RequestedRangeNotSatisfiable.
This is because recent viewers (3.2.1, 3.3.4) and probably earlier ones using the http GetTexture capability will sometimes make such invalid range requests.
This appears to happen if the viewer's estimate of texture sizes at discard levels > 0 (chiefly 2) exceeds the total texture size.
I believe this does not normally happen but can occur for dynamic textures with are large but mainly blank.
If this happens, returning a RequestedRangeNotSatisfiable will cause the viewer to not render the texture at the final resolution.
However, returning a PartialContent (or OK) even with 0 data will allow the viewer to render the final texture.
2012-09-06 00:11:47 +01:00
684 changed files with 58816 additions and 15678 deletions

3
.gitignore vendored
View File

@@ -66,6 +66,7 @@ Examples/*.dll
OpenSim.build
OpenSim.sln
OpenSim.suo
OpenSim.userprefs
Prebuild/Prebuild.build
Prebuild/Prebuild.sln
TestResult.xml
@@ -94,3 +95,5 @@ OpenSim/Region/ScriptEngine/test-results/
OpenSim/Tests/Common/test-results/
OpenSim/Tests/test-results/
test-results/
doc/html
doc/doxygen.error.log

View File

@@ -43,6 +43,7 @@
<delete dir="${distbindir}/Prebuild"/>
<delete dir="${distbindir}/%temp%"/>
<delete dir="${distbindir}/.nant"/>
<delete dir="${distbindir}/ThirdParty"/>
<delete>
<fileset basedir="${distbindir}">
<include name="compile.bat"/>
@@ -132,6 +133,16 @@
</exec>
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.capabilities.handlers.tests)==0}" />
<exec program="${nunitcmd}" failonerror="true" resultproperty="testresult.opensim.server.handlers.tests">
<arg value="./bin/OpenSim.Server.Handlers.Tests.dll" />
</exec>
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.server.handlers.tests)==0}" />
<exec program="${nunitcmd}" failonerror="true" resultproperty="testresult.opensim.services.inventoryservice.tests">
<arg value="./bin/OpenSim.Services.InventoryService.Tests.dll" />
</exec>
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.services.inventoryservice.tests)==0}" />
<delete dir="%temp%"/>
</target>
@@ -235,6 +246,16 @@
<arg value="-xml=test-results/OpenSim.Capabilities.Handlers.Tests.dll-Results.xml" />
</exec>
<exec program="${nunitcmd}" failonerror="false" resultproperty="testresult.opensim.server.handlers.tests">
<arg value="./bin/OpenSim.Server.Handlers.Tests.dll" />
<arg value="-xml=test-results/OpenSim.Server.Handlers.Tests.dll-Results.xml" />
</exec>
<exec program="${nunitcmd}" failonerror="false" resultproperty="testresult.opensim.services.inventoryservice.tests">
<arg value="./bin/OpenSim.Services.InventoryService.Tests.dll" />
<arg value="-xml=test-results/OpenSim.Services.InventoryService.Tests.dll-Results.xml" />
</exec>
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.tests)==0}" />
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.framework.tests)==0}" />
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.framework.servers.tests)==0}" />
@@ -245,6 +266,7 @@
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.region.framework.tests)==0}" />
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.data.tests)==0}" />
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.capabilities.handlers.tests)==0}" />
<fail message="Failures reported in unit tests." unless="${int::parse(testresult.opensim.services.inventoryservice.tests)==0}" />
</target>
<target name="doxygen">

View File

@@ -1,6 +1,4 @@
==== Building OpenSim ====
=== Building on Windows ===
# Building on Windows
Steps:
* runprebuild.bat
@@ -9,16 +7,15 @@ Steps:
* copy OpenSim.ini.example to OpenSim.ini and other appropriate files in bin/config-include
* run OpenSim.exe
=== Building on Linux ===
# Building on Linux
Prereqs:
* Mono >= 2.4.3
* Nant >= 0.85
* On some Linux distributions you may need to install additional packages.
See http://opensimulator.org/wiki/Dependencies for more information.
* May also use xbuild (included in mono distributions)
* May use Monodevelop, a cross-platform IDE
* Mono >= 2.4.3
* Nant >= 0.85
* On some Linux distributions you may need to install additional packages.
See http://opensimulator.org/wiki/Dependencies for more information.
* May also use xbuild (included in mono distributions)
* May use Monodevelop, a cross-platform IDE
From the distribution type:
* ./runprebuild.sh
@@ -27,13 +24,13 @@ From the distribution type:
* copy OpenSim.ini.example to OpenSim.ini and other appropriate files in bin/config-include
* run mono OpenSim.exe
=== Using Monodevelop ===
# Using Monodevelop
From the distribution type:
* ./runprebuild.sh
* type monodevelop OpenSim.sln
=== References ===
# References
Helpful resources:
* http://opensimulator.org/wiki/Build_Instructions

View File

@@ -1,5 +1,5 @@
<<<>>>>The following people have contributed to OpenSim (Thank you
for your effort!)
for your effort!)
= Current OpenSim Developers (in very rough order of appearance) =
These folks represent the current core team for OpenSim, and are the
@@ -16,7 +16,7 @@ people that make the day to day of OpenSim happen.
* BlueWall (James Hughes)
* Nebadon Izumi (Michael Cerquoni, OSgrid)
* Snoopy Pfeffer
* Richard Adams (Intel)
* Robert Adams (Intel)
= Core Developers Following the White Rabbit =
Core developers who have temporarily (we hope) gone chasing the white rabbit.
@@ -93,6 +93,7 @@ what it is today.
* Garmin Kawaguichi
* Gryc Ueusp
* Hiro Lecker
* Iain Oliver
* Imaze Rhiano
* Intimidated
* Jeremy Bongio (IBM)
@@ -182,12 +183,14 @@ what it is today.
This software uses components from the following developers:
* Sleepycat Software (Berkeley DB)
* Aurora-Sim (http://aurora-sim.org)
* SQLite (Public Domain)
* XmlRpcCS (http://xmlrpccs.sf.net/)
* MySQL, Inc. (MySQL Connector/NET)
* NUnit (http://www.nunit.org)
* AGEIA Inc. (PhysX)
* Russel L. Smith (ODE)
* Erwin Coumans (Bullet)
* Prebuild (http://sourceforge.net/projects/dnpb/)
* LibOpenMetaverse (http://lib.openmetaverse.org/)
* DotNetOpenMail v0.5.8b (http://dotnetopenmail.sourceforge.net)
@@ -209,3 +212,4 @@ In addition, we would like to thank:
* The NANT Developers
* Microsoft (.NET, MSSQL-Adapters)
*x

View File

@@ -99,12 +99,12 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
RegionInfo[] regionsToLoad = regionLoader.LoadRegions();
m_log.Info("[LOAD REGIONS PLUGIN]: Loading specific shared modules...");
m_log.Info("[LOAD REGIONS PLUGIN]: DynamicTextureModule...");
m_openSim.ModuleLoader.LoadDefaultSharedModule(new DynamicTextureModule());
m_log.Info("[LOAD REGIONS PLUGIN]: LoadImageURLModule...");
m_openSim.ModuleLoader.LoadDefaultSharedModule(new LoadImageURLModule());
m_log.Info("[LOAD REGIONS PLUGIN]: XMLRPCModule...");
m_openSim.ModuleLoader.LoadDefaultSharedModule(new XMLRPCModule());
//m_log.Info("[LOAD REGIONS PLUGIN]: DynamicTextureModule...");
//m_openSim.ModuleLoader.LoadDefaultSharedModule(new DynamicTextureModule());
//m_log.Info("[LOAD REGIONS PLUGIN]: LoadImageURLModule...");
//m_openSim.ModuleLoader.LoadDefaultSharedModule(new LoadImageURLModule());
//m_log.Info("[LOAD REGIONS PLUGIN]: XMLRPCModule...");
//m_openSim.ModuleLoader.LoadDefaultSharedModule(new XMLRPCModule());
// m_log.Info("[LOADREGIONSPLUGIN]: AssetTransactionModule...");
// m_openSim.ModuleLoader.LoadDefaultSharedModule(new AssetTransactionModule());
m_log.Info("[LOAD REGIONS PLUGIN]: Done.");
@@ -136,9 +136,6 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
}
}
}
m_openSim.ModuleLoader.PostInitialise();
m_openSim.ModuleLoader.ClearCache();
}
public void Dispose()

View File

@@ -60,7 +60,7 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("0.6.5.*")]
// [assembly: AssemblyVersion("0.7.5.*")]
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.ApplicationPlugins.RegionModulesController")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c023816d-194e-40c1-9195-a0f281d4ac5d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -215,7 +215,7 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
}
}
#region IRegionModulesController implementation
#region Region Module interfacesController implementation
/// <summary>
/// Check that the given module is no disabled in the [Modules] section of the config files.

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.ApplicationPlugins.RemoteController")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("Copyright OpenSimulator developers © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("efec6e69-fc4a-4e21-86e6-4a261c12d4db")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -572,7 +572,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
region.ExternalHostName = (string) requestData["external_address"];
bool persist = Convert.ToBoolean((string) requestData["persist"]);
bool persist = Convert.ToBoolean(requestData["persist"]);
if (persist)
{
// default place for region configuration files is in the
@@ -728,7 +728,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
responseData["success"] = true;
responseData["region_name"] = region.RegionName;
responseData["region_id"] = region.RegionID.ToString();
responseData["region_uuid"] = region.RegionID.ToString(); //Deprecate July 2012
m_log.Info("[RADMIN]: CreateRegion: request complete");
}
@@ -982,8 +981,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
string lastName = (string) requestData["user_lastname"];
string password = (string) requestData["user_password"];
uint regionXLocation = Convert.ToUInt32((Int32) requestData["start_region_x"]);
uint regionYLocation = Convert.ToUInt32((Int32) requestData["start_region_y"]);
uint regionXLocation = Convert.ToUInt32(requestData["start_region_x"]);
uint regionYLocation = Convert.ToUInt32(requestData["start_region_y"]);
string email = ""; // empty string for email
if (requestData.Contains("user_email"))
@@ -1180,9 +1179,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
if (requestData.ContainsKey("user_password")) password = (string) requestData["user_password"];
if (requestData.ContainsKey("start_region_x"))
regionXLocation = Convert.ToUInt32((Int32) requestData["start_region_x"]);
regionXLocation = Convert.ToUInt32(requestData["start_region_x"]);
if (requestData.ContainsKey("start_region_y"))
regionYLocation = Convert.ToUInt32((Int32) requestData["start_region_y"]);
regionYLocation = Convert.ToUInt32(requestData["start_region_y"]);
// if (requestData.ContainsKey("start_lookat_x"))
// ulaX = Convert.ToUInt32((Int32) requestData["start_lookat_x"]);
@@ -1369,6 +1368,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
/// <description>profile url</description></item>
/// <item><term>noassets</term>
/// <description>true if no assets should be saved</description></item>
/// <item><term>all</term>
/// <description>true to save all the regions in the simulator</description></item>
/// <item><term>perm</term>
/// <description>C and/or T</description></item>
/// </list>
@@ -1425,6 +1426,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
options["checkPermissions"] = (string)requestData["perm"];
}
if ((string)requestData["all"] == "true")
{
options["all"] = (string)requestData["all"];
}
IRegionArchiverModule archiver = scene.RequestModuleInterface<IRegionArchiverModule>();
if (archiver != null)
@@ -1874,29 +1880,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
{
return;
}
#region Deprecate July 2012
//region_ID, regionid, region_uuid will be deprecated in July 2012!!!!!!
else if (requestData.ContainsKey("regionid") &&
!String.IsNullOrEmpty((string)requestData["regionid"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter regionid will be deprecated as of July 2012. Use region_id instead");
}
else if (requestData.ContainsKey("region_ID") &&
!String.IsNullOrEmpty((string)requestData["region_ID"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter region_ID will be deprecated as of July 2012. Use region_id instead");
}
else if (requestData.ContainsKey("regionID") &&
!String.IsNullOrEmpty((string)requestData["regionID"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter regionID will be deprecated as of July 2012. Use region_id instead");
}
else if (requestData.ContainsKey("region_uuid") &&
!String.IsNullOrEmpty((string)requestData["region_uuid"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter region_uuid will be deprecated as of July 2012. Use region_id instead");
}
#endregion
else
{
responseData["accepted"] = false;
@@ -1918,56 +1901,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
throw new Exception(String.Format("Region ID {0} not found", regionID));
}
}
#region Deprecate July 2012
else if (requestData.ContainsKey("regionid") &&
!String.IsNullOrEmpty((string)requestData["regionid"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter regionid will be deprecated as of July 2012. Use region_id instead");
UUID regionID = (UUID)(string)requestData["regionid"];
if (!m_application.SceneManager.TryGetScene(regionID, out scene))
{
responseData["error"] = String.Format("Region ID {0} not found", regionID);
throw new Exception(String.Format("Region ID {0} not found", regionID));
}
}
else if (requestData.ContainsKey("region_ID") &&
!String.IsNullOrEmpty((string)requestData["region_ID"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter region_ID will be deprecated as of July 2012. Use region_id instead");
UUID regionID = (UUID)(string)requestData["region_ID"];
if (!m_application.SceneManager.TryGetScene(regionID, out scene))
{
responseData["error"] = String.Format("Region ID {0} not found", regionID);
throw new Exception(String.Format("Region ID {0} not found", regionID));
}
}
else if (requestData.ContainsKey("regionID") &&
!String.IsNullOrEmpty((string)requestData["regionID"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter regionID will be deprecated as of July 2012. Use region_id instead");
UUID regionID = (UUID)(string)requestData["regionID"];
if (!m_application.SceneManager.TryGetScene(regionID, out scene))
{
responseData["error"] = String.Format("Region ID {0} not found", regionID);
throw new Exception(String.Format("Region ID {0} not found", regionID));
}
}
else if (requestData.ContainsKey("region_uuid") &&
!String.IsNullOrEmpty((string)requestData["region_uuid"]))
{
m_log.WarnFormat("[RADMIN]: Use of parameter region_uuid will be deprecated as of July 2012. Use region_id instead");
UUID regionID = (UUID)(string)requestData["region_uuid"];
if (!m_application.SceneManager.TryGetScene(regionID, out scene))
{
responseData["error"] = String.Format("Region ID {0} not found", regionID);
throw new Exception(String.Format("Region ID {0} not found", regionID));
}
}
#endregion
else if (requestData.ContainsKey("region_name") &&
!String.IsNullOrEmpty((string)requestData["region_name"]))
{
@@ -2381,7 +2314,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
destinationItem.Description = item.Description;
destinationItem.InvType = item.InvType;
destinationItem.CreatorId = item.CreatorId;
destinationItem.CreatorIdAsUuid = item.CreatorIdAsUuid;
destinationItem.CreatorData = item.CreatorData;
destinationItem.NextPermissions = item.NextPermissions;
destinationItem.CurrentPermissions = item.CurrentPermissions;
@@ -2436,7 +2368,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
destinationItem.Description = item.Description;
destinationItem.InvType = item.InvType;
destinationItem.CreatorId = item.CreatorId;
destinationItem.CreatorIdAsUuid = item.CreatorIdAsUuid;
destinationItem.CreatorData = item.CreatorData;
destinationItem.NextPermissions = item.NextPermissions;
destinationItem.CurrentPermissions = item.CurrentPermissions;
@@ -2549,7 +2480,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
destinationItem.Description = item.Description;
destinationItem.InvType = item.InvType;
destinationItem.CreatorId = item.CreatorId;
destinationItem.CreatorIdAsUuid = item.CreatorIdAsUuid;
destinationItem.CreatorData = item.CreatorData;
destinationItem.NextPermissions = item.NextPermissions;
destinationItem.CurrentPermissions = item.CurrentPermissions;
@@ -2855,7 +2785,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
inventoryItem.Description = GetStringAttribute(item,"desc","");
inventoryItem.InvType = GetIntegerAttribute(item,"invtype",-1);
inventoryItem.CreatorId = GetStringAttribute(item,"creatorid","");
inventoryItem.CreatorIdAsUuid = (UUID)GetStringAttribute(item,"creatoruuid","");
inventoryItem.CreatorData = GetStringAttribute(item, "creatordata", "");
inventoryItem.NextPermissions = GetUnsignedAttribute(perms, "next", 0x7fffffff);
inventoryItem.CurrentPermissions = GetUnsignedAttribute(perms,"current",0x7fffffff);

View File

@@ -312,14 +312,16 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
// Now that everything is setup we can proceed to
// add THIS agent to the HTTP server's handler list
if (!AddAgentHandler(Rest.Name,this))
{
Rest.Log.ErrorFormat("{0} Unable to activate handler interface", MsgId);
foreach (IRest handler in handlers)
{
handler.Close();
}
}
// FIXME: If this code is ever to be re-enabled (most of it is disabled already) then this will
// have to be handled through the AddHttpHandler interface.
// if (!AddAgentHandler(Rest.Name,this))
// {
// Rest.Log.ErrorFormat("{0} Unable to activate handler interface", MsgId);
// foreach (IRest handler in handlers)
// {
// handler.Close();
// }
// }
}
catch (Exception e)
@@ -342,11 +344,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
{
Rest.Log.InfoFormat("{0} Plugin is terminating", MsgId);
try
{
RemoveAgentHandler(Rest.Name, this);
}
catch (KeyNotFoundException){}
// FIXME: If this code is ever to be re-enabled (most of it is disabled already) then this will
// have to be handled through the AddHttpHandler interface.
// try
// {
// RemoveAgentHandler(Rest.Name, this);
// }
// catch (KeyNotFoundException){}
foreach (IRest handler in handlers)
{

View File

@@ -297,7 +297,9 @@ namespace OpenSim.ApplicationPlugins.Rest
{
if (!IsEnabled) return false;
_agents.Add(agentName, handler);
return _httpd.AddAgentHandler(agentName, handler);
// return _httpd.AddAgentHandler(agentName, handler);
return false;
}
/// <summary>
@@ -316,7 +318,7 @@ namespace OpenSim.ApplicationPlugins.Rest
if (_agents[agentName] == handler)
{
_agents.Remove(agentName);
return _httpd.RemoveAgentHandler(agentName, handler);
// return _httpd.RemoveAgentHandler(agentName, handler);
}
return false;
}
@@ -358,10 +360,10 @@ namespace OpenSim.ApplicationPlugins.Rest
_httpd.RemoveStreamHandler(h.HttpMethod, h.Path);
}
_handlers = null;
foreach (KeyValuePair<string, IHttpAgentHandler> h in _agents)
{
_httpd.RemoveAgentHandler(h.Key, h.Value);
}
// foreach (KeyValuePair<string, IHttpAgentHandler> h in _agents)
// {
// _httpd.RemoveAgentHandler(h.Key, h.Value);
// }
_agents = null;
}

View File

@@ -163,7 +163,7 @@ namespace OpenSim.Capabilities.Handlers
if (texture == null)
{
//m_log.DebugFormat("[GETTEXTURE]: texture was not in the cache");
// m_log.DebugFormat("[GETTEXTURE]: texture was not in the cache");
// Fetch locally or remotely. Misses return a 404
texture = m_assetService.Get(textureID.ToString());
@@ -197,7 +197,7 @@ namespace OpenSim.Capabilities.Handlers
}
else // it was on the cache
{
//m_log.DebugFormat("[GETTEXTURE]: texture was in the cache");
// m_log.DebugFormat("[GETTEXTURE]: texture was in the cache");
WriteTextureData(httpRequest, httpResponse, texture, format);
return true;
}
@@ -219,25 +219,54 @@ namespace OpenSim.Capabilities.Handlers
int start, end;
if (TryParseRange(range, out start, out end))
{
// Before clamping start make sure we can satisfy it in order to avoid
// sending back the last byte instead of an error status
if (start >= texture.Data.Length)
{
response.StatusCode = (int)System.Net.HttpStatusCode.RequestedRangeNotSatisfiable;
// m_log.DebugFormat(
// "[GETTEXTURE]: Client requested range for texture {0} starting at {1} but texture has end of {2}",
// texture.ID, start, texture.Data.Length);
// Stricly speaking, as per http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html, we should be sending back
// Requested Range Not Satisfiable (416) here. However, it appears that at least recent implementations
// of the Linden Lab viewer (3.2.1 and 3.3.4 and probably earlier), a viewer that has previously
// received a very small texture may attempt to fetch bytes from the server past the
// range of data that it received originally. Whether this happens appears to depend on whether
// the viewer's estimation of how large a request it needs to make for certain discard levels
// (http://wiki.secondlife.com/wiki/Image_System#Discard_Level_and_Mip_Mapping), chiefly discard
// level 2. If this estimate is greater than the total texture size, returning a RequestedRangeNotSatisfiable
// here will cause the viewer to treat the texture as bad and never display the full resolution
// However, if we return PartialContent (or OK) instead, the viewer will display that resolution.
// response.StatusCode = (int)System.Net.HttpStatusCode.RequestedRangeNotSatisfiable;
// response.AddHeader("Content-Range", String.Format("bytes */{0}", texture.Data.Length));
// response.StatusCode = (int)System.Net.HttpStatusCode.OK;
response.StatusCode = (int)System.Net.HttpStatusCode.PartialContent;
response.ContentType = texture.Metadata.ContentType;
}
else
{
// Handle the case where no second range value was given. This is equivalent to requesting
// the rest of the entity.
if (end == -1)
end = int.MaxValue;
end = Utils.Clamp(end, 0, texture.Data.Length - 1);
start = Utils.Clamp(start, 0, end);
int len = end - start + 1;
//m_log.Debug("Serving " + start + " to " + end + " of " + texture.Data.Length + " bytes for texture " + texture.ID);
// m_log.Debug("Serving " + start + " to " + end + " of " + texture.Data.Length + " bytes for texture " + texture.ID);
// Always return PartialContent, even if the range covered the entire data length
// We were accidentally sending back 404 before in this situation
// https://issues.apache.org/bugzilla/show_bug.cgi?id=51878 supports sending 206 even if the
// entire range is requested, and viewer 3.2.2 (and very probably earlier) seems fine with this.
//
// We also do not want to send back OK even if the whole range was satisfiable since this causes
// HTTP textures on at least Imprudence 1.4.0-beta2 to never display the final texture quality.
// if (end > maxEnd)
// response.StatusCode = (int)System.Net.HttpStatusCode.OK;
// else
response.StatusCode = (int)System.Net.HttpStatusCode.PartialContent;
response.ContentLength = len;
@@ -275,15 +304,43 @@ namespace OpenSim.Capabilities.Handlers
// texture.FullID, range, response.StatusCode, response.ContentLength, texture.Data.Length);
}
/// <summary>
/// Parse a range header.
/// </summary>
/// <remarks>
/// As per http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,
/// this obeys range headers with two values (e.g. 533-4165) and no second value (e.g. 533-).
/// Where there is no value, -1 is returned.
/// FIXME: Need to cover the case where only a second value is specified (e.g. -4165), probably by returning -1
/// for start.</remarks>
/// <returns></returns>
/// <param name='header'></param>
/// <param name='start'>Start of the range. Undefined if this was not a number.</param>
/// <param name='end'>End of the range. Will be -1 if no end specified. Undefined if there was a raw string but this was not a number.</param>
private bool TryParseRange(string header, out int start, out int end)
{
start = end = 0;
if (header.StartsWith("bytes="))
{
string[] rangeValues = header.Substring(6).Split('-');
if (rangeValues.Length == 2)
{
if (Int32.TryParse(rangeValues[0], out start) && Int32.TryParse(rangeValues[1], out end))
if (!Int32.TryParse(rangeValues[0], out start))
return false;
string rawEnd = rangeValues[1];
if (rawEnd == "")
{
end = -1;
return true;
}
else if (Int32.TryParse(rawEnd, out end))
{
return true;
}
}
}

View File

@@ -42,7 +42,7 @@ using OpenSim.Tests.Common.Mock;
namespace OpenSim.Capabilities.Handlers.GetTexture.Tests
{
[TestFixture]
public class GetTextureHandlerTests
public class GetTextureHandlerTests : OpenSimTestCase
{
[Test]
public void TestTextureNotFound()

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Capabilities.Handlers")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("32350823-e1df-45e3-b7fa-0a58b4372433")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Capabilities")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("7d1a55b1-8fab-42ff-9c83-066a9cc34d76")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.ConsoleClient")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("8945df94-2e5e-475b-88fa-35a7cdde6fd7")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -53,5 +53,6 @@ namespace OpenSim.Data
bool ReportAgent(UUID sessionID, UUID regionID);
PresenceData[] Get(string field, string data);
bool Delete(string field, string val);
bool VerifyAgent(UUID agentId, UUID secureSessionID);
}
}

View File

@@ -85,21 +85,6 @@ namespace OpenSim.Data
List<RegionData> GetHyperlinks(UUID scopeID);
}
[Flags]
public enum RegionFlags : int
{
DefaultRegion = 1, // Used for new Rez. Random if multiple defined
FallbackRegion = 2, // Regions we redirect to when the destination is down
RegionOnline = 4, // Set when a region comes online, unset when it unregisters and DeleteOnUnregister is false
NoDirectLogin = 8, // Region unavailable for direct logins (by name)
Persistent = 16, // Don't remove on unregister
LockedOut = 32, // Don't allow registration
NoMove = 64, // Don't allow moving this region
Reservation = 128, // This is an inactive reservation
Authenticate = 256, // Require authentication
Hyperlink = 512 // Record represents a HG link
}
public class RegionDataDistanceCompare : IComparer<RegionData>
{
private Vector2 m_origin;

View File

@@ -0,0 +1,71 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using OpenMetaverse;
using OpenSim.Framework;
namespace OpenSim.Data
{
public class XGroup
{
public UUID groupID;
public UUID ownerRoleID;
public string name;
public string charter;
public bool showInList;
public UUID insigniaID;
public int membershipFee;
public bool openEnrollment;
public bool allowPublish;
public bool maturePublish;
public UUID founderID;
public ulong everyonePowers;
public ulong ownersPowers;
public XGroup Clone()
{
return (XGroup)MemberwiseClone();
}
}
/// <summary>
/// Early stub interface for groups data, not final.
/// </summary>
/// <remarks>
/// Currently in-use only for regression test purposes. Needs to be filled out over time.
/// </remarks>
public interface IXGroupData
{
bool StoreGroup(XGroup group);
XGroup[] GetGroups(string field, string val);
XGroup[] GetGroups(string[] fields, string[] vals);
bool DeleteGroups(string field, string val);
bool DeleteGroups(string[] fields, string[] vals);
}
}

View File

@@ -116,7 +116,22 @@ namespace OpenSim.Data
/// <returns>true if the delete was successful, false if it was not</returns>
bool DeleteItems(string[] fields, string[] vals);
bool MoveItem(string id, string newParent);
/// <summary>
/// Move an item to another folder.
/// </summary>
/// <returns>/returns>
/// <param name='id'>UUID of the item</param>
/// <param name='newParent'>UUID of the new parent folder.</param>
bool MoveItem(string id, string newParentFolderID);
/// <summary>
/// Move a folder to another folder.
/// </summary>
/// <returns>/returns>
/// <param name='id'>UUID of the item</param>
/// <param name='newParent'>UUID of the new parent folder.</param>
bool MoveFolder(string id, string newParentFolderID);
XInventoryItem[] GetActiveGestures(UUID principalID);
int GetAssetPermissions(UUID principalID, UUID assetID);
}

View File

@@ -100,5 +100,18 @@ namespace OpenSim.Data.MSSQL
return true;
}
public bool VerifyAgent(UUID agentId, UUID secureSessionID)
{
PresenceData[] ret = Get("SecureSessionID",
secureSessionID.ToString());
if (ret.Length == 0)
return false;
if(ret[0].UserID != agentId.ToString())
return false;
return true;
}
}
}

View File

@@ -37,6 +37,7 @@ using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using RegionFlags = OpenSim.Framework.RegionFlags;
namespace OpenSim.Data.MSSQL
{

View File

@@ -43,12 +43,12 @@ namespace OpenSim.Data.MSSQL
// private static readonly ILog m_log = LogManager.GetLogger(
// MethodBase.GetCurrentMethod().DeclaringType);
private MSSQLGenericTableHandler<XInventoryFolder> m_Folders;
private MSSQLFolderHandler m_Folders;
private MSSQLItemHandler m_Items;
public MSSQLXInventoryData(string conn, string realm)
{
m_Folders = new MSSQLGenericTableHandler<XInventoryFolder>(
m_Folders = new MSSQLFolderHandler(
conn, "inventoryfolders", "InventoryStore");
m_Items = new MSSQLItemHandler(
conn, "inventoryitems", String.Empty);
@@ -85,6 +85,7 @@ namespace OpenSim.Data.MSSQL
{
return m_Folders.Delete(field, val);
}
public bool DeleteFolders(string[] fields, string[] vals)
{
return m_Folders.Delete(fields, vals);
@@ -94,15 +95,22 @@ namespace OpenSim.Data.MSSQL
{
return m_Items.Delete(field, val);
}
public bool DeleteItems(string[] fields, string[] vals)
{
return m_Items.Delete(fields, vals);
}
public bool MoveItem(string id, string newParent)
{
return m_Items.MoveItem(id, newParent);
}
public bool MoveFolder(string id, string newParent)
{
return m_Folders.MoveFolder(id, newParent);
}
public XInventoryItem[] GetActiveGestures(UUID principalID)
{
return m_Items.GetActiveGestures(principalID);
@@ -114,7 +122,7 @@ namespace OpenSim.Data.MSSQL
}
}
public class MSSQLItemHandler : MSSQLGenericTableHandler<XInventoryItem>
public class MSSQLItemHandler : MSSQLInventoryHandler<XInventoryItem>
{
public MSSQLItemHandler(string c, string t, string m) :
base(c, t, m)
@@ -123,70 +131,163 @@ namespace OpenSim.Data.MSSQL
public bool MoveItem(string id, string newParent)
{
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
using (SqlCommand cmd = new SqlCommand())
{
XInventoryItem[] retrievedItems = Get(new string[] { "inventoryID" }, new string[] { id });
if (retrievedItems.Length == 0)
return false;
cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where inventoryID = @InventoryID", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParent));
cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id));
cmd.Connection = conn;
conn.Open();
return cmd.ExecuteNonQuery() == 0 ? false : true;
UUID oldParent = retrievedItems[0].parentFolderID;
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where inventoryID = @InventoryID", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParent));
cmd.Parameters.Add(m_database.CreateParameter("@InventoryID", id));
cmd.Connection = conn;
conn.Open();
if (cmd.ExecuteNonQuery() == 0)
return false;
}
}
IncrementFolderVersion(oldParent);
IncrementFolderVersion(newParent);
return true;
}
public XInventoryItem[] GetActiveGestures(UUID principalID)
{
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = String.Format("select * from inventoryitems where avatarId = @uuid and assetType = @type and flags = 1", m_Realm);
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = String.Format("select * from inventoryitems where avatarId = @uuid and assetType = @type and flags = 1", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("@uuid", principalID.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("@type", (int)AssetType.Gesture));
cmd.Connection = conn;
conn.Open();
return DoQuery(cmd);
cmd.Parameters.Add(m_database.CreateParameter("@uuid", principalID.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("@type", (int)AssetType.Gesture));
cmd.Connection = conn;
conn.Open();
return DoQuery(cmd);
}
}
}
public int GetAssetPermissions(UUID principalID, UUID assetID)
{
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = @PrincipalID and assetID = @AssetID group by assetID", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("@AssetID", assetID.ToString()));
cmd.Connection = conn;
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
using (SqlCommand cmd = new SqlCommand())
{
int perms = 0;
if (reader.Read())
cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = @PrincipalID and assetID = @AssetID group by assetID", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("@PrincipalID", principalID.ToString()));
cmd.Parameters.Add(m_database.CreateParameter("@AssetID", assetID.ToString()));
cmd.Connection = conn;
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
perms = Convert.ToInt32(reader["inventoryCurrentPermissions"]);
int perms = 0;
if (reader.Read())
{
perms = Convert.ToInt32(reader["inventoryCurrentPermissions"]);
}
return perms;
}
return perms;
}
}
}
public override bool Store(XInventoryItem item)
{
if (!base.Store(item))
return false;
string sql = "update inventoryfolders set version=version+1 where folderID = @folderID";
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@folderID", item.parentFolderID.ToString());
IncrementFolderVersion(item.parentFolderID);
return true;
}
}
public class MSSQLFolderHandler : MSSQLInventoryHandler<XInventoryFolder>
{
public MSSQLFolderHandler(string c, string t, string m) :
base(c, t, m)
{
}
public bool MoveFolder(string id, string newParentFolderID)
{
XInventoryFolder[] folders = Get(new string[] { "folderID" }, new string[] { id });
if (folders.Length == 0)
return false;
UUID oldParentFolderUUID = folders[0].parentFolderID;
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = String.Format("update {0} set parentFolderID = @ParentFolderID where folderID = @folderID", m_Realm);
cmd.Parameters.Add(m_database.CreateParameter("@ParentFolderID", newParentFolderID));
cmd.Parameters.Add(m_database.CreateParameter("@folderID", id));
cmd.Connection = conn;
conn.Open();
if (cmd.ExecuteNonQuery() == 0)
return false;
}
}
IncrementFolderVersion(oldParentFolderUUID);
IncrementFolderVersion(newParentFolderID);
return true;
}
public override bool Store(XInventoryFolder folder)
{
if (!base.Store(folder))
return false;
IncrementFolderVersion(folder.parentFolderID);
return true;
}
}
public class MSSQLInventoryHandler<T> : MSSQLGenericTableHandler<T> where T: class, new()
{
public MSSQLInventoryHandler(string c, string t, string m) : base(c, t, m) {}
protected bool IncrementFolderVersion(UUID folderID)
{
return IncrementFolderVersion(folderID.ToString());
}
protected bool IncrementFolderVersion(string folderID)
{
// m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID);
// Util.PrintCallStack();
string sql = "update inventoryfolders set version=version+1 where folderID = ?folderID";
using (SqlConnection conn = new SqlConnection(m_ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@folderID", folderID);
try
{
cmd.ExecuteNonQuery();
@@ -194,9 +295,11 @@ namespace OpenSim.Data.MSSQL
catch (Exception)
{
return false;
}
}
}
}
return true;
}
}
}
}

View File

@@ -61,5 +61,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -219,6 +219,8 @@ namespace OpenSim.Data.MySQL
public virtual bool Store(T row)
{
// m_log.DebugFormat("[MYSQL GENERIC TABLE HANDLER]: Store(T row) invoked");
using (MySqlCommand cmd = new MySqlCommand())
{
string query = "";
@@ -273,6 +275,10 @@ namespace OpenSim.Data.MySQL
public virtual bool Delete(string[] fields, string[] keys)
{
// m_log.DebugFormat(
// "[MYSQL GENERIC TABLE HANDLER]: Delete(string[] fields, string[] keys) invoked with {0}:{1}",
// string.Join(",", fields), string.Join(",", keys));
if (fields.Length != keys.Length)
return false;

View File

@@ -95,5 +95,19 @@ namespace OpenSim.Data.MySQL
return true;
}
public bool VerifyAgent(UUID agentId, UUID secureSessionID)
{
PresenceData[] ret = Get("SecureSessionID",
secureSessionID.ToString());
if (ret.Length == 0)
return false;
if(ret[0].UserID != agentId.ToString())
return false;
return true;
}
}
}

View File

@@ -30,11 +30,11 @@ using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Reflection;
using MySql.Data.MySqlClient;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Data;
using MySql.Data.MySqlClient;
using RegionFlags = OpenSim.Framework.RegionFlags;
namespace OpenSim.Data.MySQL
{

View File

@@ -26,9 +26,10 @@
*/
using System;
using System.Data;
using System.Reflection;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using log4net;
using MySql.Data.MySqlClient;
using OpenMetaverse;
@@ -41,12 +42,12 @@ namespace OpenSim.Data.MySQL
/// </summary>
public class MySQLXInventoryData : IXInventoryData
{
private MySQLGenericTableHandler<XInventoryFolder> m_Folders;
private MySqlFolderHandler m_Folders;
private MySqlItemHandler m_Items;
public MySQLXInventoryData(string conn, string realm)
{
m_Folders = new MySQLGenericTableHandler<XInventoryFolder>(
m_Folders = new MySqlFolderHandler(
conn, "inventoryfolders", "InventoryStore");
m_Items = new MySqlItemHandler(
conn, "inventoryitems", String.Empty);
@@ -105,6 +106,11 @@ namespace OpenSim.Data.MySQL
return m_Items.MoveItem(id, newParent);
}
public bool MoveFolder(string id, string newParent)
{
return m_Folders.MoveFolder(id, newParent);
}
public XInventoryItem[] GetActiveGestures(UUID principalID)
{
return m_Items.GetActiveGestures(principalID);
@@ -116,24 +122,71 @@ namespace OpenSim.Data.MySQL
}
}
public class MySqlItemHandler : MySQLGenericTableHandler<XInventoryItem>
public class MySqlItemHandler : MySqlInventoryHandler<XInventoryItem>
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MySqlItemHandler(string c, string t, string m) :
base(c, t, m)
{
}
public override bool Delete(string field, string val)
{
XInventoryItem[] retrievedItems = Get(new string[] { field }, new string[] { val });
if (retrievedItems.Length == 0)
return false;
if (!base.Delete(field, val))
return false;
// Don't increment folder version here since Delete(string, string) calls Delete(string[], string[])
// IncrementFolderVersion(retrievedItems[0].parentFolderID);
return true;
}
public override bool Delete(string[] fields, string[] vals)
{
XInventoryItem[] retrievedItems = Get(fields, vals);
if (retrievedItems.Length == 0)
return false;
if (!base.Delete(fields, vals))
return false;
HashSet<UUID> deletedItemFolderUUIDs = new HashSet<UUID>();
Array.ForEach<XInventoryItem>(retrievedItems, i => deletedItemFolderUUIDs.Add(i.parentFolderID));
foreach (UUID deletedItemFolderUUID in deletedItemFolderUUIDs)
IncrementFolderVersion(deletedItemFolderUUID);
return true;
}
public bool MoveItem(string id, string newParent)
{
XInventoryItem[] retrievedItems = Get(new string[] { "inventoryID" }, new string[] { id });
if (retrievedItems.Length == 0)
return false;
UUID oldParent = retrievedItems[0].parentFolderID;
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = String.Format("update {0} set parentFolderID = ?ParentFolderID where inventoryID = ?InventoryID", m_Realm);
cmd.Parameters.AddWithValue("?ParentFolderID", newParent);
cmd.Parameters.AddWithValue("?InventoryID", id);
return ExecuteNonQuery(cmd) == 0 ? false : true;
if (ExecuteNonQuery(cmd) == 0)
return false;
}
IncrementFolderVersion(oldParent);
IncrementFolderVersion(newParent);
return true;
}
public XInventoryItem[] GetActiveGestures(UUID principalID)
@@ -184,6 +237,73 @@ namespace OpenSim.Data.MySQL
if (!base.Store(item))
return false;
IncrementFolderVersion(item.parentFolderID);
return true;
}
}
public class MySqlFolderHandler : MySqlInventoryHandler<XInventoryFolder>
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MySqlFolderHandler(string c, string t, string m) :
base(c, t, m)
{
}
public bool MoveFolder(string id, string newParentFolderID)
{
XInventoryFolder[] folders = Get(new string[] { "folderID" }, new string[] { id });
if (folders.Length == 0)
return false;
UUID oldParentFolderUUID = folders[0].parentFolderID;
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText
= String.Format(
"update {0} set parentFolderID = ?ParentFolderID where folderID = ?folderID", m_Realm);
cmd.Parameters.AddWithValue("?ParentFolderID", newParentFolderID);
cmd.Parameters.AddWithValue("?folderID", id);
if (ExecuteNonQuery(cmd) == 0)
return false;
}
IncrementFolderVersion(oldParentFolderUUID);
IncrementFolderVersion(newParentFolderID);
return true;
}
public override bool Store(XInventoryFolder folder)
{
if (!base.Store(folder))
return false;
IncrementFolderVersion(folder.parentFolderID);
return true;
}
}
public class MySqlInventoryHandler<T> : MySQLGenericTableHandler<T> where T: class, new()
{
public MySqlInventoryHandler(string c, string t, string m) : base(c, t, m) {}
protected bool IncrementFolderVersion(UUID folderID)
{
return IncrementFolderVersion(folderID.ToString());
}
protected bool IncrementFolderVersion(string folderID)
{
// m_log.DebugFormat("[MYSQL FOLDER HANDLER]: Incrementing version on folder {0}", folderID);
// Util.PrintCallStack();
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{
dbcon.Open();
@@ -193,7 +313,7 @@ namespace OpenSim.Data.MySQL
cmd.Connection = dbcon;
cmd.CommandText = String.Format("update inventoryfolders set version=version+1 where folderID = ?folderID");
cmd.Parameters.AddWithValue("?folderID", item.parentFolderID.ToString());
cmd.Parameters.AddWithValue("?folderID", folderID);
try
{
@@ -205,9 +325,11 @@ namespace OpenSim.Data.MySQL
}
cmd.Dispose();
}
dbcon.Close();
}
return true;
}
}
}
}

View File

@@ -61,5 +61,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -17,3 +17,8 @@ CREATE TABLE `GridUser` (
) ENGINE=InnoDB;
COMMIT;
:VERSION 2 # --------------------------
BEGIN;
COMMIT;

View File

@@ -0,0 +1,67 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using log4net;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Data;
namespace OpenSim.Data.Null
{
/// <summary>
/// Not a proper generic data handler yet - probably needs to actually store the data as well instead of relying
/// on descendent classes
/// </summary>
public class NullGenericDataHandler
{
protected List<T> Get<T>(string[] fields, string[] vals, List<T> inputEntities)
{
List<T> entities = inputEntities;
for (int i = 0; i < fields.Length; i++)
{
entities
= entities.Where(
e =>
{
FieldInfo fi = typeof(T).GetField(fields[i]);
if (fi == null)
throw new NotImplementedException(string.Format("No field {0} for val {1}", fields[i], vals[i]));
return fi.GetValue(e).ToString() == vals[i];
}
).ToList();
}
return entities;
}
}
}

View File

@@ -222,5 +222,13 @@ namespace OpenSim.Data.Null
return true;
}
public bool VerifyAgent(UUID agentId, UUID secureSessionID)
{
if (Instance != this)
return Instance.VerifyAgent(agentId, secureSessionID);
return false;
}
}
}

View File

@@ -33,6 +33,7 @@ using OpenSim.Framework;
using OpenSim.Data;
using System.Reflection;
using log4net;
using RegionFlags = OpenSim.Framework.RegionFlags;
namespace OpenSim.Data.Null
{
@@ -112,11 +113,14 @@ namespace OpenSim.Data.Null
// Find region data
List<RegionData> ret = new List<RegionData>();
foreach (RegionData r in m_regionData.Values)
lock (m_regionData)
{
// m_log.DebugFormat("[NULL REGION DATA]: comparing {0} to {1}", cleanName, r.RegionName.ToLower());
foreach (RegionData r in m_regionData.Values)
{
// m_log.DebugFormat("[NULL REGION DATA]: comparing {0} to {1}", cleanName, r.RegionName.ToLower());
if (queryMatch(r.RegionName.ToLower()))
ret.Add(r);
}
}
if (ret.Count > 0)
@@ -132,10 +136,13 @@ namespace OpenSim.Data.Null
List<RegionData> ret = new List<RegionData>();
foreach (RegionData r in m_regionData.Values)
lock (m_regionData)
{
if (r.posX == posX && r.posY == posY)
ret.Add(r);
foreach (RegionData r in m_regionData.Values)
{
if (r.posX == posX && r.posY == posY)
ret.Add(r);
}
}
if (ret.Count > 0)
@@ -149,8 +156,11 @@ namespace OpenSim.Data.Null
if (m_useStaticInstance && Instance != this)
return Instance.Get(regionID, scopeID);
if (m_regionData.ContainsKey(regionID))
return m_regionData[regionID];
lock (m_regionData)
{
if (m_regionData.ContainsKey(regionID))
return m_regionData[regionID];
}
return null;
}
@@ -162,10 +172,13 @@ namespace OpenSim.Data.Null
List<RegionData> ret = new List<RegionData>();
foreach (RegionData r in m_regionData.Values)
lock (m_regionData)
{
if (r.posX >= startX && r.posX <= endX && r.posY >= startY && r.posY <= endY)
ret.Add(r);
foreach (RegionData r in m_regionData.Values)
{
if (r.posX >= startX && r.posX <= endX && r.posY >= startY && r.posY <= endY)
ret.Add(r);
}
}
return ret;
@@ -179,7 +192,10 @@ namespace OpenSim.Data.Null
// m_log.DebugFormat(
// "[NULL REGION DATA]: Storing region {0} {1}, scope {2}", data.RegionName, data.RegionID, data.ScopeID);
m_regionData[data.RegionID] = data;
lock (m_regionData)
{
m_regionData[data.RegionID] = data;
}
return true;
}
@@ -189,10 +205,13 @@ namespace OpenSim.Data.Null
if (m_useStaticInstance && Instance != this)
return Instance.SetDataItem(regionID, item, value);
if (!m_regionData.ContainsKey(regionID))
return false;
lock (m_regionData)
{
if (!m_regionData.ContainsKey(regionID))
return false;
m_regionData[regionID].Data[item] = value;
m_regionData[regionID].Data[item] = value;
}
return true;
}
@@ -204,10 +223,13 @@ namespace OpenSim.Data.Null
// m_log.DebugFormat("[NULL REGION DATA]: Deleting region {0}", regionID);
if (!m_regionData.ContainsKey(regionID))
return false;
lock (m_regionData)
{
if (!m_regionData.ContainsKey(regionID))
return false;
m_regionData.Remove(regionID);
m_regionData.Remove(regionID);
}
return true;
}
@@ -237,10 +259,13 @@ namespace OpenSim.Data.Null
List<RegionData> ret = new List<RegionData>();
foreach (RegionData r in m_regionData.Values)
lock (m_regionData)
{
if ((Convert.ToInt32(r.Data["flags"]) & regionFlags) != 0)
ret.Add(r);
foreach (RegionData r in m_regionData.Values)
{
if ((Convert.ToInt32(r.Data["flags"]) & regionFlags) != 0)
ret.Add(r);
}
}
return ret;

View File

@@ -26,57 +26,65 @@
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Nini.Config;
using System.Threading;
using log4net;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Data;
using OpenSim.Services.Interfaces;
using OpenSim.Services.Base;
namespace OpenSim.Services.InventoryService
namespace OpenSim.Data.Null
{
public class InventoryServiceBase : ServiceBase
public class NullXGroupData : NullGenericDataHandler, IXGroupData
{
protected IInventoryDataPlugin m_Database = null;
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public InventoryServiceBase(IConfigSource config) : base(config)
private Dictionary<UUID, XGroup> m_groups = new Dictionary<UUID, XGroup>();
public NullXGroupData(string connectionString, string realm) {}
public bool StoreGroup(XGroup group)
{
string dllName = String.Empty;
string connString = String.Empty;
//
// Try reading the [DatabaseService] section first, if it exists
//
IConfig dbConfig = config.Configs["DatabaseService"];
if (dbConfig != null)
lock (m_groups)
{
dllName = dbConfig.GetString("StorageProvider", String.Empty);
connString = dbConfig.GetString("ConnectionString", String.Empty);
m_groups[group.groupID] = group.Clone();
}
//
// Try reading the more specific [InventoryService] section, if it exists
//
IConfig inventoryConfig = config.Configs["InventoryService"];
if (inventoryConfig != null)
{
dllName = inventoryConfig.GetString("StorageProvider", dllName);
connString = inventoryConfig.GetString("ConnectionString", connString);
}
//
// We tried, but this doesn't exist. We can't proceed.
//
if (dllName.Equals(String.Empty))
throw new Exception("No InventoryService configuration");
m_Database = LoadPlugin<IInventoryDataPlugin>(dllName);
if (m_Database == null)
throw new Exception("Could not find a storage interface in the given module");
m_Database.Initialise(connString);
return true;
}
public XGroup[] GetGroups(string field, string val)
{
return GetGroups(new string[] { field }, new string[] { val });
}
public XGroup[] GetGroups(string[] fields, string[] vals)
{
lock (m_groups)
{
List<XGroup> origGroups = Get<XGroup>(fields, vals, m_groups.Values.ToList());
return origGroups.Select(g => g.Clone()).ToArray();
}
}
public bool DeleteGroups(string field, string val)
{
return DeleteGroups(new string[] { field }, new string[] { val });
}
public bool DeleteGroups(string[] fields, string[] vals)
{
lock (m_groups)
{
XGroup[] groupsToDelete = GetGroups(fields, vals);
Array.ForEach(groupsToDelete, g => m_groups.Remove(g.groupID));
}
return true;
}
}
}
}

View File

@@ -61,5 +61,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -61,5 +61,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -61,5 +61,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -202,7 +202,8 @@ namespace OpenSim.Data.SQLite
/// <returns>True if exist, or false.</returns>
override public bool ExistsAsset(UUID uuid)
{
lock (this) {
lock (this)
{
using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn))
{
cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.ToString()));
@@ -353,12 +354,13 @@ namespace OpenSim.Data.SQLite
{
lock (this)
{
using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn))
{
cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.ToString()));
cmd.ExecuteNonQuery();
}
using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn))
{
cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.ToString()));
cmd.ExecuteNonQuery();
}
}
return true;
}

View File

@@ -82,11 +82,14 @@ namespace OpenSim.Data.SQLite
{
AuthenticationData ret = new AuthenticationData();
ret.Data = new Dictionary<string, object>();
IDataReader result;
SqliteCommand cmd = new SqliteCommand("select * from `" + m_Realm + "` where UUID = :PrincipalID");
cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
using (SqliteCommand cmd = new SqliteCommand("select * from `" + m_Realm + "` where UUID = :PrincipalID"))
{
cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
IDataReader result = ExecuteReader(cmd, m_Connection);
result = ExecuteReader(cmd, m_Connection);
}
try
{
@@ -121,10 +124,6 @@ namespace OpenSim.Data.SQLite
catch
{
}
finally
{
//CloseCommand(cmd);
}
return null;
}
@@ -140,84 +139,81 @@ namespace OpenSim.Data.SQLite
foreach (object o in data.Data.Values)
values[i++] = o.ToString();
SqliteCommand cmd = new SqliteCommand();
if (Get(data.PrincipalID) != null)
using (SqliteCommand cmd = new SqliteCommand())
{
string update = "update `" + m_Realm + "` set ";
bool first = true;
foreach (string field in fields)
if (Get(data.PrincipalID) != null)
{
if (!first)
update += ", ";
update += "`" + field + "` = :" + field;
cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
first = false;
}
update += " where UUID = :UUID";
cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
cmd.CommandText = update;
try
{
if (ExecuteNonQuery(cmd, m_Connection) < 1)
string update = "update `" + m_Realm + "` set ";
bool first = true;
foreach (string field in fields)
{
if (!first)
update += ", ";
update += "`" + field + "` = :" + field;
cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
first = false;
}
update += " where UUID = :UUID";
cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
cmd.CommandText = update;
try
{
if (ExecuteNonQuery(cmd, m_Connection) < 1)
{
//CloseCommand(cmd);
return false;
}
}
catch (Exception e)
{
m_log.Error("[SQLITE]: Exception storing authentication data", e);
//CloseCommand(cmd);
return false;
}
}
catch (Exception e)
else
{
m_log.Error("[SQLITE]: Exception storing authentication data", e);
//CloseCommand(cmd);
return false;
}
}
string insert = "insert into `" + m_Realm + "` (`UUID`, `" +
String.Join("`, `", fields) +
"`) values (:UUID, :" + String.Join(", :", fields) + ")";
else
{
string insert = "insert into `" + m_Realm + "` (`UUID`, `" +
String.Join("`, `", fields) +
"`) values (:UUID, :" + String.Join(", :", fields) + ")";
cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
foreach (string field in fields)
cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
foreach (string field in fields)
cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
cmd.CommandText = insert;
cmd.CommandText = insert;
try
{
if (ExecuteNonQuery(cmd, m_Connection) < 1)
try
{
//CloseCommand(cmd);
if (ExecuteNonQuery(cmd, m_Connection) < 1)
{
return false;
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
return false;
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
//CloseCommand(cmd);
return false;
}
}
//CloseCommand(cmd);
return true;
}
public bool SetDataItem(UUID principalID, string item, string value)
{
SqliteCommand cmd = new SqliteCommand("update `" + m_Realm +
"` set `" + item + "` = " + value + " where UUID = '" + principalID.ToString() + "'");
if (ExecuteNonQuery(cmd, m_Connection) > 0)
return true;
using (SqliteCommand cmd = new SqliteCommand("update `" + m_Realm +
"` set `" + item + "` = " + value + " where UUID = '" + principalID.ToString() + "'"))
{
if (ExecuteNonQuery(cmd, m_Connection) > 0)
return true;
}
return false;
}
@@ -227,16 +223,13 @@ namespace OpenSim.Data.SQLite
if (System.Environment.TickCount - m_LastExpire > 30000)
DoExpire();
SqliteCommand cmd = new SqliteCommand("insert into tokens (UUID, token, validity) values ('" + principalID.ToString() +
"', '" + token + "', datetime('now', 'localtime', '+" + lifetime.ToString() + " minutes'))");
if (ExecuteNonQuery(cmd, m_Connection) > 0)
using (SqliteCommand cmd = new SqliteCommand("insert into tokens (UUID, token, validity) values ('" + principalID.ToString() +
"', '" + token + "', datetime('now', 'localtime', '+" + lifetime.ToString() + " minutes'))"))
{
cmd.Dispose();
return true;
if (ExecuteNonQuery(cmd, m_Connection) > 0)
return true;
}
cmd.Dispose();
return false;
}
@@ -245,28 +238,22 @@ namespace OpenSim.Data.SQLite
if (System.Environment.TickCount - m_LastExpire > 30000)
DoExpire();
SqliteCommand cmd = new SqliteCommand("update tokens set validity = datetime('now', 'localtime', '+" + lifetime.ToString() +
" minutes') where UUID = '" + principalID.ToString() + "' and token = '" + token + "' and validity > datetime('now', 'localtime')");
if (ExecuteNonQuery(cmd, m_Connection) > 0)
using (SqliteCommand cmd = new SqliteCommand("update tokens set validity = datetime('now', 'localtime', '+" + lifetime.ToString() +
" minutes') where UUID = '" + principalID.ToString() + "' and token = '" + token + "' and validity > datetime('now', 'localtime')"))
{
cmd.Dispose();
return true;
if (ExecuteNonQuery(cmd, m_Connection) > 0)
return true;
}
cmd.Dispose();
return false;
}
private void DoExpire()
{
SqliteCommand cmd = new SqliteCommand("delete from tokens where validity < datetime('now', 'localtime')");
ExecuteNonQuery(cmd, m_Connection);
cmd.Dispose();
using (SqliteCommand cmd = new SqliteCommand("delete from tokens where validity < datetime('now', 'localtime')"))
ExecuteNonQuery(cmd, m_Connection);
m_LastExpire = System.Environment.TickCount;
}
}
}
}

View File

@@ -56,23 +56,17 @@ namespace OpenSim.Data.SQLite
public bool Delete(UUID principalID, string name)
{
SqliteCommand cmd = new SqliteCommand();
cmd.CommandText = String.Format("delete from {0} where `PrincipalID` = :PrincipalID and `Name` = :Name", m_Realm);
cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue(":Name", name);
try
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("delete from {0} where `PrincipalID` = :PrincipalID and `Name` = :Name", m_Realm);
cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue(":Name", name);
if (ExecuteNonQuery(cmd, m_Connection) > 0)
return true;
}
return false;
}
finally
{
//CloseCommand(cmd);
}
return false;
}
}
}
}

View File

@@ -104,12 +104,13 @@ namespace OpenSim.Data.SQLite
{
string sql = "select estate_settings."+String.Join(",estate_settings.", FieldList)+" from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = :RegionID";
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
return DoLoad(cmd, regionID, create);
return DoLoad(cmd, regionID, create);
}
}
private EstateSettings DoLoad(SqliteCommand cmd, UUID regionID, bool create)
@@ -186,38 +187,40 @@ namespace OpenSim.Data.SQLite
{
List<string> names = new List<string>(FieldList);
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
IDataReader r = null;
names.Remove("EstateID");
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
names.Remove("EstateID");
string sql = "insert into estate_settings ("+String.Join(",", names.ToArray())+") values ( :"+String.Join(", :", names.ToArray())+")";
string sql = "insert into estate_settings ("+String.Join(",", names.ToArray())+") values ( :"+String.Join(", :", names.ToArray())+")";
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.CommandText = sql;
cmd.Parameters.Clear();
foreach (string name in FieldList)
{
if (m_FieldMap[name].GetValue(es) is bool)
foreach (string name in FieldList)
{
if ((bool)m_FieldMap[name].GetValue(es))
cmd.Parameters.AddWithValue(":"+name, "1");
if (m_FieldMap[name].GetValue(es) is bool)
{
if ((bool)m_FieldMap[name].GetValue(es))
cmd.Parameters.AddWithValue(":"+name, "1");
else
cmd.Parameters.AddWithValue(":"+name, "0");
}
else
cmd.Parameters.AddWithValue(":"+name, "0");
}
else
{
cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
{
cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
}
}
cmd.ExecuteNonQuery();
cmd.CommandText = "select LAST_INSERT_ROWID() as id";
cmd.Parameters.Clear();
r = cmd.ExecuteReader();
}
cmd.ExecuteNonQuery();
cmd.CommandText = "select LAST_INSERT_ROWID() as id";
cmd.Parameters.Clear();
r = cmd.ExecuteReader();
r.Read();
es.EstateID = Convert.ToUInt32(r["id"]);
@@ -239,26 +242,27 @@ namespace OpenSim.Data.SQLite
string sql = "update estate_settings set "+String.Join(", ", terms.ToArray())+" where EstateID = :EstateID";
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
cmd.CommandText = sql;
foreach (string name in FieldList)
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
if (m_FieldMap[name].GetValue(es) is bool)
{
if ((bool)m_FieldMap[name].GetValue(es))
cmd.Parameters.AddWithValue(":"+name, "1");
else
cmd.Parameters.AddWithValue(":"+name, "0");
}
else
{
cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
}
}
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
foreach (string name in FieldList)
{
if (m_FieldMap[name].GetValue(es) is bool)
{
if ((bool)m_FieldMap[name].GetValue(es))
cmd.Parameters.AddWithValue(":"+name, "1");
else
cmd.Parameters.AddWithValue(":"+name, "0");
}
else
{
cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
}
}
cmd.ExecuteNonQuery();
}
SaveBanList(es);
SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers);
@@ -270,12 +274,15 @@ namespace OpenSim.Data.SQLite
{
es.ClearBans();
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
IDataReader r;
cmd.CommandText = "select bannedUUID from estateban where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", es.EstateID);
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = "select bannedUUID from estateban where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", es.EstateID);
IDataReader r = cmd.ExecuteReader();
r = cmd.ExecuteReader();
}
while (r.Read())
{
@@ -294,60 +301,64 @@ namespace OpenSim.Data.SQLite
private void SaveBanList(EstateSettings es)
{
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
cmd.CommandText = "delete from estateban where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.CommandText = "insert into estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask) values ( :EstateID, :bannedUUID, '', '', '' )";
foreach (EstateBan b in es.EstateBans)
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = "delete from estateban where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
cmd.Parameters.AddWithValue(":bannedUUID", b.BannedUserID.ToString());
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.CommandText = "insert into estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask) values ( :EstateID, :bannedUUID, '', '', '' )";
foreach (EstateBan b in es.EstateBans)
{
cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
cmd.Parameters.AddWithValue(":bannedUUID", b.BannedUserID.ToString());
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
}
void SaveUUIDList(uint EstateID, string table, UUID[] data)
{
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
cmd.CommandText = "delete from "+table+" where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.CommandText = "insert into "+table+" (EstateID, uuid) values ( :EstateID, :uuid )";
foreach (UUID uuid in data)
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = "delete from "+table+" where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
cmd.Parameters.AddWithValue(":uuid", uuid.ToString());
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.CommandText = "insert into "+table+" (EstateID, uuid) values ( :EstateID, :uuid )";
foreach (UUID uuid in data)
{
cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
cmd.Parameters.AddWithValue(":uuid", uuid.ToString());
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
}
UUID[] LoadUUIDList(uint EstateID, string table)
{
List<UUID> uuids = new List<UUID>();
IDataReader r;
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = "select uuid from "+table+" where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", EstateID);
cmd.CommandText = "select uuid from "+table+" where EstateID = :EstateID";
cmd.Parameters.AddWithValue(":EstateID", EstateID);
IDataReader r = cmd.ExecuteReader();
r = cmd.ExecuteReader();
}
while (r.Read())
{
@@ -367,12 +378,13 @@ namespace OpenSim.Data.SQLite
{
string sql = "select estate_settings."+String.Join(",estate_settings.", FieldList)+" from estate_settings where estate_settings.EstateID = :EstateID";
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":EstateID", estateID.ToString());
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":EstateID", estateID.ToString());
return DoLoad(cmd, UUID.Zero, false);
return DoLoad(cmd, UUID.Zero, false);
}
}
public List<EstateSettings> LoadEstateSettingsAll()
@@ -391,13 +403,15 @@ namespace OpenSim.Data.SQLite
List<int> result = new List<int>();
string sql = "select EstateID from estate_settings where estate_settings.EstateName = :EstateName";
IDataReader r;
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":EstateName", search);
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":EstateName", search);
IDataReader r = cmd.ExecuteReader();
r = cmd.ExecuteReader();
}
while (r.Read())
{
@@ -413,12 +427,14 @@ namespace OpenSim.Data.SQLite
List<int> result = new List<int>();
string sql = "select EstateID from estate_settings";
IDataReader r;
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = sql;
cmd.CommandText = sql;
IDataReader r = cmd.ExecuteReader();
r = cmd.ExecuteReader();
}
while (r.Read())
{
@@ -434,13 +450,15 @@ namespace OpenSim.Data.SQLite
List<int> result = new List<int>();
string sql = "select EstateID from estate_settings where estate_settings.EstateOwner = :EstateOwner";
IDataReader r;
SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":EstateOwner", ownerID);
cmd.CommandText = sql;
cmd.Parameters.AddWithValue(":EstateOwner", ownerID);
IDataReader r = cmd.ExecuteReader();
r = cmd.ExecuteReader();
}
while (r.Read())
{

View File

@@ -90,12 +90,5 @@ namespace OpenSim.Data.SQLite
return cmd.ExecuteReader();
}
}
protected void CloseCommand(SqliteCommand cmd)
{
cmd.Connection.Close();
cmd.Connection.Dispose();
cmd.Dispose();
}
}
}
}

View File

@@ -53,13 +53,13 @@ namespace OpenSim.Data.SQLite
public FriendsData[] GetFriends(string userID)
{
SqliteCommand cmd = new SqliteCommand();
cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = :PrincipalID", m_Realm);
cmd.Parameters.AddWithValue(":PrincipalID", userID.ToString());
return DoQuery(cmd);
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = :PrincipalID", m_Realm);
cmd.Parameters.AddWithValue(":PrincipalID", userID.ToString());
return DoQuery(cmd);
}
}
public bool Delete(UUID principalID, string friend)
@@ -69,13 +69,14 @@ namespace OpenSim.Data.SQLite
public bool Delete(string principalID, string friend)
{
SqliteCommand cmd = new SqliteCommand();
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("delete from {0} where PrincipalID = :PrincipalID and Friend = :Friend", m_Realm);
cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue(":Friend", friend);
cmd.CommandText = String.Format("delete from {0} where PrincipalID = :PrincipalID and Friend = :Friend", m_Realm);
cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue(":Friend", friend);
ExecuteNonQuery(cmd, m_Connection);
ExecuteNonQuery(cmd, m_Connection);
}
return true;
}

View File

@@ -120,34 +120,35 @@ namespace OpenSim.Data.SQLite
}
}
public T[] Get(string field, string key)
public virtual T[] Get(string field, string key)
{
return Get(new string[] { field }, new string[] { key });
}
public T[] Get(string[] fields, string[] keys)
public virtual T[] Get(string[] fields, string[] keys)
{
if (fields.Length != keys.Length)
return new T[0];
List<string> terms = new List<string>();
SqliteCommand cmd = new SqliteCommand();
for (int i = 0 ; i < fields.Length ; i++)
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
terms.Add("`" + fields[i] + "` = :" + fields[i]);
for (int i = 0 ; i < fields.Length ; i++)
{
cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
terms.Add("`" + fields[i] + "` = :" + fields[i]);
}
string where = String.Join(" and ", terms.ToArray());
string query = String.Format("select * from {0} where {1}",
m_Realm, where);
cmd.CommandText = query;
return DoQuery(cmd);
}
string where = String.Join(" and ", terms.ToArray());
string query = String.Format("select * from {0} where {1}",
m_Realm, where);
cmd.CommandText = query;
return DoQuery(cmd);
}
protected T[] DoQuery(SqliteCommand cmd)
@@ -212,53 +213,55 @@ namespace OpenSim.Data.SQLite
return result.ToArray();
}
public T[] Get(string where)
public virtual T[] Get(string where)
{
SqliteCommand cmd = new SqliteCommand();
using (SqliteCommand cmd = new SqliteCommand())
{
string query = String.Format("select * from {0} where {1}",
m_Realm, where);
string query = String.Format("select * from {0} where {1}",
m_Realm, where);
cmd.CommandText = query;
cmd.CommandText = query;
return DoQuery(cmd);
return DoQuery(cmd);
}
}
public bool Store(T row)
public virtual bool Store(T row)
{
SqliteCommand cmd = new SqliteCommand();
string query = "";
List<String> names = new List<String>();
List<String> values = new List<String>();
foreach (FieldInfo fi in m_Fields.Values)
using (SqliteCommand cmd = new SqliteCommand())
{
names.Add(fi.Name);
values.Add(":" + fi.Name);
cmd.Parameters.Add(new SqliteParameter(":" + fi.Name, fi.GetValue(row).ToString()));
}
string query = "";
List<String> names = new List<String>();
List<String> values = new List<String>();
if (m_DataField != null)
{
Dictionary<string, string> data =
(Dictionary<string, string>)m_DataField.GetValue(row);
foreach (KeyValuePair<string, string> kvp in data)
foreach (FieldInfo fi in m_Fields.Values)
{
names.Add(kvp.Key);
values.Add(":" + kvp.Key);
cmd.Parameters.Add(new SqliteParameter(":" + kvp.Key, kvp.Value));
names.Add(fi.Name);
values.Add(":" + fi.Name);
cmd.Parameters.Add(new SqliteParameter(":" + fi.Name, fi.GetValue(row).ToString()));
}
if (m_DataField != null)
{
Dictionary<string, string> data =
(Dictionary<string, string>)m_DataField.GetValue(row);
foreach (KeyValuePair<string, string> kvp in data)
{
names.Add(kvp.Key);
values.Add(":" + kvp.Key);
cmd.Parameters.Add(new SqliteParameter(":" + kvp.Key, kvp.Value));
}
}
query = String.Format("replace into {0} (`", m_Realm) + String.Join("`,`", names.ToArray()) + "`) values (" + String.Join(",", values.ToArray()) + ")";
cmd.CommandText = query;
if (ExecuteNonQuery(cmd, m_Connection) > 0)
return true;
}
query = String.Format("replace into {0} (`", m_Realm) + String.Join("`,`", names.ToArray()) + "`) values (" + String.Join(",", values.ToArray()) + ")";
cmd.CommandText = query;
if (ExecuteNonQuery(cmd, m_Connection) > 0)
return true;
return false;
}
@@ -267,28 +270,29 @@ namespace OpenSim.Data.SQLite
return Delete(new string[] { field }, new string[] { key });
}
public bool Delete(string[] fields, string[] keys)
public virtual bool Delete(string[] fields, string[] keys)
{
if (fields.Length != keys.Length)
return false;
List<string> terms = new List<string>();
SqliteCommand cmd = new SqliteCommand();
for (int i = 0 ; i < fields.Length ; i++)
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
terms.Add("`" + fields[i] + "` = :" + fields[i]);
for (int i = 0 ; i < fields.Length ; i++)
{
cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
terms.Add("`" + fields[i] + "` = :" + fields[i]);
}
string where = String.Join(" and ", terms.ToArray());
string query = String.Format("delete from {0} where {1}", m_Realm, where);
cmd.CommandText = query;
return ExecuteNonQuery(cmd, m_Connection) > 0;
}
string where = String.Join(" and ", terms.ToArray());
string query = String.Format("delete from {0} where {1}", m_Realm, where);
cmd.CommandText = query;
return ExecuteNonQuery(cmd, m_Connection) > 0;
}
}
}

View File

@@ -1366,6 +1366,13 @@ namespace OpenSim.Data.SQLite
createCol(land, "UserLookAtZ", typeof(Double));
createCol(land, "AuthbuyerID", typeof(String));
createCol(land, "OtherCleanTime", typeof(Int32));
createCol(land, "Dwell", typeof(Int32));
createCol(land, "MediaType", typeof(String));
createCol(land, "MediaDescription", typeof(String));
createCol(land, "MediaSize", typeof(String));
createCol(land, "MediaLoop", typeof(Boolean));
createCol(land, "ObscureMedia", typeof(Boolean));
createCol(land, "ObscureMusic", typeof(Boolean));
land.PrimaryKey = new DataColumn[] { land.Columns["UUID"] };
@@ -1781,9 +1788,16 @@ namespace OpenSim.Data.SQLite
newData.PassHours = Convert.ToSingle(row["PassHours"]);
newData.PassPrice = Convert.ToInt32(row["PassPrice"]);
newData.SnapshotID = (UUID)(String)row["SnapshotUUID"];
newData.Dwell = Convert.ToInt32(row["Dwell"]);
newData.MediaType = (String)row["MediaType"];
newData.MediaDescription = (String)row["MediaDescription"];
newData.MediaWidth = Convert.ToInt32((((string)row["MediaSize"]).Split(','))[0]);
newData.MediaHeight = Convert.ToInt32((((string)row["MediaSize"]).Split(','))[1]);
newData.MediaLoop = Convert.ToBoolean(row["MediaLoop"]);
newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]);
newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]);
try
{
newData.UserLocation =
new Vector3(Convert.ToSingle(row["UserLocationX"]), Convert.ToSingle(row["UserLocationY"]),
Convert.ToSingle(row["UserLocationZ"]));
@@ -2195,12 +2209,13 @@ namespace OpenSim.Data.SQLite
row["UserLookAtZ"] = land.UserLookAt.Z;
row["AuthbuyerID"] = land.AuthBuyerID.ToString();
row["OtherCleanTime"] = land.OtherCleanTime;
row["Dwell"] = land.Dwell;
row["MediaType"] = land.MediaType;
row["MediaDescription"] = land.MediaDescription;
row["MediaSize"] = land.MediaWidth.ToString() + "," + land.MediaHeight.ToString();
row["MediaLoop"] = land.MediaLoop.ToString();
row["ObscureMusic"] = land.ObscureMusic.ToString();
row["ObscureMedia"] = land.ObscureMedia.ToString();
row["MediaSize"] = String.Format("{0},{1}", land.MediaWidth, land.MediaHeight);
row["MediaLoop"] = land.MediaLoop;
row["ObscureMusic"] = land.ObscureMusic;
row["ObscureMedia"] = land.ObscureMedia;
}
/// <summary>

View File

@@ -66,20 +66,21 @@ namespace OpenSim.Data.SQLite
if (words.Length > 2)
return new UserAccountData[0];
SqliteCommand cmd = new SqliteCommand();
if (words.Length == 1)
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')",
m_Realm, scopeID.ToString(), words[0]);
}
else
{
cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{3}%')",
m_Realm, scopeID.ToString(), words[0], words[1]);
}
if (words.Length == 1)
{
cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')",
m_Realm, scopeID.ToString(), words[0]);
}
else
{
cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{3}%')",
m_Realm, scopeID.ToString(), words[0], words[1]);
}
return DoQuery(cmd);
return DoQuery(cmd);
}
}
}
}

View File

@@ -47,7 +47,7 @@ namespace OpenSim.Data.SQLite
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private SQLiteGenericTableHandler<XInventoryFolder> m_Folders;
private SqliteFolderHandler m_Folders;
private SqliteItemHandler m_Items;
public SQLiteXInventoryData(string conn, string realm)
@@ -55,7 +55,7 @@ namespace OpenSim.Data.SQLite
if (Util.IsWindows())
Util.LoadArchSpecificWindowsDll("sqlite3.dll");
m_Folders = new SQLiteGenericTableHandler<XInventoryFolder>(
m_Folders = new SqliteFolderHandler(
conn, "inventoryfolders", "XInventoryStore");
m_Items = new SqliteItemHandler(
conn, "inventoryitems", String.Empty);
@@ -114,6 +114,11 @@ namespace OpenSim.Data.SQLite
return m_Items.MoveItem(id, newParent);
}
public bool MoveFolder(string id, string newParent)
{
return m_Folders.MoveFolder(id, newParent);
}
public XInventoryItem[] GetActiveGestures(UUID principalID)
{
return m_Items.GetActiveGestures(principalID);
@@ -125,44 +130,106 @@ namespace OpenSim.Data.SQLite
}
}
public class SqliteItemHandler : SQLiteGenericTableHandler<XInventoryItem>
public class SqliteItemHandler : SqliteInventoryHandler<XInventoryItem>
{
public SqliteItemHandler(string c, string t, string m) :
base(c, t, m)
{
}
public override bool Store(XInventoryItem item)
{
if (!base.Store(item))
return false;
IncrementFolderVersion(item.parentFolderID);
return true;
}
public override bool Delete(string field, string val)
{
XInventoryItem[] retrievedItems = Get(new string[] { field }, new string[] { val });
if (retrievedItems.Length == 0)
return false;
if (!base.Delete(field, val))
return false;
// Don't increment folder version here since Delete(string, string) calls Delete(string[], string[])
// IncrementFolderVersion(retrievedItems[0].parentFolderID);
return true;
}
public override bool Delete(string[] fields, string[] vals)
{
XInventoryItem[] retrievedItems = Get(fields, vals);
if (retrievedItems.Length == 0)
return false;
if (!base.Delete(fields, vals))
return false;
HashSet<UUID> deletedItemFolderUUIDs = new HashSet<UUID>();
Array.ForEach<XInventoryItem>(retrievedItems, i => deletedItemFolderUUIDs.Add(i.parentFolderID));
foreach (UUID deletedItemFolderUUID in deletedItemFolderUUIDs)
IncrementFolderVersion(deletedItemFolderUUID);
return true;
}
public bool MoveItem(string id, string newParent)
{
SqliteCommand cmd = new SqliteCommand();
XInventoryItem[] retrievedItems = Get(new string[] { "inventoryID" }, new string[] { id });
if (retrievedItems.Length == 0)
return false;
cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where inventoryID = :InventoryID", m_Realm);
cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParent));
cmd.Parameters.Add(new SqliteParameter(":InventoryID", id));
UUID oldParent = retrievedItems[0].parentFolderID;
return ExecuteNonQuery(cmd, m_Connection) == 0 ? false : true;
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where inventoryID = :InventoryID", m_Realm);
cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParent));
cmd.Parameters.Add(new SqliteParameter(":InventoryID", id));
if (ExecuteNonQuery(cmd, m_Connection) == 0)
return false;
}
IncrementFolderVersion(oldParent);
IncrementFolderVersion(newParent);
return true;
}
public XInventoryItem[] GetActiveGestures(UUID principalID)
{
SqliteCommand cmd = new SqliteCommand();
cmd.CommandText = String.Format("select * from inventoryitems where avatarId = :uuid and assetType = :type and flags = 1", m_Realm);
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("select * from inventoryitems where avatarId = :uuid and assetType = :type and flags = 1", m_Realm);
cmd.Parameters.Add(new SqliteParameter(":uuid", principalID.ToString()));
cmd.Parameters.Add(new SqliteParameter(":type", (int)AssetType.Gesture));
cmd.Parameters.Add(new SqliteParameter(":uuid", principalID.ToString()));
cmd.Parameters.Add(new SqliteParameter(":type", (int)AssetType.Gesture));
return DoQuery(cmd);
return DoQuery(cmd);
}
}
public int GetAssetPermissions(UUID principalID, UUID assetID)
{
SqliteCommand cmd = new SqliteCommand();
IDataReader reader;
cmd.CommandText = String.Format("select inventoryCurrentPermissions from inventoryitems where avatarID = :PrincipalID and assetID = :AssetID", m_Realm);
cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
cmd.Parameters.Add(new SqliteParameter(":AssetID", assetID.ToString()));
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("select inventoryCurrentPermissions from inventoryitems where avatarID = :PrincipalID and assetID = :AssetID", m_Realm);
cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
cmd.Parameters.Add(new SqliteParameter(":AssetID", assetID.ToString()));
IDataReader reader = ExecuteReader(cmd, m_Connection);
reader = ExecuteReader(cmd, m_Connection);
}
int perms = 0;
@@ -177,4 +244,81 @@ namespace OpenSim.Data.SQLite
return perms;
}
}
}
public class SqliteFolderHandler : SqliteInventoryHandler<XInventoryFolder>
{
public SqliteFolderHandler(string c, string t, string m) :
base(c, t, m)
{
}
public override bool Store(XInventoryFolder folder)
{
if (!base.Store(folder))
return false;
IncrementFolderVersion(folder.parentFolderID);
return true;
}
public bool MoveFolder(string id, string newParentFolderID)
{
XInventoryFolder[] folders = Get(new string[] { "folderID" }, new string[] { id });
if (folders.Length == 0)
return false;
UUID oldParentFolderUUID = folders[0].parentFolderID;
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where folderID = :FolderID", m_Realm);
cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParentFolderID));
cmd.Parameters.Add(new SqliteParameter(":FolderID", id));
if (ExecuteNonQuery(cmd, m_Connection) == 0)
return false;
}
IncrementFolderVersion(oldParentFolderUUID);
IncrementFolderVersion(newParentFolderID);
return true;
}
}
public class SqliteInventoryHandler<T> : SQLiteGenericTableHandler<T> where T: class, new()
{
public SqliteInventoryHandler(string c, string t, string m) : base(c, t, m) {}
protected bool IncrementFolderVersion(UUID folderID)
{
return IncrementFolderVersion(folderID.ToString());
}
protected bool IncrementFolderVersion(string folderID)
{
// m_log.DebugFormat("[MYSQL ITEM HANDLER]: Incrementing version on folder {0}", folderID);
// Util.PrintCallStack();
using (SqliteCommand cmd = new SqliteCommand())
{
cmd.CommandText = "update inventoryfolders set version=version+1 where folderID = ?folderID";
cmd.Parameters.Add(new SqliteParameter(":folderID", folderID));
try
{
cmd.ExecuteNonQuery();
}
catch (Exception)
{
return false;
}
}
return true;
}
}
}

View File

@@ -49,7 +49,7 @@ using OpenSim.Data.SQLite;
namespace OpenSim.Data.Tests
{
[TestFixture(Description = "Asset store tests (SQLite)")]
public class SQLiteAssetTests : AssetTests<SqliteConnection, SQLiteAssetData>
public class SQLiteAssetTests : AssetTests<SqliteConnection, SQLiteAssetData>
{
}

View File

@@ -33,6 +33,7 @@ using NUnit.Framework;
using NUnit.Framework.Constraints;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Tests.Common;
using log4net;
using System.Data;
using System.Data.Common;
@@ -43,6 +44,12 @@ namespace OpenSim.Data.Tests
/// <summary>This is a base class for testing any Data service for any DBMS.
/// Requires NUnit 2.5 or better (to support the generics).
/// </summary>
/// <remarks>
/// FIXME: Should extend OpenSimTestCase but compile on mono 2.4.3 currently fails with
/// AssetTests`2 : System.MemberAccessException : Cannot create an instance of OpenSim.Data.Tests.AssetTests`2[TConn,TAssetData] because Type.ContainsGenericParameters is true.
/// and similar on EstateTests, InventoryTests and RegionTests.
/// Runs fine with mono 2.10.8.1, so easiest thing is to wait until min Mono version uplifts.
/// </remarks>
/// <typeparam name="TConn"></typeparam>
/// <typeparam name="TService"></typeparam>
public class BasicDataServiceTest<TConn, TService>

View File

@@ -36,6 +36,7 @@ using NUnit.Framework;
using NUnit.Framework.Constraints;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Tests.Common;
namespace OpenSim.Data.Tests
{
@@ -254,7 +255,7 @@ namespace OpenSim.Data.Tests
}
[TestFixture]
public class PropertyCompareConstraintTest
public class PropertyCompareConstraintTest : OpenSimTestCase
{
public class HasInt
{

View File

@@ -34,6 +34,7 @@ using System.Text;
using NUnit.Framework;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Tests.Common;
namespace OpenSim.Data.Tests
{
@@ -158,7 +159,7 @@ namespace OpenSim.Data.Tests
}
[TestFixture]
public class PropertyScramblerTests
public class PropertyScramblerTests : OpenSimTestCase
{
[Test]
public void TestScramble()

View File

@@ -59,5 +59,5 @@ using System.Runtime.InteropServices;
// Revision
//
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.AssetLoader.Filesystem")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("8cb9cf69-4771-4d3a-a2ba-bac7230de326")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using Nini.Config;
using log4net;
using OpenMetaverse;
namespace OpenSim.Framework
{
public class AssetPermissions
{
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
private bool[] m_DisallowExport, m_DisallowImport;
private string[] m_AssetTypeNames;
public AssetPermissions(IConfig config)
{
Type enumType = typeof(AssetType);
m_AssetTypeNames = Enum.GetNames(enumType);
for (int i = 0; i < m_AssetTypeNames.Length; i++)
m_AssetTypeNames[i] = m_AssetTypeNames[i].ToLower();
int n = Enum.GetValues(enumType).Length;
m_DisallowExport = new bool[n];
m_DisallowImport = new bool[n];
LoadPermsFromConfig(config, "DisallowExport", m_DisallowExport);
LoadPermsFromConfig(config, "DisallowImport", m_DisallowImport);
}
private void LoadPermsFromConfig(IConfig assetConfig, string variable, bool[] bitArray)
{
if (assetConfig == null)
return;
string perms = assetConfig.GetString(variable, String.Empty);
string[] parts = perms.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in parts)
{
int index = Array.IndexOf(m_AssetTypeNames, s.Trim().ToLower());
if (index >= 0)
bitArray[index] = true;
else
m_log.WarnFormat("[Asset Permissions]: Invalid AssetType {0}", s);
}
}
public bool AllowedExport(sbyte type)
{
string assetTypeName = ((AssetType)type).ToString();
int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower());
if (index >= 0 && m_DisallowExport[index])
{
m_log.DebugFormat("[Asset Permissions]: Export denied: configuration does not allow export of AssetType {0}", assetTypeName);
return false;
}
return true;
}
public bool AllowedImport(sbyte type)
{
string assetTypeName = ((AssetType)type).ToString();
int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower());
if (index >= 0 && m_DisallowImport[index])
{
m_log.DebugFormat("[Asset Permissions]: Import denied: configuration does not allow import of AssetType {0}", assetTypeName);
return false;
}
return true;
}
}
}

View File

@@ -330,6 +330,9 @@ namespace OpenSim.Framework
SetVisualParams(visualParams);
}
/// <summary>
/// Set avatar height by a calculation based on their visual parameters.
/// </summary>
public virtual void SetHeight()
{
// Start with shortest possible female avatar height

View File

@@ -306,6 +306,8 @@ namespace OpenSim.Framework
public AgentGroupData[] Groups;
public Animation[] Anims;
public Animation DefaultAnim = null;
public Animation AnimState = null;
public UUID GranterID;
@@ -390,6 +392,16 @@ namespace OpenSim.Framework
args["animations"] = anims;
}
if (DefaultAnim != null)
{
args["default_animation"] = DefaultAnim.PackUpdateMessage();
}
if (AnimState != null)
{
args["animation_state"] = AnimState.PackUpdateMessage();
}
if (Appearance != null)
args["packed_appearance"] = Appearance.Pack();
@@ -583,6 +595,30 @@ namespace OpenSim.Framework
}
}
if (args["default_animation"] != null)
{
try
{
DefaultAnim = new Animation((OSDMap)args["default_animation"]);
}
catch
{
DefaultAnim = null;
}
}
if (args["animation_state"] != null)
{
try
{
AnimState = new Animation((OSDMap)args["animation_state"]);
}
catch
{
AnimState = null;
}
}
//if ((args["agent_textures"] != null) && (args["agent_textures"]).Type == OSDType.Array)
//{
// OSDArray textures = (OSDArray)(args["agent_textures"]);

View File

@@ -33,7 +33,8 @@ namespace OpenSim.Framework.Client
{
event ChatMessage OnChatFromClient;
void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source,
byte audible);
void SendChatMessage(
string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, UUID ownerID, byte source,
byte audible);
}
}
}

View File

@@ -32,12 +32,12 @@ using System.Runtime.InteropServices;
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly : AssemblyTitle("OpenGrid.Framework.Communications")]
[assembly : AssemblyTitle("OpenSim.Framework.Communications")]
[assembly : AssemblyDescription("")]
[assembly : AssemblyConfiguration("")]
[assembly : AssemblyCompany("http://opensimulator.org")]
[assembly : AssemblyProduct("OpenGrid.Framework.Communications")]
[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
[assembly : AssemblyProduct("OpenSim")]
[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers")]
[assembly : AssemblyTrademark("")]
[assembly : AssemblyCulture("")]
@@ -61,5 +61,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.Configuration.HTTP")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator develoeprs")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("cb78b672-d000-4f93-88f9-dae151cc0061")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.Configuration.XML")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("eeb880df-0112-4c3d-87ed-b2108d614c55")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -39,7 +39,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly : AssemblyProduct("ServerConsole")]
[assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
[assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -55,4 +55,4 @@ using System.Runtime.InteropServices;
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyVersion("0.7.5.*")]

View File

@@ -83,7 +83,8 @@ namespace OpenSim.Framework.Console
= "To enter an argument that contains spaces, surround the argument with double quotes.\nFor example, show object name \"My long object name\"\n";
public const string ItemHelpText
= "For more information, type 'help <item>' where <item> is one of the following:";
= @"For more information, type 'help all' to get a list of all commands,
or type help <item>' where <item> is one of the following:";
/// <value>
/// Commands organized by keyword in a tree
@@ -109,19 +110,48 @@ namespace OpenSim.Framework.Console
// Remove initial help keyword
helpParts.RemoveAt(0);
help.Add(""); // Will become a newline.
// General help
if (helpParts.Count == 0)
{
help.Add(""); // Will become a newline.
help.Add(GeneralHelpText);
help.Add(ItemHelpText);
help.AddRange(CollectModulesHelp(tree));
}
else if (helpParts.Count == 1 && helpParts[0] == "all")
{
help.AddRange(CollectAllCommandsHelp());
}
else
{
help.AddRange(CollectHelp(helpParts));
}
help.Add(""); // Will become a newline.
return help;
}
/// <summary>
/// Collects the help from all commands and return in alphabetical order.
/// </summary>
/// <returns></returns>
private List<string> CollectAllCommandsHelp()
{
List<string> help = new List<string>();
lock (m_modulesCommands)
{
foreach (List<CommandInfo> commands in m_modulesCommands.Values)
{
var ourHelpText = commands.ConvertAll(c => string.Format("{0} - {1}", c.help_text, c.long_help));
help.AddRange(ourHelpText);
}
}
help.Sort();
return help;
}
@@ -167,14 +197,11 @@ namespace OpenSim.Framework.Console
string descriptiveHelp = commandInfo.descriptive_help;
// If we do have some descriptive help then insert a spacing line before and after for readability.
// If we do have some descriptive help then insert a spacing line before for readability.
if (descriptiveHelp != string.Empty)
help.Add(string.Empty);
help.Add(commandInfo.descriptive_help);
if (descriptiveHelp != string.Empty)
help.Add(string.Empty);
}
else
{
@@ -711,7 +738,7 @@ namespace OpenSim.Framework.Console
/// </summary>
public void Prompt()
{
string line = ReadLine(m_defaultPrompt + "# ", true, true);
string line = ReadLine(DefaultPrompt + "# ", true, true);
if (line != String.Empty)
Output("Invalid command");

View File

@@ -43,15 +43,7 @@ namespace OpenSim.Framework.Console
public object ConsoleScene { get; set; }
/// <summary>
/// The default prompt text.
/// </summary>
public string DefaultPrompt
{
set { m_defaultPrompt = value; }
get { return m_defaultPrompt; }
}
protected string m_defaultPrompt;
public string DefaultPrompt { get; set; }
public ConsoleBase(string defaultPrompt)
{

View File

@@ -56,7 +56,7 @@ namespace OpenSim.Framework.Console
public List<ConsoleDisplayTableRow> Rows { get; private set; }
/// <summary>
/// Number of spaces to indent the table.
/// Number of spaces to indent the whole table.
/// </summary>
public int Indent { get; set; }
@@ -84,7 +84,7 @@ namespace OpenSim.Framework.Console
Columns.Add(new ConsoleDisplayTableColumn(name, width));
}
public void AddRow(params string[] cells)
public void AddRow(params object[] cells)
{
Rows.Add(new ConsoleDisplayTableRow(cells));
}
@@ -113,7 +113,8 @@ namespace OpenSim.Framework.Console
for (int i = 0; i < Columns.Count; i++)
{
formatSb.Append(' ', TableSpacing);
if (i != 0)
formatSb.Append(' ', TableSpacing);
// Can only do left formatting for now
formatSb.AppendFormat("{{{0},-{1}}}", i, Columns[i].Width);
@@ -139,16 +140,16 @@ namespace OpenSim.Framework.Console
public struct ConsoleDisplayTableRow
{
public List<string> Cells { get; private set; }
public List<object> Cells { get; private set; }
public ConsoleDisplayTableRow(List<string> cells) : this()
public ConsoleDisplayTableRow(List<object> cells) : this()
{
Cells = cells;
}
public ConsoleDisplayTableRow(params string[] cells) : this()
public ConsoleDisplayTableRow(params object[] cells) : this()
{
Cells = new List<string>(cells);
Cells = new List<object>(cells);
}
}
}

View File

@@ -0,0 +1,248 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using log4net;
using OpenMetaverse;
namespace OpenSim.Framework.Console
{
public class ConsoleUtil
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public const int LocalIdNotFound = 0;
/// <summary>
/// Used by modules to display stock co-ordinate help, though possibly this should be under some general section
/// rather than in each help summary.
/// </summary>
public const string CoordHelp
= @"Each component of the coord is comma separated. There must be no spaces between the commas.
If you don't care about the z component you can simply omit it.
If you don't care about the x or y components then you can leave them blank (though a comma is still required)
If you want to specify the maxmimum value of a component then you can use ~ instead of a number
If you want to specify the minimum value of a component then you can use -~ instead of a number
e.g.
delete object pos 20,20,20 to 40,40,40
delete object pos 20,20 to 40,40
delete object pos ,20,20 to ,40,40
delete object pos ,,30 to ,,~
delete object pos ,,-~ to ,,30";
public const string MinRawConsoleVectorValue = "-~";
public const string MaxRawConsoleVectorValue = "~";
public const string VectorSeparator = ",";
public static char[] VectorSeparatorChars = VectorSeparator.ToCharArray();
/// <summary>
/// Check if the given file path exists.
/// </summary>
/// <remarks>If not, warning is printed to the given console.</remarks>
/// <returns>true if the file does not exist, false otherwise.</returns>
/// <param name='console'></param>
/// <param name='path'></param>
public static bool CheckFileDoesNotExist(ICommandConsole console, string path)
{
if (File.Exists(path))
{
console.OutputFormat("File {0} already exists. Please move or remove it.", path);
return false;
}
return true;
}
/// <summary>
/// Try to parse a console UUID from the console.
/// </summary>
/// <remarks>
/// Will complain to the console if parsing fails.
/// </remarks>
/// <returns></returns>
/// <param name='console'>If null then no complaint is printed.</param>
/// <param name='rawUuid'></param>
/// <param name='uuid'></param>
public static bool TryParseConsoleUuid(ICommandConsole console, string rawUuid, out UUID uuid)
{
if (!UUID.TryParse(rawUuid, out uuid))
{
if (console != null)
console.OutputFormat("ERROR: {0} is not a valid uuid", rawUuid);
return false;
}
return true;
}
public static bool TryParseConsoleLocalId(ICommandConsole console, string rawLocalId, out uint localId)
{
if (!uint.TryParse(rawLocalId, out localId))
{
if (console != null)
console.OutputFormat("ERROR: {0} is not a valid local id", localId);
return false;
}
if (localId == 0)
{
if (console != null)
console.OutputFormat("ERROR: {0} is not a valid local id - it must be greater than 0", localId);
return false;
}
return true;
}
/// <summary>
/// Tries to parse the input as either a UUID or a local ID.
/// </summary>
/// <returns>true if parsing succeeded, false otherwise.</returns>
/// <param name='console'></param>
/// <param name='rawId'></param>
/// <param name='uuid'></param>
/// <param name='localId'>
/// Will be set to ConsoleUtil.LocalIdNotFound if parsing result was a UUID or no parse succeeded.
/// </param>
public static bool TryParseConsoleId(ICommandConsole console, string rawId, out UUID uuid, out uint localId)
{
if (TryParseConsoleUuid(null, rawId, out uuid))
{
localId = LocalIdNotFound;
return true;
}
if (TryParseConsoleLocalId(null, rawId, out localId))
{
return true;
}
if (console != null)
console.OutputFormat("ERROR: {0} is not a valid UUID or local id", rawId);
return false;
}
/// <summary>
/// Convert a minimum vector input from the console to an OpenMetaverse.Vector3
/// </summary>
/// <param name='console'>Can be null if no console is available.</param>
/// <param name='rawConsoleVector'>/param>
/// <param name='vector'></param>
/// <returns></returns>
public static bool TryParseConsoleInt(ICommandConsole console, string rawConsoleInt, out int i)
{
if (!int.TryParse(rawConsoleInt, out i))
{
if (console != null)
console.OutputFormat("ERROR: {0} is not a valid integer", rawConsoleInt);
return false;
}
return true;
}
/// <summary>
/// Convert a minimum vector input from the console to an OpenMetaverse.Vector3
/// </summary>
/// <param name='rawConsoleVector'>/param>
/// <param name='vector'></param>
/// <returns></returns>
public static bool TryParseConsoleMinVector(string rawConsoleVector, out Vector3 vector)
{
return TryParseConsoleVector(rawConsoleVector, c => float.MinValue.ToString(), out vector);
}
/// <summary>
/// Convert a maximum vector input from the console to an OpenMetaverse.Vector3
/// </summary>
/// <param name='rawConsoleVector'>/param>
/// <param name='vector'></param>
/// <returns></returns>
public static bool TryParseConsoleMaxVector(string rawConsoleVector, out Vector3 vector)
{
return TryParseConsoleVector(rawConsoleVector, c => float.MaxValue.ToString(), out vector);
}
/// <summary>
/// Convert a vector input from the console to an OpenMetaverse.Vector3
/// </summary>
/// <param name='rawConsoleVector'>
/// A string in the form <x>,<y>,<z> where there is no space between values.
/// Any component can be missing (e.g. ,,40). blankComponentFunc is invoked to replace the blank with a suitable value
/// Also, if the blank component is at the end, then the comma can be missed off entirely (e.g. 40,30 or 40)
/// The strings "~" and "-~" are valid in components. The first substitutes float.MaxValue whilst the second is float.MinValue
/// Other than that, component values must be numeric.
/// </param>
/// <param name='blankComponentFunc'></param>
/// <param name='vector'></param>
/// <returns></returns>
public static bool TryParseConsoleVector(
string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector3 vector)
{
List<string> components = rawConsoleVector.Split(VectorSeparatorChars).ToList();
if (components.Count < 1 || components.Count > 3)
{
vector = Vector3.Zero;
return false;
}
for (int i = components.Count; i < 3; i++)
components.Add("");
List<string> semiDigestedComponents
= components.ConvertAll<string>(
c =>
{
if (c == "")
return blankComponentFunc.Invoke(c);
else if (c == MaxRawConsoleVectorValue)
return float.MaxValue.ToString();
else if (c == MinRawConsoleVectorValue)
return float.MinValue.ToString();
else
return c;
});
string semiDigestedConsoleVector = string.Join(VectorSeparator, semiDigestedComponents.ToArray());
// m_log.DebugFormat("[CONSOLE UTIL]: Parsing {0} into OpenMetaverse.Vector3", semiDigestedConsoleVector);
return Vector3.TryParse(semiDigestedConsoleVector, out vector);
}
}
}

View File

@@ -46,13 +46,18 @@ namespace OpenSim.Framework.Console
public ICommands Commands { get { return m_commands; } }
public string DefaultPrompt { get; set; }
public void Prompt() {}
public void RunCommand(string cmd) {}
public string ReadLine(string p, bool isCommand, bool e) { return ""; }
public object ConsoleScene { get { return null; } }
public object ConsoleScene {
get { return null; }
set {}
}
public void Output(string text, string level) {}
public void Output(string text) {}

View File

@@ -31,6 +31,7 @@ namespace OpenSim.Framework
public class Constants
{
public const uint RegionSize = 256;
public const uint RegionHeight = 4096;
public const byte TerrainPatchSize = 16;
public const string DefaultTexture = "89556747-24cb-43ed-920b-47caed15465f";

View File

@@ -0,0 +1,508 @@
/*
* Copyright (c) 2008, openmetaverse.org, http://opensimulator.org/
* All rights reserved.
*
* - Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* - Neither the name of the openmetaverse.org nor the names
* of its contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Threading;
using System.Collections.Generic;
namespace OpenSim.Framework
{
/// <summary>
/// A double dictionary that is thread abort safe.
/// </summary>
/// <remarks>
/// This adapts OpenMetaverse.DoubleDictionary to be thread-abort safe by acquiring ReaderWriterLockSlim within
/// a finally section (which can't be interrupted by Thread.Abort()).
/// </remarks>
public class DoubleDictionaryThreadAbortSafe<TKey1, TKey2, TValue>
{
Dictionary<TKey1, TValue> Dictionary1;
Dictionary<TKey2, TValue> Dictionary2;
ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();
public DoubleDictionaryThreadAbortSafe()
{
Dictionary1 = new Dictionary<TKey1,TValue>();
Dictionary2 = new Dictionary<TKey2,TValue>();
}
public DoubleDictionaryThreadAbortSafe(int capacity)
{
Dictionary1 = new Dictionary<TKey1, TValue>(capacity);
Dictionary2 = new Dictionary<TKey2, TValue>(capacity);
}
public void Add(TKey1 key1, TKey2 key2, TValue value)
{
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterWriteLock();
gotLock = true;
}
if (Dictionary1.ContainsKey(key1))
{
if (!Dictionary2.ContainsKey(key2))
throw new ArgumentException("key1 exists in the dictionary but not key2");
}
else if (Dictionary2.ContainsKey(key2))
{
if (!Dictionary1.ContainsKey(key1))
throw new ArgumentException("key2 exists in the dictionary but not key1");
}
Dictionary1[key1] = value;
Dictionary2[key2] = value;
}
finally
{
if (gotLock)
rwLock.ExitWriteLock();
}
}
public bool Remove(TKey1 key1, TKey2 key2)
{
bool success;
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterWriteLock();
gotLock = true;
}
Dictionary1.Remove(key1);
success = Dictionary2.Remove(key2);
}
finally
{
if (gotLock)
rwLock.ExitWriteLock();
}
return success;
}
public bool Remove(TKey1 key1)
{
bool found = false;
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterWriteLock();
gotLock = true;
}
// This is an O(n) operation!
TValue value;
if (Dictionary1.TryGetValue(key1, out value))
{
foreach (KeyValuePair<TKey2, TValue> kvp in Dictionary2)
{
if (kvp.Value.Equals(value))
{
Dictionary1.Remove(key1);
Dictionary2.Remove(kvp.Key);
found = true;
break;
}
}
}
}
finally
{
if (gotLock)
rwLock.ExitWriteLock();
}
return found;
}
public bool Remove(TKey2 key2)
{
bool found = false;
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterWriteLock();
gotLock = true;
}
// This is an O(n) operation!
TValue value;
if (Dictionary2.TryGetValue(key2, out value))
{
foreach (KeyValuePair<TKey1, TValue> kvp in Dictionary1)
{
if (kvp.Value.Equals(value))
{
Dictionary2.Remove(key2);
Dictionary1.Remove(kvp.Key);
found = true;
break;
}
}
}
}
finally
{
if (gotLock)
rwLock.ExitWriteLock();
}
return found;
}
public void Clear()
{
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterWriteLock();
gotLock = true;
}
Dictionary1.Clear();
Dictionary2.Clear();
}
finally
{
if (gotLock)
rwLock.ExitWriteLock();
}
}
public int Count
{
get { return Dictionary1.Count; }
}
public bool ContainsKey(TKey1 key)
{
return Dictionary1.ContainsKey(key);
}
public bool ContainsKey(TKey2 key)
{
return Dictionary2.ContainsKey(key);
}
public bool TryGetValue(TKey1 key, out TValue value)
{
bool success;
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterReadLock();
gotLock = true;
}
success = Dictionary1.TryGetValue(key, out value);
}
finally
{
if (gotLock)
rwLock.ExitReadLock();
}
return success;
}
public bool TryGetValue(TKey2 key, out TValue value)
{
bool success;
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterReadLock();
gotLock = true;
}
success = Dictionary2.TryGetValue(key, out value);
}
finally
{
if (gotLock)
rwLock.ExitReadLock();
}
return success;
}
public void ForEach(Action<TValue> action)
{
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterReadLock();
gotLock = true;
}
foreach (TValue value in Dictionary1.Values)
action(value);
}
finally
{
if (gotLock)
rwLock.ExitReadLock();
}
}
public void ForEach(Action<KeyValuePair<TKey1, TValue>> action)
{
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterReadLock();
gotLock = true;
}
foreach (KeyValuePair<TKey1, TValue> entry in Dictionary1)
action(entry);
}
finally
{
if (gotLock)
rwLock.ExitReadLock();
}
}
public void ForEach(Action<KeyValuePair<TKey2, TValue>> action)
{
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterReadLock();
gotLock = true;
}
foreach (KeyValuePair<TKey2, TValue> entry in Dictionary2)
action(entry);
}
finally
{
if (gotLock)
rwLock.ExitReadLock();
}
}
public TValue FindValue(Predicate<TValue> predicate)
{
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterReadLock();
gotLock = true;
}
foreach (TValue value in Dictionary1.Values)
{
if (predicate(value))
return value;
}
}
finally
{
if (gotLock)
rwLock.ExitReadLock();
}
return default(TValue);
}
public IList<TValue> FindAll(Predicate<TValue> predicate)
{
IList<TValue> list = new List<TValue>();
bool gotLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterReadLock();
gotLock = true;
}
foreach (TValue value in Dictionary1.Values)
{
if (predicate(value))
list.Add(value);
}
}
finally
{
if (gotLock)
rwLock.ExitReadLock();
}
return list;
}
public int RemoveAll(Predicate<TValue> predicate)
{
IList<TKey1> list = new List<TKey1>();
bool gotUpgradeableLock = false;
try
{
// Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing
// the acquision inside the main try. The inner finally block is needed because thread aborts cannot
// interrupt code in these blocks (hence gotLock is guaranteed to be set correctly).
try {}
finally
{
rwLock.EnterUpgradeableReadLock();
gotUpgradeableLock = true;
}
foreach (KeyValuePair<TKey1, TValue> kvp in Dictionary1)
{
if (predicate(kvp.Value))
list.Add(kvp.Key);
}
IList<TKey2> list2 = new List<TKey2>(list.Count);
foreach (KeyValuePair<TKey2, TValue> kvp in Dictionary2)
{
if (predicate(kvp.Value))
list2.Add(kvp.Key);
}
bool gotWriteLock = false;
try
{
try {}
finally
{
rwLock.EnterUpgradeableReadLock();
gotWriteLock = true;
}
for (int i = 0; i < list.Count; i++)
Dictionary1.Remove(list[i]);
for (int i = 0; i < list2.Count; i++)
Dictionary2.Remove(list2[i]);
}
finally
{
if (gotWriteLock)
rwLock.ExitWriteLock();
}
}
finally
{
if (gotUpgradeableLock)
rwLock.ExitUpgradeableReadLock();
}
return list.Count;
}
}
}

View File

@@ -44,7 +44,6 @@ namespace OpenSim.Framework
public Vector3 Position;
public byte[] binaryBucket;
public uint ParentEstateID;
public Guid RegionID;
public uint timestamp;
@@ -58,7 +57,7 @@ namespace OpenSim.Framework
string _fromAgentName, UUID _toAgentID,
byte _dialog, bool _fromGroup, string _message,
UUID _imSessionID, bool _offline, Vector3 _position,
byte[] _binaryBucket)
byte[] _binaryBucket, bool addTimestamp)
{
fromAgentID = _fromAgentID.Guid;
fromAgentName = _fromAgentName;
@@ -79,7 +78,9 @@ namespace OpenSim.Framework
ParentEstateID = scene.RegionInfo.EstateSettings.ParentEstateID;
RegionID = scene.RegionInfo.RegionSettings.RegionUUID.Guid;
}
timestamp = (uint)Util.UnixTimeSinceEpoch();
if (addTimestamp)
timestamp = (uint)Util.UnixTimeSinceEpoch();
}
public GridInstantMessage(IScene scene, UUID _fromAgentID,
@@ -87,7 +88,7 @@ namespace OpenSim.Framework
string _message, bool _offline,
Vector3 _position) : this(scene, _fromAgentID, _fromAgentName,
_toAgentID, _dialog, false, _message,
_fromAgentID ^ _toAgentID, _offline, _position, new byte[0])
_fromAgentID ^ _toAgentID, _offline, _position, new byte[0], true)
{
}
}

View File

@@ -805,8 +805,23 @@ namespace OpenSim.Framework
event Action<IClientAPI> OnRegionHandShakeReply;
event GenericCall1 OnRequestWearables;
event Action<IClientAPI, bool> OnCompleteMovementToRegion;
/// <summary>
/// Called when an AgentUpdate message is received and before OnAgentUpdate.
/// </summary>
/// <remarks>
/// Listeners must not retain a reference to AgentUpdateArgs since this object may be reused for subsequent AgentUpdates.
/// </remarks>
event UpdateAgent OnPreAgentUpdate;
/// <summary>
/// Called when an AgentUpdate message is received and after OnPreAgentUpdate.
/// </summary>
/// <remarks>
/// Listeners must not retain a reference to AgentUpdateArgs since this object may be reused for subsequent AgentUpdates.
/// </remarks>
event UpdateAgent OnAgentUpdate;
event AgentRequestSit OnAgentRequestSit;
event AgentSit OnAgentSit;
event AvatarPickerRequest OnAvatarPickerRequest;
@@ -1084,8 +1099,20 @@ namespace OpenSim.Framework
void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs);
void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args);
void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source,
byte audible);
/// <summary>
/// Send chat to the viewer.
/// </summary>
/// <param name='message'></param>
/// <param name='type'></param>
/// <param name='fromPos'></param>
/// <param name='fromName'></param>
/// <param name='fromAgentID'></param>
/// <param name='ownerID'></param>
/// <param name='source'></param>
/// <param name='audible'></param>
void SendChatMessage(
string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, UUID ownerID, byte source,
byte audible);
void SendInstantMessage(GridInstantMessage im);

View File

@@ -82,6 +82,11 @@ namespace OpenSim.Framework
ICommands Commands { get; }
/// <summary>
/// The default prompt text.
/// </summary>
string DefaultPrompt { get; set; }
/// <summary>
/// Display a command prompt on the console and wait for user input
/// </summary>

View File

@@ -32,7 +32,7 @@ namespace OpenSim.Framework
{
public interface IConsole
{
object ConsoleScene { get; }
object ConsoleScene { get; set; }
void Output(string text, string level);
void Output(string text);

View File

@@ -87,16 +87,7 @@ namespace OpenSim.Framework
protected string m_creatorId;
/// <value>
/// The UUID for the creator. This may be different from the canonical CreatorId. This property is used
/// for communication with the client over the Second Life protocol, since that protocol can only understand
/// UUIDs. As this is a basic framework class, this means that both the string creator id and the uuid
/// reference have to be settable separately
///
/// Database plugins don't need to set this, it will be set by
/// upstream code (or set by the get accessor if left unset).
///
/// XXX: An alternative to having a separate uuid property would be to hash the CreatorId appropriately
/// every time there was communication with a UUID-only client. This may be much more expensive.
/// The CreatorId expressed as a UUID.tely
/// </value>
public UUID CreatorIdAsUuid
{
@@ -109,20 +100,18 @@ namespace OpenSim.Framework
return m_creatorIdAsUuid;
}
set
{
m_creatorIdAsUuid = value;
}
}
protected UUID m_creatorIdAsUuid = UUID.Zero;
protected string m_creatorData = string.Empty;
/// <summary>
/// Extended creator information of the form <profile url>;<name>
/// </summary>
public string CreatorData // = <profile url>;<name>
{
get { return m_creatorData; }
set { m_creatorData = value; }
}
protected string m_creatorData = string.Empty;
/// <summary>
/// Used by the DB layer to retrieve / store the entire user identification.
@@ -162,7 +151,6 @@ namespace OpenSim.Framework
name = parts[2];
m_creatorData += ';' + name;
}
}
}

View File

@@ -49,8 +49,8 @@ namespace OpenSim.Framework
// use only one serializer to give the runtime a chance to
// optimize it (it won't do that if you use a new instance
// every time)
private static XmlSerializer serializer = new XmlSerializer(typeof (LandData));
private static XmlSerializer serializer = new XmlSerializer(typeof(LandData));
private Vector3 _AABBMax = new Vector3();
private Vector3 _AABBMin = new Vector3();
private int _area = 0;
@@ -65,11 +65,11 @@ namespace OpenSim.Framework
private byte[] _bitmap = new byte[512];
private string _description = String.Empty;
private uint _flags = (uint) ParcelFlags.AllowFly | (uint) ParcelFlags.AllowLandmark |
(uint) ParcelFlags.AllowAPrimitiveEntry |
(uint) ParcelFlags.AllowDeedToGroup | (uint) ParcelFlags.AllowTerraform |
(uint) ParcelFlags.CreateObjects | (uint) ParcelFlags.AllowOtherScripts |
(uint) ParcelFlags.SoundLocal | (uint) ParcelFlags.AllowVoiceChat;
private uint _flags = (uint)ParcelFlags.AllowFly | (uint)ParcelFlags.AllowLandmark |
(uint)ParcelFlags.AllowAPrimitiveEntry |
(uint)ParcelFlags.AllowDeedToGroup | (uint)ParcelFlags.AllowTerraform |
(uint)ParcelFlags.CreateObjects | (uint)ParcelFlags.AllowOtherScripts |
(uint)ParcelFlags.SoundLocal | (uint)ParcelFlags.AllowVoiceChat;
private byte _landingType = 0;
private string _name = "Your Parcel";
@@ -97,16 +97,36 @@ namespace OpenSim.Framework
private bool _mediaLoop = false;
private bool _obscureMusic = false;
private bool _obscureMedia = false;
private float _dwell = 0;
/// <summary>
/// Traffic count of parcel
/// </summary>
[XmlIgnore]
public float Dwell
{
get
{
return _dwell;
}
set
{
_dwell = value;
}
}
/// <summary>
/// Whether to obscure parcel media URL
/// </summary>
[XmlIgnore]
public bool ObscureMedia {
get {
public bool ObscureMedia
{
get
{
return _obscureMedia;
}
set {
set
{
_obscureMedia = value;
}
}
@@ -115,11 +135,14 @@ namespace OpenSim.Framework
/// Whether to obscure parcel music URL
/// </summary>
[XmlIgnore]
public bool ObscureMusic {
get {
public bool ObscureMusic
{
get
{
return _obscureMusic;
}
set {
set
{
_obscureMusic = value;
}
}
@@ -128,11 +151,14 @@ namespace OpenSim.Framework
/// Whether to loop parcel media
/// </summary>
[XmlIgnore]
public bool MediaLoop {
get {
public bool MediaLoop
{
get
{
return _mediaLoop;
}
set {
set
{
_mediaLoop = value;
}
}
@@ -141,11 +167,14 @@ namespace OpenSim.Framework
/// Height of parcel media render
/// </summary>
[XmlIgnore]
public int MediaHeight {
get {
public int MediaHeight
{
get
{
return _mediaHeight;
}
set {
set
{
_mediaHeight = value;
}
}
@@ -154,11 +183,14 @@ namespace OpenSim.Framework
/// Width of parcel media render
/// </summary>
[XmlIgnore]
public int MediaWidth {
get {
public int MediaWidth
{
get
{
return _mediaWidth;
}
set {
set
{
_mediaWidth = value;
}
}
@@ -167,11 +199,14 @@ namespace OpenSim.Framework
/// Upper corner of the AABB for the parcel
/// </summary>
[XmlIgnore]
public Vector3 AABBMax {
get {
public Vector3 AABBMax
{
get
{
return _AABBMax;
}
set {
set
{
_AABBMax = value;
}
}
@@ -179,11 +214,14 @@ namespace OpenSim.Framework
/// Lower corner of the AABB for the parcel
/// </summary>
[XmlIgnore]
public Vector3 AABBMin {
get {
public Vector3 AABBMin
{
get
{
return _AABBMin;
}
set {
set
{
_AABBMin = value;
}
}
@@ -191,11 +229,14 @@ namespace OpenSim.Framework
/// <summary>
/// Area in meters^2 the parcel contains
/// </summary>
public int Area {
get {
public int Area
{
get
{
return _area;
}
set {
set
{
_area = value;
}
}
@@ -203,11 +244,14 @@ namespace OpenSim.Framework
/// <summary>
/// ID of auction (3rd Party Integration) when parcel is being auctioned
/// </summary>
public uint AuctionID {
get {
public uint AuctionID
{
get
{
return _auctionID;
}
set {
set
{
_auctionID = value;
}
}
@@ -215,11 +259,14 @@ namespace OpenSim.Framework
/// <summary>
/// UUID of authorized buyer of parcel. This is UUID.Zero if anyone can buy it.
/// </summary>
public UUID AuthBuyerID {
get {
public UUID AuthBuyerID
{
get
{
return _authBuyerID;
}
set {
set
{
_authBuyerID = value;
}
}
@@ -227,11 +274,14 @@ namespace OpenSim.Framework
/// <summary>
/// Category of parcel. Used for classifying the parcel in classified listings
/// </summary>
public ParcelCategory Category {
get {
public ParcelCategory Category
{
get
{
return _category;
}
set {
set
{
_category = value;
}
}
@@ -239,11 +289,14 @@ namespace OpenSim.Framework
/// <summary>
/// Date that the current owner purchased or claimed the parcel
/// </summary>
public int ClaimDate {
get {
public int ClaimDate
{
get
{
return _claimDate;
}
set {
set
{
_claimDate = value;
}
}
@@ -251,11 +304,14 @@ namespace OpenSim.Framework
/// <summary>
/// The last price that the parcel was sold at
/// </summary>
public int ClaimPrice {
get {
public int ClaimPrice
{
get
{
return _claimPrice;
}
set {
set
{
_claimPrice = value;
}
}
@@ -263,11 +319,14 @@ namespace OpenSim.Framework
/// <summary>
/// Global ID for the parcel. (3rd Party Integration)
/// </summary>
public UUID GlobalID {
get {
public UUID GlobalID
{
get
{
return _globalID;
}
set {
set
{
_globalID = value;
}
}
@@ -275,11 +334,14 @@ namespace OpenSim.Framework
/// <summary>
/// Unique ID of the Group that owns
/// </summary>
public UUID GroupID {
get {
public UUID GroupID
{
get
{
return _groupID;
}
set {
set
{
_groupID = value;
}
}
@@ -287,11 +349,14 @@ namespace OpenSim.Framework
/// <summary>
/// Returns true if the Land Parcel is owned by a group
/// </summary>
public bool IsGroupOwned {
get {
public bool IsGroupOwned
{
get
{
return _isGroupOwned;
}
set {
set
{
_isGroupOwned = value;
}
}
@@ -299,11 +364,14 @@ namespace OpenSim.Framework
/// <summary>
/// jp2 data for the image representative of the parcel in the parcel dialog
/// </summary>
public byte[] Bitmap {
get {
public byte[] Bitmap
{
get
{
return _bitmap;
}
set {
set
{
_bitmap = value;
}
}
@@ -311,11 +379,14 @@ namespace OpenSim.Framework
/// <summary>
/// Parcel Description
/// </summary>
public string Description {
get {
public string Description
{
get
{
return _description;
}
set {
set
{
_description = value;
}
}
@@ -323,11 +394,14 @@ namespace OpenSim.Framework
/// <summary>
/// Parcel settings. Access flags, Fly, NoPush, Voice, Scripts allowed, etc. ParcelFlags
/// </summary>
public uint Flags {
get {
public uint Flags
{
get
{
return _flags;
}
set {
set
{
_flags = value;
}
}
@@ -336,11 +410,14 @@ namespace OpenSim.Framework
/// Determines if people are able to teleport where they please on the parcel or if they
/// get constrainted to a specific point on teleport within the parcel
/// </summary>
public byte LandingType {
get {
public byte LandingType
{
get
{
return _landingType;
}
set {
set
{
_landingType = value;
}
}
@@ -348,11 +425,14 @@ namespace OpenSim.Framework
/// <summary>
/// Parcel Name
/// </summary>
public string Name {
get {
public string Name
{
get
{
return _name;
}
set {
set
{
_name = value;
}
}
@@ -360,11 +440,14 @@ namespace OpenSim.Framework
/// <summary>
/// Status of Parcel, Leased, Abandoned, For Sale
/// </summary>
public ParcelStatus Status {
get {
public ParcelStatus Status
{
get
{
return _status;
}
set {
set
{
_status = value;
}
}
@@ -372,11 +455,14 @@ namespace OpenSim.Framework
/// <summary>
/// Internal ID of the parcel. Sometimes the client will try to use this value
/// </summary>
public int LocalID {
get {
public int LocalID
{
get
{
return _localID;
}
set {
set
{
_localID = value;
}
}
@@ -384,11 +470,14 @@ namespace OpenSim.Framework
/// <summary>
/// Determines if we scale the media based on the surface it's on
/// </summary>
public byte MediaAutoScale {
get {
public byte MediaAutoScale
{
get
{
return _mediaAutoScale;
}
set {
set
{
_mediaAutoScale = value;
}
}
@@ -396,11 +485,14 @@ namespace OpenSim.Framework
/// <summary>
/// Texture Guid to replace with the output of the media stream
/// </summary>
public UUID MediaID {
get {
public UUID MediaID
{
get
{
return _mediaID;
}
set {
set
{
_mediaID = value;
}
}
@@ -408,11 +500,14 @@ namespace OpenSim.Framework
/// <summary>
/// URL to the media file to display
/// </summary>
public string MediaURL {
get {
public string MediaURL
{
get
{
return _mediaURL;
}
set {
set
{
_mediaURL = value;
}
}
@@ -432,11 +527,14 @@ namespace OpenSim.Framework
/// <summary>
/// URL to the shoutcast music stream to play on the parcel
/// </summary>
public string MusicURL {
get {
public string MusicURL
{
get
{
return _musicURL;
}
set {
set
{
_musicURL = value;
}
}
@@ -445,11 +543,14 @@ namespace OpenSim.Framework
/// Owner Avatar or Group of the parcel. Naturally, all land masses must be
/// owned by someone
/// </summary>
public UUID OwnerID {
get {
public UUID OwnerID
{
get
{
return _ownerID;
}
set {
set
{
_ownerID = value;
}
}
@@ -457,11 +558,14 @@ namespace OpenSim.Framework
/// <summary>
/// List of access data for the parcel. User data, some bitflags, and a time
/// </summary>
public List<LandAccessEntry> ParcelAccessList {
get {
public List<LandAccessEntry> ParcelAccessList
{
get
{
return _parcelAccessList;
}
set {
set
{
_parcelAccessList = value;
}
}
@@ -469,11 +573,14 @@ namespace OpenSim.Framework
/// <summary>
/// How long in hours a Pass to the parcel is given
/// </summary>
public float PassHours {
get {
public float PassHours
{
get
{
return _passHours;
}
set {
set
{
_passHours = value;
}
}
@@ -481,11 +588,14 @@ namespace OpenSim.Framework
/// <summary>
/// Price to purchase a Pass to a restricted parcel
/// </summary>
public int PassPrice {
get {
public int PassPrice
{
get
{
return _passPrice;
}
set {
set
{
_passPrice = value;
}
}
@@ -493,11 +603,14 @@ namespace OpenSim.Framework
/// <summary>
/// When the parcel is being sold, this is the price to purchase the parcel
/// </summary>
public int SalePrice {
get {
public int SalePrice
{
get
{
return _salePrice;
}
set {
set
{
_salePrice = value;
}
}
@@ -506,11 +619,14 @@ namespace OpenSim.Framework
/// Number of meters^2 in the Simulator
/// </summary>
[XmlIgnore]
public int SimwideArea {
get {
public int SimwideArea
{
get
{
return _simwideArea;
}
set {
set
{
_simwideArea = value;
}
}
@@ -519,11 +635,14 @@ namespace OpenSim.Framework
/// Number of SceneObjectPart in the Simulator
/// </summary>
[XmlIgnore]
public int SimwidePrims {
get {
public int SimwidePrims
{
get
{
return _simwidePrims;
}
set {
set
{
_simwidePrims = value;
}
}
@@ -531,11 +650,14 @@ namespace OpenSim.Framework
/// <summary>
/// ID of the snapshot used in the client parcel dialog of the parcel
/// </summary>
public UUID SnapshotID {
get {
public UUID SnapshotID
{
get
{
return _snapshotID;
}
set {
set
{
_snapshotID = value;
}
}
@@ -544,11 +666,14 @@ namespace OpenSim.Framework
/// When teleporting is restricted to a certain point, this is the location
/// that the user will be redirected to
/// </summary>
public Vector3 UserLocation {
get {
public Vector3 UserLocation
{
get
{
return _userLocation;
}
set {
set
{
_userLocation = value;
}
}
@@ -557,11 +682,14 @@ namespace OpenSim.Framework
/// When teleporting is restricted to a certain point, this is the rotation
/// that the user will be positioned
/// </summary>
public Vector3 UserLookAt {
get {
public Vector3 UserLookAt
{
get
{
return _userLookAt;
}
set {
set
{
_userLookAt = value;
}
}
@@ -570,11 +698,14 @@ namespace OpenSim.Framework
/// Autoreturn number of minutes to return SceneObjectGroup that are owned by someone who doesn't own
/// the parcel and isn't set to the same 'group' as the parcel.
/// </summary>
public int OtherCleanTime {
get {
public int OtherCleanTime
{
get
{
return _otherCleanTime;
}
set {
set
{
_otherCleanTime = value;
}
}
@@ -582,11 +713,14 @@ namespace OpenSim.Framework
/// <summary>
/// parcel media description
/// </summary>
public string MediaDescription {
get {
public string MediaDescription
{
get
{
return _mediaDescription;
}
set {
set
{
_mediaDescription = value;
}
}
@@ -622,7 +756,7 @@ namespace OpenSim.Framework
landData._mediaURL = _mediaURL;
landData._musicURL = _musicURL;
landData._ownerID = _ownerID;
landData._bitmap = (byte[]) _bitmap.Clone();
landData._bitmap = (byte[])_bitmap.Clone();
landData._description = _description;
landData._flags = _flags;
landData._name = _name;
@@ -643,6 +777,7 @@ namespace OpenSim.Framework
landData._obscureMedia = _obscureMedia;
landData._simwideArea = _simwideArea;
landData._simwidePrims = _simwidePrims;
landData._dwell = _dwell;
landData._parcelAccessList.Clear();
foreach (LandAccessEntry entry in _parcelAccessList)

View File

@@ -49,7 +49,11 @@ namespace OpenSim.Framework.Monitoring
Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0));
sb.AppendFormat(
"OpenSim object memory churn : {0} MB/s\n",
"OpenSim last object memory churn : {0} MB/s\n",
Math.Round((MemoryWatchdog.LastMemoryChurn * 1000) / 1024.0 / 1024, 3));
sb.AppendFormat(
"OpenSim average object memory churn : {0} MB/s\n",
Math.Round((MemoryWatchdog.AverageMemoryChurn * 1000) / 1024.0 / 1024, 3));
sb.AppendFormat(

View File

@@ -60,13 +60,21 @@ namespace OpenSim.Framework.Monitoring
private static bool m_enabled;
/// <summary>
/// Average memory churn in bytes per millisecond.
/// Last memory churn in bytes per millisecond.
/// </summary>
public static double AverageMemoryChurn
{
get { if (m_samples.Count > 0) return m_samples.Average(); else return 0; }
}
/// <summary>
/// Average memory churn in bytes per millisecond.
/// </summary>
public static double LastMemoryChurn
{
get { if (m_samples.Count > 0) return m_samples.Last(); else return 0; }
}
/// <summary>
/// Maximum number of statistical samples.
/// </summary>

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.Monitoring")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("74506fe3-2f9d-44c1-94c9-a30f79d9e0cb")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -355,10 +355,25 @@ Asset service request failures: {3}" + Environment.NewLine,
sb.Append(Environment.NewLine);
sb.Append(
string.Format(
"{0,6:0} {1,6:0} {2,6:0} {3,6:0} {4,6:0} {5,6:0.0} {6,6:0.0} {7,6:0.0} {8,6:0.0} {9,6:0.0} {10,6:0.0}",
"{0,6:0} {1,6:0} {2,6:0} {3,6:0} {4,6:0} {5,6:0.0} {6,6:0.0} {7,6:0.0} {8,6:0.0} {9,6:0.0} {10,6:0.0}\n\n",
inPacketsPerSecond, outPacketsPerSecond, pendingDownloads, pendingUploads, unackedBytes, totalFrameTime,
netFrameTime, physicsFrameTime, otherFrameTime, agentFrameTime, imageFrameTime));
sb.Append(Environment.NewLine);
Dictionary<string, Dictionary<string, Stat>> sceneStats;
if (StatsManager.TryGetStats("scene", out sceneStats))
{
foreach (KeyValuePair<string, Dictionary<string, Stat>> kvp in sceneStats)
{
foreach (Stat stat in kvp.Value.Values)
{
if (stat.Verbosity == StatVerbosity.Info)
{
sb.AppendFormat("{0} ({1}): {2}{3}\n", stat.Name, stat.Container, stat.Value, stat.UnitName);
}
}
}
}
/*
sb.Append(Environment.NewLine);

View File

@@ -0,0 +1,88 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenSim.Framework.Monitoring
{
public class PercentageStat : Stat
{
public long Antecedent { get; set; }
public long Consequent { get; set; }
public override double Value
{
get
{
// Asking for an update here means that the updater cannot access this value without infinite recursion.
// XXX: A slightly messy but simple solution may be to flick a flag so we can tell if this is being
// called by the pull action and just return the value.
if (StatType == StatType.Pull)
PullAction(this);
long c = Consequent;
// Avoid any chance of a multi-threaded divide-by-zero
if (c == 0)
return 0;
return (double)Antecedent / c * 100;
}
set
{
throw new InvalidOperationException("Cannot set value on a PercentageStat");
}
}
public PercentageStat(
string shortName,
string name,
string description,
string category,
string container,
StatType type,
Action<Stat> pullAction,
StatVerbosity verbosity)
: base(shortName, name, description, "%", category, container, type, pullAction, verbosity) {}
public override string ToConsoleString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat(
"{0}.{1}.{2} : {3:0.##}{4} ({5}/{6})",
Category, Container, ShortName, Value, UnitName, Antecedent, Consequent);
AppendMeasuresOfInterest(sb);
return sb.ToString();
}
}
}

View File

@@ -0,0 +1,238 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenSim.Framework.Monitoring
{
/// <summary>
/// Holds individual statistic details
/// </summary>
public class Stat
{
/// <summary>
/// Category of this stat (e.g. cache, scene, etc).
/// </summary>
public string Category { get; private set; }
/// <summary>
/// Containing name for this stat.
/// FIXME: In the case of a scene, this is currently the scene name (though this leaves
/// us with a to-be-resolved problem of non-unique region names).
/// </summary>
/// <value>
/// The container.
/// </value>
public string Container { get; private set; }
public StatType StatType { get; private set; }
public MeasuresOfInterest MeasuresOfInterest { get; private set; }
/// <summary>
/// Action used to update this stat when the value is requested if it's a pull type.
/// </summary>
public Action<Stat> PullAction { get; private set; }
public StatVerbosity Verbosity { get; private set; }
public string ShortName { get; private set; }
public string Name { get; private set; }
public string Description { get; private set; }
public virtual string UnitName { get; private set; }
public virtual double Value
{
get
{
// Asking for an update here means that the updater cannot access this value without infinite recursion.
// XXX: A slightly messy but simple solution may be to flick a flag so we can tell if this is being
// called by the pull action and just return the value.
if (StatType == StatType.Pull)
PullAction(this);
return m_value;
}
set
{
m_value = value;
}
}
private double m_value;
/// <summary>
/// Historical samples for calculating measures of interest average.
/// </summary>
/// <remarks>
/// Will be null if no measures of interest require samples.
/// </remarks>
private static Queue<double> m_samples;
/// <summary>
/// Maximum number of statistical samples.
/// </summary>
/// <remarks>
/// At the moment this corresponds to 1 minute since the sampling rate is every 2.5 seconds as triggered from
/// the main Watchdog.
/// </remarks>
private static int m_maxSamples = 24;
public Stat(
string shortName,
string name,
string description,
string unitName,
string category,
string container,
StatType type,
Action<Stat> pullAction,
StatVerbosity verbosity)
: this(
shortName,
name,
description,
unitName,
category,
container,
type,
MeasuresOfInterest.None,
pullAction,
verbosity)
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name='shortName'>Short name for the stat. Must not contain spaces. e.g. "LongFrames"</param>
/// <param name='name'>Human readable name for the stat. e.g. "Long frames"</param>
/// <param name='description'>Description of stat</param>
/// <param name='unitName'>
/// Unit name for the stat. Should be preceeded by a space if the unit name isn't normally appeneded immediately to the value.
/// e.g. " frames"
/// </param>
/// <param name='category'>Category under which this stat should appear, e.g. "scene". Do not capitalize.</param>
/// <param name='container'>Entity to which this stat relates. e.g. scene name if this is a per scene stat.</param>
/// <param name='type'>Push or pull</param>
/// <param name='pullAction'>Pull stats need an action to update the stat on request. Push stats should set null here.</param>
/// <param name='moi'>Measures of interest</param>
/// <param name='verbosity'>Verbosity of stat. Controls whether it will appear in short stat display or only full display.</param>
public Stat(
string shortName,
string name,
string description,
string unitName,
string category,
string container,
StatType type,
MeasuresOfInterest moi,
Action<Stat> pullAction,
StatVerbosity verbosity)
{
if (StatsManager.SubCommands.Contains(category))
throw new Exception(
string.Format("Stat cannot be in category '{0}' since this is reserved for a subcommand", category));
ShortName = shortName;
Name = name;
Description = description;
UnitName = unitName;
Category = category;
Container = container;
StatType = type;
if (StatType == StatType.Push && pullAction != null)
throw new Exception("A push stat cannot have a pull action");
else
PullAction = pullAction;
MeasuresOfInterest = moi;
if ((moi & MeasuresOfInterest.AverageChangeOverTime) == MeasuresOfInterest.AverageChangeOverTime)
m_samples = new Queue<double>(m_maxSamples);
Verbosity = verbosity;
}
/// <summary>
/// Record a value in the sample set.
/// </summary>
/// <remarks>
/// Do not call this if MeasuresOfInterest.None
/// </remarks>
public void RecordValue()
{
double newValue = Value;
lock (m_samples)
{
if (m_samples.Count >= m_maxSamples)
m_samples.Dequeue();
m_samples.Enqueue(newValue);
}
}
public virtual string ToConsoleString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0}.{1}.{2} : {3}{4}", Category, Container, ShortName, Value, UnitName);
AppendMeasuresOfInterest(sb);
return sb.ToString();
}
protected void AppendMeasuresOfInterest(StringBuilder sb)
{
if ((MeasuresOfInterest & MeasuresOfInterest.AverageChangeOverTime)
== MeasuresOfInterest.AverageChangeOverTime)
{
double totalChange = 0;
double? lastSample = null;
lock (m_samples)
{
foreach (double s in m_samples)
{
if (lastSample != null)
totalChange += s - (double)lastSample;
lastSample = s;
}
}
int divisor = m_samples.Count <= 1 ? 1 : m_samples.Count - 1;
sb.AppendFormat(", {0:0.##}{1}/s", totalChange / divisor / (Watchdog.WATCHDOG_INTERVAL_MS / 1000), UnitName);
}
}
}
}

View File

@@ -25,6 +25,10 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenSim.Framework.Monitoring
{
/// <summary>
@@ -32,6 +36,24 @@ namespace OpenSim.Framework.Monitoring
/// </summary>
public class StatsManager
{
// Subcommand used to list other stats.
public const string AllSubCommand = "all";
// Subcommand used to list other stats.
public const string ListSubCommand = "list";
// All subcommands
public static HashSet<string> SubCommands = new HashSet<string> { AllSubCommand, ListSubCommand };
/// <summary>
/// Registered stats categorized by category/container/shortname
/// </summary>
/// <remarks>
/// Do not add or remove directly from this dictionary.
/// </remarks>
public static Dictionary<string, Dictionary<string, Dictionary<string, Stat>>> RegisteredStats
= new Dictionary<string, Dictionary<string, Dictionary<string, Stat>>>();
private static AssetStatsCollector assetStats;
private static UserStatsCollector userStats;
private static SimExtraStatsCollector simExtraStats = new SimExtraStatsCollector();
@@ -40,6 +62,75 @@ namespace OpenSim.Framework.Monitoring
public static UserStatsCollector UserStats { get { return userStats; } }
public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } }
public static void RegisterConsoleCommands(ICommandConsole console)
{
console.Commands.AddCommand(
"General",
false,
"show stats",
"show stats [list|all|<category>]",
"Show statistical information for this server",
"If no final argument is specified then legacy statistics information is currently shown.\n"
+ "If list is specified then statistic categories are shown.\n"
+ "If all is specified then all registered statistics are shown.\n"
+ "If a category name is specified then only statistics from that category are shown.\n"
+ "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS",
HandleShowStatsCommand);
}
public static void HandleShowStatsCommand(string module, string[] cmd)
{
ICommandConsole con = MainConsole.Instance;
if (cmd.Length > 2)
{
var categoryName = cmd[2];
if (categoryName == AllSubCommand)
{
foreach (var category in RegisteredStats.Values)
{
OutputCategoryStatsToConsole(con, category);
}
}
else if (categoryName == ListSubCommand)
{
con.Output("Statistic categories available are:");
foreach (string category in RegisteredStats.Keys)
con.OutputFormat(" {0}", category);
}
else
{
Dictionary<string, Dictionary<string, Stat>> category;
if (!RegisteredStats.TryGetValue(categoryName, out category))
{
con.OutputFormat("No such category as {0}", categoryName);
}
else
{
OutputCategoryStatsToConsole(con, category);
}
}
}
else
{
// Legacy
con.Output(SimExtraStats.Report());
}
}
private static void OutputCategoryStatsToConsole(
ICommandConsole con, Dictionary<string, Dictionary<string, Stat>> category)
{
foreach (var container in category.Values)
{
foreach (Stat stat in container.Values)
{
con.Output(stat.ToConsoleString());
}
}
}
/// <summary>
/// Start collecting statistics related to assets.
/// Should only be called once.
@@ -61,5 +152,153 @@ namespace OpenSim.Framework.Monitoring
return userStats;
}
/// <summary>
/// Registers a statistic.
/// </summary>
/// <param name='stat'></param>
/// <returns></returns>
public static bool RegisterStat(Stat stat)
{
Dictionary<string, Dictionary<string, Stat>> category = null, newCategory;
Dictionary<string, Stat> container = null, newContainer;
lock (RegisteredStats)
{
// Stat name is not unique across category/container/shortname key.
// XXX: For now just return false. This is to avoid problems in regression tests where all tests
// in a class are run in the same instance of the VM.
if (TryGetStat(stat, out category, out container))
return false;
// We take a copy-on-write approach here of replacing dictionaries when keys are added or removed.
// This means that we don't need to lock or copy them on iteration, which will be a much more
// common operation after startup.
if (container != null)
newContainer = new Dictionary<string, Stat>(container);
else
newContainer = new Dictionary<string, Stat>();
if (category != null)
newCategory = new Dictionary<string, Dictionary<string, Stat>>(category);
else
newCategory = new Dictionary<string, Dictionary<string, Stat>>();
newContainer[stat.ShortName] = stat;
newCategory[stat.Container] = newContainer;
RegisteredStats[stat.Category] = newCategory;
}
return true;
}
/// <summary>
/// Deregister a statistic
/// </summary>>
/// <param name='stat'></param>
/// <returns></returns
public static bool DeregisterStat(Stat stat)
{
Dictionary<string, Dictionary<string, Stat>> category = null, newCategory;
Dictionary<string, Stat> container = null, newContainer;
lock (RegisteredStats)
{
if (!TryGetStat(stat, out category, out container))
return false;
newContainer = new Dictionary<string, Stat>(container);
newContainer.Remove(stat.ShortName);
newCategory = new Dictionary<string, Dictionary<string, Stat>>(category);
newCategory.Remove(stat.Container);
newCategory[stat.Container] = newContainer;
RegisteredStats[stat.Category] = newCategory;
return true;
}
}
public static bool TryGetStats(string category, out Dictionary<string, Dictionary<string, Stat>> stats)
{
return RegisteredStats.TryGetValue(category, out stats);
}
public static bool TryGetStat(
Stat stat,
out Dictionary<string, Dictionary<string, Stat>> category,
out Dictionary<string, Stat> container)
{
category = null;
container = null;
lock (RegisteredStats)
{
if (RegisteredStats.TryGetValue(stat.Category, out category))
{
if (category.TryGetValue(stat.Container, out container))
{
if (container.ContainsKey(stat.ShortName))
return true;
}
}
}
return false;
}
public static void RecordStats()
{
lock (RegisteredStats)
{
foreach (Dictionary<string, Dictionary<string, Stat>> category in RegisteredStats.Values)
{
foreach (Dictionary<string, Stat> container in category.Values)
{
foreach (Stat stat in container.Values)
{
if (stat.MeasuresOfInterest != MeasuresOfInterest.None)
stat.RecordValue();
}
}
}
}
}
}
/// <summary>
/// Stat type.
/// </summary>
/// <remarks>
/// A push stat is one which is continually updated and so it's value can simply by read.
/// A pull stat is one where reading the value triggers a collection method - the stat is not continually updated.
/// </remarks>
public enum StatType
{
Push,
Pull
}
/// <summary>
/// Measures of interest for this stat.
/// </summary>
[Flags]
public enum MeasuresOfInterest
{
None,
AverageChangeOverTime
}
/// <summary>
/// Verbosity of stat.
/// </summary>
/// <remarks>
/// Info will always be displayed.
/// </remarks>
public enum StatVerbosity
{
Debug,
Info
}
}

View File

@@ -39,7 +39,7 @@ namespace OpenSim.Framework.Monitoring
public static class Watchdog
{
/// <summary>Timer interval in milliseconds for the watchdog timer</summary>
const double WATCHDOG_INTERVAL_MS = 2500.0d;
public const double WATCHDOG_INTERVAL_MS = 2500.0d;
/// <summary>Default timeout in milliseconds before a thread is considered dead</summary>
public const int DEFAULT_WATCHDOG_TIMEOUT_MS = 5000;
@@ -231,7 +231,25 @@ namespace OpenSim.Framework.Monitoring
private static bool RemoveThread(int threadID)
{
lock (m_threads)
return m_threads.Remove(threadID);
{
ThreadWatchdogInfo twi;
if (m_threads.TryGetValue(threadID, out twi))
{
m_log.DebugFormat(
"[WATCHDOG]: Removing thread {0}, ID {1}", twi.Thread.Name, twi.Thread.ManagedThreadId);
m_threads.Remove(threadID);
return true;
}
else
{
m_log.WarnFormat(
"[WATCHDOG]: Requested to remove thread with ID {0} but this is not being monitored", threadID);
return false;
}
}
}
public static bool AbortThread(int threadID)
@@ -362,6 +380,8 @@ namespace OpenSim.Framework.Monitoring
if (MemoryWatchdog.Enabled)
MemoryWatchdog.Update();
StatsManager.RecordStats();
m_watchdogTimer.Start();
}
}

View File

@@ -0,0 +1,563 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Mono.Addins;
using Mono.Addins.Setup;
using Mono.Addins.Description;
using OpenSim.Framework;
namespace OpenSim.Framework
{
/// <summary>
/// Manager for registries and plugins
/// </summary>
public class PluginManager : SetupService
{
public AddinRegistry PluginRegistry;
public PluginManager(AddinRegistry registry): base (registry)
{
PluginRegistry = registry;
}
/// <summary>
/// Installs the plugin.
/// </summary>
/// <returns>
/// The plugin.
/// </returns>
/// <param name='args'>
/// Arguments.
/// </param>
public bool InstallPlugin(int ndx, out Dictionary<string, object> result)
{
Dictionary<string, object> res = new Dictionary<string, object>();
PackageCollection pack = new PackageCollection();
PackageCollection toUninstall;
DependencyCollection unresolved;
IProgressStatus ps = new ConsoleProgressStatus(false);
AddinRepositoryEntry[] available = GetSortedAvailbleAddins();
if (ndx > (available.Length - 1))
{
MainConsole.Instance.Output("Selection out of range");
result = res;
return false;
}
AddinRepositoryEntry aentry = available[ndx];
Package p = Package.FromRepository(aentry);
pack.Add(p);
ResolveDependencies(ps, pack, out toUninstall, out unresolved);
// Attempt to install the plugin disabled
if (Install(ps, pack) == true)
{
MainConsole.Instance.Output("Ignore the following error...");
PluginRegistry.Update(ps);
Addin addin = PluginRegistry.GetAddin(aentry.Addin.Id);
PluginRegistry.DisableAddin(addin.Id);
addin.Enabled = false;
MainConsole.Instance.Output("Installation Success");
ListInstalledAddins(out res);
result = res;
return true;
}
else
{
MainConsole.Instance.Output("Installation Failed");
result = res;
return false;
}
}
// Remove plugin
/// <summary>
/// Uns the install.
/// </summary>
/// <param name='args'>
/// Arguments.
/// </param>
public void UnInstall(int ndx)
{
Addin[] addins = GetSortedAddinList("RobustPlugin");
if (ndx > (addins.Length -1))
{
MainConsole.Instance.Output("Selection out of range");
return;
}
Addin addin = addins[ndx];
MainConsole.Instance.OutputFormat("Uninstalling plugin {0}", addin.Id);
AddinManager.Registry.DisableAddin(addin.Id);
addin.Enabled = false;
IProgressStatus ps = new ConsoleProgressStatus(false);
Uninstall(ps, addin.Id);
MainConsole.Instance.Output("Uninstall Success - restart to complete operation");
return;
}
/// <summary>
/// Checks the installed.
/// </summary>
/// <returns>
/// The installed.
/// </returns>
public string CheckInstalled()
{
return "CheckInstall";
}
/// <summary>
/// Lists the installed addins.
/// </summary>
/// <param name='result'>
/// Result.
/// </param>
public void ListInstalledAddins(out Dictionary<string, object> result)
{
Dictionary<string, object> res = new Dictionary<string, object>();
Addin[] addins = GetSortedAddinList("RobustPlugin");
if(addins.Count() < 1)
{
MainConsole.Instance.Output("Error!");
}
int count = 0;
foreach (Addin addin in addins)
{
Dictionary<string, object> r = new Dictionary<string, object>();
r["enabled"] = addin.Enabled == true ? true : false;
r["name"] = addin.LocalId;
r["version"] = addin.Version;
res.Add(count.ToString(), r);
count++;
}
result = res;
return;
}
// List compatible plugins in registered repositories
/// <summary>
/// Lists the available.
/// </summary>
/// <param name='result'>
/// Result.
/// </param>
public void ListAvailable(out Dictionary<string, object> result)
{
Dictionary<string, object> res = new Dictionary<string, object>();
AddinRepositoryEntry[] addins = GetSortedAvailbleAddins();
int count = 0;
foreach (AddinRepositoryEntry addin in addins)
{
Dictionary<string, object> r = new Dictionary<string, object>();
r["name"] = addin.Addin.Name;
r["version"] = addin.Addin.Version;
r["repository"] = addin.RepositoryName;
res.Add(count.ToString(), r);
count++;
}
result = res;
return;
}
// List available updates ** 1
/// <summary>
/// Lists the updates.
/// </summary>
public void ListUpdates()
{
IProgressStatus ps = new ConsoleProgressStatus(true);
Console.WriteLine ("Looking for updates...");
Repositories.UpdateAllRepositories (ps);
Console.WriteLine ("Available add-in updates:");
bool found = false;
AddinRepositoryEntry[] entries = Repositories.GetAvailableUpdates();
foreach (AddinRepositoryEntry entry in entries)
{
Console.WriteLine(String.Format("{0}",entry.Addin.Id));
}
}
// Sync to repositories
/// <summary>
/// Update this instance.
/// </summary>
public string Update()
{
IProgressStatus ps = new ConsoleProgressStatus(true);
Repositories.UpdateAllRepositories(ps);
return "Update";
}
// Register a repository
/// <summary>
/// Register a repository with our server.
/// </summary>
/// <returns>
/// result of the action
/// </returns>
/// <param name='repo'>
/// The URL of the repository we want to add
/// </param>
public bool AddRepository(string repo)
{
Repositories.RegisterRepository(null, repo, true);
PluginRegistry.Rebuild(null);
return true;
}
/// <summary>
/// Gets the repository.
/// </summary>
public void GetRepository()
{
Repositories.UpdateAllRepositories(new ConsoleProgressStatus(false));
}
// Remove a repository from the list
/// <summary>
/// Removes the repository.
/// </summary>
/// <param name='args'>
/// Arguments.
/// </param>
public void RemoveRepository(string[] args)
{
AddinRepository[] reps = Repositories.GetRepositories();
Array.Sort(reps, (r1,r2) => r1.Title.CompareTo(r2.Title));
if (reps.Length == 0)
{
MainConsole.Instance.Output("No repositories have been registered.");
return;
}
int n = Convert.ToInt16(args[2]);
if (n > (reps.Length -1))
{
MainConsole.Instance.Output("Selection out of range");
return;
}
AddinRepository rep = reps[n];
Repositories.RemoveRepository(rep.Url);
return;
}
// Enable repository
/// <summary>
/// Enables the repository.
/// </summary>
/// <param name='args'>
/// Arguments.
/// </param>
public void EnableRepository(string[] args)
{
AddinRepository[] reps = Repositories.GetRepositories();
Array.Sort(reps, (r1,r2) => r1.Title.CompareTo(r2.Title));
if (reps.Length == 0)
{
MainConsole.Instance.Output("No repositories have been registered.");
return;
}
int n = Convert.ToInt16(args[2]);
if (n > (reps.Length -1))
{
MainConsole.Instance.Output("Selection out of range");
return;
}
AddinRepository rep = reps[n];
Repositories.SetRepositoryEnabled(rep.Url, true);
return;
}
// Disable a repository
/// <summary>
/// Disables the repository.
/// </summary>
/// <param name='args'>
/// Arguments.
/// </param>
public void DisableRepository(string[] args)
{
AddinRepository[] reps = Repositories.GetRepositories();
Array.Sort(reps, (r1,r2) => r1.Title.CompareTo(r2.Title));
if (reps.Length == 0)
{
MainConsole.Instance.Output("No repositories have been registered.");
return;
}
int n = Convert.ToInt16(args[2]);
if (n > (reps.Length -1))
{
MainConsole.Instance.Output("Selection out of range");
return;
}
AddinRepository rep = reps[n];
Repositories.SetRepositoryEnabled(rep.Url, false);
return;
}
// List registered repositories
/// <summary>
/// Lists the repositories.
/// </summary>
/// <param name='result'>
/// Result.
/// </param>
public void ListRepositories(out Dictionary<string, object> result)
{
Dictionary<string, object> res = new Dictionary<string, object>();
result = res;
AddinRepository[] reps = GetSortedAddinRepo();
if (reps.Length == 0)
{
MainConsole.Instance.Output("No repositories have been registered.");
return;
}
int count = 0;
foreach (AddinRepository rep in reps)
{
Dictionary<string, object> r = new Dictionary<string, object>();
r["enabled"] = rep.Enabled == true ? true : false;
r["name"] = rep.Name;
r["url"] = rep.Url;
res.Add(count.ToString(), r);
count++;
}
return;
}
/// <summary>
/// Updates the registry.
/// </summary>
public void UpdateRegistry()
{
PluginRegistry.Update();
}
// Show plugin info
/// <summary>
/// Addins the info.
/// </summary>
/// <returns>
/// The info.
/// </returns>
/// <param name='args'>
/// Arguments.
/// </param>
public bool AddinInfo(int ndx, out Dictionary<string, object> result)
{
Dictionary<string, object> res = new Dictionary<string, object>();
result = res;
Addin[] addins = GetSortedAddinList("RobustPlugin");
if (ndx > (addins.Length - 1))
{
MainConsole.Instance.Output("Selection out of range");
return false;
}
// author category description
Addin addin = addins[ndx];
res["author"] = addin.Description.Author;
res["category"] = addin.Description.Category;
res["description"] = addin.Description.Description;
res["name"] = addin.Name;
res["url"] = addin.Description.Url;
res["file_name"] = addin.Description.FileName;
result = res;
return true;
}
// Disable a plugin
/// <summary>
/// Disables the plugin.
/// </summary>
/// <param name='args'>
/// Arguments.
/// </param>
public void DisablePlugin(string[] args)
{
Addin[] addins = GetSortedAddinList("RobustPlugin");
int n = Convert.ToInt16(args[2]);
if (n > (addins.Length -1))
{
MainConsole.Instance.Output("Selection out of range");
return;
}
Addin addin = addins[n];
AddinManager.Registry.DisableAddin(addin.Id);
addin.Enabled = false;
return;
}
// Enable plugin
/// <summary>
/// Enables the plugin.
/// </summary>
/// <param name='args'>
/// Arguments.
/// </param>
public void EnablePlugin(string[] args)
{
Addin[] addins = GetSortedAddinList("RobustPlugin");
int n = Convert.ToInt16(args[2]);
if (n > (addins.Length -1))
{
MainConsole.Instance.Output("Selection out of range");
return;
}
Addin addin = addins[n];
addin.Enabled = true;
AddinManager.Registry.EnableAddin(addin.Id);
// AddinManager.Registry.Update();
if(PluginRegistry.IsAddinEnabled(addin.Id))
{
ConsoleProgressStatus ps = new ConsoleProgressStatus(false);
if (!AddinManager.AddinEngine.IsAddinLoaded(addin.Id))
{
MainConsole.Instance.Output("Ignore the following error...");
AddinManager.Registry.Rebuild(ps);
AddinManager.AddinEngine.LoadAddin(ps, addin.Id);
}
}
else
{
MainConsole.Instance.OutputFormat("Not Enabled in this domain {0}", addin.Name);
}
return;
}
#region Util
private void Testing()
{
Addin[] list = Registry.GetAddins();
var addins = list.Where( a => a.Description.Category == "RobustPlugin");
foreach (Addin addin in addins)
{
MainConsole.Instance.OutputFormat("Addin {0}", addin.Name);
}
}
// These will let us deal with numbered lists instead
// of needing to type in the full ids
private AddinRepositoryEntry[] GetSortedAvailbleAddins()
{
ArrayList list = new ArrayList();
list.AddRange(Repositories.GetAvailableAddins());
AddinRepositoryEntry[] addins = list.ToArray(typeof(AddinRepositoryEntry)) as AddinRepositoryEntry[];
Array.Sort(addins,(r1,r2) => r1.Addin.Id.CompareTo(r2.Addin.Id));
return addins;
}
private AddinRepository[] GetSortedAddinRepo()
{
ArrayList list = new ArrayList();
list.AddRange(Repositories.GetRepositories());
AddinRepository[] repos = list.ToArray(typeof(AddinRepository)) as AddinRepository[];
Array.Sort (repos,(r1,r2) => r1.Name.CompareTo(r2.Name));
return repos;
}
private Addin[] GetSortedAddinList(string category)
{
ArrayList xlist = new ArrayList();
ArrayList list = new ArrayList();
try
{
list.AddRange(PluginRegistry.GetAddins());
}
catch(Exception e)
{
Addin[] x = xlist.ToArray(typeof(Addin)) as Addin[];
return x;
}
foreach (Addin addin in list)
{
if (addin.Description.Category == category)
xlist.Add(addin);
}
Addin[] addins = xlist.ToArray(typeof(Addin)) as Addin[];
Array.Sort(addins,(r1,r2) => r1.Id.CompareTo(r2.Id));
return addins;
}
#endregion Util
}
}

91
OpenSim/Framework/Pool.cs Normal file
View File

@@ -0,0 +1,91 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
namespace OpenSim.Framework
{
/// <summary>
/// Naive pool implementation.
/// </summary>
/// <remarks>
/// Currently assumes that objects are in a useable state when returned.
/// </remarks>
public class Pool<T>
{
/// <summary>
/// Number of objects in the pool.
/// </summary>
public int Count
{
get
{
lock (m_pool)
return m_pool.Count;
}
}
private Stack<T> m_pool;
/// <summary>
/// Maximum pool size. Beyond this, any returned objects are not pooled.
/// </summary>
private int m_maxPoolSize;
private Func<T> m_createFunction;
public Pool(Func<T> createFunction, int maxSize)
{
m_maxPoolSize = maxSize;
m_createFunction = createFunction;
m_pool = new Stack<T>(m_maxPoolSize);
}
public T GetObject()
{
lock (m_pool)
{
if (m_pool.Count > 0)
return m_pool.Pop();
else
return m_createFunction();
}
}
public void ReturnObject(T obj)
{
lock (m_pool)
{
if (m_pool.Count >= m_maxPoolSize)
return;
else
m_pool.Push(obj);
}
}
}
}

View File

@@ -192,18 +192,7 @@ namespace OpenSim.Framework
public PrimitiveBaseShape()
{
PCode = (byte) PCodeEnum.Primitive;
ExtraParams = new byte[1];
m_textureEntry = DEFAULT_TEXTURE;
}
public PrimitiveBaseShape(bool noShape)
{
if (noShape)
return;
PCode = (byte)PCodeEnum.Primitive;
ExtraParams = new byte[1];
m_textureEntry = DEFAULT_TEXTURE;
}
@@ -216,7 +205,6 @@ namespace OpenSim.Framework
// m_log.DebugFormat("[PRIMITIVE BASE SHAPE]: Creating from {0}", prim.ID);
PCode = (byte)prim.PrimData.PCode;
ExtraParams = new byte[1];
State = prim.PrimData.State;
PathBegin = Primitive.PackBeginCut(prim.PrimData.PathBegin);
@@ -248,7 +236,10 @@ namespace OpenSim.Framework
SculptTexture = prim.Sculpt.SculptTexture;
SculptType = (byte)prim.Sculpt.Type;
}
else SculptType = (byte)OpenMetaverse.SculptType.None;
else
{
SculptType = (byte)OpenMetaverse.SculptType.None;
}
}
[XmlIgnore]
@@ -340,9 +331,9 @@ namespace OpenSim.Framework
_scale = new Vector3(side, side, side);
}
public void SetHeigth(float heigth)
public void SetHeigth(float height)
{
_scale.Z = heigth;
_scale.Z = height;
}
public void SetRadius(float radius)

View File

@@ -0,0 +1,53 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
namespace OpenSim.Framework
{
/// <summary>
/// Region flags used internally by OpenSimulator to store installation specific information about regions.
/// </summary>
/// <remarks>
/// Don't confuse with OpenMetaverse.RegionFlags which are client facing flags (i.e. they go over the wire).
/// Returned by IGridService.GetRegionFlags()
/// </remarks>
[Flags]
public enum RegionFlags : int
{
DefaultRegion = 1, // Used for new Rez. Random if multiple defined
FallbackRegion = 2, // Regions we redirect to when the destination is down
RegionOnline = 4, // Set when a region comes online, unset when it unregisters and DeleteOnUnregister is false
NoDirectLogin = 8, // Region unavailable for direct logins (by name)
Persistent = 16, // Don't remove on unregister
LockedOut = 32, // Don't allow registration
NoMove = 64, // Don't allow moving this region
Reservation = 128, // This is an inactive reservation
Authenticate = 256, // Require authentication
Hyperlink = 512 // Record represents a HG link
}
}

View File

@@ -126,6 +126,7 @@ namespace OpenSim.Framework
private int m_physPrimMax = 0;
private bool m_clampPrimSize = false;
private int m_objectCapacity = 0;
private int m_linksetCapacity = 0;
private int m_agentCapacity = 0;
private string m_regionType = String.Empty;
private RegionLightShareData m_windlight = new RegionLightShareData();
@@ -317,6 +318,11 @@ namespace OpenSim.Framework
get { return m_objectCapacity; }
}
public int LinksetCapacity
{
get { return m_linksetCapacity; }
}
public int AgentCapacity
{
get { return m_agentCapacity; }
@@ -637,11 +643,11 @@ namespace OpenSim.Framework
#region Prim stuff
m_nonphysPrimMin = config.GetFloat("NonphysicalPrimMin", 0);
allKeys.Remove("NonphysicalPrimMin");
m_nonphysPrimMin = config.GetFloat("NonPhysicalPrimMin", 0);
allKeys.Remove("NonPhysicalPrimMin");
m_nonphysPrimMax = config.GetInt("NonphysicalPrimMax", 0);
allKeys.Remove("NonphysicalPrimMax");
m_nonphysPrimMax = config.GetInt("NonPhysicalPrimMax", 0);
allKeys.Remove("NonPhysicalPrimMax");
m_physPrimMin = config.GetFloat("PhysicalPrimMin", 0);
allKeys.Remove("PhysicalPrimMin");
@@ -654,6 +660,9 @@ namespace OpenSim.Framework
m_objectCapacity = config.GetInt("MaxPrims", 15000);
allKeys.Remove("MaxPrims");
m_linksetCapacity = config.GetInt("LinksetPrims", 0);
allKeys.Remove("LinksetPrims");
#endregion
@@ -692,24 +701,27 @@ namespace OpenSim.Framework
config.Set("ExternalHostName", m_externalHostName);
if (m_nonphysPrimMin != 0)
if (m_nonphysPrimMin > 0)
config.Set("NonphysicalPrimMax", m_nonphysPrimMin);
if (m_nonphysPrimMax != 0)
if (m_nonphysPrimMax > 0)
config.Set("NonphysicalPrimMax", m_nonphysPrimMax);
if (m_physPrimMin != 0)
if (m_physPrimMin > 0)
config.Set("PhysicalPrimMax", m_physPrimMin);
if (m_physPrimMax != 0)
if (m_physPrimMax > 0)
config.Set("PhysicalPrimMax", m_physPrimMax);
config.Set("ClampPrimSize", m_clampPrimSize.ToString());
if (m_objectCapacity != 0)
if (m_objectCapacity > 0)
config.Set("MaxPrims", m_objectCapacity);
if (m_agentCapacity != 0)
if (m_linksetCapacity > 0)
config.Set("LinksetPrims", m_linksetCapacity);
if (m_agentCapacity > 0)
config.Set("MaxAgents", m_agentCapacity);
if (ScopeID != UUID.Zero)
@@ -804,6 +816,9 @@ namespace OpenSim.Framework
configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
"Max objects this sim will hold", m_objectCapacity.ToString(), true);
configMember.addConfigurationOption("linkset_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
"Max prims an object will hold", m_linksetCapacity.ToString(), true);
configMember.addConfigurationOption("agent_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32,
"Max avatars this sim will hold", m_agentCapacity.ToString(), true);
@@ -922,6 +937,9 @@ namespace OpenSim.Framework
case "object_capacity":
m_objectCapacity = (int)configuration_result;
break;
case "linkset_capacity":
m_linksetCapacity = (int)configuration_result;
break;
case "agent_capacity":
m_agentCapacity = (int)configuration_result;
break;
@@ -1052,4 +1070,4 @@ namespace OpenSim.Framework
return kvp;
}
}
}
}

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.RegionLoader.Filesystem")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4ab5c74b-e886-40a1-b67d-a04df285e706")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.RegionLoader.Web")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("985afff8-e7ed-4056-acce-39abf7a43d33")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -52,6 +52,11 @@ namespace OpenSim.Framework.Serialization
/// </value>
public const string INVENTORY_PATH = "inventory/";
/// <value>
/// Path for regions in a multi-region archive
/// </value>
public const string REGIONS_PATH = "regions/";
/// <value>
/// Path for the prims file
/// </value>
@@ -149,6 +154,11 @@ namespace OpenSim.Framework.Serialization
EXTENSION_TO_ASSET_TYPE[ASSET_EXTENSION_SEPARATOR + "trashfolder.txt"] = (sbyte)AssetType.TrashFolder;
}
public static string CreateOarLandDataPath(LandData ld)
{
return string.Format("{0}{1}.xml", ArchiveConstants.LANDDATA_PATH, ld.GlobalID);
}
/// <summary>
/// Create the filename used to store an object in an OpenSim Archive.
/// </summary>

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.Serialization")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("919db41e-4ac0-4f24-9992-81d62c0ee183")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -37,7 +37,7 @@ using OpenSim.Tests.Common;
namespace OpenSim.Framework.Serialization.Tests
{
[TestFixture]
public class LandDataSerializerTest
public class LandDataSerializerTest : OpenSimTestCase
{
private LandData land;
private LandData landWithParcelAccessList;

View File

@@ -37,7 +37,7 @@ using OpenSim.Tests.Common;
namespace OpenSim.Framework.Serialization.Tests
{
[TestFixture]
public class RegionSettingsSerializerTests
public class RegionSettingsSerializerTests : OpenSimTestCase
{
private string m_serializedRs = @"<?xml version=""1.0"" encoding=""utf-16""?>
<RegionSettings>

View File

@@ -27,7 +27,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
@@ -38,6 +37,8 @@ using log4net;
using log4net.Appender;
using log4net.Core;
using log4net.Repository;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Monitoring;
@@ -45,16 +46,12 @@ using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using Timer=System.Timers.Timer;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
namespace OpenSim.Framework.Servers
{
/// <summary>
/// Common base for the main OpenSimServers (user, grid, inventory, region, etc)
/// </summary>
public abstract class BaseOpenSimServer
public abstract class BaseOpenSimServer : ServerBase
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -63,27 +60,6 @@ namespace OpenSim.Framework.Servers
/// server.
/// </summary>
private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000);
protected CommandConsole m_console;
protected OpenSimAppender m_consoleAppender;
protected IAppender m_logFileAppender = null;
/// <summary>
/// Time at which this server was started
/// </summary>
protected DateTime m_startuptime;
/// <summary>
/// Record the initial startup directory for info purposes
/// </summary>
protected string m_startupDirectory = Environment.CurrentDirectory;
/// <summary>
/// Server version information. Usually VersionInfo + information about git commit, operating system, etc.
/// </summary>
protected string m_version;
protected string m_pidFile = String.Empty;
/// <summary>
/// Random uuid for private data
@@ -96,35 +72,13 @@ namespace OpenSim.Framework.Servers
get { return m_httpServer; }
}
/// <summary>
/// Holds the non-viewer statistics collection object for this service/server
/// </summary>
protected IStatsCollector m_stats;
public BaseOpenSimServer()
public BaseOpenSimServer() : base()
{
m_startuptime = DateTime.Now;
m_version = VersionInfo.Version;
// Random uuid for private data
m_osSecret = UUID.Random().ToString();
m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics);
m_periodicDiagnosticsTimer.Enabled = true;
// This thread will go on to become the console listening thread
Thread.CurrentThread.Name = "ConsoleThread";
ILoggerRepository repository = LogManager.GetRepository();
IAppender[] appenders = repository.GetAppenders();
foreach (IAppender appender in appenders)
{
if (appender.Name == "LogFileAppender")
{
m_logFileAppender = appender;
}
}
}
/// <summary>
@@ -132,76 +86,18 @@ namespace OpenSim.Framework.Servers
/// </summary>
protected virtual void StartupSpecific()
{
if (m_console != null)
{
ILoggerRepository repository = LogManager.GetRepository();
IAppender[] appenders = repository.GetAppenders();
if (m_console == null)
return;
foreach (IAppender appender in appenders)
{
if (appender.Name == "Console")
{
m_consoleAppender = (OpenSimAppender)appender;
break;
}
}
RegisterCommonCommands();
m_console.Commands.AddCommand("General", false, "quit",
"quit",
"Quit the application", HandleQuit);
if (null == m_consoleAppender)
{
Notice("No appender named Console found (see the log4net config file for this executable)!");
}
else
{
m_consoleAppender.Console = m_console;
// If there is no threshold set then the threshold is effectively everything.
if (null == m_consoleAppender.Threshold)
m_consoleAppender.Threshold = Level.All;
Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
}
m_console.Commands.AddCommand("General", false, "quit",
"quit",
"Quit the application", HandleQuit);
m_console.Commands.AddCommand("General", false, "shutdown",
"shutdown",
"Quit the application", HandleQuit);
m_console.Commands.AddCommand("General", false, "set log level",
"set log level <level>",
"Set the console logging level", HandleLogLevel);
m_console.Commands.AddCommand("General", false, "show info",
"show info",
"Show general information about the server", HandleShow);
m_console.Commands.AddCommand("General", false, "show stats",
"show stats",
"Show statistics", HandleShow);
m_console.Commands.AddCommand("General", false, "show threads",
"show threads",
"Show thread status", HandleShow);
m_console.Commands.AddCommand("General", false, "show uptime",
"show uptime",
"Show server uptime", HandleShow);
m_console.Commands.AddCommand("General", false, "show version",
"show version",
"Show server version", HandleShow);
m_console.Commands.AddCommand("General", false, "threads abort",
"threads abort <thread-id>",
"Abort a managed thread. Use \"show threads\" to find possible threads.", HandleThreadsAbort);
m_console.Commands.AddCommand("General", false, "threads show",
"threads show",
"Show thread status. Synonym for \"show threads\"",
(string module, string[] args) => Notice(GetThreadsReport()));
}
m_console.Commands.AddCommand("General", false, "shutdown",
"shutdown",
"Quit the application", HandleQuit);
}
/// <summary>
@@ -226,87 +122,19 @@ namespace OpenSim.Framework.Servers
{
StringBuilder sb = new StringBuilder("DIAGNOSTICS\n\n");
sb.Append(GetUptimeReport());
if (m_stats != null)
{
sb.Append(m_stats.Report());
}
sb.Append(StatsManager.SimExtraStats.Report());
sb.Append(Environment.NewLine);
sb.Append(GetThreadsReport());
m_log.Debug(sb);
}
/// <summary>
/// Get a report about the registered threads in this server.
/// </summary>
protected string GetThreadsReport()
{
// This should be a constant field.
string reportFormat = "{0,6} {1,35} {2,16} {3,13} {4,10} {5,30}";
StringBuilder sb = new StringBuilder();
Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreadsInfo();
sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine);
int timeNow = Environment.TickCount & Int32.MaxValue;
sb.AppendFormat(reportFormat, "ID", "NAME", "LAST UPDATE (MS)", "LIFETIME (MS)", "PRIORITY", "STATE");
sb.Append(Environment.NewLine);
foreach (Watchdog.ThreadWatchdogInfo twi in threads)
{
Thread t = twi.Thread;
sb.AppendFormat(
reportFormat,
t.ManagedThreadId,
t.Name,
timeNow - twi.LastTick,
timeNow - twi.FirstTick,
t.Priority,
t.ThreadState);
sb.Append("\n");
}
sb.Append("\n");
// For some reason mono 2.6.7 returns an empty threads set! Not going to confuse people by reporting
// zero active threads.
int totalThreads = Process.GetCurrentProcess().Threads.Count;
if (totalThreads > 0)
sb.AppendFormat("Total threads active: {0}\n\n", totalThreads);
sb.Append("Main threadpool (excluding script engine pools)\n");
sb.Append(Util.GetThreadPoolReport());
return sb.ToString();
}
/// <summary>
/// Return a report about the uptime of this server
/// </summary>
/// <returns></returns>
protected string GetUptimeReport()
{
StringBuilder sb = new StringBuilder(String.Format("Time now is {0}\n", DateTime.Now));
sb.Append(String.Format("Server has been running since {0}, {1}\n", m_startuptime.DayOfWeek, m_startuptime));
sb.Append(String.Format("That is an elapsed time of {0}\n", DateTime.Now - m_startuptime));
return sb.ToString();
}
/// <summary>
/// Performs initialisation of the scene, such as loading configuration from disk.
/// </summary>
public virtual void Startup()
{
m_log.Info("[STARTUP]: Beginning startup processing");
EnhanceVersionInformation();
m_log.Info("[STARTUP]: OpenSimulator version: " + m_version + Environment.NewLine);
// clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and
@@ -341,271 +169,11 @@ namespace OpenSim.Framework.Servers
private void HandleQuit(string module, string[] args)
{
Shutdown();
}
private void HandleLogLevel(string module, string[] cmd)
{
if (null == m_consoleAppender)
{
Notice("No appender named Console found (see the log4net config file for this executable)!");
return;
}
if (cmd.Length > 3)
{
string rawLevel = cmd[3];
ILoggerRepository repository = LogManager.GetRepository();
Level consoleLevel = repository.LevelMap[rawLevel];
if (consoleLevel != null)
m_consoleAppender.Threshold = consoleLevel;
else
Notice(
String.Format(
"{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
rawLevel));
}
Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
}
/// <summary>
/// Show help information
/// </summary>
/// <param name="helpArgs"></param>
protected virtual void ShowHelp(string[] helpArgs)
{
Notice("");
if (helpArgs.Length == 0)
{
Notice("set log level [level] - change the console logging level only. For example, off or debug.");
Notice("show info - show server information (e.g. startup path).");
if (m_stats != null)
Notice("show stats - show statistical information for this server");
Notice("show threads - list tracked threads");
Notice("show uptime - show server startup time and uptime.");
Notice("show version - show server version.");
Notice("");
return;
}
}
public virtual void HandleShow(string module, string[] cmd)
{
List<string> args = new List<string>(cmd);
args.RemoveAt(0);
string[] showParams = args.ToArray();
switch (showParams[0])
{
case "info":
ShowInfo();
break;
case "stats":
if (m_stats != null)
Notice(m_stats.Report());
break;
case "threads":
Notice(GetThreadsReport());
break;
case "uptime":
Notice(GetUptimeReport());
break;
case "version":
Notice(GetVersionText());
break;
}
}
public virtual void HandleThreadsAbort(string module, string[] cmd)
{
if (cmd.Length != 3)
{
MainConsole.Instance.Output("Usage: threads abort <thread-id>");
return;
}
int threadId;
if (!int.TryParse(cmd[2], out threadId))
{
MainConsole.Instance.Output("ERROR: Thread id must be an integer");
return;
}
if (Watchdog.AbortThread(threadId))
MainConsole.Instance.OutputFormat("Aborted thread with id {0}", threadId);
else
MainConsole.Instance.OutputFormat("ERROR - Thread with id {0} not found in managed threads", threadId);
}
protected void ShowInfo()
{
Notice(GetVersionText());
Notice("Startup directory: " + m_startupDirectory);
if (null != m_consoleAppender)
Notice(String.Format("Console log level: {0}", m_consoleAppender.Threshold));
}
protected string GetVersionText()
{
return String.Format("Version: {0} (interface version {1})", m_version, VersionInfo.MajorInterfaceVersion);
}
/// <summary>
/// Console output is only possible if a console has been established.
/// That is something that cannot be determined within this class. So
/// all attempts to use the console MUST be verified.
/// </summary>
/// <param name="msg"></param>
protected void Notice(string msg)
{
if (m_console != null)
{
m_console.Output(msg);
}
}
/// <summary>
/// Console output is only possible if a console has been established.
/// That is something that cannot be determined within this class. So
/// all attempts to use the console MUST be verified.
/// </summary>
/// <param name="format"></param>
/// <param name="components"></param>
protected void Notice(string format, params string[] components)
{
if (m_console != null)
m_console.OutputFormat(format, components);
}
/// <summary>
/// Enhance the version string with extra information if it's available.
/// </summary>
protected void EnhanceVersionInformation()
{
string buildVersion = string.Empty;
// The subversion information is deprecated and will be removed at a later date
// Add subversion revision information if available
// Try file "svn_revision" in the current directory first, then the .svn info.
// This allows to make the revision available in simulators not running from the source tree.
// FIXME: Making an assumption about the directory we're currently in - we do this all over the place
// elsewhere as well
string gitDir = "../.git/";
string gitRefPointerPath = gitDir + "HEAD";
string svnRevisionFileName = "svn_revision";
string svnFileName = ".svn/entries";
string manualVersionFileName = ".version";
string inputLine;
int strcmp;
if (File.Exists(manualVersionFileName))
{
using (StreamReader CommitFile = File.OpenText(manualVersionFileName))
buildVersion = CommitFile.ReadLine();
m_version += buildVersion ?? "";
}
else if (File.Exists(gitRefPointerPath))
{
// m_log.DebugFormat("[OPENSIM]: Found {0}", gitRefPointerPath);
string rawPointer = "";
using (StreamReader pointerFile = File.OpenText(gitRefPointerPath))
rawPointer = pointerFile.ReadLine();
// m_log.DebugFormat("[OPENSIM]: rawPointer [{0}]", rawPointer);
Match m = Regex.Match(rawPointer, "^ref: (.+)$");
if (m.Success)
{
// m_log.DebugFormat("[OPENSIM]: Matched [{0}]", m.Groups[1].Value);
string gitRef = m.Groups[1].Value;
string gitRefPath = gitDir + gitRef;
if (File.Exists(gitRefPath))
{
// m_log.DebugFormat("[OPENSIM]: Found gitRefPath [{0}]", gitRefPath);
using (StreamReader refFile = File.OpenText(gitRefPath))
{
string gitHash = refFile.ReadLine();
m_version += gitHash.Substring(0, 7);
}
}
}
}
else
{
// Remove the else logic when subversion mirror is no longer used
if (File.Exists(svnRevisionFileName))
{
StreamReader RevisionFile = File.OpenText(svnRevisionFileName);
buildVersion = RevisionFile.ReadLine();
buildVersion.Trim();
RevisionFile.Close();
}
if (string.IsNullOrEmpty(buildVersion) && File.Exists(svnFileName))
{
StreamReader EntriesFile = File.OpenText(svnFileName);
inputLine = EntriesFile.ReadLine();
while (inputLine != null)
{
// using the dir svn revision at the top of entries file
strcmp = String.Compare(inputLine, "dir");
if (strcmp == 0)
{
buildVersion = EntriesFile.ReadLine();
break;
}
else
{
inputLine = EntriesFile.ReadLine();
}
}
EntriesFile.Close();
}
m_version += string.IsNullOrEmpty(buildVersion) ? " " : ("." + buildVersion + " ").Substring(0, 6);
}
}
protected void CreatePIDFile(string path)
{
try
{
string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
FileStream fs = File.Create(path);
Byte[] buf = Encoding.ASCII.GetBytes(pidstring);
fs.Write(buf, 0, buf.Length);
fs.Close();
m_pidFile = path;
}
catch (Exception)
{
}
}
}
public string osSecret {
// Secret uuid for the simulator
get { return m_osSecret; }
get { return m_osSecret; }
}
public string StatReport(IOSHttpRequest httpRequest)
@@ -613,27 +181,12 @@ namespace OpenSim.Framework.Servers
// If we catch a request for "callback", wrap the response in the value for jsonp
if (httpRequest.Query.ContainsKey("callback"))
{
return httpRequest.Query["callback"].ToString() + "(" + m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version) + ");";
return httpRequest.Query["callback"].ToString() + "(" + StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version) + ");";
}
else
{
return m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version);
}
}
protected void RemovePIDFile()
{
if (m_pidFile != String.Empty)
{
try
{
File.Delete(m_pidFile);
m_pidFile = String.Empty;
}
catch (Exception)
{
}
return StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version);
}
}
}
}
}

View File

@@ -54,8 +54,23 @@ namespace OpenSim.Framework.Servers.HttpServer
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
/// <summary>
/// Gets or sets the debug level.
/// </summary>
/// <value>
/// See MainServer.DebugLevel.
/// </value>
public int DebugLevel { get; set; }
/// <summary>
/// Request number for diagnostic purposes.
/// </summary>
/// <remarks>
/// This is an internal number. In some debug situations an external number may also be supplied in the
/// opensim-request-id header but we are not currently logging this.
/// </remarks>
public int RequestNumber { get; private set; }
private volatile int NotSocketErrors = 0;
public volatile bool HTTPDRunning = false;
@@ -67,7 +82,7 @@ namespace OpenSim.Framework.Servers.HttpServer
protected Dictionary<string, LLSDMethod> m_llsdHandlers = new Dictionary<string, LLSDMethod>();
protected Dictionary<string, IRequestHandler> m_streamHandlers = new Dictionary<string, IRequestHandler>();
protected Dictionary<string, GenericHTTPMethod> m_HTTPHandlers = new Dictionary<string, GenericHTTPMethod>();
protected Dictionary<string, IHttpAgentHandler> m_agentHandlers = new Dictionary<string, IHttpAgentHandler>();
// protected Dictionary<string, IHttpAgentHandler> m_agentHandlers = new Dictionary<string, IHttpAgentHandler>();
protected Dictionary<string, PollServiceEventArgs> m_pollHandlers =
new Dictionary<string, PollServiceEventArgs>();
@@ -245,29 +260,29 @@ namespace OpenSim.Framework.Servers.HttpServer
return new List<string>(m_pollHandlers.Keys);
}
// Note that the agent string is provided simply to differentiate
// the handlers - it is NOT required to be an actual agent header
// value.
public bool AddAgentHandler(string agent, IHttpAgentHandler handler)
{
lock (m_agentHandlers)
{
if (!m_agentHandlers.ContainsKey(agent))
{
m_agentHandlers.Add(agent, handler);
return true;
}
}
//must already have a handler for that path so return false
return false;
}
public List<string> GetAgentHandlerKeys()
{
lock (m_agentHandlers)
return new List<string>(m_agentHandlers.Keys);
}
// // Note that the agent string is provided simply to differentiate
// // the handlers - it is NOT required to be an actual agent header
// // value.
// public bool AddAgentHandler(string agent, IHttpAgentHandler handler)
// {
// lock (m_agentHandlers)
// {
// if (!m_agentHandlers.ContainsKey(agent))
// {
// m_agentHandlers.Add(agent, handler);
// return true;
// }
// }
//
// //must already have a handler for that path so return false
// return false;
// }
//
// public List<string> GetAgentHandlerKeys()
// {
// lock (m_agentHandlers)
// return new List<string>(m_agentHandlers.Keys);
// }
public bool AddLLSDHandler(string path, LLSDMethod handler)
{
@@ -296,6 +311,8 @@ namespace OpenSim.Framework.Servers.HttpServer
private void OnRequest(object source, RequestEventArgs args)
{
RequestNumber++;
try
{
IHttpClientContext context = (IHttpClientContext)source;
@@ -405,7 +422,6 @@ namespace OpenSim.Framework.Servers.HttpServer
string requestMethod = request.HttpMethod;
string uriString = request.RawUrl;
// string reqnum = "unknown";
int requestStartTick = Environment.TickCount;
// Will be adjusted later on.
@@ -420,24 +436,24 @@ namespace OpenSim.Framework.Servers.HttpServer
// reqnum = String.Format("{0}:{1}",request.RemoteIPEndPoint,request.Headers["opensim-request-id"]);
//m_log.DebugFormat("[BASE HTTP SERVER]: <{0}> handle request for {1}",reqnum,request.RawUrl);
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
Culture.SetCurrentCulture();
// This is the REST agent interface. We require an agent to properly identify
// itself. If the REST handler recognizes the prefix it will attempt to
// satisfy the request. If it is not recognizable, and no damage has occurred
// the request can be passed through to the other handlers. This is a low
// probability event; if a request is matched it is normally expected to be
// handled
IHttpAgentHandler agentHandler;
if (TryGetAgentHandler(request, response, out agentHandler))
{
if (HandleAgentRequest(agentHandler, request, response))
{
requestEndTick = Environment.TickCount;
return;
}
}
// // This is the REST agent interface. We require an agent to properly identify
// // itself. If the REST handler recognizes the prefix it will attempt to
// // satisfy the request. If it is not recognizable, and no damage has occurred
// // the request can be passed through to the other handlers. This is a low
// // probability event; if a request is matched it is normally expected to be
// // handled
// IHttpAgentHandler agentHandler;
//
// if (TryGetAgentHandler(request, response, out agentHandler))
// {
// if (HandleAgentRequest(agentHandler, request, response))
// {
// requestEndTick = Environment.TickCount;
// return;
// }
// }
//response.KeepAlive = true;
response.SendChunked = false;
@@ -449,9 +465,7 @@ namespace OpenSim.Framework.Servers.HttpServer
if (TryGetStreamHandler(handlerKey, out requestHandler))
{
if (DebugLevel >= 3)
m_log.DebugFormat(
"[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}",
request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description);
LogIncomingToStreamHandler(request, requestHandler);
response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type.
@@ -528,11 +542,8 @@ namespace OpenSim.Framework.Servers.HttpServer
{
case null:
case "text/html":
if (DebugLevel >= 3)
m_log.DebugFormat(
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
LogIncomingToContentTypeHandler(request);
buffer = HandleHTTPRequest(request, response);
break;
@@ -540,11 +551,8 @@ namespace OpenSim.Framework.Servers.HttpServer
case "application/llsd+xml":
case "application/xml+llsd":
case "application/llsd+json":
if (DebugLevel >= 3)
m_log.DebugFormat(
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
LogIncomingToContentTypeHandler(request);
buffer = HandleLLSDRequests(request, response);
break;
@@ -563,9 +571,7 @@ namespace OpenSim.Framework.Servers.HttpServer
if (DoWeHaveALLSDHandler(request.RawUrl))
{
if (DebugLevel >= 3)
m_log.DebugFormat(
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
LogIncomingToContentTypeHandler(request);
buffer = HandleLLSDRequests(request, response);
}
@@ -573,18 +579,14 @@ namespace OpenSim.Framework.Servers.HttpServer
else if (DoWeHaveAHTTPHandler(request.RawUrl))
{
if (DebugLevel >= 3)
m_log.DebugFormat(
"[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}",
request.ContentType, request.HttpMethod, request.Url.PathAndQuery);
LogIncomingToContentTypeHandler(request);
buffer = HandleHTTPRequest(request, response);
}
else
{
if (DebugLevel >= 3)
m_log.DebugFormat(
"[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}",
request.HttpMethod, request.Url.PathAndQuery);
LogIncomingToXmlRpcHandler(request);
// generic login request.
buffer = HandleXmlRpcRequests(request, response);
@@ -628,11 +630,11 @@ namespace OpenSim.Framework.Servers.HttpServer
}
catch (IOException e)
{
m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e);
m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e);
}
catch (Exception e)
{
m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e);
m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e);
SendHTML500(response);
}
finally
@@ -640,17 +642,96 @@ namespace OpenSim.Framework.Servers.HttpServer
// Every month or so this will wrap and give bad numbers, not really a problem
// since its just for reporting
int tickdiff = requestEndTick - requestStartTick;
if (tickdiff > 3000)
if (tickdiff > 3000 && requestHandler != null && requestHandler.Name != "GetTexture")
{
m_log.InfoFormat(
"[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} from {4} took {5}ms",
"[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms",
RequestNumber,
requestMethod,
uriString,
requestHandler != null ? requestHandler.Name : "",
requestHandler != null ? requestHandler.Description : "",
request.RemoteIPEndPoint.ToString(),
request.RemoteIPEndPoint,
tickdiff);
}
else if (DebugLevel >= 4)
{
m_log.DebugFormat(
"[BASE HTTP SERVER]: HTTP IN {0} :{1} took {2}ms",
RequestNumber,
Port,
tickdiff);
}
}
}
private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler)
{
m_log.DebugFormat(
"[BASE HTTP SERVER]: HTTP IN {0} :{1} stream handler {2} {3} {4} {5} from {6}",
RequestNumber,
Port,
request.HttpMethod,
request.Url.PathAndQuery,
requestHandler.Name,
requestHandler.Description,
request.RemoteIPEndPoint);
if (DebugLevel >= 5)
LogIncomingInDetail(request);
}
private void LogIncomingToContentTypeHandler(OSHttpRequest request)
{
m_log.DebugFormat(
"[BASE HTTP SERVER]: HTTP IN {0} :{1} {2} content type handler {3} {4} from {5}",
RequestNumber,
Port,
(request.ContentType == null || request.ContentType == "") ? "not set" : request.ContentType,
request.HttpMethod,
request.Url.PathAndQuery,
request.RemoteIPEndPoint);
if (DebugLevel >= 5)
LogIncomingInDetail(request);
}
private void LogIncomingToXmlRpcHandler(OSHttpRequest request)
{
m_log.DebugFormat(
"[BASE HTTP SERVER]: HTTP IN {0} :{1} assumed generic XMLRPC request {2} {3} from {4}",
RequestNumber,
Port,
request.HttpMethod,
request.Url.PathAndQuery,
request.RemoteIPEndPoint);
if (DebugLevel >= 5)
LogIncomingInDetail(request);
}
private void LogIncomingInDetail(OSHttpRequest request)
{
using (StreamReader reader = new StreamReader(Util.Copy(request.InputStream), Encoding.UTF8))
{
string output;
if (DebugLevel == 5)
{
const int sampleLength = 80;
char[] sampleChars = new char[sampleLength + 3];
reader.Read(sampleChars, 0, sampleLength);
sampleChars[80] = '.';
sampleChars[81] = '.';
sampleChars[82] = '.';
output = new string(sampleChars);
}
else
{
output = reader.ReadToEnd();
}
m_log.DebugFormat("[BASE HTTP SERVER]: {0}", output.Replace("\n", @"\n"));
}
}
@@ -746,24 +827,24 @@ namespace OpenSim.Framework.Servers.HttpServer
}
}
private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler)
{
agentHandler = null;
lock (m_agentHandlers)
{
foreach (IHttpAgentHandler handler in m_agentHandlers.Values)
{
if (handler.Match(request, response))
{
agentHandler = handler;
return true;
}
}
}
return false;
}
// private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler)
// {
// agentHandler = null;
//
// lock (m_agentHandlers)
// {
// foreach (IHttpAgentHandler handler in m_agentHandlers.Values)
// {
// if (handler.Match(request, response))
// {
// agentHandler = handler;
// return true;
// }
// }
// }
//
// return false;
// }
/// <summary>
/// Try all the registered xmlrpc handlers when an xmlrpc request is received.
@@ -1201,59 +1282,6 @@ namespace OpenSim.Framework.Servers.HttpServer
map["login"] = OSD.FromString("false");
return map;
}
/// <summary>
/// A specific agent handler was provided. Such a handler is expecetd to have an
/// intimate, and highly specific relationship with the client. Consequently,
/// nothing is done here.
/// </summary>
/// <param name="handler"></param>
/// <param name="request"></param>
/// <param name="response"></param>
private bool HandleAgentRequest(IHttpAgentHandler handler, OSHttpRequest request, OSHttpResponse response)
{
// In the case of REST, then handler is responsible for ALL aspects of
// the request/response handling. Nothing is done here, not even encoding.
try
{
return handler.Handle(request, response);
}
catch (Exception e)
{
// If the handler did in fact close the stream, then this will blow
// chunks. So that that doesn't disturb anybody we throw away any
// and all exceptions raised. We've done our best to release the
// client.
try
{
m_log.Warn("[HTTP-AGENT]: Error - " + e.Message);
response.SendChunked = false;
response.KeepAlive = true;
response.StatusCode = (int)OSHttpStatusCode.ServerErrorInternalError;
//response.OutputStream.Close();
try
{
response.Send();
//response.FreeContext();
}
catch (SocketException f)
{
// This has to be here to prevent a Linux/Mono crash
m_log.Warn(
String.Format("[BASE HTTP SERVER]: XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux. ", f.Message), f);
}
}
catch(Exception)
{
}
}
// Indicate that the request has been "handled"
return true;
}
public byte[] HandleHTTPRequest(OSHttpRequest request, OSHttpResponse response)
{
@@ -1595,6 +1623,7 @@ namespace OpenSim.Framework.Servers.HttpServer
// Long Poll Service Manager with 3 worker threads a 25 second timeout for no events
m_PollServiceManager = new PollServiceRequestManager(this, 3, 25000);
m_PollServiceManager.Start();
HTTPDRunning = true;
//HttpListenerContext context;
@@ -1645,6 +1674,8 @@ namespace OpenSim.Framework.Servers.HttpServer
HTTPDRunning = false;
try
{
m_PollServiceManager.Stop();
m_httpListener2.ExceptionThrown -= httpServerException;
//m_httpListener2.DisconnectHandler = null;
@@ -1688,21 +1719,21 @@ namespace OpenSim.Framework.Servers.HttpServer
m_pollHandlers.Remove(path);
}
public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler)
{
lock (m_agentHandlers)
{
IHttpAgentHandler foundHandler;
if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler)
{
m_agentHandlers.Remove(agent);
return true;
}
}
return false;
}
// public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler)
// {
// lock (m_agentHandlers)
// {
// IHttpAgentHandler foundHandler;
//
// if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler)
// {
// m_agentHandlers.Remove(agent);
// return true;
// }
// }
//
// return false;
// }
public void RemoveXmlRPCHandler(string method)
{

View File

@@ -41,10 +41,10 @@ namespace OpenSim.Framework.Servers.HttpServer
uint Port { get; }
bool UseSSL { get; }
// Note that the agent string is provided simply to differentiate
// the handlers - it is NOT required to be an actual agent header
// value.
bool AddAgentHandler(string agent, IHttpAgentHandler handler);
// // Note that the agent string is provided simply to differentiate
// // the handlers - it is NOT required to be an actual agent header
// // value.
// bool AddAgentHandler(string agent, IHttpAgentHandler handler);
/// <summary>
/// Add a handler for an HTTP request.
@@ -106,13 +106,13 @@ namespace OpenSim.Framework.Servers.HttpServer
bool SetDefaultLLSDHandler(DefaultLLSDMethod handler);
/// <summary>
/// Remove the agent if it is registered.
/// </summary>
/// <param name="agent"></param>
/// <param name="handler"></param>
/// <returns></returns>
bool RemoveAgentHandler(string agent, IHttpAgentHandler handler);
// /// <summary>
// /// Remove the agent if it is registered.
// /// </summary>
// /// <param name="agent"></param>
// /// <param name="handler"></param>
// /// <returns></returns>
// bool RemoveAgentHandler(string agent, IHttpAgentHandler handler);
/// <summary>
/// Remove an HTTP handler

View File

@@ -45,19 +45,26 @@ namespace OpenSim.Framework.Servers.HttpServer
private uint m_WorkerThreadCount = 0;
private Thread[] m_workerThreads;
private PollServiceWorkerThread[] m_PollServiceWorkerThreads;
private bool m_running = true;
private volatile bool m_running = true;
private int m_pollTimeout;
public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout)
{
m_server = pSrv;
m_WorkerThreadCount = pWorkerThreadCount;
m_pollTimeout = pTimeout;
}
public void Start()
{
m_running = true;
m_workerThreads = new Thread[m_WorkerThreadCount];
m_PollServiceWorkerThreads = new PollServiceWorkerThread[m_WorkerThreadCount];
//startup worker threads
for (uint i = 0; i < m_WorkerThreadCount; i++)
{
m_PollServiceWorkerThreads[i] = new PollServiceWorkerThread(m_server, pTimeout);
m_PollServiceWorkerThreads[i] = new PollServiceWorkerThread(m_server, m_pollTimeout);
m_PollServiceWorkerThreads[i].ReQueue += ReQueueEvent;
m_workerThreads[i]
@@ -136,8 +143,10 @@ namespace OpenSim.Framework.Servers.HttpServer
}
~PollServiceRequestManager()
public void Stop()
{
m_running = false;
foreach (object o in m_requests)
{
PollServiceHttpRequest req = (PollServiceHttpRequest) o;
@@ -151,8 +160,6 @@ namespace OpenSim.Framework.Servers.HttpServer
{
t.Abort();
}
m_running = false;
}
}
}

View File

@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenSim.Framework.Servers.HttpServer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("OpenSim")]
[assembly: AssemblyCopyright("OpenSimulator developers")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c4ea5baa-81c4-4867-a645-1ec360c1f164")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.7.5.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -29,6 +29,7 @@ using System;
using System.Collections.Generic;
using System.Reflection;
using System.Net;
using System.Text;
using log4net;
using OpenSim.Framework;
using OpenSim.Framework.Console;
@@ -47,9 +48,12 @@ namespace OpenSim.Framework.Servers
/// Control the printing of certain debug messages.
/// </summary>
/// <remarks>
/// If DebugLevel >= 1, then short warnings are logged when receiving bad input data.
/// If DebugLevel >= 2, then long warnings are logged when receiving bad input data.
/// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged.
/// If DebugLevel >= 1 then short warnings are logged when receiving bad input data.
/// If DebugLevel >= 2 then long warnings are logged when receiving bad input data.
/// If DebugLevel >= 3 then short notices about all incoming non-poll HTTP requests are logged.
/// If DebugLevel >= 4 then the time taken to fulfill the request is logged.
/// If DebugLevel >= 5 then the start of the body of incoming non-poll HTTP requests will be logged.
/// If DebugLevel >= 6 then the entire body of incoming non-poll HTTP requests will be logged.
/// </remarks>
public static int DebugLevel
{
@@ -101,17 +105,28 @@ namespace OpenSim.Framework.Servers
get { return new Dictionary<uint, BaseHttpServer>(m_Servers); }
}
public static void RegisterHttpConsoleCommands(ICommandConsole console)
{
console.Commands.AddCommand(
"Debug", false, "debug http", "debug http [<level>]",
"Turn on inbound non-poll http request debugging.",
"If level <= 0, then no extra logging is done.\n"
+ "If level >= 1, then short warnings are logged when receiving bad input data.\n"
+ "If level >= 2, then long warnings are logged when receiving bad input data.\n"
+ "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n"
+ "If no level is specified then the current level is returned.",
"Comms", false, "show http-handlers",
"show http-handlers",
"Show all registered http handlers", HandleShowHttpHandlersCommand);
console.Commands.AddCommand(
"Debug", false, "debug http", "debug http <in|out|all> [<level>]",
"Turn on http request logging.",
"If in or all and\n"
+ " level <= 0 then no extra logging is done.\n"
+ " level >= 1 then short warnings are logged when receiving bad input data.\n"
+ " level >= 2 then long warnings are logged when receiving bad input data.\n"
+ " level >= 3 then short notices about all incoming non-poll HTTP requests are logged.\n"
+ " level >= 4 then the time taken to fulfill the request is logged.\n"
+ " level >= 5 then a sample from the beginning of the incoming data is logged.\n"
+ " level >= 6 then the entire incoming data is logged.\n"
+ " no level is specified then the current level is returned.\n\n"
+ "If out or all and\n"
+ " level >= 3 then short notices about all outgoing requests going through WebUtil are logged.\n"
+ " level >= 4 then the time taken to fulfill the request is logged.\n",
HandleDebugHttpCommand);
}
@@ -119,25 +134,120 @@ namespace OpenSim.Framework.Servers
/// Turn on some debugging values for OpenSim.
/// </summary>
/// <param name="args"></param>
private static void HandleDebugHttpCommand(string module, string[] args)
private static void HandleDebugHttpCommand(string module, string[] cmdparams)
{
if (args.Length == 3)
if (cmdparams.Length < 3)
{
int newDebug;
if (int.TryParse(args[2], out newDebug))
{
MainServer.DebugLevel = newDebug;
MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug);
}
MainConsole.Instance.Output("Usage: debug http <in|out|all> 0..6");
return;
}
else if (args.Length == 2)
bool inReqs = false;
bool outReqs = false;
bool allReqs = false;
string subCommand = cmdparams[2];
if (subCommand.ToLower() == "in")
{
MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel);
inReqs = true;
}
else if (subCommand.ToLower() == "out")
{
outReqs = true;
}
else if (subCommand.ToLower() == "all")
{
allReqs = true;
}
else
{
MainConsole.Instance.Output("Usage: debug http 0..3");
MainConsole.Instance.Output("You must specify in, out or all");
return;
}
if (cmdparams.Length >= 4)
{
string rawNewDebug = cmdparams[3];
int newDebug;
if (!int.TryParse(rawNewDebug, out newDebug))
{
MainConsole.Instance.OutputFormat("{0} is not a valid debug level", rawNewDebug);
return;
}
if (newDebug < 0 || newDebug > 6)
{
MainConsole.Instance.OutputFormat("{0} is outside the valid debug level range of 0..6", newDebug);
return;
}
if (allReqs || inReqs)
{
MainServer.DebugLevel = newDebug;
MainConsole.Instance.OutputFormat("IN debug level set to {0}", newDebug);
}
if (allReqs || outReqs)
{
WebUtil.DebugLevel = newDebug;
MainConsole.Instance.OutputFormat("OUT debug level set to {0}", newDebug);
}
}
else
{
if (allReqs || inReqs)
MainConsole.Instance.OutputFormat("Current IN debug level is {0}", MainServer.DebugLevel);
if (allReqs || outReqs)
MainConsole.Instance.OutputFormat("Current OUT debug level is {0}", WebUtil.DebugLevel);
}
}
private static void HandleShowHttpHandlersCommand(string module, string[] args)
{
if (args.Length != 2)
{
MainConsole.Instance.Output("Usage: show http-handlers");
return;
}
StringBuilder handlers = new StringBuilder();
lock (m_Servers)
{
foreach (BaseHttpServer httpServer in m_Servers.Values)
{
handlers.AppendFormat(
"Registered HTTP Handlers for server at {0}:{1}\n", httpServer.ListenIPAddress, httpServer.Port);
handlers.AppendFormat("* XMLRPC:\n");
foreach (String s in httpServer.GetXmlRpcHandlerKeys())
handlers.AppendFormat("\t{0}\n", s);
handlers.AppendFormat("* HTTP:\n");
List<String> poll = httpServer.GetPollServiceHandlerKeys();
foreach (String s in httpServer.GetHTTPHandlerKeys())
handlers.AppendFormat("\t{0} {1}\n", s, (poll.Contains(s) ? "(poll service)" : string.Empty));
// handlers.AppendFormat("* Agent:\n");
// foreach (String s in httpServer.GetAgentHandlerKeys())
// handlers.AppendFormat("\t{0}\n", s);
handlers.AppendFormat("* LLSD:\n");
foreach (String s in httpServer.GetLLSDHandlerKeys())
handlers.AppendFormat("\t{0}\n", s);
handlers.AppendFormat("* StreamHandlers ({0}):\n", httpServer.GetStreamHandlerKeys().Count);
foreach (String s in httpServer.GetStreamHandlerKeys())
handlers.AppendFormat("\t{0}\n", s);
handlers.Append("\n");
}
}
MainConsole.Instance.Output(handlers.ToString());
}
/// <summary>

Some files were not shown because too many files have changed in this diff Show More