ssb             Sun Apr  8 00:42:12 2001 EDT

  Modified files:              
    /php4/pear/XML      RPC.php 
  Log:
  * globals fixes
  
  
Index: php4/pear/XML/RPC.php
diff -u php4/pear/XML/RPC.php:1.2 php4/pear/XML/RPC.php:1.3
--- php4/pear/XML/RPC.php:1.2   Tue Sep 26 00:33:19 2000
+++ php4/pear/XML/RPC.php       Sun Apr  8 00:42:11 2001
@@ -7,7 +7,7 @@
 //
 // by Edd Dumbill (C) 1999-2000
 // <[EMAIL PROTECTED]>
-// $Id: RPC.php,v 1.2 2000/09/26 07:33:19 sbergmann Exp $
+// $Id: RPC.php,v 1.3 2001/04/08 07:42:11 ssb Exp $
 
 // License is granted to use or modify this software ("XML-RPC for PHP")
 // for commercial or non-commercial use provided the copyright of the author
@@ -33,55 +33,55 @@
        }
 }
 
-$XML_RPC_I4="i4";
-$XML_RPC_Int="int";
-$XML_RPC_Boolean="boolean";
-$XML_RPC_Double="double";
-$XML_RPC_String="string";
-$XML_RPC_DateTime="dateTime.iso8601";
-$XML_RPC_Base64="base64";
-$XML_RPC_Array="array";
-$XML_RPC_Struct="struct";
-
-$XML_RPC_Types=array($XML_RPC_I4 => 1,
-                                  $XML_RPC_Int => 1,
-                                  $XML_RPC_Boolean => 1,
-                                  $XML_RPC_String => 1,
-                                  $XML_RPC_Double => 1,
-                                  $XML_RPC_DateTime => 1,
-                                  $XML_RPC_Base64 => 1,
-                                  $XML_RPC_Array => 2,
-                                  $XML_RPC_Struct => 3);
+$GLOBALS['XML_RPC_I4']="i4";
+$GLOBALS['XML_RPC_Int']="int";
+$GLOBALS['XML_RPC_Boolean']="boolean";
+$GLOBALS['XML_RPC_Double']="double";
+$GLOBALS['XML_RPC_String']="string";
+$GLOBALS['XML_RPC_DateTime']="dateTime.iso8601";
+$GLOBALS['XML_RPC_Base64']="base64";
+$GLOBALS['XML_RPC_Array']="array";
+$GLOBALS['XML_RPC_Struct']="struct";
+
+$GLOBALS['XML_RPC_Types']=array($XML_RPC_I4 => 1,
+                                $XML_RPC_Int => 1,
+                                $XML_RPC_Boolean => 1,
+                                $XML_RPC_String => 1,
+                                $XML_RPC_Double => 1,
+                                $XML_RPC_DateTime => 1,
+                                $XML_RPC_Base64 => 1,
+                                $XML_RPC_Array => 2,
+                                $XML_RPC_Struct => 3);
 
-$XML_RPC_Entities=array("quot" => '"',
+$GLOBALS['XML_RPC_Entities']=array("quot" => '"',
                                   "amp" => "&",
                                   "lt" => "<",
                                   "gt" => ">",
                                   "apos" => "'");
 
-$XML_RPC_err["unknown_method"]=1;
-$XML_RPC_str["unknown_method"]="Unknown method";
-$XML_RPC_err["invalid_return"]=2;
-$XML_RPC_str["invalid_return"]="Invalid return payload: enabling debugging to examine 
incoming payload";
-$XML_RPC_err["incorrect_params"]=3;
-$XML_RPC_str["incorrect_params"]="Incorrect parameters passed to method";
-$XML_RPC_err["introspect_unknown"]=4;
-$XML_RPC_str["introspect_unknown"]="Can't introspect: method unknown";
-$XML_RPC_err["http_error"]=5;
-$XML_RPC_str["http_error"]="Didn't receive 200 OK from remote server.";
+$GLOBALS['XML_RPC_err']["unknown_method"]=1;
+$GLOBALS['XML_RPC_str']["unknown_method"]="Unknown method";
+$GLOBALS['XML_RPC_err']["invalid_return"]=2;
+$GLOBALS['XML_RPC_str']["invalid_return"]="Invalid return payload: enabling debugging 
+to examine incoming payload";
+$GLOBALS['XML_RPC_err']["incorrect_params"]=3;
+$GLOBALS['XML_RPC_str']["incorrect_params"]="Incorrect parameters passed to method";
+$GLOBALS['XML_RPC_err']["introspect_unknown"]=4;
+$GLOBALS['XML_RPC_str']["introspect_unknown"]="Can't introspect: method unknown";
+$GLOBALS['XML_RPC_err']["http_error"]=5;
+$GLOBALS['XML_RPC_str']["http_error"]="Didn't receive 200 OK from remote server.";
 
-$XML_RPC_defencoding="UTF-8";
+$GLOBALS['XML_RPC_defencoding']="UTF-8";
 
 // let user errors start at 800
-$XML_RPC_erruser=800; 
+$GLOBALS['XML_RPC_erruser']=800; 
 // let XML parse errors start at 100
-$XML_RPC_errxml=100;
+$GLOBALS['XML_RPC_errxml']=100;
 
 // formulate backslashes for escaping regexp
-$XML_RPC_backslash=chr(92).chr(92);
+$GLOBALS['XML_RPC_backslash']=chr(92).chr(92);
 
-$XML_RPC_twoslash=$XML_RPC_backslash . $XML_RPC_backslash;
-$XML_RPC_twoslash="2SLS";
+$GLOBALS['XML_RPC_twoslash']=$XML_RPC_backslash . $XML_RPC_backslash;
+//$GLOBALS['XML_RPC_twoslash']="2SLS";
 // used to store state during parsing
 // quick explanation of components:
 //   st - used to build up a string for evaluation
@@ -94,7 +94,7 @@
 //   params - used to store parameters in method calls
 //   method - used to store method name
 
-$_xh=array();
+$GLOBALS['_xh']=array();
 
 
 class XML_RPC_Parser extends XML_Parser {
@@ -247,134 +247,145 @@
     }
 }
 
