(57)【特許請求の範囲】
【請求項１】
複数のレイヤメッセージをリンクするステップと、
前記リンクするステップが完了した後に、各レイヤメッセージをエンコードするステップ（Ｌ１０、Ｌ１２）とからなり、前記リンクするステップは、
以前の通信ネットワークレイヤ（１、２、...Ｎ）のコンテキストのアドレスを、後続の通信ネットワークレイヤ（１、２、...Ｎ）に送るステップと、
前記後続の通信ネットワークレイヤのレイヤメッセージのメッセージボディアドレスを、前記送られたアドレスにセットするステップ（Ｓ３０）とからなり、
前記以前の通信ネットワークレイヤと前記後続の通信ネットワークレイヤとは隣接しており、
各コンテキストは関連する通信ネットワークレイヤについての変数及び方法を提供し、
前記変数は初期のバッファ位置及び現在のバッファ位置を含む
ことを特徴とする複数のレイヤからなるメッセージを処理する方法。
【請求項２】
前記初期のバッファ位置及び現在のバッファ位置は、関連する通信ネットワークレイヤのレイヤメッセージのエンコード（Ｌ１０、Ｌ１２）及びデコード（Ｌ４１、Ｌ４２）の際に使用されることを特徴とする請求項１記載の方法。
【請求項３】
前記関連する通信ネットワークレイヤについての方法が、少なくとも、エンコード（Ｌ１０、Ｌ１２）の方法及びデコード（Ｌ４１、Ｌ４２）の方法からなることを特徴とする請求項１記載の方法。
【請求項４】
前記エンコード（Ｌ１０、Ｌ１２）の方法は、メッセージ長フィールド（Ｓ４２）及びＣＲＣフィールド（Ｓ４８）を含むメッセージボディ依存フィールドを演算する方法からなることを特徴とする請求項３記載の方法。
【請求項５】
前記エンコードするステップが、
現在のバッファ位置を、前記以前の通信ネットワークレイヤのレイヤメッセージのヘッダ長によりインクリメントするステップ（Ｓ４０）と、
前記後続の通信ネットワークレイヤのコンテキストにおける前記初期のバッファ位置の値を、前記インクリメントするステップから得られたバッファ位置に等しくセットするステップ（Ｓ３０）と、
後続の通信ネットワークレイヤの各々に対して、前記インクリメントするステップおよび前記セットするステップを繰り返すステップとを含む
ことを特徴とする請求項１記載の方法。
【請求項６】
各レイヤメッセージのヘッダフィールドデータを、メッセージストリーム中に移動させるステップ（Ｓ４４）と、
各レイヤコンテキストのトレーラフィールドデータを前記メッセージストリーム中に移動させるステップ（Ｓ５０）とをさらに有し、
前記ヘッダフィールドデータおよび前記トレーラフィールドデータの移動により、フォーマットされたメッセージストリームが、前記リンクされた複数のレイヤメッセージから得られたエンコードされたデータを前記メッセージストリームの中に配置させることになる
ことを特徴とする請求項５記載の方法。
【請求項７】
各レイヤメッセージに関連する前記トレーラフィールドデータがＣＲＣ／ＦＣＳデータからなることを特徴とする請求項６記載の方法。
【請求項８】
前記インクリメントするステップが、
通信ネットワークレイヤのヘッダ長が可変である場合に、以前の通信ネットワークレイヤの各々のヘッダ長を合計するステップ（Ｓ３８）と、
前記現在のバッファ位置を前記合計だけインクリメントするステップ（Ｓ４０）と
からなることを特徴とする請求項５記載の方法。
【請求項９】
さらに、エンドオブレイヤメッセージインジケータの検出に基づいて、バッファのインクリメントを終了するステップ（Ｓ５６）からなることを特徴とする請求項５記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マルチレイヤードメッセージ（multi-layered messages）におけるネステッドレイヤ（nested layers）の処理方法に関する。
【０００２】
【従来の技術】
今日、ケーブルまたはケーブルレス構成のいずれかにおける光、ＲＦ、ブロードバンドおよびナローバンドネットワークを含む多くの異なる従来の通信ネットワークが存在する。典型的な通信ネットワークは、プロトコルスタック中に配置されたレイヤに基づくアーキテクチャを有する。各レイヤは、通信ネットワーク内で実行されるサービスに対応する。各レイヤは、次の上位のレイヤにサービスを提供する一方で、それ自体のレイヤのインプリメンテーション詳細から次の上位のレイヤをシールドする。各レイヤは、いかなる他のレイヤもバイパスすることなしに、そのすぐ下のレイヤにより提供されるサービスにもアクセスする。
【０００３】
レイヤード通信ネットワークアーキテクチャに対する１つのそのような通常のモデルは、通信ネットワークのサービスを７個のレイヤに記述（delineates）するオープンシステムインターコネクション（ＯＳＩ）モデルである。図１Ａは、ＯＳＩモデルのシンボル的表現である。ＯＳＩモデル中のレイヤは、上に向かう順序で、レイヤ１：物理レイヤ、レイヤ２：データリンクレイヤ、レイヤ３：ネットワークレイヤ、レイヤ４：トランスポートレイヤ、レイヤ５：セッションレイヤ、レイヤ６：プレゼンテーションレイヤ、およびレイヤ７：アプリケーションレイヤである。各レイヤは、そのレイヤにおけるサービスに対する１つまたは２つ以上のプロトコルを具現化する。
【０００４】
レイヤ１、物理レイヤは、物理媒体を介して、未構成（unstructured）ビットストリームと接続される。レイヤ２、データリンクレイヤは、同期化、フロー制御および必要とされるときエラー制御を使用して、物理リンクを介する信頼性ある情報のトランスファを提供する。レイヤ３、ネットワークレイヤは、データ伝送およびスイッチング技術からの独立性を提供し、接続を確立し、維持しかつシールをさせることを受け持つ。レイヤ４、トランスポートレイヤは、エンドポイント間のデータの信頼性のあるトランスペアレントなトランスファを提供し、必要な場合、エンドツーエンドエラー回復およびフロー制御も提供する。レイヤ５、セッションレイヤは、共同するアプリケーション間の接続（セッション）を確立し、管理しかつ終了させる。
【０００５】
レイヤ６、プレゼンテーションレイヤは、データのフォーマットおよび／またはデータ暗号化（scrambling/descrambling）のようなデータ表現の相違からの独立性をアプリケーションに提供する。レイヤ７、アプリケーションレイヤは、ユーザのためにアプリケーション実行に対するＯＳＩ環境へのアクセスを提供する。そのようなアプリケーションの例は、ファイル転送、ターミナルエミュレーション、電子メール、ワイヤレス電話等である。アプリケーションレイヤは、しばしば、「ユーザ」レベルと呼ばれる。ユーザレベルにおいて送信されるデータは、ユーザデータ、バイナリデータ、ボイスデータおよび／またはイメージデータ等であり得る。
【０００６】
他のデータ通信ネットワークアーキテクチャは、ＯＳＩモデルの一般原理に従う。本発明には一般原理が関係するが、レイヤの数または各レイヤにより提供されるサービスに厳格に関係するものではない。
【０００７】
通信ネットワークのレイヤにより伝送されるデータ通信メッセージは、ネステッドメッセージ（nested messages）として構成される。「ネステッド」の用語は、１つのレイヤのメッセージが、隣接する下位のレイヤのメッセージ中でネストされている（nested）。ネットワークアーキテクチャを示すために使用される。図１Ｂは、ジェネリックレイヤｉ，ｊおよびｋにおけるメッセージを示す。異なるメッセージが通信ネットワークの各レイヤに存在するが、メッセージは、実際には、単一のメッセージが通信ネットワークを通って進むとき、単一メッセージの異なるバージョンである。
【０００８】
メッセージは、例えばレイヤｋにあるとき、「レイヤｋにおけるメッセージ」または「レイヤｋメッセージ」と呼ばれ得る。メッセージがプロトコルスタックを下向きに（downward）進むとき、各レイヤは、それ自体のヘッダおよび任意的にトレーラ情報で次の上位レイヤのメッセージボディをカプセル化する。したがって、レイヤｊメッセージは、レイヤｊヘッダおよび任意的にｊトレーラ情報でカプセル化されたレイヤｋメッセージからなる。同様に、レイヤｉメッセージは、レイヤｉヘッダおよび任意的にｉトレーラ情報でカプセル化されたレイヤｊメッセージからなる。
【０００９】
ヘッダは、ヘッダの後に続くカプセル化された情報の長さ（オクテッドまたはビット）を含むレングスフィールド（len）を有する。レングスフィールドは、トレーラがどこで始まるかを決定するために使用される。トレーラは、フレームチェックシーケンス（ＦＣＳ）フィールドを生成するための巡回冗長チェック（ＦＣＳ）計算を必要とする可能性がある。ＦＣＳフィールドは、ビットエラーを検出し、ビットエラーが生じたとき、メッセージの再送信を要求することを特定のトレーラを含むレイヤに指示することにより、ビットエラーレートを許容できるレベルに適合させるために使用させる。例示目的のために、図１Ｂ中のレイヤｋは、ユーザレイヤに対応する。
【００１０】
ＯＳＩモデルにおいて、メッセージがレイヤ間で送られるとき、フォーマットされたバッファのコピーが、レイヤからレイヤへ送られる。また、全てのメッセージは、プロトコルスタックの全てのレイヤを通って進まなければならない。ＯＳＩモデルの各レイヤにおいて、そのレイヤにおけるメッセージの一例（instance）を含むメッセージバッファが存在する。
【００１１】
図２は、従来の通信ネットワーク中のレイヤ１ないしレイヤ間のｎメッセージまでを処理するための通常の方法を示す。図２において、上位レベルレイヤｊ＋１メッセージのエンコーディングおよび次の下位レベルレイヤｊメッセージ中の上位レベルレイヤｊ＋１メッセージのネスティング（nesting）が示されている。１つのレイヤにおけるメッセージのエンコーディングは、メッセージ中のメッセージフィールド値を、フォーマットされたメッセージストリームのオクテッドまたはビットに移動させる。プロトコルスタック中の各レイヤにおける全てのメッセージが処理された後、得られるメッセージストリームは、フォーマットされたレイヤの全てを保持するオクテッドまたはビットバッファであり、フォーマットされたメッセージは、通信ネットワークの物理レイヤを介する送信の準備ができている。
【００１２】
図２において、初期レイヤにおけるメッセージの処理への入力は、新しいまたはフリーのバッファであり、初期メッセージボディ情報およびその長さである。初期メッセージボディは、ユーザデータであり得る。プロセスは、最上位のレイヤｎで開始する。ステップＳ１２において、初期バッファ位置は、現在のバッファ位置の値と等しく設定される。レイヤｎメッセージに対するヘッダのレングスフィールドは、ステップＳ１３において、ヘッダ長およびボディ長から演算される。ステップＳ１４において、ヘッダは、メッセージストリームにエンコードされ、現在のバッファ位置は、ステップＳ１５において、ヘッダ長によりインクリメントされる。
【００１３】
ステップＳ１６において、レイヤｎにおけるメッセージに対するメッセージボディは、現在のバッファ位置にコピーされ、現在のバッファ位置は、ステップＳ１７において、メッセージボディ長によりインクリメントされる。巡回冗長チェック（ＣＲＣ）フィールドが、ステップＳ１８において演算される。ステップＳ１９において、トレーラがメッセージストリームにエンコードされ、現在のバッファが、ステップＳ２０において、トレーラ長によりインクリメントされる。
【００１４】
レイヤｎメッセージに対するメッセージ長は、ステップＳ２１において計算される。方法は、スタートに戻り、初期バッファ位置および現在のフォーマットされた長さが、メッセージボディおよびレイヤｎ−１メッセージに対する長さになる。全てのレイヤがこの方法で処理されたとき、得られるバッファは、１つのメッセージストリームバッファにフォーマットされた全てのレイヤの和であり、物理レイヤ上の送信の準備ができている。
【００１５】
【発明が解決しようとする課題】
各レイヤは、他のレイヤのヘッダおよびトレーラまたはそれらのサイズについて知らない。従来の方法は、各レイヤのフォーマットされたメッセージバッファのアドレスを次のレイヤに送ることからなっている。したがって、従来の方法において、別個のバッファが、各レイヤを処理するために使用されなければならない。これは、各レイヤにおけるフォーマットされたメッセージのバッファコピーを生じ、余計な処理時間を浪費する。また、上位のレイヤの処理は、メッセージ長およびＣＲＣフィールドが、現在処理されているレイヤにおいて決定され得る前に完了されなければならない。
【００１６】
【課題を解決するための手段】
本発明は、レイヤ化されたモデルのレイヤ間の未フォーマット値を使用する。例えば、本発明の一実施形態によれば、メッセージレイヤのコンテキスト（context）のアドレスが、その未フォーマット値および使用されるその方法、エンコーディングおよびデコーディングが、隣接するレイヤに送られる。各レイヤは、各レイヤの全てのコンテキストが、処理されるレイヤに従って逐次リンクされるまで、これを行う。リンキングの順序は、外側（最下位）レイヤから内側（最上位）レイヤへである。全てのレイヤのコンテキストがリンクされるとき、エンコーディングは、１つのフォーマットされたバッファになされる。
【００１７】
本発明の実施形態は、デコーディングプロセスも説明する。デコーディングプロセスは、フォーマットされたメッセージバッファを、各レイヤのコンテキストに分解して戻すことになる。本発明は、メッセージレングスフィールドおよびＣＲＣ／ＦＣＳフィールドを有するトレーラを有する可変長のヘッダで動作することになる。
【００１８】
本発明の更なる適用性の範囲は、以下に提供される詳細な説明から明らかとなるであろう。しかし、本発明の好ましい実施形態を開示するが、詳細な説明および具体的な例は、例示のためのみに提供される。これは、本発明の精神および範囲内で様々な変更および修正が、当業者により以下の説明から明らかとなるからである。
【００１９】
【発明の実施の形態】
本発明の実施形態を説明するために、メッセージレイヤの「処理」の用語は、エンコーディング、デコーディング、バッファへのコピーイングおよびバッファからのコピーイング、バッファのアドバンシング等の一般動作を示す。
【００２０】
図３は、本発明の一実施形態によるレイヤ１，２，…，Ｎに対する単純化されたモデルを示す。各レイヤは、「コンテキスト（context）」により表される。コンテキストは、そのレイヤに対して値および方法が記憶されるアドレスにあり、以下に詳細に説明する。各レイヤ１，２，…，Ｎメッセージは、ヘッダフィールド値およびトレーラフィールド値を含む。ヘッダフィールド値およびトレーラフィールド値は、各レイヤ１，２，…，Ｎメッセージ中のデータフィールドを表す。各レイヤ１，２，…，Ｎメッセージは、メッセージボディアドレス、即ち次の上位のレイヤのコンテキストを指し示す（point）「ポインタ」１，２，…，ｍを含む。
【００２１】
エンコーディングを行うためにメッセージレイヤを処理するとき、レイヤＮで始まる各レイヤは、メッセージ長およびＣＲＣ値のようなメッセージボディ依存フィールドを除き、適切なフィールド値をセットし、そのコンテキストのアドレスを、次に下位のレイヤに送る。次に下位のレイヤは、メッセージボディアドレスをその値にセットすることになる。これは、最下位レイヤ１に到達するまで続く。これは、図３に示されるように、全てのメッセージレイヤコンテキストを一緒にリンクする。全てのメッセージレイヤは、その後、エンコーディングの準備ができている。
【００２２】
図４は、本発明の一実施形態による詳細なモデルを示す。図４の上側部分の囲まれた領域は、レイヤ１，２，…，Ｎメッセージの各々のコンテキストのシンボル的表現である。レイヤ１，２，…，Ｎメッセージのコンテキストは、それぞれ、レイヤ１，２，…，Ｎメッセージに特有な変数および方法を含む。図４の下側部分中の囲まれた領域は、レイヤ１，２，…，Ｎにおけるメッセージリーダ(reader)の各々のコンテキストのシンボル的表現である。エンコーディングのために、レイヤ１，２，…，Ｎメッセージのコンテキストのみが使用される（図４の上側半分）。デコーディングのために、レイヤ１，２，…，Ｎメッセージのコンテキストが再生されるまで、レイヤ１，２，…，Ｎメッセージリーダのコンテキストが使用される（図４の下側半分）。
【００２３】
レイヤの処理の順序は、最も外側（最下位）レイヤ１から最も内側（最上位）レイヤＮへである。最も内側のレイヤＮは、エンドオブレイヤインジケータを含み、ここで、ポインタｍはナルを指し示す。
【００２４】
コンテキストの使用は、同じ変数ネーム（variable names)および方法（methods)が、レイヤ１，２，…，Ｎメッセージまたはメッセージリーダ間で使用されることを可能にし、変数および方法が、それらのコンテキストにより区別可能である。コンテキストは、２つの部分に分割される。（１）それに知られたジェネリックパート（generic part)の定義を有するいずれのエンティティによってもアクセス可能なレイヤ独立変数および方法を含む一般部分、（２）特定のレイヤに固有の変数および方法を含むレイヤスペシフィックパート（layer specific part)。特定のレイヤに対してコンテキストが同時に起きることは、ジェネリックパートおよびレイヤスペシフィックパートの両方についての記憶並びに両方のパートにおける変数の初期化を生じる。一般部分における方法は、「仮想的」である。ジェネリックネームによる方法を求める仮想手段は、レイヤ特定部において同じネームによる方法を求めることになる。
【００２５】
レイヤメッセージに対するコンテキストのジェネリックパートは、メソッド、エンコードおよびデコードを含み、これは、仮想方法エンコードヘッダ(encodeHeader）、エンコードトレーラ（encodeTrailer）、デコードヘッダ(decodeHeader)、デコードトレーラ(decodeTrailer)を求める。これらの仮想方法は、同じネームのレイヤスペシフィック方法を自動的に求める。コンテキストレイヤメッセージのジェネリックパートは、メッセージボディアドレス、メッセージリーダアドレス、初期および現在のバッファ位置、符号化された長さおよびヘッダ／ボディ長を含む。
【００２６】
図６および７の説明は、これらの使用をカバーすることになる。レイヤスペシフィックパートは、メソッドエンコードヘッダ(encodeHeader）、エンコードトレーラ（encodeTrailer）、デコードヘッダ(decodeHeader)、デコードトレーラ(decodeTrailer)およびヘッダおよびトレーラフィールド値に対する変数を含む。これらのレイヤスペシフィックメソッドは、これらの値をフォーマットされたストリームバッファにエンコードし、これらの値をフォーマットされたストリームバッファからデコードする。
【００２７】
メッセージリーダに対するコンテキストのジェネリックパートは、ゲットメッセージ(getMessage)のためのバーチャルメソッドおよび変数のメッセージリーダアドレスおよび現在のバッファポジションを含む。メッセージリーダに対するレイヤスペシフィックパートは、メソッドゲットメッセージ(getMessage)を含む。ジェネリックバーチャルメソッドゲットメッセージ(getMessage)は、レイヤスペシフィックゲットメッセージ(getMessage)を求める。メソッドゲットメッセージ(getMessage)は、現在の位置におけるバッファにおいてピーク（peek）し、そのレイヤ中の使用のための適切なメッセージを決定し、そのレイヤメッセージのインスタスを利用可能にする。このメソッドは、レイヤメッセージのメッセージリーダアドレスを、それ自体のメッセージリーダアドレスの値にセットすることになる。このメソッドは、レイヤメッセージのコンテキストのアドレスを戻す。
【００２８】
レイヤ１，２，…，Ｎメッセージまたはレイヤ１，２，…Ｎメッセージリーダを一緒にリンクさせることは、レイヤコンテキストからレイヤコンテキストへトランスペアレントに通過するエンコードおよびデコード動作を可能にする。「トランスペアレントに」は、最も外側（最下位）のレイヤにおける動作を求めるために、アプリケーションが所定のレイヤおよびネスティング関係を特定する必要のみがある状態を示す。
【００２９】
図５Ａおよび５Ｂにおいて、レイヤ１，２，…Ｎメッセージのエンコーディングおよびデコーディングシーケンスが説明される。
【００３０】
図５Ａは、レイヤ１，２，…Ｎメッセージのエンコーディングシーケンスを示す。エンコーディングプロセスは、図３に示されているように、全てのレイヤメッセージがリンクされるときスタートできる。エンコーディングプロセスは、「センダー(sender)」ロケーションにおいて開始し、それは、メッセージを生成することができる通信ネットワークにおけるいずれかのポイント（例えば、ノード）であり得る。レイヤ１メッセージを保持するセンダーは、全てのレイヤメッセージをエンコードするために十分な長さのバッファを有するメソッドエンコードを求める。
【００３１】
各レイヤのコンテキストに対するエンコードメソッドが求められる。このメソッドは、図６に示されたループＬ１０を実行する。レイヤＮメッセージに達したとき、エンコードされた長さの蓄積された和が、レイヤｒメッセージによりレイヤｒ−１メッセージに送られる。ここで、ｒは、１ないしＮの整数値である。この方法は、各レイヤに対して、図６で示されたループＬ１２を実行する。レイヤ１メッセージに達すると、完全にフォーマットされたバッファが送信のために利用可能である。
【００３２】
図５Ｂは、レイヤ１，２，…Ｎメッセージのデコーディングシーケンスを示す。デコーディングプロセスは、全てのレイヤメッセージリーダが図４に示されているようにリンクされるときスタートできる。デコーディングプロセスは、「レシーバ(Receiver)」ロケーションにおいて開始し、これは、メッセージを受信することができる通信ネットワーク中のいずれかのポイント（例えば、「ノード」）であり得る。レシーバは、レイヤ１メッセージリーダを保持し、エンコーディングプロセスにより生成された受信されたフォーマットされたバッファと共にメソッドゲットメッセージを求める。ゲットメッセージは、図４に示された利用可能なレイヤメッセージを戻す。
【００３３】
メソッドデコードが求められる。これらのステップは、各メッセージレイヤに対して実行される。メソッドデコードは、図７に示されたループＬ４１を実行する。レイヤＮメッセージに到達したとき、デコードされた長さの蓄積された和が、
レイヤｒメッセージによりレイヤｒ−１メッセージへ送られる。ここで、ｒは、１とｒとの間の整数値である。メソッドは、各レイヤに対して、図７で示されたループＬ４２を実行する。レイヤ１メッセージに到達するとき、フォーマットされたメッセージバッファは、図３に示されているように、個別のメッセージレイヤコンテキストに分解された。
【００３４】
本発明の一実施形態によれば、レイヤ１，２，…Ｎメッセージのエンコーディングは、図６を参照して詳細に説明される。図６は、メッセージのプロトコルスタックを含むレイヤのエンコーディングを示す。レイヤの「エンコーディング」は、レイヤのメッセージフィールド値を、オクテッドまたはビットストリームアンダーゴーイングフォーマッティング（フォーマットされたメッセージストリーム）へ移動させることである。図６に示されたエンコーディングプロセスは、第１および第２のループＬ１０，Ｌ１２において実行される。
【００３５】
一般に、第１のループＬ１０は、バッファ位置を、各レイヤに対してヘッダ長だけ進め、第２のループＬ１２は、各レイヤに対するヘッダフィールド値およびトレーラフィールド値をエンコードする。第１のループＬ１０は、バッファ位置がそれぞれのレイヤヘッダ長の全てを進められるまで、各レイヤに対して、プロトコルスタック中で反復される。第１のループＬ１０の反復の後、第２のループＬ１２におけるプロトコルスタック中の各レイヤに対する反復がなされる。
【００３６】
ユーザデータまたは情報を含むレイヤ（レイヤＮ）は、エンコードされるべき最初のレイヤである。ユーザデータレイヤは、「ヘッダ」を含むレイヤにより表されるが、このヘッダの一部または全ては、この場合、実際に、ユーザデータ自体である。ユーザ情報レイヤＮをこの方法で処理することは、メッセージを構成するレイヤ全ての均一な処理を容易にする。
【００３７】
第１のループＬ１０の動作を説明する。
エンコーディングプロセスは、ステップＳ２８において、送信のためにメッセージストリーム中に挿入されるべきメッセージ中の（プロトコルスタックを形成する）レイヤの全てをエンコードするために十分な長さのメッセージストリーム中の割り当てられたメッセージバッファと共に開始する。ステップＳ３０において、初期バッファ位置が、メッセージストリーム中の現在の入力バッファ位置の値にセットされる。ステップＳ３２において、エンコードされるべきメッセージ中に含まれるメッセージボディが存在するかどうかが決定される。エンコードされるべきメッセージ中のメッセージボディが存在する場合、メッセージ（またはプロトコルスタック）中の全てのレイヤが横切られるまで、処理はループＬ１０に留まる。
【００３８】
メッセージボディが存在すると仮定して、ステップＳ３４は、第１のループＬ１０において処理されたレイヤ（現在のレイヤ）が、可変長ヘッダを有するかどうかを決定する。現在のレイヤが固定であるかまたは予め定められたヘッダ長を有する場合、ステップＳ３６において、所定のヘッダ長値が現在のレイヤに割り当てられる。レイヤが可変長ヘッダを有する場合、ステップＳ３８において、そのヘッダ長が、レイヤのヘッダフィールドの全ての全長の和から決定される。
【００３９】
ステップＳ４０において、現在のバッファ位置は、レイヤのヘッダ長だけインクリメントされ、入力としてステップＳ２８に与えられる。これは、次のレイヤのコンテキストで、第１のループＬ１０をスタートさせる。ステップＳ４０からのバッファ位置は、第１のループＬ１０の次の反復のための現在のバッファ位置として、ステップＳ３０に送られ、第１のループＬ１０が、次の（上位の）レイヤにおいて実行される。
【００４０】
実際に、第１のループＬ１０において、バッファ位置は、各レイヤのヘッダ長の量だけ進められ、初期および現在のバッファ位置およびヘッダ長が、各レイヤに対する別個のコンテキスト内に保存される。第１のループＬ１０は、メッセージまたはプロトコルスタックの各レイヤに対して一度実行される。ステップ３２において、エンドオブレイヤインジケータに出会うとき、ネステッドメッセージボディがさらに存在しないことが決定される。
【００４１】
プロセスは、ステップＳ３２の「ノー」出力から第２のループＬ１２に入る。ループＬ１２において、各レイヤのヘッダフィールド値およびトレーラフィールド値がエンコードされる。各レイヤは、それ自体の別個のコンテキストを使用してエンコードされる。ヘッダフィールド値およびトレーラフィールド値は、各レイヤに対してエンコードされ、エンコーディングは、ユーザレイヤ（レイヤＮ）で開始し、物理レイヤ（レイヤ１）において終了する。第２のループＬ１２は、メッセージ中の全てのレイヤが処理されるまで、各レイヤに対して反復される。
【００４２】
第２のループＬ１２の動作を説明する。
ステップＳ３２における「ノー」出力から、処理は、ステップＳ２８においてスタートした同じコンテキストを使用して、ステップＳ４２まで続く。ヘッダ中のメッセージ長フィールドが、必要な場合、初期バッファ位置およびヘッダ／ボディ長から演算される。ユーザデータレイヤ、レイヤＮに対して、ボディ長はゼロである。第２のループＬ１２において処理されているレイヤ（現在のレイヤ）のヘッダフィールド値が、ステップＳ４４においてエンコードされる。エンコーディングの間に、現在のレイヤのヘッダフィールド値が、フォーマットされるべきメッセージストリームに移動される。ステップＳ４６において、現在のバッファ位置は、現在のレイヤ中のヘッダフィールド値の長さの和または現在のレイヤの全ヘッダ長によりインクリメントされる。
【００４３】
ステップＳ４８において、トレーラに対するＣＲＣ／ＦＣＳフィールドが、必要とされる場合、スターティングポイントおよび演算を適用する範囲を提供するために、初期バッファ位置およびヘッダ／ボディ長を使用して演算される。現在のレイヤに対するトレーラフィールド値が、ステップＳ５０においてエンコードされる。エンコーディングの間に、トレーラフィールド値は、フォーマットされたメッセージストリームに移動される。ステップＳ５２において、現在のバッファ位置は、レイヤのトレーラフィールド値の長さの和（全トレーラ長）によりインクリメントされる。
【００４４】
ステップＳ５４において、レイヤの長さは、ステップＳ５２において決定された現在のバッファ位置からステップＳ３０において保存された初期のバッファ位置を引き算することにより計算され、レイヤコンテキストに記憶される。
【００４５】
第２のループＬ１２において処理すべき追加のレイヤが存在する場合、次の下位のレイヤにスイッチされ、現在のレイヤのエンコードされたメッセージ長が、ボディ長として次の下位のレイヤに送られる。ステップＳ５８において、ステップＳ２８において利用可能な現在のバッファ位置が、メッセージ長によりインクリメントされる。現在のバッファ位置は、第２のループＬ１２の始めに与えられる。第２のループＬ１２は、エンコードされているメッセージのプロトコルスタック中のレイヤの各々に対して一度実行される。メッセージのレイヤ１が第２のループＬ１２において処理された後、ステップＳ５６は、エンコーディングプロセスを終了させる。図６に示されたエンコーディングプロセスの結果の出力は、フォーマットされたバッファである。
【００４６】
メッセージのレイヤ１，２，…，Ｎのデコーディングを、図７を参照して詳細に説明する。図７は、メッセージのプロトコルスタックのレイヤ１，２，…，Ｎのデコーディングを示すフローチャートである。メッセージのデコーディングが、メッセージのオクテッドまたはビットを、フォーマットされたメッセージストリームから各レイヤのコンテキスト中のメッセージフィールドへ（一度に１つのレイヤ）移動させることを求める。ヘッダフィールド値は、ヘッダデコーディングループＬ４１においてデコードされ、トレーラフィールド値は、トレーラデコーディングループＬ４２においてデコードされる。
【００４７】
デコーディングプロセスは、上記した方法で生成されたもののような完全にフォーマットされたメッセージストリームバッファを入力として、ステップＳ６４において開始する。ステップＳ６６において、初期のバッファ位置は、現在のバッファ位置の値にセットされる。ステップＳ６８において、ヘッダフィールド値がデコードされ、その時点で、ヘッダのオクテッドまたはビットが、各レイヤコンテキストに記憶されたヘッダフィールドに移動される。ステップＳ７０において、バッファ位置は、デコードされたヘッダフィールド値の長さの和または全ヘッダ長によりインクリメントされる。
【００４８】
メッセージの各レイヤ（ｒ）は、デコード動作においてアシストするために、レイヤ（ｒ＋１）に対するメッセージリーダを含む。メッセージリーダは、図４に示されている。ステップＳ７２において、メッセージリーダが存在するかどうかが決定される。存在する場合、コンテキストは、現在のバッファ位置を適用するメッセージリーダにスイッチされる。このメッセージリーダは、次の上位のメッセージレイヤを表す。
【００４９】
メッセージリーダは、現在のバッファ位置においてスタートするメッセージバッファにおいて「ピーク（peeks）」し、どのタイプのメッセージが、次の上位の（ｒ＋１）レイヤに対して含まれるかを決定する。これは、正しいタイプのレイヤメッセージコンテキストを利用可能にする。これは、レイヤメッセージのメッセージリーダアドレスを、デコードすべき次のレイヤ（ｒ＋２）の後のレイヤに対するそのメッセージリーダ値に割当てる。レイヤＮメッセージに到達したとき、メッセージリーダ値は、エンドオブレイヤインジケータ（例えば、ＮＵＬＬ）である。
【００５０】
レイヤｒ＋１に対するメッセージコンテキストのセッティングは、ステップＳ７４ｃの後に行われる。この新しいレイヤコンテキストで、現在のバッファ位置は、ステップＳ６４において、ヘッダデコーディングループＬ４１に入力として与えられる。ヘッダデコーディングループＬ４１は、デコードされているメッセージのプロトコルスタック中の各レイヤに対して一度実行される。各レイヤがヘッダデコーディングループ４１において処理された後、即ち、更なるメッセージリーダが存在しない場合、ステップＳ７２は、「ノー」出力を生成する。そして、トレーラデコーディングループＬ４２は、レイヤ１，２，…，Ｎの各々のトレーラフィールド値のデコーディングを開始する。各レイヤは、それ自体のコンテキスト内でデコードされる。
【００５１】
ステップＳ７６において、保存された状態値は、現在のレイヤの初期バッファ位置、およびその結合されたヘッダおよびメッセージボディ長を含む。ステップＳ７８において、現在のレイヤのトレーラフィールド値が、デコードされる。即ち、フォーマットされたトレーラのオクテッドまたはビットが、レイヤのコンテキスト中のトレーラフィールド値に移動される。ステップＳ８０において、現在のバッファ位置が、トレーラフィールド値長の和または現在のレイヤの全トレーラ長によりインクリメントされる。
【００５２】
ステップＳ８２において、現在のレイヤの長さが、ステップＳ８０において決定された現在のバッファ位置からステップＳ６６において保存された初期のバッファ位置を引き算することにより計算される。ステップＳ８６において、現在のバッファ位置は、このレイヤ長によりインクリメントされる。新しいバッファ位置が、トレーラデコーディングループＬ４２の始めであるが、以前のレイヤのコンテキスト内に与えられる。トレーラデコーディングループＬ４２は、プロトコルスタック中のレイヤの各々に対して一度反復される。デコーディングプロセスの結果の出力は、完全にデコードされたメッセージである。最後のレイヤＮがデコードされた後、デコーディングはステップＳ８４において終了する。受信されたフォーマットされたメッセージバッファは、図３および４Ａに示されたようにレイヤメッセージに分解される。
【００５３】
【発明の効果】
以上説明したように、本発明によれば、、マルチレイヤードメッセージにおけるネステッドレイヤの改良された処理方法を提供することができる。
【００５４】
特許請求の範囲の発明の要件の後に括弧で記載した番号がある場合は、本発明の一実施例の対応関係を示すものであって、本発明の範囲を限定するものと解釈すべきではない。
【図面の簡単な説明】
【図１】Ａ  ＯＳＩモデルを示す図。
Ｂ  従来のマルチレイヤプロトコルスタックを示す図。
【図２】レイヤメッセージを処理するための従来の方法を示す図。
【図３】本発明の一実施形態によるメッセージレイヤの構成を示す図。
【図４】本発明の一実施形態によるメッセージおよびメッセージリーダコンテキストを示す図。
【図５】Ａ  本発明の一実施形態によるメッセージレイヤのエンコーディングシーケンスを示す図。
Ｂ  本発明の一実施形態によるメッセージレイヤのデコーディングシーケンスを示す図。
【図６】本発明の一実施形態によるメッセージレイヤのエンコーディング方法を示す図。
【図７】本発明の一実施形態によるメッセージレイヤのデコーディング方法を示す図。
【図１】
0003958550.tif 000002
【図２】
0003958550.tif 000003
【図３】
0003958550.tif 000004
【図４】
0003958550.tif 000005
【図５】
0003958550.tif 000006
【図６】
0003958550.tif 000007
【図７】
0003958550.tif 000008