| | |
| | | $MIME_VIDEO = 6; |
| | | $MIME_OTHER = 7; |
| | | |
| | | function iml_ClosingParenPos($str, $start){ |
| | | function iml_ClosingParenPos($str, $start) { |
| | | $level=0; |
| | | $len = strlen($str); |
| | | $in_quote = 0; |
| | | for ($i=$start;$i<$len;$i++){ |
| | | if ($str[$i]=="\"") $in_quote = ($in_quote + 1) % 2; |
| | | if (!$in_quote){ |
| | | |
| | | for ($i=$start; $i<$len; $i++) { |
| | | if ($str[$i] == '"' && $str[$i-1] != "\\") |
| | | $in_quote = ($in_quote + 1) % 2; |
| | | if (!$in_quote) { |
| | | if ($str[$i]=="(") $level++; |
| | | else if (($level > 0) && ($str[$i]==")")) $level--; |
| | | else if (($level == 0) && ($str[$i]==")")) return $i; |
| | |
| | | $id = 0; |
| | | $a = array(); |
| | | $len = strlen($str); |
| | | |
| | | $in_quote = 0; |
| | | for ($i=0; $i<$len; $i++){ |
| | | if ($str[$i] == "\"") $in_quote = ($in_quote + 1) % 2; |
| | | else if (!$in_quote){ |
| | | if ($str[$i] == " ") $id++; //space means new element |
| | | else if ($str[$i]=="("){ //new part |
| | | |
| | | for ($i=0; $i<$len; $i++) { |
| | | if ($str[$i] == '"') { |
| | | $in_quote = ($in_quote + 1) % 2; |
| | | } else if (!$in_quote) { |
| | | if ($str[$i] == " ") { //space means new element |
| | | $id++; |
| | | while ($str[$i+1] == " ") $i++; // skip additional spaces |
| | | } else if ($str[$i]=="(") { //new part |
| | | $i++; |
| | | $endPos = iml_ClosingParenPos($str, $i); |
| | | $partLen = $endPos - $i; |
| | | if ($partLen < 0) break; |
| | | $part = substr($str, $i, $partLen); |
| | | $a[$id] = iml_ParseBSString($part); //send part string |
| | | if ($verbose){ |
| | | echo "{>".$endPos."}"; |
| | | flush(); |
| | | } |
| | | $i = $endPos; |
| | | }else $a[$id].=$str[$i]; //add to current element in array |
| | | }else if ($in_quote){ |
| | | if ($str[$i]=="\\") $i++; //escape backslashes |
| | | else $a[$id].=$str[$i]; //add to current element in array |
| | | } else |
| | | $a[$id].=$str[$i]; //add to current element in array |
| | | } else if ($in_quote) { |
| | | if ($str[$i]=="\\") { |
| | | $i++; //escape backslashes |
| | | if ($str[$i] == '"' || $str[$i] == "\\") |
| | | $a[$id] .= $str[$i]; |
| | | } else |
| | | $a[$id] .= $str[$i]; //add to current element in array |
| | | } |
| | | } |
| | | |
| | |
| | | function iml_GetRawStructureArray($str){ |
| | | $line=substr($str, 1, strlen($str) - 2); |
| | | $line = str_replace(")(", ") (", $line); |
| | | |
| | | |
| | | $struct = iml_ParseBSString($line); |
| | | if ((strcasecmp($struct[0], "message")==0) && (strcasecmp($struct[1], "rfc822")==0)){ |
| | | $struct = array($struct); |
| | |
| | | } |
| | | //echo "s - part: $part rest: $rest array: ".implode(" ", $a)."<br>\n"; |
| | | if (is_array($a[$part-1])) return $a[$part-1]; |
| | | else return false; |
| | | else return $a; |
| | | }else if (($part==0) || (empty($part))){ |
| | | return $a; |
| | | } |