Code

Updated gosaSupportDaemon.
[gosa.git] / gosa-core / include / class_gosaSupportDaemon.inc
index bf8de50059f4a44851b1534a96afa63576fe6e70..d3ba4ac8ce4502978f720f4417d7e2eb00000f99 100644 (file)
@@ -21,8 +21,8 @@
 
 Function overview:
 
-   __construct              - Create a new deamon handle. 
-   connect                  - Connect to deamon socket.
+   __construct              - Create a new daemon handle. 
+   connect                  - Connect to daemon socket.
    disconnect               - Disconnect from socket.
    set_error                - Sets a new error.
    is_error                 - Returns TRUE if there was an error.
@@ -54,10 +54,10 @@ class gosaSupportDaemon
 
 
   /*! \brief  Creates a new gosaSupportDaemon object.
-    @param string   Host    The Host where the deamon is running on.  
-    @param integer  Port    The port which the deamon use.
+    @param string   Host    The Host where the daemon is running on.  
+    @param integer  Port    The port which the daemon use.
     @param string   Key     The encryption string.
-    @param boolean  Connect Directly connect to deamon socket.
+    @param boolean  Connect Directly connect to daemon socket.
     @param float    Timeout The timelimit for all socket actions.
    */
   public function __construct($connect=TRUE,$timeout=0.2)
@@ -82,7 +82,7 @@ class gosaSupportDaemon
   }
 
 
-  /*! \brief  Establish deamon connection. 
+  /*! \brief  Establish daemon connection. 
     @return boolean Returns true if the connection was succesfully established. 
    */
   public function connect()
@@ -92,14 +92,14 @@ class gosaSupportDaemon
       $this->o_sock->setEncryptionKey($this->s_encryption_key); 
       $this->is_connected = TRUE;
     }else{
-      $this->error = $this->o_sock->get_error();
+      $this->set_error($this->o_sock->get_error());
       $this->disconnect();
     }
     return($this->is_connected);
   }
 
 
-  /*! \brief  Disconnect from gosa deamon.
+  /*! \brief  Disconnect from gosa daemon.
    */
   public function disconnect()
   {
@@ -118,6 +118,16 @@ class gosaSupportDaemon
   }
 
 
+  /*! \brief  Sets an error message, which can be returned with get_error().
+    @param  string  The Error message,
+   */
+  private function reset_error()
+  {
+    $this->b_error = FALSE;
+    $this->s_error = "";
+  }
+
+
   /*! \brief  Checks if an error occured.
     @return boolean returns TRUE or FALSE, whether there is an error or not.
    */
@@ -132,34 +142,33 @@ class gosaSupportDaemon
    */
   public function get_error()
   {
-    return($this->s_error);
+    $str = $this->s_error;
+    $str = preg_replace("/ /"," ",$str);
+    return($str);
   }
 
 
   /*! \brief  Returns an array containing all queued entries.
     @return Array All queued entries as an array.
    */
-  public function get_queued_entries($from=0,$to=10,$sort="timestamp DESC")
+  public function get_queued_entries($from=-1,$to=-1,$sort="timestamp DESC")
   {
-    $this->b_error = FALSE;
-    $this->s_error = "";
+    $this->reset_error();
     $ret = array();
 
     $xml_msg = "<xml>
       <header>gosa_query_jobdb</header>
-      <where>
-      <clause>
-        <phrase>
-        <operator>ne</operator>
-        <HEADERTAG>*</HEADERTAG>
-        </phrase>
-      </clause>
-      </where>
-      <orderby>".$sort."</orderby>
+      <target>GOSA</target>
+      <source>GOSA</source>
+      <orderby>".$sort."</orderby>";
+if($from != -1 && $to != -1){
+$xml_msg.= "
       <limit>
-      <from>".$from."</from>
-      <to>".$to."</to>
-      </limit>
+       <from>".$from."</from>
+       <to>".$to."</to>
+      </limit>";
+}
+$xml_msg.= "
       </xml>";
 
     if($this->connect()){
@@ -167,7 +176,16 @@ class gosaSupportDaemon
       $str = trim($this->o_sock->read());
       $entries = $this->xml_to_array($str);
       if(isset($entries['XML']) && is_array($entries['XML'])){
-        $ret = $entries; 
+
+        /* Check if returned values represent a valid answer */
+        if(isset($entries['XML'])){
+          
+          /* Unset header tags */
+          foreach(array("HEADER","SOURCE","TARGET") as $type){
+            unset($entries['XML'][$type]);
+          }
+          $ret = $entries['XML']; 
+        }
       }
     }
     
@@ -185,13 +203,14 @@ class gosaSupportDaemon
       trigger_error("Requires an array as parameter.");
       return;
     }
