UPnPライブラリについて

710 views
Skip to first unread message

syuu

unread,
Mar 16, 2010, 11:59:38 PM3/16/10
to Overlay Weaver (Japanese)
こんにちは、驟雨です。

Overlay Weaverで使われているUPnPライブラリ「CyberLink」ですが、対応していないルータが結構あるみたいで、以前
Genkidamaを作っていた時に困っていたんですが、Cで書かれている「miniupnpc」というライブラリだと比較的うまく動く事が多いような
のでこれに置き換えるコードを書いてみました:
http://syuu.dokukino.com/ow-miniupnpc.diff

ライブラリはこちらにあります:
http://syuu.dokukino.com/miniupnpc.jar

ちなみに、このJava bindingは近々miniupnpcのコードへマージされると思います:
http://d.hatena.ne.jp/syuu1228/20100316/1268737011

如何でしょうか。

Kazuyuki Shudo

unread,
Mar 20, 2010, 6:33:44 AM3/20/10
to overlayw...@googlegroups.com
驟雨さん、首藤です。

ありがとうございます。

CyberLink から MiniUPnP に置き換えることを考えると、悩ましいのが、
CyberLink は Java だけで書かれていて、
MiniUPnP は C で書かれている → プラットフォーム依存 、っていう点です。

御用意頂いた JAR ファイルに入っている共有ライブラリも
Linux/x86, Win32 用の 2種類ですし:

30140 Tue Mar 16 11:45:06 JST 2010 libraries/Linux-i386/libminiupnpc.so
71160 Tue Mar 16 12:23:04 JST 2010 libraries/win32/miniupnpc.dll

MiniUPnP の方が CyberLink よりうまく動くとしたら、
その理由を探って Java で書きたいところです。
UPnP 実装の互換性が、今、どういう状況になっているかわかりませんが、
少し前は、UPnP 対応機器が吐く / 受け付ける XML ドキュメントの
ある個所に空白が入ったり入らなかったりしてました。
そういう違いにライブラリ側が対応してるか否かが、
うまく動くか否かの違いとして現れる、と理解してます。

余談ですけど、JNAerator が生成する共有ライブラリ入り JAR ファイルには、
これだけの糊付けライブラリ↓が入るんですね。
JNAerator は、これだけのプラットフォームに対応してる、と。

133149 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/freebsd-amd64/libjnidispatch.so
116905 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/freebsd-i386/libjnidispatch.so
182220 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/linux-amd64/libjnidispatch.so
136883 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/linux-i386/libjnidispatch.so
294663 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/linux-ia64/libjnidispatch.so
149552 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-amd64/libjnidispatch.so
124424 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-x86/libjnidispatch.so
151392 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-sparc/libjnidispatch.so
180496 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-sparcv9/libjnidispatch.so
196608 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/win32-amd64/jnidispatch.dll
347258 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/win32-x86/jnidispatch.dll

首藤一幸


> Message-ID: <34ccdca9-5ff2-4764...@w9g2000prb.googlegroups.com>
> From: syuu <uram...@gmail.com>
> Date: Tue, 16 Mar 2010 20:59:38 -0700 (PDT)

syuu

unread,
Mar 23, 2010, 4:40:13 AM3/23/10
to overlayw...@googlegroups.com
首藤先生

驟雨です。

On 2010/03/20, at 19:33, Kazuyuki Shudo wrote:

> 驟雨さん、首藤です。
>
> ありがとうございます。
>
> CyberLink から MiniUPnP に置き換えることを考えると、悩ましいのが、
> CyberLink は Java だけで書かれていて、
> MiniUPnP は C で書かれている → プラットフォーム依存 、っていう点です。
>
> 御用意頂いた JAR ファイルに入っている共有ライブラリも
> Linux/x86, Win32 用の 2種類ですし:
>
> 30140 Tue Mar 16 11:45:06 JST 2010 libraries/Linux-i386/libminiupnpc.so
> 71160 Tue Mar 16 12:23:04 JST 2010 libraries/win32/miniupnpc.dll

あと、私が入れ忘れていなければMacOS X向けのも入れたつもりです。

> MiniUPnP の方が CyberLink よりうまく動くとしたら、
> その理由を探って Java で書きたいところです。
> UPnP 実装の互換性が、今、どういう状況になっているかわかりませんが、
> 少し前は、UPnP 対応機器が吐く / 受け付ける XML ドキュメントの
> ある個所に空白が入ったり入らなかったりしてました。
> そういう違いにライブラリ側が対応してるか否かが、
> うまく動くか否かの違いとして現れる、と理解してます。

はい、要するに如何に多くのルータが認識できるXMLを喋るかというだけの問題だと思います。
が、miniupnpcとなるべく同じように喋る改変版CyberLinkを実装した場合、本当にそうなっているかどうか多数のルータ上で新しい実装をテストしなければ本当に動くとは言い切れず、これをやるのはちょっと大変なので私は避けたいな…などと思っています。
流石にデバイスIDで条件分岐して個別対応用のXMLを送る、というようなコードは入ってないので、それ程大掛かりなものではないような気もするのですが…。

