ADC

SIP エクスプレッション

NetScaler Advancedのポリシー表現言語には、セッション開始プロトコル(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: <sip:200.200.100.22;lr=on>
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" <sip:12@sip_example.com>;tag=00127f54ec85a6d90cc14f45-53cc0185
To: "16" <sip:16@sip_example.com>;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: <sip:12@10.102.84.180:5060;transport=udp>
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
<!--NeedCopy-->

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: 16@sip_example.com >たとえば、SIP To ヘッダーが To:「16” <sip: 16@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は「16”; tag=00127f54ec85a6d90cc14f45-53cc0185 を返します。
SIP.REQ.TO.ADDRESS sip_url オブジェクトにある SIP URI を返します。SIP URI で使用できるすべての操作を使用できます。たとえば、SIP To ヘッダーが To:「16” <sip: 16@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は sip: 16@sip_example.com を返します。
SIP.REQ.TO.DISPLAY_NAME To ヘッダーの表示名部分を返します。たとえば、SIP To ヘッダーが To:「16” <sip: 16@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は 16 を返します。
SIP.REQ.TO.TAG TO ヘッダーの「タグ」名の値のペアから「タグ」値を返します。たとえば、SIP To ヘッダーが To:「16” <sip: 16@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は 00127f54ec85a6d90cc14f45-53cc0185 を返します。
SIP.REQ.FROM From ヘッダーの内容を返します。たとえば、SIP From ヘッダーが From:「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: 12@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は sip: 12@sip_example.com を返します。
SIP.REQ.FROM.DISPLAY_NAME To ヘッダーの表示名部分を返します。たとえば、SIP From ヘッダーが From:「12” <sip: 12@sip_example.com >; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は 12 を返します。
SIP.REQ.FROM.TAG TO ヘッダーの「タグ」の名前と値のペアから「タグ」値を返します。たとえば、SIP From ヘッダーが From:「12” <sip:12@sip_example.com>; tag=00127f54ec85a6d90cc14f45-53cc0185 の場合、この式は 00127f54ec85a6d90cc14f45-53cc0185 を返します。
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 From ヘッダーを返すには、SIP.REQ.HEADER (「From」) と入力します。
SIP.REQ.HEADER().INSTANCE() 指定した SIP ヘッダーの指定されたインスタンスを返します。同じ SIP ヘッダーのインスタンスが複数発生する可能性があります。このような SIP ヘッダーの特定のインスタンス (たとえば、特定の Via ヘッダー) が必要な場合は、に数値を入力してそのヘッダーを指定できます。ヘッダーインスタンスは最後 (0) から最初まで一致します。つまり、SIP.REQ.HEADER (「Via」) .INSTANCE (0) は Via ヘッダーの最後のインスタンスを返し、SIP.REQ.HEADER (「Via」) .INSTANCE (1) は Via ヘッダーの最後のインスタンスを返す、という具合です。たとえば、サンプルの SIP ヘッダーで使用した場合、SIP.REQ.HEADER (「Via」) .INSTANCE (1) は Via: SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060 を返します。
SIP.REQ.HEADER().VALUE() 指定した SIP ヘッダーの指定されたインスタンスの内容を返します。使い方は前の式とほぼ同じです。たとえば、前のテーブルエントリの SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「Via」) .VALUE (1) は SIP/2.0/UDP 10.102.84. 180:5060; branch=Z9HG4BK03E76D0B; rport=5060 を返します。
SIP.REQ.HEADER().COUNT 特定のヘッダーのインスタンス数を整数で返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「Via」) .COUNT は 2 を返します。
SIP.REQ.HEADER().EXISTS 指定されたヘッダーが存在するかどうかに応じて、true または false のブール値を返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「Expires」) .EXISTS は true を返し、SIP.REQ.HEADER (「発信者ID」) .EXISTS は false を返します。
SIP.REQ.HEADER().LIST 指定されたヘッダーのコンマで区切られたパラメータリストを返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「許可」) .LIST は ACK、BYE、CANCEL、INVITE、NOTIFERE、NOTIFERE、NOTIFERE、REFERE、Register、UPDATE を返します。.GET () という文字列を追加して、特定のリスト項目を選択できます。たとえば、上記のリストから最初の項目 (ACK) を取得するには、SIP.REQ.HEADER (「許可」) .LIST.GET (0) と入力します。2 番目の項目 (BYE) を抽出するには、SIP.REQ.HEADER (「許可」) .LIST.GET (1) と入力します。注:指定されたヘッダーに名前と値のペアのリストが含まれている場合、名前と値のペア全体が返されます。
SIP.REQ.HEADER().TYPECAST_SIP_HEADER_T("") にタイプキャストします。任意のテキストを.sip_header_t クラスにタイプキャストできます。その後、すべてのヘッダーベースの操作を使用できます。この操作を実行すると、で使用できるすべての操作を適用できます。たとえば、SIP.REQ.CONTENT_LENGTH.TYPECAST_SIP_HEADER_T という式は、Content-Length ヘッダーのすべてのインスタンスをタイプキャストします。この操作を実行すると、指定したヘッダーのすべてのインスタンスにすべてのヘッダー操作を適用できます。
SIP.REQ.HEADER().CONTAINS(). 指定されたテキスト文字列が指定されたヘッダーのいずれかのインスタンスに存在する場合、true を返します。指定されたヘッダーのすべてのインスタンスで動作します。ヘッダーインスタンスは最後 (0) から最初まで一致します。
SIP.REQ.HEADER().EQUALS_ANY() に関連付けられたいずれかのパターンが、 指定されたヘッダーのいずれかのインスタンスの内容と一致する場合、true を返します。指定されたヘッダーのすべてのインスタンスで動作します。ヘッダーインスタンスは最後 (0) から最初まで一致します。
SIP.REQ.HEADER().CONTAINS_ANY() に関連付けられたいずれかのパターンが、 指定されたヘッダーのいずれかのインスタンスの内容と一致する場合、ブール値 true を返します。指定されたヘッダーのすべてのインスタンスで動作します。ヘッダーインスタンスは最後 (0) から最初まで一致します。
SIP.REQ.HEADER().CONTAINS_INDEX() に関連付けられた一致するパターンのインデックスを返します。 そのパターンが指定されたヘッダーのいずれかのインスタンスの内容と一致する場合です。指定されたヘッダーのすべてのインスタンスで動作します。ヘッダーインスタンスは最後 (0) から最初まで一致します。
SIP.REQ.HEADER().EQUALS_INDEX() に関連付けられた一致するパターンのインデックスを返します。 そのパターンが指定されたヘッダーのいずれかのインスタンスと一致する場合です。指定されたヘッダーのすべてのインスタンスで動作します。ヘッダーインスタンスは最後 (0) から最初まで一致します。
SIP.REQ.HEADER().SUBSTR() 指定された文字列が指定されたヘッダーのいずれかのインスタンスに存在する場合、この式はその文字列を返します。たとえば、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().AFTER_STR() 指定された文字列が指定されたヘッダーのいずれかのインスタンスに存在する場合、この式はその文字列の直後の文字列を返します。たとえば、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_MATCH() 指定された正規表現 (regex) が指定されたヘッダーのいずれかのインスタンスと一致する場合、true を返します。正規表現は、re 正規表現 の形式で指定する必要があります。正規表現の長さは 1499 文字を超えることはできません。PCRE 正規表現ライブラリに準拠している必要があります。PCRE正規表現構文のドキュメントについては、http://www.pcre.org/pcre.txtを参照してください。pcrepattern のマニュアルページには、PCRE 正規表現を使用してパターンを指定する方法に関する有用な情報もあります。この表現でサポートされている正規表現構文には、PCRE とはいくつか違いがあります。バックリファレンスは許可されていません。再帰的な正規表現は避けるべきです。うまくいくものもあれば、そうでないものもあります。ドット (.) メタ文字は改行と一致します。ユニコードはサポートされていません。set_text_Mode (IGNORECASE) は (?) をオーバーライドしますi) 正規表現で指定された内部オプション。
SIP.REQ.HEADER().REGEX_SELECT() 指定された正規表現が指定されたヘッダーのいずれかのインスタンス内の任意のテキストと一致する場合、この式はテキストを返します。たとえば、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().AFTER_REGEX() 指定された正規表現が指定されたヘッダーのいずれかのインスタンスのテキストと一致する場合、この式はそのテキストの直後の文字列を返します。たとえば、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().BEFORE_REGEX() 指定された正規表現が指定されたヘッダーのいずれかのインスタンスのテキストと一致する場合、この式はそのテキストの直前の文字列を返します。たとえば、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ヘッダ内の要求メソッド文字列から抽出された応答メソッドを返します。
SIP エクスプレッション

この記事の概要