../pvss.htm menu.gif basics.gif

xmlrpcHandler()

CtrlXmlRpc is a CTRL extension including XML-RPC functions. XML-RPC is a protocol for web services, similar to SOAP but much simpler.

 

In order to run an XMLRPC server, you have to start the HTTP server and install a handler. "/RPC2" is the default URL for XMLRPC. See also httpConnect().

 

See also chapter XmlRpc, basics.

Synopsis

mixed xmlrpcHandler(string content);

Parameters

    Parameter

    Meaning

    content

    The content

Return value

Result of the function call like it is sent from the HTTP server to the client. This can be a string (XML coded result) or a dyn_string (result + additional header for HTTP) or a dyn_mixed (first entry is the result either as a string or a compressed blob. The further rows are additional header. Since a "Content-Type" header is required for a gzip'ed result, the gziped result cannot be returned as blob.

Description

CtrlXmlRpc is a CTRL extension with XmlRpc functions. XmlRpc is a protocol for web services, similar to SOAP but much simplier.

 

In order to run an XmlRpc server, you have to start the HTTP server and install a handler. "/RPC2" is the default URL for XmlRpc.

IconExample

#uses "CtrlXmlRpc"

 

main()

{

 

   httpServer(false, 80);

   httpConnect("xmlrpcHandler", "/RPC2");

 

}

 

 

 

mixed xmlrpcHandler(mixed content)

{

   // content is the content

   // decode content

   string function;

   dyn_mixed args;

  
xmlrpcDecodeRequest(content, function, args);

  // Execute a little bit different according to the function

  

   mixed result;

   switch (function)

   {

      case "test" :

      result = test(args[1]);

      break;

   }

   // Encode the result again and return to the server

   string ret;

   xmlrpcEncodeResponse(result, ret);

   return ret;

}

IconExample

 

This is an example of the xmlrpcHandler when the function gzip() is used to compress the response.

main()
{
  httpServer(false, 80, 0);  // Starts the HTTP server
  httpConnect("xmlrpcHandler", "/RPC2");  // Registers the handler for XmlRpc calls
}

 

// If you want to compress (gzip) the response:

 

mixed xmlrpcHandler(mixed content, string user, string ip, dyn_string ds1, dyn_string ds2, int connIdx)

{

  string     method;   // Method name
  dyn_mixed  args;     // Method arguments
  mixed      result;   // Return value from method call
  string     ret;      // Encoded response
  
  xmlrpcDecodeRequest(content, method, args);  // Decodes the XmlRpc request
  switch (method)
  {
    case "system.listMethods" :
        // Introspection: Return a dyn_string with all defined methods
        result = makeDynString();
        break;
    case "test.add" :
        // Add 2 values
        if (dynlen(args) < 2)
          return xmlrpcReturnFault(2, "Arguments missing in \"test.add\"");
        result = args[1] + args[2];
        break;
        
    default :
        // Wrong method name
        return xmlrpcReturnFault(1, "No such method");
  }
  xmlrpcEncodeResponse(result, ret);
 
  /* If you want to compress the result,the prerequisites are:
  The result is long enough (bigger than a TCP package)
  The server accepts gzip  */

 

  if (strlen(ret) > 1024) && strpos(httpGetHeader("Accept-Encoding"), "gzip") >= 0)
  {
    blob b;
    gzip(ret, b);
    return makeDynMixed(b, "Content-Type: text/html", "Content-Encoding: gzip");
  }
 
  return ret;
}
string xmlrpcReturnFault(int faultCode, string faultString)
{
  string ret = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n"
               "<methodResponse>\r\n"
               "  <fault>\r\n"
               "    <value>\r\n"
               "      <struct>\r\n"
               "        <member>\r\n"
               "          <name>faultCode</name>\r\n"
               "          <value><i4>"+faultCode+"</i4></value>\r\n"
               "        </member>\r\n"
               "        <member>\r\n"
               "          <name>faultString</name>\r\n"
               "          <value><string>"+faultString+"</string></value>\r\n"
               "        </member>\r\n"
               "      </struct>\r\n"
               "    </value>\r\n"
               "  </fault>\r\n"
               "</methodResponse>\r\n";
  return ret;  
}

Member of

 

Availability

 

See also

xmlrpcConnectToServer(), xmlrpcCloseServer(), xmlrpcCall(), xmlrpcClient(), xmlrpcDecodeRequest(), xmlrpcEncodeResponse()

 

Top Of Page

 

V 3.11 SP1

Copyright ETM professional control GmbH 2013 All Rights Reserved