-    $this->b_error = FALSE;
-    $this->s_error = "";
+    $this->reset_error();
 
     $ret = array();
 
     $xml_msg = "<xml>
       <header>gosa_query_jobdb</header>
+      <target>GOSA</target>
+      <source>GOSA</source>
       <where>
       <clause>
       <connector>or</connector>";
@@ -211,7 +230,9 @@ class gosaSupportDaemon
       $entries = $this->xml_to_array($str);
       if(isset($entries['XML']) && is_array($entries['XML'])){
         foreach($entries['XML'] as $entry){
-          $ret[] = $entry['ID'];
+          if(isset($entry['ID'])){
+            $ret[] = $entry['ID'];
+          }
         }
       }
     }
@@ -229,13 +250,14 @@ class gosaSupportDaemon
       trigger_error("Requires an array as parameter.");
       return;
     }
-    $this->b_error = FALSE;
-    $this->s_error = "";
+    $this->reset_error();
 
     $ret = array();
 
     $xml_msg = "<xml>
       <header>gosa_query_jobdb</header>
+      <target>GOSA</target>
+      <source>GOSA</source>
       <where>
       <clause>
       <connector>or</connector>";
@@ -244,7 +266,6 @@ class gosaSupportDaemon
         <operator>eq</operator>
         <id>".$id."</id>
         </phrase>";
-      $ret[$id] = FALSE;
     }
     $xml_msg .= "</clause>
       </where>
@@ -255,7 +276,11 @@ class gosaSupportDaemon
       $str = trim($this->o_sock->read());
       $entries = $this->xml_to_array($str); 
       if(isset($entries['XML'])){
-        $ret = $entries['XML'];
+        foreach($entries['XML'] as $name => $entry){
+          if(preg_match("/^ANSWER[0-9]*$/",$name)){
+            $ret[$name] = $entry;
+          }
+        }
       }
     }
     return($ret);
@@ -273,10 +298,12 @@ class gosaSupportDaemon
       return;
     }
 
-    $this->b_error = FALSE;
-    $this->s_error = "";
+    $this->reset_error();
+
     $xml_msg = "<xml>
       <header>gosa_query_jobdb</header>
+      <target>GOSA</target>
+      <source>GOSA</source>
       <where>
       <clause>
       <phrase>
@@ -291,7 +318,9 @@ class gosaSupportDaemon
       $this->o_sock->write($xml_msg);
       $str = trim($this->o_sock->read());
       $entries = $this->xml_to_array($str); 
-      if(isset($entries['XML']['ANSWER1'])){
+      if( isset($entries['XML']['HEADER']) && 
+          $entries['XML']['HEADER']=="answer" && 
+          isset($entries['XML']['ANSWER1'])){
         return(TRUE);
       }
     }
@@ -309,12 +338,13 @@ class gosaSupportDaemon
       trigger_error("Requires an integer as parameter.");
       return;
     }
+    $this->reset_error();
   
-    $this->b_error = FALSE;
-    $this->s_error = "";
     $ret = array();
     $xml_msg = "<xml>
       <header>gosa_query_jobdb</header>
+      <target>GOSA</target>
+      <source>GOSA</source>
       <where>
       <clause>
       <phrase>
@@ -328,7 +358,9 @@ class gosaSupportDaemon
       $this->o_sock->write($xml_msg);
       $str = trim($this->o_sock->read());
       $entries = $this->xml_to_array($str); 
-      if(isset($entries['XML']['ANSWER1'])){
+      if( isset($entries['XML']['HEADER']) &&
+          $entries['XML']['HEADER']=="answer" &&
+          isset($entries['XML']['ANSWER1'])){
         $ret = $entries['XML']['ANSWER1'];
       }
     }
@@ -346,13 +378,15 @@ class gosaSupportDaemon
       trigger_error("Requires an array as parameter.");
       return;
     }
-    $this->b_error = FALSE;
-    $this->s_error = "";
+
+    $this->reset_error();
 
     $ret = array();
 
     $xml_msg = "<xml>
       <header>gosa_delete_jobdb_entry</header>
+      <target>GOSA</target>
+      <source>GOSA</source>
       <where>
       <clause>
       <connector>or</connector>";
@@ -365,8 +399,6 @@ class gosaSupportDaemon
     $xml_msg .= "</clause>
       </where>
       </xml>";
