SIP エクスプレッション
NetScalerAdvancedのポリシー表現言語には、セッション開始プロトコル(SIP)接続で動作する多数の式が含まれています。これらの表現は、リクエスト/レスポンスベースで動作する、サポートされているすべてのプロトコルのポリシーで使用することを目的としています。これらの式は、コンテンツスイッチング、レート制限、レスポンダ、および書き換えポリシーで使用できます。
レスポンダーポリシーで使用される SIP 表現には、特定の制限が適用されます。SIP 負荷分散仮想サーバーでは、DROP、NOOP、または RESPONDWITH アクションのみが許可されます。レスポンダーポリシーは、負荷分散仮想サーバー、オーバーライドグローバルバインドポイント、デフォルトのグローバルバインドポイント、または sip_udp ポリシーラベルにバインドできます。
SIP プロトコルで使用されるヘッダー形式は HTTP プロトコルで使用されるものと似ているため、新しい表現の多くは HTTP の類似表現と外観と機能によく似ています。各 SIP ヘッダーは、SIP メソッド、URL、およびバージョンを含む行と、その後に続く HTTP ヘッダーのように見える一連の名前と値のペアで構成されます。
以下は、その下にあるエクスプレッションテーブルで参照されている SIP ヘッダーのサンプルです。
INVITE sip:16@www.sip.com:5060;transport=udp SIP/2.0 Record-Route: Via: SIP/2.0/UDP 200.200.100.22;branch=z9hG4bK444b.c8e103d1.0;rport=5060; received=10.102.84.18 Via: SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060; received=10.102.84.160 From: "12" ;tag=00127f54ec85a6d90cc14f45-53cc0185 To: "16" ;tag=00127f54ec85a6d90cc14f45-53cc0185 Call-ID: 00127f54-ec850017-0e46f5b9-5ec149c2@10.102.84.180 Max-Forwards: 69CSeq: 101 INVITE User-Agent: Cisco-CP7940G/8.0 Contact: Expires: 180 Accept: application/sdp Allow: ACK,BYE,CANCEL,INVITE,NOTIFY,OPTIONS,REFER,REGISTER,UPDATE Supported: replaces,join,norefersub Content-Length: 277 Content-Type: application/sdp Content-Disposition: session;handling=optiona
SIP リファレンステーブル
次の表には、SIP ヘッダーを処理する式のリストが含まれています。最初の表には、リクエストヘッダーに適用される式が含まれています。ほとんどのレスポンスベースの式は、対応するリクエストベースの式とほぼ同じです。対応するリクエスト式から応答式を作成するには、式の最初の 2 つのセクションを SIP.REQ から SIP.RES に変更し、その他の明らかな調整を行います。2 番目の表には、レスポンス固有のレスポンス式が含まれ、リクエストに対応するものはありません。次の表の任意の要素を単独で完全な式として使用することも、さまざまな演算子を使用してこれらの式要素を他の要素と組み合わせてより複雑な式を作成することもできます。
SIP リクエストエクスプレッション
式 | 説明 |
---|---|
SIP.REQ.METHOD | SIPリクエストのメソッドで動作します。サポートされているSIPリクエストの方法は,ACK, BYE、CANCEL、INFO、INVITE、メッセージ、通知、オプション、PRACK、公開、参照、登録、購読、更新です。この式はテキストクラスから派生したものなので、テキストに適用できるすべての操作がこのメソッドに適用できます。たとえば、INVITE sip: 16 @10 .102.84. 181:5060; transport=udp SIP/2.0 の SIP リクエストの場合、この表現は INVITE を返します。 |
SIP.REQ.URL | SIP リクエスト URL で動作します。この式はテキストクラスから派生したものなので、テキストに適用できるすべての操作がこのメソッドに適用できます。たとえば、INVITE sip: 16 @10 .102.84. 181:5060; transport=udp SIP/2.0 の SIP リクエストの場合、この式は sip: 16 @10 .102.84. 181:5060; transport=udp を返します。 |
SIP.REQ.URL.PROTOCOL | URL プロトコルを返します。たとえば、SIP URL が 16@www.sip.com: 5060、transport=udp の場合、この式は sip を返します。 |
SIP.REQ.URL.HOSTNAME | SIP URL のホスト名部分を返します。たとえば、SIP: 16@www.sip.com: 5060、transport=udp の SIP URL の場合、この式は www.sip.com: 5060 を返します。 |
SIP.REQ.URL.HOSTNAME.PORT | SIP URL ホスト名のポート部分を返します。ポートが指定されていない場合、この式はデフォルトの SIP ポート 5060 を返します。たとえば、SIP ホスト名が www.sip.com: 5060 の場合、この式は 5060 を返します。 |
SIP.REQ.URL.HOSTNAME.DOMAIN | SIP URL ホスト名のドメイン名部分を返します。ホストが IP アドレスの場合、この式は誤った結果を返します。たとえば、SIP ホスト名が www.sip.com: 5060 の場合、この式は sip.com を返します。SIP ホスト名が 192.168.43. 15:5060 の場合、この式はエラーを返します。 |
SIP.REQ.URL.HOSTNAME.SERVER | ホストのサーバー部分を返します。たとえば、SIP ホスト名が www.sip.com: 5060 の場合、この式は www を返します。 |
SIP.REQ.URL.USERNAME | @ 文字の前のユーザー名を返します。たとえば、sip: 16@www.sip.com: 5060、transport=udp というSIP URLの場合、この式は16を返します。 |
SIP.REQ.VERSION | リクエストの SIP バージョン番号を返します。たとえば、INVITE sip: 16 @10 .102.84. 181:5060; transport=udp SIP/2.0 の SIP リクエストの場合、この式は SIP/2.0 を返します。 |
SIP.REQ.VERSION.MAJOR | メジャーバージョン番号 (ピリオドの左側の数字) を返します。たとえば、SIP バージョン番号が SIP/2.0 の場合、この式は 2 を返します。 |
SIP.REQ.VERSION.MINOR | マイナーバージョン番号 (ピリオドの右側にある番号) を返します。たとえば、SIP バージョン番号が SIP/2.0 の場合、この式は 0 を返します。 |
SIP.REQ.CONTENT_LENGTH | コンテンツレングスヘッダーの内容を返します。この式は.sip_header_t クラスから派生したものなので、SIP ヘッダーに使用できるすべての操作を使用できます。たとえば、SIP コンテンツ長ヘッダーが「コンテンツ長:277」の場合、この式は 277 を返します。 |
SIP.REQ.TO | To ヘッダーの内容を返します。 |
SIP.REQ.TO.ADDRESS | sip_url オブジェクトにある SIP URI を返します。SIP URI で使用できるすべての操作を使用できます。たとえば、SIP To ヘッダーが To:「16” |
SIP.REQ.TO.DISPLAY_NAME | To ヘッダーの表示名部分を返します。たとえば、SIP To ヘッダーが To:「16” |
SIP.REQ.TO.TAG | TO ヘッダーの「タグ」名の値のペアから「タグ」値を返します。たとえば、SIP To ヘッダーが To:「16” |
SIP.REQ.FROM | 从ヘッダーの内容を返します。たとえば,SIPヘッダーが:“12”< sip: 12@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は sip: 12@sip_example.com を返します。 |
SIP.REQ.FROM.ADDRESS | sip_url オブジェクトにある SIP URI を返します。SIP URI で使用できるすべての操作を使用できます。たとえば、SIP From ヘッダーが From:「12” |
SIP.REQ.FROM.DISPLAY_NAME | To ヘッダーの表示名部分を返します。たとえば、SIP From ヘッダーが From:「12” |
SIP.REQ.FROM.TAG | TO ヘッダーの「タグ」の名前と値のペアから「タグ」値を返します。たとえば、SIP From ヘッダーが From:「12” |
SIP.REQ.VIA | 完全な Via ヘッダーを返します。リクエストに複数の Via ヘッダーがある場合は、最後の Via ヘッダーを返します。たとえば、サンプルの SIP ヘッダーにある 2 つの Via ヘッダーについて、次の式は Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060; received=10.102.84.160 を返します。 |
SIP.REQ.VIA.SENTBY_ADDRESS | リクエストを送信したアドレスを返します。たとえば、Via ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060、branch=Z9HG4BK03E76D0B、rport=5060、received=10.102.84.160 の場合、この式は 10.102.84.180 を返します。 |
SIP.REQ.VIA.SENTBY_PORT | リクエストを送信したポートを返します。たとえば、Via ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060、branch=Z9HG4BK03E76D0B、rport=5060、received=10.102.84.160 の場合、この式は 5060 を返します。 |
SIP.REQ.VIA.RPORT | レポート名と値のペアから値を返します。たとえば、Via ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060、branch=Z9HG4BK03E76D0B、rport=5060、received=10.102.84.160 の場合、この式は 5060 を返します。 |
SIP.REQ.VIA.BRANCH | ブランチ名と値のペアから値を返します。たとえば、Via ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060、branch=Z9HG4BK03E76D0B、rport=5060、received=10.102.84.160 の場合、この式は Z9HG4BK03E76D0B を返します。 |
SIP.REQ.VIA.RECEIVED | 受け取った名前と値のペアから値を返します。たとえば、Via ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060、branch=Z9HG4BK03E76D0B、rport=5060、received=10.102.84.160 の場合、この式は 10.102.84.160 を返します。 |
SIP.REQ.CALLID | Callid ヘッダーの内容を返します。この式は.sip_header_t クラスから派生したものなので、SIP ヘッダーに使用できるすべての操作を使用できます。たとえば、Call-ID: 00127f54-ec850017-0e46f5b9-5ec149c2 @10 .102.84.180 の SIP Callid ヘッダーの場合、この式は 00127f54-ec850017-0e46f5b9-5ec149c2 @10 .102.84.180 を返します。 |
SIP.REQ.CSEQ | CSEQ の CSEQ 番号を整数で返します。たとえば、SIP CSEQ ヘッダーが CSeq: 101 INVITE の場合、この式は 101 を返します。 |
SIP.REQ.HEADER( |
指定された SIP ヘッダーを返します。 |
SIP.REQ.HEADER(\ |
指定した SIP ヘッダーの指定されたインスタンスを返します。同じ SIP ヘッダーのインスタンスが複数発生する可能性があります。 |
SIP.REQ.HEADER(\ |
指定した SIP ヘッダーの指定されたインスタンスの内容を返します。使い方は前の式とほぼ同じです。たとえば、前のテーブルエントリの SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「Via」) .VALUE (1) は SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060 を返します。 |
SIP.REQ.HEADER( |
特定のヘッダーのインスタンス数を整数で返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「Via」) .COUNT は 2 を返します。 |
SIP.REQ.HEADER( |
指定されたヘッダーが存在するかどうかに応じて、true または false のブール値を返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「Expires」) .EXISTS は true を返し、SIP.REQ.HEADER (「発信者ID」) .EXISTS は false を返します。 |
SIP.REQ.HEADER( |
指定されたヘッダーのコンマで区切られたパラメータリストを返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「許可」) .LIST は ACK、BYE、CANCEL、INVITE、NOTIFERE、NOTIFERE、NOTIFERE、REFERE、Register、UPDATE を返します。.GET ( |
SIP.REQ.HEADER(\ |
|
SIP.REQ.HEADER( |
指定されたテキスト文字列が指定されたヘッダーのいずれかのインスタンスに存在する場合、true を返します。指定されたヘッダーのすべてのインスタンスで動作します。ヘッダーインスタンスは最後 (0) から最初まで一致します。 |
SIP.REQ.HEADER( |
に関連付けられたいずれかのパターンが、 |
SIP.REQ.HEADER( |
に関連付けられたいずれかのパターンが、 |
SIP.REQ.HEADER( |
に関連付けられた一致するパターンのインデックスを返します。 |
SIP.REQ.HEADER( |
に関連付けられた一致するパターンのインデックスを返します。 |
SIP.REQ.HEADER( |
指定された文字列が指定されたヘッダーのいずれかのインスタンスに存在する場合、この式はその文字列を返します。たとえば、SIP ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060; received=10.102.84.160” の SIP.REQ.HEADER (「Via」) .SUBSTR (「rport=5060”) は「rport=5060」.sisiを返します p.req.Header (「Via」) .SUBSTR (「rport=5061”) は空の文字列を返します。 |
SIP.REQ.HEADER( |
指定された文字列が指定されたヘッダーのいずれかのインスタンスに存在する場合、この式はその文字列の直後の文字列を返します。たとえば、SIP ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060; received=10.102.84.160 の場合、SIP.REQ.HEADER (「Via」) .AFTER_STR (「rport=」) という表現は 5060 を返します。 |
SIP.REQ.HEADER( |
指定された正規表現 (regex) が指定されたヘッダーのいずれかのインスタンスと一致する場合、true を返します。 |
SIP.REQ.HEADER( |
指定された正規表現が指定されたヘッダーのいずれかのインスタンス内の任意のテキストと一致する場合、この式はテキストを返します。たとえば、SIP ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060; received=10.102.84.160 の場合、SIP.REQ.HEADER (「Via」) .REGEX_SELECT (「received= [0-9] {1,3}」という表現になります。[0-9] {1,3}。9] {1,3}. [0-9] {1,3}. [0-9] {1,3}」) が受け取った返品=10.102.84.160。 |
SIP.REQ.HEADER( |
指定された正規表現が指定されたヘッダーのいずれかのインスタンスのテキストと一致する場合、この式はそのテキストの直後の文字列を返します。たとえば、SIP ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060、branch=Z9HG4BK03E76D0B、rport=5060、received=10.102.84.160 の場合、SIP.REQ.HEADER (「Via」) .AFTER_REGEX (「received=」) という表現は 10.102.84.160 を返します。 |
SIP.REQ.HEADER( |
指定された正規表現が指定されたヘッダーのいずれかのインスタンスのテキストと一致する場合、この式はそのテキストの直前の文字列を返します。たとえば、SIP ヘッダー Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060; received=10.102.84.160 の場合、SIP.REQ.HEADER (「Via」) .BEFORE_REGEX (「[0-9] {3}. [0-9] {3}. [0-9] {3}. [0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3}」) は received= を返します。 |
SIP.REQ.FULL_HEADER | 終端の CR/LF を含む SIP ヘッダー全体を返します。 |
SIP.REQ.IS_VALID | リクエスト形式が有効な場合は true というブール値を返します。 |
SIP.REQ.BODY( |
指定された長さまでのリクエスト本文を返します。指定された長さがリクエスト本文の長さより大きい場合、この式はリクエスト本文全体を返します。 |
SIP.REQ.LB_VSERVER | 現在のリクエストを処理している負荷分散仮想サーバー (LB vserver) の名前を返します。 |
SIP.REQ.CS_VSERVER | 現在のリクエストを処理しているコンテンツスイッチ仮想サーバー (CS vserver) の名前を返します。 |
SIP レスポンスエクスプレッション
式 | 説明 |
---|---|
SIP.RES.STATUS | SIP 応答ステータスコードを返します。たとえば、応答の最初の行が SIP/2.0 100 Trying の場合、この式は 100 を返します。 |
SIP.RES.STATUS_MSG | SIP 応答ステータスメッセージを返します。たとえば、応答の最初の行が SIP/2.0 100 Trying の場合、この式は Trying を返します。 |
SIP.RES.IS_REDIRECT | レスポンスコードがリダイレクトの場合は true を返します。 |
SIP.RES.METHOD | CSeqヘッダ内の要求メソッド文字列から抽出された応答メソッドを返します。 |