開発者用 SIP 透過性および正規化ガイド
SIP 透過性
SIP 透過性
発行日;2012/02/26 | 英語版ドキュメント(2010/12/17 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 2MB) | フィードバック

目次

SIP 透過性

サポートされる機能

181 透過性の例

INFO 透過性の例

SIP 透過性

Cisco Unified CM は、Business to Business User Application(B2BUA; ビジネス ツー ビジネス ユーザ アプリケーション)です。このため、SIP から SIP への任意のコールが、2 つの SIP ダイアログで構成されます。これは、しばしばダイアログが継続している間に片方のダイアログから他方のダイアログへ情報を渡すのに便利です。これには、コール セットアップ メッセージング、ミッド コール メッセージング、およびコール終了メッセージングが含まれます。前述のパススルー オブジェクトを使用すれば、1 つの SIP ダイアログ(1 つのコール レッグを表す)から別の SIP ダイアログへと情報の透過的なパススルーをトリガーできます。

現在のところ、透過性は、2 つの SIP トランク間の INVITE ダイアログに制限されています。SIP 回線が含まれる場合、透過性はサポートされません。SUBSCRIBE ダイアログ、PUBLISH、アウト オブ ダイアログ REFER、アウト オブ ダイアログ Unsolicited NOTIFY はサポートされず、MESSAGE もサポートされません。

サポートされる機能

次のメッセージで、透過性がサポートされます。

開始 INVITE メッセージとその関連応答メッセージ

INVITE 応答メッセージ

180 応答メッセージ

183 応答メッセージ

200 応答メッセージ

4XX、5XX、6XX 応答メッセージ

reINVITE メッセージとその関連応答メッセージ

UPDATE メッセージ(UPDATE メッセージへの応答メッセージには透過性はサポートされていません)

INFO メッセージ(INFO メッセージへの応答メッセージには透過性はサポートされていません)

BYE メッセージ(BYE メッセージへの応答メッセージには透過性はサポートされていません)

次のメッセージでは、透過性はサポートされません。

ACK メッセージ

PRACK メッセージとその関連応答メッセージ

Rrplaces を持つ INVITE メッセージとその関連応答メッセージ

REFER メッセージとその関連応答メッセージ

通常、Cisco Unified CM は、次の情報(パラメータ、ヘッダー、およびコンテンツ本文)をローカルで処理します。これは、特定のコール レッグと関連しています。したがって、理解された SIP 情報はそこで使用され、他のコール レッグ(いずれにしても SIP でない場合もある)へと伝えられることはありません。これにより、Cisco Unified CM が、SIP と H.323、SIP と MGCP などのさまざまなプロトコルの相互運用をサポートすることが可能になります。Cisco Unified CM で理解されない SIP 情報は、通常は無視されます。

以降では、Cisco Unified CM で理解されて使用される情報のことを 既知 の情報と言い、Cisco Unified CM には理解されず使用もされない情報のことを 未知 の情報と言います。

次の情報が、透過的に通過できます。

パラメータ

未知のヘッダー

未知のコンテンツ本文

既知のヘッダー

次に、既知のヘッダーを示します。

Accept

Accept-Contact

Accept-Resource-Priority

Alert-Info

Allow

Allow-Events

Also

Authorization

Bridge-Participant-ID

Call-ID

Call-Info

CC-Diversion

CC-Redirect

Contact

Content-Disposition

Content-ID

Content-Length

Content-Type

CSeq

Date

Diversion

Event

Expires

From

Geolocation

Geolocation-Error

Join

Max-Forwards

Min-Expires

Min-SE

MIME-Version

P-Asserted-Identity

P-Preferred-Identity

Privacy

Proxy-Authenticate

Proxy-Authorization

Proxy-Require

RAck

Reason

Recv-Info

Refer-To

Referred-By

Reject-Contact

Remote-Party-ID

Replaces

Request-Disposition

Requested-By

Require

Resource-Priority

Retry-After

RSeq

RTP-RxStat

RTP-TxStat

Server

Session

Session-Expires

SIP-ETag

SIP-If-Match

Subject

Subscription-State

Supported

Target-Dialog

To

Unsupported

User-Agent

Via

Warning

WWW-Authenticate

X-Cisco-EMCCInfo

X-Cisco-FallbackID

X-Cisco-ViPR-Ticket

既知のコンテンツ本文

application/sdp

スクリプトが既知のヘッダーまたはコンテンツ本文を受け渡そうとすると、実行エラーがトリガーされます。

