/****************************************************************************** ** Reads the output from the IMAP stream. If handle_errors is set to true, ** this will also handle all errors that are received. If it is not set, ** the errors will be sent back through $response and $message ******************************************************************************/ function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$message) { global $color, $squirrelmail_language, $imap_general_debug; $data = array(); $size = 0; do { $read = fgets($imap_stream, 9096); if (ereg("^$pre (OK|BAD|NO)(.*)$", $read, $regs)) { break; // found end of reply } // Continue if needed for this single line while (strpos($read, "\n") === false) { $read .= fgets($imap_stream, 9096); } $data[] = $read; if (ereg("^\\* [0-9]+ FETCH.*\\{([0-9]+)\\}", $read, $regs)) { $size = $regs[1]; if ($imap_general_debug) { echo "Size is $size
\n"; } $total_size = 0; do { $read = fgets($imap_stream, 9096); if ($imap_general_debug) { echo "$read
\n"; flush(); } $data[] = $read; $total_size += strlen($read); } while ($total_size < $size); $size = 0; } // For debugging purposes if ($imap_general_debug) { echo "$read
\n"; flush(); } } while (true); $response = $regs[1]; $message = trim($regs[2]); if ($imap_general_debug) echo '--
'; if ($handle_errors == false) return $data; if ($response == 'NO') { // ignore this error from m$ exchange, it is not fatal (aka bug) if (strstr($message, 'command resulted in') === false) { set_up_language($squirrelmail_language); echo "
\n"; echo _("ERROR : Could not complete request."); echo "
\n"; echo _("Reason Given: "); echo $message . "

\n"; exit; } } else if ($response == 'BAD') { set_up_language($squirrelmail_language); echo "
\n"; echo _("ERROR : Bad or malformed request."); echo "
\n"; echo _("Server responded: "); echo $message . "

\n"; exit; } return $data; }