Blog
Jamming with XMLRPC,JSON,BYTEARRAYS and ENCRYPTION
7 years, 9 months ago Posted in: Blog Comments Off
PHP:
  1. <?php
  2.  
  3.     // include server library   
  4.     include('rpc/class-IXR.php');
  5.     include('rpc/JSON.php');
  6.    
  7.   /**
  8.    * Server Implementation
  9.    * @author mmonti
  10.    *
  11.    */
  12. class RPCServer extends IXR_Server {
  13.  
  14.    
  15.     // constructor
  16.     function RPCServer() {
  17.         $this->methods = array(
  18.             'pushError' => 'this:pushError',
  19.             'bypass' => 'this:bypass',
  20.             'pushStruct' => 'this:pushStruct'
  21.         );
  22.  
  23.    
  24.         // start server
  25.         $this->IXR_Server($this->methods);
  26.     }
  27.  
  28.     /**
  29.      * Push an error back to client
  30.      *
  31.      * @param $args
  32.      * @return unknown_type
  33.      */
  34.     function pushError($args) {
  35.         return(new IXR_Error(404, __("Sorry, no such page.")));
  36.     }   
  37.  
  38.    
  39.    
  40.     /**
  41.      * The decode function
  42.      * @param $args
  43.      * @return unknown_type
  44.      */
  45.     function bypass($args) {
  46.        
  47.        
  48.         // decode the base 64
  49.         $mydata = base64_decode($args);
  50.        
  51.         // decompress byearray
  52.         $uncompressedPostedData = gzuncompress($mydata);
  53.        
  54.         // fix glitches
  55.         $open = stripos($uncompressedPostedData, "{");   
  56.         $uncompressedPostedData   = substr($uncompressedPostedData, $open);
  57.  
  58.         // print log
  59.         //$this->logIO($uncompressedPostedData);
  60.  
  61.         // instance the json decoder
  62.         $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
  63.        
  64.         // decode json message
  65.         $tmopbj = $json->decode($uncompressedPostedData);
  66.        
  67.         $this->logIO(print_r($tmopbj,true));
  68.        
  69.         //$this->logIO($json->encode($tmopbj));
  70.        
  71.        
  72.         // Jsonize object
  73.         $out = $json->encode($tmopbj);
  74.        
  75.         // compress it
  76.         $out = gzcompress($out, 9);
  77.        
  78.         // encode to base 64
  79.         $out = base64_encode($out);
  80.        
  81.         return($out);
  82.     }
  83.    
  84.    
  85.    
  86.    
  87.     /**
  88.      * convert a struct to object
  89.      *
  90.      * @param $data
  91.      * @return unknown_type
  92.      */
  93.     function array2object($data) {
  94.        if(!is_array($data)) return $data;
  95.       
  96.        $object = new stdClass();
  97.        if (is_array($data) && count($data)> 0) {
  98.           foreach ($data as $name=>$value) {
  99.              $name = strtolower(trim($name));
  100.              if (!empty($name)) {
  101.                 $object->$name = array2object($value);
  102.              }
  103.           }
  104.        }
  105.        return $object;
  106.     }
  107.    
  108.    
  109.    
  110.     /**
  111.      * convert an object to struct
  112.      * @param $data
  113.      * @return unknown_type
  114.      */
  115.     function object2array($data){
  116.        if(!is_object($data) && !is_array($data)) return $data;
  117.    
  118.        if(is_object($data)) $data = get_object_vars($data);
  119.    
  120.        return array_map('object2array', $data);
  121.     }   
  122.  
  123.    
  124.    
  125.    
  126.     /**
  127.      * Sample method to send a struct back
  128.      *
  129.      * @return unknown_type
  130.      */
  131.     function pushStruct() {
  132.         $page_struct = array(
  133.                 "dateValue"   => new IXR_Date(2009-12-25),
  134.                 "stringValue"            => "userid",
  135.                 "numberValue"            => 1
  136.             );
  137.        
  138.         return($page_struct);
  139.     }   
  140.    
  141.  
  142.    
  143.    
  144.     /**
  145.      * Internal logging to file
  146.      * @param $io
  147.      * @param $msg
  148.      * @return unknown_type
  149.      */
  150.     function logIO($msg) {
  151.             $fp = fopen(dirname(__FILE__)."xmlrpc.log","w");
  152.             $date = gmdate("Y-m-d H:i:s ");
  153.             fwrite($fp, "\n\n".$date.$msg);
  154.             fclose($fp);
  155.         return true;
  156.     }
  157.  
  158. }
  159.  
  160.  
  161.  
  162. // instance server on page
  163. $RPCServer = new RPCServer();      
  164.  
  165. ?>

Comments are closed.

Image compression on this page is provided by WordPress Image Compressor