「Asterisk pjsip」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(エンドポイント(電話機))
(Wizard)
(3人の利用者による、間の58版が非表示)
4行目: 4行目:
 
AsiteriskでチャネルにPjSIPを使用する際の設定方法など
 
AsiteriskでチャネルにPjSIPを使用する際の設定方法など
 
==コンパイル==
 
==コンパイル==
Asterisk 13以前ではpjprojectを別個インストールするか、configureに--with-pjproject-bundledを付けて実行する必要がありましたが、Asterisk 16からはデフォルトでbundledインストールされるようになりました。<BR>
+
Asterisk 13まではpjprojectを別個インストールするか、configureに--with-pjproject-bundledを付けて実行する必要がありましたが、Asterisk 16からはデフォルトでbundledインストールされるようになりました。<BR>
 
各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。<BR>
 
各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。<BR>
 
[[Asterisk 13]]<BR>
 
[[Asterisk 13]]<BR>
 
[[Asterisk 16]]<BR>
 
[[Asterisk 16]]<BR>
 +
 +
==変換ツール==
 +
Asterisk 13以降であれば ソースディレクトリ/contrib/scripts/sip_to_pjsip の下にPythonのスクリプトがあります(複数)。sip.confのあるディレクトリでこれを実行するとpjsip.confに変換してくれます。#includeしている場合にはそれらも変換してくれますが、完璧ではないです。
 +
==Asterisk 16以降における注意点==
 +
PjSIPはres_statsd.soに依存します。このためres_statsdがloadされていないと、res_pjsipがloadされない問題が発生します。<BR>
 +
(Asterisk 16ではモジュールの依存関係チェックが厳密化されています)<BR>
 +
res_statsdモジュールはstatsd.confファイルが無いとloadされないため、statsd.confファイルが無いだけで、PjSIPが使えないという困った状態になります。ソースファイルに含まれる statsd.conf.sample を /etc/asterisk/statsd.conf にコピーしておいてください。もっとも、このファイルはコメントされた行だけなので要するに空なのですが。
 +
 +
==パラメータ一覧==
 +
[[Asterisk pjsip parameters]]
 +
 
==基本設定==
 
==基本設定==
 +
*間違いやすいところ
 +
:sip.confでは1wordだったのがアンダーバーが入る
 +
:dtmfmode → dtmf_mode
 +
:fromdomain → from_domain
 
===グローバル設定===
 
===グローバル設定===
pjsip.confに書きます。基本で必要なものは以下です。
+
設定は基本としてはpjsip.confに書きます。<BR>
  [general]
