Added a counter pref and a fix for the imapid
[squirrelmail.git] / functions / imap_general.php
index 09543e740060c0d6c190f6a1920cdf08d6e753bc..066fb4c2d80138bfc1eb815979893dd6fb47e0df 100755 (executable)
@@ -1,25 +1,34 @@
 <?php
-   /**
-    **  imap.php
-    **
-    **  This implements all functions that do general imap functions.
-    **
-    **  $Id$
-    **/
-
-   if (defined ('imap_general_php'))
-      return;
-   define ('imap_general_php', true);
 
-global $imap_general_debug;
-$imap_general_debug = false;
-
-   /******************************************************************************
-    **  Sets an unique session id in order to avoid simultanous sessions crash.
-    ******************************************************************************/
+   /**
+    *   imap.php
+    *
+    *   Copyright (c) 1999-2001 The Squirrelmail Development Team
+    *   Licensed under the GNU GPL. For full terms see the file COPYING.
+    *
+    *   This implements all functions that do general imap functions.
+    *
+    *   $Id$
+    */
+
+    /**
+    * Unique SessionId
+    *
+    * Sets an unique session id in order to avoid simultanous sessions crash.
+    *
+    * @return  string  a 4 chars unique string
+    */
+    function sqimap_session_id() {
+
+        global $data_dir, $username;
+
+        $IMAPSessionID = substr(session_id(), -4);
+        if( $IMAPSessionID == '' ) {
+            $IMAPSessionID = str_pad( dechex( getPref( $data_dir, $username, 'counter', 0 ) ),
+                                      4, '0', STR_PAD_LEFT);
+        }
 
-   function sqimap_session_id() {
-      return( substr( session_id(), -4 ) );
+        return( $IMAPSessionID );
    }
 
 
@@ -32,11 +41,10 @@ $imap_general_debug = false;
    function sqimap_read_data_list ($imap_stream, $pre, $handle_errors,
                                    &$response, &$message) {
       global $color, $squirrelmail_language;
-global $imap_general_debug;
 
       $read = '';
       $resultlist = array();
-      
+
       $more_msgs = true;
       while ($more_msgs) {
          $data = array();
@@ -49,26 +57,16 @@ global $imap_general_debug;
             $size = $regs[1];
          } else if (ereg("^\\* [0-9]+ FETCH", $read, $regs)) {
             // Sizeless response, probably single-line
-// For debugging purposes
-if ($imap_general_debug) {
-    echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
-    flush();
-}
-            $size = 0;
+            $size = -1;
             $data[] = $read;
             $read = fgets($imap_stream, 9096);
          } else {
-            $size = 0;
+            $size = -1;
          }
          while (1) {
             while (strpos($read, "\n") === false) {
                $read .= fgets($imap_stream, 9096);
             }
-// For debugging purposes
-if ($imap_general_debug) {
-    echo "<small><tt><font color=\"#CC0000\">$read</font></tt></small><br>\n";
-    flush();
-}
             // If we know the size, no need to look at the end parameters
             if ($size > 0) {
                if ($total_size == $size) {
@@ -91,7 +89,7 @@ if ($imap_general_debug) {
                $total_size += strlen($read);
             } else {
                if (ereg("^$pre (OK|BAD|NO)(.*)", $read, $regs) ||
-                   ereg("^\\* [0-9]+ FETCH.*", $read, $regs)) {
+                   (($size == -1) && ereg("^\\* [0-9]+ FETCH.*", $read, $regs))) {
                   break;
                } else {
                   $data[] = $read;
@@ -109,10 +107,7 @@ if ($imap_general_debug) {
       $response = $regs[1];
       $message = trim($regs[2]);
       
-if ($imap_general_debug) echo '--<br>';
-
-      if ($handle_errors == false)
-          return $resultlist;
+      if ($handle_errors == false) { return $resultlist; }
      
       if ($response == 'NO') {
          // ignore this error from m$ exchange, it is not fatal (aka bug)
@@ -147,12 +142,13 @@ if ($imap_general_debug) echo '--<br>';
     **  will be displayed.  This function returns the imap connection handle.
     ******************************************************************************/
    function sqimap_login ($username, $password, $imap_server_address, $imap_port, $hide) {
+      
       global $color, $squirrelmail_language, $HTTP_ACCEPT_LANGUAGE, $onetimepad;
 
-      $imap_stream = fsockopen ($imap_server_address, $imap_port,
-         $error_number, $error_string, 15);
+      $imap_stream = fsockopen ( $imap_server_address, $imap_port,
+                                 $error_number, $error_string, 15);
       $server_info = fgets ($imap_stream, 1024);
-
+        
       // Decrypt the password
       $password = OneTimePadDecrypt($password, $onetimepad);
 
@@ -253,7 +249,6 @@ if ($imap_general_debug) echo '--<br>';
 
    function sqimap_capability($imap_stream, $capability) {
         global $sqimap_capabilities;
-global $imap_general_debug;
 
         if (!is_array($sqimap_capabilities)) {
             fputs ($imap_stream, sqimap_session_id() . " CAPABILITY\r\n");
@@ -277,7 +272,7 @@ global $imap_general_debug;
     **  Returns the delimeter between mailboxes:  INBOX/Test, or INBOX.Test... 
     ******************************************************************************/
    function sqimap_get_delimiter ($imap_stream = false) {
-global $imap_general_debug;
+
       global $sqimap_delimiter;
       global $optional_delimiter;