예제 #1
0
 /**
  * factory
  *
  * @param $psLine ps-line
  * @param $client client
  * @return RunningTransfer
  */
 function getInstance($psLine, $client = '')
 {
     global $cfg;
     // create and return object-instance
     switch ($client) {
         case "tornado":
             require_once 'inc/classes/RunningTransfer.tornado.php';
             return new RunningTransferTornado($psLine);
         case "transmission":
             require_once 'inc/classes/RunningTransfer.transmissionrpc.php';
             return new RunningTransferTransmissionRPC($psLine);
         case "transmissionrpc":
             require_once 'inc/classes/RunningTransfer.transmissionrpc.php';
             return new RunningTransferTransmissionRPC($psLine);
         case "mainline":
             require_once 'inc/classes/RunningTransfer.mainline.php';
             return new RunningTransferMainline($psLine);
         case "azureus":
             require_once 'inc/classes/RunningTransfer.azureus.php';
             return new RunningTransferAzureus($psLine);
         case "vuzerpc":
             require_once 'inc/classes/RunningTransfer.vuzerpc.php';
             return new RunningTransferVuzeRPC();
         case "wget":
             require_once 'inc/classes/RunningTransfer.wget.php';
             return new RunningTransferWget($psLine);
         case "nzbperl":
             require_once 'inc/classes/RunningTransfer.nzbperl.php';
             return new RunningTransferNzbperl($psLine);
         default:
             global $cfg;
             return RunningTransfer::getInstance($psLine, $cfg["btclient"]);
     }
 }
/**
 * processes
 *
 * @param $action
 */
