chromecastを使った後についつい電源を切らずに放置してしまうことがたまにあったので、NaonoPi NEO2で一日一回早朝にchromecastが動いているかどうか確認するようにした。早朝なら通常寝ているはずだし、その時間にchromecastが動いているのが検出されたら、電源の切り忘れの可能性が高いからだ。そして、昨日久しぶりに、chromecast電源を切るのを忘れた。通常ならばchromecastが検出されたことが、ローカルメールで通知されるだけなのだが、奇妙なメールがやってきた。
*** FATAL PROGRAM ERROR!! Unknown instance method "char_str_list" *** which the program has attempted to call for the object: *** Chromecast-73ae3b0d75f33a65aeb362aa7b2fa400._googlecast._tcp.local. 120 CLASS32769 SRV ( 0 0 8009 73ae3b0d-75f3-3a65-aeb3-62aa7b2fa400.local. ) *** *** THIS IS A BUG IN THE CALLING SOFTWARE, which incorrectly assumes *** that the object would be of a particular type. The type of an *** object should be checked before calling any of its methods. *** Net::DNS::RR::SRV 1597 at /usr/local/lib/perl5/site_perl/Net/Bonjour/Entry.pm line 257. Net::Bonjour::Entry::mfetch(Net::Bonjour::Entry=HASH(0x41a3d030)) called at /usr/local/lib/perl5/site_perl/Net/Bonjour.pm line 335 Net::Bonjour::discover(Net::Bonjour=HASH(0x40b4d6c0)) called at /usr/local/lib/perl5/site_perl/Net/Bonjour.pm line 193 Net::Bonjour::_init(Net::Bonjour=HASH(0x40b4d6c0), "googlecast", "tcp", "local") called at /usr/local/lib/perl5/site_perl/Net/Bonjour.pm line 179 Net::Bonjour::new("Net::Bonjour", "googlecast", "tcp", "local") called at detect.pl line 14
今までこんなことは起きていなかったので、何事かと思ったのだが、char_str_listが存在していないのに、使おうとしているのが問題のようだ。何か想定外のことが起きているのだろうが、再現性はどうなのだろうと、試してみたら、やはり同じメッセージが表示される。そこで、NanoPi NEO2とchromecastの間のパケットをキャプチャーしてみたら、不思議なことが起きていた。TXTを要求しているのに、chromecastからの応答はSRVになっている。それと、chromecastは応答メッセージ中のtransaction IDも正しくセットしていないのではないか?
chromecastのファームウェアは自動で更新されるし、googleはリリースノートも出していないようなので、いつこのような変更が起きたのかは全くわからないが、今年の1月ぐらいに確認したときには、このような問題はなかったので、それ以降のどこかでだろう。こんな単純なミスが見逃されているとは。Net::Bonjourがメンテされていなくて、無理無理マルチキャストに対応させたのだが、根本的に作り直さないと、現行のchromecastのファームウェアでは正しく、デバイスの名前が検出できない。このTXTに対してSRVを返信する問題をgoogleは直してくれるのだろうか?