ADC

SIP の式

Citrix ADCの詳細ポリシー式言語には、セッション開始プロトコル(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、MESSAGE、NOTIFY、OPTIONS、PRACK、PUBLISH、REFER、REGISTER、SUBSCRIBE、UPDATEです。この式はテキストクラスの派生であるため、テキストに適用可能なすべての操作がこのメソッドに適用されます。たとえば、SIP 要求が INVITE SIP: 16 @10 .102.84. 181:5060; トランスポート=udp SIP/2.0 の場合、この式は INVITE を返します。
SIP.REQ.URL SIP 要求 URL で操作します。この式はテキストクラスの派生であるため、テキストに適用可能なすべての操作がこのメソッドに適用されます。たとえば、SIP リクエストが「INVITE SIP: 16 @10 .102.84. 181:5060; トランスポート=udp SIP/2.0」の場合、次の式は 16 @10 .102.84. 181:5060; トランスポート=udp を返します。
SIP.REQ.URL.PROTOCOL URL プロトコルを返します。たとえば、SIP URL の「16@www.sip.com: 5060; トランスポート=udp」の場合、この式は sip を返します。
SIP.REQ.URL.HOSTNAME SIP URL のホスト名部分を返します。たとえば、「16@www.sip.com: 5060; トランスポート=udp」の場合、この式は「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 URL が「16@www.sip.com: 5060; トランスポート=udp」の場合、この式は 16 を返します。
SIP.REQ.VERSION 要求内の SIP バージョン番号を返します。たとえば、SIP 要求が INVITE SIP: 16 @10 .102.84. 181:5060; トランスポート=udp SIP/2.0 の場合、この式は 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 コンテンツ-Lengthヘッダーの内容を返します。この式は thesip_header_t クラスの派生型であるため、SIP ヘッダーで使用できるすべての操作を使用できます。たとえば、コンテンツ長:277 の SIP コンテンツ長ヘッダーの場合、この式は 277 を返します。
SIP.REQ.TO To ヘッダーの内容を返します。たとえば、[宛先] のヘッダーの場合、<sip: 16@sip_example.com > タグ=00127f54ec85a6d90c14f45-53cc0185は、この式は「16」 を返します <sip: 16@sip_example.com >。タグ=00127f54ec85a6d90c14f45-53ccc0185を返します。
SIP.REQ.TO.ADDRESS sip_url オブジェクトにある SIP URI を返します。SIP URI で使用できるすべての操作を使用できます。たとえば、[宛先] ヘッダーの [宛先] の場合、<sip: 16@sip_example.com > タグ=00127f54ec85a6d90c14f45-53cc0185の場合、この式はsip: 16@sip_example.com を返します。
SIP.REQ.TO.DISPLAY_NAME To ヘッダーの表示名部分を返します。たとえば、[宛先] の SIP ヘッダーの場合、<sip: 16@sip_example.com > タグ=00127f54ec85a6d90c14f45-53cc0185、この式は 16 を返します。
SIP.REQ.TO.TAG TO ヘッダーの「タグ」名値のペアから「タグ」値を返します。たとえば、[宛先] ヘッダーの場合、タグ <sip: 16@sip_example.com > =「16」、タグ = 00127f54cc14f45-53cc0185 は、この式は、00127f54ec85a6d90c14f45-53cc0185 を返します。
SIP.REQ.FROM From ヘッダーの内容を返します。たとえば、「12」 <sip: 12@sip_example.com >; タグ=00127f54ec85a6d90c14f45-53cc0185の差出人ヘッダーの場合、この式はsip: 12@sip_example.com を返します。
SIP.REQ.FROM.ADDRESS sip_url オブジェクトにある SIP URI を返します。SIP URI で使用できるすべての操作を使用できます。たとえば、「12」 <sip: 12@sip_example.com >; タグ=00127f54ec85a6d90c14f45-53cc0185の差出人ヘッダーの場合、この式はsip: 12@sip_example.com を返します。
SIP.REQ.FROM.DISPLAY_NAME To ヘッダーの表示名部分を返します。たとえば、「12」 <sip: 12@sip_example.com >; タグ=00127f54ec85a6d90c14f45-53cc0185の差出人ヘッダーの場合、この式は12を返します。
SIP.REQ.FROM.TAG TOヘッダーの「タグ」名と値のペアから「タグ」値を返します。たとえば、”12”<sip:12@sip_example.com>; タグ=00127f54cc14f45-53cc0185の差出人ヘッダーの場合、この式は00127f54ec85a6d90c14f45-53cc0185を返します。
SIP.REQ.VIA 完全な Via ヘッダーを返します。リクエスト内に複数の Via ヘッダーがある場合は、最後の Via ヘッダーを返します。たとえば、サンプル SIP ヘッダー内の 2 つの Via ヘッダーの場合、次の式は Via を返します。SIP/2.0/UDP 10.102.84。180:5060; ブランチ=z9hG4bK03e76d0b; ポート=5060; 受信=10.102.84.160。
SIP.REQ.VIA.SENTBY_ADDRESS リクエストを送信したアドレスを返します。たとえば、ビアヘッダーの場合、SIP/2.0/UDP 10.102.84. 180:5060; ブランチ=z9hG4bK03e76d0b; ポート=5060; 受信=10.102.84.160、この式は 10.102.84.180 を返します。
SIP.REQ.VIA.SENTBY_PORT 要求を送信したポートを返します。たとえば、ビアヘッダーの場合、SIP/2.0/UDP 10.102.84. 180:5060; ブランチ=z9hG4bK03e76d0b; ポート=5060; 受信=10.102.84.160、この式は 5060 を返します。
SIP.REQ.VIA.RPORT rport の名前と値のペアから値を返します。たとえば、ビアヘッダーの場合、SIP/2.0/UDP 10.102.84. 180:5060; ブランチ=z9hG4bK03e76d0b; ポート=5060; 受信=10.102.84.160、この式は 5060 を返します。
SIP.REQ.VIA.BRANCH ブランチ名と値のペアから値を返します。たとえば、ビアヘッダーの場合、SIP/2.0/UDP 10.102.84. 180:5060; ブランチ=9hG4bK03e76d0b; ポート=5060; 受信=10.102.84.160、この式は z9hG4bK03e76d0b を返します。
SIP.REQ.VIA.RECEIVED 受信した名前と値のペアから値を返します。たとえば、ビアヘッダーの場合、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 ヘッダーの内容を返します。この式は thesip_header_t クラスの派生型であるため、SIP ヘッダーで使用できるすべての操作を使用できます。For example, for a SIP Callid header ofCall-ID: 00127f54-ec850017-0e46f5b9-5ec149c2@10.102.84.180, this expression returns00127f54-ec850017-0e46f5b9-5ec149c2@10.102.84.180.
SIP.REQ.CSEQ CSEQ から CSEQ 番号を整数で返します。たとえば、CSeq: 101 INVITE の SIP CSEQ ヘッダーの場合、この式は 101 を返します。
SIP.REQ.HEADER() 指定された SIP ヘッダーを返します。は、目的のヘッダーの名前を置き換えます。たとえば、SIP からヘッダーを返すには、SIP.REQ.HEADER (「差出人」) と入力します。
SIP.REQ.HEADER().INSTANCE() 指定された SIP ヘッダーの指定されたインスタンスを返します。同じ SIP ヘッダーの複数のインスタンスが発生する可能性があります。このような SIP ヘッダーの特定のインスタンス(たとえば、特定の Via ヘッダー)が必要な場合は、に番号を入力してそのヘッダーを指定できます 。ヘッダーインスタンスは最後(0)から最初に一致します。言い換えれば、SIP.REQ.HEADER(「ビア」).INSTANCE(0)は、VIAヘッダーの最後のインスタンスを返し、SIP.REQ.HEADER(「ビア」).INSTANCE(1)は最後のインスタンスを返しますが、VIAヘッダーのいずれかを返します。たとえば、SIP ヘッダーの例で使用した場合、SIP.要求ヘッダー (「経由」) .インスタンス (1) は、次のとおりを返します:SIP/2.0/UDP 10.102.84. 180:5060; ブランチ=z9hG4bK03e76d0b; rport=5060.
SIP.REQ.HEADER().VALUE() 指定された SIP ヘッダーの指定されたインスタンスの内容を返します。使用法は前の式とほぼ同じです。たとえば、上記のテーブルエントリの SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「経由」) .VALUE (1) は SIP/2.0/UDP 10.102.84 を返します。180:5060; ブランチ = z9hG4bK03e76d0b; rport = 5060 を返します。
SIP.REQ.HEADER().COUNT 特定のヘッダーのインスタンスの数を整数で返します。たとえば、上記の SIP ヘッダーの例で使用すると、SIP.REQ.HEADER (「Via」) .COUNT は 2 を返します。
SIP.REQ.HEADER().EXISTS 指定されたヘッダーが存在するかどうかに応じて、trueまたはfalseのブール値を返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「期限切れ」) .EXISTSは true を返し、一方、SIP.REQ.HEADER (「発信者 ID」) .EXISTS は false を返します。
SIP.REQ.HEADER().LIST 指定されたヘッダーのコンマ区切りのパラメータリストを返します。たとえば、上記の SIP ヘッダーの例で使用した場合、SIP.REQ.HEADER (「許可」) .LIST は ACK、BYE、キャンセル、受信、通知、オプション、参照、登録、更新を返します。文字列.GET () を追加して、特定のリスト項目を選択できます。たとえば、上記のリストから最初の項目 (ACK) を取得するには、SIP.REQ.HEADER (「許可」) .LIST.GET (0) と入力します。2 番目の項目 (BYE) を抽出するには、SIP.REQ.HEADER (「許可」) .LIST.GET (1) と入力します。注:指定されたヘッダーに名前/値のペアのリストが含まれている場合は、名前/値のペア全体が返されます。
SIP.REQ.HEADER().TYPECAST_SIP_HEADER_T("") 型キャストをに指定します。任意のテキストを thesip_header_t クラスに型キャストすることができます。その後、すべてのヘッダーベースの操作を使用できます。この操作を実行すると、で使用できるすべての操作を適用できます 。たとえば、式SIP.REQ.コンテンツの長さ.タイプタイプキャストは、コンテンツ長ヘッダーのすべてのインスタンスを型キャストします。この操作を実行した後、指定したヘッダーのすべてのインスタンスにすべてのヘッダー操作を適用できます。
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ヘッダー経由の場合:SIP/2.0/UDP 10.102.84. 180:5060; ブランチ=z9hG4bK03e76d0b; ポート=5060; 受信=10.102.84.160”、SIP.要求.ヘッダー(「経由」).SUBSTR(「rport=5060」)は「rport=5060」を返します。.REQ.HEADER (「経由」) .SUBSTR (「rport = 5061」) は空の文字列を返します。
SIP.REQ.HEADER().AFTER_STR() 指定された文字列が指定されたヘッダーのいずれかのインスタンスに存在する場合、この式はその文字列の直後の文字列を返します。たとえば、SIP ヘッダービア:SIP/2.0/UDP 10.102.84. 180:5060; ブランチ=z9hG4bK03e76d0b; ポート=5060; 受信=10.102.84.160、式SIP.要求.ヘッダー (「経由」) .AFTER_STR (「rport=」) は 5060 を返します。
SIP.REQ.HEADER().REGEX_MATCH() 指定された正規表現(regex)が指定されたヘッダーのいずれかのインスタンスと一致する場合、ブール値trueを返します。正規表現は、次の形式で指定する必要があります。re 正規表現 。正規表現の長さは 1499 文字を超えることはできません。PCRE 正規表現ライブラリに準拠している必要があります。PCRE 正規表現構文については、http://www.pcre.org/pcre.txtを参照してください。pcrepattern のマニュアルページには、PCRE 正規表現を使用したパターンの指定に関する有用な情報も記載されています。この式でサポートされている正規表現の構文は、PCRE と若干の違いがあります。後方参照は許可されていません。再帰的な正規表現は避けるべきです。いくつかの仕事がありますが、多くはそうではありません。ドット (.) メタ文字は改行と一致します。Unicodeはサポートされません。SET_TEXT_MODE(IGNORECASE)は、(? i) 正規表現で指定された内部オプション。
SIP.REQ.HEADER().REGEX_SELECT() 指定された正規表現が指定されたヘッダーのいずれかのインスタンス内の任意のテキストと一致する場合、この式はテキストを返します。たとえば、SIP header 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}.[0-9]{1,3}.[0-9]{1,3}”) received=10.102.84.160 を返します。
SIP.REQ.HEADER().AFTER_REGEX() 指定された正規表現が、指定されたヘッダーの任意のインスタンス内の任意のテキストと一致する場合、この式は、そのテキストの直後の文字列を返します。たとえば、SIP ヘッダーの経由:SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, the expression SIP.REQ.HEADER(“Via”).AFTER_REGEX(“received=”) returns10.102.84.160.
SIP.REQ.HEADER().BEFORE_REGEX() 指定された正規表現が指定されたヘッダーのいずれかのインスタンス内の任意のテキストと一致する場合、この式は、そのテキストの直前の文字列を返します。たとえば、SIP ヘッダーの経由:SIP/2.0/UDP 10.102.84.180:5060;branch=z9hG4bK03e76d0b;rport=5060;received=10.102.84.160, the expression SIP.REQ.HEADER(“Via”).BEFORE_REGEX(“[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}”) returns 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」の場合、この式は「100」を返します。
SIP.RES.STATUS.MSG SIP 応答ステータスメッセージを返します。たとえば、応答の最初の行が SIP/2.0 100 Trying である場合、この式は Trying を返します。
SIP.RES.IS_REDIRECT レスポンスコードがリダイレクトの場合、ブール値 true を返します。
SIP.RES.METHOD CSeqヘッダ内の要求メソッド文字列から抽出された応答メソッドを返します。
SIP の式