2009/02/15(Sun)RD-XS41でiEPG登録が中途半端になる

2009/02/16 0:08 Hardware::HDDRecorder
最近はHDDレコーダーの普及も進み、当たり前のようにiEPGを使って番組予約が出来るようになった。
が、うちのRD-XS41がどうもiEPGでうまく予約登録できなくなったので、何故かを調べてみた。

現象

ネットdeナビに初期設定されている、東芝のネットdeナビ番組表からiEPG予約を行うと、iEPGボタン[eimg:http://www.backendtv.net/012/gif/iepg.gif]をクリックした後、真っ白で次に進まない。

▼ネットdeナビから番組表にアクセス。予約したいiEPGボタンを押す。
net_de_navi_1.png


▼……と?真っ白で先に進まず。
net_de_navi_2.png


▼ネットdeナビのトップページに戻ってくると、番組表登録画面が表示されている
net_de_navi_3.png


という状況。
まぁ、予約ができる事には変わりないのだが、以前はiEPGボタンを押すだけで登録画面に遷移できていたのに何故だろう?と思って色々調べてみた。

原因

どうやら、iEPGボタンを押した先に帰ってくるiEPG情報をRD-XS41がパースした後、登録画面に飛ぶところで問題発生。
真っ白な部分のソースを見てみると、本来以下のような出力されるところが途中で切れていた。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
</head>
<body>
<script language="JavaScript">
<!--
allcookie = document.cookie + ';'
start1 = allcookie.indexOf('iepg_open_win');
iepg_open_win = ''
if(start1 != -1){
	target = allcookie.substring(start1, allcookie.length);
	start2 = target.indexOf('=', 0) + 1;
	end = target.indexOf(';', start2);
	iepg_open_win = unescape(target.substring(start2, end));
}
if(iepg_open_win == 'ON'){
	window.open("/program/4/iproginfo1.htm","","location=0,menu=0,tool=0,directories=0,scrollbars=1,toolbar=0,status=0,menubar=0,resizable=1,width=820,height=500");
	setTimeout('history.back();',500);
}else{
	top.location = "/index.htm";
}
//-->
</script>
<a href = "/program/4/iproginfo1.htm" target="_blank">確認画面にジャンプします。ジャンプしないときはここをクリックしてください。</a>
</body>
</html>
切れていたのはscriptタグの内部だったので、JavaScriptが正しく実行されず、確認画面に推移しないようだ。

こうなる原因を追究すべく、ヘッダーを追ってみると、Content-Lengthが100とか200とか、明らかにHTMLソースより短い。
これは、本来iEPG情報を流しているwww.backendtv.net/iepg.php…というサイトの情報をRD-XS41が受信し、それを書き換えて上記のHTMLを出力する*1過程で、Content-Lengthを書き換え忘れたのが原因のようだ。以前はContent-Lengthを流していなかったからちゃんと動作していたのだろうか?
この件に関しての修正は公開されていない模様。まぁもう地デジのご時勢にファームアップデートしろといったところで対応するはずも無いので、クライアント側で何とかならないか考えてみる。

*1 : そういう作業をするために、クライアントからhttp://rd-xs41/@@@@@www.backendtv.net/iepg.php?...というようないかにもプロキシ通してます~というアドレスで通信している

対策

超万能なローカルプロキシツール「Proxomitron」を使ってフィルタを書いてみた。安直に、Content-Lengthを落としてやるだけでうまく動作した。
URL項は各自のホスト名に合わせて調整してほしい。
[HTTP headers]
In = TRUE
Out = FALSE
Key = "Content-Length: RD-XS41"
URL = "rd-xs41"
Match = "*"
これで難なく動作するようになった。ほっ。
別のiEPGサイトを使ってもいいんだけど、上記のようにiEPG登録をさせるとなるとRD-XS41経由でアクセスせねばならず、東芝のサイトみたいに軽く開けるサイトがなかなか無いからなぁ。これで運用。