epgrecのポートフォワーディング対応

家の録画サーバはSSH以外の外部からのアクセスを禁止しているので,外から録画した番組を見たい場合はSSHでポートフォワーディングすることになります.
しかし,ポートフォワーディングのせいでアクセスの際のホスト名やポート番号がインストール時に設定したものと違うものになってしまいます.
すると,録画済みリストのASXファイルのENTRYタグは設定されたホスト名を利用しているので,一回ASXファイルを保存して書き換えるなどの必要が生じ不便です.
そこで少しだけepgrecの修正を行いました.


recordedTable.php.patch

--- recordedTable.php   2012-01-06 01:18:47.961721388 +0900
+++ recordedTable.php.mod       2012-01-06 01:20:02.029386003 +0900
@@ -18,6 +18,9 @@
 // $options = "WHERE complete='1'";
 $options = "WHERE starttime < '". date("Y-m-d H:i:s")."'";     // ながら再生は無理っぽい?

+//ポートフォワーディングでも見られるように
+$my_install_url = "http://".$_SERVER['SERVER_NAME'] . ":" . $_SERVER['SERVER_PORT'] . "/epgrec";
+
 if(isset( $_GET['key']) ) {
        $options .= " AND autorec ='".mysql_real_escape_string(trim($_GET['key']))."'";
 }
@@ -57,10 +60,10 @@
                $arr['station_name'] = $ch->name;
                $arr['starttime'] = $r->starttime;
                $arr['endtime'] = $r->endtime;
-               $arr['asf'] = "".$settings->install_url."/viewer.php?reserve_id=".$r->id;
+               $arr['asf'] = "".$my_install_url."/viewer.php?reserve_id=".$r->id."&server_name=".$_SERVER['SERVER_NAME']."&server_port=".$_SERVER['SERVER_PORT'];
                $arr['title'] = htmlspecialchars($r->title,ENT_QUOTES);
                $arr['description'] = htmlspecialchars($r->description,ENT_QUOTES);
-               $arr['thumb'] = "<img src=\"".$settings->install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />";
+               $arr['thumb'] = "<img src=\"".$my_install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />";
                $arr['cat'] = $cat->name_en;
                $arr['mode'] = $RECORD_MODE[$r->mode]['name'];

@@ -109,4 +112,4 @@
 catch( exception $e ) {
        exit( $e->getMessage() );
 }
-?>
\ No newline at end of file
+?>


viewer.php.patch

--- viewer.php  2012-01-06 01:18:56.011829858 +0900
+++ viewer.php.mod      2012-01-06 00:16:24.924635574 +0900
@@ -15,6 +15,10 @@

 if( ! isset( $_GET['reserve_id'] )) jdialog("予約番号が指定されていません", "recordedTable.php");
 $reserve_id = $_GET['reserve_id'];
+if( ! isset( $_GET['server_name'] )) jdialog("Server_Name取得失敗", "recordedTable.php");
+$server_name = $_GET['server_name'];
+if( ! isset( $_GET['server_port'] )) jdialog("Server_Port取得失敗", "recordedTable.php");
+$server_port = $_GET['server_port'];

 try{
        $rrec = new DBRecord( RESERVE_TBL, "id", $reserve_id );
@@ -37,8 +41,10 @@
        echo "<ASX version = \"3.0\">";
        echo "<PARAM NAME = \"Encoding\" VALUE = \"UTF-8\" />";
        echo "<ENTRY>";
-       if( ! $rrec->complete ) echo "<REF HREF=\"".$settings->install_url."/sendstream.php?reserve_id=".$rrec->id ."\" />";
-       echo "<REF HREF=\"".$settings->install_url.$settings->spool."/".$rrec->path ."\" />";
+//     if( ! $rrec->complete ) echo "<REF HREF=\"".$settings->install_url."/sendstream.php?reserve_id=".$rrec->id ."\" />";
+       if( ! $rrec->complete ) echo "<REF HREF=\""."http://".$server_name.":".$server_port."/sendstream.php?reserve_id=".$rrec->id ."\" />";
+//     echo "<REF HREF=\"".$settings->install_url.$settings->spool."/".$rrec->path ."\" />";
+       echo "<REF HREF=\""."http://".$server_name.":".$server_port."/epgrec".$settings->spool."/".$rrec->path ."\" />";
        echo "<TITLE>".$title."</TITLE>";
        echo "<ABSTRACT>".$abstract."</ABSTRACT>";
        echo "<DURATION VALUE=";
@@ -49,4 +55,4 @@
 catch(exception $e ) {
        exit( $e->getMessage() );
 }
-?>
\ No newline at end of file
+?>

これで設定と異なるアドレスでサーバにアクセスしても録画した番組が見れるようになりました.