+
*[[Asterisk_pjsip_parameters#GLOBAL]]<BR>
  maxexpirey = 3600
+
グローバル設定を使用する場合にはtype=globalのセクションを書きます。<BR>
 +
  <nowiki>[global]
 +
type=global
 +
max_forwards = 50</nowiki>
 +
SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。<BR>
 +
*[[Asterisk_pjsip_parameters#SYSTEM]]<BR>
 +
 
 +
===インクルード===
 +
Asteriskの他の設定ファイル同様に#includeが使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかもしれません。例えば<BR>
 +
  [transport-udp]
 +
type = transport
 +
protocol = udp
 +
bind = 0.0.0.0:5070
 
   
 
   
 +
#include pjsip_phones.conf
 +
#include pjsip_trunk_hikari.conf
 +
のようにファイルを分割し、includeすると管理が楽になります。
 +
 +
基本で必要なものは以下です。
 +
 +
===トランスポート===
 
  [transport-udp]
 
  [transport-udp]
 
  type = transport
 
  type = transport
19行目: 53行目:
 
  bind = 0.0.0.0:5070
 
  bind = 0.0.0.0:5070
 
sip.confに書いていたものと同じですが、トランスポートはセクションで明示指定します。上の例では5070ポートにbindさせていますが、5060を使用する場合にはここを5060にします。<BR>
 
sip.confに書いていたものと同じですが、トランスポートはセクションで明示指定します。上の例では5070ポートにbindさせていますが、5060を使用する場合にはここを5060にします。<BR>
なお、他の設定ファイル同様に#includeは使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかも。<BR>
 
Wizardおよびテンプレート(!)も使えます。
 
  
 
===ACL===
 
===ACL===
27行目: 59行目:
 
  type=acl
 
  type=acl
 
  deny=0.0.0.0/0.0.0.0
 
  deny=0.0.0.0/0.0.0.0
  permit=192.168.0.0/255.255.0.0
+
  permit=192.168.0.0/16
※deny,permitはこの順でないとpermitしてdenyしてしまう模様で、逆に書くと誰も使えなくなります。
+
※deny,permitはこの順でないとpermitしてdenyしてしまう模様で、逆に書くと誰も使えなくなります。<BR>
 +
<BR>
 +
pjsip.confに複数のACL(type=acl)を書くとそのセクション名にかかわらず後ろにあるACLの方が勝つ模様。<BR>
 +
[acl]
 +
type=acl
 +
deny=0.0.0.0/0.0.0.0
 +
permit=192.168.0.0/16
 +
 +
[acl-my]
 +
type=acl
 +
deny=0.0.0.0/0.0.0.0
 +
permit=10.10.0.0/16
 +
と、書くとacl-myが勝つので要注意です。複数を許可したい場合には1セクションで
 +
[acl]
 +
type=acl
 +
deny=0.0.0.0/0.0.0.0
 +
permit=192.168.0.0/16
 +
permit=10.10.0.0/16
 +
のように書きます。<BR>
 +
*[[Asterisk_pjsip_parameters#ACL.28res_pjsip_acl.29]]
 +
→[[Asterisk pjsip ACL]]
  
===エンドポイント(電話機)===
+
===認証情報(Auth)===
エンドポイントを設定する場合にはセクションが3つ必要です。エンドポイントそれ自体とaor,authの3つです。
+
sip_confではピア(エンドポイント)の認証がわかりにくかったのですが、PjSIPでは別なセクションで(type=auth)認証情報を定義するようになりました。このため、認証情報がピア名(sip.confの[ ])に紐付かなくなりました。<BR>
  [phone1]
+
慣れないとわかりにくい感じがしますが、管理がより柔軟になります。例えば
  type = aor
+
  [some-phone]
  max_contacts = 1
+
  type = endpoint
  qualify_frequency = 30
+
  .
  authenticate_qualify = no
+
.
+
.
  [phone1]
+
  auth = phone-auth
 +
  outbound_auth = phone-out-auth
 +
のようなendpointが定義されている場合には、2つのauthセクションが必要です。
 +
  [phone-auth]
 
  type = auth
 
  type = auth
  username = phone3
+
  username = phone123
  password = mysecretpassword
+
  password = phonepassword
 +
このAuthは'[some-phone]'エンドポイントに接続、つまり外からの"入り"の際の認証情報です。<BR>
 +
[phone-out-auth]
 +
 +
このAuthはoutbound_authで設定されているので、このエンドポイントからの"出"の際の認証情報です。<BR>
 +
 
 +
==電話機==
 +
電話機の接続は [[Asterisk pjsip 電話機]] のページへ
 +
==トランク==
 +
回線接続側は [[Asterisk pjsip trunks]]のページへ
 +
 
 +
==Wizard==
 +
Asteriskにはpjsip_wizardが組み込まれており、PjSIPの設定を簡素化することができます。使う場合の条件は以下の通りです。
 +
*基本の設定はpjsip.confに書く
 +
:transportなどの情報はpjsip.confに書く必要があります
 +
*Wizard用のファイル名はpjsip_wizard.conf
 +
*共通化したテンプレート内で各セクションを指定するにはスラッシュ(/)で区切る
 +
*Wizardは電話機でもトランクでも使用できる
 +
:registration/を書くとregistrationセクションがつくられる
 +
記述例:
 +
:endpoint/context=mycontext
 +
:endpoint/dtmf_mode
 +
:aor/max_contacts = 1
 +
pjsip_wizard.confの記述例
 +
;電話機用テンプレート(共通設定)
 +
[phone-defaults](!)
 +
type=wizard
 +
transport = transport-udp
 +
accepts_registrations = yes
 +
sends_registrations = no
 +
accepts_auth = yes
 +
sends_auth = no
 +
endpoint/context = default
 +
endpoint/dtmf_mode = rfc4733
 +
endpoint/call_group = 1
 +
endpoint/pickup_group = 1
 +
endpoint/language = ja
 +
endpoint/disallow = all
 +
endpoint/allow = ulaw
 +
endpoint/rtp_symmetric = yes
 +
endpoint/force_rport = yes
 +
endpoint/direct_media = no
 +
endpoint/send_pai = yes
 +
endpoint/send_rpid = yes
 +
endpoint/rewrite_contact = yes
 +
endpoint/inband_progress = yes
 +
endpoint/allow_subscribe = yes
 +
endpoint/transport = transport-udp
 +
aor/max_contacts = 1
 +
aor/qualify_frequency = 30
 +
aor/authenticate_qualify = no
 
   
 
   
  [phone1]
+
;各電話機個別設定
  type = endpoint
+
  [phone1](phone-defaults)
  context = default
+
inbound_auth/username = phone1
  transport=transport-udp
+
  inbound_auth/password = mypasswordishere
  dtmf_mode = rfc4733
+
 
  disallow = all
+
==CLIコマンド==
  allow = ulaw
+
*sip show peersに対応するのはpjsip show endpoints
  allow = alaw
+
*sip show peer phone1などピア情報を表示するのはpjsip show endpoint phone1
  rtp_symmetric = yes
+
*AORを表示するのは一覧ならpjsip show aorsでピアの情報を表示するのはpjsip show aor phone1のようにする
  force_rport = yes
+
*それぞれの設定項目で何が設定されているかを確認するには pjsip show endpoint phone1 のようにすると phone1 の endpoint パラメータ一覧が表示される。aorを見たければ pjsip show aor phone1。これはトランクの場合も同様で pjsip show registration hikari-hgw のようにするとregister関係のパラメータがみえる。
  rewrite_contact = yes
+
===デバッグ===
  direct_media = no
+
chan_sipのsip debug代わりに使えるのは、pjsip debug history。SIPメッセージの確認はこちらの方が簡単かも。
  send_pai = yes
+
 
  inband_progress = yes
+
ヒストリをクリア
  call_group = 1
+
  *CLI> pjsip set history clear
  pickup_group = 1
+
PJSIP History cleared
  language = ja
+
 
  device_state_busy_at = 1
+
ヒストリをONに設定
  auth = phone1
+
*CLI> pjsip set history on
  outbound_auth = phone1
+
PJSIP History enable
  aors = phone1
+
 
 +
なんかやる
 +
 
 +
ヒストリをOFFに設定
 +
*CLI> pjsip set history off
 +
PJSIP History disabled
 +
 
 +
ヒストリをみる
 +
*CLI> pjsip show history
 +
No.  Timestamp  (Dir) Address                  SIP Message
 +
===== ========== ============================== ===================================
 +
  00047 1620781794 * <== 192.168.254.10:5060      INVITE sip:201@192.168.254.234:5070 SIP/2.0
 +
00048 1620781794 * ==> 192.168.254.10:5060      SIP/2.0 401 Unauthorized
 +
00049 1620781794 * <== 192.168.254.10:5060      ACK sip:201@192.168.254.234:5070 SIP/2.0
 +
00050 1620781794 * <== 192.168.254.10:5060      INVITE sip:201@192.168.254.234:5070 SIP/2.0
 +
00051 1620781794 * ==> 192.168.254.10:5060      SIP/2.0 100 Trying
 +
00052 1620781794 * ==> 192.168.254.3:5060      INVITE sip:phone1@192.168.254.3:5060 SIP/2.0
 +
00053 1620781794 * <== 192.168.254.3:5060      SIP/2.0 100 Trying
 +
  00054 1620781795 * ==> 192.168.254.4:5060      OPTIONS sip:phone6@192.168.254.4:5060 SIP/2.0
 +
  00055 1620781795 * <== 192.168.254.4:5060      SIP/2.0 200 OK
 +
  00056 1620781796 * <== 192.168.254.3:5060      SIP/2.0 180 Ringing
 +
  00057 1620781796 * ==> 192.168.254.10:5060      SIP/2.0 183 Session Progress
 +
  00058 1620781797 * <== 192.168.254.3:5060      SIP/2.0 200 OK
 +
  00059 1620781797 * ==> 192.168.254.3:5060      ACK sip:phone1@192.168.254.3:5060 SIP/2.0
 +
  00060 1620781797 * ==> 192.168.254.10:5060      SIP/2.0 200 OK
 +
  00061 1620781797 * <== 192.168.254.10:5060      ACK sip:192.168.254.234:5070 SIP/2.0
 +
  00062 1620781799 * <== 192.168.254.3:5060      BYE sip:asterisk@192.168.254.234:5070 SIP/2.0
 +
  00063 1620781799 * ==> 192.168.254.3:5060      SIP/2.0 200 OK
 +
  00064 1620781799 * ==> 192.168.254.10:5060      BYE sip:phone3@192.168.254.10:5060 SIP/2.0
 +
  00065 1620781799 * <== 192.168.254.10:5060      SIP/2.0 200 OK
 +
 
 +
特定のメッセージを確認する
 +
*CLI> pjsip show history entry 56
 +
<--- History Entry 56 Received from 192.168.254.3:5060 at 1620781796 --->
 +
SIP/2.0 180 Ringing
 +
  Via: SIP/2.0/UDP 192.168.254.234:5070;rport=5070;received=192.168.254.234;branch=z
 +
Call-ID: fd5b758b-06e4-48cf-97e9-c815623ba9af
 +
  From: "203" <sip:203@192.168.254.234>;tag=bedf1400-19fc-4c8d-80c2-f7a280ca9978
 +
  To: <sip:phone1@192.168.254.3>;tag=1946423440
 +
CSeq: 4197 INVITE
 +
Allow: INVITE, ACK, CANCEL, BYE, INFO, UPDATE, OPTIONS, MESSAGE, NOTIFY, REFER
 +
Contact: <sip:phone1@192.168.254.3:5060>
 +
Server: Panasonic-KX-HDV330N/02.504 (bcc3423c1e0c)
 +
Content-Length: 0
 +
Content-Length:  0
 +
 
 +
chan_sipのようにダラダラ出したい場合は
 +
*CLI> pjsip set logger on
 +
 
 +
==挙動上の注意点==
 +
===挙動そのもの===
 +
chan_sipより制限が少し"きつい"です。SIPメッセージの中に少しおかしなものがあってもchan_sipでは制限が緩かったので、通っていたものがPjSIPでは通らないことがあります。CLI等で'syntax error'のようなメッセージが出る場合にはSIPメッセージにおかしなところがあるかもしれないので調べてください。
 +
===AddHeader===
 +
chan_sipの場合にはSIPAddHeaderでSIPヘッダを追加できましたが、PjSIPではファンクションPJSIP_HEDER()を使用します。ただしこのファンクションはextenの途中で使用しても効果がありません。Dial時にサブルーチンコールしてやる必要があります。<BR>
 +
例えばAlert-Info: hogeを追加するにはまず以下のよなルーチンを定義します。
 +
[add-alert]
 +
exten => s,1,Set(PJSIP_HEADER(add,Alert-Info)=hoge)
 +
  exten => s,n,Return
 +
Dial時に以下のようにしてコールします
 +
  exten => 201,1,Dial(PJSIP/201,,b(add-alert,s,1))
 +
 
 +
==設定変更の反映==
 +
*モジュール数が多すぎて一発リロードする方法がよくわからない
 +
*module reload res_pjsip.soを実行すれば"だいたい"はいけそう
 +
:wizardのaor/を変更しても反映されない場合がある
 +
==PjSIPで拡張される機能==
 +
[[pjsip_機能拡張]]

2023年12月21日 (木) 17:38時点における版


AsiteriskでチャネルにPjSIPを使用する際の設定方法など

コンパイル

Asterisk 13まではpjprojectを別個インストールするか、configureに--with-pjproject-bundledを付けて実行する必要がありましたが、Asterisk 16からはデフォルトでbundledインストールされるようになりました。
各バージョン毎のインストール方法についてはAsteriskのそれぞれのページを参照してください。
Asterisk 13
Asterisk 16

変換ツール

Asterisk 13以降であれば ソースディレクトリ/contrib/scripts/sip_to_pjsip の下にPythonのスクリプトがあります(複数)。sip.confのあるディレクトリでこれを実行するとpjsip.confに変換してくれます。#includeしている場合にはそれらも変換してくれますが、完璧ではないです。

Asterisk 16以降における注意点

PjSIPはres_statsd.soに依存します。このためres_statsdがloadされていないと、res_pjsipがloadされない問題が発生します。
(Asterisk 16ではモジュールの依存関係チェックが厳密化されています)
res_statsdモジュールはstatsd.confファイルが無いとloadされないため、statsd.confファイルが無いだけで、PjSIPが使えないという困った状態になります。ソースファイルに含まれる statsd.conf.sample を /etc/asterisk/statsd.conf にコピーしておいてください。もっとも、このファイルはコメントされた行だけなので要するに空なのですが。

パラメータ一覧

Asterisk pjsip parameters

基本設定

  • 間違いやすいところ
sip.confでは1wordだったのがアンダーバーが入る
dtmfmode → dtmf_mode
fromdomain → from_domain

グローバル設定

設定は基本としてはpjsip.confに書きます。

グローバル設定を使用する場合にはtype=globalのセクションを書きます。

[global]
type=global
max_forwards = 50

SIPの基本パラメータやPjSIPの動作に関わるパラメータはSystemで設定します。

インクルード

Asteriskの他の設定ファイル同様に#includeが使えます。なので、電話機と回線は別ファイルにした方が見通しは良いかもしれません。例えば

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5070

#include pjsip_phones.conf
#include pjsip_trunk_hikari.conf

のようにファイルを分割し、includeすると管理が楽になります。

基本で必要なものは以下です。

トランスポート

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:5070

sip.confに書いていたものと同じですが、トランスポートはセクションで明示指定します。上の例では5070ポートにbindさせていますが、5060を使用する場合にはここを5060にします。

ACL

ACLの例は次の通りです。

[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/16

※deny,permitはこの順でないとpermitしてdenyしてしまう模様で、逆に書くと誰も使えなくなります。

pjsip.confに複数のACL(type=acl)を書くとそのセクション名にかかわらず後ろにあるACLの方が勝つ模様。

[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/16

[acl-my]
type=acl
deny=0.0.0.0/0.0.0.0
permit=10.10.0.0/16

と、書くとacl-myが勝つので要注意です。複数を許可したい場合には1セクションで

[acl]
type=acl
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/16
permit=10.10.0.0/16

のように書きます。

Asterisk pjsip ACL

認証情報(Auth)

sip_confではピア(エンドポイント)の認証がわかりにくかったのですが、PjSIPでは別なセクションで(type=auth)認証情報を定義するようになりました。このため、認証情報がピア名(sip.confの[ ])に紐付かなくなりました。
慣れないとわかりにくい感じがしますが、管理がより柔軟になります。例えば

[some-phone]
type = endpoint
.
.
.
auth = phone-auth
outbound_auth = phone-out-auth

のようなendpointが定義されている場合には、2つのauthセクションが必要です。

[phone-auth]
type = auth
username = phone123
password = phonepassword

このAuthは'[some-phone]'エンドポイントに接続、つまり外からの"入り"の際の認証情報です。

[phone-out-auth]
略

このAuthはoutbound_authで設定されているので、このエンドポイントからの"出"の際の認証情報です。

電話機

電話機の接続は Asterisk pjsip 電話機 のページへ

トランク

回線接続側は Asterisk pjsip trunksのページへ

Wizard

Asteriskにはpjsip_wizardが組み込まれており、PjSIPの設定を簡素化することができます。使う場合の条件は以下の通りです。

  • 基本の設定はpjsip.confに書く
transportなどの情報はpjsip.confに書く必要があります
  • Wizard用のファイル名はpjsip_wizard.conf
  • 共通化したテンプレート内で各セクションを指定するにはスラッシュ(/)で区切る
  • Wizardは電話機でもトランクでも使用できる
registration/を書くとregistrationセクションがつくられる

記述例:

endpoint/context=mycontext
endpoint/dtmf_mode
aor/max_contacts = 1

pjsip_wizard.confの記述例

;電話機用テンプレート(共通設定)
[phone-defaults](!)
type=wizard
transport = transport-udp
accepts_registrations = yes
sends_registrations = no
accepts_auth = yes
sends_auth = no
endpoint/context = default
endpoint/dtmf_mode = rfc4733
endpoint/call_group = 1
endpoint/pickup_group = 1
endpoint/language = ja
endpoint/disallow = all
endpoint/allow = ulaw
endpoint/rtp_symmetric = yes
endpoint/force_rport = yes
endpoint/direct_media = no
endpoint/send_pai = yes
endpoint/send_rpid = yes
endpoint/rewrite_contact = yes
endpoint/inband_progress = yes
endpoint/allow_subscribe = yes
endpoint/transport = transport-udp
aor/max_contacts = 1
aor/qualify_frequency = 30
aor/authenticate_qualify = no

;各電話機個別設定
[phone1](phone-defaults)
inbound_auth/username = phone1
inbound_auth/password = mypasswordishere

CLIコマンド

  • sip show peersに対応するのはpjsip show endpoints
  • sip show peer phone1などピア情報を表示するのはpjsip show endpoint phone1
  • AORを表示するのは一覧ならpjsip show aorsでピアの情報を表示するのはpjsip show aor phone1のようにする
  • それぞれの設定項目で何が設定されているかを確認するには pjsip show endpoint phone1 のようにすると phone1 の endpoint パラメータ一覧が表示される。aorを見たければ pjsip show aor phone1。これはトランクの場合も同様で pjsip show registration hikari-hgw のようにするとregister関係のパラメータがみえる。

デバッグ

chan_sipのsip debug代わりに使えるのは、pjsip debug history。SIPメッセージの確認はこちらの方が簡単かも。

ヒストリをクリア

*CLI> pjsip set history clear
PJSIP History cleared

ヒストリをONに設定

*CLI> pjsip set history on
PJSIP History enable

なんかやる

ヒストリをOFFに設定

*CLI> pjsip set history off
PJSIP History disabled

ヒストリをみる

*CLI> pjsip show history
No.   Timestamp  (Dir) Address                  SIP Message
===== ========== ============================== ===================================
00047 1620781794 * <== 192.168.254.10:5060      INVITE sip:201@192.168.254.234:5070 SIP/2.0
00048 1620781794 * ==> 192.168.254.10:5060      SIP/2.0 401 Unauthorized
00049 1620781794 * <== 192.168.254.10:5060      ACK sip:201@192.168.254.234:5070 SIP/2.0
00050 1620781794 * <== 192.168.254.10:5060      INVITE sip:201@192.168.254.234:5070 SIP/2.0
00051 1620781794 * ==> 192.168.254.10:5060      SIP/2.0 100 Trying
00052 1620781794 * ==> 192.168.254.3:5060       INVITE sip:phone1@192.168.254.3:5060 SIP/2.0
00053 1620781794 * <== 192.168.254.3:5060       SIP/2.0 100 Trying
00054 1620781795 * ==> 192.168.254.4:5060       OPTIONS sip:phone6@192.168.254.4:5060 SIP/2.0
00055 1620781795 * <== 192.168.254.4:5060       SIP/2.0 200 OK
00056 1620781796 * <== 192.168.254.3:5060       SIP/2.0 180 Ringing
00057 1620781796 * ==> 192.168.254.10:5060      SIP/2.0 183 Session Progress
00058 1620781797 * <== 192.168.254.3:5060       SIP/2.0 200 OK
00059 1620781797 * ==> 192.168.254.3:5060       ACK sip:phone1@192.168.254.3:5060 SIP/2.0
00060 1620781797 * ==> 192.168.254.10:5060      SIP/2.0 200 OK
00061 1620781797 * <== 192.168.254.10:5060      ACK sip:192.168.254.234:5070 SIP/2.0
00062 1620781799 * <== 192.168.254.3:5060       BYE sip:asterisk@192.168.254.234:5070 SIP/2.0
00063 1620781799 * ==> 192.168.254.3:5060       SIP/2.0 200 OK
00064 1620781799 * ==> 192.168.254.10:5060      BYE sip:phone3@192.168.254.10:5060 SIP/2.0
00065 1620781799 * <== 192.168.254.10:5060      SIP/2.0 200 OK

特定のメッセージを確認する

*CLI> pjsip show history entry 56
<--- History Entry 56 Received from 192.168.254.3:5060 at 1620781796 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.254.234:5070;rport=5070;received=192.168.254.234;branch=z
Call-ID: fd5b758b-06e4-48cf-97e9-c815623ba9af
From: "203" <sip:203@192.168.254.234>;tag=bedf1400-19fc-4c8d-80c2-f7a280ca9978
To: <sip:phone1@192.168.254.3>;tag=1946423440
CSeq: 4197 INVITE
Allow: INVITE, ACK, CANCEL, BYE, INFO, UPDATE, OPTIONS, MESSAGE, NOTIFY, REFER
Contact: <sip:phone1@192.168.254.3:5060>
Server: Panasonic-KX-HDV330N/02.504 (bcc3423c1e0c)
Content-Length: 0
Content-Length:  0

chan_sipのようにダラダラ出したい場合は

*CLI> pjsip set logger on

挙動上の注意点

挙動そのもの

chan_sipより制限が少し"きつい"です。SIPメッセージの中に少しおかしなものがあってもchan_sipでは制限が緩かったので、通っていたものがPjSIPでは通らないことがあります。CLI等で'syntax error'のようなメッセージが出る場合にはSIPメッセージにおかしなところがあるかもしれないので調べてください。

AddHeader

chan_sipの場合にはSIPAddHeaderでSIPヘッダを追加できましたが、PjSIPではファンクションPJSIP_HEDER()を使用します。ただしこのファンクションはextenの途中で使用しても効果がありません。Dial時にサブルーチンコールしてやる必要があります。
例えばAlert-Info: hogeを追加するにはまず以下のよなルーチンを定義します。

[add-alert]
exten => s,1,Set(PJSIP_HEADER(add,Alert-Info)=hoge)
exten => s,n,Return

Dial時に以下のようにしてコールします

exten => 201,1,Dial(PJSIP/201,,b(add-alert,s,1))

設定変更の反映

  • モジュール数が多すぎて一発リロードする方法がよくわからない
  • module reload res_pjsip.soを実行すれば"だいたい"はいけそう
wizardのaor/を変更しても反映されない場合がある

PjSIPで拡張される機能

pjsip_機能拡張