- added iil_PutLine() wrapper for fputs()

- code cleanup and identation fixes
release-0.6
alecpl 17 years ago
parent ece3aed366
commit 49e5f72328

@ -60,6 +60,8 @@
- fixed iil_MultLine(): use iil_ReadBytes() instead of iil_ReadLine() - fixed iil_MultLine(): use iil_ReadBytes() instead of iil_ReadLine()
- fixed iil_C_FetchStructureString() to handle many literal strings in response - fixed iil_C_FetchStructureString() to handle many literal strings in response
- removed hardcoded data size in iil_ReadLine() - removed hardcoded data size in iil_ReadLine()
- added iil_PutLine() wrapper for fputs()
- code cleanup and identation fixes
********************************************************/ ********************************************************/
@ -159,7 +161,6 @@ class iilThreadHeader
var $mid; var $mid;
} }
function iil_xor($string, $string2) { function iil_xor($string, $string2) {
$result = ''; $result = '';
$size = strlen($string); $size = strlen($string);
@ -169,8 +170,14 @@ function iil_xor($string, $string2) {
return $result; return $result;
} }
function iil_PutLine($fp, $string, $endln=true) {
// console('C: '. $string);
return fputs($fp, $string . ($endln ? "\r\n" : ''));
}
function iil_ReadLine($fp, $size) { function iil_ReadLine($fp, $size) {
$line = ''; $line = '';
if (!$fp) { if (!$fp) {
return $line; return $line;
} }
@ -184,8 +191,10 @@ function iil_ReadLine($fp, $size) {
if ($buffer === false) { if ($buffer === false) {
break; break;
} }
// console('S: '. chop($buffer));
$line .= $buffer; $line .= $buffer;
} while ($buffer[strlen($buffer)-1] != "\n"); } while ($buffer[strlen($buffer)-1] != "\n");
return $line; return $line;
} }
@ -201,6 +210,7 @@ function iil_MultLine($fp, $line) {
$out .= $line; $out .= $line;
} }
$line = $a[1][0] . "\"$out\""; $line = $a[1][0] . "\"$out\"";
// console('[...] '. $out);
} }
return $line; return $line;
} }
@ -215,6 +225,7 @@ function iil_ReadBytes($fp, $bytes) {
} }
$len = strlen($data); $len = strlen($data);
} while ($len < $bytes); } while ($len < $bytes);
return $data; return $data;
} }
@ -263,7 +274,6 @@ function iil_StartsWithI($string, $match) {
return false; return false;
} }
function iil_Escape($string) function iil_Escape($string)
{ {
return strtr($string, array('"'=>'\\"', '\\' => '\\\\')); return strtr($string, array('"'=>'\\"', '\\' => '\\\\'));
@ -279,6 +289,7 @@ function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge) {
$ipad .= chr(0x36); $ipad .= chr(0x36);
$opad .= chr(0x5C); $opad .= chr(0x5C);
} }
// pad $pass so it's 64 bytes // pad $pass so it's 64 bytes
$padLen = 64 - strlen($pass); $padLen = 64 - strlen($pass);
for ($i=0;$i<$padLen;$i++) { for ($i=0;$i<$padLen;$i++) {
@ -294,7 +305,7 @@ function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge) {
$reply = base64_encode('"' . $user . '" "' . $hash . '"'); $reply = base64_encode('"' . $user . '" "' . $hash . '"');
// send result, get reply // send result, get reply
fputs($conn->fp, $reply . "\r\n"); iil_PutLine($conn->fp, $reply);
$line = iil_ReadLine($conn->fp, 1024); $line = iil_ReadLine($conn->fp, 1024);
// process result // process result
@ -311,7 +322,7 @@ function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge) {
function iil_C_Login(&$conn, $user, $password) { function iil_C_Login(&$conn, $user, $password) {
fputs($conn->fp, 'a001 LOGIN "'.iil_Escape($user).'" "'.iil_Escape($password)."\"\r\n"); iil_PutLine($conn->fp, 'a001 LOGIN "'.iil_Escape($user).'" "'.iil_Escape($password).'"');
do { do {
$line = iil_ReadReply($conn->fp); $line = iil_ReadReply($conn->fp);
@ -382,7 +393,7 @@ function iil_C_NameSpace(&$conn) {
return true; return true;
} }
fputs($conn->fp, "ns1 NAMESPACE\r\n"); iil_PutLine($conn->fp, "ns1 NAMESPACE");
do { do {
$line = iil_ReadLine($conn->fp, 1024); $line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) { if (iil_StartsWith($line, '* NAMESPACE')) {
@ -410,7 +421,6 @@ function iil_C_NameSpace(&$conn) {
$my_prefs["rootdir"] = substr($conn->rootdir, 0, -1); $my_prefs["rootdir"] = substr($conn->rootdir, 0, -1);
return true; return true;
} }
function iil_Connect($host, $user, $password) { function iil_Connect($host, $user, $password) {
@ -497,9 +507,9 @@ function iil_Connect($host, $user, $password) {
// if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) { // if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
// $conn->capability = explode(' ', $matches[1]); // $conn->capability = explode(' ', $matches[1]);
// } else { // } else {
fputs($conn->fp, "cp01 CAPABILITY\r\n"); iil_PutLine($conn->fp, "cp01 CAPABILITY");
do { do {
$line = trim(iil_ReadLine($conn->fp, 100)); $line = trim(iil_ReadLine($conn->fp, 1024));
$conn->message .= "$line\n"; $conn->message .= "$line\n";
@ -532,7 +542,7 @@ function iil_Connect($host, $user, $password) {
$conn->message .= "Trying CRAM-MD5\n"; $conn->message .= "Trying CRAM-MD5\n";
//do CRAM-MD5 authentication //do CRAM-MD5 authentication
fputs($conn->fp, "a000 AUTHENTICATE CRAM-MD5\r\n"); iil_PutLine($conn->fp, "a000 AUTHENTICATE CRAM-MD5");
$line = trim(iil_ReadLine($conn->fp, 1024)); $line = trim(iil_ReadLine($conn->fp, 1024));
$conn->message .= "$line\n"; $conn->message .= "$line\n";
@ -546,7 +556,6 @@ function iil_Connect($host, $user, $password) {
$conn->message .= "Tried CRAM-MD5: $result \n"; $conn->message .= "Tried CRAM-MD5: $result \n";
} else { } else {
$conn->message .='No challenge ('.htmlspecialchars($line)."), try plain\n"; $conn->message .='No challenge ('.htmlspecialchars($line)."), try plain\n";
$auth = 'plain'; $auth = 'plain';
} }
} }
@ -571,7 +580,7 @@ function iil_Connect($host, $user, $password) {
function iil_Close(&$conn) { function iil_Close(&$conn) {
iil_C_WriteCache($conn); iil_C_WriteCache($conn);
if (fputs($conn->fp, "I LOGOUT\r\n")) { if (iil_PutLine($conn->fp, "I LOGOUT")) {
fgets($conn->fp, 1024); fgets($conn->fp, 1024);
fclose($conn->fp); fclose($conn->fp);
$conn->fp = false; $conn->fp = false;
@ -581,7 +590,6 @@ function iil_Close(&$conn) {
function iil_ClearCache($user, $host) { function iil_ClearCache($user, $host) {
} }
function iil_C_WriteCache(&$conn) { function iil_C_WriteCache(&$conn) {
//echo "<!-- doing iil_C_WriteCache //-->\n"; //echo "<!-- doing iil_C_WriteCache //-->\n";
if (!$conn->do_cache) return false; if (!$conn->do_cache) return false;
@ -684,7 +692,7 @@ function iil_CheckForRecent($host, $user, $password, $mailbox) {
$conn = iil_Connect($host, $user, $password, 'plain'); $conn = iil_Connect($host, $user, $password, 'plain');
$fp = $conn->fp; $fp = $conn->fp;
if ($fp) { if ($fp) {
fputs($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\"\r\n"); iil_PutLine($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\"");
do { do {
$line=chop(iil_ReadLine($fp, 300)); $line=chop(iil_ReadLine($fp, 300));
$a=explode(' ', $line); $a=explode(' ', $line);
@ -693,7 +701,7 @@ function iil_CheckForRecent($host, $user, $password, $mailbox) {
} }
} while (!iil_StartsWith($a[0], 'a002')); } while (!iil_StartsWith($a[0], 'a002'));
fputs($fp, "a003 LOGOUT\r\n"); iil_PutLine($fp, "a003 LOGOUT");
fclose($fp); fclose($fp);
} else { } else {
$result = -2; $result = -2;
@ -703,7 +711,6 @@ function iil_CheckForRecent($host, $user, $password, $mailbox) {
} }
function iil_C_Select(&$conn, $mailbox) { function iil_C_Select(&$conn, $mailbox) {
$fp = $conn->fp;
if (empty($mailbox)) { if (empty($mailbox)) {
return false; return false;
@ -714,9 +721,9 @@ function iil_C_Select(&$conn, $mailbox) {
iil_C_LoadCache($conn, $mailbox); iil_C_LoadCache($conn, $mailbox);
if (fputs($fp, "sel1 SELECT \"".iil_Escape($mailbox)."\"\r\n")) { if (iil_PutLine($conn->fp, "sel1 SELECT \"".iil_Escape($mailbox).'"')) {
do { do {
$line=chop(iil_ReadLine($fp, 300)); $line = chop(iil_ReadLine($conn->fp, 300));
$a = explode(' ', $line); $a = explode(' ', $line);
if (count($a) == 3) { if (count($a) == 3) {
if (strcasecmp($a[2], 'EXISTS') == 0) { if (strcasecmp($a[2], 'EXISTS') == 0) {
@ -754,6 +761,7 @@ function iil_C_CountMessages(&$conn, $mailbox, $refresh = false) {
if ($refresh) { if ($refresh) {
$conn->selected= ''; $conn->selected= '';
} }
iil_C_Select($conn, $mailbox); iil_C_Select($conn, $mailbox);
if ($conn->selected == $mailbox) { if ($conn->selected == $mailbox) {
return $conn->exists; return $conn->exists;
@ -823,6 +831,7 @@ function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
if ($field == 'INTERNALDATE') { if ($field == 'INTERNALDATE') {
$field = 'ARRIVAL'; $field = 'ARRIVAL';
} }
$fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1, $fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1,
'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1); 'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1);
@ -838,10 +847,10 @@ function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
$fp = $conn->fp; $fp = $conn->fp;
$command = 's ' . $is_uid . 'SORT (' . $field . ') '; $command = 's ' . $is_uid . 'SORT (' . $field . ') ';
$command .= $encoding . ' ALL' . "$add\r\n"; $command .= $encoding . ' ALL' . $add;
$line = $data = ''; $line = $data = '';
if (!fputs($fp, $command)) { if (!iil_PutLine($fp, $command)) {
return false; return false;
} }
do { do {
@ -906,8 +915,8 @@ function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field,
/* FETCH date,from,subject headers */ /* FETCH date,from,subject headers */
if ($mode == 1) { if ($mode == 1) {
$key = 'fhi' . ($c++); $key = 'fhi' . ($c++);
$request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])\r\n"; $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])";
if (!fputs($fp, $request)) { if (!iil_PutLine($fp, $request)) {
return false; return false;
} }
do { do {
@ -976,8 +985,8 @@ function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field,
}else if ($mode == 6) { }else if ($mode == 6) {
$key = 'fhi' . ($c++); $key = 'fhi' . ($c++);
$request = $key . " FETCH $message_set (INTERNALDATE)\r\n"; $request = $key . " FETCH $message_set (INTERNALDATE)";
if (!fputs($fp, $request)) { if (!iil_PutLine($fp, $request)) {
return false; return false;
} }
do { do {
@ -1014,9 +1023,9 @@ function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field,
/* FETCH uid, size, flags */ /* FETCH uid, size, flags */
$key = 'fhi' .($c++); $key = 'fhi' .($c++);
$request = $key . " FETCH $message_set ($field_name)\r\n"; $request = $key . " FETCH $message_set ($field_name)";
if (!fputs($fp, $request)) { if (!iil_PutLine($fp, $request)) {
return false; return false;
} }
do { do {
@ -1098,6 +1107,7 @@ function iil_CompressMessageSet($message_set) {
} }
$prev = $id; $prev = $id;
} }
//handle the last sequence/id //handle the last sequence/id
if ($start==$prev) { if ($start==$prev) {
$result[] = $prev; $result[] = $prev;
@ -1234,9 +1244,9 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set) {
$key = 'fh'; $key = 'fh';
$fp = $conn->fp; $fp = $conn->fp;
$request = $key . " FETCH $message_set "; $request = $key . " FETCH $message_set ";
$request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n"; $request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])";
$mid_to_id = array(); $mid_to_id = array();
if (!fputs($fp, $request)) { if (!iil_PutLine($fp, $request)) {
return false; return false;
} }
do { do {
@ -1417,7 +1427,6 @@ function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock) {
echo $new['MESSAGE-ID'] . "\t" . $sbj . "\n"; echo $new['MESSAGE-ID'] . "\t" . $sbj . "\n";
} }
} }
} }
//now that we've gone through all the messages, //now that we've gone through all the messages,
@ -1440,11 +1449,10 @@ function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock) {
if ($debug) { if ($debug) {
print_r($roots); print_r($roots);
} }
//print_r($result);
return $result; return $result;
} }
function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') { function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') {
if (!is_array($tree) || !is_array($index)) { if (!is_array($tree) || !is_array($index)) {
return false; return false;
@ -1485,7 +1493,6 @@ function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') {
} }
} }
//sort by key, this basically sorts all threads //sort by key, this basically sorts all threads
ksort($itree); ksort($itree);
$i = 0; $i = 0;
@ -1495,7 +1502,6 @@ function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') {
$i++; $i++;
} }
//return
return $out; return $out;
} }
@ -1563,9 +1569,9 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
$request .= " FETCH $message_set (BODY.PEEK[HEADER.FIELDS "; $request .= " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ";
$request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC "; $request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC ";
$request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID "; $request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID ";
$request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])\r\n"; $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])";
if (!fputs($fp, $request)) { if (!iil_PutLine($fp, $request)) {
return false; return false;
} }
do { do {
@ -1696,9 +1702,9 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set, $uidfetch=false)
*/ */
$command_key = 'fh' . ($c++); $command_key = 'fh' . ($c++);
$request = $command_key . $prefix; $request = $command_key . $prefix;
$request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n"; $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)";
if (!fputs($fp, $request)) { if (!iil_PutLine($fp, $request)) {
return false; return false;
} }
do { do {
@ -1812,7 +1818,6 @@ function iil_C_FetchHeader(&$conn, $mailbox, $id, $uidfetch=false) {
return false; return false;
} }
function iil_SortHeaders($a, $field, $flag) { function iil_SortHeaders($a, $field, $flag) {
if (empty($field)) { if (empty($field)) {
$field = 'uid'; $field = 'uid';
@ -1877,12 +1882,12 @@ function iil_SortHeaders($a, $field, $flag) {
} }
function iil_C_Expunge(&$conn, $mailbox) { function iil_C_Expunge(&$conn, $mailbox) {
$fp = $conn->fp;
if (iil_C_Select($conn, $mailbox)) { if (iil_C_Select($conn, $mailbox)) {
$c = 0; $c = 0;
fputs($fp, "exp1 EXPUNGE\r\n"); iil_PutLine($conn->fp, "exp1 EXPUNGE");
do { do {
$line=chop(iil_ReadLine($fp, 100)); $line=chop(iil_ReadLine($conn->fp, 100));
if ($line[0] == '*') { if ($line[0] == '*') {
$c++; $c++;
} }
@ -1919,7 +1924,7 @@ function iil_C_ModFlag(&$conn, $mailbox, $messages, $flag, $mod) {
if (iil_C_Select($conn, $mailbox)) { if (iil_C_Select($conn, $mailbox)) {
$c = 0; $c = 0;
fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n"); iil_PutLine($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")");
do { do {
$line=chop(iil_ReadLine($fp, 100)); $line=chop(iil_ReadLine($fp, 100));
if ($line[0] == '*') { if ($line[0] == '*') {
@ -1958,7 +1963,6 @@ function iil_C_Unseen(&$conn, $mailbox, $messages) {
return iil_C_ModFlag($conn, $mailbox, $messages, 'SEEN', '-'); return iil_C_ModFlag($conn, $mailbox, $messages, 'SEEN', '-');
} }
function iil_C_Copy(&$conn, $messages, $from, $to) { function iil_C_Copy(&$conn, $messages, $from, $to) {
$fp = $conn->fp; $fp = $conn->fp;
@ -1969,7 +1973,7 @@ function iil_C_Copy(&$conn, $messages, $from, $to) {
if (iil_C_Select($conn, $from)) { if (iil_C_Select($conn, $from)) {
$c=0; $c=0;
fputs($fp, "cpy1 COPY $messages \"".iil_Escape($to)."\"\r\n"); iil_PutLine($fp, "cpy1 COPY $messages \"".iil_Escape($to)."\"");
$line=iil_ReadReply($fp); $line=iil_ReadReply($fp);
return iil_ParseResult($line); return iil_ParseResult($line);
} else { } else {
@ -2017,7 +2021,7 @@ function iil_C_ID2UID(&$conn, $folder, $id) {
$result = -1; $result = -1;
if (iil_C_Select($conn, $folder)) { if (iil_C_Select($conn, $folder)) {
$key = 'FUID'; $key = 'FUID';
if (fputs($fp, "$key FETCH $id (UID)\r\n")) { if (iil_PutLine($fp, "$key FETCH $id (UID)")) {
do { do {
$line=chop(iil_ReadLine($fp, 1024)); $line=chop(iil_ReadLine($fp, 1024));
if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)) { if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)) {
@ -2034,8 +2038,8 @@ function iil_C_Search(&$conn, $folder, $criteria) {
if (iil_C_Select($conn, $folder)) { if (iil_C_Select($conn, $folder)) {
$c = 0; $c = 0;
$query = 'srch1 SEARCH ' . chop($criteria) . "\r\n"; $query = 'srch1 SEARCH ' . chop($criteria);
fputs($fp, $query); iil_PutLine($fp, $query);
do { do {
$line=trim(iil_ReadLine($fp, 10000)); $line=trim(iil_ReadLine($fp, 10000));
if (eregi("^\* SEARCH", $line)) { if (eregi("^\* SEARCH", $line)) {
@ -2050,7 +2054,6 @@ function iil_C_Search(&$conn, $folder, $criteria) {
} }
$conn->error = 'iil_C_Search: ' . $line . "\n"; $conn->error = 'iil_C_Search: ' . $line . "\n";
return false; return false;
} }
$conn->error = "iil_C_Search: Couldn't select \"$folder\"\n"; $conn->error = "iil_C_Search: Couldn't select \"$folder\"\n";
return false; return false;
@ -2088,7 +2091,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
$delimiter = false; $delimiter = false;
//try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8) //try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8)
if (!fputs($fp, 'ghd LIST "" ""' . "\r\n")) { if (!iil_PutLine($fp, 'ghd LIST "" ""')) {
return false; return false;
} }
@ -2109,7 +2112,7 @@ function iil_C_GetHierarchyDelimiter(&$conn) {
//if that fails, try namespace extension //if that fails, try namespace extension
//try to fetch namespace data //try to fetch namespace data
fputs($conn->fp, "ns1 NAMESPACE\r\n"); iil_PutLine($conn->fp, "ns1 NAMESPACE");
do { do {
$line = iil_ReadLine($conn->fp, 1024); $line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) { if (iil_StartsWith($line, '* NAMESPACE')) {
@ -2156,7 +2159,7 @@ function iil_C_ListMailboxes(&$conn, $ref, $mailbox) {
} }
// send command // send command
if (!fputs($fp, "lmb LIST \"".$ref."\" \"".iil_Escape($mailbox)."\"\r\n")) { if (!iil_PutLine($fp, "lmb LIST \"".$ref."\" \"".iil_Escape($mailbox)."\"")) {
return false; return false;
} }
@ -2204,7 +2207,6 @@ function iil_C_ListMailboxes(&$conn, $ref, $mailbox) {
} }
} }
function iil_C_ListSubscribed(&$conn, $ref, $mailbox) { function iil_C_ListSubscribed(&$conn, $ref, $mailbox) {
global $IGNORE_FOLDERS; global $IGNORE_FOLDERS;
@ -2220,7 +2222,7 @@ function iil_C_ListSubscribed(&$conn, $ref, $mailbox) {
$folders = array(); $folders = array();
// send command // send command
if (!fputs($fp, 'lsb LSUB "' . $ref . '" "' . iil_Escape($mailbox).'"' . "\r\n")) { if (!iil_PutLine($fp, 'lsb LSUB "' . $ref . '" "' . iil_Escape($mailbox).'"')) {
$conn->error = "Couldn't send LSUB command\n"; $conn->error = "Couldn't send LSUB command\n";
return false; return false;
} }
@ -2273,29 +2275,26 @@ function iil_C_ListSubscribed(&$conn, $ref, $mailbox) {
return false; return false;
} }
function iil_C_Subscribe(&$conn, $folder) { function iil_C_Subscribe(&$conn, $folder) {
$fp = $conn->fp; $fp = $conn->fp;
$query = 'sub1 SUBSCRIBE "' . iil_Escape($folder). '"' . "\r\n"; $query = 'sub1 SUBSCRIBE "' . iil_Escape($folder). '"';
fputs($fp, $query); iil_PutLine($fp, $query);
$line = trim(iil_ReadLine($fp, 10000)); $line = trim(iil_ReadLine($fp, 10000));
return iil_ParseResult($line); return iil_ParseResult($line);
} }
function iil_C_UnSubscribe(&$conn, $folder) { function iil_C_UnSubscribe(&$conn, $folder) {
$fp = $conn->fp; $fp = $conn->fp;
$query = 'usub1 UNSUBSCRIBE "' . iil_Escape($folder) . '"' . "\r\n"; $query = 'usub1 UNSUBSCRIBE "' . iil_Escape($folder) . '"';
fputs($fp, $query); iil_PutLine($fp, $query);
$line = trim(iil_ReadLine($fp, 10000)); $line = trim(iil_ReadLine($fp, 10000));
return iil_ParseResult($line); return iil_ParseResult($line);
} }
function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) { function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
$fp = $conn->fp; $fp = $conn->fp;
$result = false; $result = false;
@ -2307,8 +2306,8 @@ function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
if (iil_C_Select($conn, $mailbox)) { if (iil_C_Select($conn, $mailbox)) {
$key = 'fh' . ($c++); $key = 'fh' . ($c++);
$request = $key . " FETCH $id (BODY.PEEK[$part])\r\n"; $request = $key . " FETCH $id (BODY.PEEK[$part])";
if (!fputs($fp, $request)) return false; if (!iil_PutLine($fp, $request)) return false;
do { do {
$line = chop(iil_ReadLine($fp, 200)); $line = chop(iil_ReadLine($fp, 200));
$a = explode(' ', $line); $a = explode(' ', $line);
@ -2326,13 +2325,13 @@ function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
return $result; return $result;
} }
function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) { function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
/* modes: /* modes:
1: return string 1: return string
2: print 2: print
3: base64 and print 3: base64 and print
*/ */
$fp = $conn->fp; $fp = $conn->fp;
$result = false; $result = false;
if (($part == 0) || empty($part)) { if (($part == 0) || empty($part)) {
@ -2344,9 +2343,9 @@ function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
// format request // format request
$key = 'ftch' . ($c++) . ' '; $key = 'ftch' . ($c++) . ' ';
$request = $key . "FETCH $id (BODY.PEEK[$part])\r\n"; $request = $key . "FETCH $id (BODY.PEEK[$part])";
// send request // send request
if (!fputs($fp, $request)) { if (!iil_PutLine($fp, $request)) {
return false; return false;
} }
@ -2356,6 +2355,7 @@ function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
$a = explode(' ', $line); $a = explode(' ', $line);
} while ($a[2] != 'FETCH'); } while ($a[2] != 'FETCH');
$len = strlen($line); $len = strlen($line);
if ($line[$len-1] == ')') { if ($line[$len-1] == ')') {
// one line response, get everything between first and last quotes // one line response, get everything between first and last quotes
if (substr($line, -4, 3) == 'NIL') { if (substr($line, -4, 3) == 'NIL') {
@ -2381,6 +2381,7 @@ function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
$sizeStr = substr($line, $from, $len); $sizeStr = substr($line, $from, $len);
$bytes = (int)$sizeStr; $bytes = (int)$sizeStr;
$received = 0; $received = 0;
while ($received < $bytes) { while ($received < $bytes) {
$remaining = $bytes - $received; $remaining = $bytes - $received;
$line = iil_ReadLine($fp, 1024); $line = iil_ReadLine($fp, 1024);
@ -2408,6 +2409,7 @@ function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
$result = rtrim($result, "\t\r\n\0\x0B"); $result = rtrim($result, "\t\r\n\0\x0B");
return $result; // substr($result, 0, strlen($result)-1); return $result; // substr($result, 0, strlen($result)-1);
} }
return false; return false;
} else { } else {
echo 'Select failed.'; echo 'Select failed.';
@ -2433,7 +2435,7 @@ function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part) {
function iil_C_CreateFolder(&$conn, $folder) { function iil_C_CreateFolder(&$conn, $folder) {
$fp = $conn->fp; $fp = $conn->fp;
if (fputs($fp, 'c CREATE "' . iil_Escape($folder) . '"' . "\r\n")) { if (iil_PutLine($fp, 'c CREATE "' . iil_Escape($folder) . '"')) {
do { do {
$line=iil_ReadLine($fp, 300); $line=iil_ReadLine($fp, 300);
} while ($line[0] != 'c'); } while ($line[0] != 'c');
@ -2445,7 +2447,7 @@ function iil_C_CreateFolder(&$conn, $folder) {
function iil_C_RenameFolder(&$conn, $from, $to) { function iil_C_RenameFolder(&$conn, $from, $to) {
$fp = $conn->fp; $fp = $conn->fp;
if (fputs($fp, 'r RENAME "' . iil_Escape($from) . '" "' . iil_Escape($to) . '"' . "\r\n")) { if (iil_PutLine($fp, 'r RENAME "' . iil_Escape($from) . '" "' . iil_Escape($to) . '"')) {
do { do {
$line = iil_ReadLine($fp, 300); $line = iil_ReadLine($fp, 300);
} while ($line[0] != 'r'); } while ($line[0] != 'r');
@ -2456,7 +2458,7 @@ function iil_C_RenameFolder(&$conn, $from, $to) {
function iil_C_DeleteFolder(&$conn, $folder) { function iil_C_DeleteFolder(&$conn, $folder) {
$fp = $conn->fp; $fp = $conn->fp;
if (fputs($fp, 'd DELETE "' . iil_Escape($folder). '"' . "\r\n")) { if (iil_PutLine($fp, 'd DELETE "' . iil_Escape($folder). '"')) {
do { do {
$line=iil_ReadLine($fp, 300); $line=iil_ReadLine($fp, 300);
} while ($line[0] != 'd'); } while ($line[0] != 'd');
@ -2479,9 +2481,10 @@ function iil_C_Append(&$conn, $folder, &$message) {
if (!$len) { if (!$len) {
return false; return false;
} }
$request = 'A APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . "}\r\n";
if (fputs($fp, $request)) { $request = 'A APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . '}';
if (iil_PutLine($fp, $request)) {
$line=iil_ReadLine($fp, 100); $line=iil_ReadLine($fp, 100);
$sent = fwrite($fp, $message."\r\n"); $sent = fwrite($fp, $message."\r\n");
do { do {
@ -2493,13 +2496,12 @@ function iil_C_Append(&$conn, $folder, &$message) {
$conn->error .= $line . "\n"; $conn->error .= $line . "\n";
} }
return $result; return $result;
} }
$conn->error .= "Couldn't send command \"$request\"\n"; $conn->error .= "Couldn't send command \"$request\"\n";
return false; return false;
} }
function iil_C_AppendFromFile(&$conn, $folder, $path) { function iil_C_AppendFromFile(&$conn, $folder, $path) {
if (!$folder) { if (!$folder) {
return false; return false;
@ -2522,20 +2524,20 @@ function iil_C_AppendFromFile(&$conn, $folder, $path) {
} }
//send APPEND command //send APPEND command
$request = 'A APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . "}\r\n"; $request = 'A APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . '}';
$bytes_sent = 0; $bytes_sent = 0;
if (fputs($fp, $request)) { if (iil_PutLine($fp, $request)) {
$line = iil_ReadLine($fp, 100); $line = iil_ReadLine($fp, 100);
//send file //send file
while (!feof($in_fp)) { while (!feof($in_fp)) {
$buffer = fgets($in_fp, 4096); $buffer = fgets($in_fp, 4096);
$bytes_sent += strlen($buffer); $bytes_sent += strlen($buffer);
fputs($fp, $buffer); iil_PutLine($fp, $buffer, false);
} }
fclose($in_fp); fclose($in_fp);
fputs($fp, "\r\n"); iil_PutLine($fp, '');
//read response //read response
do { do {
@ -2546,14 +2548,14 @@ function iil_C_AppendFromFile(&$conn, $folder, $path) {
if (!$result) { if (!$result) {
$conn->error .= $line . "\n"; $conn->error .= $line . "\n";
} }
return $result;
return $result;
} }
$conn->error .= "Couldn't send command \"$request\"\n"; $conn->error .= "Couldn't send command \"$request\"\n";
return false; return false;
} }
function iil_C_FetchStructureString(&$conn, $folder, $id) { function iil_C_FetchStructureString(&$conn, $folder, $id) {
$fp = $conn->fp; $fp = $conn->fp;
$result = false; $result = false;
@ -2561,14 +2563,15 @@ function iil_C_FetchStructureString(&$conn, $folder, $id) {
if (iil_C_Select($conn, $folder)) { if (iil_C_Select($conn, $folder)) {
$key = 'F1247'; $key = 'F1247';
if (fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")) { if (iil_PutLine($fp, "$key FETCH $id (BODYSTRUCTURE)")) {
do { do {
$line = iil_ReadLine($fp, 5000); $line = iil_ReadLine($fp, 5000);
$line = iil_MultLine($fp, $line); $line = iil_MultLine($fp, $line);
$result .= $line; $result .= $line;
} while (!preg_match("/^$key/", $line)); } while (!preg_match("/^$key/", $line));
$result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -(strlen($result)-strrpos($result, $key)-2))); $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13,
-(strlen($result)-strrpos($result, $key)-2)));
} }
} }
return $result; return $result;
@ -2593,7 +2596,7 @@ function iil_C_GetQuota(&$conn) {
$quota_line = ''; $quota_line = '';
//get line containing quota info //get line containing quota info
if (fputs($fp, 'QUOT1 GETQUOTAROOT "INBOX"' . "\r\n")) { if (iil_PutLine($fp, 'QUOT1 GETQUOTAROOT "INBOX"')) {
do { do {
$line=chop(iil_ReadLine($fp, 5000)); $line=chop(iil_ReadLine($fp, 5000));
if (iil_StartsWith($line, '* QUOTA ')) { if (iil_StartsWith($line, '* QUOTA ')) {
@ -2621,7 +2624,6 @@ function iil_C_GetQuota(&$conn) {
return $result; return $result;
} }
function iil_C_ClearFolder(&$conn, $folder) { function iil_C_ClearFolder(&$conn, $folder) {
$num_in_trash = iil_C_CountMessages($conn, $folder); $num_in_trash = iil_C_CountMessages($conn, $folder);
if ($num_in_trash > 0) { if ($num_in_trash > 0) {

Loading…
Cancel
Save