本発明の実施の形態を説明する。本発明は、通信プロトコルを実現する構成に関して、以下の特徴を有する。すなわち本発明は、通信プロトコルにおいて「通信相手とやり取りを行う手順」と「パケット構造の解析」および「通信プロトコル非依存なAPI」をすべての通信プロトコルの共通処理として持ち、プロトコルヘッダ(通信制御部)を解析する部分だけを個別処理とする構成を特徴とするものである。上記記載の本発明の特徴について、以下図面を用いて詳細に解説する。
本発明の実施形態のネットワーク制御装置によるシステム構成例について、図1を用いてその概略を説明する。図1におけるシステム構成は、ネットワーク制御装置1、投影装置2及び入力装置3で構成される。
ネットワーク制御装置1は、UI(ユーザインターフェース)を備え、アプリケーションによる機能を実現し、外部装置との通信制御を行うものである。投影装置2は、例えば液晶プロジェクターなどの投影装置であり、ネットワーク制御装置1からの画像データ等をランプにより壁面などに投影させる。また入力装置3は、ネットワーク制御装置1に対する入力データを送信する装置であり、例えば電源ボタンや選択指示ボタンなどをいう。
次に、本発明の実施形態のネットワーク制御装置1のハードウェア構成について図2を用いて説明する。すなわち、本発明の実施形態のネットワーク制御装置1は、通信プロセッサ、11メインプロセッサ12及び外部装置13の各ハードウェアで構成される。
通信プロセッサ11は、通信(ネットワーク)制御を行うプロセッサであり、CPU101・ROM102・ローカル/IF103・ストレージ104・RAM105・ネットワーク/IF106で構成される。メインプロセッサ12は、いわゆるCPU(中央演算処理装置)である。また、外部装置13は、上述の投影装置などのように、画像データ等を外部出力させる装置である。
通信プロセッサ11は、本発明の実施形態のネットワーク制御装置1によるネットワーク制御の中枢を担うプロセッサである。なお、ローカル/IF103はUSBやPCIeなどに代表されるインターフェースである。またネットワーク/IF106は無線LANや有線LANなどのネットワークインターフェースである。
本発明の実施形態のネットワーク制御装置1に関する機能について、図3のブロック図を用いて説明する。本発明の実施形態のネットワーク制御装置1による通信制御は、クライアント手順保持部201・サーバ手順保持部202・アプリケーション層手順管理部203・アプリケーション層パケット処理部205・アプリケーション層ペイロード管理部208・アプリケーション層ヘッダ管理部209・各プロトコルヘッダ管理部・通信データフォーマット制御部215・機器情報管理部216のそれぞれの機能の実行によって処理される。
また、各プロトコルヘッダ管理部としては、DNSヘッダ管理部210・HTTPヘッダ管理部211・PJLinkヘッダ管理部212・DHCPv4ヘッダ管理部213・SNMPヘッダ管理部214がある。各管理部からのヘッダ情報をアプリケーション層ヘッダ管理部209において個別に解析することができる。
クライアント手順保持部201(プロトコル処理手順制御手段)は、ネットワーク制御装置がクライアント端末として通信制御を処理する場合の、接続後のクライアントの具体的なパケット送受信手順を保持する。クライアント手順保持部201は、複数のクライアント手順を順次実行してパケット送受信処理を実現する。なお、クライアント手順には、DNSクライアント手順・HTTPクライアント手順・HTTPクライアント手順(プロキシ認証方式取得用)があるが、クライアント手順保持部201が同時に実行する手順はその内の1の手順である。
サーバ手順保持部202(プロトコル処理手順制御手段)は、ネットワーク制御装置がサーバとして通信制御を処理する場合の、接続後のサーバの具体的なパケット送受信手段を保持する。
アプリケーション層手順管理部203は、アプリケーション層におけるパケット送受信の全体の進捗を管理する。また、アプリケーション層手順管理部203は、通信接続制御や通信切断制御を行う。その際、アプリケーション層手順管理部203は、プロトコル再送情報表204に保持されるプロトコルのタイムアウト時間およびリトライ回数を参照する。
アプリケーション層パケット処理部205(プロトコル解析手段)は、アプリケーション層におけるパケットがヘッダとペイロードから構成されることを知っている。アプリケーション層パケット処理部205は、上位層(アプリケーション)から受け取ったデータからアプリケーション層のパケットを作成し、次の処理を行う下位層へ渡す処理を行う。また、アプリケーション層パケット処理部205は、下位層から受け取ったデータからアプリケーション層のパケットを解析し、次の処理を行う上位層に渡す。また、アプリケーション層パケット処理部205は、チャンクのエンコード/デコード処理を行う。
アプリケーション層パケット処理部205は、下位層から受け取ったデータからアプリケーション層のパケットを解析し、次の処理を行う上位層に渡す際、上位アプリケーション振り分け表206(対応表)を参照する。上位アプリケーション振り分け表206については後述する。
上記のアプリケーション層手順管理部203及びアプリケーション層パケット処理部205は、必要に応じてSSL/TLS207を利用する。SSL/TLS207は、アプリケーション層の下位層における暗号通信制御を行う。アプリケーション層手順管理部203は、SSL/TLSハンドシェイク(暗号鍵共有や通信相手の認証など)においてSSL/TLS207を利用し、アプリケーション層パケット処理部205は、送受信するデータの暗号化および復号化においてSSL/TLS207を利用する。
アプリケーション層ペイロード管理部208(ペイロード解析手段)は、アプリケーション層のペイロードの構造を知っている。
アプリケーション層ヘッダ管理部209(プロトコルヘッダ解析手段)は、アプリケーション層のヘッダの構造を知っている。さらに、アプリケーション層ヘッダ管理部209は、その配下にDNSヘッダ管理部210・HTTPヘッダ管理部211・PJLinkヘッダ管理部212・DHCPv4ヘッダ管理部213・SNMPヘッダ管理部214の各プロトコルヘッダを個別に管理する構成を備える。
DNSヘッダの種別ごとのヘッダ構造を知っている。またDNSヘッダ管理部210は、DNSヘッダに格納される情報を知っている。さらにDNSヘッダ管理部210は、DNSヘッダを送受信する通信相手を知っている。
HTTPヘッダ管理部211はHTTPヘッダの構造を知っており、PJLinkヘッダ管理部212はPJLinkコマンドフォーマットを知っている。また、DHCPv4ヘッダ管理部213はDHCPv4ヘッダの構造を知っており、SNMPヘッダ管理部214はSNMPヘッダの構造を知っている。
通信データフォーマット管理部215はアプリケーション層のペイロードのデータフォーマットを知っており、機器情報管理部216は機器情報217を知っている。
認証情報管理部218は、プロトコルで転送可能な認証情報のフォーマットを知っている。認証情報管理部218は、HTTPヘッダ管理部211・PJLinkヘッダ管理部212・機器情報管理部216それぞれの認証情報
入出力データ保持部219は、プロトコル処理に対する入力データと出力データを保持する。プロトコル処理に必要な入力と処理結果を保持する箱で全般でアクセスする。
ここで、上位アプリケーション振り分け表206について、表1を使用して説明する。
上位アプリケーション振り分け表206は、アプリケーション層パケット処理部205が上位アプリケーションへデータを転送するときに使用する振り分け表である。上位アプリケーション振り分け表206は、「使用リソースと転送制御方式」を決めるためのルールを規定したものである。
表1における「コンテンツデータの特徴」について説明する。「コンテンツデータの特徴」は、HTTPなどのアプリケーションプロトコルのヘッダ情報(制御情報)から得ることができる。「操作対象」とは、振り分け先のアプリケーションを決めるものであり、各データの内容に対応して、「/service/projection」・「/state」・「/property」の各操作対象がある。
「操作方法」とは、ペイロードに含まれるコンテンツデータに対する操作を決めるものであり、各データの内容に対応して、「POST」・「PUT」・「GET」の各操作方法がある。
また「MIMEタイプ」とは、ペイロードに含まれるコンテンツデータのタイプを決めるものであり、各データの内容に対応して、「application/json」・「image/jpeg」・「video/x−rncb」の各タイプがある。
さらに「操作対象が存在するサブシステム名」とは、システム構成によって決められ、各データを転送するときに使うメモリを転送先の場所毎に決めるものである。「操作対象が存在するサブシステム名」には、各データの内容に対応して「OMAP」・「Shockley」の各サブシステムがある。
次に、表1における「使用リソースと転送制御方式」について説明する。「データ転送時に制御情報を含める」とは、アプリケーションへヘッダ情報を渡すかどうかを決めるものであり、各データの内容に応じて「Yes」・「No」で決められる。
また、「使用するバッファ」とは、データ転送時に使うバッファタイプを決めるものであり、各データの内容に対応して、「SRAM_WHIO(サイズ小)」・「SRAM_WHIO(サイズ大)」・「SRAM_DATA」の各バッファタイプがある。
さらに、「転送単位」とは、1度に送るデータ転送の単位を決めるものであり、各データに対応して「バッファサイズor実データサイズ」・「チャンクサイズ(通信相手が指定した分割データ単位)」の各転送単位が用意される。
例えば、データの内容がNo.3の投影データ(PC画面)である場合、操作対象は「/service/projection」となり、操作方法は「PUT」であり、MINEタイプは「video/x−rncb」となり、操作対象が存在するサブシステム名は「OMAP」となる。さらに、データ転送時に制御情報を含めるかについては「Yes」となり、使用するバッファは「SRAM_WHIO(サイズ大)」となり、転送単位は「チャンクサイズ(通信相手が指定した分割データ単位)」となる。
次に、アプリケーションからの要求でネットワークにデータを送信する場合のデータフォーマットと例について、図4を用いて説明する。内部リソースと送信したいデータサイズによりデータが分割される。図の一番左側にデータフォーマット(アプリレベル分割前)を示し、右へ順に分割されたデータの例(要求データ1〜3)を示す。
各フィールドについて以下説明ずる。「分割データサイズ」とは、分割されたデータサイズであり、物理レベルの送信データサイズを表すものである。例えば、要求データ1であれば分割前のアプリデータ4620バイトに対し、分割されたデータが2032バイトであることが分かる。なお、要求データ1は「HTTPヘッダ・ボディ」としてのデータとなるため、分割されたデータの2032バイト中、524バイトが制御パラメータ用に割り当てられる。
「EOF」とは、分割されたデータに対して最後のデータかどうかを示すパラメータである。「アプリデータサイズ」とは、論理レベルの送信データサイズであり、分割された場合は各分割データサイズの合計と等しくなることはいうまでもない。
また「宛先」とは、装置内でデータをやり取りするための情報で,次に処理を行うモジュールを特定するパラメータである。「制御メッセージID」とは、要求または応答を特定するパラメータである。「メッセージID詳細」とは、アプリケーションからネットワークへの要求若しくは応答か、又はネットワークからアプリケーションへの要求若しくは応答かを特定するパラメータである。
「送信先ホスト」及び「送信先ポート」は、外部装置の宛先情報を示すパラメータである。具体的には、「送信先ホスト」はIPアドレス(又はドメイン名)であり、「送信先ポート」はネットワークポート番号である。
「プロトコル種別」とは、HTTP、HTTPS(HTTP over SSL)などアプリケーションプロトコルを指定するパラメータである。また、「証明書CN名」・「認証証明書セット」・「サーバ認証失敗時の動作」・「証明書CNチェック可否」の各パラメータは、SSL/TLS207による暗号通信で使う情報である。暗号通信に必要な情報を一度に指定することで、本発明の実施形態におけるSSL/TLSの処理内容を隠蔽する。
「プロキシ利用可否」とは、プロキシ経由で接続するかどうかを指定するパラメータである。プロキシサーバの宛先、本発明の実施形態におけるプロキシ経由の接続の処理内容を隠蔽する。「コンテンツデータ」は、外部装置の通信相手へ届けたいデータの中身を示すものである。なお、上記以外の図中のパラメータ(通信モード・バイブ・予約)については、本発明の実施形態による処理内容とは無関係であるため、説明を省略する。
次に、ネットワーク送信依頼に対する応答データについて、図5を用いて説明する。既に図4で説明した内容については説明を省略する。「送信元」とは、通信モジュールの識別子を示すパラメータであり、このメッセージを受け取るアプリケーションが見る情報である。「送信結果」とは、送信処理を行った結果を示すパラメータである。例えば、応答データ1において送信結果が「0x01(成功)」であり、応答データのみであるのでコンテンツデータは0バイトであり、アプリデータ4バイトは制御パラメータとして4バイトのみが割り当てられる。
さらに、ネットワーク受信データ共有要求データのフォーマットと例について、図6を用いて説明する。なお、既に図4で説明した内容については説明を省略する。「コンテンツ種別」とは、データの中身に入っている内容を示す情報パラメータである。
さらに、Remoteのネットワーク受信共有要求に対する応答データのデータフォーマットとその例について、図7を用いて説明する。なお、既に図4で説明した内容については説明を省略する。なお、受信結果の応答データのみであるので、アプリデータ4バイトは制御パラメータとして4バイトのみが割り当てられる。
[第1実施形態]
本発明の第1実施形態のネットワーク制御装置を搭載した装置がHTTPサーバとして動作する場合の処理内容の手順を図8〜図11のシーケンス図を用いて以下説明する。図の上部に各処理を行う処理部を示す。
図の左から順に、人(TRANS_RXTX1_TASK)301・アプリケーション層プロトコル処理タスク302・データキュー303・サーバ手順保持部202・アプリケーション層パケット処理部205・HTTPヘッダ管理部211・アプリケーション層ペイロード管理部208・上位アプリケーションへの振り分け表206・ソケットIFブリッジ304・アプリケーション層とのブリッジ305・装置情報とのブリッジ306となる。
図8において、人301がアプリケーション層プロトコル処理タスク302を起動する(ステップS1)。そして、アプリケーション層プロトコル処理タスク302によりサーバ手順保持部202に対し、プロトコル手順開始処理が行われる(ステップS2)。サーバ手順保持部202はソケットIFブリッジ304を介して他の装置(HTTPクライアント)から接続されるまでデータを受信待ち受けする(ステップS3)。
サーバ手順保持部202は、最初のパケットを生成し(ステップS4)、アプリケーションが使用するメモリ領域(heap)を確保する。アプリケーション層パケット処理部205にはHTTPリクエスト2051を、HTTPヘッダ管理部211にはリクエストヘッダ2111を、アプリケーション層ペイロード管理部208にはリクエストボディ2081を使用するメモリ領域をそれぞれ確保する。
サーバ手順保持部202は、アプリケーション層プロトコル処理タスク302からのプロトコル処理実行を受け(ステップS5)次の手順を取得する(ステップS6)。そして、ソケットIFブリッジ304を介して他の装置(HTTPクライアント)から受信した(ステップS8)HTTPリクエストパケットを解析する(ステップS7)。
なお、パケット解析中にshockley内部でエラーが発生した場合のエラー処理について説明する。ソケットエラーの場合は、パケットはサーバ手順保持部202へパケット解析終了及びソケットエラーの情報を返し、サーバ手順保持部202はパケットを破棄して手順を終了する。
また、タイムアウトエラーの場合は、パケットはサーバ手順保持部202へパケット解析完了及びタイムアウトエラー情報を返し、サーバ手順保持部202は再送処理を行う。なお、再送処理の内容はプロトコル別に異なる。
さらに、パケット内部エラーの場合は、パケットはエラー情報として保持し、サーバ手順保持部202へパケット解析完了及びエラーなし情報を返す。パケットは、次のパケットを作成する際にエラー情報を次のパケットに引き継ぎ、composeでエラー応答を返す。
アプリケーション層パケット処理部205は、HTTPヘッダ管理部211におけるHTTPリクエストヘッダを解析する(ステップS9)。そして、アプリケーション層パケット処理部205は上位アプリケーションへの振り分け表206を使用し、リソース識別情報とリソースMINEタイプを指定して一致するリソース情報を取得する(ステップS10)。そして、装置情報とのブリッジ306を介して投影データを外部装置(例えば投影装置)へ転送してよいかを調べる(ステップS11)。すなわち、アプリケーション層パケット処理部205は転送先アプリケーションを特定する。
なお、リソースの検索においてエラーが発生した場合、上位アプリケーションへの振り分け表206はアプリケーション層パケット処理部205にエラー応答(E_RSOURCE_INFO_ERROR_REAONSN_NOT_FOUND・E_RSOURCE_INFO_ERROR_REAONSN_UNSUPPORT_OPERATION・E_RSOURCE_INFO_ERROR_REAONSN_UNSUPPORT_MEDIA)を返す。
また、ステップS11で投影データを転送してよいかを調べた場合に、電力状態が省エネモードである等の理由で転送できない場合に装置情報とのブリッジを介して外部装置がアプリケーション層パケット処理部205にエラー応答を返す。
次に、図9において、サーバ手順保持部202は、アプリケーション層プロトコル処理タスク302からのプロトコル手順実行を受け(ステップS12)次の手順を取得する(ステップS13)。そして、サーバ手順保持部202はアプリケーション層パケット処理部205を解析し(ステップS14)、アプリケーション層パケット処理部205はHTTPリクエストボディを解析する(ステップS15)。
アプリケーション層パケット処理部205は、アプリケーション層とのブリッジ305を介してバッファを取得し(ステップS16)、ソケットIFブリッジ304を介してペイロードデータを受信する(ステップS17)。そして、アプリケーション層パケット処理部205は受信したペイロードデータを解析し(ステップS18)、アプリケーション層とのブリッジ305を介してアプリケーションへ解析したデータを送信する(ステップS19)。
上記ステップS16からステップS19までの処理は、サブシステム間の通信でありネットワーク受信データ共有の要求コマンドを送信することにより行われる。また、上記ステップS16からステップS19までの処理は、ペイロードの解析が完了するまで繰り返される。
なお、ユーザからコンテンツ用のバッファを取得する場合、ペイロードの解析が完了するまで「SEM_TRANS_CNTNT」により排他制御をかける。ペイロードに排他制御がかかっている場合、1秒以内に排他制御が解除されない場合、アプリケーション層パケット処理部205はアプリケーション層とのブリッジ305を介してアプリケーションへ未検出の応答を返す。
また、アプリケーション層パケット処理部205は、ステップS19において、コンテンツバッファの場合はヘッダのみ先にOMAPへ転送する。転送のタイミングは、チャンクでない場合はユーザのバッファがフルになったとき、ペイロードの解析が完了したときであり、チャンクの場合はユーザのバッファがフルになったとき、1チャンク分のペイロード解析が完了したときである。
次に、図10において、サーバ手順保持部202はアプリケーション層プロトコル処理タスクからのプロトコル手順実行(ステップS20)を受け次の手順を取得する(ステップS21)。そして、サーバ手順保持部202はアプリケーション層パケット処理部205に対し次のパケットを作成する処理を行う(ステップS22)。アプリケーション層パケット処理部205は、アプリケーションからデータを受け取りHTTPレスポンス2052を作成するメモリ領域を確保する(heap)。
アプリケーション層パケット処理部205は、HTTPヘッダ管理部211に対し次のヘッダを作成する処理を行い(ステップS23)、HTTPヘッダ管理部211はHTTPレスポンスヘッダ2112を作成するメモリ領域を確保する(heap)。
またアプリケーション層パケット処理部205は、アプリケーション層ペイロード管理部208に対し次のペイロードを作成する処理を行い(ステップS24)、アプリケーション層ペイロード管理部208はHTTPレスポンスボディ2082を作成するメモリ領域を確保する(heap)。
なお、レスポンスパケットを作成処理に伴い、アプリケーション層パケット処理部205・HTTPヘッダ管理部211・アプリケーション層ペイロード管理部208によるリクエスト処理を終了する(ステップS25〜ステップS27、destroy)。
サーバ手順保持部202は、アプリケーション層パケット処理部205においてHTTPレスポンスパケットを作成し(ステップS28)、上位アプリケーションからの入力データ待ちとなる。そして、アプリケーション層プロトコル処理タスク302は、データキュー303からのキュー待ちとなる(ステップS29)。
次に、図11において、サーバ手順保持部202は、アプリケーション層プロトコル処理タスク302からのプロトコル手順実行を受け(ステップS30)、次の手順を取得する(ステップS31)。そして、サーバ手順保持部202は、アプリケーション層パケット処理部205においてHTTPレスポンス2052を作成する(ステップS32)。
アプリケーション層パケット処理部205は、HTTPヘッダ管理部211においてHTTPレスポンスヘッダ2112を作成する(ステップS33)。なお、OMAPでエラーが発生した場合、ネットワーク受信データ共有の応答コマンドにエラー情報が含まれているので、それをエラー応答として返すことになる。そして、アプリケーション層パケット処理部205は、ソケットIFブリッジ304を介し他の装置(HTTPクライアント)へHTTPレスポンスヘッダ2112を送信する(ステップS34)。
次に、サーバ手順保持部202は、アプリケーション層プロトコル処理タスク302からのプロトコル手順実行を受け(ステップS35)、次の手順を取得する(ステップS36)。そして、サーバ手順保持部202は、アプリケーション層パケット処理部205においてHTTPレスポンス2052を作成する(ステップS37)。
アプリケーション層パケット処理部205は、アプリケーション層ペイロード管理部208においてHTTPレスポンスボディを作成する(ステップS38)。そして、アプリケーション層パケット処理部205は、ソケットIFブリッジ304を介し他の装置(HTTPクライアント)へHTTPレスポンスボディ2082を送信する(ステップS39)。その後、アプリケーション層パケット処理部205は、アプリケーション層とのブリッジ305を介しバッファを解放する(ステップS40)。
次に、サーバ手順保持部202は、アプリケーション層プロトコル処理タスク302からのプロトコル手順実行を受け(ステップS41)、アプリケーション層パケット処理部205に対しセッションを再利用するか確認する(ステップS42)。そして、アプリケーション層パケット処理部205は、HTTPヘッダ管理部211に対しセッションを再利用するか確認する(ステップS43)。
セッションを再利用する場合、セッションクローズせずステップ3の受信待ちへ戻る(LOOP1)。また、セッションを再利用しない場合、セッションクローズしステップ3の受信待ちへ戻る(LOOP1)。
なお、レスポンスパケット送信処理に伴い、アプリケーション層パケット処理部205・HTTPヘッダ管理部211・アプリケーション層ペイロード管理部208によるレスポンス処理を終了する(ステップS44〜ステップS46、destroy)。
そして、サーバ手順保持部202は、アプリケーション層プロトコル処理タスク302のプロトコル手順終了処理を受け(ステップS45)、ソケットIFブリッジ304を介して他の端末(HTTPクライアント)との接続を切断する(ステップS47)。アプリケーション層プロトコル処理タスク302は、接続切断に伴いサーバ手順保持部202による処理を終了する(ステップS48、destroy)。
ここで、HTTPヘッダの解析およびHTTPヘッダの作成以外のサーバ処理は共通部で実現することとする。また、データ受信やセッション再利用受信待ち等のタイムアウトはアプリケーション層手順管理部203がプロトコル再送情報表204のタイムアウト時間を参照することで実現することとする。
[第2実施形態]
次に本発明の第2実施形態のネットワーク制御装置を搭載した装置がHTTPクライアントとして動作する場合の処理内容の手順を図12〜図19のシーケンス図を用いて以下説明する。図の上部に各処理を行う処理部を示す。
図の左から順に人(TRANS_RXTX1_TASK)401・アプリケーション層プロトコル処理タスク402・アプリケーション層IN/OUTパラメータ情報リスト403・HTTPクライアント(プロキシ認証方式取得用)手順保持部404・アプリケーション層パケット処理部405・HTTPヘッダ管理部406・HTTPクライアント(プロキシ経由接続用)手順保持部407・HTTPクライアント(プロトコルデフォルト)手順保持部408・ソケットIFブリッジ409・装置情報とのブリッジ410、一段下がってDNSクライアント手順保持部411となる。
図12において、アプリケーション層プロトコル処理タスク402が人401により起動する(ステップS101)。アプリケーション層プロトコル処理タスク402は、「rcv_dtp」処理(ステップS102)、「start App Proc」処理(ステップS103)の後、アプリケーション層IN/OUTパラメータ情報リスト403におけるメモリ領域を確保する(heap)。
アプリケーション層プロトコル処理タスク402は、「create App Proc」処理(ステップS104)の後、装置情報とのブリッジ410を介し、外部装置の設定情報を取得する(ステップS105)。そして、アプリケーション層プロトコル処理タスク402は、アプリケーション層IN/OUTパラメータ情報リスト403に対しパラメータを追加する(ステップS106)。
上記ステップS106においては、SHostInfo構造体を値として持つ「UApp Layer Param Value」構造体をリストに追加する。
「S Host Info」構造体の「f_host_name」として、プロキシを使用する場合、INFOからプロキシサーバ名を取得し、これをセットする。一方、プロキシを使用しない場合、ネットワーク送信依頼のあて先ホストをセットする。
また、「S Host Info」構造体の「f_host_port」として、プロキシを使用する場合、INFOからプロキシサーバのポート番号を取得し、セットする。一方、プロキシを使用しない場合、ネットワーク送信依頼のあて先ポートをセットする。
アプリケーション層プロトコル処理タスク402は、DNSクライアント手順保持部411において処理を行うためのメモリ領域をそれぞれ確保する(heap)。このとき、あて先がIPアドレスのときはDNS手順を生成しない。「get Inet Addr」によりバイナリIPアドレスへ変換しHTTP手順のコンストラクタへ渡す(ネットワークバイトオーダー)。
また、「App Layer List」に含まれるSHostInfo構造体の「fis_fixed」、及び「fis_received_response」は次のように設定する。すなわち、DNSを使用する場合は「TRANS_FALSE」と、DNSを使用する場合は「TRANS_TRUE」と設定する。
また、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロキシ認証方式取得用)手順保持部404において処理を行うためのメモリ領域をそれぞれ確保する(heap)。このとき、ネットワーク送信依頼のメンバをチェックし、プロキシを使用する場合のみHTTPクライアント(プロキシ認証方式取得用)手順を生成する。
また、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロキシ経由接続用)手順保持部407において処理を行うためのメモリ領域をそれぞれ確保する(heap)。このとき、ネットワーク送信依頼のメンバをチェックし、プロキシかつHTTPを使用する場合、プロキシ経由接続用の用途で、「Client Proc」のインスタンスを生成する。
さらに、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロトコルデフォルト)手順保持部408において処理を行うためのメモリ領域をそれぞれ確保する(heap)。ネットワーク送信依頼のメンバをチェックし、プロキシかつHTTPを使用する場合の処理手順はHTTPクライアント(プロキシ経由接続用)手順保持部407の場合と同様である。
次に、アプリケーション層プロトコル処理タスク402は、新たにアプリケーション層IN/OUTパラメータ情報リスト403に対しパラメータを追加する(ステップS107)。このとき、「S User Data」構造体を値として持つ「UApp Layer Param Value」構造体をリストに追加する。
アプリケーション層プロトコル処理タスク402は、DNSクライアント手順保持部411に対し、プロトコル手順開始処理を行い(ステップS108)、次いでプロトコル手順実行処理を行い(ステップS109)、その後プロトコル手順終了処理を行う(ステップS110)。このとき、名前解決の結果として、「App Layer Param List」に含まれる「S Host Info」構造体の「fipv4_address」、「fis_fixed」をセットする。
上記ステップS110の処理は、DNSクライアントの手順が完了するまで繰り返される(LOOP41)。また、各クライアント手順の終了までにソケットエラーが発生した場合(キャンセルを含む)、次のエラー処理を行う。すなわち、(a)実行中の手順と待機中の手順を削除する処理、(b)ネットワーク送信依頼の要求のユーザバッファを解放する処理、(c)OMAPにネットワーク送信依頼の応答(ホスト接続失敗・0x02)を返す処理を行う。
その後、アプリケーション層プロトコル処理タスク402は、DNSクライアント手順保持部411による処理を終了し(ステップS111、destroy)、「update Executing Proc」処理を実行する(ステップS112)。
ステップS112において、あて先情報が確定の場合(Host Info→fis_fixedがTRANS_TRUE)、待機中の手順を次に実行する手順とする(the_executing_procに設定する)。
ステップS112において、あて先情報が未確定の場合(Host Info→fis_fixedがTRANS_FALSE)であって、プライマリDNSサーバに問い合わせた結果、応答があった場合(Host Info→fis_received_responseがTRANS_TRUE)、エラー(ホスト接続失敗・0x02)を返す。
また、プライマリDNSサーバに問い合わせた結果、応答がなかった場合(Host Info→fis_received_responseがTRANS_FALSE)、あて先をセカンダリDNSサーバとして、DNS手順オブジェクトを生成・実行する。このとき、セカンダリDNSサーバが「0.0.0.0」の場合、エラー(ホスト接続失敗・0x02)を返す。さらに、セカンダリDNSサーバに問い合わせて名前解決できなかった場合は、エラー(ホスト接続失敗・0x02)を返す。
次に、図13において、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロキシ認証方式取得用)手順保持部404に対しプロトコル開始処理を行う(ステップS113)。
HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、ソケットIFブリッジ409においてソケットを作成し(ステップS114)、ソケットオプション(接続タイムアウト情報)を設定し(ステップS115)、接続処理を行い(ステップS116)、ソケットオプション(送信タイムアウト情報)を設定し(ステップS117)、ソケットオプション(受信タイムアウト情報)を設定する(ステップS118)。
HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、パケット生成処理を行い(ステップS119)、アプリケーション層パケット処理部405・HTTPヘッダ管理部406にリクエスト4051及びリクエストヘッダ4061を生成するためのメモリ領域をそれぞれ確保する(heap)。
次に、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS120)、次の手順を取得する(ステップS121)。そして、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層パケット処理部405に対し「compose(get Next Actionで示されたアクション・E_NEXT_ACTION_COMPOSE)」処理を行う(ステップS122)。
アプリケーション層パケット処理部405は、HTTPヘッダ管理部406に対し解析処理を行う(ステップS123)。これは、OMAPからのネットワーク送信依頼に含まれるHTTPヘッダを解析するものである。このとき、ネットワーク送信依頼のメンバをチェックし、リクエストURIを絶対URIに変換する。
アプリケーション層パケット処理部405は、HTTPヘッダ管理部406において、リクエストヘッダ4061を作成し(ステップS124)、次いでソケットIFブリッジ409を介して他の端末に対しリクエストパケットを送信する(ステップS125)。
次に、図14において、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS126)、次の手順を取得する(ステップS127)。そして、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層パケット処理部405において、リクエスト4051を作成する(ステップS128)。
次いで、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS129)、次の手順を取得する(ステップS130)。そして、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層パケット処理部405において次のパケットを作成する処理を行う(ステップS131)。このときレスポンス4052を作成するためのメモリ領域を確保する(heap)。
アプリケーション層パケット処理部405は、HTTPヘッダ管理部406において次のヘッダを作成する処理を行う(ステップS132)。このとき、レスポンスヘッダ4062を作成するためのメモリ領域を確保する(heap)。
その後、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層パケット処理部405及びHTTPヘッダ管理部406における処理を終了する(ステップS133、ステップS134、共にdestroy)。
次いで、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層パケット処理部405に対し解析処理を行う(ステップS135)。そして、アプリケーション層パケット処理部405は、ソケットブリッジIF409を介してHTTPレスポンスを受信する(ステップS136)。
アプリケーション層パケット処理部405は、HTTPヘッダ管理部406に対し解析処理を行い(ステップS137)、認証情報管理部412において認証情報を取り出すためのメモリ領域を確保する(heap)。
このとき、ステータスコードが417(Proxy−Authenticate)の場合、ヘッダに認証情報が含まれるので、「Auth Info」を作成し、「Auth Info」を値として持つ「U App Layer Param Value」構造体を「App Layer Param List」に追加する。
一方、ステータスコードが417以外の場合、プロキシ認証なしとみなす。このとき、「Aut hInfo」を作成せず、「Auth Info」を値として持つ「U App Layer Param Value」構造体も「App Layer Param List」に追加しない。
HTTPヘッダ管理部406は、アプリケーション層IN/OUTパラメータ情報リスト403にパラメータを追加する処理を行う(ステップS138)。次いで、HTTPヘッダ管理部406は、認証情報管理部412において認証データの解析処理を行う(ステップS139)。
ステップS139において、「TRANS_FALSE」が返ってきた場合、「S Auth Info→fis_failed」を「TRANS_TRUE」にする。「decompose」が「TRANS_FALSE」になるのは、次の2通りである。すなわち、(e)サポートしない認証方式のときと、(f)認証情報のフォーマットエラーのときである。
次に、図15において、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS140)、次の手順を取得する(ステップS141)。そして、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層パケット処理部405においてレスポンスの解析処理を行う(ステップS142)。
次いで、HTTPクライアント(プロキシ認証方式取得用)手順保持部404は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS143)、次の手順を取得する(ステップS144)。そしてHTTPクライアント(プロキシ認証方式取得用)手順保持部404はアプリケーション層パケット処理部405における処理を終了し(ステップS145、destroy)、アプリケーション層パケット処理部405はHTTPヘッダ管理部406における処理を終了する(ステップS146、destroy)。
アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロキシ認証方式取得用)手順保持部404に対し、プロトコル手順終了処理を行い(ステップS147)、HTTPクライアント(プロキシ認証方式取得用)手順保持部404はソケットIFブリッジ409との接続を切断する処理を行う(ステップS148)。
その後、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロキシ認証方式取得用)手順保持部404における処理を終了する(ステップS149、destroy)。このとき、「App Param List」の「S Auth Info→fis−failed」を確認して、「TRANS_TRUE」の場合、次の処理を行う。
すなわち、(g)ネットワーク送信依頼の応答(プロキシ認証失敗・0x06)をOMAPに返す処理、(h)実行中の手順と待機中の手順を削除する処理、(i)ネットワーク送信依頼の要求のユーザバッファを解放する処理である。
その後の処理は、alt421(HTTPクライアントで情報を受け取る・平文データ転送)処理又はalt422(HTTPクライアントで情報を受け取る・プロキシ経由接続及びSSL/TLSデータ転送)処理に分岐する。
次に、図16において、上記alt421(HTTPクライアントで情報を受け取る・平文データ転送)処理に分岐した場合の処理手順を説明する。
処理ブロックとして、図の上部左から順にアプリケーション層プロトコル処理タスク402・アプリケーション層IN/OUTパラメータ情報リスト403・HTTPクライアント(プロトコルデフォルト)手順保持部408・アプリケーション層パケット処理部405・HTTPヘッダ管理部406・認証情報管理部412・アプリケーション層ペイロード管理部413・ソケットIFブリッジ409・アプリケーション層とのブリッジ414・装置情報とのブリッジ410・暗号変換ブリッジ415となる。
HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層プロトコル処理タスク402からのプロトコル手順開始処理を受け(ステップS150)、ソケットIFブリッジ409においてソケット作成処理を行う(ステップS151)。なお、プロトコル手順開始処理にエラーが発生した場合、次のエラー処理を行う。
エラー処理としては、(j)実行中の手順を削除する処理、(k)ネットワーク送信依頼の要求のユーザバッファを解放する処理、(l)OMAPにネットワーク送信依頼の応答(ホスト接続失敗・0x02)を返す処理がある。
次いで、HTTPクライアント(プロトコルデフォルト)手順保持部408は、ソケットIFブリッジ409においてソケットオプション(接続タイムアウト情報)を設定し(ステップS152)、接続処理を行い(ステップS153)、ソケットオプション(送信タイムアウト情報)を設定し(ステップS154)、ソケットオプション(受信タイムアウト情報)を設定する(ステップS155)。
その後、HTTPクライアント(プロトコルデフォルト)手順保持部408は、リクエストパケット生成処理を行い(ステップS156)、アプリケーション層パケット処理部405・HTTPヘッダ管理部406・アプリケーション層ペイロード管理部413において、リクエスト4053・リクエストヘッダ4063・リクエストボディ4131を作成する処理を行うためのメモリ領域を確保する(heap)。
次いで、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS157)、次の手順を取得する(ステップS158)。そして、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405においてリクエスト4053を作成する処理を行う(ステップS159)。
アプリケーション層パケット処理部405は、アプリケーション層とのブリッジ414においtバッファを解放する処理を行う(ステップS160)。ここでロケフリの場合のみ、パケットの送信バッファにユーザから取得したコンテンツバッファを使用する。ロケフリの場合、HTTPヘッダのサイズが8Kを超える場合があるからである。
次いでアプリケーション層パケット処理部405は、HTTPヘッダ管理部406においてリクエストヘッダ4063を作成する処理を行う(ステップS161)。HTTPヘッダ管理部406は、認証情報管理部412に対し「setURI」処理を行い(ステップS162)、次に「setMethod」処理を行う(ステップS163)。
HTTPヘッダ管理部406は、認証情報管理部412において認証情報を作成する処理を行う(ステップS164)。このとき、プロキシを使用する場合のみalt43の処理へ分岐する。また、その際、認証に使用するユーザ名とパスワードはINFOから取得する。なお、プロキシを使用するか否かは、AuthInfoの有無によって判定する。
分岐したalt43において、認証情報管理部412は装置情報とのブリッジ410を介して外部装置から設定値を取得する(ステップS165)。そして、さらにBasic認証のときはalt431へ分岐し、ダイジェスト認証のときはalt432へ分岐する。
alt431においては、認証情報管理部412は暗号変換ブリッジ415において「base64」でデコードする処理を行う(ステップS166)。また、alt432においては、認証情報管理部412は暗号変換ブリッジ415において乱数を生成する処理を行い(ステップS167)、次いでダイジェスト計算処理を行う(ステップS168)。
アプリケーション層パケット処理部405は、ソケットIFブリッジ409を介して、他の装置へリクエストパケットを送信する処理を行い(ステップS169)、次いでバッファを解放する処理を行う(ステップS170)。ロケフリの場合のみ、パケットの送信バッファにユーザから取得したコンテンツバッファを使用しているからである。
また、ユーザから取得したコンテンツバッファは、「dh Start」処理を行わないと解放されない。そのため、「get Dh Buf As Packet」処理で取得したコンテンツバッファを保持しておき、次の「get Dh Buf」が呼ばれたタイミングで、保持しているコンテンツバッファを返す。
さらに、ロケフリの場合、「free Dh Buf As Packet」処理を行った後、必ずネットワーク送信依頼の応答を返し、「get Dh Buf/dh Start」処理が行われるため、コンテンツバッファの解放漏れがない。
次に、図17において、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS171)、次の手順を取得する(ステップS172)。そして、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405においてリクエスト4053を作成する処理を行う(ステップS173)。
アプリケーション層パケット処理部405は、アプリケーション層ペイロード管理部413においてリクエストボディ4131を作成する処理を行い(ステップS174)、ソケットIFブリッジ409を介して他の装置へリクエストボディを送信する処理を行う(ステップS175)。
次いで、アプリケーション層パケット処理部405は、アプリケーション層とのブリッジ414においてバッファを解放する処理を行う(ステップS176)。ここでは、ネットワーク送信依頼の要求コマンドのユーザバッファを解放する。なお、アプリケーション層パケット処理部405は、「S User Data」構造体を値として持つ「U App Layer Param Value」構造体をリストから削除する。
さらに、アプリケーション層パケット処理部405は、アプリケーション層とのブリッジ414においてバッファを取得する処理を行う(ステップS177)。ユーザからコンテンツ用のバッファを取得する場合、「SEM_TRANS_CNTNT」処理により排他をかける。排他がかかっている場合、排他が解除されるのを待つことになる。なお、排他をかけることで複数のコンテンツがOMAP転送時に混ざって、OMAP側で見分けがつかなくなることを防ぐことができる。
アプリケーション層パケット処理部405は、アプリケーション層とのブリッジ414を介して、サブシステム間の通信においてネットワーク送信依頼の応答コマンドを送信する。ただし、最後のネットワーク送信依頼に対する応答については、「App Param List」に「S Auth Info」がある場合、応答コマンドを送信しない。アプリケーション層パケット処理部405は、コンテンツ用バッファの排他を解除する。
アプリケーション層プロトコル処理タスク402は、ユーザ待ち処理の後、アプリケーション層IN/OUTパラメータ情報リスト403にパラメータを追加する処理を行う(ステップS179)。アプリケーション層プロトコル処理タスク402は、「S User Data」構造体を値として持つ「U App Layer Param Value」構造体をリストに追加する。なお、ステップS171〜ステップS179までの処理はペイロードの作成が完了するまで繰り返される(LOOP42)。
次に、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS180)、次の手順を取得する(ステップS181)。そして、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405において次のパケットを作成する処理を行う(ステップS182)。つまり、レスポンス4054を作成するためのメモリ領域を確保する(heap)。
また、アプリケーション層パケット処理部405は、HTTPヘッダ管理部406において次のヘッダを作成する処理を行う(ステップS183)。つまり、レスポンスヘッダ4064を作成するためのメモリ領域を確保する(heap)。
さらに、アプリケーション層パケット処理部405は、アプリケーション層ペイロード管理部413において次のペイロードを作成する処理を行う(ステップS184)。つまり、レスポンスボディ4132を作成するためのメモリ領域を確保する(heap)。
HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405における処理を終了する(ステップS185、destroy)。また、アプリケーション層パケット処理部405は、HTTPヘッダ管理部406・アプリケーション層ペイロード管理部413における処理をそれぞれ終了する(ステップS186、ステップS187、destroy)。
次いで、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405において解析処理を行う(ステップS188)。アプリケーション層パケット処理部405は、ソケットIFブリッジ409に対し「recv Socket」処理を行う(sテップS189)。
さらに、アプリケーション層パケット処理部405は、ソケットIFブリッジ409に対し「decompose」処理を行う(ステップS190)。このとき、ステータスコードが417(Proxy−Authenticate)の場合、「App Param List」の「S Auth Info→fis_failed」を「TRANS_TRUE」にする。
また、ステータスコードが417以外の場合は、「App Param List」の「SAuthInfo→fis_failed」を「TRANS_FALSE」にする。
また、HTTPヘッダ管理部406は、「decompose」のoutパラメータの「packet_attr」を使用して、ペイロードのサイズが分かっているか不明かをアプリケーション層パケット処理部405に返す。ペイロードサイズが分かっている場合、「packet_attr.f_has_payload_size」は「TRANS_TRUE」であり、ペイロードサイズが不明の場合、「packet_attr.f_has_payload_size」は「TRANS_FALSE」である。
なお、HTTPクライアント(プロトコルデフォルト)手順保持部408は、「App Param List」に「Auth Info」が含まれる場合、「SAuthInfo→fis_failed」が「TRANS_TRUE」であれば、ネットワーク送信依頼の応答(プロキシ認証失敗・0x06)を、「TRANS_FALSE」であれば、ネットワーク送信依頼の応答(成功・0x01)を返す。
次に、図18において、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS191)、次の手順を取得する(ステップS192)。そして、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405に対し解析処理を行う(ステップS193)。
アプリケーション層パケット処理部405は、アプリケーション層ペイロード管理部413に対し、ペイロードのデータフォーマットセット処理を行う(ステップS194)。このとき、ペイロードサイズが分かっている場合、「has_payload_size」を「TRANS_TRUE」と、「payload_size」を「ペイロードサイズ」とセットする。
一方、ペイロードサイズが不明な場合、「has_payload_size」を「TRANS_FALSE」と、「payload_size」を「0」とセットする。
次いで、アプリケーション層パケット処理部405は、アプリケーション層とのブリッジ414に対し「get Dh Buf」処理を行う(ステップS195)。このときユーザからコンテンツ用のバッファを取得する場合、ペイロードの解析が完了するまで「SET_TRANS_CNTNT」処理で排他をかける。なお、ステップS195〜後述するステップS199までの処理はペイロードの解析が完了するまで繰り返される(LOOP43)。
次いで、アプリケーション層パケット処理部405は、ソケットIFブリッジ409に対し「recv Socket」処理を行う(ステップS196)。
次に、「recv Socket」処理においてエラーが発生したときは、alt44へ分岐する。ここで、アプリケーション層パケット処理部405は、アプリケーション層とのブリッジ414に対し「dh Start」処理を行う(ステップS197)。つまり、未転送のデータをOMAPに転送して、ループ(LOOP43)を抜けることになる。なお、「Content−Length」なしのHTTPレスポンスを受信しサーバから切断される場合、このパスを通る。
次いで、アプリケーション層パケット処理部405は、アプリケーション層ペイロード管理部413に対し「decompose」処理を行う(ステップS198)。ここで、ペイロードサイズが分かっている場合、ペイロードを全て受信した段階で「E_PAYROAD_RESULT_COMPLETE」を返し、それまでは「E_PAYROAD_RESULT_NOT_COMPLETE」を返す。また、ペイロードサイズが不明な場合、常に「E_PAYROAD_RESULT_NOT_COMPLETE」を返す。
次いで、アプリケーション層パケット処理部405は、アプリケーション層とのブリッジ414に対し「dh Start」処理を行う(ステップS199)。このとき、アプリケーション層パケット処理部405は、ヘッダだけ先にOMAPへ転送する。また、OMAPへの転送のタイミングは次の条件を満たす場合である。
その条件は、チャンクでない場合は、ユーザのバッファがフルになったとき、及びペイロードの解析が完了したときであり、チャンクの場合は、ユーザのバッファがフルになったとき、及び1チャンク分のペイロード解析が完了したときである。
その後、アプリケーション層パケット処理部405は、ユーザからのコンテンツ用のバッファの排他を解除する。なお、アプリケーション層パケット処理部405は、ソケットエラーが発生した場合、outパラメータの「error_reason」でHTTPクライアント(プロトコルデフォルト)手順保持部408にエラー理由を返す。
また、HTTPクライアント(プロトコルデフォルト)手順保持部408は、ソケットエラーが発生した場合、「E_TARNS_EXECUTE_RESULT_COMPLETED」をアプリケーション層プロトコル処理タスク402に返す。
アプリケーション層プロトコル処理タスク402は、ネットワークデータ受信共有の応答を受信する。なお、アプリケーション層プロトコル処理タスク402は、ソケットエラーで手順を終了した場合、ネットワーク受信データ共有の応答は、「App Protocol Task」処理により破棄する。
次に、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層プロトコル処理タスク402からのプロトコル手順実行を受け(ステップS200)、次の手順を取得する(ステップS201)。そして、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405に対しセッション再利用を問い合わせる処理を行う(ステップS202)。
アプリケーション層パケット処理部405は、HTTPヘッダ管理部406に対し「keep Alive」問い合わせ処理を行う(ステップS203)。その後、HTTPクライアント(プロトコルデフォルト)手順保持部408は、アプリケーション層パケット処理部405における処理を終了し(ステップS204、destroy)、アプリケーション層パケット処理部405は、HTTPヘッダ管理部406及びアプリケーション層ペイロード管理部413における処理を終了する(ステップS205、ステップS206、destroy)。
HTTPクライアント(プロトコルデフォルト)手順保持部408は、「keep Alive」ありの場合、alt45へ分岐する。ここで、HTTPクライアント(プロトコルデフォルト)手順保持部408は、パケットを生成する処理を行う(ステップS207)。つまり、ヘッダ、ペイロードを持つパケットのインスタンスを作成する。
このとき、「fis_secured」が「TARNS_TRUE」の場合、「App Layer Packet・set Low Layer Secured」を呼び出し、セキュア通信を継続して行えるようにする。
次に、図19において、セッション再利用なしの場合(alt46)とセッション再利用ありの場合(alt47)に分岐するそれぞれの処理について説明する。
セッション再利用なしの場合(alt46)、アプリケーション層プロトコル処理タスク402は、「clear App Proc」処理(ステップS208)の後、アプリケーション層とのブリッジ414においてネットワーク受信データ要求のバッファを解放する処理を行う(ステップS209)。
次いで、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロトコルデフォルト)手順保持部408に対し、プロトコル手順終了処理を行い(ステップS210)、HTTPクライアント(プロトコルデフォルト)手順保持部408は、ソケットIFブリッジ409に対し接続を切断する処理を行う(ステップS211)。
そして、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロトコルデフォルト)手順保持部408及びアプリケーション層IN/OUTパラメータ情報リスト403における処理を終了する(ステップS212、ステップS213、destroy)。このとき、リストに残っている「S Host Info」構造体を値として持つ「S App Layer Param」構造体と、「S Auth Info」構造体を値として持つ「S App Layer Param」構造体を削除する。そして、ステップS102(rcv_dtp)の処理へ戻る。
一方、セッション再利用ありの場合(alt47)、「trcv_dtq」処理(ステップS214)の後、さらに分岐する(alt471、alt472)。E_OK以外の場合(alt471)、「clearAppProc」処理を行い、ステップS102の処理(rcv_dtp)へ戻る。
また、E_OKの場合(alt472)、さらに分岐する(alt4721、alt4722)。あて先のアドレスとポート番号が異なる場合(alt4721)、「clear App Proc」処理を行い、ステップS102の処理(rcv_dtp)へ戻る。
あて先のアドレスとポート番号が同じ場合(alt4722)、アプリケーション層プロトコル処理タスク402は、HTTPクライアント(プロトコルデフォルト)手順保持部408に対し「is Connection Established」処理を行う(ステップS215)。そしてHTTPクライアント(プロトコルデフォルト)手順保持部408は、ソケットIFブリッジ409に対しサーバとの接続維持を確認する(ステップS216)。
その後、さらに処理は分岐する(alt47221、alt47222)。接続が維持されている(is Connectedの戻りが「TRANS_TRUE」)の場合(alt47221)、ステップS103の処理(start App Proc)へ戻る。この場合、実行中の手順が既に存在するので、「excute」処理までスキップされる。
一方、接続が維持されていない(is Connectedの戻りが「TRANS_FALSE」)の場合(alt47222)、「clear App Proc」処理を行い、ステップS102の処理(rcv_dtp)へ戻る。
[第3実施形態]
次に本発明の第3実施形態のネットワーク制御装置を搭載した装置がHTTPクライアントとして暗号通信を行う場合の処理内容の手順を図20〜図23のシーケンス図を用いて以下説明する。図の上部に各処理を行う処理部を示す。なお、アプリケーションから受け取ったデータからHTTPリクエストパケットを作成する処理内容についての説明は、第2実施形態と同様であるので省略し、暗号通信処理を中心に説明する。
本発明の第3実施形態と第2実施形態との違いは、第3実施形態においては暗号通信を行うためにSSL/TLSのセッションの開始および終了処理を行う点にある。つまり、データの送受信にSSL/TLSを使用し、データを暗号化して送信、そして復号して受信という操作を行う点である。なお、図4で説明したネットワーク送信依頼要求の属性(証明書CN名・認証証明書セット・サーバ認証失敗時の動作・証明書CNチェック可否)により暗号化通信の手続をすべて隠蔽する。
図の左から順に人(TRANS_RXTX1_TASK)501・アプリケーション層プロトコル処理タスク502・クライアント手順保持部506・アプリケーション層パケット処理部507・アプリケーション層ペイロード管理部508・HTTPヘッダ管理部511・ソケットIFブリッジ503・アプリケーション層とのブリッジ504・SSL/TLS505となる。
人501からのタスク起動を受け、アプリケーション層プロトコル処理タスク502が起動される(ステップS401)。アプリケーション層プロトコル処理タスク502は、データキュー待ちを行う(ステップS402)。キュー待ちは、ユーザからの割り込みによりデータキューへセットする。このとき、サブシステム間の通信において図4で説明したネットワーク送信依頼要求データを受信する。
なお、デバイスヘッダの場合、分割データサイズとしてOMAP省エネ0がセットされ、EOFは「0x00」である。一方、アプリヘッダの場合、アプリデータサイズとしてOMAP通信が通信データサイズをセットする。このときのあて先は「0x0003(RXTX3)」であり、制御メッセージは「0x02」であり、メッセージID詳細が「0x0D」であり、通信モードが「0x00」であり、バイブが「0x00」である。
その後、「handle Data Queue Event」(ステップS403)・「handle User Event」(ステップS404)を経て、「start App Proc」の関数を実行する(ステップS405)。この関数により「open_error_reason」を定義し、呼び出される関数によりアウトパラメータで引き渡す。
アプリケーション層プロトコル処理タスク502は、クライアント手順保持部506に対しコンストラクタによりクライアント手順を処理するメモリ領域を確保する(heap)。このとき、SSL通信を行うかどうかを判断するフラグを第3引数によりセットする。そして、アプリケーション層プロトコル処理タスク502は、クライアント手順保持部506に対し「open」により開始処理を行う。
クライアント手順保持部506は、アクションメソッドにより開始処理を行う(ステップS406)。そして、クライアント手順保持部506は、ソケットIFブリッジ503にソケットを作成し、外部の「SOCK_Socket」を呼び出す(ステップS407)。クライアント手順保持部506は、クライアントのプロトコル手順開始処理を行う(ステップS408)。
次に、クライアント手順保持部506は、ソケットIFブリッジ503に対しソケットオプションを設定し、外部の「SOCK_Set Sock Option」を呼び出す(ステップS409)。そして、クライアント手順保持部506は、ソケットIFブリッジ503を介し外部装置と接続する(ステップS410)。このとき、外部の「SOCK_Connect」を呼び出す。
クライアント手順保持部506は、SSL/TLS505に対しSSL/TLSセッションの開始処理を行う(ステップS411)。このとき、サブシステム間通信のネットワーク送信依頼要求データのパラメータを参照し、プロトコル種別がHTTPS(0x02)のときに「TLS_Open Socket」を呼び出す。また、このタイミングで属性が「fis_secured」によりSSL/TLSであることを保持しておく。
クライアント手順保持部506は、アプリケーション層パケット処理部507・アプリケーション層ペイロード管理部508・HTTPヘッダ管理部511に、HTTPリクエスト5051・リクエストボディ5081・リクエストヘッダ5111を作成するためのメモリ領域を確保する(heap)。また、クライアント手順保持部506は、アプリケーション層パケット処理部507に対しセキュア通信であることをセットする(ステップS412)。
なお、クライアント手順保持部506は、アプリケーション層プロトコル処理タスク502へのエラー応答時は、「send Error Response」でエラー応答を返す。OMAPへ応答する送信結果との対応は「0x01」が成功、「0x02」がホストへの接続が失敗、「0x03」がSSL接続が失敗、「0x04」がサーバ認証が失敗、「0x05」がクライアント認証が失敗、「0x06」がプロキシ認証が失敗、「0x07」がデータ通信が失敗という対応関係になる。
次に、クライアント手順保持部506は、アプリケーション層プロトコル処理タスク502からのプロトコル手順実行を受け(ステップS413)、次の手順を取得する(ステップS414)。そして、クライアント手順保持部506は、アプリケーション層パケット処理部507においてHTTPリクエスト5051を作成する(ステップS415)。
また、アプリケーション層パケット処理部507は、HTTPヘッダ管理部511においてリクエストヘッダ5111を作成し(ステップS416)、SSL/TLS505を介して暗号化送信処理を開始する(ステップS417)。このとき、「fis_low_layer_secured(TRANS_TRUE)」の場合、「TLS_WriteSocket」をコールする。また、fis_low_layer_secured(TRANS_FALSE)」の場合、「SOCK_Write」をコールする。
次に、図21において、クライアント手順保持部506は、アプリケーション層プロトコル処理タスク502からのプロトコル手順実行を受け(ステップS418)、次の手順を取得する(ステップS419)。そして、クライアント手順保持部506は、アプリケーション層パケット処理部507においてHTTPリクエスト5051を作成する(ステップS420)。
アプリケーション層パケット処理部507は、アプリケーション層ペイロード管理部508においてリクエストボディ5081を作成する(ステップS421)。また、アプリケーション層パケット処理部507は、SSL/TLS505に対し暗号化送信処理を行う(ステップS422)。
さらに、アプリケーション層パケット処理部507は、ソケットIFブリッジ503に対し、バッファ解放処理(ステップS423)、バッファ取得処理(ステップS424)、送信処理(ステップS425)を行う。このとき、アプリケーション層パケット処理部507は、ネットワーク送信依頼応答データを送信する。送信元は「TRANS_RXTX3(0x0003)」であり、送信結果は成功(0x01)である。
また、このとき、デバイスヘッダとしては、分割データサイズが4バイトであり、EOFは「0x00」である。一方、アプリヘッダとしては、アプリデータサイズが4バイトであり、あて先は「0x0001」であり、制御メッセージIDは「0x03」であり、メッセージID詳細が「0xOD」であり、通信モードが「0x00」であり、バイブが「0x00」である。
次に、アプリケーション層パケット処理部507は、戻り値を決定する(ステップS426)。ここで、OMAPから送られてくるデータが分割データの場合、次のように戻り値が決定され「execute」からパケットの「compose」処理を繰り返すこととなる。すなわち「App Layer Payroad」の戻り値は「E_PAYROAD_RESULT_NOT_COMPLETED」であり、「App Layer Packet」の戻り値は「E_PACKET_RESULT_NOT_COMPLETE_WAIT_INPUT」である。
次に、クライアント手順保持部506は、アプリケーション層プロトコル処理タスク502からのプロトコル手順実行を受け(ステップS427)、次の手順を取得する(ステップS428)。そして、クライアント手順保持部506は、アプリケーション層パケット処理部507・アプリケーション層ペイロード管理部508・HTTPヘッダ管理部511においてレスポンスパケットを作成する処理を行うが、上記の通り、この点については第2実施形態と同様であるので説明を省略する(ステップS429〜ステップS442)。
次に、図22において、クライアント手順保持部506は、アプリケーション層パケット処理部507において、ステップS437で作成されたHTTPレスポンス5053を解析する処理を行う(ステップS443)。アプリケーション層パケット処理部507は、SSL/TLS505を介して復号されたデータを受信する(ステップS444)。アプリケーション層パケット処理部507は、HTTPヘッダ管理部511においてレスポンスヘッダ5113を解析する(ステップS445)。
次に、図23において、クライアント手順保持部506は、アプリケーション層プロトコル処理タスク502からのプロトコル手順実行を受け(ステップS446)、次の手順を取得する(ステップS447)。そして、クライアント手順保持部506は、アプリケーション層パケット処理部507に対し解析処理を開始する(ステップS448)。
アプリケーション層パケット処理部507は、アプリケーション層とのブリッジ504を介しバッファを取得する(ステップS449)。このとき、HTTPヘッダのみ先にOMAPへ送る。そして、アプリケーション層パケット処理部507は、アプリケーション層とのブリッジ504を介し送信処理を行い(ステップS450)、SSL/TLS505を介し復号されたデータを受信する(ステップS451)。
アプリケーション層パケット処理部507は、アプリケーション層ペイロード管理部508に対し解析処理を行い(ステップS452)、アプリケーション層とのブリッジ504を介し送信処理を行う(ステップS453)。
次に、クライアント手順保持部506は、アプリケーション層プロトコル処理タスク502からのプロトコル手順実行を受け(ステップS454)、次の手順を取得する(ステップS455)。そして、クライアント手順保持部506はアプリケーション層パケット処理部507における処理を終了し(ステップS456、destroy)、アプリケーション層パケット処理部507はHTTPヘッダ管理部511における処理を終了し(ステップS457、destroy)、アプリケーション層ペイロード管理部508における処理を終了する(ステップS458、destroy)。
最後に、クライアント手順保持部506は、アプリケーション層プロトコル処理タスク502からのプロトコル手順終了を受け(ステップS459)、暗号通信セッションをクローズする(ステップS460)。そして、クライアント手順保持部506は、ソケットIFブリッジ503に対して接続を切断する処理を行う(ステップS461)。アプリケーション層プロトコル処理タスク502は、クライアント手順保持部506における処理を終了する(ステップS462)。
本発明は、プロトコルヘッダ解析手段が、プロトコル処理手順制御手段によるセッション再利用するか否かを指定できることを特徴としてもよい。これにより、通信プロトコル毎にセッション再利用の仕組みを実装する必要がなく工数の削減を実現することが可能となる。
本発明は、上位アプリケーションインターフェースは、暗号通信を行うか否かを指定できることを特徴としてもよい。これにより、通信プロトコル毎に暗号通信の実装を行う必要がなく工数の削減を実現することが可能となる。
本発明は、上位アプリケーションインターフェースが、中継器を経由する否かを指定できることを特徴としてもよい。これにより、プロトコル毎にプロキシサーバ接続など中継器を経由するための実装を行う必要がなく工数の削減を実現することが可能となる。
本発明は、上位アプリケーションインターフェースが、通信相手をドメイン名で指定できることを特徴としてもよい。これにより、プロトコル毎にDNSリゾルバによる名前解決の制御を行う必要がなく工数の削減を実現することが可能となる。
本発明は、プロトコルヘッダ解析手段が、複数の通信プロトコルのヘッダ情報を上位アプリケーションへ渡すことを特徴としてもよい。これにより、HTTPプロトコルのように、ヘッダの中に転送方式などの通信制御情報とそれ以外の情報が混在するプロトコルに対して、通信制御に係る処理を済ませてからそれ以外の情報をアプリケーションへ渡すことになるので、アプリケーション側の開発工数の削減を実現することが可能となる。
本発明は、上位アプリケーションインターフェースにより複数の端末から受け取った要求から複数のプロトコル処理手順を組み合わせてプロトコル通信処理を実行するための対応表を備えることを特徴としてもよい。これにより、複数の通信プロトコルを組み合わせて機能実現する場合の工数の削減を実現することが可能となる。
本発明は、プロトコル解析手段が、通信プロトコルのペイロードのデータフォーマットを個別に解析するペイロード解析手段をさらに備えることを特徴としてもよい。これにより、JSON、XML、MIB等ネットワークで送受信するデータフォーマットの拡張だけを行えば、これまでの通信プロトコルとの組み合わせで機能実現が可能となるので工数の削減を実現することが可能となる。
搭載された通信プロトコルにより機器情報の設定変更および取得を行う機器情報管理部をさらに備えることを特徴としてもよい。これにより、ネットワーク制御装置で扱う機器情報が増えてもプロトコル毎に対応が必要ないため工数の削減を実現することが可能となる。さらに、機器情報の変更による通信プロトコルの品質低下することがない。
なお、上述する各実施の形態は、本発明の好適な実施の形態であり、本発明の要旨を逸脱しない範囲内において種々変更実施が可能である。