-function xmlrpc_entity_decode($string) {
-  $top=split("&", $string);
-  $op="";
-  $i=0; 
-  while($i<sizeof($top)) {
+function xmlrpc_entity_decode($string)
+{
+    $top=split("&", $string);
+    $op="";
+    $i=0; 
+    while($i<sizeof($top)) {
        if (ereg("^([#a-zA-Z0-9]+);", $top[$i], $regs)) {
-         $op.=ereg_replace("^[#a-zA-Z0-9]+;",
-                                               xmlrpc_lookup_entity($regs[1]),
-                                                                                      
 $top[$i]);
+            $op.=ereg_replace("^[#a-zA-Z0-9]+;",
+                              xmlrpc_lookup_entity($regs[1]),
+                              $top[$i]);
        } else {
-         if ($i==0) 
+            if ($i==0) 
                $op=$top[$i]; 
-         else
+            else
                $op.="&" . $top[$i];
        }
        $i++;
-  }
-  return $op;
+    }
+    return $op;
 }
 
-function xmlrpc_lookup_entity($ent) {
-  global $XML_RPC_Entities;
+function xmlrpc_lookup_entity($ent)
+{
+    global $XML_RPC_Entities;
   
-  if ($XML_RPC_Entities[strtolower($ent)]) 
+    if ($XML_RPC_Entities[strtolower($ent)]) 
        return $XML_RPC_Entities[strtolower($ent)];
-  if (ereg("^#([0-9]+)$", $ent, $regs))
+    if (ereg("^#([0-9]+)$", $ent, $regs))
        return chr($regs[1]);
-  return "?";
+    return "?";
 }
 
-class xmlrpc_client {
-  var $path;
-  var $server;
-  var $port;
-  var $errno;
-  var $errstring;
-  var $debug=0;
-       var $username="";
-       var $password="";
-
-  function xmlrpc_client($path, $server, $port=80) {
-               $this->port=$port; $this->server=$server; $this->path=$path;
-  }
-
-  function setDebug($in) {
-               if ($in) { 
-                       $this->debug=1;
-               } else {
-                       $this->debug=0;
-               }
-  }
+class xmlrpc_client
+{
+    var $path;
+    var $server;
+    var $port;
+    var $errno;
+    var $errstring;
+    var $debug=0;
+    var $username="";
+    var $password="";
+
+    function xmlrpc_client($path, $server, $port=80)
+    {
+        $this->port=$port; $this->server=$server; $this->path=$path;
+    }
 
-       function setCredentials($u, $p) {
-               $this->username=$u;
-               $this->password=$p;
-       }
-
-  function send($msg, $timeout=0) {
-               // where msg is an xmlrpcmsg
-               $msg->debug=$this->debug;
-               return $this->sendPayloadHTTP10($msg, $this->server, $this->port,
-                                                                                      
                                                         $timeout, $this->username, 
-                                                                                      
                                                         $this->password);
-  }
-
-       function sendPayloadHTTP10($msg, $server, $port, $timeout=0,
-                                                                                      
                          $username="", $password="") {
-               if($timeout>0)
-                       $fp=fsockopen($server, $port,
-                                                                               
$this->errno, $this->errstr, $timeout);
-               else
-                       $fp=fsockopen($server, $port,
-                                                                               
$this->errno, $this->errstr);
-               if (!$fp) {   
-                       return 0;
-               }
-               // Only create the payload if it was not created previously
-               if(empty($msg->payload)) $msg->createPayload();
-               
-               // thanks to Grant Rauscher <[EMAIL PROTECTED]>
-               // for this
-               $credentials="";
-               if ($username!="") {
-                       $credentials="Authorization: Basic " .
-                               base64_encode($username . ":" . $password) . "\r\n";
-               }
+    function setDebug($in)
+    {
+        if ($in) { 
+            $this->debug=1;
+        } else {
+            $this->debug=0;
+        }
+    }
 
-               $op= "POST " . $this->path. " HTTP/1.0\r\nUser-Agent: PHP XMLRPC 
1.0\r\n" .
-                       "Host: ". $this->server  . "\r\n" .
-                       $credentials . 
-                       "Content-Type: text/xml\r\nContent-Length: " .
-                       strlen($msg->payload) . "\r\n\r\n" .
-                       $msg->payload;
-               
-               if (!fputs($fp, $op, strlen($op))) {
-                       $this->errstr="Write error";
-                       return 0;
-               }
-               $resp=$msg->parseResponseFile($fp);
-               fclose($fp);
-               return $resp;
-       }
+    function setCredentials($u, $p)
+    {
+        $this->username=$u;
+        $this->password=$p;
+    }
+    
+    function send($msg, $timeout=0)
+    {
+        // where msg is an xmlrpcmsg
+        $msg->debug=$this->debug;
+        return $this->sendPayloadHTTP10($msg, $this->server, $this->port,
+                                        $timeout, $this->username, 
+                                        $this->password);
+    }
 
+    function sendPayloadHTTP10($msg, $server, $port, $timeout=0,
+                               $username="", $password="")
+    {
+        if($timeout>0)
+            $fp=fsockopen($server, $port,
+                          $this->errno, $this->errstr, $timeout);
+        else
+            $fp=fsockopen($server, $port,
+                          $this->errno, $this->errstr);
+        if (!$fp) {   
+            return 0;
+        }
+        // Only create the payload if it was not created previously
+        if(empty($msg->payload)) $msg->createPayload();
+        
+        // thanks to Grant Rauscher <[EMAIL PROTECTED]>
+        // for this
+        $credentials="";
+        if ($username!="") {
+            $credentials="Authorization: Basic " .
+                base64_encode($username . ":" . $password) . "\r\n";
+        }
+        
+        $op= "POST " . $this->path. " HTTP/1.0\r\nUser-Agent: PHP XMLRPC 1.0\r\n" .
+            "Host: ". $this->server  . "\r\n" .
+            $credentials . 
+            "Content-Type: text/xml\r\nContent-Length: " .
+            strlen($msg->payload) . "\r\n\r\n" .
+            $msg->payload;
+        
+        if (!fputs($fp, $op, strlen($op))) {
+            $this->errstr="Write error";
+            return 0;
+        }
+        $resp=$msg->parseResponseFile($fp);
+        fclose($fp);
+        return $resp;
+    }
 } // end class xmlrpc_client
+
 
-class xmlrpcresp {
-  var $xv;
-  var $fn;
-  var $fs;
-  var $hdrs;
+class xmlrpcresp
+{
+    var $xv;
+    var $fn;
+    var $fs;
+    var $hdrs;
 
-  function xmlrpcresp($val, $fcode=0, $fstr="") {
+    function xmlrpcresp($val, $fcode=0, $fstr="")
+    {
        if ($fcode!=0) {
-         $this->fn=$fcode;
-         $this->fs=htmlspecialchars($fstr);
+            $this->fn=$fcode;
+            $this->fs=htmlspecialchars($fstr);
        } else {
-         $this->xv=$val;
+            $this->xv=$val;
        }
-  }
-
-  function faultCode() { return $this->fn; }
-  function faultString() { return $this->fs; }
-  function value() { return $this->xv; }
-
-  function serialize() { 
+    }
+    
+    function faultCode() { return $this->fn; }
+    function faultString() { return $this->fs; }
+    function value() { return $this->xv; }
+    
+    function serialize()
+    { 
        $rs="<methodResponse>\n";
        if ($this->fn) {
-         $rs.="<fault>
+            $rs.="<fault>
   <value>
     <struct>
       <member>
@@ -389,81 +400,89 @@
   </value>
 </fault>";
        } else {
-         $rs.="<params>\n<param>\n" . $this->xv->serialize() . 
+            $rs.="<params>\n<param>\n" . $this->xv->serialize() . 
                "</param>\n</params>";
        }
        $rs.="\n</methodResponse>";
        return $rs;
-  }
+    }
 }
 
-class xmlrpcmsg {
-  var $payload;
-  var $methodname;
-  var $params=array();
-  var $debug=0;
-
-  function xmlrpcmsg($meth, $pars=0) {
-               $this->methodname=$meth;
-               if (is_array($pars) && sizeof($pars)>0) {
-                       for($i=0; $i<sizeof($pars); $i++) 
-                               $this->addParam($pars[$i]);
-               }
-  }
+class xmlrpcmsg
+{
+    var $payload;
+    var $methodname;
+    var $params=array();
+    var $debug=0;
+
+    function xmlrpcmsg($meth, $pars=0)
+    {
+        $this->methodname=$meth;
+        if (is_array($pars) && sizeof($pars)>0) {
+            for($i=0; $i<sizeof($pars); $i++) 
+                $this->addParam($pars[$i]);
+        }
+    }
 
-  function xml_header() {
+    function xml_header()
+    {
        return "<?xml version=\"1.0\"?>\n<methodCall>\n";
-  }
+    }
 
-  function xml_footer() {
+    function xml_footer()
+    {
        return "</methodCall>\n";
-  }
+    }
 
-  function createPayload() {
+    function createPayload()
+    {
        $this->payload=$this->xml_header();
        $this->payload.="<methodName>" . $this->methodname . "</methodName>\n";
        //      if (sizeof($this->params)) {
-         $this->payload.="<params>\n";
-         for($i=0; $i<sizeof($this->params); $i++) {
-               $p=$this->params[$i];
-               $this->payload.="<param>\n" . $p->serialize() .
-                 "</param>\n";
-         }
-         $this->payload.="</params>\n";
+        $this->payload.="<params>\n";
+        for($i=0; $i<sizeof($this->params); $i++) {
+            $p=$this->params[$i];
+            $this->payload.="<param>\n" . $p->serialize() .
+                "</param>\n";
+        }
+        $this->payload.="</params>\n";
        // }
        $this->payload.=$this->xml_footer();
        $this->payload=ereg_replace("\n", "\r\n", $this->payload);
-  }
+    }
 
-  function method($meth="") {
-       if ($meth!="") {
-         $this->methodname=$meth;
+    function method($meth="")
+    {
+        if ($meth!="") {
+            $this->methodname=$meth;
        }
        return $this->methodname;
-  }
+    }
+
+    function serialize()
+    {
+        $this->createPayload();
+        return $this->payload;
+    }
 
-  function serialize() {
-               $this->createPayload();
-               return $this->payload;
-  }
-
-  function addParam($par) { $this->params[]=$par; }
-  function getParam($i) { return $this->params[$i]; }
-  function getNumParams() { return sizeof($this->params); }
+    function addParam($par) { $this->params[]=$par; }
+    function getParam($i) { return $this->params[$i]; }
+    function getNumParams() { return sizeof($this->params); }
 
-  function parseResponseFile($fp) {
+    function parseResponseFile($fp)
+    {
        $ipd="";
-
+        
        while($data=fread($fp, 32768)) {
-         $ipd.=$data;
+            $ipd.=$data;
        }
        return $this->parseResponse($ipd);
-  }
+    }
 
-  function parseResponse($data="") {
+    function parseResponse($data="")
+    {
        global $_xh,$XML_RPC_err,$XML_RPC_str;
        global $XML_RPC_defencoding;
-
        
        $parser = xml_parser_create($XML_RPC_defencoding);
 
@@ -482,345 +501,345 @@
 
        $hdrfnd=0;
        if ($this->debug)
-         print "<PRE>---GOT---\n" . htmlspecialchars($data) . 
+            print "<PRE>---GOT---\n" . htmlspecialchars($data) . 
                "\n---END---\n</PRE>";
        // see if we got an HTTP 200 OK, else bomb
        // but only do this if we're using the HTTP protocol.
        if (ereg("^HTTP",$data) && 
-                       !ereg("^HTTP/[0-9\.]+ 200 ", $data)) {
-               $errstr= substr($data, 0, strpos($data, "\n")-1);
-               error_log("HTTP error, got response: " .$errstr);
-               $r=new xmlrpcresp(0, $XML_RPC_err["http_error"],
-                                                                                      
 $XML_RPC_str["http_error"]. " (" . $errstr . ")");
-               xml_parser_free($parser);
-               return $r;
+            !ereg("^HTTP/[0-9\.]+ 200 ", $data)) {
+            $errstr= substr($data, 0, strpos($data, "\n")-1);
+            error_log("HTTP error, got response: " .$errstr);
+            $r=new xmlrpcresp(0, $XML_RPC_err["http_error"],
+                              $XML_RPC_str["http_error"]. " (" . $errstr . ")");
+            xml_parser_free($parser);
+            return $r;
        }
        // gotta get rid of headers here
        if ((!$hdrfnd) && ereg("^(.*)\r\n\r\n",$data,$_xh[$parser]['ha'])) {
-         $data=ereg_replace("^.*\r\n\r\n", "", $data);
-         $hdrfnd=1;
+            $data=ereg_replace("^.*\r\n\r\n", "", $data);
+            $hdrfnd=1;
        }
        
        if (!xml_parse($parser, $data, sizeof($data))) {
-               // thanks to Peter Kocks <[EMAIL PROTECTED]>
-               if((xml_get_current_line_number($parser)) == 1)   
-                       $errstr = "XML error at line 1, check URL";
-               else
-                       $errstr = sprintf("XML error: %s at line %d",
-                                                                                      
         xml_error_string(xml_get_error_code($parser)),
-                                                                                      
         xml_get_current_line_number($parser));
-               error_log($errstr);
-               $r=new xmlrpcresp(0, $XML_RPC_err["invalid_return"],
-                                                                                      
 $XML_RPC_str["invalid_return"]);
-               xml_parser_free($parser);
-               return $r;
+            // thanks to Peter Kocks <[EMAIL PROTECTED]>
+            if((xml_get_current_line_number($parser)) == 1)   
+                $errstr = "XML error at line 1, check URL";
+            else
+                $errstr = sprintf("XML error: %s at line %d",
+                                  xml_error_string(xml_get_error_code($parser)),
+                                  xml_get_current_line_number($parser));
+            error_log($errstr);
+            $r=new xmlrpcresp(0, $XML_RPC_err["invalid_return"],
+                              $XML_RPC_str["invalid_return"]);
+            xml_parser_free($parser);
+            return $r;
        }
        xml_parser_free($parser);
        if ($this->debug) {
-         print "<PRE>---EVALING---[" . 
+            print "<PRE>---EVALING---[" . 
                strlen($_xh[$parser]['st']) . " chars]---\n" . 
                htmlspecialchars($_xh[$parser]['st']) . ";\n---END---</PRE>";
        }
        if (strlen($_xh[$parser]['st'])==0) {
-         // then something odd has happened
-         // and it's time to generate a client side error
-         // indicating something odd went on
-         $r=new xmlrpcresp(0, $XML_RPC_err["invalid_return"],
-                                               $XML_RPC_str["invalid_return"]);
+            // then something odd has happened
+            // and it's time to generate a client side error
+            // indicating something odd went on
+            $r=new xmlrpcresp(0, $XML_RPC_err["invalid_return"],
+                              $XML_RPC_str["invalid_return"]);
        } else {
-         eval('$v=' . $_xh[$parser]['st'] . '; $allOK=1;');
-         if ($_xh[$parser]['isf']) {
+            eval('$v=' . $_xh[$parser]['st'] . '; $allOK=1;');
+            if ($_xh[$parser]['isf']) {
                $f=$v->structmem("faultCode");
                $fs=$v->structmem("faultString");
                $r=new xmlrpcresp($v, $f->scalarval(), 
-                                                 $fs->scalarval());
-         } else {
+                                  $fs->scalarval());
+            } else {
                $r=new xmlrpcresp($v);
-         }
+            }
        }
        $r->hdrs=split('\r?\n', $_xh[$parser]['ha'][1]);
        return $r;
-  }
-
+    }
 }
-
-class xmlrpcval {
-  var $me=array();
-  var $mytype=0;
-
-  function xmlrpcval($val=-1, $type="") {
-               global $XML_RPC_Types;
-               $this->me=array();
-               $this->mytype=0;
-               if ($val!=-1 || $type!="") {
-                       if ($type=="") $type="string";
-                       if ($XML_RPC_Types[$type]==1) {
-                               $this->addScalar($val,$type);
-                       }
-         else if ($XML_RPC_Types[$type]==2)
-                       $this->addArray($val);
-                       else if ($XML_RPC_Types[$type]==3)
-                               $this->addStruct($val);
-               }
-  }
-
-  function addScalar($val, $type="string") {
-               global $XML_RPC_Types, $XML_RPC_Boolean;
-
-               if ($this->mytype==1) {
-                       echo "<B>xmlrpcval</B>: scalar can have only one value<BR>";
-                       return 0;
-               }
-               $typeof=$XML_RPC_Types[$type];
-               if ($typeof!=1) {
-                       echo "<B>xmlrpcval</B>: not a scalar type (${typeof})<BR>";
-                       return 0;
-               }
-               
-               if ($type==$XML_RPC_Boolean) {
-                       if (strcasecmp($val,"true")==0 || $val==1 || $val==true) {
-                               $val=1;
-                       } else {
-                               $val=0;
-                       }
-               }
-               
-               if ($this->mytype==2) {
-                       // we're adding to an array here
-                       $ar=$this->me["array"];
-                       $ar[]=new xmlrpcval($val, $type);
-                       $this->me["array"]=$ar;
-               } else {
-                       // a scalar, so set the value and remember we're scalar
-                       $this->me[$type]=$val;
-                       $this->mytype=$typeof;
-               }
-               return 1;
-  }
 
-  function addArray($vals) {
-               global $XML_RPC_Types;
-               if ($this->mytype!=0) {
-                       echo "<B>xmlrpcval</B>: already initialized as a [" . 
-                               $this->kindOf() . "]<BR>";
-                       return 0;
-               }
-               $this->mytype=$XML_RPC_Types["array"];
-               $this->me["array"]=$vals;
-               return 1;
-  }
+class xmlrpcval
+{
+    var $me=array();
+    var $mytype=0;
 
-  function addStruct($vals) {
+    function xmlrpcval($val=-1, $type="") {
+        global $XML_RPC_Types;
+        $this->me=array();
+        $this->mytype=0;
+        if ($val!=-1 || $type!="") {
+            if ($type=="") $type="string";
+            if ($XML_RPC_Types[$type]==1) {
+                $this->addScalar($val,$type);
+            }
+            else if ($XML_RPC_Types[$type]==2)
+                $this->addArray($val);
+            else if ($XML_RPC_Types[$type]==3)
+                $this->addStruct($val);
+        }
+    }
+    
+    function addScalar($val, $type="string") {
+        global $XML_RPC_Types, $XML_RPC_Boolean;
+        
+        if ($this->mytype==1) {
+            echo "<B>xmlrpcval</B>: scalar can have only one value<BR>";
+            return 0;
+        }
+        $typeof=$XML_RPC_Types[$type];
+        if ($typeof!=1) {
+            echo "<B>xmlrpcval</B>: not a scalar type (${typeof})<BR>";
+            return 0;
+        }
+        
+        if ($type==$XML_RPC_Boolean) {
+            if (strcasecmp($val,"true")==0 || $val==1 || $val==true) {
+                $val=1;
+            } else {
+                $val=0;
+            }
+        }
+        
+        if ($this->mytype==2) {
+            // we're adding to an array here
+            $ar=$this->me["array"];
+            $ar[]=new xmlrpcval($val, $type);
+            $this->me["array"]=$ar;
+        } else {
+            // a scalar, so set the value and remember we're scalar
+            $this->me[$type]=$val;
+            $this->mytype=$typeof;
+        }
+        return 1;
+    }
+    
+    function addArray($vals) {
+        global $XML_RPC_Types;
+        if ($this->mytype!=0) {
+            echo "<B>xmlrpcval</B>: already initialized as a [" . 
+                $this->kindOf() . "]<BR>";
+            return 0;
+        }
+        $this->mytype=$XML_RPC_Types["array"];
+        $this->me["array"]=$vals;
+        return 1;
+    }
+    
+    function addStruct($vals) {
        global $XML_RPC_Types;
        if ($this->mytype!=0) {
-         echo "<B>xmlrpcval</B>: already initialized as a [" . 
+            echo "<B>xmlrpcval</B>: already initialized as a [" . 
                $this->kindOf() . "]<BR>";
-         return 0;
+            return 0;
        }
        $this->mytype=$XML_RPC_Types["struct"];
        $this->me["struct"]=$vals;
        return 1;
-  }
-
-  function dump($ar) {
+    }
+    
+    function dump($ar) {
        reset($ar);
        while ( list( $key, $val ) = each( $ar ) ) {
-         echo "$key => $val<br>";
-         if ($key == 'array')
+            echo "$key => $val<br>";
+            if ($key == 'array')
                while ( list( $key2, $val2 ) = each( $val ) ) {
-                 echo "-- $key2 => $val2<br>";
+                    echo "-- $key2 => $val2<br>";
                }
        }
-  }
-
-  function kindOf() {
+    }
+    
+    function kindOf() {
        switch($this->mytype) {
-       case 3:
-         return "struct";
-         break;
-       case 2:
-         return "array";
-         break;
-       case 1:
-         return "scalar";
-         break;
-       default:
-         return "undef";
-       }
-  }
-
-  function serializedata($typ, $val) {
-               $rs="";
-               global $XML_RPC_Types, $XML_RPC_Base64, $XML_RPC_String;
-               switch($XML_RPC_Types[$typ]) {
-               case 3:
-                       // struct
-                       $rs.="<struct>\n";
-                       reset($val);
-                       while(list($key2, $val2)=each($val)) {
-                               $rs.="<member><name>${key2}</name>\n";
-                               $rs.=$this->serializeval($val2);
-                               $rs.="</member>\n";
-                       }
-                       $rs.="</struct>";
-                       break;
-               case 2:
-                       // array
-                       $rs.="<array>\n<data>\n";
-                       for($i=0; $i<sizeof($val); $i++) {
-                               $rs.=$this->serializeval($val[$i]);
-                       }
-                       $rs.="</data>\n</array>";
-                       break;
-               case 1:
-                       switch ($typ) {
-                       case $XML_RPC_Base64:
-                               $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
-                               break;
-                       case $XML_RPC_Boolean:
-                               $rs.="<${typ}>" . ($val ? "1" : "0") . "</${typ}>";
-                                       break;
-                       case $XML_RPC_String:
-                               $rs.="<${typ}>" . htmlspecialchars($val). "</${typ}>";
-                               break;
-                       default:
-                               $rs.="<${typ}>${val}</${typ}>";
-                       }
-                       break;
-               default:
-                       break;
-               }
-               return $rs;
-  }
+            case 3:
+                return "struct";
+                break;
+            case 2:
+                return "array";
+                break;
+            case 1:
+                return "scalar";
+                break;
+            default:
+                return "undef";
+       }
+    }
+    
+    function serializedata($typ, $val) {
+        $rs="";
+        global $XML_RPC_Types, $XML_RPC_Base64, $XML_RPC_String;
+        switch($XML_RPC_Types[$typ]) {
+            case 3:
+                // struct
+                $rs.="<struct>\n";
+                reset($val);
+                while(list($key2, $val2)=each($val)) {
+                    $rs.="<member><name>${key2}</name>\n";
+                    $rs.=$this->serializeval($val2);
+                    $rs.="</member>\n";
+                }
+                $rs.="</struct>";
+                break;
+            case 2:
+                // array
+                $rs.="<array>\n<data>\n";
+                for($i=0; $i<sizeof($val); $i++) {
+                    $rs.=$this->serializeval($val[$i]);
+                }
+                $rs.="</data>\n</array>";
+                break;
+            case 1:
+                switch ($typ) {
+                    case $XML_RPC_Base64:
+                        $rs.="<${typ}>" . base64_encode($val) . "</${typ}>";
+                        break;
+                    case $XML_RPC_Boolean:
+                        $rs.="<${typ}>" . ($val ? "1" : "0") . "</${typ}>";
+                        break;
+                    case $XML_RPC_String:
+                        $rs.="<${typ}>" . htmlspecialchars($val). "</${typ}>";
+                        break;
+                    default:
+                        $rs.="<${typ}>${val}</${typ}>";
+                }
+                break;
+            default:
+                break;
+        }
+        return $rs;
+    }
 
-  function serialize() {
+    function serialize() {
        return $this->serializeval($this);
-  }
+    }
 
-  function serializeval($o) {
-               global $XML_RPC_Types;
-               $rs="";
-               $ar=$o->me;
-               reset($ar);
-               list($typ, $val) = each($ar);
-               $rs.="<value>";
-               $rs.=$this->serializedata($typ, $val);
-               $rs.="</value>\n";
-               return $rs;
-  }
-
-  function structmem($m) {
-               $nv=$this->me["struct"][$m];
-               return $nv;
-  }
+    function serializeval($o) {
+        global $XML_RPC_Types;
+        $rs="";
+        $ar=$o->me;
+        reset($ar);
+        list($typ, $val) = each($ar);
+        $rs.="<value>";
+        $rs.=$this->serializedata($typ, $val);
+        $rs.="</value>\n";
+        return $rs;
+    }
 
-       function structreset() {
-               reset($this->me["struct"]);
-       }
+    function structmem($m) {
+        $nv=$this->me["struct"][$m];
+        return $nv;
+    }
+
+    function structreset() {
+        reset($this->me["struct"]);
+    }
        
-       function structeach() {
-               return each($this->me["struct"]);
-       }
+    function structeach() {
+        return each($this->me["struct"]);
+    }
+
+    function scalarval() {
+        global $XML_RPC_Boolean, $XML_RPC_Base64;
+        reset($this->me);
+        list($a,$b)=each($this->me);
+        return $b;
+    }
+
+    function scalartyp() {
+        global $XML_RPC_I4, $XML_RPC_Int;
+        reset($this->me);
+        list($a,$b)=each($this->me);
+        if ($a==$XML_RPC_I4) 
+            $a=$XML_RPC_Int;
+        return $a;
+    }
 
-  function scalarval() {
-               global $XML_RPC_Boolean, $XML_RPC_Base64;
-               reset($this->me);
-               list($a,$b)=each($this->me);
-               return $b;
-  }
-
-  function scalartyp() {
-               global $XML_RPC_I4, $XML_RPC_Int;
-               reset($this->me);
-               list($a,$b)=each($this->me);
-               if ($a==$XML_RPC_I4) 
-                       $a=$XML_RPC_Int;
-               return $a;
-  }
-
-  function arraymem($m) {
-               $nv=$this->me["array"][$m];
-               return $nv;
-  }
-
-  function arraysize() {
-               reset($this->me);
-               list($a,$b)=each($this->me);
-               return sizeof($b);
-  }
+    function arraymem($m) {
+        $nv=$this->me["array"][$m];
+        return $nv;
+    }
+
+    function arraysize() {
+        reset($this->me);
+        list($a,$b)=each($this->me);
+        return sizeof($b);
+    }
 }
 
 // date helpers
 function iso8601_encode($timet, $utc=0) {
-       // return an ISO8601 encoded string
-       // really, timezones ought to be supported
-       // but the XML-RPC spec says:
-       //
-       // "Don't assume a timezone. It should be specified by the server in its
-  // documentation what assumptions it makes about timezones."
-       // 
-       // these routines always assume localtime unless 
-       // $utc is set to 1, in which case UTC is assumed
-       // and an adjustment for locale is made when encoding
-       if (!$utc) {
-               $t=strftime("%Y%m%dT%H:%M:%S", $timet);
-       } else {
-               if (function_exists("gmstrftime")) 
-                       // gmstrftime doesn't exist in some versions
-                       // of PHP
-                       $t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);
-               else {
-                       $t=strftime("%Y%m%dT%H:%M:%S", $timet-date("Z"));
-               }
-       }
-       return $t;
+    // return an ISO8601 encoded string
+    // really, timezones ought to be supported
+    // but the XML-RPC spec says:
+    //
+    // "Don't assume a timezone. It should be specified by the server in its
+    // documentation what assumptions it makes about timezones."
+    // 
+    // these routines always assume localtime unless 
+    // $utc is set to 1, in which case UTC is assumed
+    // and an adjustment for locale is made when encoding
+    if (!$utc) {
+        $t=strftime("%Y%m%dT%H:%M:%S", $timet);
+    } else {
+        if (function_exists("gmstrftime")) 
+            // gmstrftime doesn't exist in some versions
+            // of PHP
+            $t=gmstrftime("%Y%m%dT%H:%M:%S", $timet);
+        else {
+            $t=strftime("%Y%m%dT%H:%M:%S", $timet-date("Z"));
+        }
+    }
+    return $t;
 }
 
 function iso8601_decode($idate, $utc=0) {
-       // return a timet in the localtime, or UTC
-       $t=0;
-       if (ereg("([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})",
-                                        $idate, $regs)) {
-               if ($utc) {
-                       $t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], 
$regs[1]);
-               } else {
-                       $t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], 
$regs[1]);
-               }
-       } 
-       return $t;
+    // return a timet in the localtime, or UTC
+    $t=0;
+    if (ereg("([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})",
+             $idate, $regs)) {
+        if ($utc) {
+            $t=gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+        } else {
+            $t=mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
+        }
+    } 
+    return $t;
 }
 
 // general helper functions --- they DON'T WORK YET
 
 function hash_to_rpcv($hash)