-    $this->b_error = FALSE;
-    $this->s_error = "";
 
     if($this->connect()){
       $this->o_sock->write($xml_msg);
@@ -387,11 +419,12 @@ class gosaSupportDaemon
    */
   public function remove_entry($id)
   {
-    $this->b_error = FALSE;
-    $this->s_error = "";
+    $this->reset_error();
 
     $xml_msg = "<xml>
       <header>gosa_delete_jobdb_entry</header>
+      <target>GOSA</target>
+      <source>GOSA</source>
       <where>
       <clause>
       <phrase>
@@ -469,8 +502,7 @@ class gosaSupportDaemon
    */
   public function update_entries($ids,$entry)
   {
-    $this->b_error = FALSE;
-    $this->s_error = "";
+    $this->reset_error();
     if(!is_array($ids)){
       trigger_error("Requires an array as first parameter.");
       return;
@@ -487,6 +519,8 @@ class gosaSupportDaemon
     }
     $xml_msg = "<xml>
       <header>gosa_update_status_jobdb_entry</header>
+      <target>GOSA</target>
+      <source>GOSA</source>
       <where>
       <clause>
       <connector>or</connector>";
@@ -519,7 +553,7 @@ class gosaSupportDaemon
    */
   public function number_of_queued_entries()
   {
-    $xml_msg ="<xml><header>gosa_count_jobdb</header></xml>";
+    $xml_msg ="<xml><header>gosa_count_jobdb</header><target>GOSA</target><source>GOSA</source></xml>";
     $this->connect();
     if($this->connect()){
       $this->o_sock->write($xml_msg);
@@ -533,13 +567,38 @@ class gosaSupportDaemon
   } 
 
 
+  public function send_data($header, $to, $data= array(), $answer_expected = FALSE)
+  {
+    $xml_message= "";
+
+    /* Prepare data */
+    foreach ($data as $key => $value){
+      $xml_message.= "<$key>$value</$key>";
+    }
+
+    /* Multiple targets? */
+    if (!is_array($to)){
+      $to_targets= array($to);
+    } else {
+      $to_targets= $to;
+    }
+
+    /* Build target strings */
+    $target ="";
+    foreach($to_targets as $to){
+      $target.= "<target>$to</target>";
+    }
+
+    return $this->_send("<xml><header>$header</header><source>GOSA</source>$target".$xml_message."</xml>",$answer_expected);
+  }
+
+
   /*! \brief  Returns an array containing all queued entries.
     @return Array All queued entries as an array.
    */
   public function _send($data, $answer_expected= FALSE)
   {
-    $this->b_error = FALSE;
-    $this->s_error = "";
+    $this->reset_error();
     $ret = array();
 
     if($this->connect()){
@@ -548,7 +607,10 @@ class gosaSupportDaemon
         $str = trim($this->o_sock->read());
         $entries = $this->xml_to_array($str);
         if(isset($entries['XML']) && is_array($entries['XML'])){
-          $ret = $entries; 
+          $ret = $entries;
+          if(isset($entries['XML']['ERROR_STRING'])) {
+            $this->set_error($entries['XML']['ERROR_STRING']);
+          }
         }
       }
     }
@@ -556,7 +618,7 @@ class gosaSupportDaemon
   }
 
 
-  static function send($header, $to, $data= array())
+  static function send($header, $to, $data= array(), $answer_expected = FALSE)
   {
     $xml_message= "";
 
@@ -568,10 +630,35 @@ class gosaSupportDaemon
       $xml_message.= "<$key>$value</$key>";
     }
 
-    return $d->_send("<xml><header>$header</header><target>$to</target>".$xml_message."</xml>");
+    /* Multiple targets? */
+    if (!is_array($to)){
+      $to_targets= array($to);
+    } else {
+      $to_targets= $to;
+    }
+
+    /* Build target strings */
+    $target ="";
+    foreach($to_targets as $to){
+      $target.= "<target>$to</target>";
+    }
+
+    return $d->_send("<xml><header>$header</header><source>GOSA</source>$target".$xml_message."</xml>",$answer_expected);
   }
 
 
+  static function ping($target)
+  {
+    if (tests::is_mac($target)){
+    /* Get communication object */
+       $d= new gosaSupportDaemon(TRUE,0.5);
+       $answer= $d->_send("<xml><header>gosa_ping</header><source>GOSA</source><target>$target</target></xml>", TRUE);
+       return (count($answer) ? TRUE:FALSE);
+    }
+
+    return (FALSE);
+  }
+
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: