<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Randomhuman</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Randomhuman"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Randomhuman"/>
		<updated>2026-04-07T12:02:44Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/IRegionModule</id>
		<title>IRegionModule</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/IRegionModule"/>
				<updated>2011-09-18T11:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* The Base Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Region modules are .net/mono DLLs. During initialization of the simulator, the OpenSim bin directory (bin/) and the scriptengines (bin/ScriptEngines) directory are scanned for DLLs, in an attempt to load region modules stored there.&lt;br /&gt;
&lt;br /&gt;
Region modules execute within the heart of the simulator and have access to all its facilties. Typically, region modules register for a number of events, e.g. chat messages, user logins, texture transfers, and take what ever steps are appropriate for the purposes of the module.&lt;br /&gt;
&lt;br /&gt;
There are two types of region module.  &lt;br /&gt;
&lt;br /&gt;
* Non-shared modules where a separate module is created for each region/scene&lt;br /&gt;
* Shared region modules, where a single module is shared between all regions/scenes running on the same simulator.&lt;br /&gt;
&lt;br /&gt;
Region Modules require a few basic things:&lt;br /&gt;
* The Base Interface &lt;br /&gt;
* Some callbacks for OpenSim events&lt;br /&gt;
&lt;br /&gt;
This page now addresses the new region module mechanism, which has been in place since at least 0.6.9.  But for an older version of this page that references the older IRegionModule mechanisms, please see http://opensimulator.org/index.php?title=IRegionModule&amp;amp;oldid=13166&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's start off with the most basic region module possible.  Below is a region module that does nothing more than log the events that it receives.  Technically, it could be made a little simple by printing messages directly to the console rather than OpenSim's logging infrastructure but it's better to have it nicely integrated.&lt;br /&gt;
&lt;br /&gt;
You can also find this example in OpenSim/Region/OptionalModules/Example/BareBonesNonShared/BareBonesNonSharedModule.cs in OpenSim's source distribution from 0.7.1 onwards (not yet released).  There's also a bare bones shared module example there.&lt;br /&gt;
&lt;br /&gt;
In the source tree, the [Extension... attribute line is commented.  You can uncomment this, rebuild OpenSim and start it to see the module in action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using log4net;&lt;br /&gt;
using Mono.Addins;&lt;br /&gt;
using Nini.Config;&lt;br /&gt;
using OpenSim.Region.Framework.Interfaces;&lt;br /&gt;
using OpenSim.Region.Framework.Scenes;&lt;br /&gt;
&lt;br /&gt;
[assembly: Addin(&amp;quot;BareBonesNonSharedModule&amp;quot;, &amp;quot;0.1&amp;quot;)]&lt;br /&gt;
[assembly: AddinDependency(&amp;quot;OpenSim&amp;quot;, &amp;quot;0.5&amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
namespace OpenSim.Region.OptionalModules.Example.BareBonesNonShared&lt;br /&gt;
{&lt;br /&gt;
    /// &amp;lt;summary&amp;gt;&lt;br /&gt;
    /// Simplest possible example of a non-shared region module.&lt;br /&gt;
    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
    /// &amp;lt;remarks&amp;gt;&lt;br /&gt;
    /// This module is the simplest possible example of a non-shared region module (a module where each scene/region&lt;br /&gt;
    /// in the simulator has its own copy).&lt;br /&gt;
    ///&lt;br /&gt;
    /// When the module is enabled it will print messages when it receives certain events to the screen and the log&lt;br /&gt;
    /// file.&lt;br /&gt;
    /// &amp;lt;/remarks&amp;gt;&lt;br /&gt;
    [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;BareBonesNonSharedModule&amp;quot;)]&lt;br /&gt;
    public class BareBonesNonSharedModule : INonSharedRegionModule&lt;br /&gt;
    {&lt;br /&gt;
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);&lt;br /&gt;
        &lt;br /&gt;
        public string Name { get { return &amp;quot;Bare Bones Non Shared Module&amp;quot;; } }        &lt;br /&gt;
        &lt;br /&gt;
        public Type ReplaceableInterface { get { return null; } }&lt;br /&gt;
        &lt;br /&gt;
        public void Initialise(IConfigSource source)&lt;br /&gt;
        {&lt;br /&gt;
            m_log.DebugFormat(&amp;quot;[BARE BONES]: INITIALIZED MODULE&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        public void Close()&lt;br /&gt;
        {&lt;br /&gt;
            m_log.DebugFormat(&amp;quot;[BARE BONES]: CLOSED MODULE&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        public void AddRegion(Scene scene)&lt;br /&gt;
        {&lt;br /&gt;
            m_log.DebugFormat(&amp;quot;[BARE BONES]: REGION {0} ADDED&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        public void RemoveRegion(Scene scene)&lt;br /&gt;
        {&lt;br /&gt;
            m_log.DebugFormat(&amp;quot;[BARE BONES]: REGION {0} REMOVED&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
        }        &lt;br /&gt;
        &lt;br /&gt;
        public void RegionLoaded(Scene scene)&lt;br /&gt;
        {&lt;br /&gt;
            m_log.DebugFormat(&amp;quot;[BARE BONES]: REGION {0} LOADED&amp;quot;, scene.RegionInfo.RegionName);&lt;br /&gt;
        }                &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Base Interfaces ==&lt;br /&gt;
Now let's discussion the components of the example above.  Region modules must implement INonSharedRegionModule or ISharedRegionModule as appropriate - the example above implements INonSharedRegionModule.  However, both these interfaces extend IRegionModuleBase, defined as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public interface IRegionModuleBase&lt;br /&gt;
{&lt;br /&gt;
     string Name { get; }&lt;br /&gt;
     Type ReplaceableInterface { get; }&lt;br /&gt;
     void Initialise(IConfigSource source);&lt;br /&gt;
     void AddRegion(Scene scene);&lt;br /&gt;
     void RemoveRegion(Scene scene);&lt;br /&gt;
     void RegionLoaded(Scene scene);&lt;br /&gt;
     void Close();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding='5' border='1'&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Method&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This name is shown when the console command &amp;quot;show modules&amp;quot; is run.  For example, &amp;quot;Sim Chat Module&amp;quot; or &amp;quot;The Best Region Module Ever&amp;quot;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ReplaceableInterface&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;If this is not null, then the module is not loaded if any other module implements the given interface.  One use for this is to provide 'stub' functionality implementations that are only active if no other module is present&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Initialise&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This method is called immediately after the region module has been loaded into the runtime, before it has been added to a scene or scenes.  IConfigSource is a [http://nini.sourceforge.net/ Nini] class that contains the concatentation of config parameters from OpenSim.ini, OpenSimDefaults.ini and the appropriate ini files in bin/config-include&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;AddRegion&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This method is called when a region is added to the module.  For shared modules this will happen multiple times (one for each module).  For non-shared modules this will happen only once.  The module can store the scene reference and use it later to reach and invoke OpenSim internals and interfaces.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;RemoveRegion&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Called when a region is removed from a module.  For shared modules this can happen multiple times.  For non-shared region modules this will happen only once and should shortly be followed by a Close().  On simulator shutdown, this method will be called before Close().  RemoveRegion() can also be called if a region/scene is manually removed while the simulator is running.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;RegionLoaded&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Called when all modules have been added for a particular scene/region.  Since all other modules are now loaded, this gives the module an opportunity to obtain interfaces or subscribe to events on other modules.  Called once for a non-shared region module and multiple times for shared region modules.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Close&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This method will be invoked when the sim is closing down.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INonSharedRegionModule itself contains no methods, being defined simply as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public interface INonSharedRegionModule : IRegionModuleBase&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ISharedRegionModule has one additional method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public interface ISharedRegionModule : IRegionModuleBase&lt;br /&gt;
{&lt;br /&gt;
    void PostInitialise();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table cellpadding='5' border='1'&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Method&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PostInitialise&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Called after Initialise() but before modules are added.  This may be a bug - it might be that this should really be called after all the regions have been added.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enabling the module ==&lt;br /&gt;
&lt;br /&gt;
Creating the module code itself isn't quite enough to enable it.  To do that, we need to make it visible to OpenSim's module mechanism (which is currently [http://www.mono-project.com/Mono.Addins Mono.Addins]).&lt;br /&gt;
&lt;br /&gt;
This is done by adding an Extension attribute to the class, for example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
[Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;BareBonesNonSharedModule&amp;quot;)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important part here is the &amp;quot;Path&amp;quot; section &amp;quot;/OpenSim/RegionModules&amp;quot; - this is how OpenSim retrieves modules from Mono.Addins.  The Id can be anything meaningful to the module.&lt;br /&gt;
&lt;br /&gt;
Newer Mono versions also need this kind of section before the namespace declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
[assembly: Addin(&amp;quot;BareBonesNonSharedModule&amp;quot;, &amp;quot;0.1&amp;quot;)]&lt;br /&gt;
[assembly: AddinDependency(&amp;quot;OpenSim&amp;quot;, &amp;quot;0.5&amp;quot;)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the beginning of your module source code file you need to add this line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using Mono.Addins;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And prebuild.xml needs to include such a line for newer Mono versions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Reference name=&amp;quot;Mono.Addins.dll&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integrating with OpenSim ==&lt;br /&gt;
&lt;br /&gt;
NOTE: This section is now very out of date - NEEDS WORK!&lt;br /&gt;
&lt;br /&gt;
=== Accessible Objects ===&lt;br /&gt;
&lt;br /&gt;
'''Note:''' these are internal interfaces, and will change in the future, probably for the better.  We expect these to  stabilize over time, but for now this point in time snapshot is probably helpful.&lt;br /&gt;
&lt;br /&gt;
In the '''AddRegion''' routine you get access to the scene object for the region, from here you can spider down into the scene and get access to many other objects of interest.&lt;br /&gt;
&lt;br /&gt;
* scene.GetEntities() - returns a list of all the Entities in the environment.  This will be a combined list of SceneObjectGroups (prim sets) and ScenePresences (avatars).&lt;br /&gt;
* scene.GetAvatars() - get only the avatars in the scene (very handy for sending messages to clients)&lt;br /&gt;
* scene.EventManager - this is the object from which you can register callbacks for scene events.  Some examples provided in a little bit&lt;br /&gt;
* scene.RegionInfo - properties about the region&lt;br /&gt;
&lt;br /&gt;
=== Registering for Events ===&lt;br /&gt;
&lt;br /&gt;
Taking the [http://opensimulator.org/cgi-bin/viewcvs.cgi/trunk/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs?view=markup SunModule] as an example we can see the following code:&lt;br /&gt;
&lt;br /&gt;
In Initialise():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
m_scene.EventManager.OnFrame += SunUpdate;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pretty simple, we just got the EventManager and registered the SunUpdate method as a callback for the OnFrame event.  OnFrame is triggered every time there is a render frame in opensim, which is about 20 times per second.  If you are firing on the OnFrame event you need to do something small, or punt most of the time, as you'll negatively impact the performance of the system otherwise.&lt;br /&gt;
&lt;br /&gt;
Now, for that function...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public void SunUpdate()&lt;br /&gt;
{&lt;br /&gt;
    // this code just means only do this on every 1000th frame, and don't do it if the sun is in a fixed possition&lt;br /&gt;
    if (((m_frame++%m_frame_mod) != 0) || !ready || sunFixed)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    GenSunPos();        // Generate shared values once&lt;br /&gt;
&lt;br /&gt;
    List&amp;lt;ScenePresence&amp;gt; avatars = m_scene.GetAvatars();&lt;br /&gt;
    foreach (ScenePresence avatar in avatars)&lt;br /&gt;
    {&lt;br /&gt;
        if (!avatar.IsChildAgent)&lt;br /&gt;
            avatar.ControllingClient.SendSunPos(Position, Velocity, CurrentTime, SecondsPerSunCycle, SecondsPerYear, OrbitalPosition);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // set estate settings for region access to sun position&lt;br /&gt;
    m_scene.RegionInfo.RegionSettings.SunVector = Position;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SunUpdate() takes no parameter (some events may require them).  It only fires every 1000th frame by default (m_frame_mod = 1000 in this module), so it doesn't take too many cycles.&lt;br /&gt;
&lt;br /&gt;
In order for the sun position to change for the clients, they need to be told that it changes.  This is done by getting a list of all the Avatars from the scene, then sending the Sun Position to each of them in turn.  It is important to check to see if the avatar is a ChildAgent, otherwise you will generate zombies in opensim world.&lt;br /&gt;
&lt;br /&gt;
== Where to go from here ==&lt;br /&gt;
&lt;br /&gt;
* [[Getting Started with Region Modules]] -- the Hello World of OpenSim application development.  Rather old by now but still worth a look.&lt;br /&gt;
* http://bluewallvirtual.com/node/14 - More shared region module example code by Bluewall.&lt;br /&gt;
* [[New_Region_Modules|Development discussion of the current region module mechanism]]&lt;br /&gt;
* Read the source for existing opensim core modules.  These are in the OpenSim.Region.CoreModules and OpenSim.Region.OptionalModules projects.  Looking through this code is an extremely good way to find out what region modules can do and how they can do it.&lt;br /&gt;
* Read the source code for the EventManager class in the OpenSim.Region.Framework.Scenes project.  These list the many events that exist.  Some modules may also export their own events (e.g. OnInventoryArchiveSaved in the InventoryArchiverModule at OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/).&lt;br /&gt;
* Help write some examples here.  OpenSim grows with your contributions.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Development_Team</id>
		<title>Development Team</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Development_Team"/>
				<updated>2011-09-17T18:10:10Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* Added myself to Additional Developers/Testers/Contributors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Quicklinks}} &lt;br /&gt;
&lt;br /&gt;
== Active Core Developers  ==&lt;br /&gt;
&lt;br /&gt;
Developers who have commit access to our central server, are [http://www.ohloh.net/projects/4753/contributors regular contributors] to the codebase, and have voting rights over development and process issues of the OpenSimulator project. See [[Organization]]. &lt;br /&gt;
&lt;br /&gt;
*'''Only voted in developers are listed here, please do not list yourself'''&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IRC Nick &lt;br /&gt;
! Name &lt;br /&gt;
! SL Avatar &lt;br /&gt;
! Other Grid &lt;br /&gt;
! Time Zone&amp;lt;br&amp;gt;(UTC) &lt;br /&gt;
! Org &lt;br /&gt;
! Areas of Interest&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Adam Frisby|Adam Frisby]] &lt;br /&gt;
| Adam Frisby &lt;br /&gt;
| Adam Zaius &lt;br /&gt;
| &lt;br /&gt;
| +8 &lt;br /&gt;
| DeepThink Pty Ltd &lt;br /&gt;
| Terrain, Performance&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Chi11ken|chi11ken]] &lt;br /&gt;
| Jeff Ames &lt;br /&gt;
| Chillken Proto &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +9 &lt;br /&gt;
| [http://www.genkii.com Genkii] &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Justincc|justincc]] &lt;br /&gt;
| Justin Clark-Casey &lt;br /&gt;
| Lulworth Beaumont &lt;br /&gt;
| Justin Clark-Casey (all other grids) &lt;br /&gt;
| 0 &lt;br /&gt;
| OSVW Consulting&amp;lt;br&amp;gt;[http://justincc.org/blog justincc's OpenSim blog] &lt;br /&gt;
| Grid, performance &amp;amp;amp; reliability, inventory (avatar and object), assets, scenes, OARs, etc. Generally speaking, my main interest is to create infrastructure that other people can build on top of.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Dahlia|dahlia]] &lt;br /&gt;
| T. Hoff &lt;br /&gt;
| Dahlia Trimble &lt;br /&gt;
| &lt;br /&gt;
| -8 / -7 &lt;br /&gt;
| Independent &lt;br /&gt;
| Collision geometry, various math and physics issues, occasional bug fixes and random enhancements&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Melanie T|Melanie_T]] &lt;br /&gt;
| Melanie &lt;br /&gt;
| Melanie Milland &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +1 &lt;br /&gt;
| Independent &lt;br /&gt;
| Scripting, Prims/Scene, Life, The Universe, and Everything&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Diva|Diva]] &lt;br /&gt;
| Crista Lopes &lt;br /&gt;
| Diva Canto &lt;br /&gt;
| Crista Lopes / Diva Canto &lt;br /&gt;
| -8 &lt;br /&gt;
| University of California, Irvine &lt;br /&gt;
| Everything, except databases&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Dslake|dslake]] &lt;br /&gt;
| Dan Lake &lt;br /&gt;
| Dan Lake &lt;br /&gt;
| ScienceSim &lt;br /&gt;
| -8 / -7 &lt;br /&gt;
| Intel &lt;br /&gt;
| Scalability, Performance, Network stack&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Marck|Marck00]] &lt;br /&gt;
| M. Kirsch &lt;br /&gt;
| Marck Kjeller &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| Independent &lt;br /&gt;
| Everything that catches my attention and that I can get my head around. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cmickeyb &lt;br /&gt;
| Mic Bowman &lt;br /&gt;
| Mic Bowman &lt;br /&gt;
| ScienceSim &lt;br /&gt;
| -8 / -7 &lt;br /&gt;
| Intel &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:BlueWall|BlueWall]] &lt;br /&gt;
| James Hughes &lt;br /&gt;
| BlueWall Slade &lt;br /&gt;
| BlueWall Slade &lt;br /&gt;
| -5 &lt;br /&gt;
| BlueWall Information Technologies, LLC &lt;br /&gt;
| Various parts&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Nebadon|Nebadon]] &lt;br /&gt;
| Michael Emory Cerquoni &lt;br /&gt;
| Nebadon Izumi &lt;br /&gt;
| Nebadon Izumi &lt;br /&gt;
| -7 Arizona &lt;br /&gt;
| Oni Kenkon Creations &lt;br /&gt;
| Building, Scripting, Testing&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Snoopy2|Snoopy2]] &lt;br /&gt;
| Snoopy Pfeffer &lt;br /&gt;
| Snoopy Pfeffer &lt;br /&gt;
| Snoopy Pfeffer &lt;br /&gt;
|&lt;br /&gt;
| [http://www.3dmetaverse.com/ http://www.3dmetaverse.com/] &lt;br /&gt;
| Region Hosting, Open Metaverse, 3D Web, server and viewers, service management&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Core Developers Following the White Rabbit  ==&lt;br /&gt;
&lt;br /&gt;
Core developers who have temporarily (we hope) gone chasing the white rabbit. They are in all similar to the active core developers, except that they haven't been that active lately, so their voting rights are awaiting their come back. &lt;br /&gt;
&lt;br /&gt;
*'''Only voted in developers are listed here, please do not list yourself'''&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IRC Nick &lt;br /&gt;
! Name &lt;br /&gt;
! SL Avatar &lt;br /&gt;
! Other Grid &lt;br /&gt;
! Time Zone&amp;lt;br&amp;gt;(UTC) &lt;br /&gt;
! Org &lt;br /&gt;
! Areas of Interest&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lbsa71|lbsa71]] &lt;br /&gt;
| Stefan Andersson &lt;br /&gt;
| Tribal Skytower &lt;br /&gt;
| OSG:Stefan Andersson&amp;lt;br&amp;gt;TN:Stefan Andersson &lt;br /&gt;
| +1 &lt;br /&gt;
| [http://tribalmedia.se/ Tribal Media AB] &lt;br /&gt;
| Web Integration&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MW|MW]] &lt;br /&gt;
| Darren &lt;br /&gt;
| Wright Juran &lt;br /&gt;
| &lt;br /&gt;
| 0 &lt;br /&gt;
| &lt;br /&gt;
| Everything&lt;br /&gt;
|-&lt;br /&gt;
| ckrinke &lt;br /&gt;
| Charles&amp;amp;nbsp;Krinke &lt;br /&gt;
| Charlesk&amp;amp;nbsp;Bing &lt;br /&gt;
| &lt;br /&gt;
| -8 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Reliability/Grid servers/ll-functions&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mikem|mikem]] &lt;br /&gt;
| Mike Mazur &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +9 &lt;br /&gt;
| Independent &lt;br /&gt;
| Patches, scripting improvements, LSL compiler&lt;br /&gt;
|-&lt;br /&gt;
| [[User:HomerHorwitz|homerh]] &lt;br /&gt;
| Homer Horwitz &lt;br /&gt;
| Homer Horwitz &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +2 &lt;br /&gt;
| Independent &lt;br /&gt;
| Rev. engineering, &amp;quot;now, that's funny&amp;quot; problems, but still interested in all parts of it&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Nlin|nlin]] &lt;br /&gt;
| N Lin &lt;br /&gt;
| Standard Drucker &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +9 &lt;br /&gt;
| [http://www.3di.jp/en/ 3Di Inc, Japan]&amp;lt;br&amp;gt;http://www.3di.jp/en/ &lt;br /&gt;
| Physics, scripting, more to come&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Arthursv|arthursv]] &lt;br /&gt;
| Arthur Valadares &lt;br /&gt;
| &lt;br /&gt;
| NONE &lt;br /&gt;
| -8 &lt;br /&gt;
| University of California, Irvine &lt;br /&gt;
| Unit testing, database plugins, bug fixes, general&lt;br /&gt;
|-&lt;br /&gt;
| [[User:DrScofield|drscofld]] &lt;br /&gt;
| Dirk Husemann &lt;br /&gt;
| Dr Scofield &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| [http://xyzzyxyzzy.net/ xyzzyxyzzy.net] &lt;br /&gt;
| Reliability, networking protocols, inventory, assets, remote control, voice, and pretty much everything else&amp;amp;nbsp;:-) &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:Teravus|Teravus]] &lt;br /&gt;
| Daniel Olivares &lt;br /&gt;
| Teravus Ousley &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| W3z &lt;br /&gt;
| Physics &amp;amp;amp; Admin tools, A working sim.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Retired Core Developers  ==&lt;br /&gt;
&lt;br /&gt;
Core developers who have transcended our mortal plane, i.e. they are no longer directly engaged with the project. Thank you forever for your contributions! &lt;br /&gt;
&lt;br /&gt;
*'''Only formerly voted in developers are listed here, please do not list yourself'''&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IRC Nick &lt;br /&gt;
! Name &lt;br /&gt;
! SL Avatar &lt;br /&gt;
! Other Grid &lt;br /&gt;
! Time Zone&amp;lt;br&amp;gt;(UTC) &lt;br /&gt;
! Org &lt;br /&gt;
! Areas of Interest&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Babblefrog|babblefrog]] &lt;br /&gt;
| Brian McBee &lt;br /&gt;
| Dogen Coldstream &lt;br /&gt;
| Babblefrog Ballistic (osgrid) &lt;br /&gt;
| -8 &lt;br /&gt;
| Disorganized &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Danx0r|danx0r]] &lt;br /&gt;
| Dan Miller &lt;br /&gt;
| Albert Pascal &lt;br /&gt;
| &lt;br /&gt;
| -8 &lt;br /&gt;
| squiggle.com &lt;br /&gt;
| PHEEZIKS; everything&lt;br /&gt;
|-&lt;br /&gt;
| Tleiades &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Tleiades&amp;amp;nbsp;Hax &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Grid servers/Database&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Darok|Darok]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Darok Kaminski &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Physics engines (especially BulletX)&lt;br /&gt;
|-&lt;br /&gt;
| Gareth / Gwen &lt;br /&gt;
| Gareth Nelson &lt;br /&gt;
| Gareth Ellison &lt;br /&gt;
| Gareth Nelson (on everywhere but SL) &lt;br /&gt;
| BST (UTC+1) &lt;br /&gt;
| Litesim Ltd &lt;br /&gt;
| Grid servers, sim border crossing, avatar animations&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Dalien|dalien]] &lt;br /&gt;
| Dalien Talbot &lt;br /&gt;
| Dalien Talbot &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| Mostly TCP-based &lt;br /&gt;
| Small fixes; rev.eng./prototyping; nightlies; git-keeper&lt;br /&gt;
|-&lt;br /&gt;
| [[Alondria]] &lt;br /&gt;
| &lt;br /&gt;
| Alondria LeFay &lt;br /&gt;
| Alondria LeFay (OSGrid) &lt;br /&gt;
| -8 &lt;br /&gt;
| Independent &lt;br /&gt;
| Implementation of LSL functions and other scripting tidbits.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:SeanDague|sdague]] &lt;br /&gt;
| Sean Dague &lt;br /&gt;
| Neas Bade &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| IBM &lt;br /&gt;
| Database, Linux, Testing, Misc&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MingChen|MingChen]] &lt;br /&gt;
| Mike/Michael Ortman &lt;br /&gt;
| Ming Chen &lt;br /&gt;
| &lt;br /&gt;
| -6 (-5 in Summer) &lt;br /&gt;
| DeepThink Pty Ltd &lt;br /&gt;
| Estate/Parcel Support/Modules/Keeping things all neat and tidy.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Tedd|Tedd]] &lt;br /&gt;
| Tedd Hansen &lt;br /&gt;
| Tedd Maa &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| Tedd Hansen &lt;br /&gt;
| Programming/Scripting/Architecture&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Adjohn|adjohn]] &lt;br /&gt;
| Adam Johnson &lt;br /&gt;
| Zeuz Zenovka &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +9 &lt;br /&gt;
| [http://www.genkii.com Genkii] &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Joha1|joha1]] &lt;br /&gt;
| Johan Berntsson &lt;br /&gt;
| Joppi Brandenburg &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +9 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Performance, packet handling/libSL&lt;br /&gt;
|-&lt;br /&gt;
| jhurliman &lt;br /&gt;
| John Hurliman &lt;br /&gt;
| John Hurliman &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wiki Sysops  ==&lt;br /&gt;
&lt;br /&gt;
Along with the core developers, these people help manage the OpenSimulator wiki as well as make other contributions (see Areas of Interest). &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IRC Nick &lt;br /&gt;
! Name &lt;br /&gt;
! SL Avatar &lt;br /&gt;
! Other Grid &lt;br /&gt;
! Time Zone&amp;lt;br&amp;gt;(UTC) &lt;br /&gt;
! Org &lt;br /&gt;
! Areas of Interest&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Makopoppo|Makopoppo]] &lt;br /&gt;
| Makiko Nomura &lt;br /&gt;
| Mako Nozaki &lt;br /&gt;
| Everywhere &lt;br /&gt;
| +9 Tokyo, Japan &lt;br /&gt;
| As an individual developer &lt;br /&gt;
| Everything for improving usability and connectability - wiki/issue management, documentation, localization(Japanese), modifying the interface mainly of core modules&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Fritigern|Fritigern]] &lt;br /&gt;
| S-E-C-R-E-T &lt;br /&gt;
| Fritigern Gothly &lt;br /&gt;
| SecondLife, OSGrid &lt;br /&gt;
| +1 GMT &lt;br /&gt;
| &lt;br /&gt;
| My interests are many, and extremely varied. One thing that i am very interested in, is seeing OpenSim grow, mature, and develop into something that really does rival SL/LL.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Developers/Testers/Contributors  ==&lt;br /&gt;
&lt;br /&gt;
These people have contributed and/or are contributing bug reports, patches, testing, and all sorts of other goodies to the project. &amp;lt;br&amp;gt; '''Newcomers please add yourself to bottom of the list!''' &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IRC Nick &lt;br /&gt;
! Name &lt;br /&gt;
! SL Avatar &lt;br /&gt;
! Other Grid &lt;br /&gt;
! Time Zone&amp;lt;br&amp;gt;(UTC) &lt;br /&gt;
! Org &lt;br /&gt;
! Areas of Interest&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Jtclark48|jclark4]] &lt;br /&gt;
| Jay Clark &lt;br /&gt;
| Jay Clarke &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| IBM &lt;br /&gt;
| Physics, Grid Host, AI, Scripting, Testing&lt;br /&gt;
|-&lt;br /&gt;
| [[User:AdamStevenson|BigFootAg]] &lt;br /&gt;
| Adam Stevenson &lt;br /&gt;
| Adamus Petrov &lt;br /&gt;
| &lt;br /&gt;
| -6 &lt;br /&gt;
| Texas A&amp;amp;amp;M University &lt;br /&gt;
| AI, Skynet, Evolving Systems, Biology&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Jeff1564|Jeff1564]] &lt;br /&gt;
| Jeff &lt;br /&gt;
| Potter Taurog &lt;br /&gt;
| Potter Taurog &lt;br /&gt;
| -8 &lt;br /&gt;
| http://myopengrid.com &lt;br /&gt;
| Building, Scripting, Testing&lt;br /&gt;
|-&lt;br /&gt;
| Rock_Vacirca &lt;br /&gt;
| Colin Withers &lt;br /&gt;
| Rock Vacirca &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| +1 &lt;br /&gt;
| http://rock-vacirca.blogspot.com &lt;br /&gt;
| Testing, building, scripting, maintaining an opensim blog.&lt;br /&gt;
|-&lt;br /&gt;
| simsim &lt;br /&gt;
| caocao &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| +9 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Testing whole functions of OpenSim system,working with OpenSim-Engine,reporting on OpenSim&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Vicero Lambert|Vicero Lambert]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Magi|Magi]] &lt;br /&gt;
| Andy Agnew &lt;br /&gt;
| Magi Merlin &lt;br /&gt;
| &lt;br /&gt;
| +10 &lt;br /&gt;
| Spun Pty Ltd &lt;br /&gt;
| 3D Web Integration, Database stuff and playing with the odds and ends box.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ClarkZone|ClarkZone]] &lt;br /&gt;
| Troy Admin(@ClarkZone) &lt;br /&gt;
| Troy Childs &lt;br /&gt;
| Troy Admin (ClarkZone) &lt;br /&gt;
| -5 &lt;br /&gt;
| Http://clarkzone.dyndns.org &lt;br /&gt;
| Tester and Grid Host&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Aiaustin|aiaustin]] &lt;br /&gt;
| Ai Austin &lt;br /&gt;
| Ai Austin &lt;br /&gt;
| Ai Austin &lt;br /&gt;
| +0 &lt;br /&gt;
| AIAI, Virtual University of Edinburgh&amp;lt;br&amp;gt;http://www.aiai.ed.ac.uk/~ai/&amp;lt;br&amp;gt;http://vue.ed.ac.uk/openvue/ &lt;br /&gt;
| Windows tests&amp;lt;br&amp;gt;Content testing&amp;lt;br&amp;gt;Use of multiple VWs&lt;br /&gt;
|-&lt;br /&gt;
| Marc Manders &lt;br /&gt;
| Marc Manders &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| +6 &lt;br /&gt;
| marcmanders@gmail.com &lt;br /&gt;
| Creative features&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Balthazar|balthazar]] &lt;br /&gt;
| Trevor Brooks &lt;br /&gt;
| Balthazar Sin &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| None &lt;br /&gt;
| Terrains, testing and some small coding tasks&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Jimbo2120|jimbo2120]] &lt;br /&gt;
| Michael Osias &lt;br /&gt;
| Illuminous Beltran &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| IBM &lt;br /&gt;
| Grid, AI, Skynet, coding and testing&lt;br /&gt;
|-&lt;br /&gt;
| ZeroPoint &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Guilderoy&amp;amp;nbsp;Dench &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Programming/Database&lt;br /&gt;
|-&lt;br /&gt;
| [[User:DerekTang|DerekTang]] &lt;br /&gt;
| Derek Tang &lt;br /&gt;
| Derek Timeless &lt;br /&gt;
| Derek Tang (ChineseGrid) &lt;br /&gt;
| +8 &lt;br /&gt;
| http://ChineseGrid.net &lt;br /&gt;
| Running a public WINDOWS sim for testing, Docs, Helping Chinese users to enjoy OpenSim; building Chinese OpenSim communities. In construction...&lt;br /&gt;
|-&lt;br /&gt;
| [[User:TayB|TayB]] &lt;br /&gt;
| Earl Balai &lt;br /&gt;
| Taylor Dae &lt;br /&gt;
| &lt;br /&gt;
| -10 &lt;br /&gt;
| WhynGrid &lt;br /&gt;
| Grid Host,Networking,Contributions &amp;amp;amp; Testing.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:JamieDav|JamieDav]] &lt;br /&gt;
| Jamie David &lt;br /&gt;
| Jamie David &lt;br /&gt;
| &lt;br /&gt;
| +7 &lt;br /&gt;
| Forum &lt;br /&gt;
| Grid, Sim, Avitar, Functionality&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Krtaylor|Krtaylor]] &lt;br /&gt;
| Kurt Taylor &lt;br /&gt;
| Kurt Stringer &lt;br /&gt;
| &lt;br /&gt;
| -6 &lt;br /&gt;
| IBM &lt;br /&gt;
| Grid, Networking, Monitoring, Scripting, Inventory, Testing&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Nink|Nink]] &lt;br /&gt;
| Peter Finn &lt;br /&gt;
| Nink Noonan &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| IBM &lt;br /&gt;
| Disruptive Influence.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Bruce|Bruce]] &lt;br /&gt;
| Bruce Meerson &lt;br /&gt;
| Bruce Meerson &lt;br /&gt;
| &lt;br /&gt;
| +8 &lt;br /&gt;
| HiPiHi &lt;br /&gt;
| Watching.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Darb|DarbD]] &lt;br /&gt;
| Brian B. Quinn &lt;br /&gt;
| Darb Dabney &lt;br /&gt;
| regions&amp;lt;br&amp;gt;near Marin &lt;br /&gt;
| PST/SLT (-7 or -8) &lt;br /&gt;
| County of Marin, California&amp;lt;br&amp;gt; http://blog.3dmap.me &lt;br /&gt;
| LiDAR-based sculpties, real-world terrain, &amp;lt;br&amp;gt;pursuit of civic paraverses, virtual Emergency Operations Centers&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Charlie Omega|CharlieO]] &lt;br /&gt;
| Dan &lt;br /&gt;
| Charlie Omega &lt;br /&gt;
| &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Mild coding/tweaking/simple feature adds, Stress testing/break stuff, Testing limits of existing code. Making sure [[LSL Status]] is up to date&lt;br /&gt;
|-&lt;br /&gt;
| oobscure &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Opensource Obscure &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| http://www.opensim.it &lt;br /&gt;
| Running a public Linux sim for testing, Docs, Helping italian users, Building opensim communities, Watching&lt;br /&gt;
|-&lt;br /&gt;
| pitman &lt;br /&gt;
| Mike Pitman &lt;br /&gt;
| Rez Tone &lt;br /&gt;
| &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| IBM &lt;br /&gt;
| Scientific visualization schemes, virt world product design, persistant workspaces, virt world based big biz&lt;br /&gt;
|-&lt;br /&gt;
| Shenlei &lt;br /&gt;
| Shenlei Winkler &lt;br /&gt;
| Shenlei Flasheart, Shenlei Winkler &lt;br /&gt;
| &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Fashion Research Institute &lt;br /&gt;
| Product Design and Development, Apparel industry, and o yes, I wrote the book&amp;amp;nbsp;;)&lt;br /&gt;
|-&lt;br /&gt;
| cmu &lt;br /&gt;
| Christopher Mumme &lt;br /&gt;
| Snook Destiny &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| http://www.cmu-develop.de/ and research group &amp;quot;Collaboration Systems and CSCW&amp;quot; at Clausthal University of Technology &lt;br /&gt;
| Testing OpenSim, working with OpenSim-Engine, reporting on OpenSim&lt;br /&gt;
|-&lt;br /&gt;
| [[Silpol]] &lt;br /&gt;
| Andriy Tymchenko &lt;br /&gt;
| Andy Tir &lt;br /&gt;
| &lt;br /&gt;
| EET (+2/3) &lt;br /&gt;
| http://silpol.blogspot.com/ (also visible at Nokia) &lt;br /&gt;
| Highly uncoordinated mess with elements of palace games, under-table diplomacy, rebellion, coup d'état and mutiny. optionally pirate&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Grumly|Grumly]] &lt;br /&gt;
| &lt;br /&gt;
| Forest Klaar &lt;br /&gt;
| Grumly TheBear &lt;br /&gt;
| GMT+1 &lt;br /&gt;
| .NET MCAD Dev/Arch/Trainer http://www.devoteam.com &lt;br /&gt;
| Trying to get into OpenSim code for now. Particularly interrested in data persistence. blog (Hello, Avatar!): http://lslblog.free.fr&lt;br /&gt;
|-&lt;br /&gt;
| [[User:DaTwitch|DaTwitch]] &lt;br /&gt;
| James G. Stallings II &lt;br /&gt;
| &amp;lt;br&amp;gt;Lazarus Longstaff &lt;br /&gt;
| Hiro Protagonist (OSGrid) &lt;br /&gt;
| -5 &lt;br /&gt;
| House Husband &lt;br /&gt;
| OSGrid Region owner, OSGrid Operator,&amp;lt;br&amp;gt;Forum Admin, sometime wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| gryc &lt;br /&gt;
| Gryc Ueusp &lt;br /&gt;
| Gryc Uriza &lt;br /&gt;
| Gryc Uriza(OSGrid) &lt;br /&gt;
| -6 &lt;br /&gt;
| &lt;br /&gt;
| PHP scripting, web interfaces, interconnectivity, cross-platformedness&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Phrearch|Phrearch]] &lt;br /&gt;
| Jeroen van Veen &lt;br /&gt;
| Phrearch Miles &lt;br /&gt;
| Phrearch Miles(OSGrid) &lt;br /&gt;
| Amsterdam/Paris &lt;br /&gt;
| &lt;br /&gt;
| HWIOS, WiXTD, Wikidoc, Moo, User interfaces&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Burnman|Burnman]] &lt;br /&gt;
| Allen &lt;br /&gt;
| Burnman Bedlam &lt;br /&gt;
| &lt;br /&gt;
| Boston, USA &lt;br /&gt;
| &lt;br /&gt;
| Testing, testing, and more testing! Getting familiar with the source, interested in all aspects of the project.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Krisbfunk|krisbfunk]] &lt;br /&gt;
| Kris Bulman &lt;br /&gt;
| Krisbfunk Vought &lt;br /&gt;
| Krisbfunk Nocturnal(OSGrid) &lt;br /&gt;
| PE, Canada (-4) &lt;br /&gt;
| Edactive Technologies&amp;lt;br&amp;gt;NocturnalEye Productions&amp;lt;br&amp;gt;UPEI &lt;br /&gt;
| Currently: Testing, bug reports, wiki updating, building on OSGrid&lt;br /&gt;
|-&lt;br /&gt;
| [[User:HashBox|HashBox]] &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Sibariel Darkstone &lt;br /&gt;
| Sibariel Darkstone (OSGrid) &lt;br /&gt;
| New Zealand (+12) &lt;br /&gt;
| &lt;br /&gt;
| Testing, bug reports, and updating the wiki.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Kinoc|Kinoc]] &lt;br /&gt;
| Kino Coursey &lt;br /&gt;
| Daxxon Jaxxon &lt;br /&gt;
| Daxxon Kinoc (OSgrid) &lt;br /&gt;
| -6 &lt;br /&gt;
| Daxtron Laboratories &amp;lt;br&amp;gt; http://www.daxtron.com&amp;lt;br&amp;gt; University of North Texas &lt;br /&gt;
| AI, Semantic web, Ontologies, Natural Laanguage Processing, Cyc, Bots, NPC&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Trapuh|trapuh]] &lt;br /&gt;
| Pedro Ribeiro &lt;br /&gt;
| Vaiten Forder &lt;br /&gt;
| &lt;br /&gt;
| GMT &lt;br /&gt;
| University Student, Escola Superior de Educação de Viseu, Portugal &lt;br /&gt;
| Testing, eventual bug reports and wiki. Music, web/digital arts and php+sql.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:SonicViz|SonicViz]] &lt;br /&gt;
| Paul Cohen &lt;br /&gt;
| Komuso Tokugawa &lt;br /&gt;
| &lt;br /&gt;
| +9 &lt;br /&gt;
| Http://sonicviz.com &lt;br /&gt;
| Audio/Music, Interactive Music, Control Protocols, Interfaces, VisualFX, Procedural animation/Generative systems + testing and general dev&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mokele|mokele]] &lt;br /&gt;
| Scott Norman &lt;br /&gt;
| Mokelembembe Mokeev &lt;br /&gt;
| &lt;br /&gt;
| -8 (Southern California) &lt;br /&gt;
| Web Developer (PHP and MySQL) &lt;br /&gt;
| Interested in seeing running on PowerPC Macs which it is. So, when I can, I'll compile and test on PowerPC Mac (PowerBook G4) and submit reports and then update the wiki if need on installing on Mac. Also have a Ubuntu 7.10 server that I can do testing on too.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Devalnor|devalnor]] &lt;br /&gt;
| Devalnor &lt;br /&gt;
| M. Watkin &lt;br /&gt;
| &lt;br /&gt;
| +1 (Belgium) &lt;br /&gt;
| &lt;br /&gt;
| Small Patch code, bug reports, and updating the wiki.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Ezekiel|Ezekiel]] &lt;br /&gt;
| Ezekiel &lt;br /&gt;
| Ezekiel Zabelin &lt;br /&gt;
| &lt;br /&gt;
| +1 &lt;br /&gt;
| http://www.yosims.com &lt;br /&gt;
| Concepts, business aspects of virtual worlds - web developer (PHP, MySQL, Javascript, LSL)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Buggmaster|Buggmaster]] &lt;br /&gt;
| Mike D &lt;br /&gt;
| Bug Master &lt;br /&gt;
| None &lt;br /&gt;
| -8 &lt;br /&gt;
| http://www.adultmetaverse.com &lt;br /&gt;
| Grid, Data/Web PHP/PERL/MySQL&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Nixnerd|nixnerd]] &lt;br /&gt;
| &lt;br /&gt;
| Dangerously Moody &lt;br /&gt;
| None &lt;br /&gt;
| GMT &lt;br /&gt;
| http://www.integratedtechnologies.eu &lt;br /&gt;
| Cross Platform Testing, Feedback, Bug Reporting&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MoHax|mohax]] &lt;br /&gt;
| Mo Hax &lt;br /&gt;
| Mo Hax &lt;br /&gt;
| &lt;br /&gt;
| -5 Eastern &lt;br /&gt;
| IBM &lt;br /&gt;
| Testing, Feedback, Content Contributions, Bug Reporting, Documenting, Development&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Webmage|webmage]] &lt;br /&gt;
| webmage &lt;br /&gt;
| Leyla Masala &lt;br /&gt;
| Web Mage &lt;br /&gt;
| +1 &lt;br /&gt;
| IBM &lt;br /&gt;
| Testing, terrain&lt;br /&gt;
|-&lt;br /&gt;
| [[User:NLStitch|NLStitch]] &lt;br /&gt;
| Marijn Oosterveld &lt;br /&gt;
| Stitch Seale &lt;br /&gt;
| NYA &lt;br /&gt;
| GMT +1 Amsterdam &lt;br /&gt;
| Twingate Systems (http://www.twingate.nl)&amp;lt;br&amp;gt;HanzeHogeschool Groningen, Netherlands &lt;br /&gt;
| Programming, Photography, AI&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Ideia Boa|Ideia Boa]] &lt;br /&gt;
| Joao Lopes &lt;br /&gt;
| Ideia Boa &lt;br /&gt;
| Ideia Boa or Boa Ideia in some grids &lt;br /&gt;
| GTM+1 Stockholm/Sweden &lt;br /&gt;
| WorldSimTERRA - Virtual World that speaks Portuguese too&amp;lt;br&amp;gt;http://www.worldsimterra.com &lt;br /&gt;
| Testing and more testing! Updating the original wiki and translating the OpenSim Wiki into Portuguese and reporting on OpenSim&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lulurun|lulurun]] &lt;br /&gt;
| liu &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +9 &lt;br /&gt;
| 3Di Inc, Japan &amp;lt;br&amp;gt;http://www.3di.jp &lt;br /&gt;
| Patches, openid, server performance, UGAI&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Carlosroundel|Carlosrounde]] &lt;br /&gt;
| Carlosroundel &lt;br /&gt;
| Carlos Roundel &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +1 &lt;br /&gt;
| Cyberlandia Italy&amp;lt;br&amp;gt;http://www.cyberlandia.net &lt;br /&gt;
| Grid, programmer, database, tester&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mikebert|Mikebert]] &lt;br /&gt;
| Michael Strunck &lt;br /&gt;
| Mikebert Miles &lt;br /&gt;
| Mikebert M34 &lt;br /&gt;
| +1 &lt;br /&gt;
| OpenSIM Wiki, Germany&amp;lt;br&amp;gt;http://www.opensim.de &lt;br /&gt;
| German Wiki, Translater, Server Performance (Linux/Windows), Tester, Feedback, Bug Reporting, Server-Hosting&lt;br /&gt;
|-&lt;br /&gt;
| Taoki &lt;br /&gt;
| Mircea Kitsune / Taoki Vixen &lt;br /&gt;
| Mircea Kitsune (OSGrid) / Mircea Lobo (LL grid) &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| GMT +2 &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| Usually testing and bug reporting but I also make smaller patches where I know what to do.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Patnad|Patnad]] &lt;br /&gt;
| Patrick &lt;br /&gt;
| Patnad Babii &lt;br /&gt;
| Patnad Babii (OSGrid) &lt;br /&gt;
| GMT -5 &lt;br /&gt;
| RezzMe Technologies&amp;lt;br&amp;gt;http://www.rezzme.com &lt;br /&gt;
| Bug testing and reporting, I code C# and have submitted a few patches&lt;br /&gt;
|-&lt;br /&gt;
| [[User:^DarkMan|^DarkMan]] &lt;br /&gt;
| Brian Adair &lt;br /&gt;
| Patrick Ouachita &lt;br /&gt;
| Brian Adair &amp;amp;#124; Patrick Meta &lt;br /&gt;
| -6 CST &lt;br /&gt;
| RealMetaLife &amp;amp;#124; B&amp;amp;amp;H Networking &lt;br /&gt;
| Building, Scripting, Testing, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Tlaukkan|Tommi Laukkanen]] &lt;br /&gt;
| Tommi Laukkanen &lt;br /&gt;
| &amp;amp;nbsp; &lt;br /&gt;
| Tommi Laukkanen &lt;br /&gt;
| +2 GMT &lt;br /&gt;
| http://www.bubblecloud.org &lt;br /&gt;
| Protocols ([http://www.bubblecloud.org MXP]), NHibernate, Scrip API, Map Generation, Bug Fixes, Grid Hosting&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mystical|Mystical]] &lt;br /&gt;
| Kevin Tweedy &lt;br /&gt;
| Mystical Demina &lt;br /&gt;
| Mystical Demina &lt;br /&gt;
| -5 &lt;br /&gt;
| Extreme Reality Grid&amp;lt;br&amp;gt;http://www.XRGrid.com &lt;br /&gt;
| Windows Communication Framework, Windows Workflow,Entity Framework, MSSQL&amp;lt;br&amp;gt;Enhancements,Commerce, Content,DotNetNuke based portal, development services&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Godfrey|Godfrey]] &lt;br /&gt;
| Jeff Lee &lt;br /&gt;
| Warin Cascabel &lt;br /&gt;
| &lt;br /&gt;
| -5 (EST5EDT) &lt;br /&gt;
| &lt;br /&gt;
| Testing, minor bugfixes. Scripting, building, animating&lt;br /&gt;
|-&lt;br /&gt;
| Jamenai &lt;br /&gt;
| Christopher Händler &lt;br /&gt;
| Jamenai Luik &lt;br /&gt;
| Jamenai Luik &lt;br /&gt;
| +1 &lt;br /&gt;
| Playneko Grid &amp;amp;#124; XIMDEX Jamenai&amp;lt;br&amp;gt;http://www.playneko.de&amp;lt;br&amp;gt;http://www.ximdex.de &lt;br /&gt;
| Performance,Bug Reporting, Hosting, Grid-Owner,(PHP, MySQL, Perl, JavaScript, LSL)&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Bikcmp|bikcmp]] &lt;br /&gt;
| Jason &lt;br /&gt;
| Jake1500 Allen &lt;br /&gt;
| Jason Helios (The Helios Grid) &lt;br /&gt;
| EST &lt;br /&gt;
| Blue Software &lt;br /&gt;
| Search, groups, land, and currency&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mark.malewski|Slipaway]] &lt;br /&gt;
| Mark Malewski &lt;br /&gt;
| Chris Rock &lt;br /&gt;
| &lt;br /&gt;
| -6 (-5 during summer - CDT) &lt;br /&gt;
| NexTECH / Joopla &lt;br /&gt;
| Web development &amp;amp;amp; systems integration, terrain, WIKI documentation, tutorials, testing, bug reporting and feedback.&lt;br /&gt;
|-&lt;br /&gt;
| barakademi &lt;br /&gt;
| Steve Topp &lt;br /&gt;
| barakademi Barzane &lt;br /&gt;
| same avi on baragrid OSgrid Grid4us sciencesim &lt;br /&gt;
| utc+1 (CET) paris &lt;br /&gt;
| http://xbot-sl.barakademi.org http://vps.barakademi.org/oswi http://vps.barakademi.org/oswi/loginscreen.php &lt;br /&gt;
| Music LiveMusic MetaverseMusic Opensim Libomv Mono-2.4 Linux (suse,debian,ubuntu) Admin Scripting Automating Development Intergration php mysql bash nant +++&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Robert d|robert_d]] &lt;br /&gt;
| Robert Dzikowski &lt;br /&gt;
| &lt;br /&gt;
| OSGrid: robert_d 13 &lt;br /&gt;
| UTC+1 &lt;br /&gt;
| [http://blog.rd-it.net http://blog.rd-it.net] &lt;br /&gt;
| Region Modules, Tutorials&lt;br /&gt;
|-&lt;br /&gt;
| john_ &lt;br /&gt;
| John&amp;amp;nbsp;Moyer &lt;br /&gt;
| VAJohn&amp;amp;nbsp;GeekSquad or&amp;amp;nbsp;Matthew&amp;amp;nbsp;Kendal &lt;br /&gt;
| &lt;br /&gt;
| -5 &lt;br /&gt;
| Best&amp;amp;nbsp;Buy/Geek&amp;amp;nbsp;Squad &lt;br /&gt;
| Tester&lt;br /&gt;
|-&lt;br /&gt;
| [[User:W!cKeD|_WicKeD]] &lt;br /&gt;
| Maik &lt;br /&gt;
| Maik Galaxy &lt;br /&gt;
| El Diablo &lt;br /&gt;
| +1 Germany &lt;br /&gt;
| Creatio Inc. / [http://www.OpenSimGerman.us/ OpenSimGerman.us] &lt;br /&gt;
| German Support, Translator, Building, Scripting, Testing, Hosting&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Stevie Wakowski|Stevie Wakowksi]] &lt;br /&gt;
| Steve Roberts &lt;br /&gt;
| Stevie Wakowski &lt;br /&gt;
| &lt;br /&gt;
| +10 Australia &lt;br /&gt;
| IBM &lt;br /&gt;
| OpenSim builds, Linux, Modrex, bug reporting, evangalist for OpenSim in business applications.&lt;br /&gt;
|-&lt;br /&gt;
| Revolution &lt;br /&gt;
| Matthew &lt;br /&gt;
| Revolution Smythe &lt;br /&gt;
| Revolution Smythe &lt;br /&gt;
| -6 Central USA &lt;br /&gt;
| None &lt;br /&gt;
| Script engine, physics engine, general odd bugs, interesting and odd things&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ClemsonGS|clemsonGS]] &lt;br /&gt;
| Brian Cass &lt;br /&gt;
| BC Sands &lt;br /&gt;
| Brian Cass (VWC Grid) &lt;br /&gt;
| -5 &lt;br /&gt;
| http://www.cvwconline.org/ &lt;br /&gt;
| Developing virtual worlds for use in higher education&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| AlexRa &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Independent &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Robert Adams &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Looking Glass Viewer &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Mikko Pallari &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Realxtend &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| StrawberryFride &lt;br /&gt;
| Chris Hart &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ReactionGrid &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:RemedyTomm|RemedyTomm]] &lt;br /&gt;
| Tom Grimshaw &lt;br /&gt;
| Tomm Remedy &lt;br /&gt;
| KGrid: Casper Warden OSGrid: Tomm Remedy &lt;br /&gt;
| UTC+0 (BST) &lt;br /&gt;
| Remedy Communications &lt;br /&gt;
| Texture pipeline, Groups, ObjectUpdates&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Rob Smart &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| IBM &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| MicheilMerlin &lt;br /&gt;
| Micheil Merlin &lt;br /&gt;
| Micheil Merlin &lt;br /&gt;
| Micheil Merlin &lt;br /&gt;
| -6 &lt;br /&gt;
| Independent &amp;lt;br&amp;gt; [http://www.iliveisl.com/ http://www.iliveisl.com/] &lt;br /&gt;
| Scripting, patches, and testcases&lt;br /&gt;
|-&lt;br /&gt;
| Pato Donald &lt;br /&gt;
| Pato Donald &lt;br /&gt;
| Morgam Biedermann &lt;br /&gt;
| Pato Donald &lt;br /&gt;
| -3 &lt;br /&gt;
| Independent [http://www.matheusmk3.co.cc/ http://www.matheusmk3.co.cc/ &lt;br /&gt;
| Groups, Scripts, Physics, Communication, Integration&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Sera Marx &lt;br /&gt;
| Darkfire Soulstar &lt;br /&gt;
| &lt;br /&gt;
| +12 &lt;br /&gt;
| Radiance promotions &lt;br /&gt;
| Grid Host, Commissioner. ~ Anyone looking for work related to the development of Opensimulator or Viewers please contact me. Any work undertaken for me will be returned to Opensimulator unless made strictly for my Grid&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Doug Osborn &lt;br /&gt;
| &lt;br /&gt;
| Doug Osborn @ScienceSim &lt;br /&gt;
| PST/SLT (-7 or -8) &lt;br /&gt;
| CTO, F.R.I. &lt;br /&gt;
| Performance testing, scripting, high prim count builds, bots, and running in-world conferences.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Hallow Palmer|Hallow Palmer]] &lt;br /&gt;
| Markus &lt;br /&gt;
| Hallow Palmer &lt;br /&gt;
| &amp;lt;br&amp;gt; &lt;br /&gt;
| +1 &lt;br /&gt;
| Grid4Us&amp;lt;br&amp;gt;http://www.grid4us.net &lt;br /&gt;
| Server Performance (Windows), Tester, Feedback, Business concepts,Bug Reporting, Server-Hosting&lt;br /&gt;
|-&lt;br /&gt;
| [[User:LenaVanilli|LenaVanilli]] &lt;br /&gt;
| Lena Vanilli &lt;br /&gt;
| Lena Vanilli &lt;br /&gt;
| Lena Vanilli &lt;br /&gt;
| +1 Germany &lt;br /&gt;
| [http://www.hypergrid.org http://www.hypergrid.org] &lt;br /&gt;
| Grid-Management, Testing Testing Testing, Region Hosting&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Aduffy70|aduffy70]] &lt;br /&gt;
| Aaron Duffy &lt;br /&gt;
| Aeran Stipe &lt;br /&gt;
| Aaron Duffy @ScienceSim &lt;br /&gt;
| -7 &lt;br /&gt;
| USU &lt;br /&gt;
| Scientific visualization &amp;amp;amp; education, Region modules, Heavily scripted regions&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Erich Bremer &lt;br /&gt;
| Erich Bremer &lt;br /&gt;
| &lt;br /&gt;
Erich Bremer@OSGrid &lt;br /&gt;
&lt;br /&gt;
| -5 &lt;br /&gt;
| http://www.ebremer.com &lt;br /&gt;
| Semantic Web, Data Visualization&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MarkIdcas|MarkIdcas]] &lt;br /&gt;
| Mark Bannon &lt;br /&gt;
| Mark IDCAS &lt;br /&gt;
| 3D Grid Association, AtMeeting and IDCAS. &lt;br /&gt;
| GMT &lt;br /&gt;
| [http://www.atmeeting.com http://www.atmeeting.com] &lt;br /&gt;
| Grid Management &amp;amp;amp; systems integration. Scripting. WIKI documentation, tutorials, bug reporting and feedback.&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Allquixotic|allquixotic]] &lt;br /&gt;
| Sean McNamara &lt;br /&gt;
| Tiyuk Quellmalz &lt;br /&gt;
| OSG: Tiyuk Quellmalz &lt;br /&gt;
| -5 &lt;br /&gt;
| None &lt;br /&gt;
| Bugfixing; networking; performance; data integrity; LSL; auto-backup; null DB (eventual consistency).&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Orenh|orenh]] &lt;br /&gt;
| Oren Hurvitz&lt;br /&gt;
| &lt;br /&gt;
| Oren Hurvitz (Kitely)&lt;br /&gt;
| +2&lt;br /&gt;
| Kitely&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:Randomhuman|randomhuman]] &lt;br /&gt;
| Kevin Houlihan&lt;br /&gt;
| random Radikal&lt;br /&gt;
| random human (OSGrid)&lt;br /&gt;
| WET/IST&lt;br /&gt;
| CrimsonCookie&lt;br /&gt;
| RemoteAdmin module; On-demand grids; web integration.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Retired Additional Developers  ==&lt;br /&gt;
&lt;br /&gt;
Additional developers who are no longer working on the OpenSim project. Thank you forever for your contributions! &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! IRC Nick &lt;br /&gt;
! Name &lt;br /&gt;
! SL Avatar &lt;br /&gt;
! Other Grid &lt;br /&gt;
! Time Zone&amp;lt;br&amp;gt;(UTC) &lt;br /&gt;
! Org &lt;br /&gt;
! Areas of Interest&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Fly-man-|Fly-Man-]] &lt;br /&gt;
| Laurence &lt;br /&gt;
| &lt;br /&gt;
| OSGrid: Fly Man &lt;br /&gt;
| GMT +1 &lt;br /&gt;
| Private Company&lt;br /&gt;
| Testing, OpenSimSearch, OpenSimProfile&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]] [[Category:Tech_Reference]] [[Category:Help]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2011-09-17T13:13:44Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* Executing Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Quicklinks}}&lt;br /&gt;
&lt;br /&gt;
As OpenSim matures, we are extremely interested in adding more automated verification into the OpenSim source tree.  Testing exists not only to prevent bugs from creeping in, but also to provide fair warning that the behavior of the system has changed, and tests may need updating.&lt;br /&gt;
&lt;br /&gt;
In OpenSim today we use NUnit tests.  Our conventions are:&lt;br /&gt;
# Tests should '''not''' exist inside runtime assemblies, as this makes nunit a production requirement&lt;br /&gt;
# Tests should be in .Tests.dll assemblies.  For instance, the tests for OpenSim.Data.SQLite.dll should be in the OpenSim.Data.SQLite.Tests.dll assembly.  This allows for easy removal of test assemblies in products.&lt;br /&gt;
# Tests should be as close to the code as possible, but not intermingled.  So the tests for OpenSim/Data/SQLite should be in OpenSim/Data/SQLite/Tests/.  Through the use of the '''Exclude''' keyword in prebuild.xml you can ensure that directory is part of OpenSim.Data.SQLite.Tests.dll and not OpenSim.Data.SQLite.dll. See exclude clarification in writing unit tests section.&lt;br /&gt;
# Tests testing a class should be grouped into a test class file called xxxTest.cs, where xxx is the name of the class that is being tested.&lt;br /&gt;
# Tests should be able to run safely in a production environment.  That means that care must be taken not to damage data on the machine that it is being run.&lt;br /&gt;
# Tests should be deterministic in other words repeatable. Avoid randomness in tests. See good and bad testing practices below.&lt;br /&gt;
&lt;br /&gt;
== Core Functionality Missing Unit Tests ==&lt;br /&gt;
&lt;br /&gt;
This is a list of functionality which is not covered by unit tests and is identified as highly desireable test target:&lt;br /&gt;
&lt;br /&gt;
# Database Modules (These are mysql tables)&lt;br /&gt;
## region ban&lt;br /&gt;
## land&lt;br /&gt;
## landaccesslist&lt;br /&gt;
&lt;br /&gt;
== Good / Bad Test practices ==&lt;br /&gt;
Creating good tests is an art, not a science.  Tests are useful by how many bugs they find or how many bugs they avoid.  Things you should think about in creating good tests is:&lt;br /&gt;
* Throwing edge cases, like 0, &amp;quot;&amp;quot;, or Null at parameters.  This ensures that people functions are hardened against incomplete data.  Many of our crashes come from the lack of this hardening showing up at just the wrong time.&lt;br /&gt;
* Use stateful testing to build up complex scenarios.  This is more useful than just cursory get / set calls.&lt;br /&gt;
* Random tests are not a good idea. We need test results to be deterministic. In other words tests need to be repeatable. If you want to test for a range it is good idea to make separate tests for min and max values. Random values in fields can fail randomly. When something goes wrong for example in database schema the developer will not necessarily notice if the stored values are random. On the other hand its hard to troubleshoot randomly failing tests as you dont know which specific value caused the failure.&lt;br /&gt;
* Tests should be independent and should not rely on another test being run, passing or failing. An excerpt from [http://xunitpatterns.com/Principles%20of%20Test%20Automation.html#Independent%20Test xUnit Patterns]:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;If tests are interdependent and (even worse) order dependent, we will be depriving ourselves of the useful feedback test failures provide. Interacting Tests [...] tend to fail in a group. The failure of a test that moved the [subject under test] into the state required by the dependent test will lead to the failure of the dependent test too. With both tests failing, how can we tell if it is because of a problem in code that both rely on in some way or is it a problem in code that only the first relies on. With both tests failing we can't tell. We are only talking about two tests here. Imagine how much worse this is with tens or hundreds of tests.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* Only one function of the subject under test should be tested in one test. When testing a database access object, for example, write separate tests for creating DB entries, updating them and removing them.&lt;br /&gt;
* Do not use the subject under test to set up the state for the test or to verify the result. Use a different method. When testing a database access object, for example, use raw SQL to insert the initial data into the DB, then run the method being tested. To verify if the operation was successful, use raw SQL again to verify the DB changed as expected.&lt;br /&gt;
* Use descriptive asserts whenever you can. All you have to do is add an extra , to the Assert() method and write a string that will show when that test fails. For example:&lt;br /&gt;
  Assert.That(i,Is.EqualTo(5),&amp;quot;i is not equal to 5! in Example.Test1()&amp;quot;);&lt;br /&gt;
* When a test fails due to a uncaught exception, such as NullReference, nUnit does not report where it happened, leaving debuggers clueless. A good practive is to write something on the start of every test in your test file. This way if an exception is raised, someone could read the last lines written and see at least in what test it failed. Luckily, this routine is already implemented in OpenSim.Tests.Common.TestHelper InMethod().&lt;br /&gt;
&lt;br /&gt;
== Writing Tests ==&lt;br /&gt;
&lt;br /&gt;
See [http://www.nunit.org/index.php?p=quickStart&amp;amp;r=2.4 NUnit Quick Start] for an introduction to unit testing with NUnit.&lt;br /&gt;
&lt;br /&gt;
Writing a new unit test is pretty easy, and very helpful in increasing the stability of opensim by nailing down bugs.  I'm going to present an example here of SQLite Asset testing to show how simple such a test case is to write.  The actual in tree SQLite Asset tests are a little different because the code was factored out so that it was easily applied to any database driver, so don't be concerned with the fact that what you see here isn't in the tree.&lt;br /&gt;
&lt;br /&gt;
Exclude clarification: Make sure your master project (not the test project) has an entry for files like the following so that the test code is not included in the master project dll:&lt;br /&gt;
      &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt;Files&amp;gt;&lt;br /&gt;
        &amp;lt;Match pattern=&amp;quot;*.cs&amp;quot; recurse=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;Exclude name=&amp;quot;Tests&amp;quot; pattern=&amp;quot;Tests&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Match&amp;gt;&lt;br /&gt;
      &amp;lt;/Files&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NUnit Conventions ===&lt;br /&gt;
An NUnit test suite:&lt;br /&gt;
* is a class with a default constructor (takes no arguments)&lt;br /&gt;
* has public methods that are tests&lt;br /&gt;
* uses annotations to determine what are tests&lt;br /&gt;
* runs it's tests in '''alphabetical order by method name'''&lt;br /&gt;
&lt;br /&gt;
An NUnit test method:&lt;br /&gt;
* must be public&lt;br /&gt;
* must return void&lt;br /&gt;
* must take no arguments&lt;br /&gt;
* is successful if no exception or assert is thrown while running it&lt;br /&gt;
&lt;br /&gt;
'''Once the tests are moved to NUnit 2.5+:'''&lt;br /&gt;
&lt;br /&gt;
* a test class can be generic and can have one or more constructors with parameters. in this case, one or more [TestFixture(...)] attributes must be used to provide the types for the generic arguments and values for the constructors.  This means it is possible to create a single test class which would, for example, provide tests for different database engines.&lt;br /&gt;
* each test method may have parameters supplied by attributes such as [TestCase(...)] or [Values]. The test will run automatically for various combinations of these attributes.&lt;br /&gt;
* NUnit no longer guarantees that the tests will be performed in any particular order.&lt;br /&gt;
&lt;br /&gt;
The run order is important if you want to have early tests that setup some complicated state (like creating objects), and have later tests remove or update that state.  For that reason I find it very helpful to name all test methods '''Txxx_somename''' where '''xxx''' is a number between 000 and 999.  That guarantees no surprises in run order.&lt;br /&gt;
&lt;br /&gt;
=== Fixture Setup / Teardown ===&lt;br /&gt;
&lt;br /&gt;
See [[Example Test SQLite Assets]] for this code snipped in context. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
[TestFixtureSetUp]&lt;br /&gt;
public void Init()&lt;br /&gt;
{&lt;br /&gt;
    uuid1 = UUID.Random();&lt;br /&gt;
    uuid2 = UUID.Random();&lt;br /&gt;
    uuid3 = UUID.Random();&lt;br /&gt;
    name1 = &amp;quot;asset one&amp;quot;;&lt;br /&gt;
    name2 = &amp;quot;asset two&amp;quot;;&lt;br /&gt;
    name3 = &amp;quot;asset three&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    asset1 = new byte[100];&lt;br /&gt;
    asset1.Initialize();&lt;br /&gt;
    file = Path.GetTempFileName() + &amp;quot;.db&amp;quot;;&lt;br /&gt;
    connect = &amp;quot;URI=file:&amp;quot; + file + &amp;quot;,version=3&amp;quot;;&lt;br /&gt;
    db = new SQLiteAssetData();&lt;br /&gt;
    db.Initialise(connect);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[TestFixtureTearDown]&lt;br /&gt;
public void Cleanup()&lt;br /&gt;
{&lt;br /&gt;
    db.Dispose();&lt;br /&gt;
    System.IO.File.Delete(file);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the case of testing something like the database layer, we have to actually attempt to store / retrieve things from a database.  Following from rule #4 of good tests, we want to make sure not to touch the production databases to run our tests, so during startup we generate a temporary file name which is guaranteed not to be an existing file on the system, and use that as our database file name.  By running db.Initialize() the OpenSim migration code will correctly populate that database with the latest schema.&lt;br /&gt;
&lt;br /&gt;
Once we are done with the tests we want to make sure we aren't leaving garbage temp files on the user's system.  So we remove that file we created.&lt;br /&gt;
&lt;br /&gt;
During setup we also create a set of state variables, such as 3 uuids, 3 strings, and a data block.  You could have always just stuck these inline, but variables are there for a reason, so use them.&lt;br /&gt;
&lt;br /&gt;
=== Test Setup / Teardown ===&lt;br /&gt;
&lt;br /&gt;
What's missing in [[Example Test SQLite Assets]] are individual test Setup and Teardown methods. These methods allow each test to be completely self sufficient without the code duplication needed to set up the test environment at the start of each test.&lt;br /&gt;
&lt;br /&gt;
Let's assume the &amp;lt;code&amp;gt;SQLiteAssetData&amp;lt;/code&amp;gt; class provided a &amp;lt;code&amp;gt;FetchAsset()&amp;lt;/code&amp;gt; method and a &amp;lt;code&amp;gt;UpdateAsset()&amp;lt;/code&amp;gt; method. Since every test should be independent of any other test, and &amp;lt;code&amp;gt;FetchAsset()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;UpdateAsset()&amp;lt;/code&amp;gt; should be tested in separate tests, that means each test would need to create its own entries in the asset table in order to succeed. You may have something like this (see [[Example Test SQLite Assets#This Test is Flawed|Example Test SQLite Assets]] for an explanation of &amp;lt;code&amp;gt;sqldb.executeSQL()&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;[Test]&lt;br /&gt;
public void T101_TestFetchAsset()&lt;br /&gt;
{&lt;br /&gt;
    AssetBase a1 = new AssetBase(...);&lt;br /&gt;
    sqldb.executeSQL(&amp;quot;INSERT INTO assets VALUES({0}, ...)&amp;quot;, a1.uuid, ...);&lt;br /&gt;
&lt;br /&gt;
    AssetBase a1_actual = db.FetchAsset(a1.uuid);&lt;br /&gt;
&lt;br /&gt;
    Assert.Equal(a1_actual.uuid, a1.uuid);&lt;br /&gt;
    Assert.Equal(a1_actual.Name, a1.Name);&lt;br /&gt;
    // etc&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Test]&lt;br /&gt;
public void T103_TestUpdateAsset()&lt;br /&gt;
{&lt;br /&gt;
    AssetBase a1 = new AssetBase(...);&lt;br /&gt;
    sqldb.executeSQL(&amp;quot;INSERT INTO assets VALUES({0}, ...)&amp;quot;, a1.uuid, ...);&lt;br /&gt;
&lt;br /&gt;
    a1.Name = &amp;quot;new name&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    db.UpdateAsset(a1.uuid, a1);&lt;br /&gt;
&lt;br /&gt;
    AssetBase a1_actual = sqldb.executeSQL(&amp;quot;SELECT * FROM assets WHERE uuid = {0}&amp;quot;, a1.uuid);&lt;br /&gt;
&lt;br /&gt;
    Assert.Equal(a1_actual.uuid, a1.uuid);&lt;br /&gt;
    Assert.Equal(a1_actual.Name, a1.Name);&lt;br /&gt;
    // etc&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will note that both tests have the same code at the top in which they create an entry in the assets table. This duplicate code can be factored out into a Setup method, which is called before every test is executed (assume &amp;lt;code&amp;gt;a1&amp;lt;/code&amp;gt; is a class attribute):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
[SetUp]&lt;br /&gt;
public void SetUp()&lt;br /&gt;
{&lt;br /&gt;
    a1 = new AssetBase(...);&lt;br /&gt;
    sqldb.executeSQL(&amp;quot;INSERT INTO assets VALUES({0}, ...)&amp;quot;, a1.uuid, ...);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[TearDown]&lt;br /&gt;
public void TearDown()&lt;br /&gt;
{&lt;br /&gt;
    // clean up after ourselves so the next test has a clean DB to start with&lt;br /&gt;
    sqldb.executeSQL(&amp;quot;DELETE FROM assets&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Test]&lt;br /&gt;
public void T101_TestFetchAsset()&lt;br /&gt;
{&lt;br /&gt;
    AssetBase a1_actual = db.FetchAsset(a1.uuid);&lt;br /&gt;
&lt;br /&gt;
    Assert.Equal(a1_actual.uuid, a1.uuid);&lt;br /&gt;
    Assert.Equal(a1_actual.Name, a1.Name);&lt;br /&gt;
    // etc&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Test]&lt;br /&gt;
public void T103_TestUpdateAsset()&lt;br /&gt;
{&lt;br /&gt;
    a1.Name = &amp;quot;new name&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    db.UpdateAsset(a1.uuid, a1);&lt;br /&gt;
&lt;br /&gt;
    AssetBase a1_actual = sqldb.executeSQL(&amp;quot;SELECT * FROM assets WHERE uuid = {0}&amp;quot;, a1.uuid);&lt;br /&gt;
&lt;br /&gt;
    Assert.Equal(a1_actual.uuid, a1.uuid);&lt;br /&gt;
    Assert.Equal(a1_actual.Name, a1.Name);&lt;br /&gt;
    // etc&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also note the &amp;lt;code&amp;gt;TearDown()&amp;lt;/code&amp;gt; method; it is called after each test has run, regardless whether the test passed or failed. It deletes all the entries in the &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; table so that there is no leftover data in the database to interfere with the next test.&lt;br /&gt;
&lt;br /&gt;
==== Multiple Setup Methods ====&lt;br /&gt;
&lt;br /&gt;
Not all setup and teardown must happen in methods declared [SetUp] and [TearDown]. It may be useful to provide methods which perform part of the setup and to call them from whichever test may need it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
private AssetBase InsertAssetWithRandomData(UUID assetUuid)&lt;br /&gt;
{&lt;br /&gt;
    AssetBase asset = new AssetBase(assetUuid);&lt;br /&gt;
    asset.Name = somethingRandom();&lt;br /&gt;
    asset.Data = somethingRandom();&lt;br /&gt;
&lt;br /&gt;
    sqldb.executeSQL(&amp;quot;INSERT INTO assets VALUES({0}, ...)&amp;quot;, asset.uuid, ...);&lt;br /&gt;
&lt;br /&gt;
    return asset;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Test]&lt;br /&gt;
public void T201_TestNeedsTwoAssets()&lt;br /&gt;
{&lt;br /&gt;
    AssetBase a1 = InsertAssetWithRandomData(uuid1);&lt;br /&gt;
    AssetBase a2 = InsertAssetWithRandomData(uuid2);&lt;br /&gt;
    // etc&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Test]&lt;br /&gt;
public void T203_TestNeedsFiveAssets()&lt;br /&gt;
{&lt;br /&gt;
    AssetBase a1 = InsertAssetWithRandomData(uuid1);&lt;br /&gt;
    AssetBase a2 = InsertAssetWithRandomData(uuid2);&lt;br /&gt;
    AssetBase a3 = InsertAssetWithRandomData(uuid3);&lt;br /&gt;
    AssetBase a4 = InsertAssetWithRandomData(uuid4);&lt;br /&gt;
    AssetBase a5 = InsertAssetWithRandomData(uuid5);&lt;br /&gt;
    // etc&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that &amp;lt;code&amp;gt;InsertAssetWithRandomData&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; as it's only called from within the class.&lt;br /&gt;
&lt;br /&gt;
=== Asserts ===&lt;br /&gt;
You will see scattered through the code '''Assert.That(...)'''.  These will throw an exception if the condition is not valid.  This format of assertions is called the [http://www.nunit.org/index.php?p=constraintModel&amp;amp;r=2.4 Constraint Model] in NUnit, and provides a large number of tests with the flavor of:&lt;br /&gt;
* Assert.That(foo, Is.Null)&lt;br /&gt;
* Assert.That(foo, Is.Not.Null)&lt;br /&gt;
* Assert.That(foo, Is.True)&lt;br /&gt;
* Assert.That(foo, Is.EqualTo(bar))&lt;br /&gt;
* Assert.That(foo, Text.Matches( &amp;quot;*bar*&amp;quot; ))&lt;br /&gt;
&lt;br /&gt;
Of note, Is.EqualTo uses the Equals function of foo, so this can only be used on objects that are IComparable.  Most of the OpenSim base objects are not, so you'll have to compare fields manually in tests.&lt;br /&gt;
&lt;br /&gt;
For the complete set of conditions you can use see [http://www.nunit.org/index.php?p=constraintModel&amp;amp;r=2.4 the Constraint Model NUnit documentation].  While there is another syntax for tests, the Constraint Model is preferred as it is far more human readable.&lt;br /&gt;
&lt;br /&gt;
=== Simple Negative Tests ===&lt;br /&gt;
&lt;br /&gt;
See [[Example Test SQLite Assets]] for this code snipped in context.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;[Test]&lt;br /&gt;
public void T001_LoadEmpty()&lt;br /&gt;
{&lt;br /&gt;
    Assert.That(db.ExistsAsset(uuid1), Is.False);&lt;br /&gt;
    Assert.That(db.ExistsAsset(uuid2), Is.False);&lt;br /&gt;
    Assert.That(db.ExistsAsset(uuid3), Is.False);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test T001 is an example of a simple negative test.  We assume a new database will not have any of those assets in them.  While the value of this test may look low, it does provide a baseline in ensuring that the database connection is there, that these return false correctly, and that no other exception is thrown.  Negative tests are a good way to force bounds conditions and ensure that not only does it  ''return what you expect'' it also ''doesn't return what you don't expect''.  Thought of another way, it ensures your code is somewhat defensive in nature, not coughing on bad or unexpected data.&lt;br /&gt;
&lt;br /&gt;
=== Simple Positive Tests ===&lt;br /&gt;
&lt;br /&gt;
See [[Example Test SQLite Assets]] for this code snipped in context.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
[Test]&lt;br /&gt;
public void T010_StoreSimpleAsset()&lt;br /&gt;
{&lt;br /&gt;
    AssetBase a1 = new AssetBase(uuid1, name1);&lt;br /&gt;
    AssetBase a2 = new AssetBase(uuid2, name2);&lt;br /&gt;
    AssetBase a3 = new AssetBase(uuid3, name3);&lt;br /&gt;
    a1.Data = asset1;&lt;br /&gt;
    a2.Data = asset1;&lt;br /&gt;
    a3.Data = asset1;&lt;br /&gt;
    &lt;br /&gt;
    db.CreateAsset(a1);&lt;br /&gt;
    db.CreateAsset(a2);&lt;br /&gt;
    db.CreateAsset(a3);&lt;br /&gt;
&lt;br /&gt;
    AssetBase a1a = db.FetchAsset(uuid1);&lt;br /&gt;
    Assert.That(a1a.ID, Is.EqualTo(uuid1));&lt;br /&gt;
    Assert.That(a1a.Name, Is.EqualTo(name1));&lt;br /&gt;
&lt;br /&gt;
    AssetBase a2a = db.FetchAsset(uuid2);&lt;br /&gt;
    Assert.That(a2a.ID, Is.EqualTo(uuid2));&lt;br /&gt;
    Assert.That(a2a.Name, Is.EqualTo(name2));&lt;br /&gt;
&lt;br /&gt;
    AssetBase a3a = db.FetchAsset(uuid3);&lt;br /&gt;
    Assert.That(a3a.ID, Is.EqualTo(uuid3));&lt;br /&gt;
    Assert.That(a3a.Name, Is.EqualTo(name3));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
T010 is an example of a simple positive test.  In it we create and store 3 assets (ensuring no exceptions), then load those 3 assets back from the database and ensure the fields are correct.  Because AssetBase is not IComparible we just check the ID and Name fields with equals tests.  If any of the Asserts fail, the whole test fails.&lt;br /&gt;
&lt;br /&gt;
=== Stateful Tests ===&lt;br /&gt;
&lt;br /&gt;
See [[Example Test SQLite Assets]] for this code snipped in context.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
[Test]&lt;br /&gt;
public void T011_ExistsSimpleAsset()&lt;br /&gt;
{&lt;br /&gt;
    Assert.That(db.ExistsAsset(uuid1), Is.True);&lt;br /&gt;
    Assert.That(db.ExistsAsset(uuid2), Is.True);&lt;br /&gt;
    Assert.That(db.ExistsAsset(uuid3), Is.True);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
T011 is an example of a stateful test, because it requires the state created by T010 (i.e. the creation of those 3 objects).  In order to test any kind of complicated scenario you will find that you need to use stateful tests to build up various amounts of state (testing along the way), then manipulating and possibly tearing it down.  Without doing this you can't do truly deep testing of function in any complex environment.  This example isn't very stateful (I tried to pick an easy example), but it should give you some ideas.&lt;br /&gt;
&lt;br /&gt;
=== Speculative Tests ===&lt;br /&gt;
Speculative tests are tests that might or might not apply in a given situation.  MySQL testing in the OpenSim tree is done by speculative testing, the tests will only run if there is a properly configured database, otherwise they will not be run.  If you execute '''Assert.Ignore()''' in a '''Test''' the test will end and be ignored.  If you run '''Assert.Ignore()''' in the '''TestFixtureSetup''' all tests in the test fixture will be skipped and ignored.&lt;br /&gt;
&lt;br /&gt;
Speculative testing lets you create tests that require certain preconditions to be met which you can't guarantee on all platforms/configuration, and are an important part of deep testing.&lt;br /&gt;
&lt;br /&gt;
== Adding Tests to the Tree ==&lt;br /&gt;
As we said previously all tests for assembly OpenSim.Foo (in directory OpenSim/Foo) should:&lt;br /&gt;
* be in assembly OpenSim.Foo.Tests.dll&lt;br /&gt;
* not be in the OpenSim.Foo.dll assembly&lt;br /&gt;
* be in OpenSim/Foo/Tests directory&lt;br /&gt;
&lt;br /&gt;
Also, if you have created a new test assembly you must add references&lt;br /&gt;
to it in ''.nant/local.include'', both to the &lt;br /&gt;
* ''test'' target,  and the&lt;br /&gt;
* ''test-xml'' target&lt;br /&gt;
to ensure that the assembly is added to the automated panda runs as&lt;br /&gt;
well as the nant ''test'' target.&lt;br /&gt;
&lt;br /&gt;
== Executing Tests ==&lt;br /&gt;
&lt;br /&gt;
=== Database Layer Tests ===&lt;br /&gt;
The connection strings for the database dependent unit tests can be configured in the file OpenSim/Data/Tests/Resources/TestDataConnections.ini. This file is an embedded resource, so the project must be recompiled before changes to it will take effect. If the connection strings are not configured then the relevant tests will just be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Panda ===&lt;br /&gt;
On every commit to opensim all the tests are run on the [http://panda.opensimulator.org/ panda build server on opensimulator.org].  The process takes about 5 minutes to build, test, and report the results back out on #opensim-dev via the osmantis bot.&lt;br /&gt;
&lt;br /&gt;
=== Nant ===&lt;br /&gt;
You can manually run all the tests for OpenSim on your system by running '''nant test''' as a nant target.  This will run all the tests that are in the tree, though some speculative tests might be ignored if your platform does not have the right features or configuration to run these tests.&lt;br /&gt;
&lt;br /&gt;
=== NUnit Console ===&lt;br /&gt;
If you only want to run tests for one assembly you can do that using the NUnit Console.  On Linux just run '''nunit-console2 OpenSim.Foo.Tests.dll''' and it will run only the tests for OpenSim.Foo.Tests.dll.  If you are only making changes to 1 dll and just want a quick sanity check, this is the fastest way to do that.&lt;br /&gt;
&lt;br /&gt;
=== Debugging Tests ===&lt;br /&gt;
There is a special page dedicated to this. See [[Debugging Unit Tests]].&lt;br /&gt;
&lt;br /&gt;
== Learning More ==&lt;br /&gt;
You should definitely read the documentation at the [http://www.nunit.org/index.php?p=documentation NUnit homepage] if you want to know more about testing.  It's a very good reference for all the APIs in NUnit that you can use for creating tests.&lt;br /&gt;
&lt;br /&gt;
== Code Coverage ==&lt;br /&gt;
&lt;br /&gt;
A prototype has been included using monocov, which has a profile built-in in mono. Instructions for using monocov can be found on the Mono homepage, in [http://www.mono-project.com/Code_Coverage Code Coverage] section. Unfortunately nunit2 and nant do not support code coverage with monocov (only some other proprietary code coverages), so there is no &amp;lt;monocov&amp;gt; tag. The solution was to implement it using many nunit-console and on &amp;lt;exec&amp;gt; tags. &lt;br /&gt;
&lt;br /&gt;
ATTENTION: Code coverage only works with mono 1.2.x , any other version will most likely not work. Code coverage development is being put on hold for now until it supports newer mono versions.&lt;br /&gt;
&lt;br /&gt;
=== Running ===&lt;br /&gt;
&lt;br /&gt;
Download [http://primates.ximian.com/~lupus/monocov-0.2.tar.gz monocov] and [http://prdownloads.sourceforge.net/nunit/NUnit-2.4.8-net-2.0.zip?download nunit-console] if your nunit-console does not work. To test if it works (my Ubuntu's Hardy version did not), just run one of the tests with nunit-console.&lt;br /&gt;
&lt;br /&gt;
Install monocov (./configure, ./make install, there could be some minor conflicts, I had to add to the compiling line -I/usr/include/mono-1.0/) and make sure the working nunit-console.exe is in /usr/lib/nunit/nunit-console.exe. Now just run nant test-cov and it will generate .cov files and HTML directories in the cov directory. The .cov files can be seen by running monocov on them, and have the same information as the HTML directories.&lt;br /&gt;
&lt;br /&gt;
== Testing Todo ==&lt;br /&gt;
&lt;br /&gt;
=== Coverage ===&lt;br /&gt;
&lt;br /&gt;
A prototype has been done and documented. Now we must keep a look if monocov will evolve to support newer mono versions.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Testing]]&lt;br /&gt;
&lt;br /&gt;
== Links to More Information on Unit Testing ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.nunit.org/index.php?p=quickStart&amp;amp;r=2.4 NUnit Quick Start]&lt;br /&gt;
* [http://xunitpatterns.com/ xUnit Patterns book homepage], with lots of information on good practices, patterns, code smells, etc.&lt;br /&gt;
* There is a lot of information on unit testing at the [http://c2.com/cgi/wiki?search=unittest Cunningham &amp;amp; Cunningham, Inc wiki at c2.com]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2010-08-14T19:00:09Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file&lt;br /&gt;
Port should be set to a nonzero value to have the remote admin on a different port&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
 port = 0&lt;br /&gt;
&lt;br /&gt;
=== Example in C# .NET ===&lt;br /&gt;
&lt;br /&gt;
This example needs the Nwc.XmlRpc library, located in your OpenSim bin folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public void CreateUser(Uri url, string adminPassword, string firstName, string lastName, string password, string email, int regionX, int regionY)&lt;br /&gt;
{&lt;br /&gt;
    var address = Dns.GetHostEntry(url.DnsSafeHost).AddressList[0];&lt;br /&gt;
    var ht = new Hashtable();&lt;br /&gt;
    ht[&amp;quot;password&amp;quot;] = adminPassword;&lt;br /&gt;
    ht[&amp;quot;user_firstname&amp;quot;] = firstName;&lt;br /&gt;
    ht[&amp;quot;user_lastname&amp;quot;] = lastName;&lt;br /&gt;
    ht[&amp;quot;user_password&amp;quot;] = password;&lt;br /&gt;
    ht[&amp;quot;user_email&amp;quot;] = email;&lt;br /&gt;
    ht[&amp;quot;start_region_x&amp;quot;] = regionX;&lt;br /&gt;
    ht[&amp;quot;start_region_y&amp;quot;] = regionY;&lt;br /&gt;
    var parameters = new List&amp;lt;Hashtable&amp;gt; { ht };&lt;br /&gt;
    var rpc = new XmlRpcRequest(&amp;quot;admin_create_user&amp;quot;, parameters);&lt;br /&gt;
    rpc.Invoke(url.ToString());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Test]&lt;br /&gt;
public void NativeUserRegistrationTest()&lt;br /&gt;
{&lt;br /&gt;
    CreateUser(new Uri(&amp;quot;http://yourgrid.com:9000/&amp;quot;), &amp;quot;secret&amp;quot;, &amp;quot;Test2&amp;quot;, &amp;quot;user2&amp;quot;, &amp;quot;apassword&amp;quot;, &amp;quot;email@address.com&amp;quot;, 0, 0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Another Example in C# .NET  ===&lt;br /&gt;
&lt;br /&gt;
//Author Ottalese complements of yoursimspot.com &lt;br /&gt;
&lt;br /&gt;
//This example needs the CookComputing.XmlRpc library, this can be downloaded from http://www.xml-rpc.net/. &lt;br /&gt;
&lt;br /&gt;
//Recently updated code I originally posted, this can be secured using SSL. &lt;br /&gt;
&lt;br /&gt;
using System;&amp;lt;br&amp;gt;using System.Data;&amp;lt;br&amp;gt;using System.Configuration;&amp;lt;br&amp;gt;using System.Collections;&amp;lt;br&amp;gt;using System.Web;&amp;lt;br&amp;gt;using System.Web.Security;&amp;lt;br&amp;gt;using System.Web.UI;&amp;lt;br&amp;gt;using System.Web.UI.WebControls;&amp;lt;br&amp;gt;using System.Web.UI.WebControls.WebParts;&amp;lt;br&amp;gt;using System.Web.UI.HtmlControls;&amp;lt;br&amp;gt;using CookComputing.XmlRpc;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[XmlRpcUrl(&amp;quot;http://ServerIpAddress:9000/&amp;quot;)]&amp;lt;br&amp;gt;public interface RemoteOpensim&amp;amp;nbsp;: IXmlRpcProxy&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt; //Create new user&amp;lt;br&amp;gt; [XmlRpcMethod(&amp;quot;admin_create_user&amp;quot;)]&amp;lt;br&amp;gt; XmlRpcStruct admin_create_user(XmlRpcStruct Parameters);&amp;lt;br&amp;gt;}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;public partial class _Default&amp;amp;nbsp;: System.Web.UI.Page&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt; protected void Page_Load(object sender, EventArgs e)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; }&amp;lt;br&amp;gt; protected void SubmitButton_Click(object sender, EventArgs e)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; XmlRpcStruct NewUser = new XmlRpcStruct(); //Will contain return results.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
XmlRpcStruct Parameters = new XmlRpcStruct();//Parameters passed.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
try&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; RemoteOpensim Admin = XmlRpcProxyGen.Create&amp;amp;lt;RemoteOpensim&amp;amp;gt;();&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;password&amp;quot;, &amp;quot;RemotePassword&amp;quot;); //Password you set in the .ini file for the RemoteAdmin&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;user_firstname&amp;quot;, SomeStringWithFirstName);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;user_lastname&amp;quot;, SomeStringWithLastName);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;user_password&amp;quot;, SomePassword);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;start_region_x&amp;quot;, 0);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;start_region_y&amp;quot;, 0);&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;NewUser = Admin.admin_create_user(Parameters);&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
foreach (DictionaryEntry ReturnResults in NewUser)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; Response.Write(ReturnResults.Key.ToString() + &amp;quot;&amp;amp;nbsp;: &amp;quot; + d.Value.ToString());//Returns if the user was added or not&amp;lt;br&amp;gt; }&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;br&amp;gt; catch (Exception ex)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; Response.Write(ex.Message); &amp;lt;br&amp;gt; }&amp;lt;br&amp;gt; }&amp;lt;br&amp;gt;}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), estate_owner_first (optional), &lt;br /&gt;
estate_owner_last (optional), estate_owner_uuid (optional), listen_ip, listen_port (integer), external_address, region_x (integer), region_y (integer), persist (optional), estate_name (an estate owner must be specified if the estate does not already exist)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_close_region | admin_close_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Close a region without deleting it.&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_list| admin_acl_list]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Retrieve a list of users who can access the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_clear| admin_acl_clear]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Clear the access list for the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Add a list of users to the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_remove| admin_acl_remove]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Remove a list of users from the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2010-07-29T17:20:39Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file&lt;br /&gt;
Port should be set to a nonzero value to have the remote admin on a different port&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
 port = 0&lt;br /&gt;
&lt;br /&gt;
=== Example in C# .NET ===&lt;br /&gt;
&lt;br /&gt;
This example needs the Nwc.XmlRpc library, located in your OpenSim bin folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public void CreateUser(Uri url, string adminPassword, string firstName, string lastName, string password, string email, int regionX, int regionY)&lt;br /&gt;
{&lt;br /&gt;
    var address = Dns.GetHostEntry(url.DnsSafeHost).AddressList[0];&lt;br /&gt;
    var ht = new Hashtable();&lt;br /&gt;
    ht[&amp;quot;password&amp;quot;] = adminPassword;&lt;br /&gt;
    ht[&amp;quot;user_firstname&amp;quot;] = firstName;&lt;br /&gt;
    ht[&amp;quot;user_lastname&amp;quot;] = lastName;&lt;br /&gt;
    ht[&amp;quot;user_password&amp;quot;] = password;&lt;br /&gt;
    ht[&amp;quot;user_email&amp;quot;] = email;&lt;br /&gt;
    ht[&amp;quot;start_region_x&amp;quot;] = regionX;&lt;br /&gt;
    ht[&amp;quot;start_region_y&amp;quot;] = regionY;&lt;br /&gt;
    var parameters = new List&amp;lt;Hashtable&amp;gt; { ht };&lt;br /&gt;
    var rpc = new XmlRpcRequest(&amp;quot;admin_create_user&amp;quot;, parameters);&lt;br /&gt;
    rpc.Invoke(url.ToString());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Test]&lt;br /&gt;
public void NativeUserRegistrationTest()&lt;br /&gt;
{&lt;br /&gt;
    CreateUser(new Uri(&amp;quot;http://yourgrid.com:9000/&amp;quot;), &amp;quot;secret&amp;quot;, &amp;quot;Test2&amp;quot;, &amp;quot;user2&amp;quot;, &amp;quot;apassword&amp;quot;, &amp;quot;email@address.com&amp;quot;, 0, 0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Another Example in C# .NET  ===&lt;br /&gt;
&lt;br /&gt;
//Author Ottalese complements of yoursimspot.com &lt;br /&gt;
&lt;br /&gt;
//This example needs the CookComputing.XmlRpc library, this can be downloaded from http://www.xml-rpc.net/. &lt;br /&gt;
&lt;br /&gt;
//Recently updated code I originally posted, this can be secured using SSL. &lt;br /&gt;
&lt;br /&gt;
using System;&amp;lt;br&amp;gt;using System.Data;&amp;lt;br&amp;gt;using System.Configuration;&amp;lt;br&amp;gt;using System.Collections;&amp;lt;br&amp;gt;using System.Web;&amp;lt;br&amp;gt;using System.Web.Security;&amp;lt;br&amp;gt;using System.Web.UI;&amp;lt;br&amp;gt;using System.Web.UI.WebControls;&amp;lt;br&amp;gt;using System.Web.UI.WebControls.WebParts;&amp;lt;br&amp;gt;using System.Web.UI.HtmlControls;&amp;lt;br&amp;gt;using CookComputing.XmlRpc;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[XmlRpcUrl(&amp;quot;http://ServerIpAddress:9000/&amp;quot;)]&amp;lt;br&amp;gt;public interface RemoteOpensim&amp;amp;nbsp;: IXmlRpcProxy&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt; //Create new user&amp;lt;br&amp;gt; [XmlRpcMethod(&amp;quot;admin_create_user&amp;quot;)]&amp;lt;br&amp;gt; XmlRpcStruct admin_create_user(XmlRpcStruct Parameters);&amp;lt;br&amp;gt;}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;public partial class _Default&amp;amp;nbsp;: System.Web.UI.Page&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt; protected void Page_Load(object sender, EventArgs e)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; }&amp;lt;br&amp;gt; protected void SubmitButton_Click(object sender, EventArgs e)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; XmlRpcStruct NewUser = new XmlRpcStruct(); //Will contain return results.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
XmlRpcStruct Parameters = new XmlRpcStruct();//Parameters passed.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
try&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; RemoteOpensim Admin = XmlRpcProxyGen.Create&amp;amp;lt;RemoteOpensim&amp;amp;gt;();&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;password&amp;quot;, &amp;quot;RemotePassword&amp;quot;); //Password you set in the .ini file for the RemoteAdmin&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;user_firstname&amp;quot;, SomeStringWithFirstName);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;user_lastname&amp;quot;, SomeStringWithLastName);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;user_password&amp;quot;, SomePassword);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;start_region_x&amp;quot;, 0);&amp;lt;br&amp;gt; Parameters.Add(&amp;quot;start_region_y&amp;quot;, 0);&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;NewUser = Admin.admin_create_user(Parameters);&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
foreach (DictionaryEntry ReturnResults in NewUser)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; Response.Write(ReturnResults.Key.ToString() + &amp;quot;&amp;amp;nbsp;: &amp;quot; + d.Value.ToString());//Returns if the user was added or not&amp;lt;br&amp;gt; }&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;br&amp;gt; catch (Exception ex)&amp;lt;br&amp;gt; {&amp;lt;br&amp;gt; Response.Write(ex.Message); &amp;lt;br&amp;gt; }&amp;lt;br&amp;gt; }&amp;lt;br&amp;gt;}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), region_master_first, &lt;br /&gt;
region_master_last, region_master_uuid (optional), region_master_password, listen_ip, listen_port (integer), external_address, region_x (integer), region_y (integer), persist (optional)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_close_region | admin_close_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Close a region without deleting it.&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_list| admin_acl_list]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Retrieve a list of users who can access the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_clear| admin_acl_clear]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Clear the access list for the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Add a list of users to the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_remove| admin_acl_remove]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Remove a list of users from the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2009-07-07T01:21:01Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file:&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), region_master_first, &lt;br /&gt;
region_master_last, region_master_uuid (optional), region_master_password, listen_ip, listen_port (integer), external_address, region_x (integer), region_y (integer), persist (optional)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_list| admin_acl_list]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Retrieve a list of users who can access the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_clear| admin_acl_clear]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Clear the access list for the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Add a list of users to the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_remove| admin_acl_remove]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Remove a list of users from the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2009-07-07T00:04:28Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file:&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), region_master_first, &lt;br /&gt;
region_master_last, region_master_uuid (optional), region_master_password, listen_ip, listen_port (integer), external_address, region_x (integer), region_y (integer), persist (optional)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;''No parameter needed''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown| admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Shutdown server&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_list| admin_acl_list]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Retrieve a list of users who can access the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_clear| admin_acl_clear]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Clear the access list for the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Add a list of users to the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_remove| admin_acl_remove]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Remove a list of users from the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2009-07-06T23:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file:&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_master_first, &lt;br /&gt;
region_master_last, region_master_password, listen_ip, listen_port (integer), external_address, region_x (integer), region_y (integer)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;''No parameter needed''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown| admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Shutdown server&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_list| admin_acl_list]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Retrieve a list of users who can access the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_clear| admin_acl_clear]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Clear the access list for the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Add a list of users to the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_remove| admin_acl_remove]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Remove a list of users from the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2009-07-06T22:33:17Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file:&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_master_first, &lt;br /&gt;
region_master_last, region_master_password, listen_ip, external_address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;''No parameter needed''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown| admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Shutdown server&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_list| admin_acl_list]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Retrieve a list of users who can access the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_clear| admin_acl_clear]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Clear the access list for the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Add a list of users to the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_remove| admin_acl_remove]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Remove a list of users from the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2009-07-06T22:32:57Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file:&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_master_first, &lt;br /&gt;
region_master_last, region_master_password, listen_ip, external_address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;''No parameter needed''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown| admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Shutdown server&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_list| admin_acl_list]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Retrieve a list of users who can access the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_clear| admin_acl_clear]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Clear the access list for the region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Add a list of users to the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_acl_add| admin_acl_add]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Remove a list of users from the access control list&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name, users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/RemoteAdmin</id>
		<title>RemoteAdmin</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/RemoteAdmin"/>
				<updated>2009-07-06T22:25:24Z</updated>
		
		<summary type="html">&lt;p&gt;Randomhuman: /* RemoteAdmin Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Template:Quicklinks}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:#ffa0a0; padding:15px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Caution ! The RemoteAdmin feature is unsecured at this time. For testing uses only.&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Setup the Remote Admin ==&lt;br /&gt;
&lt;br /&gt;
=== Setup OpenSim === &lt;br /&gt;
&lt;br /&gt;
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file:&lt;br /&gt;
&lt;br /&gt;
 [RemoteAdmin]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 access_password = secret&lt;br /&gt;
&lt;br /&gt;
=== Example in Python ===&lt;br /&gt;
 # Author  : DrScofield &lt;br /&gt;
 # Source  : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
 # License : BSD License&lt;br /&gt;
 &lt;br /&gt;
 #!/usr/bin/python  &lt;br /&gt;
 import xmlrpclib  &lt;br /&gt;
   &lt;br /&gt;
 # XML-RPC URL (http_listener_port)  &lt;br /&gt;
 gridServerURL = ‘http://127.0.0.1:9000′  &lt;br /&gt;
    &lt;br /&gt;
 # instantiate server object  &lt;br /&gt;
 gridServer = xmlrpclib.Server(gridServerURL)  &lt;br /&gt;
   &lt;br /&gt;
 # invoke admin_alert: requires password and message  &lt;br /&gt;
 gridServer.admin_broadcast({’password’: ’secret’,   ‘message’: ‘the answer is 42′})&lt;br /&gt;
&lt;br /&gt;
=== RemoteAdmin executable for Windows ===&lt;br /&gt;
&lt;br /&gt;
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.&lt;br /&gt;
&lt;br /&gt;
Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]&lt;br /&gt;
&lt;br /&gt;
=== Example in PHP ===&lt;br /&gt;
&lt;br /&gt;
This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here].&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
// Author  : Olish Newman&lt;br /&gt;
// Source  : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass&lt;br /&gt;
// Licence : BSD License&lt;br /&gt;
&lt;br /&gt;
// Including the RemoteAdmin PHP class. It can be downloaded from the link above.&lt;br /&gt;
include('RemoteAdmin.php');&lt;br /&gt;
&lt;br /&gt;
// Instantiate the class with parameters identical to the Python example above&lt;br /&gt;
$myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_broadcast&lt;br /&gt;
$parameters = array('message' =&amp;gt; 'the answer is 42');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_broadcast', $parameters);&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_shutdown (example for use without parameters)&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_shutdown');&lt;br /&gt;
&lt;br /&gt;
// Invoke admin_create_user (multiple parameters)&lt;br /&gt;
$parameters = array('user_firstname' =&amp;gt; 'Ruth', 'user_lastname' =&amp;gt; 'OpenSim', 'user_password' =&amp;gt; 'MyPassword', 'start_region_x' =&amp;gt; '1000', 'start_region_y' =&amp;gt; '1000');&lt;br /&gt;
$myRemoteAdmin-&amp;gt;SendCommand('admin_create_user', $parameters);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string.  The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.&lt;br /&gt;
&lt;br /&gt;
Another example in PHP5, using CURL.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class RemotePC {&lt;br /&gt;
&lt;br /&gt;
	function __construct() {&lt;br /&gt;
        $this-&amp;gt;serveruri = &amp;quot;http://myhost&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;serverport =&amp;quot;9000&amp;quot;;&lt;br /&gt;
        $this-&amp;gt;password =&amp;quot;foobar&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function call($command,$parameters) {&lt;br /&gt;
        $parameters['password'] = $this-&amp;gt;password;&lt;br /&gt;
	$request = xmlrpc_encode_request($command, $parameters);&lt;br /&gt;
	$ch = curl_init();&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_URL, $this-&amp;gt;serveruri);&lt;br /&gt;
	curl_setopt( $ch, CURLOPT_PORT, $this-&amp;gt;serverport]);	&lt;br /&gt;
	curl_setopt($ch, CURLOPT_POST, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;
	curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);	&lt;br /&gt;
	$result = curl_exec($ch);&lt;br /&gt;
	curl_close($ch); &lt;br /&gt;
	return xmlrpc_decode($result);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example in Perl ===&lt;br /&gt;
&lt;br /&gt;
Because the OpenSim internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the '''[[Users:Thomax:perl-xmlrpc | Perl example here]]'''.&lt;br /&gt;
&lt;br /&gt;
== RemoteAdmin Commands ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;
   &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th&amp;gt;Parameters&amp;lt;/th&amp;gt;  &lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_create_region | admin_create_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Create a new region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_master_first, &lt;br /&gt;
region_master_last, region_master_password, listen_ip, external_address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_delete_region | admin_delete_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Delete a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;[[remoteadmin:admin_modify_region | admin_modify_region]]&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;Modify a region&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;td&amp;gt;region_name, region_id (optional), public, enable_voice&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown | admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Shut down the simulator&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;''No parameter needed''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_broadcast| admin_broadcast]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Send a general alert&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_restart| admin_restart]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Restart Region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_shutdown| admin_shutdown]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Shutdown server&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;shutdown (optional, expects 'delayed'), milliseconds&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_heightmap| admin_load_heightmap]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Load Height Map&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, regionid&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user| admin_create_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_create_user_email| admin_create_user_email]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Create a new user (alias for admin_create_user)&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, &lt;br /&gt;
start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_exists_user| admin_exists_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Check whether a certain user account exists&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_update_user| admin_update_user]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;	&lt;br /&gt;
	&amp;lt;td&amp;gt;Update the password/home of a user account&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;user_firstname, user_lastname, user_password, start_region_x, start_region_y&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_xml| admin_load_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Load XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_xml| admin_save_xml]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Execute the Save XML command&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name), xml_version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_load_oar| admin_load_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Load a saved OAR file into a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_save_oar| admin_save_oar]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Saved an OAR file of a regions contents&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;filename, region_uuid (or region_name)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;[[remoteadmin:admin_region_query| admin_region_query]]&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;td&amp;gt;Query the 'health' of a region&amp;lt;/td&amp;gt;	&lt;br /&gt;
        &amp;lt;td&amp;gt;region_uuid or region_name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Thanks to DrScofield for the Python Script&lt;br /&gt;
Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Randomhuman</name></author>	</entry>

	</feed>