> 余談ですけど、JNAerator が生成する共有ライブラリ入り JAR ファイルには、
> これだけの糊付けライブラリ↓が入るんですね。
> JNAerator は、これだけのプラットフォームに対応してる、と。
>
> 133149 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/freebsd-amd64/libjnidispatch.so
> 116905 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/freebsd-i386/libjnidispatch.so
> 182220 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/linux-amd64/libjnidispatch.so
> 136883 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/linux-i386/libjnidispatch.so
> 294663 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/linux-ia64/libjnidispatch.so
> 149552 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-amd64/libjnidispatch.so
> 124424 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-x86/libjnidispatch.so
> 151392 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-sparc/libjnidispatch.so
> 180496 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/sunos-sparcv9/libjnidispatch.so
> 196608 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/win32-amd64/jnidispatch.dll
> 347258 Tue Mar 16 12:23:04 JST 2010 com/sun/jna/win32-x86/jnidispatch.dll

miniupnpc自体はポータブルなので、コンパイル環境さえ用意すればこれと同じアーキテクチャに対応する事は可能だと思います。
環境揃えて全てコンパイルするのがちょっと大変ですが…(特にSolaris。x86でsparcのクロスビルドとか無事に出来るんですかね…
Webサイトではこんな風に謳ってます:
The MiniUPnP client (MiniUPnPc) and MiniSSDPd are portable and should work on any POSIX system. MiniUPnPc also works under MS Windows and Amiga OS (version 3 and 4).

確かに全ての環境で動くものではないですが、ライブラリ自体はほぼポータブルでSunのJVMがある所ならどこでも動くので、「Javaではない」という本質的な問題以外はクリア出来るように思います。

skonno

unread,
Apr 1, 2010, 2:45:16 PM4/1/10
to Overlay Weaver (Japanese)
驟雨さん

今野、CyberLink 作者です。はじめまして。

#首藤さん、以前、パッチを送って頂いた際は、お世話になりました。

よろしければ、動作しなかったルーターの機種などを教えて頂くか、
こちらが指定する方式で、通信のログをとってもらえないでしょうか?

現象から推察すると、コアライブラリで解決できそうな問題ですので
こちらで解決させて頂きます。

ここからは、余談ですが ...

まず、UPnP仕様自体が、結構ゆるいので、それを補足する運用仕様として
IntelのNMPRや、DLNAなどの仕様が存在しているのですが ....

DLNAレベルでも、DLNA認証を通っていない製品が多く、こちらが
驚くような原因で動かない事が多々あります。多分に、実装者は
仕様すら見てない状況が多いです。

特に、UPnP GWに至っては、認証プロセスや実装のガイドラインすら
ないので、DLNAより酷い状況というのは、容易に推察できます。

> 確かに全ての環境で動くものではないですが、ライブラリ自体はほぼポータブルで
> SunのJVMがある所ならどこでも動くので、「Javaではない」という本質的-な問題
> 以外はクリア出来るように思います。

技術的には可能でも、現実的には対応できない問題もあるのかなと。

例 : 市販のAndroid携帯でJNIを利用したアプリは、Android
Marketでは公開できない

以上、ご参考下さい。

syuu

unread,
Apr 2, 2010, 4:45:14 AM4/2/10
to overlayw...@googlegroups.com
今野さん

はじめまして、驟雨です。

すみません、去年頃に色々試していたのですが、情報をきちんとまとめて残しておかなかったので手元に残ってません。
手元に7,8種類くらいルータがあるので改めて順に試してみようかと思いますが、不具合があったルータには知人の家にあるものが含まれていたように思うので、それだけではカバーしきれてないような気がします。

理想的には広く出回っていると思われるルータを一通りテストするのが良いと思うのですが…中々難しいですよね。
#NTT東西のレンタルルータを一時的に借りてテスト出来る場所とかないんですかねぇ

> --
> To unsubscribe, reply using "remove me" as the subject.

Satoshi Konno

unread,
Apr 2, 2010, 11:41:46 AM4/2/10
to overlayw...@googlegroups.com
驟雨さん

今野です。

ちょっと、こちらもテストユニットを組みがてら、手持ちのルーターで
色々と試してみる事にします。

#過去の記憶だど、LinkSysやマイクロソフト製のルーターで不具合が
#あって、対処した記憶があります。

> 理想的には広く出回っていると思われるルータを一通りテストするのが良いと思うのですが…中々難しいですよね。
> #NTT東西のレンタルルータを一時的に借りてテスト出来る場所とかないんですかねぇ

DLNAだと定期的にベンダーが集まる機会があるんですが .....
ルーターは、ある程度個別に検証環境の構築が必要となりそうですね。


--
Satoshi Konno
http://www.cybergarage.org

Reply all
Reply to author
Forward
0 new messages