[Opensim-users] NWC-RPC Methods Giving Odd Results

Justin Clark-Casey jjustincc at googlemail.com
Fri Nov 28 23:44:30 UTC 2014


I would suggest calling ToString() explicitly, e.g.

ht["transactionID"] = UUID.Random().ToString()

This is what the OpenSimulator code appears to do.

On 28/11/14 23:04, David Lloyd wrote:
>
> The error given by the Money Server is:
>
> Money # 04:57:46 - [MONEY RPC]: handleCancelTransfer: Exception occurred when transaction
> 94786877-9ed6-4d36-98d7-9a88f7b52acf: System.NullReferenceException: Object reference not set to an instance of an object
>    at OpenSim.Grid.MoneyServer.MoneyXmlRpcModule.handleCancelTransfer (Nwc.XmlRpc.XmlRpcRequest request,
> System.Net.IPEndPoint remoteClient) [0x00000] in <filename unknown>:0
>
> This is because it’s attempting to dereference a string (if I do UUID.Random().ToString()) or an empty value.
>
> DSL
>
>
>> On 29 Nov 2014, at 9:30 am, David Lloyd <lloy0076 at adam.com.au <mailto:lloy0076 at adam.com.au>> wrote:
>>
>>
>> Hi There,
>>
>> TL;DR I can’t get NWC-RPC to encode .NET object such as OpenMetaverse’s UUID or System.Net.IEndpoint - anyone know how
>> to do this?
>>
>> I am trying to get the NWC-RPC .NET module to communicate with my money server. The money server registers XML RPC
>> calls with the grid like this:
>>
>>     m_httpServer.AddXmlRPCHandler("CancelTransfer", handleCancelTransfer)
>>
>>
>> The handleCanceTransfer’s signature looks like this:
>>
>>  public XmlRpcResponse handleCancelTransfer(XmlRpcRequest request, IPEndPoint remoteClient)
>>
>> My code looks like this (and it’s a copy/paste with a few tweaks from here):
>>
>>     using System;
>>     using System.Collections;
>>     using System.Collections.Generic;
>>     using System.Net <http://System.Net>;
>>     using Nwc.XmlRpc;
>>     using OpenMetaverse;
>>     namespace Call_With_NWC
>>     {
>>         class MainClass
>>         {
>>             public static void Main(string[] args)
>>             {
>>                 System.Net.ServicePointManager.CertificatePolicy = new ITrustAllCertificates();
>>                 Hashtable ht = new Hashtable();
>>                 ht["remoteClient"] = new IPEndPoint(IPAddress.Parse("192.168.0.1"), 80);
>>                 ht["secureCode"] = "code";
>>                 ht["transactionID"] = UUID.Random(); // UUID Line
>>                 Console.WriteLine("New GUID: " + ht["transactionID"]);
>>                 List<Hashtable> parameters = new List<Hashtable> { ht };
>>                 XmlRpcRequest request = new XmlRpcRequest("CancelTransaction", parameters);
>>                 Hashtable response;
>>                 try {
>>     //                response = (Hashtable)request.Invoke("https://192.168.0.164:8008");
>>                     response = (Hashtable)request.Invoke("http://192.168.0.1:9000");
>>                     Console.WriteLine("It seems to have worked...");
>>                     foreach (var key in response.Keys)
>>                     {
>>                         Console.WriteLine("Key: " + key + " => " + response[key]);
>>                     }
>>                 } catch (Exception ex) {
>>                     Console.WriteLine("Got an exception:\n" + ex.ToString());
>>                 }
>>             }
>>         }
>>     }
>>
>>
>> The money server consistently complains that the secureCode and UUID are empty - when in fact…they are…because I wrote
>> up a little “Dump the request” server and get:
>>
>> Message of length 348 was defined but not a blessed scalar.
>> <?xml version="1.0" encoding="utf-8"?>
>> <methodCall>
>> <methodName>
>> CancelTransaction
>> </methodName>
>> <params>
>> <param>
>> <value>
>> <struct>
>> <member>
>> <name>
>> transactionID
>> </name>
>> <value/>
>> </member>
>> <member>
>> <name>
>> remoteClient
>> </name>
>> <value/>
>> </member>
>> <member>
>> <name>
>> secureCode
>> </name>
>> <value>
>> <string>
>> code
>> </string>
>> </value>
>> </member>
>> </struct>
>> </value>
>> </param>
>> </params>
>> </methodCall>
>>
>> In fact, the NWC-XML-RPC is behaving as though it doesn’t know how to encode anything but plain strings. The
>> transactionID should be the type OpenMetavers.UUID (which seems to be a wrapper around GUUID) and remoteClient should
>> be an IEndPoint from System.Net <http://system.net/>.
>>
>> Obviously I’m missing something but I’m not sure what.
>>
>> How does one encode OpenMetaverse and other .NET objects so that the XML-RPC client on the other end is able to decode
>> them?
>>
>> DSL
>> _______________________________________________
>> Opensim-users mailing list
>> Opensim-users at opensimulator.org <mailto:Opensim-users at opensimulator.org>
>> http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-users
>
>
>
> _______________________________________________
> Opensim-users mailing list
> Opensim-users at opensimulator.org
> http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-users
>


-- 
Justin Clark-Casey (justincc)
OSVW Consulting
http://justincc.org
http://twitter.com/justincc


More information about the Opensim-users mailing list