|
|
Line 68: |
Line 68: |
| *[[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]] | | *[[RemoteAdmin:RemoteAdmin Standards|RemoteAdmin Standards]] |
| | | |
− | == Example code ==
| |
− |
| |
− | === Example in C# .NET ===
| |
− |
| |
− | This example needs the Nwc.XmlRpc library, located in your OpenSim bin folder.
| |
− |
| |
− | <source lang="csharp">
| |
− | public void CreateUser(Uri url, string adminPassword, string firstName, string lastName, string password, string email, int regionX, int regionY)
| |
− | {
| |
− | var address = Dns.GetHostEntry(url.DnsSafeHost).AddressList[0];
| |
− | var ht = new Hashtable();
| |
− | ht["password"] = adminPassword;
| |
− | ht["user_firstname"] = firstName;
| |
− | ht["user_lastname"] = lastName;
| |
− | ht["user_password"] = password;
| |
− | ht["user_email"] = email;
| |
− | ht["start_region_x"] = regionX;
| |
− | ht["start_region_y"] = regionY;
| |
− | var parameters = new List<Hashtable> { ht };
| |
− | var rpc = new XmlRpcRequest("admin_create_user", parameters);
| |
− | rpc.Invoke(url.ToString());
| |
− | }
| |
− |
| |
− | [Test]
| |
− | public void NativeUserRegistrationTest()
| |
− | {
| |
− | CreateUser(new Uri("http://yourgrid.com:9000/"), "secret", "Test2", "user2", "apassword", "email@address.com", 0, 0);
| |
− | }
| |
− | </source>
| |
− |
| |
− | === Another Example in C# .NET ===
| |
− |
| |
− | <source lang="csharp">
| |
− | //Author Ottalese complements of yoursimspot.com
| |
− | //This example needs the CookComputing.XmlRpc library, this can be downloaded from http://www.xml-rpc.net/.
| |
− | //Recently updated code I originally posted, this can be secured using SSL.
| |
− |
| |
− | using System;
| |
− | using System.Data;
| |
− | using System.Configuration;
| |
− | using System.Collections;
| |
− | using System.Web;
| |
− | using System.Web.Security;
| |
− | using System.Web.UI;
| |
− | using System.Web.UI.WebControls;
| |
− | using System.Web.UI.WebControls.WebParts;
| |
− | using System.Web.UI.HtmlControls;
| |
− | using CookComputing.XmlRpc;
| |
− |
| |
− | [XmlRpcUrl("http://ServerIpAddress:9000/")]
| |
− | public interface RemoteOpensim : IXmlRpcProxy
| |
− | {
| |
− | //Create new user
| |
− | [XmlRpcMethod("admin_create_user")]
| |
− | XmlRpcStruct admin_create_user(XmlRpcStruct Parameters);
| |
− | }
| |
− |
| |
− | public partial class _Default : System.Web.UI.Page
| |
− | {
| |
− | protected void Page_Load(object sender, EventArgs e)
| |
− | {
| |
− | }
| |
− | protected void SubmitButton_Click(object sender, EventArgs e)
| |
− | {
| |
− | XmlRpcStruct NewUser = new XmlRpcStruct(); //Will contain return results.
| |
− | XmlRpcStruct Parameters = new XmlRpcStruct();//Parameters passed.
| |
− | try
| |
− | {
| |
− | RemoteOpensim Admin = XmlRpcProxyGen.Create<RemoteOpensim>();
| |
− |
| |
− | Parameters.Add("password", "RemotePassword"); //Password you set in the .ini file for the RemoteAdmin
| |
− | Parameters.Add("user_firstname", SomeStringWithFirstName);
| |
− | Parameters.Add("user_lastname", SomeStringWithLastName);
| |
− | Parameters.Add("user_password", SomePassword);
| |
− | Parameters.Add("start_region_x", 0);
| |
− | Parameters.Add("start_region_y", 0);
| |
− | NewUser = Admin.admin_create_user(Parameters);
| |
− |
| |
− | foreach (DictionaryEntry ReturnResults in NewUser)
| |
− | {
| |
− | Response.Write(ReturnResults.Key.ToString() + " : " + d.Value.ToString());//Returns if the user was added or not
| |
− | }
| |
− | }
| |
− | catch (Exception ex)
| |
− | {
| |
− | Response.Write(ex.Message);
| |
− | }
| |
− | }
| |
− | }
| |
− | </source>
| |
− |
| |
− | === Example in Python ===
| |
− |
| |
− | <source lang="python">
| |
− | # Author : DrScofield
| |
− | # Source : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/
| |
− | # License : BSD License
| |
− |
| |
− | #!/usr/bin/python
| |
− | import xmlrpclib
| |
− |
| |
− | # XML-RPC URL (http_listener_port)
| |
− | simulatorUrl = "http://127.0.0.1:9000"
| |
− |
| |
− | # instantiate server object
| |
− | simulator = xmlrpclib.Server(simulatorUrl)
| |
− |
| |
− | # invoke admin_alert: requires password and message
| |
− | simulator.admin_broadcast({'password': 'secret', 'message': 'the answer is 42'})
| |
− | </source>
| |
− |
| |
− | === Example XML-RPC string to "create user" ===
| |
− |
| |
− | (used with first C#.NET method above)
| |
− |
| |
− | POST admin_create_user HTTP/1.0<br>Host: http://10.0.0.12:16384/<br>Content-type: text/xml<br>Content-Length: 993
| |
− |
| |
− | <?xml version="1.0"?><br><methodCall><br> <methodName>admin_create_user</methodName><br> <params><br> <param><br> <value><br> <struct><br> <member><br> <name>password</name><br> <value><string>password</string></value><br> </member><br> <member><br> <name>user_firstname</name><br> <value><string>male</string></value> <br> </member><br> <member><br> <name>user_lastname</name><br> <value><string>9999</string></value><br> </member><br> <member><br> <name>user_password</name><br> <value><string>password</string></value><br> </member><br> <member><br> <name>user_email</name><br> <value><string>none@email.com</string></value><br> </member><br> <member><br> <name>start_region_x</name><br> <value><int>128</int></value><br> </member><br> <member><br> <name>start_region_y</name><br> <value><int>128</int></value><br> </member><br> </struct><br> </value><br> </param><br> </params><br> </methodCall>
| |
− |
| |
− | === RemoteAdmin executable for Windows ===
| |
− |
| |
− | The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.
| |
− |
| |
− | Downloads and documentation on the [http://lab.newworldgrid.com/index.php/RemoteAdmin_Executable RemoteAdmin Executable webpage]
| |
− |
| |
− | === Example in PHP ===
| |
− |
| |
− | This example needs the RemoteAdmin PHP Class file available [http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass here]. <source lang="php">
| |
− | <?php
| |
− |
| |
− | // Author : Olish Newman
| |
− | // Source : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass
| |
− | // Licence : BSD License
| |
− |
| |
− | // Including the RemoteAdmin PHP class. It can be downloaded from the link above.
| |
− | include('RemoteAdmin.php');
| |
− |
| |
− | // Instantiate the class with parameters identical to the Python example above
| |
− | $myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret');
| |
− |
| |
− | // Invoke admin_broadcast
| |
− | $parameters = array('message' => 'the answer is 42');
| |
− | $myRemoteAdmin->SendCommand('admin_broadcast', $parameters);
| |
− |
| |
− | // Invoke admin_shutdown (example for use without parameters)
| |
− | $myRemoteAdmin->SendCommand('admin_shutdown');
| |
− |
| |
− | // Invoke admin_create_user (multiple parameters)
| |
− | $parameters = array('user_firstname' => 'Ruth', 'user_lastname' => 'OpenSim', 'user_password' => 'MyPassword', 'start_region_x' => '1000', 'start_region_y' => '1000');
| |
− | $myRemoteAdmin->SendCommand('admin_create_user', $parameters);
| |
− | ?>
| |
− | </source>
| |
− |
| |
− | 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.
| |
− |
| |
− | Another example in PHP5, using CURL. <source lang="php">
| |
− | //This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal
| |
− | <?php
| |
− | class RemotePC {
| |
− |
| |
− | function __construct() {
| |
− | $this->serveruri = "http://myhost";
| |
− | $this->serverport ="9000";
| |
− | $this->password ="foobar";
| |
− | }
| |
− |
| |
− | function call($command,$parameters) {
| |
− | $parameters['password'] = $this->password;
| |
− | $request = xmlrpc_encode_request($command, $parameters);
| |
− | $ch = curl_init();
| |
− | curl_setopt( $ch, CURLOPT_URL, $this->serveruri);
| |
− | curl_setopt( $ch, CURLOPT_PORT, $this->serverport]);
| |
− | curl_setopt($ch, CURLOPT_POST, 1);
| |
− | curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);
| |
− | curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request);
| |
− | curl_setopt ( $ch, CURLOPT_TIMEOUT, 5);
| |
− | $result = curl_exec($ch);
| |
− | curl_close($ch);
| |
− | return xmlrpc_decode($result);
| |
− | }
| |
− | }
| |
− | ?>
| |
− | </source>
| |
− |
| |
− | <br>
| |
− |
| |
− | === Example in Perl ===
| |
− |
| |
− | 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]]'''.
| |
− |
| |
− | == Credits ==
| |
− |
| |
− | Thanks to DrScofield for the Python Script Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/
| |
| | | |
| [[Category:Development]] | | [[Category:Development]] |
First you should enable the remote admin interface to do so just add the following lines to your OpenSim.ini file Port should be set to a nonzero value to have the remote admin on a different port
As of r/16843 you can limit access to remote admin to specific IP addresses by using the optional access_ip_addresses. You can list all IP's allowed to access remote admin by seperating each IP by a comma. If access_ip_addresses isn't set, then all IP addresses can access RemoteAdmin.
See OpenSim.ini.example in the OpenSim distribution for more details.
You can also specify a different port for the XMLRPCAdmin command listener from the default simulator HTTP port