define('SPOOL_DIR', '/var/spool/vbox/ttyI6'); function read_info($dir, $call) { $info = array(); $fname = SPOOL_DIR . '/' . $dir . '/' . $call . '.info'; if (is_file($fname) && ($f = fopen($fname, 'r')) !== false) { $line = fgets($f, 1024); fclose($f); $info = unserialize($line); if (empty($info['note'])) $info['note'] = ''; } return $info; } function write_info($dir,$fname,$info) { if (($f = fopen(SPOOL_DIR . '/' . $dir . '/' . $fname . '.info', 'w')) !== false) { fwrite($f, serialize($info)."\n"); fclose($f); } } function message_info($dir,$fname) { $info = array(); $basename = SPOOL_DIR . '/' . $dir . '/' . $fname; if (is_file($basename . '.vmsg')) { if (!is_file($basename . '.info')) { if (($p = popen('vboxmode ' . $basename . '.vmsg', 'r')) !== false) { while (!feof($p)) { $line = chop(fgets($p, 1024)); $pos = strpos($line, ':')+2; if (strpos($line, 'Speaker name............: ') !== false) { $info['name'] = utf8_encode(substr($line, $pos)); } elseif (strpos($line, 'Length..................: ') !== false) { $info['length'] = str_replace(' seconds', 's', substr($line, $pos)); } elseif (strpos($line, 'Speaker caller number...: ') !== false) { $info['number'] = substr($line, $pos); } elseif (strpos($line, 'Creation time...........: ') !== false) { $info['date'] = substr($line, $pos); } } pclose($p); $s = stat($basename . '.vmsg'); $info['timestamp'] = $s['mtime']; write_info($dir,$fname,$info); } } $info = read_info($dir,$fname); } elseif (is_file($basename . '.msg')) { if (is_file($basename . '.info')) $info = read_info($dir,$fname); } return $info; } function call_cmp($a, $b) { if (!empty($a['read']) && empty($b['read'])) return 1; elseif (!empty($b['read']) && empty($a['read'])) return -1; elseif ($a['timestamp'] > $b['timestamp']) return -1; elseif ($a['timestamp'] < $b['timestamp']) return 1; return 0; } function read_directory($directory) { $result = array(); if ($dir = opendir(SPOOL_DIR . '/' . $directory)) { while (($filename = readdir($dir)) !== false) { if (($pos = strpos($filename, '.vmsg')) !== false || ($pos = strpos($filename, '.msg')) !== false) { $fname = substr($filename,0,$pos); $info = message_info($directory, $fname); $info['fname'] = $fname; $result[] = $info; } } closedir($dir); } else { error_log('Cannot open directory ' . SPOOL_DIR . '/' . $directory); } usort($result, "call_cmp"); return $result; } function callinfo($dir, $call) { return read_info($dir, $call); } function send_call($dir, $call) { if ($_SERVER['HTTP_USER_AGENT'] == 'NSPlayer') return; $dir = str_replace('/','x',$dir); $call = str_replace('/','x',$call); if ($dir == 'messages') $ext = '.msg'; else $ext = '.vmsg'; $fname = SPOOL_DIR . '/' . $dir . '/' . $call . $ext; $aufile = SPOOL_DIR . '/' . $dir . '/' . $call . '.au'; if (!is_file($fname)) { printf("