引き続きLinphoneの暗号化通信について。前回、WindowsのLinphoneでZRTPは使えるようになったけど、DTLSは使えなかったのでいろいろ試してみた。結果的には失敗したけど、メモっておく。
まず、そもそもLinphoneコンパイル時にDTLSを有効にするためのオプションが失敗するので、それを何とかするためにPolarSSLの再コンパイルを試してみた。いろいろ調べた結果、ここを参考にしてPolarSSLのコードをゲットできたが、コンパイルが通らない。ちなみにコードは以下のGitコマンドで取得した。
git clone git://git.linphone.org/polarssl -b linphone-1.4
コンパイルのエラーは2か所、どちらも同じマクロ関連。どうやらWindowsのバージョンを管理しているあたりで起きていたので、今回はもうソースを直接弄って強制的にWindowsのデスクトップ用コンパイルが前提になるように修正した。具体的には、WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)を通らないようにコメントアウトしている。
net.c:
#if defined(WINAPI_FAMILY_PARTITION) && defined(WINAPI_PARTITION_APP)/* && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)*/
timing.c:
#define BUILD_FOR_WINDOWS_DESKTOP 1
/*
#if defined(__MINGW32__) || !defined(WINAPI_FAMILY_PARTITION) || !defined(WINAPI_PARTITION_DESKTOP) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#define BUILD_FOR_WINDOWS_DESKTOP 1
#else
#include #endif
*/
そこまで進めたら、今度はリンカのエラー。Winsock周りのエラーだったので、polarssl/libraryのMakeFileのLDFLAGに以下のコマンドを指定した。
LDFLAGS = -lwsock32 -lws2_32
ここまでやってようやくPolarSSLのコンパイルが通ったので、make;make installした後にLinphoneのConfigureを指定、そちらも無事にコンパイルは出来た。
./configure --prefix=/usr --enable-shared --disable-static --enable-zrtp --enable-dtls
これで、LinphoneのオプションのMedia encryption typeでDTLSを選択できるようになった。・・・ただ、実際にDTLSを使って通話しようとすると落ちる。しかも、普通にTLSの通話や登録も落ちるようになってしまい、どうしようもないのであきらめることに。ということで、残念ながらPolarSSLはもともとLinphoneに入っていたものを使うように戻したのでした。