[SIP]libreを使用してINVITEを行う



SIPは電話(=通話)用途に主に使用されています。しかしながら、SIP(RFC3261)で定義されているのはセッションの開始と、通信情報の交換手段のみです。
通話用途であれば、多くのフリーウェアが出ておりすぐに扱えるのですが、SIPを端末間の通信開始処理に使いたい場合は、情報や小規模のライブラリが少なく非常に難しく感じました。
この記事では小規模に通信プロトコルをまとめたlibreを使用してSIPセッション開始処理について記載します。
1.環境

 OS:Windows10
 コンパイラ:VisualStudio2010

2.libreの入手
 http://creytiv.com/pub/からlibreの最新版及びサンプルコードを入手します。
 この記事を書いた時には以下が最新版でした。
 
 http://creytiv.com/pub/re-0.4.14.tar.gz
 http://creytiv.com/pub/redemo-0.4.1.tar.gz
3.ソースコードの展開
 ダウンロードした各ソースコードをlhaplusなどで展開します。
 libreにはVisualStudio用のプロジェクトファイルも含まれています。
 以下が該当します。
 

mk\win32

 
4.プロジェクトの作成
VisualStudio2015を使用してSIPデモアプリ用のプロジェクトを作成します。
(1)[ファイル] - [新規作成] - [プロジェクト]を選択します。
(2)テンプレート内の[VisualC++]-[Win32]-[Win32コンソールアプリケーション]を選択します。
(3)名前に"libre_SIP_DEMO"を入力し、OKを選択します。
(4)アプリケーションの設定で「空のプロジェクトにチェックを入れます。」
001.png

(5)完了を押します。
(6)redemo-0.4.1内のsrc\sip_ua\sip_ua.cをプロジェクトにコピーします。
(7)re-0.4.14をソリューションディレクトリにコピーします。
(8)libre_SIP_DEMOのソースファイルにsip_ua.cを追加します。
(9)ソリューションにre-0.4.14内のプロジェクト「mk\win32\re.vcproj」を追加します。
 ここではre-0.4.14のディレクトリをlibreとしています。
(10)libre_SIP_DEMOのプロジェクトのプロパティを以下のように変更します・
 [構成プロパティ]-[全般]
  ・文字セット - 設定無し
 [C/C++]-[全般]
  ・追加インクルードディレクトリ

   ..\\libre\include;

   を追加
 [リンカー]-[全般]
  ・追加ライブラリディレクトリに以下を追加

    $(SolutionDir)$(Configuration)\

   を追加
 [リンカー]-[入力]
  ・追加依存ライブラリ

   Iphlpapi.lib;Ws2_32.lib;libre.lib;

   を追加
(11)re-win32のプロジェクトプロパティを以下のように変更します。
 [構成プロパティ]-[全般]
  ・出力ディレクトリ - $(SolutionDir)$(Configuration)   ・中間ディレクトリ - $(Configuration)  [C/C++]-[プリプロセッサ]
  プリプロセッサに以下を追加します。

  _WIN32_WINNT=0x0501;WIN32_LEAN_AND_MEAN;

(12)re-win32のプロジェクト内のSIPに不足している以下のファイルを追加します。
 ・src\msg\ctype.c
 ・src\msg\param.c
5.libreの修正
libreはWindowsの動作をサポートしていますが、いくつか修正が必要となります。
修正点は以下となります。

・ソケット番号の管理方法が正しくない
・ファイル名が重複しているためすべてのオブジェクトを同時にリンクできない
・inet_pton/inet_ntopの定義が重複する

修正箇所が多いので添付ファイルを参照してください。
6.プロジェクトのコンパイル
 libre_SIP_DEMOをコンパイルすればSIPのINVITE動作を確認できます。
 sip_uc.cの接続先、ユーザーID、パスワードを確認環境に合わせて適宜修正してください。
7.ダウンロード
サンプルコードは以下からダウンロードしてください。
 ダウンロード

0 件のコメント :

コメントを投稿