function sa_processes($action = "")
{
    global $cfg, $error, $statusImage, $statusMessage, $htmlTitle, $htmlTop, $htmlMain;
    if ($action == "") {
        return;
    }
    buildPage("p");
    switch ($action) {
        case "0":
            // Processes-main
            $htmlTitle = "Processes";
            $htmlMain .= '<p>';
            $htmlMain .= 'View currently running torrentflux-b4rt processes:<br><br>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?p=1"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="All" border="0"> All</a> - detailed process list';
            $htmlMain .= '<p>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?p=2"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="Transfers" border="0"> Transfers</a> - simple list of running transfers with option to force stop individual transfers';
            $htmlMain .= '<br><br>';
            break;
        case "1":
            // Processes - All
            $htmlTitle = "Processes - All";
            $htmlMain .= '<div align="left" id="BodyLayer" name="BodyLayer" style="border: thin solid ' . $cfg['main_bgcolor'] . '; position:relative; width:740; height:498; padding-left: 5px; padding-right: 5px; z-index:1; overflow: scroll; visibility: visible">';
            $htmlMain .= '<br>';
            $htmlMain .= '<p><strong>fluxd</strong>';
            $htmlMain .= '<pre>';
            $htmlMain .= tfb_htmlencode(shell_exec("ps auxww | " . $cfg['bin_grep'] . " fluxd | " . $cfg['bin_grep'] . " -v grep"));
            $htmlMain .= '</pre>';
            $htmlMain .= '<p><strong>fluazu</strong>';
            $htmlMain .= '<pre>';
            $htmlMain .= tfb_htmlencode(shell_exec("ps auxww | " . $cfg['bin_grep'] . " fluazu.py | " . $cfg['bin_grep'] . " -v grep"));
            $htmlMain .= '</pre>';
            $clients = array('tornado', 'transmission', 'mainline', 'wget', 'nzbperl', 'azureus');
            foreach ($clients as $client) {
                $ch = ClientHandler::getInstance($client);
                $htmlMain .= '<p><strong>' . $client . '</strong>';
                $htmlMain .= '<br>';
                $htmlMain .= '<pre>';
                $htmlMain .= tfb_htmlencode(shell_exec("ps auxww | " . $cfg['bin_grep'] . " " . tfb_shellencode($ch->binClient) . " | " . $cfg['bin_grep'] . " -v grep"));
                $htmlMain .= '</pre>';
                $htmlMain .= '<br>';
                $htmlMain .= '<pre>';
                $htmlMain .= $ch->runningProcessInfo();
                $htmlMain .= '</pre>';
            }
            $htmlMain .= '</div>';
            break;
        case "2":
            // Processes - Transfers
            $htmlTitle = "Processes - Transfers";
            $htmlMain .= '<div align="left" id="BodyLayer" name="BodyLayer" style="border: thin solid ' . $cfg['main_bgcolor'] . '; position:relative; width:740; height:498; padding-left: 5px; padding-right: 5px; z-index:1; overflow: scroll; visibility: visible">';
            $htmlMain .= '<br>
				<table width="700" border=1 bordercolor="' . $cfg["table_admin_border"] . '" cellpadding="2" cellspacing="0" bgcolor="' . $cfg["table_data_bg"] . '">
			    <tr><td colspan=6 bgcolor="' . $cfg["table_header_bg"] . '" background="themes/' . $cfg["theme"] . '/images/bar.gif">
			    	<table width="100%" cellpadding=0 cellspacing=0 border=0><tr><td><font class="title"> Running Items </font></td></tr></table>
			    </td></tr>
			    <tr>
			        <td bgcolor="' . $cfg["table_header_bg"] . '" width="15%" nowrap><div align=center class="title">' . $cfg["_USER"] . '</div></td>
			        <td bgcolor="' . $cfg["table_header_bg"] . '" nowrap><div align=center class="title">' . $cfg["_FILE"] . '</div></td>
			        <td bgcolor="' . $cfg["table_header_bg"] . '" width="1%" nowrap><div align=center class="title">' . $cfg["_FORCESTOP"] . '</div></td>
			    </tr>
			';
            $running = getRunningClientProcesses();
            foreach ($running as $rng) {
                $rt = RunningTransfer::getInstance($rng['pinfo'], $rng['client']);
                $htmlMain .= '<tr bgcolor="' . $cfg["table_header_bg"] . '">';
                $htmlMain .= '<td nowrap><div class="tiny">';
                $htmlMain .= tfb_htmlencodekeepspaces($rt->transferowner);
                $htmlMain .= '</div></td>';
                $htmlMain .= '<td nowrap><div align=center><div class="tiny" align="left">';
                $htmlMain .= $rt->transferFile;
                $htmlMain .= '</div></td>';
                $htmlMain .= '<td nowrap>';
                $htmlMain .= '<a href="dispatcher.php?action=forceStop&riid=_referer_';
                $htmlMain .= "&transfer=" . urlencode($rt->transferFile);
                $htmlMain .= "&pid=" . $rt->processId;
                $htmlMain .= '"><img src="themes/' . $cfg["theme"] . '/images/kill.gif" width="16" height="16" title="' . $cfg['_FORCESTOP'] . '" border="0"></a></td>';
                $htmlMain .= '</tr>';
            }
            $htmlMain .= '</table>';
            $htmlMain .= '</div>';
            break;
    }
    printPage();
    exit;
}
}
$tmpl->setvar('pageop', $pageop);
// op-switch
switch ($pageop) {
    case "control":
        /* control */
        switch ($sf->running) {
            case 1:
                // running
                // state
                $tmpl->setvar('state', "running");
                // get pid
                $pid = 0;
                $running = $ch->runningProcesses();
                foreach ($running as $rng) {
                    $rt = RunningTransfer::getInstance($rng['pinfo'], $ch->client);
                    if ($rt->transferFile == $transfer) {
                        $pid = $rt->processId;
                        break;
                    }
                }
                if ($pid == 0) {
                    $pid = getTransferPid($transfer);
                }
                $tmpl->setvar('pid', $pid);
                // break
                break;
            case 3:
                // queued
                // state
                $tmpl->setvar('state', "queued");
 /**
  * stop a client
  *
  * @param $kill kill-param (optional)
  * @param $transferPid transfer Pid (optional)
  */
 function _stop($kill = false, $transferPid = 0)
 {
     global $cfg;
     // log
     AuditAction($cfg["constants"]["stop_transfer"], $this->transfer);
     // send quit-command to client
     CommandHandler::add($this->transfer, "q");
     CommandHandler::send($this->transfer);
     // wait until transfer is down
     waitForTransfer($this->transfer, false, 25);
     // one more second
     sleep(1);
     // flag the transfer as stopped (in db)
     stopTransferSettings($this->transfer);
     // set transfers-cache
     cacheTransfersSet();
     // see if the transfer process is hung.
     $running = $this->runningProcesses();
     $isHung = false;
     foreach ($running as $rng) {
         $rt = RunningTransfer::getInstance($rng['pinfo'], $this->client);
         if ($rt->transferFile == $this->transfer) {
             $isHung = true;
             AuditAction($cfg["constants"]["error"], "Possible Hung Process for " . $rt->transferFile . " (" . $rt->processId . ")");
         }
     }
     // kill-request
     if ($kill && $isHung) {
         AuditAction($cfg["constants"]["kill_transfer"], $this->transfer);
         // set pid
         if (!empty($transferPid)) {
             // test for valid pid-var
             if (preg_match('/^[0-9]+$/D', $transferPid)) {
                 $this->pid = $transferPid;
             } else {
                 $this->state = CLIENTHANDLER_STATE_ERROR;
                 AuditAction($cfg["constants"]["error"], "INVALID PID: " . $transferPid);
                 array_push($this->messages, "INVALID PID: " . $transferPid);
                 return false;
             }
         } else {
             $this->pid = getTransferPid($this->transfer);
         }
         // kill it
         require_once 'inc/defines/defines.signals.php';
         if ($this->pid > 0) {
             $this->callResult = posix_kill($this->pid, SIGKILL);
         }
         // try to remove the pid file
         @unlink($this->transferFilePath . ".pid");
     }
 }