スクリプト作成者は、既知のデータが Cisco Unified CM 処理にかけられたり、Cisco Unified CM 処理と干渉したりすることなく受け渡される方法があることをすぐに理解できるでしょう。実際、スクリプトは、既知のヘッダーから値を取得し、未知のヘッダーに格納することができます。コンテンツ本文についても、同じことが行えます。下に示す 181 透過性の例では、Reason ヘッダーでこれを行っています。この例は、Reason ヘッダーの値を取得し、それを X-Reason ヘッダーとして受け渡します。当然のことながら、相手サイドに X-Reason ヘッダーを消費して削除するスクリプトがなければ、このヘッダーはネットワークに送信されます。

181 透過性の例

透過性がなければ、Cisco Unified CM が発信トランク レッグで 181 を受信した場合、Cisco Unified CM のネイティブ動作は、着信トランク レッグ上で 180 を送り返すことです。181 透過性を達成するには、着信 181(B サイドで受信)と予定発信 180(A サイドで送信)の両方にスクリプトが必要です。

181 は最初に PBX-B から受信されるので、まず次のことを行うことを検討します。

Reason ヘッダーの値の取得

Reason ヘッダーの値のパススルー:Reason ヘッダーは既知のヘッダーなので、スクリプトは、ヘッダー名 X-Reason を使用して値を受け渡すことにより、既知のヘッダーのチェックをバイパスします。

このパススルー データは、Cisco Unified CM によって自動的に、これから送信される発信メッセージとマージされます。前述のとおり、Cisco Unified CM は 180 をネイティブに送信します。このため、自動マージ機能により、X-Reason ヘッダーが発信 180 内に置かれます。

次に、次の内容を A サイドで行う必要があるかどうかを検討する必要があります。

X-Reason ヘッダーの値の取得と、181 に関して何かを含んでいるかどうかの確認

X-Reason ヘッダーの値を持つ Reason ヘッダーの追加

X-Reason ヘッダーの削除

応答コードとフレーズの 181 Call is Being Forwarded への変換

これらの手順を、次のコールフロー図に示します。

B サイドと A サイドのスクリプトを次に示します。

B サイドのスクリプト

B = {}
function B.inbound_181_INVITE(msg)
local pt = msg:getPassThrough()
local reason = msg:getHeader("Reason")
if pt and reason
then
pt:addHeader("X-Reason", reason)
end
end
return B

A サイドのスクリプト

A = {}
function A.outbound_180_INVITE(msg)
local reason = msg:getHeader("X-Reason")
if reason
then
if string.find(reason, "cause=181")
then
msg:setResponseCode(181,"Call is being forwarded")
msg:addHeader("Reason", reason)
end
 
msg:removeHeader("X-Reason")
end
end
return A
 

INFO 透過性の例

透過性がなければ、Cisco Unified CM は着信 INFO メッセージとコンテンツ本文を無視します。透過性を使用した場合、Cisco Unified CM は Nortel PBX によって送信された独自コンテンツ本文を抽出し、コンテンツ本文から DTMF の数字を抽出して、新しい dtmf-relay コンテンツ本文を作成し、それを他方のコール レッグへと受け渡します。

スクリプト

M = {}
function M.inbound_INFO(msg)
local body = msg:getContentBody("application/vnd.nortelnetworks.digits")
if body
then
local digits = string.match(body, "d=(%d+)")
if digits
then
pt = msg:getPassThrough()
body = string.format("Signal=%d\r\nDuration=100\r\n", digits)
pt:addContentBody("application/dtmf-relay", body)
end
end
end
return M

着信メッセージ

INFO sip: 1000@10.10.10.1 SIP/2.0
Via: SIP/2.0/UDP 10.10.10.57:5060
From: <sip:1234@10.10.10.57>;tag=d3f423d
To: <sip:1000@10.10.10.1>;tag=8942
Call-ID: 312352@10.10.10.57
CSeq: 5 INFO
Content-Type: application/vnd.nortelnetworks.digits
Content-Length: 72
 
p=Digit-Collection
y=Digits
s=success
u=12345678
i=87654321
d=4

発信メッセージ

INFO sip: 1000@10.10.10.58 SIP/2.0
Via: SIP/2.0/UDP 10.10.10.1:5060
From: <sip:1234@10.10.10.1>;tag=ef45ad
To: <sip:1000@10.10.10.58>;tag=1234567
Call-ID: 475623@10.10.10.1
CSeq: 5 INFO
Content-Type: application/dtmf-relay
Content-Length: 26
 
Signal=4
Duration=100