Changeset 1478 in subversion for trunk/roundcubemail/program/lib/imap.inc


Ignore:
Timestamp:
Jun 5, 2008 1:26:52 PM (5 years ago)
Author:
alec
Message:
  • added iil_PutLine() wrapper for fputs()
  • code cleanup and identation fixes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/program/lib/imap.inc

    r1477 r1478  
    6161                - fixed iil_C_FetchStructureString() to handle many literal strings in response 
    6262                - removed hardcoded data size in iil_ReadLine()  
     63                - added iil_PutLine() wrapper for fputs() 
     64                - code cleanup and identation fixes 
    6365 
    6466********************************************************/ 
     
    160162} 
    161163 
    162  
    163164function iil_xor($string, $string2) { 
    164     $result = ''; 
    165     $size = strlen($string); 
    166     for ($i=0; $i<$size; $i++) { 
    167         $result .= chr(ord($string[$i]) ^ ord($string2[$i])); 
    168     } 
    169     return $result; 
     165        $result = ''; 
     166        $size = strlen($string); 
     167        for ($i=0; $i<$size; $i++) { 
     168                $result .= chr(ord($string[$i]) ^ ord($string2[$i])); 
     169        } 
     170        return $result; 
     171} 
     172 
     173function iil_PutLine($fp, $string, $endln=true) { 
     174//      console('C: '. $string); 
     175        return fputs($fp, $string . ($endln ? "\r\n" : '')); 
    170176} 
    171177 
    172178function iil_ReadLine($fp, $size) { 
    173     $line = ''; 
    174     if (!$fp) { 
    175         return $line; 
    176     } 
    177      
    178     if (!$size) { 
    179         $size = 1024; 
    180     } 
    181      
    182     do { 
    183         $buffer = fgets($fp, $size); 
    184         if ($buffer === false) { 
    185             break; 
    186         } 
    187         $line .= $buffer; 
    188     } while ($buffer[strlen($buffer)-1] != "\n"); 
    189     return $line; 
     179        $line = ''; 
     180 
     181        if (!$fp) { 
     182                return $line; 
     183        } 
     184     
     185        if (!$size) { 
     186                $size = 1024; 
     187        } 
     188     
     189        do { 
     190                $buffer = fgets($fp, $size); 
     191                if ($buffer === false) { 
     192                        break; 
     193                } 
     194//              console('S: '. chop($buffer)); 
     195                $line .= $buffer; 
     196        } while ($buffer[strlen($buffer)-1] != "\n"); 
     197         
     198        return $line; 
    190199} 
    191200 
     
    198207                $bytes = $a[2][0]; 
    199208                while (strlen($out) < $bytes) { 
    200                     $line = iil_ReadBytes($fp, $bytes);  
    201                     $out .= $line; 
     209                        $line = iil_ReadBytes($fp, $bytes);  
     210                        $out .= $line; 
    202211                } 
    203212                $line = $a[1][0] . "\"$out\""; 
     213//              console('[...] '. $out); 
    204214        } 
    205215        return $line; 
     
    207217 
    208218function iil_ReadBytes($fp, $bytes) { 
    209     $data = ''; 
    210     $len  = 0; 
    211     do { 
    212         $data .= fread($fp, $bytes-$len); 
    213         if ($len == strlen($data)) { 
    214             break; //nothing was read -> exit to avoid apache lockups 
    215         } 
    216         $len = strlen($data); 
    217     } while ($len < $bytes); 
    218     return $data; 
     219        $data = ''; 
     220        $len  = 0; 
     221        do { 
     222                $data .= fread($fp, $bytes-$len); 
     223                if ($len == strlen($data)) { 
     224                        break; //nothing was read -> exit to avoid apache lockups 
     225                } 
     226                $len = strlen($data); 
     227        } while ($len < $bytes); 
     228         
     229        return $data; 
    219230} 
    220231 
     
    231242        if (count($a) > 2) { 
    232243                if (strcasecmp($a[1], 'OK') == 0) { 
    233                     return 0; 
     244                        return 0; 
    234245                } else if (strcasecmp($a[1], 'NO') == 0) { 
    235                     return -1; 
     246                        return -1; 
    236247                } else if (strcasecmp($a[1], 'BAD') == 0) { 
    237                     return -2; 
    238         } 
    239         } 
    240     return -3; 
     248                        return -2; 
     249                } 
     250        } 
     251        return -3; 
    241252} 
    242253 
     
    245256        $len = strlen($match); 
    246257        if ($len == 0) { 
    247             return false; 
    248     } 
     258                return false; 
     259        } 
    249260        if (strncmp($string, $match, $len) == 0) { 
    250             return true; 
    251     } 
     261                return true; 
     262        } 
    252263        return false; 
    253264} 
     
    256267        $len = strlen($match); 
    257268        if ($len == 0) { 
    258             return false; 
    259     } 
     269                return false; 
     270        } 
    260271        if (strncasecmp($string, $match, $len) == 0) { 
    261             return true; 
    262     } 
     272                return true; 
     273        } 
    263274        return false; 
    264275} 
    265  
    266276 
    267277function iil_Escape($string) 
    268278{ 
    269     return strtr($string, array('"'=>'\\"', '\\' => '\\\\'));  
     279        return strtr($string, array('"'=>'\\"', '\\' => '\\\\'));  
    270280} 
    271281 
     
    280290        $opad .= chr(0x5C); 
    281291    } 
     292 
    282293    // pad $pass so it's 64 bytes 
    283294    $padLen = 64 - strlen($pass); 
     
    295306     
    296307    // send result, get reply 
    297     fputs($conn->fp, $reply . "\r\n"); 
     308    iil_PutLine($conn->fp, $reply); 
    298309    $line = iil_ReadLine($conn->fp, 1024); 
    299310     
     
    312323function iil_C_Login(&$conn, $user, $password) { 
    313324 
    314     fputs($conn->fp, 'a001 LOGIN "'.iil_Escape($user).'" "'.iil_Escape($password)."\"\r\n"); 
     325    iil_PutLine($conn->fp, 'a001 LOGIN "'.iil_Escape($user).'" "'.iil_Escape($password).'"'); 
    315326 
    316327    do { 
     
    340351        if (!$l) { 
    341352            $str = str_replace('NIL', '()', $str); 
    342     } 
     353        } 
    343354        if (!$len) { 
    344355            $len = strlen($str); 
    345     } 
     356        } 
    346357        $data      = array(); 
    347358        $in_quotes = false; 
     
    354365                        $elem++; 
    355366                } else if ($c == ')' && !$in_quotes) { 
    356                     return $data; 
    357         } else if ($c == '\\') { 
     367                        return $data; 
     368                } else if ($c == '\\') { 
    358369                        $i++; 
    359370                        if ($in_quotes) { 
    360                             $data[$elem] .= $c.$str[$i]; 
    361             } 
     371                                $data[$elem] .= $c.$str[$i]; 
     372                        } 
    362373                } else if ($c == '"') { 
    363374                        $in_quotes = !$in_quotes; 
    364375                        if (!$in_quotes) { 
    365                             $elem++; 
    366             } 
     376                                $elem++; 
     377                        } 
    367378                } else if ($in_quotes) { 
    368379                        $data[$elem].=$c; 
     
    383394        } 
    384395     
    385         fputs($conn->fp, "ns1 NAMESPACE\r\n"); 
     396        iil_PutLine($conn->fp, "ns1 NAMESPACE"); 
    386397        do { 
    387398                $line = iil_ReadLine($conn->fp, 1024); 
     
    411422         
    412423        return true; 
    413  
    414424} 
    415425 
    416426function iil_Connect($host, $user, $password) {  
    417     global $iil_error, $iil_errornum; 
     427        global $iil_error, $iil_errornum; 
    418428        global $ICL_SSL, $ICL_PORT; 
    419429        global $IMAP_NO_CACHE; 
     
    432442                $auth_array = func_get_arg(3); 
    433443                if (is_array($auth_array)) { 
    434                     $auth_method = $auth_array['imap']; 
    435         } 
     444                        $auth_method = $auth_array['imap']; 
     445                } 
    436446                if (empty($auth_method)) { 
    437             $auth_method = "plain"; 
    438         } 
     447                        $auth_method = "plain"; 
     448                } 
    439449        } 
    440450        $message = "INITIAL: $auth_method\n"; 
     
    454464         
    455465        if ($my_prefs['sort_field'] == 'INTERNALDATE') { 
    456             $IMAP_USE_INTERNAL_DATE = true; 
    457     } else if ($my_prefs['sort_field'] == 'DATE') { 
    458         $IMAP_USE_INTERNAL_DATE = false; 
    459     } 
     466                $IMAP_USE_INTERNAL_DATE = true; 
     467        } else if ($my_prefs['sort_field'] == 'DATE') { 
     468                $IMAP_USE_INTERNAL_DATE = false; 
     469        } 
    460470        //echo '<!-- conn sort_field: '.$my_prefs['sort_field'].' //-->'; 
    461471         
    462472        //check input 
    463473        if (empty($host)) { 
    464             $iil_error .= "Invalid host\n"; 
    465     } 
     474                $iil_error .= "Invalid host\n"; 
     475        } 
    466476        if (empty($user)) { 
    467             $iil_error .= "Invalid user\n"; 
    468     } 
     477                $iil_error .= "Invalid user\n"; 
     478        } 
    469479        if (empty($password)) { 
    470             $iil_error .= "Invalid password\n"; 
    471     } 
     480                $iil_error .= "Invalid password\n"; 
     481        } 
    472482        if (!empty($iil_error)) { 
    473             return false; 
    474     } 
     483                return false; 
     484        } 
    475485        if (!$ICL_PORT) { 
    476             $ICL_PORT = 143; 
     486                $ICL_PORT = 143; 
    477487        } 
    478488     
     
    485495        $conn->fp = fsockopen($host, $ICL_PORT, $errno, $errstr, 10); 
    486496        if (!$conn->fp) { 
    487         $iil_error    = "Could not connect to $host at port $ICL_PORT: $errstr"; 
    488         $iil_errornum = -1; 
     497                $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr"; 
     498                $iil_errornum = -1; 
    489499                return false; 
    490500        } 
     
    498508//              $conn->capability = explode(' ', $matches[1]); 
    499509//      } else { 
    500                 fputs($conn->fp, "cp01 CAPABILITY\r\n"); 
     510                iil_PutLine($conn->fp, "cp01 CAPABILITY"); 
    501511                do { 
    502                         $line = trim(iil_ReadLine($conn->fp, 100)); 
     512                        $line = trim(iil_ReadLine($conn->fp, 1024)); 
    503513 
    504514                        $conn->message .= "$line\n"; 
     
    533543 
    534544                //do CRAM-MD5 authentication 
    535                 fputs($conn->fp, "a000 AUTHENTICATE CRAM-MD5\r\n"); 
     545                iil_PutLine($conn->fp, "a000 AUTHENTICATE CRAM-MD5"); 
    536546                $line = trim(iil_ReadLine($conn->fp, 1024)); 
    537547         
     
    547557                } else { 
    548558                        $conn->message .='No challenge ('.htmlspecialchars($line)."), try plain\n"; 
    549                          
    550             $auth = 'plain';             
     559                        $auth = 'plain';             
    551560                } 
    552561        } 
     
    572581function iil_Close(&$conn) { 
    573582        iil_C_WriteCache($conn); 
    574         if (fputs($conn->fp, "I LOGOUT\r\n")) { 
     583        if (iil_PutLine($conn->fp, "I LOGOUT")) { 
    575584                fgets($conn->fp, 1024); 
    576585                fclose($conn->fp); 
     
    581590function iil_ClearCache($user, $host) { 
    582591} 
    583  
    584592 
    585593function iil_C_WriteCache(&$conn) { 
     
    621629         
    622630        if (!$conn->do_cache) { 
    623             return;     //caching disabled 
    624         } 
    625     if (!is_array($conn->cache[$folder])) { 
    626         return; //cache not initialized|empty 
    627         } 
    628     if (count($conn->cache[$folder]) == 0) { 
    629         return; //cache not initialized|empty 
    630     } 
     631                return; //caching disabled 
     632        } 
     633        if (!is_array($conn->cache[$folder])) { 
     634                return; //cache not initialized|empty 
     635        } 
     636        if (count($conn->cache[$folder]) == 0) { 
     637                return; //cache not initialized|empty 
     638        } 
    631639     
    632640        $uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, 'UID'); 
     
    665673                if (($key % 2) == 1) { 
    666674                        $quotes[$key] = str_replace($delimiter, "_!@!_", $quotes[$key]); 
    667         } 
    668     } 
     675                } 
     676        } 
    669677        $string=implode('"', $quotes); 
    670678         
     
    679687function iil_CheckForRecent($host, $user, $password, $mailbox) { 
    680688        if (empty($mailbox)) { 
    681             $mailbox = 'INBOX'; 
     689                $mailbox = 'INBOX'; 
    682690        } 
    683691     
     
    685693        $fp   = $conn->fp; 
    686694        if ($fp) { 
    687                 fputs($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\"\r\n"); 
     695                iil_PutLine($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\""); 
    688696                do { 
    689697                        $line=chop(iil_ReadLine($fp, 300)); 
     
    694702                } while (!iil_StartsWith($a[0], 'a002')); 
    695703 
    696                 fputs($fp, "a003 LOGOUT\r\n"); 
     704                iil_PutLine($fp, "a003 LOGOUT"); 
    697705                fclose($fp); 
    698706        } else { 
     
    704712 
    705713function iil_C_Select(&$conn, $mailbox) { 
    706         $fp = $conn->fp; 
    707          
     714 
    708715        if (empty($mailbox)) { 
    709             return false; 
    710         } 
    711     if (strcmp($conn->selected, $mailbox) == 0) { 
    712         return true; 
     716                return false; 
     717        } 
     718        if (strcmp($conn->selected, $mailbox) == 0) { 
     719                return true; 
    713720        } 
    714721     
    715722        iil_C_LoadCache($conn, $mailbox); 
    716723         
    717         if (fputs($fp, "sel1 SELECT \"".iil_Escape($mailbox)."\"\r\n")) { 
     724        if (iil_PutLine($conn->fp, "sel1 SELECT \"".iil_Escape($mailbox).'"')) { 
    718725                do { 
    719                         $line=chop(iil_ReadLine($fp, 300)); 
    720                         $a=explode(' ', $line); 
     726                        $line = chop(iil_ReadLine($conn->fp, 300)); 
     727                        $a = explode(' ', $line); 
    721728                        if (count($a) == 3) { 
    722729                                if (strcasecmp($a[2], 'EXISTS') == 0) { 
    723                                     $conn->exists = (int) $a[1]; 
     730                                        $conn->exists = (int) $a[1]; 
    724731                                } 
    725                 if (strcasecmp($a[2], 'RECENT') == 0) { 
    726                     $conn->recent = (int) $a[1]; 
    727                 } 
     732                                if (strcasecmp($a[2], 'RECENT') == 0) { 
     733                                        $conn->recent = (int) $a[1]; 
     734                                } 
    728735                        } 
    729736                } while (!iil_StartsWith($line, 'sel1')); 
    730737 
    731                 $a=explode(' ', $line); 
     738                $a = explode(' ', $line); 
    732739 
    733740                if (strcasecmp($a[1], 'OK') == 0) { 
     
    736743                } 
    737744        } 
    738     return false; 
     745        return false; 
    739746} 
    740747 
    741748function iil_C_CheckForRecent(&$conn, $mailbox) { 
    742749        if (empty($mailbox)) { 
    743             $mailbox = 'INBOX'; 
     750                $mailbox = 'INBOX'; 
    744751        } 
    745752     
    746753        iil_C_Select($conn, $mailbox); 
    747754        if ($conn->selected == $mailbox) { 
    748             return $conn->recent; 
    749         } 
    750     return false; 
     755                return $conn->recent; 
     756        } 
     757        return false; 
    751758} 
    752759 
     
    755762                $conn->selected= ''; 
    756763        } 
     764         
    757765        iil_C_Select($conn, $mailbox); 
    758766        if ($conn->selected == $mailbox) { 
     
    769777                return $res; 
    770778        } 
    771     return $string; 
     779        return $string; 
    772780} 
    773781 
    774782function iil_StrToTime($str) { 
    775783        $IMAP_MONTHS    = $GLOBALS['IMAP_MONTHS']; 
    776     $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR']; 
     784        $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR']; 
    777785                 
    778786        if ($str) { 
    779         $time1 = strtotime($str); 
    780     } 
     787            $time1 = strtotime($str); 
     788        } 
    781789        if ($time1 && $time1 != -1) { 
    782790            return $time1-$IMAP_SERVER_TZ; 
     
    792800        if (!is_numeric(substr($str, 0, $pos))) { 
    793801            $str = substr($str, $pos+1); 
    794     } 
     802        } 
    795803        //explode, take good parts 
    796804        $a = explode(' ', $str); 
     
    823831        if ($field == 'INTERNALDATE') { 
    824832            $field = 'ARRIVAL'; 
    825     } 
     833        } 
     834         
    826835        $fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1, 
    827836        'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1); 
     
    835844        if (!empty($add)) { 
    836845            $add = " $add"; 
    837     } 
     846        } 
    838847 
    839848        $fp       = $conn->fp; 
    840849        $command  = 's ' . $is_uid . 'SORT (' . $field . ') '; 
    841         $command .= $encoding . ' ALL' . "$add\r\n"; 
     850        $command .= $encoding . ' ALL' . $add; 
    842851        $line     = $data = ''; 
    843852         
    844         if (!fputs($fp, $command)) { 
     853        if (!iil_PutLine($fp, $command)) { 
    845854            return false; 
    846855        } 
     
    848857                $line = chop(iil_ReadLine($fp, 1024)); 
    849858                if (iil_StartsWith($line, '* SORT')) { 
    850                     $data .= ($data?' ':'') . substr($line, 7); 
    851         } 
     859                        $data .= ($data?' ':'') . substr($line, 7); 
     860                } 
    852861        } while ($line[0]!='s'); 
    853862         
     
    871880        if (empty($index_field)) { 
    872881            $index_field = 'DATE'; 
    873     } 
     882        } 
    874883        $index_field = strtoupper($index_field); 
    875884         
    876885        list($from_idx, $to_idx) = explode(':', $message_set); 
    877886        if (empty($message_set) || (isset($to_idx) 
    878         && (int)$from_idx > (int)$to_idx)) { 
     887            && (int)$from_idx > (int)$to_idx)) { 
    879888                return false; 
    880     } 
     889        } 
    881890         
    882891        //$fields_a['DATE'] = ($IMAP_USE_INTERNAL_DATE?6:1); 
     
    902911        if (!iil_C_Select($conn, $mailbox)) { 
    903912            return false; 
    904     } 
     913        } 
    905914     
    906915        /* FETCH date,from,subject headers */ 
    907916        if ($mode == 1) { 
    908917                $key     = 'fhi' . ($c++); 
    909                 $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])\r\n"; 
    910                 if (!fputs($fp, $request)) { 
     918                $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])"; 
     919                if (!iil_PutLine($fp, $request)) { 
    911920                    return false; 
    912         } 
     921                } 
    913922                do { 
    914923                         
     
    916925                        $a=explode(' ', $line); 
    917926                        if (($line[0] == '*') && ($a[2] == 'FETCH') 
    918                 && ($line[strlen($line)-1] != ')')) { 
     927                            && ($line[strlen($line)-1] != ')')) { 
    919928                                $id=$a[1]; 
    920929 
     
    935944                                                                if ($normalize) { 
    936945                                                                    $result[$id] = strtoupper($result[$id]); 
    937                                 } 
     946                                                                } 
    938947                                                        } 
    939948                                                        $str=$line; 
     
    955964                                         
    956965                                        if ($received>$bytes) { 
    957                         break; 
     966                                                break; 
    958967                                        } else if (!$line) { 
    959                         continue; 
     968                                                continue; 
    960969                                        } 
    961970 
     
    966975                                        } else if ($index_field != 'DATE') { 
    967976                                                $result[$id]=strtoupper(str_replace('"', '', $string)); 
    968                     } 
     977                                        } 
    969978                                } while ($line[0] != ')'); 
    970979                        } else { 
     
    977986 
    978987                $key     = 'fhi' . ($c++); 
    979                 $request = $key . " FETCH $message_set (INTERNALDATE)\r\n"; 
    980                 if (!fputs($fp, $request)) { 
     988                $request = $key . " FETCH $message_set (INTERNALDATE)"; 
     989                if (!iil_PutLine($fp, $request)) { 
    981990                    return false; 
    982         } 
     991                } 
    983992                do { 
    984993                        $line=chop(iil_ReadLine($fp, 200)); 
     
    10111020                } else { 
    10121021                    $field_name = $index_field; 
    1013         } 
     1022                } 
    10141023         
    10151024                /*                      FETCH uid, size, flags          */ 
    10161025                $key     = 'fhi' .($c++); 
    1017                 $request = $key . " FETCH $message_set ($field_name)\r\n"; 
    1018  
    1019                 if (!fputs($fp, $request)) { 
     1026                $request = $key . " FETCH $message_set ($field_name)"; 
     1027 
     1028                if (!iil_PutLine($fp, $request)) { 
    10201029                    return false; 
    1021         } 
     1030                } 
    10221031                do { 
    10231032                        $line=chop(iil_ReadLine($fp, 200)); 
     
    10331042                                    continue; //if we already got the data, skip forward 
    10341043                                } 
    1035                 if ($a[3]!=$field_name) { 
    1036                     continue;  //make sure it's returning what we requested 
    1037                             } 
     1044                                if ($a[3]!=$field_name) { 
     1045                                        continue;  //make sure it's returning what we requested 
     1046                                } 
    10381047                 
    10391048                                /*  Caution, bad assumptions, next several lines */ 
     
    10571066                if (count($result) < $should_have) { 
    10581067                        for ($i=$start_mid; $i<=$end_mid; $i++) { 
    1059                             if (!isset($result[$i])) { 
    1060                                 $result[$i] = ''; 
    1061                 } 
    1062             } 
     1068                                if (!isset($result[$i])) { 
     1069                                        $result[$i] = ''; 
     1070                                } 
     1071                        } 
    10631072                } 
    10641073        } 
     
    10951104                            $result[] = $start . ':' . $prev;   //push sequence as start_id:end_id 
    10961105                        } 
    1097             $start = $id;                                                       //start of new sequence 
     1106                        $start = $id;                   //start of new sequence 
    10981107                } 
    10991108                $prev = $id; 
    11001109        } 
     1110 
    11011111        //handle the last sequence/id 
    11021112        if ($start==$prev) { 
    11031113            $result[] = $prev; 
    1104     } else { 
    1105         $result[] = $start.':'.$prev; 
    1106     } 
     1114        } else { 
     1115            $result[] = $start.':'.$prev; 
     1116        } 
    11071117     
    11081118        //return as comma separated string 
     
    11131123        if (!is_array($uids) || count($uids) == 0) { 
    11141124            return array(); 
    1115     } 
     1125        } 
    11161126        return iil_C_Search($conn, $mailbox, 'UID ' . implode(',', $uids)); 
    11171127} 
     
    11221132            return $result[0]; 
    11231133        } 
    1124     return false; 
     1134        return false; 
    11251135} 
    11261136 
     
    11311141        if ($num == 0) { 
    11321142            return array(); 
    1133     } 
     1143        } 
    11341144        $message_set = '1' . ($num>1?':' . $num:''); 
    11351145         
     
    11631173                if (!$temp || !is_array($temp) || $temp[0] != $num) { 
    11641174                    $cache_good = -3; 
    1165         } 
     1175                } 
    11661176        } 
    11671177 
     
    11981208        && (int)$from_idx > (int)$to_idx)) { 
    11991209                return false; 
    1200     } 
     1210        } 
    12011211 
    12021212        $result = array(); 
     
    12151225                                } else { 
    12161226                                    $needed_set .= ($needed_set ? ',' : '') . $id; 
    1217                 } 
     1227                                } 
    12181228                        } 
    12191229                        if ($needed_set) { 
     
    12211231                        } else { 
    12221232                            $message_set = ''; 
    1223             } 
     1233                        } 
    12241234                } 
    12251235        } 
     
    12351245                $fp         = $conn->fp; 
    12361246                $request    = $key . " FETCH $message_set "; 
    1237         $request   .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n"; 
     1247                $request   .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])"; 
    12381248                $mid_to_id  = array(); 
    1239                 if (!fputs($fp, $request)) { 
     1249                if (!iil_PutLine($fp, $request)) { 
    12401250                    return false; 
    1241         } 
     1251                } 
    12421252                do { 
    12431253                        $line = chop(iil_ReadLine($fp, 1024)); 
    12441254                        if ($debug) { 
    12451255                            echo $line . "\n"; 
    1246             } 
     1256                        } 
    12471257                        if (ereg('\{[0-9]+\}$', $line)) { 
    12481258                                $a       = explode(' ', $line); 
     
    12541264                                        $line = chop(iil_ReadLine($fp, 1024), "\r\n"); 
    12551265                                        if (iil_StartsWithI($line, 'Message-ID:') 
    1256                         || (iil_StartsWithI($line,'In-Reply-To:')) 
    1257                         || (iil_StartsWithI($line,'SUBJECT:'))) { 
     1266                                                || (iil_StartsWithI($line,'In-Reply-To:')) 
     1267                                                || (iil_StartsWithI($line,'SUBJECT:'))) { 
    12581268 
    12591269                                                $pos        = strpos($line, ':'); 
     
    12861296                if (count($result)!=count($cached)) { 
    12871297                        cache_write($conn->user, $conn->host, $mailbox . '.thhd', $result); 
    1288         } 
     1298                } 
    12891299        } 
    12901300         
     
    13001310        list($from_idx, $to_idx) = explode(':', $message_set); 
    13011311        if (empty($message_set) || (isset($to_idx) 
    1302         && (int)$from_idx > (int)$to_idx)) { 
     1312                && (int)$from_idx > (int)$to_idx)) { 
    13031313                return false; 
    13041314        } 
     
    13181328        if (!iil_C_Select($conn, $mailbox)) { 
    13191329            return false; 
    1320     } 
     1330        } 
    13211331     
    13221332        /* FETCH date,from,subject headers */ 
     
    13391349                $id  = $header->id; 
    13401350                $new = array('id' => $id, 'MESSAGE-ID' => $header->mid,  
    1341             'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj); 
     1351                        'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj); 
    13421352 
    13431353                /* add to message-id -> mid lookup table */ 
     
    13551365                    $has_re = true; 
    13561366                } 
    1357         if ($has_re||$new['IN-REPLY-TO']) { 
    1358             $sbj_pre = 'RE:'; 
     1367                if ($has_re||$new['IN-REPLY-TO']) { 
     1368                    $sbj_pre = 'RE:'; 
    13591369                } 
    13601370         
     
    13651375                    $sbj = $new['SUBJECT']; 
    13661376                } 
    1367         $new['SUBJECT'] = $sbj_pre.$sbj; 
     1377                $new['SUBJECT'] = $sbj_pre.$sbj; 
    13681378                 
    13691379                 
     
    13721382                    echo $id . ' ' . $new['SUBJECT'] . "\t" . $new['MESSAGE-ID'] . "\n"; 
    13731383                } 
    1374         $root_id = $roots[$sbj]; 
     1384                $root_id = $roots[$sbj]; 
    13751385                 
    13761386                if ($root_id && ($has_re || !$root_in_root[$root_id])) { 
     
    13781388                            echo "\tfound root: $root_id\n"; 
    13791389                        } 
    1380             $sub_mids[$new['MESSAGE-ID']] = $root_id; 
     1390                        $sub_mids[$new['MESSAGE-ID']] = $root_id; 
    13811391                        $result[$root_id][]           = $id; 
    1382                 }else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) { 
     1392                } else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) { 
    13831393                        /* try to use In-Reply-To header to find root  
    13841394                                unless subject contains 'Re:' */ 
     
    13951405                                            echo "\tfound parent: ".$new['SUBJECT']."\n"; 
    13961406                                        } 
    1397                     $result[$temp][]              = $id; 
     1407                                        $result[$temp][]              = $id; 
    13981408                                        $sub_mids[$new['MESSAGE-ID']] = $temp; 
    13991409                                        $sbj                          = ''; 
     
    14091419                                    echo "\t added to root\n"; 
    14101420                                } 
    1411                 $roots[$sbj]                  = $id; 
     1421                                $roots[$sbj]                  = $id; 
    14121422                                $root_in_root[$id]            = !$has_re; 
    14131423                                $sub_mids[$new['MESSAGE-ID']] = $id; 
     
    14161426                        if ($debug) { 
    14171427                            echo $new['MESSAGE-ID'] . "\t" . $sbj . "\n"; 
    1418             } 
    1419                 } 
    1420                          
     1428                        } 
     1429                } 
    14211430        } 
    14221431         
     
    14291438                            continue; 
    14301439                        } 
    1431             $result[$root_id] = array_merge($result[$root_id],$result[$id]); 
     1440                        $result[$root_id] = array_merge($result[$root_id],$result[$id]); 
    14321441                        unset($result[$id]); 
    14331442                } 
     
    14411450            print_r($roots); 
    14421451        } 
    1443     //print_r($result); 
     1452 
    14441453        return $result; 
    14451454} 
    1446  
    14471455 
    14481456function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') { 
    14491457        if (!is_array($tree) || !is_array($index)) { 
    14501458            return false; 
    1451     } 
     1459        } 
    14521460     
    14531461        //create an id to position lookup table 
     
    14861494        } 
    14871495         
    1488          
    14891496        //sort by key, this basically sorts all threads 
    14901497        ksort($itree); 
     
    14961503        } 
    14971504         
    1498         //return 
    14991505        return $out; 
    15001506} 
     
    15641570        $request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC "; 
    15651571        $request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID "; 
    1566         $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])\r\n"; 
    1567  
    1568         if (!fputs($fp, $request)) { 
     1572        $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])"; 
     1573 
     1574        if (!iil_PutLine($fp, $request)) { 
    15691575                return false; 
    15701576        } 
     
    16971703        $command_key = 'fh' . ($c++); 
    16981704        $request     = $command_key . $prefix; 
    1699         $request    .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n"; 
    1700          
    1701         if (!fputs($fp, $request)) { 
     1705        $request    .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)"; 
     1706         
     1707        if (!iil_PutLine($fp, $request)) { 
    17021708            return false; 
    17031709        } 
    1704     do { 
     1710        do { 
    17051711                $line = chop(iil_ReadLine($fp, 200)); 
    17061712                //$a = explode(' ', $line); 
     
    17571763                                                        } else if (strcasecmp($val, "\$MDNSent") == 0) { 
    17581764                                                            $result[$id]->mdn_sent = true; 
    1759                             } 
     1765                                                        } 
    17601766                                                } 
    17611767                                                $result[$id]->flags = $flags_a; 
     
    18131819} 
    18141820 
    1815  
    18161821function iil_SortHeaders($a, $field, $flag) { 
    18171822        if (empty($field)) { 
    18181823            $field = 'uid'; 
    1819     } 
     1824        } 
    18201825        $field = strtolower($field); 
    18211826        if ($field == 'date' || $field == 'internaldate') { 
    18221827            $field = 'timestamp'; 
    1823     } 
     1828        } 
    18241829        if (empty($flag)) { 
    18251830            $flag = 'ASC'; 
    1826     } 
     1831        } 
    18271832     
    18281833        $flag     = strtoupper($flag); 
     
    18471852                                if ($data == false) { 
    18481853                                        $data = $val->timestamp; 
    1849                 } 
     1854                                } 
    18501855                        } else { 
    18511856                                $data = $val->$field; 
    18521857                                if (is_string($data)) { 
    18531858                                        $data=strtoupper(str_replace($stripArr, '', $data)); 
    1854                 } 
     1859                                } 
    18551860                        } 
    18561861                        $index[$key]=$data; 
     
    18601865                $i = 0; 
    18611866                if ($flag == 'ASC') { 
    1862                     asort($index); 
    1863         } else { 
    1864             arsort($index); 
     1867                        asort($index); 
     1868                } else { 
     1869                        arsort($index); 
    18651870                } 
    18661871         
     
    18781883 
    18791884function iil_C_Expunge(&$conn, $mailbox) { 
    1880         $fp = $conn->fp; 
     1885 
    18811886        if (iil_C_Select($conn, $mailbox)) { 
    18821887                $c = 0; 
    1883                 fputs($fp, "exp1 EXPUNGE\r\n"); 
     1888                iil_PutLine($conn->fp, "exp1 EXPUNGE"); 
    18841889                do { 
    1885                         $line=chop(iil_ReadLine($fp, 100)); 
     1890                        $line=chop(iil_ReadLine($conn->fp, 100)); 
    18861891                        if ($line[0] == '*') { 
    1887                 $c++; 
    1888             } 
     1892                                $c++; 
     1893                        } 
    18891894                } while (!iil_StartsWith($line, 'exp1')); 
    18901895                 
     
    19201925        if (iil_C_Select($conn, $mailbox)) { 
    19211926                $c = 0; 
    1922                 fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n"); 
     1927                iil_PutLine($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")"); 
    19231928                do { 
    19241929                        $line=chop(iil_ReadLine($fp, 100)); 
    19251930                        if ($line[0] == '*') { 
    19261931                            $c++; 
    1927             } 
     1932                        } 
    19281933                } while (!iil_StartsWith($line, 'flg')); 
    19291934 
     
    19591964} 
    19601965 
    1961  
    19621966function iil_C_Copy(&$conn, $messages, $from, $to) { 
    19631967        $fp = $conn->fp; 
     
    19651969        if (empty($from) || empty($to)) { 
    19661970            return -1; 
    1967     } 
     1971        } 
    19681972     
    19691973        if (iil_C_Select($conn, $from)) { 
    19701974                $c=0; 
    19711975                 
    1972                 fputs($fp, "cpy1 COPY $messages \"".iil_Escape($to)."\"\r\n"); 
     1976                iil_PutLine($fp, "cpy1 COPY $messages \"".iil_Escape($to)."\""); 
    19731977                $line=iil_ReadReply($fp); 
    19741978                return iil_ParseResult($line); 
     
    19801984function iil_FormatSearchDate($month, $day, $year) { 
    19811985        $month  = (int) $month; 
    1982     $months = $GLOBALS['IMAP_MONTHS']; 
     1986        $months = $GLOBALS['IMAP_MONTHS']; 
    19831987        return $day . '-' . $months[$month] . '-' . $year; 
    19841988} 
     
    19901994                if (empty($str)) { 
    19911995                    return false; 
    1992         } 
     1996                } 
    19931997                return count($index); 
    19941998        } 
    1995     return false; 
     1999        return false; 
    19962000} 
    19972001 
     
    20032007                        if ($count > 1) { 
    20042008                            return false; 
    2005             } 
     2009                        } 
    20062010                        return $id_a[0]; 
    20072011                } 
     
    20142018        if ($id == 0) { 
    20152019            return      -1; 
    2016     } 
    2017     $result = -1; 
     2020        } 
     2021        $result = -1; 
    20182022        if (iil_C_Select($conn, $folder)) { 
    20192023                $key = 'FUID'; 
    2020                 if (fputs($fp, "$key FETCH $id (UID)\r\n")) { 
     2024                if (iil_PutLine($fp, "$key FETCH $id (UID)")) { 
    20212025                        do { 
    20222026                                $line=chop(iil_ReadLine($fp, 1024)); 
     
    20352039                $c = 0; 
    20362040                 
    2037                 $query = 'srch1 SEARCH ' . chop($criteria) . "\r\n"; 
    2038                 fputs($fp, $query); 
     2041                $query = 'srch1 SEARCH ' . chop($criteria); 
     2042                iil_PutLine($fp, $query); 
    20392043                do { 
    20402044                        $line=trim(iil_ReadLine($fp, 10000)); 
     
    20502054                } 
    20512055                $conn->error = 'iil_C_Search: ' . $line . "\n"; 
    2052                 return false; 
    2053                  
     2056                return false;    
    20542057        } 
    20552058        $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n"; 
     
    20892092         
    20902093        //try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8) 
    2091         if (!fputs($fp, 'ghd LIST "" ""' . "\r\n")) { 
     2094        if (!iil_PutLine($fp, 'ghd LIST "" ""')) { 
    20922095            return false; 
    2093     } 
     2096        } 
    20942097     
    20952098        do { 
     
    21002103                        if ($a[0] == '*') { 
    21012104                            $delimiter = str_replace('"', '', $a[count($a)-2]); 
    2102             } 
     2105                        } 
    21032106                } 
    21042107        } while (!iil_StartsWith($line, 'ghd')); 
     
    21102113        //if that fails, try namespace extension 
    21112114        //try to fetch namespace data 
    2112         fputs($conn->fp, "ns1 NAMESPACE\r\n"); 
     2115        iil_PutLine($conn->fp, "ns1 NAMESPACE"); 
    21132116        do { 
    21142117                $line = iil_ReadLine($conn->fp, 1024); 
     
    21332136        if (!is_array($first_userspace)) { 
    21342137            return false; 
    2135     } 
     2138        } 
    21362139     
    21372140        //extract delimiter 
     
    21572160     
    21582161        // send command 
    2159         if (!fputs($fp, "lmb LIST \"".$ref."\" \"".iil_Escape($mailbox)."\"\r\n")) { 
     2162        if (!iil_PutLine($fp, "lmb LIST \"".$ref."\" \"".iil_Escape($mailbox)."\"")) { 
    21602163            return false; 
    21612164        } 
     
    21702173                if (($line[0] == '*') && ($a[1] == 'LIST')) { 
    21712174                        $line = rtrim($line); 
    2172             // split one line 
     2175                        // split one line 
    21732176                        $a = iil_ExplodeQuotedString(' ', $line); 
    2174             // last string is folder name 
     2177                        // last string is folder name 
    21752178                        $folder = trim($a[count($a)-1], '"'); 
    21762179             
    2177             if (empty($ignore) || (!empty($ignore) 
    2178                 && !eregi($ignore, $folder))) { 
    2179                 $folders[$i] = $folder; 
    2180             } 
     2180                        if (empty($ignore) || (!empty($ignore) 
     2181                                && !eregi($ignore, $folder))) { 
     2182                                $folders[$i] = $folder; 
     2183                        } 
    21812184             
    2182             // second from last is delimiter 
    2183             $delim = trim($a[count($a)-2], '"'); 
    2184             // is it a container? 
    2185             $i++; 
     2185                        // second from last is delimiter 
     2186                        $delim = trim($a[count($a)-2], '"'); 
     2187                        // is it a container? 
     2188                        $i++; 
    21862189                } 
    21872190        } while (!iil_StartsWith($line, 'lmb')); 
     
    21892192        if (is_array($folders)) { 
    21902193            if (!empty($ref)) { 
    2191             // if rootdir was specified, make sure it's the first element 
    2192             // some IMAP servers (i.e. Courier) won't return it 
    2193             if ($ref[strlen($ref)-1]==$delim) 
     2194                // if rootdir was specified, make sure it's the first element 
     2195                // some IMAP servers (i.e. Courier) won't return it 
     2196                if ($ref[strlen($ref)-1]==$delim) 
    21942197                    $ref = substr($ref, 0, strlen($ref)-1); 
    2195             if ($folders[0]!=$ref) 
     2198                if ($folders[0]!=$ref) 
    21962199                    array_unshift($folders, $ref); 
    21972200            } 
    21982201            return $folders; 
    2199         }else if (iil_ParseResult($line) == 0) { 
     2202        } else if (iil_ParseResult($line) == 0) { 
    22002203                return array('INBOX'); 
    22012204        } else { 
     
    22052208} 
    22062209 
    2207  
    22082210function iil_C_ListSubscribed(&$conn, $ref, $mailbox) { 
    22092211        global $IGNORE_FOLDERS; 
     
    22202222        $folders = array(); 
    22212223 
    2222     // send command 
    2223         if (!fputs($fp, 'lsb LSUB "' . $ref . '" "' . iil_Escape($mailbox).'"' . "\r\n")) { 
     2224        // send command 
     2225        if (!iil_PutLine($fp, 'lsb LSUB "' . $ref . '" "' . iil_Escape($mailbox).'"')) { 
    22242226                $conn->error = "Couldn't send LSUB command\n"; 
    22252227                return false; 
     
    22282230        $i = 0; 
    22292231         
    2230     // get folder list 
     2232        // get folder list 
    22312233        do { 
    22322234                $line = iil_ReadLine($fp, 500); 
     
    22372239                        $line = rtrim($line); 
    22382240             
    2239             // split one line 
     2241                        // split one line 
    22402242                        $a = iil_ExplodeQuotedString(' ', $line); 
    22412243             
    2242             // last string is folder name 
    2243             //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1])); 
    2244             $folder = trim($a[count($a)-1], '"'); 
     2244                        // last string is folder name 
     2245                        //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1])); 
     2246                        $folder = trim($a[count($a)-1], '"'); 
    22452247             
    22462248                        if ((!in_array($folder, $folders)) && (empty($ignore) 
    2247                 || (!empty($ignore) && !eregi($ignore, $folder)))) { 
     2249                                || (!empty($ignore) && !eregi($ignore, $folder)))) { 
    22482250                            $folders[$i] = $folder; 
    2249             } 
     2251                        } 
    22502252             
    2251             // second from last is delimiter 
    2252             $delim = trim($a[count($a)-2], '"'); 
     2253                        // second from last is delimiter 
     2254                        $delim = trim($a[count($a)-2], '"'); 
    22532255             
    2254             // is it a container? 
    2255             $i++; 
     2256                        // is it a container? 
     2257                        $i++; 
    22562258                } 
    22572259        } while (!iil_StartsWith($line, 'lsb')); 
    22582260 
    22592261        if (is_array($folders)) { 
    2260         if (!empty($ref)) { 
    2261             // if rootdir was specified, make sure it's the first element 
    2262             // some IMAP servers (i.e. Courier) won't return it 
    2263             if ($ref[strlen($ref)-1]==$delim) { 
    2264                 $ref = substr($ref, 0, strlen($ref)-1); 
    2265             } 
    2266             if ($folders[0]!=$ref) { 
    2267                 array_unshift($folders, $ref); 
    2268             } 
    2269         } 
    2270         return $folders; 
     2262            if (!empty($ref)) { 
     2263                // if rootdir was specified, make sure it's the first element 
     2264                // some IMAP servers (i.e. Courier) won't return it 
     2265                if ($ref[strlen($ref)-1]==$delim) { 
     2266                    $ref = substr($ref, 0, strlen($ref)-1); 
     2267                } 
     2268                if ($folders[0]!=$ref) { 
     2269                    array_unshift($folders, $ref); 
     2270                } 
     2271            } 
     2272            return $folders; 
    22712273        } 
    22722274        $conn->error = $line; 
     
    22742276} 
    22752277 
    2276  
    22772278function iil_C_Subscribe(&$conn, $folder) { 
    22782279        $fp = $conn->fp; 
    22792280 
    2280         $query = 'sub1 SUBSCRIBE "' . iil_Escape($folder). '"' . "\r\n"; 
    2281         fputs($fp, $query); 
     2281        $query = 'sub1 SUBSCRIBE "' . iil_Escape($folder). '"'; 
     2282        iil_PutLine($fp, $query); 
    22822283 
    22832284        $line = trim(iil_ReadLine($fp, 10000)); 
     
    22852286} 
    22862287 
    2287  
    22882288function iil_C_UnSubscribe(&$conn, $folder) { 
    22892289        $fp = $conn->fp; 
    22902290 
    2291         $query = 'usub1 UNSUBSCRIBE "' . iil_Escape($folder) . '"' . "\r\n"; 
    2292         fputs($fp, $query); 
     2291        $query = 'usub1 UNSUBSCRIBE "' . iil_Escape($folder) . '"'; 
     2292        iil_PutLine($fp, $query); 
    22932293     
    22942294        $line = trim(iil_ReadLine($fp, 10000)); 
    22952295        return iil_ParseResult($line); 
    22962296} 
    2297  
    22982297 
    22992298function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) { 
     
    23022301        if (($part == 0) || (empty($part))) { 
    23032302            $part = 'HEADER'; 
    2304     } else { 
    2305         $part .= '.MIME'; 
     2303        } else { 
     2304            $part .= '.MIME'; 
    23062305        } 
    23072306     
    23082307        if (iil_C_Select($conn, $mailbox)) { 
    23092308                $key     = 'fh' . ($c++); 
    2310                 $request = $key . " FETCH $id (BODY.PEEK[$part])\r\n"; 
    2311                 if (!fputs($fp, $request)) return false; 
     2309                $request = $key . " FETCH $id (BODY.PEEK[$part])"; 
     2310                if (!iil_PutLine($fp, $request)) return false; 
    23122311                do { 
    23132312                        $line = chop(iil_ReadLine($fp, 200)); 
     
    23272326} 
    23282327 
    2329  
    23302328function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) { 
    2331     /* modes: 
     2329        /* modes: 
    23322330        1: return string 
    23332331        2: print 
    23342332        3: base64 and print 
    2335     */ 
     2333        */ 
     2334         
    23362335        $fp     = $conn->fp; 
    23372336        $result = false; 
     
    23412340     
    23422341        if (iil_C_Select($conn, $mailbox)) { 
    2343         $reply_key = '* ' . $id; 
     2342                $reply_key = '* ' . $id; 
    23442343         
    2345         // format request 
     2344                // format request 
    23462345                $key     = 'ftch' . ($c++) . ' '; 
    2347                 $request = $key . "FETCH $id (BODY.PEEK[$part])\r\n"; 
    2348         // send request 
    2349                 if (!fputs($fp, $request)) { 
     2346                $request = $key . "FETCH $id (BODY.PEEK[$part])"; 
     2347                // send request 
     2348                if (!iil_PutLine($fp, $request)) { 
    23502349                    return false; 
    2351         } 
     2350                } 
    23522351         
    2353         // receive reply line 
    2354         do { 
    2355             $line = chop(iil_ReadLine($fp, 1000)); 
    2356             $a    = explode(' ', $line); 
    2357         } while ($a[2] != 'FETCH'); 
    2358         $len = strlen($line); 
    2359         if ($line[$len-1] == ')') { 
    2360             //one line response, get everything between first and last quotes 
    2361             if (substr($line, -4, 3) == 'NIL') { 
    2362                 // NIL response 
    2363                 $result = ''; 
    2364             } else { 
    2365                 $from = strpos($line, '"') + 1; 
    2366                 $to   = strrpos($line, '"'); 
    2367                 $len  = $to - $from; 
    2368                 $result = substr($line, $from, $len); 
    2369             } 
     2352                // receive reply line 
     2353                do { 
     2354                        $line = chop(iil_ReadLine($fp, 1000)); 
     2355                        $a    = explode(' ', $line); 
     2356                } while ($a[2] != 'FETCH'); 
     2357                $len = strlen($line); 
     2358     
     2359                if ($line[$len-1] == ')') { 
     2360                        // one line response, get everything between first and last quotes 
     2361                        if (substr($line, -4, 3) == 'NIL') { 
     2362                                // NIL response 
     2363                                $result = ''; 
     2364                        } else { 
     2365                                $from = strpos($line, '"') + 1; 
     2366                                $to   = strrpos($line, '"'); 
     2367                                $len  = $to - $from; 
     2368                                $result = substr($line, $from, $len); 
     2369                        } 
    23702370             
    2371             if ($mode == 2) { 
    2372                 echo $result; 
    2373             } else if ($mode == 3) { 
    2374                 echo base64_decode($result); 
    2375             } 
    2376         } else if ($line[$len-1] == '}') { 
    2377             //multi-line request, find sizes of content and receive that many bytes 
    2378             $from     = strpos($line, '{') + 1; 
    2379             $to       = strrpos($line, '}'); 
    2380             $len      = $to - $from; 
    2381             $sizeStr  = substr($line, $from, $len); 
    2382             $bytes    = (int)$sizeStr; 
    2383             $received = 0; 
    2384             while ($received < $bytes) { 
    2385                 $remaining = $bytes - $received; 
    2386                 $line      = iil_ReadLine($fp, 1024); 
    2387                 $len       = strlen($line); 
     2371                        if ($mode == 2) { 
     2372                                echo $result; 
     2373                        } else if ($mode == 3) { 
     2374                                echo base64_decode($result); 
     2375                        } 
     2376                } else if ($line[$len-1] == '}') { 
     2377                        //multi-line request, find sizes of content and receive that many bytes 
     2378                        $from     = strpos($line, '{') + 1; 
     2379                        $to       = strrpos($line, '}'); 
     2380                        $len      = $to - $from; 
     2381                        $sizeStr  = substr($line, $from, $len); 
     2382                        $bytes    = (int)$sizeStr; 
     2383                        $received = 0; 
     2384 
     2385                        while ($received < $bytes) { 
     2386                                $remaining = $bytes - $received; 
     2387                                $line      = iil_ReadLine($fp, 1024); 
     2388                                $len       = strlen($line); 
    23882389                 
    2389                 if ($len > $remaining) { 
    2390                     $line = substr($line, 0, $remaining); 
    2391                 } 
    2392                 $received += strlen($line); 
    2393                 if ($mode == 1) { 
    2394                     $result .= rtrim($line, "\t\r\n\0\x0B") . "\n"; 
    2395                 } else if ($mode == 2) { 
    2396                     echo rtrim($line, "\t\r\n\0\x0B") . "\n"; flush(); 
    2397                 } else if ($mode == 3) { 
    2398                     echo base64_decode($line); flush(); 
    2399                 } 
    2400             } 
    2401         } 
    2402         // read in anything up until 'til last line 
     2390                                if ($len > $remaining) { 
     2391                                        $line = substr($line, 0, $remaining); 
     2392                                } 
     2393                                $received += strlen($line); 
     2394                                if ($mode == 1) { 
     2395                                        $result .= rtrim($line, "\t\r\n\0\x0B") . "\n"; 
     2396                                } else if ($mode == 2) { 
     2397                                        echo rtrim($line, "\t\r\n\0\x0B") . "\n"; flush(); 
     2398                                } else if ($mode == 3) { 
     2399                                        echo base64_decode($line); flush(); 
     2400                                } 
     2401                        } 
     2402                } 
     2403                // read in anything up until 'til last line 
    24032404                do { 
    2404             $line = iil_ReadLine($fp, 1024); 
     2405                        $line = iil_ReadLine($fp, 1024); 
    24052406                } while (!iil_StartsWith($line, $key)); 
    24062407         
    2407         if ($result) { 
    2408             $result = rtrim($result, "\t\r\n\0\x0B"); 
    2409             return $result; // substr($result, 0, strlen($result)-1); 
    2410         } 
    2411         return false; 
     2408                if ($result) { 
     2409                        $result = rtrim($result, "\t\r\n\0\x0B"); 
     2410                        return $result; // substr($result, 0, strlen($result)-1); 
     2411                } 
     2412                 
     2413                return false; 
    24122414        } else { 
    24132415                echo 'Select failed.'; 
    24142416        } 
    24152417     
    2416     if ($mode==1) { 
    2417         return $result; 
    2418     } 
    2419     return $received; 
     2418        if ($mode==1) { 
     2419                return $result; 
     2420        } 
     2421        return $received; 
    24202422} 
    24212423 
    24222424function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part) { 
    2423     return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1); 
     2425        return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1); 
    24242426} 
    24252427 
    24262428function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) { 
    2427     iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2); 
     2429        iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2); 
    24282430} 
    24292431 
    24302432function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part) { 
    2431     iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3); 
     2433        iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3); 
    24322434} 
    24332435 
    24342436function iil_C_CreateFolder(&$conn, $folder) { 
    24352437        $fp = $conn->fp; 
    2436         if (fputs($fp, 'c CREATE "' . iil_Escape($folder) . '"' . "\r\n")) { 
     2438        if (iil_PutLine($fp, 'c CREATE "' . iil_Escape($folder) . '"')) { 
    24372439                do { 
    24382440                        $line=iil_ReadLine($fp, 300); 
     
    24462448function iil_C_RenameFolder(&$conn, $from, $to) { 
    24472449        $fp = $conn->fp; 
    2448         if (fputs($fp, 'r RENAME "' . iil_Escape($from) . '" "' . iil_Escape($to) . '"' . "\r\n")) { 
     2450        if (iil_PutLine($fp, 'r RENAME "' . iil_Escape($from) . '" "' . iil_Escape($to) . '"')) { 
    24492451                do { 
    24502452                        $line = iil_ReadLine($fp, 300); 
     
    24522454                return (iil_ParseResult($line) == 0); 
    24532455        } 
    2454     return false; 
     2456        return false; 
    24552457} 
    24562458 
    24572459function iil_C_DeleteFolder(&$conn, $folder) { 
    24582460        $fp = $conn->fp; 
    2459         if (fputs($fp, 'd DELETE "' . iil_Escape($folder). '"' . "\r\n")) { 
     2461        if (iil_PutLine($fp, 'd DELETE "' . iil_Escape($folder). '"')) { 
    24602462                do { 
    24612463                        $line=iil_ReadLine($fp, 300); 
     
    24632465                return (iil_ParseResult($line) == 0); 
    24642466        } 
    2465     $conn->error = "Couldn't send command\n"; 
     2467        $conn->error = "Couldn't send command\n"; 
    24662468        return false; 
    24672469} 
     
    24692471function iil_C_Append(&$conn, $folder, &$message) { 
    24702472        if (!$folder) { 
    2471         return false; 
    2472     } 
     2473                return false; 
     2474        } 
    24732475        $fp = $conn->fp; 
    24742476 
     
    24782480        $len = strlen($message); 
    24792481        if (!$len) { 
    2480         return false; 
    2481         } 
    2482         $request = 'A APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . "}\r\n"; 
    2483      
    2484         if (fputs($fp, $request)) { 
     2482                return false; 
     2483        } 
     2484 
     2485        $request = 'A APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . '}'; 
     2486     
     2487        if (iil_PutLine($fp, $request)) { 
    24852488                $line=iil_ReadLine($fp, 100);            
    24862489                $sent = fwrite($fp, $message."\r\n"); 
     
    24922495                if (!$result) { 
    24932496                    $conn->error .= $line . "\n"; 
    2494         } 
     2497                } 
    24952498                return $result; 
    2496          
    2497         } 
     2499        } 
     2500 
    24982501        $conn->error .= "Couldn't send command \"$request\"\n"; 
    2499     return false; 
    2500 } 
    2501  
     2502        return false; 
     2503} 
    25022504 
    25032505function iil_C_AppendFromFile(&$conn, $folder, $path) { 
     
    25092511        $in_fp = false;                          
    25102512        if (file_exists(realpath($path))) { 
    2511             $in_fp = fopen($path, 'r'); 
    2512     } 
     2513                $in_fp = fopen($path, 'r'); 
     2514        } 
    25132515        if (!$in_fp) {  
    25142516                $conn->error .= "Couldn't open $path for reading\n"; 
     
    25192521        $len = filesize($path); 
    25202522        if (!$len) { 
    2521             return false; 
     2523                return false; 
    25222524        } 
    25232525     
    25242526        //send APPEND command 
    2525         $request    = 'A APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . "}\r\n"; 
     2527        $request    = 'A APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . '}'; 
    25262528        $bytes_sent = 0; 
    2527         if (fputs($fp, $request)) { 
     2529        if (iil_PutLine($fp, $request)) { 
    25282530                $line = iil_ReadLine($fp, 100); 
    25292531                                 
     
    25322534                        $buffer      = fgets($in_fp, 4096); 
    25332535                        $bytes_sent += strlen($buffer); 
    2534                         fputs($fp, $buffer); 
     2536                        iil_PutLine($fp, $buffer, false); 
    25352537                } 
    25362538                fclose($in_fp); 
    25372539 
    2538                 fputs($fp, "\r\n"); 
     2540                iil_PutLine($fp, ''); 
    25392541 
    25402542                //read response 
     
    25472549                    $conn->error .= $line . "\n"; 
    25482550                } 
    2549         return $result; 
    2550          
    2551         } 
     2551         
     2552                return $result; 
     2553        } 
     2554         
    25522555        $conn->error .= "Couldn't send command \"$request\"\n"; 
    25532556        return false; 
    25542557} 
    2555  
    25562558 
    25572559function iil_C_FetchStructureString(&$conn, $folder, $id) { 
     
    25622564                $key = 'F1247'; 
    25632565         
    2564                 if (fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")) { 
     2566                if (iil_PutLine($fp, "$key FETCH $id (BODYSTRUCTURE)")) { 
    25652567                        do { 
    25662568                                $line = iil_ReadLine($fp, 5000); 
     
    25692571                        } while (!preg_match("/^$key/", $line)); 
    25702572 
    2571                         $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -(strlen($result)-strrpos($result, $key)-2))); 
     2573                        $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13,  
     2574                                    -(strlen($result)-strrpos($result, $key)-2))); 
    25722575                } 
    25732576        } 
     
    25942597         
    25952598        //get line containing quota info 
    2596         if (fputs($fp, 'QUOT1 GETQUOTAROOT "INBOX"' . "\r\n")) { 
     2599        if (iil_PutLine($fp, 'QUOT1 GETQUOTAROOT "INBOX"')) { 
    25972600                do { 
    25982601                        $line=chop(iil_ReadLine($fp, 5000)); 
    25992602                        if (iil_StartsWith($line, '* QUOTA ')) { 
    2600                             $quota_line = $line; 
    2601             } 
     2603                                $quota_line = $line; 
     2604                        } 
    26022605                } while (!iil_StartsWith($line, 'QUOT1')); 
    26032606        } 
     
    26222625} 
    26232626 
    2624  
    26252627function iil_C_ClearFolder(&$conn, $folder) { 
    26262628        $num_in_trash = iil_C_CountMessages($conn, $folder); 
    26272629        if ($num_in_trash > 0) { 
    2628             iil_C_Delete($conn, $folder, '1:' . $num_in_trash); 
    2629     } 
     2630                iil_C_Delete($conn, $folder, '1:' . $num_in_trash); 
     2631        } 
    26302632        return (iil_C_Expunge($conn, $folder) >= 0); 
    26312633} 
Note: See TracChangeset for help on using the changeset viewer.