-       // contributed by Ben Margolin <[EMAIL PROTECTED]>  
+    // contributed by Ben Margolin <[EMAIL PROTECTED]>  
 {
-  reset($hash);
-  while (list($k,$v) = each($hash)) {
-    if (is_integer($v)) {
-      $oa[$k] = new xmlrpcval($v, 'int');
-    } else if (is_array($v)) {
-                       $oa[$k] = new xmlrpcval( hash_to_rpcv($v), 'struct' );
-    } else { // if binary, do base64...?
-      $oa[$k] = new xmlrpcval($v);
+    reset($hash);
+    while (list($k,$v) = each($hash)) {
+        if (is_integer($v)) {
+            $oa[$k] = new xmlrpcval($v, 'int');
+        } else if (is_array($v)) {
+            $oa[$k] = new xmlrpcval( hash_to_rpcv($v), 'struct' );
+        } else { // if binary, do base64...?
+            $oa[$k] = new xmlrpcval($v);
+        }
     }
-       }
-       return new xmlrpcval( $oa, 'struct' );
+    return new xmlrpcval( $oa, 'struct' );
 } // hash_to_rpc
 
 
 function rpcv_to_hash($rv)
 {
-  $rv->structreset();
-  while (list($k,$v) = $rv->structeach()) {
-    $ko = $v->kindOf();
-    if ('scalar' == $ko) {
-      $oa[$k] = $v->scalarval();
-    } else {
-                       $oa[$k] = rpcv_to_hash( $v );
-               }
-  }
-       return $oa;
+    $rv->structreset();
+    while (list($k,$v) = $rv->structeach()) {
+        $ko = $v->kindOf();
+        if ('scalar' == $ko) {
+            $oa[$k] = $v->scalarval();
+        } else {
+            $oa[$k] = rpcv_to_hash( $v );
+        }
+    }
+    return $oa;
 } // rpcv_to_hash 
 
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to