図1は、様々な装置(デバイス)と、その装置(デバイス)の動作を監視、診断、制御するコンピュータ(システムとも呼ぶ)とを示す概略図である。具体的に、図1は、コンピュータワークステーション17、18、20および22に接続された、ローカルエリアネットワーク(LAN)等の第1のネットワーク16を含む。ワークステーションは、例えば、パーソナルコンピュータ、UNIX(登録商標)ベースのコンピュータ、リナックスベースのコンピュータ、アップルマッキントッシュ等いかなるタイプのコンピュータであってもよい。また、デジタルコピー/プリンター24、ファックス28、プリンター32もネットワーク16に接続されている。デジタルコピー/プリンターはネットワークスキャナーとしても機能する。当業者には明らかであるが、デジタルコピー/プリンター24とファクシミリ28を組み合わせて、一体の「画像形成装置」とすることができる。例えば、コピー/プリンター24、ファックス、プリンター32、ワークステーション17、18、20、22をマシン、あるいは被監視装置(デバイス)と呼ぶ。コンフィギュレーションによっては、1以上のワークステーションをビジネスオフィス機器に替えてもよい。また、いかなるビジネスオフィス機器/装置(デバイス)をネットワーク16に付加してもよい。また、ワークステーション17、18、20、22、およびオフィス機器27は中間監視装置(デバイス)として機能することもでき、ネットワーク16上の被監視装置(デバイス)からデータを集め、集めたデータを監視装置(デバイス)に送信する。
このようなビジネスオフィス機器の一例は、株式会社リコーのeCabinetである。また、ファクシミリサーバ(図示せず)をネットワーク16に接続して、電話、ケーブル、または無線で接続してもよい。デジタルコピー/プリンター24、ファクシミリ28、プリンター32は各々ネットワーク16に接続されているのに加えて、従来の電話、ケーブル、または無線接続26、30、34も有する。以下に説明するように、被監視装置(デバイス)24、28、32は、例えば、ネットワーク16とインターネットを経由して、または電話、無線、またはケーブル接続を介して監視装置(デバイス)とも呼ぶリモート監視・診断・制御ステーションと通信する。
他のビジネス環境において、被監視装置(デバイス)は、多機能画像化装置(デバイス)、スキャナー、プロジェクター、テレビ会議システム、およびシュレッダー等の装置(デバイス)を含む。他のアプリケーションにおいて、ネットワーク16はホームネットワークでもよく、その場合、被監視装置(デバイス)は(電気、ガス、水道)メータであってもよく、例えば、電子レンジ、洗濯機、乾燥機、食器洗い機、ホームエンターテイメントシステム、冷蔵庫、炊飯器、ヒーター空調機、温水器、セキュリティカメラ等の機器であってもよい。
図1において、ワイドエリアネットワーク(WAN)(例えば、インターネットやその後継ネットワーク)10が示されている。WAN10は、プライベートWANでも、パブリックWANでも、ハイブリッドタイプであってもよい。WAN10は、相互接続された複数のコンピュータとルータ12A-12Iを含んでいる。WANによる通信方式は、インターネットエンジニアリングタスクフォース(IETF)(ウェブサイト:www.ietf.org/rfc.html)から入手可能なリクエストフォーコメント(RFC)文書を通して知ることができ、例えば以下の文書がある:RFC821「Simple Mail Transfer Protocol」;RFC822「Standard for the Format of ARPA Internet Text」;RFC959「File Transfer Protocol(FTP)」;RFC2045「Multipurpose Internet Mail Extensions(MIME) Part One: Format of Internet Message Bodies」;RFC1894「An Extensible Message Format for Delivery Status Notifications」;RFC1939「Post Office protocol-Version 3」;RFC2068「Hypertext Transfer Protocol ?HTTP/1.1」;およびRFC2298「An Extensible Message Format for Message Disposition Notifications」。これら引用文献の内容は参照によりここに援用する。
トランスミッションコントロールプロトコル/インターネットプロトコル(TCP/IP)関係の通信は、例えば、W.R. Stevens著、プロトコル第一巻「TCP/IPイラストレイテッド」(Addison-Wesley Publishing Company社、1994年)に説明されている。この文献の内容は参照によりここに援用する。Comer、Stevens著「TCP/IPによるインターネットワーキング」第1巻〜第3巻もここに引用によりその全体を援用する。
引き続き図1を参照して、ファイヤーウォール50AがWAN10とネットワーク16との間に接続されている。ファイヤーウォールは、その一方の側にある権限を与えられたコンピュータだけが、他方の側にあるネットワーク、コンピュータ、個別パーツにアクセスできるようにする装置(デバイス)である。ファイヤーウォールは商業的に入手可能な既知の装置またはソフトウェア(例えば、Zone Labs社のZoneAlarm)である。同様に、ファイヤーウォール50Bと50Cは、WAN10をネットワーク52とワークステーション42からそれぞれ分離している。ファイヤーウォールに関するさらに詳細は、W.R. CheswickおよびS.M. Bellovin著「ファイヤーウォールとインターネットセキュリティ」(Addison Wesley Publishing、1994年)、およびD.B. ChapmanおよびE.D. Zwicky著「インターネットファイヤーウォールの構築」(O’Reilly & Associates, Inc.、1995年)に記載されている。この2つの引用文献の内容もすべて参照により援用する。
ネットワーク52は従来のネットワークであり、複数のワークステーション56、62、68、74を含んでいる。これらのワークステーションは分散され、一つの会社の異なる部署(例えば、販売、注文処理、会計、請求、マーケティング、生産、デザインエンジニアリング、カスタマーサービス等)に配置されている。ネットワーク52を介して接続されたワークステーションに加え、ネットワーク52には直接接続されていないワークステーション42も設けられている。ワークステーション42に接続されたディスク46に格納されたデータベース中の情報を、ネットワーク52に直接接続されたワークステーションで、WAN10を介して適当な暗号化およびプロトコルを用いて共有することもできる。また、ワークステーション42は電話線、ケーブルネットワーク、ワイヤレスネットワーク44に直接接続され、ディスク46中のデータベースにはその電話線、ケーブルネットワーク、ワイヤレスネットワーク44を通してアクセスできる。本発明で使用するケーブルネットワークは、典型的にはテレビジョン番組を送信するために使用するケーブルネットワーク、一般にはコンピュータ等で使用するデジタルデータの高速通信を提供するケーブル、またはその他望ましいタイプのケーブルを用いて実現される。
他の実施形態において、ワークステーション42はラップトップコンピュータ、PDA、パームトップコンピュータ、またはネットワーク機能を有した携帯電話であってもよい。これらの装置(デバイス)を用いてディスク46に格納されたデータベース中の情報にアクセスしてもよい。
デジタルコピー/プリンター24、オフィス機器27、ファクシミリ28、プリンター32それぞれに関する情報は、ディスク46、54、58、64、70、76に格納された1以上のデータベースに入れられる。既知のデータベースには、(1)マイクロソフト、IBM、オラクル、サイベースのSQLデータベース、(2)その他のリレーショナルデータベース、(3)非リレーショナルデータベース(例えば、オブジェクティビティ、JYDソフトウェアエンジニアリング、オリエントテクノロジー)などがある。販売、受注処理、会計、請求、カスタマーサービス、マーケティング、生産、エンジニアリング部門は各々自分のデータベースを有しても、1以上のデータベースを共有してもよい。データベースを格納するために使用する各ディスクは、ハードディスクまたは光ディスク等の不揮発メモリである。あるいは、データベースは、固体および/または半導体メモリデバイス等の記憶デバイスに格納してもよい。例えば、ディスク64にはマーケティングデータベースを格納し、ディスク58には生産データベースを格納し、ディスク70にはエンジニアリングデータベースを格納し、ディスク76にはカスタマーサービスデータベースを格納してもよい。あるいは、ディスク54と46に1以上のデータベースを格納してもよい。
ワークステーション56、62、68、74、42は、WAN10への接続に加えて、監視・診断・制御されるマシン/装置(デバイス)とのセキュアな接続をするために、電話線、ケーブル、ワイヤレスネットワークに接続されていてもよい。また、通信媒体の一つが故障したとき、バックアップとして他の通信媒体を自動的に用いて通信をおこなう。
本発明の特徴は「ストアアンドフォワード」モードの通信(例えば、インターネット電子メール、単に電子メールとも呼ぶ)、すなわちマシンを診断・制御するためのそのマシンとコンピュータ/監視システムとの間の送信を使用することにある。あるいは、FTPやハイパーテキストトランスファープロトコル(HTTP)のような直接のエンドツーエンドの(例えば、最終目的地とのソケット接続を用いた)接続をする通信モードを用いて、メッセージの送信が実現される。
図2は、図1に例示したデジタルコピー/プリンターの機械的レイアウトを示す図である。図2において、101はスキャナー用のファンであり、102はレーザプリンターで使用されるポリゴンミラーであり、103はレーザ(図示せず)からの光をコリメートするために使用するFθレンズである。参照数字104はスキャナーからの光を検出するセンサーを指す。参照数字105は、スキャナーからの光をセンサー104にフォーカスさせるレンズを指し、参照数字106は感光体ドラム132上の画像を消去するために用いる消去ランプを指す。チャージングコロナユニット107および現像ローラ108がある。参照数字109はスキャンする文書を照射するためのランプを指し、エレメント110、111、112は光をセンサー104に反射するミラーを指す。ドラムミラー113は、ポリゴンミラー102からの光を感光体ドラム132に反射するために設けられている。ファン114はデジタル画像形成装置のチャージングエリアを冷却するために使用する。第1の紙送りローラ115は、第1の給紙カセット117から用紙を給紙するために使用する。参照数字116はマニュアル給紙テーブルを指す。同様に、第2の給紙ローラ118は第2のカセット119に関して使用する。参照数字120はリレーローラを指し、121はレジストレーションローラを指し、122は画像濃度センサーを指し、123はトランスファー/セパレーションコロナユニットを指す。参照数字124はクリーニングユニットを指し、125はバキュームファンを指し、126は転送ベルトを指し、127はプレッシャーローラを指し、128はエグジットローラを指す。ホットローラ129は用紙にトナーを定着するために使用され、130は排気ファンを指し、メインモータ131はデジタルコピー/プリンター24をドライブするために使用する。
図3は、図2のデジタルコピー/プリンター24の電子部品を示すブロック図である。CPU160は装置のコントローラとして機能するマイクロプロセッサである。ランダムアクセスメモリ(RAM)162は、デジタルコピー/プリンター24の動作パラメータ等の動的に変化する情報を格納する。不揮発メモリ(例えば、リードオンリーメモリ(ROM)164またはフラッシュメモリ)は、デジタルコピー/プリンター24を記述する静的データ(例えば、装置(デバイス)のモデル名、モデル番号、シリアル番号、およびデフォルトパラメータ)のみでなく、そのデジタルコピー/プリンターを動作させるプログラムコードを格納している。
マルチポートネットワークインターフェイス166が設けられ、デジタルコピー/プリンター24は少なくとも1つの通信ネットワークを介して外部の装置(デバイス)と通信可能である。参照数字168は、電話、ワイヤレス、またはケーブルラインを表し、参照数字170はネットワーク168とは別のタイプのネットワークを表す。マルチポートネットワークインターフェイスに関するさらに詳細は、図4を参照して説明する。インターフェイスコントローラ172はオペレーションパネル174をシステムバス186に接続するために使用する。オペレーションパネル174は、デジタルコピー/プリンター24に取り付けられた標準的入出力装置(デバイス)を含んでいる。標準的入出力装置(デバイス)とは、例えば、コピーボタンや、コピー枚数、拡大/縮小、濃く/薄く等の画像形成装置の動作を制御するためのキーなどである。また、液晶ディスプレイパネルがオペレーションパネル174に含まれており、デジタルコピー/プリンター24のパラメータやメッセージをユーザに表示する。
ローカル接続インターフェイス171は、RS232、パラレルプリンターポート、USB、IEEE1394等のローカルポートを介した接続である。ファイヤーワイヤ(IEEE1394)は、Wickelgren,I著「ファイヤーワイヤに関する事実」(IEEESpectrum、1997年4月、Vol.34、Number4、19-25ページ)に記載されている。この文献の内容はすべて参照により援用する。エラー検出と再送信を含む「信頼できる」通信プロトコルを使用することが好ましい。
ストレージインターフェイス176はシステムバス186にストレージ装置(デバイス)を接続する。例えば、ストレージ装置(デバイス)はフラッシュメモリ178とディスク182を含む。フラッシュメモリ178は従来の電気的消去可能プログラマブルリードオンリーメモリ(EEPROM)を代替することができる。ディスク182は、ハードディスクドライブ、光ディスクドライブ、および/またはフロッピー(登録商標)ディスクドライブである。付加的記憶装置(デバイス)を、接続180を介してデジタルコピー/プリンター24に接続してもよい。フラッシュメモリ178を用いて、デジタルコピー/プリンター24の製品寿命にわたって頻繁には変化しないパラメータを表す準静的データを格納する。このようなパラメータには、例えば、デジタルコピー/プリンターのオプションや設定が含まれる。オプションインターフェイス184により、外部インターフェイス等の付加的ハードウェアをデジタルコピー/プリンター24に接続することができる。クロック/タイマー187を用いて時間と日付を常に把握したり、経過時間を測定したりすることができる。
図3には、デジタルコピー/プリンター24を構成する様々なセクションが示されている。参照数字202はソータを指し、デジタルコピー/プリンター24の出力をソートするために使用されるセンサーおよびアクチュエータを含んでいる。デュプレクサ200によりデュプレックス動作をすることができる。デュプレクサ200は従来のセンサーとアクチュエータを含む。大容量トレイユニット198が設けられ、多量の用紙を用紙トレイに保持することができる。デュプレクサ200と同様に、トレイユニット198も従来のセンサーとアクチュエータを含む。
給紙コントローラ196を用いて、デジタル画像形成装置(デバイス)の給紙動作を制御することができる。スキャナー194を用いて画像をスキャンしてデジタル画像形成装置(デバイス)に取り込むことができるが、これは光源、ミラー等の従来のスキャンエレメントを含んでいる。また、ホームポジションセンサー等のスキャナーセンサーを用い、スキャナーがホームポジションにいるかどうか判断する。また、ランプサーミスターを用い、スキャンランプが正しく動作しているかを確かめる。プリンター・イメージャ192はデジタル画像形成装置(デバイス)の出力を印刷するが、従来のレーザ印刷メカニズム、トナーセンサー、画像濃度センサーを有している。フューザ190では、高温ローラを用いてトナーを用紙上に溶かすが、エグジットセンサ、フューザ190がオーバーヒートしないことを保証するサーミスター、オイルセンサーが含まれている。また、オプショナルユニットインターフェイス188があり、デジタル画像形成装置(デバイス)の任意的エレメントへの接続に使用される。任意的エレメントとは、例えば、自動文書フィーダ、異なるタイプのソータ・コレータ、その他デジタル画像形成装置(デバイス)に付加できる他のエレメントである。他のエレメントには、その装置(デバイス)の位置を特定することができるGPSなどが含まれる。
図4は多(マルチ)ポートネットワークインターフェイス166の詳細を示す図である。デジタル画像形成装置(デバイス)は以下のインターフェイスを介して外部装置(デバイス)と通信することができる:トークンリングインターフェイス220;ケーブル回線で高速接続を提供するケーブルモデムユニット222;電話ライン168Aに接続された従来の電話インターフェイス224;ワイヤレスインターフェイス228;LAN170に接続されたイーサネット(登録商標)インターフェイス230。その他のインターフェイスとしてデジタル加入者ライン(DSL)(オリジナルDSL、コンセントリックDSL、アシンメトリックDSL)があるが、これに限定されない。単一の装置(デバイス)でローカルエリアネットワークと電話ラインの両方に接続できる製品がインテルから商業的に入手可能であり、Intel Pro 10/100+Modemとして知られている。
CPUその他のマイクロプロセッサまたは回路が監視プロセスを実行し、デジタル画像形成装置(デバイス)の各センサーの状態を監視する。シーケンスプロセスを用いて、デジタル画像形成装置(デバイス)を制御し動作させるための命令コードを実行する。また、(1)デジタル画像形成装置(デバイス)の動作全般を制御するために実行される中央システム制御プロセスと、(2)デジタル画像形成装置(デバイス)に接続された外部装置(デバイス)との信頼できる通信を確保するために使用する通信プロセスがある。システム制御プロセスは、静的メモリ(例えば、図3に示したROM164)、準静的メモリ(例えば、フラッシュメモリ178やディスク182)、動的メモリ(例えば、RAM162、フラッシュメモリ178、ディスク182等の揮発性または不揮発性メモリ)のデータ記憶を監視および制御する。また、静的メモリはROM164以外のデバイスであってもよく、例えばフラッシュメモリ178やディスク182を含む不揮発メモリであってもよい。
上記の通り、デジタル画像形成装置(デバイス)について詳細を説明したが、本発明は他のビジネスオフィスマシンや装置(デバイス)にも同様に適用可能である。他のビジネスオフィスマシンや装置(デバイス)とは、例えば、アナログコピー、ファクシミリ、スキャナー、プリンター、ファクシミリサーバ、プロジェクター、会議機器、シュレッダー、その他のビジネスオフィスマシン、ビジネスオフィスアプライアンス、その他のアプライアンス(例えば、電子レンジ、VCR、DVD、デジタルカメラ、携帯電話、パームトップコンピュータ)が含まれる。また、本発明には、ストアアンドフォワードまたはダイレクト接続ベースの通信を用いて動作するその他の装置(デバイス)も含む。そのような装置(デバイス)には、動作中の監視や遠隔診断が必要となるような、(ガス、水道、電気のメータシステムを含む)メータシステム、自動販売機、その他の機械的装置(デバイス)である自動車、洗濯機、乾燥機などが含まれる。また、特定目的のマシンやコンピュータの監視に加え、本発明は汎用コンピュータの監視、制御、診断に使用でき、その場合は、その汎用コンピュータが被監視装置(デバイス)であり被制御装置(デバイス)となる。
図5は本発明の別のシステムのシステム図であり、異なる装置(デバイス)やサブシステムがWAN10に接続されている。しかし、これらの装置(デバイス)やサブシステムの各々は、本発明の一部として必ずしも必須のものではない。図5に示した各コンポーネントやサブシステムが、個々に本発明の一部となる。さらに、図1に示したエレメントを、図5に示したWAN10に接続してもよい。図5では、イントラネット260−1に接続されたファイヤーウォール50−1が示されている。イントラネット260−1に接続されたサービスマシン254は、データベースフォーマットで格納されたデータ256を含むか、そのデータ256に接続されている。データ256には、被監視装置(デバイス)の履歴、実行、故障情報や、その他の動作、故障、設定に関する統計情報等、被監視装置(デバイス)にどのコンポーネントやオプショナル機器が含まれているか等を示す設定情報が含まれている。サービスマシン254は、被監視装置(デバイス)にデータを送信するように要求し、またはその被監視装置(デバイス)にリモート制御および/または診断テストを実行させることを要求する装置(デバイス)またはコンピュータとして実施される。サービスマシン254は、いかなるタイプの装置(デバイス)として実施されてもよく、汎用コンピュータなどのコンピュータ化された装置(デバイス)を用いて実施されることが好ましい。また、サービスマシン254は、請求、会計、サービス処理、パーツトラッキング、およびレポートを含む様々なデータベースを有するネットワーク上の複数のコンピュータにより構成される。
図5に示した他のサブシステムは、ファイヤーウォール50―2、イントラネット260−2、それに接続されたプリンター262を含む。このサブシステムにおいて、プリンター262(同様にコピー286)による電子メッセージを送信および受信する機能は、(1)回路、(2)マイクロプロセッサ、(3)プリンター262に含まれた、または搭載されたその他のタイプのハードウェアにより(すなわち、別の汎用コンピュータを使用せずに)実行される。
別のタイプのサブシステムは、インターネットサービスプロバイダー264の使用を含む。そのインターネットサービスプロバイダー264は、いかなるタイプのインターネットサービスプロバイダー(ISP)でもよく、アメリカオンライン、イーサリンク、ニフティサーブ等の既知の商業サービスを含む。このサブシステムにおいて、コンピュータ266はデジタルまたはアナログモデム(例えば、電話ラインモデム、ケーブルモデム、非対称デジタル加入者ライン(ADSL)で使用されるモデム、フレームリレー通信を使用するモデム、無線周波数モデム等のワイヤレスモデム、光ファイバーモデム、赤外線を使用する装置(デバイス))を介してISP264に接続されている。さらに、ビジネスオフィス装置(デバイス)268はコンピュータ266に接続されている。ビジネスオフィス装置(デバイス)268(または図5に示したその他の装置(デバイス))の代わりとして、異なるタイプのマシンを監視または制御してもよい。異なるタイプのマシンとは、例えば、デジタルコピー、すべてのタイプの機器、セキュリティシステム、ユーティリティメータ、(例えば、電気、水道、ガスメータ)、その他の装置(デバイス)を含む。
図5には、ネットワーク274に接続されたファイヤーウォール50―3も示されている。ネットワーク274はいかなるタイプのコンピュータネットワークとして実施してもよい(例えば、イーサネット(登録商標)またはトークンリングネットワーク)。ネットワークを制御するために使用するネットワークソフトウェアには、ノベルまたはマイクロソフトから商業的に入手可能なソフトウェアを含む所望のネットワークソフトウェアが含まれる。ネットワーク274はイントラネットとして実施してもよい。ネットワーク274に接続されたコンピュータは、ビジネスオフィス装置(デバイス)278から情報を取得し、ネットワークに接続された様々なマシンで発生した問題を示すレポートや、ネットワーク274に接続された月間使用レポート等を生成するために使用される。本実施形態において、コンピュータ276はビジネスオフィス装置(デバイス)278とネットワーク274の間に接続されている。このコンピュータはネットワークからの通信を受信し、適当なコマンドやデータ、その他の情報をビジネスオフィス装置(デバイス)278に転送する。
ビジネスオフィス装置(デバイス)278とコンピュータ276の間の通信は、有線ベースまたはワイヤレス方式を使用して達成される。その方式には、例えば、無線周波数接続、電気的接続、光接続(例えば、赤外線接続や光ファイバー接続)等が含まれるが、これに限定されない。同様に、図5に示した様々なネットワークやイントラネットは、所望のやり方で設立してよく、例えば、無線周波数ネットワーク等のワイヤレスネットワークを設立してもよい。ここに説明したワイヤレス通信は、拡散コードとブルートゥース仕様書(ウェブサイトwww.bluetooth.comで入手可能である)に開示された周波数ホッピングワイヤレス技術等を用いる技術を含む拡散スペクトルを用いて設立することができる。このブルートゥース仕様書は参照によりここに援用する。
図5に示した他のサブシステムは、ファイヤーウォール50―4、イントラネット260−4、それに接続されたコンピュータ282、ビジネスオフィス機器285、コピー286を含む。コンピュータ282は、レポートを生成し、診断または制御プロシージャを要求するために使用される。これらの診断および制御プロシージャは、ビジネスオフィス機器285、コピー286、または図5に示したその他の装置(デバイス)、またはそれとともに使用する装置(デバイス)で実行してもよい。図5は複数のファイヤーウォールを示しているが、ファイヤーウォールは好ましいが、任意的な機器であり、それゆえ、本発明はファイヤーウォールなしで使用することもできる。ネットワークされた機器の監視および制御のために、コンピュータ254ではなくどのコンピュータ(266、272、または282)を使用することもできる。また、どのコンピュータがコンピュータ254にアクセスして、必要な装置(デバイス)情報や使用情報を、ウェブを介して読み出してもよい。
図6Aは、典型的な電子メール交換システムに接続された装置(デバイス)・機器300を示しており、コンポーネント302、304、306、308、310、312、314、316、318を含んでいる。このシステムは従来例であり、Stevensの図28.1に基づき作成した。コンピュータインターフェイス302は、ここに説明したいかなるアプリケーションユニットや装置(デバイス)・機器(アプライアンス)300ともインターフェイスしている。図6Aでは装置(デバイス)・機器(アプライアンス)300は送信元であるが、図6Aの送信と受信の機能は反対にしてもよい。さらにまた、もし望ましければ、ユーザは装置(デバイス)・機器300とインターフェイスする必要はない。コンピュータインターフェイス302はメールエージェント304とインターラクトする。Unix(登録商標)用のメールエージェントとしては、MH、バークレーメール、Mushなどに人気がある。ウィンドウズ(登録商標)ファミリーのオペレーティングシステム用のメールエージェントには、マイクロソフトアウトルックとマイクロソフトアウトルックエクスプレスがある。コンピュータインターフェイス302の要求により、メールエージェント304は送信するメールを作成し送信するこれらのメッセージを、必要であればキュー306におく。送信すべきメールはメッセージトランスファーエージェント(MTA)308に転送される。Unix(登録商標)システム用の一般的なMTAはSendmailである。一般に、メッセージトランスファーエージェント308と312は、TCP/IP接続310を用いて通信を交換する。特に、メッセージトランスファーエージェント308と312の間の通信は、ネットワーク(例えば、WANまたはLAN)のサイズによらずに生じる。さらに、メッセージトランスファーエージェント308と312はどの通信プロトコルを使用してもよい。本発明の一実施形態において、図6Aのエレメント302と304はアプリケーションユニットの使用を監視するライブラリにある。メッセージトランスファーエージェント312からの電子メールメッセージはユーザメールボックス314に格納され、メールエージェント316に転送され、最終的に受信端末として機能する端末318のユーザに送信される。
この「ストアアンドフォワード」プロセスにより、送信メールエージェント304は、メール受信者との直接接続が確立されるまで待つ必要が無くなる。ネットワーク遅延により、通信にはかなりの時間を要し、その間アプリケーションは応答しない。このような応答の遅延は、アプリケーションユニットのユーザには一般に受け入れがたいものである。電子メールをストアアンドフォワードプロセスとして使用することにより、通信が失敗した後の再送を一定期間(例えば3日間)自動的に行うことができる。別の実施形態において、1以上の別のスレッドに通信要求をパスすることにより、アプリケーションは待機することを避けることができる。これらのスレッドは、受信端末318との通信を制御することができ、アプリケーションは再度ユーザインターフェイスに応答をすることができる。さらに別の実施形態において、続ける前に通信を完了させたいとユーザが思っているとき、受信端末との直接通信を使用する。そうした直接通信には、送信および受信端末巻のファイヤーウォールによりブロックされないプロトコルを使用することができる。そのようなプロトコルの例としては、Telnet、ファイルトランスファープロトコル(FTP)、ハイパーテキストトランスファープロトコル(HTTP)等が含まれる。
インターネット等のパブリックWANは一般にセキュアであるとは言えない。それゆえ、メッセージを秘匿したいときは、パブリックWAN(および複数企業のプライベートWAN)を介して送信するメッセージは暗号化する。暗号化メカニズムは既知であり、商業的に入手可能であり、本発明とともに使用することができる。例えば、Unix(登録商標)オペレーティングシステムで使用するためのC++ライブラリ関数crypt()をサンマイクロシステムズから入手可能である。暗号化および復号ソフトウェアパッケージが知られており、商業的に入手可能であり、本発明とともに使用できる。パッケージの例として、PGPコーポレーションが出しているPGPがある。
図6Aの一般的構造の代替として、コンピュータインターフェイス302、メールエージェント304、メールキュー306、メッセージトランスファーエージェント308として機能する単一のコンピュータを使ってもよい。図6Bに示したように、装置(デバイス)・機器300はコンピュータ301に接続されており、メッセージトランスファーエージェント308を含む。
さらに別の構成を図6Cに示したが、これではメッセージトランスファーエージェント308が装置(デバイス)・機器(アプライアンス)300の一部となっている。さらに、メッセージトランスファーエージェント308はメッセージトランスファーエージェント312とTCP/IP接続310により接続されている。図6Cの実施形態において、装置(デバイス)・機器300はTCP/IP接続310に直接接続されており、電子メール機能を有する。図6Cの実施形態を使用して、電子メール機能(例えば、RFC2305(インターネットメールを用いた単一モードのファクシミリ))を有するファクシミリを装置(デバイス)・機器300として使用することができる。
図6Dは、装置(デバイス)・機器(アプライアンス)300が自分では電子メールを直接受信する能力を有していないが、メッセージトランスファーエージェント308とメールボックス314を含むメールサーバ・POP3サーバとの接続310を有し、装置(デバイス)・機器300はメールサーバから受信メールを読み出すためにPOP3プロトコルを使用する場合を示す図である。
図7はメール転送の別の実施形態を示す図であり、前に参照したStevensの図28.3に基づき作成したものである。図7は、リレーシステムを各端に有する電子メールシステムを示す。図7の構成により、組織の一システムをメールハブとして動作させることができる。図7において、2つのメールエージェント304と316の間に接続された4つのMTAがある。これらのMTAはローカルMTA322A、リレーMTA328A、リレーMTA328B、およびローカルMTA322Dである。メールメッセージで最も一般的なプロトコルはSMTP(シンプルメールトランスファープロトコル)であり、どの所望のメールプロトコルを使用することもできるが、このプロトコルを本発明に使用することができる。図7において、参照数字320はコンピュータインターフェイス302、メールエージェント304、ローカルMTA322Aを含む送信ホストを指す。装置(デバイス)・機器300はこの送信ホスト320に接続されるか、あるいはその中に含まれている。他の場合として、装置(デバイス)・機器300とホスト320は1つのマシンに含まれ、ホスト機能は装置(デバイス)・機器300に組み込まれていてもよい。他のローカルMTA322B、322C、322E、322Fが含まれていてもよい。送受信されるメールは、リレーMTA328Aのメールキュー306Bの待ち行列に入れられる。メッセージはTCP/IP接続310により転送される(例えば、インターネット接続またはその他のタイプのネットワークによる接続)。
送信メッセージはリレーMTA328Bにより受信され、必要に応じてメールキュー306Cに格納される。メールは受信ホスト342のローカルMTA322Dに転送される。メールは1つ以上のユーザメールボックス314に入れられ、その後メールエージェント316に転送され、最後に端末318のユーザに転送される。必要に応じて、メールはユーザとのインターラクション無しに直接端末に転送される。
図5のコンピュータ266と276を含めて、本発明で使用される様々なコンピュータは、図8に示したように実施されてもよい。さらに、本発明で使用される他のコンピュータは、必要に応じて、図5に示したサービスマシン254、コンピュータ272、コンピュータ282を含む、図8に示したコンピュータと同様に実施されてもよい。しかし、図8に示したすべてのエレメントが、これらのコンピュータの各々について必要なわけではない。
図8において、コンピュータ360はCPU362を含むが、このCPU362は、インテル、AMD、モトローラ、日立、NEC等の会社から商業的に入手可能なマイクロプロセッサを含む、いかなるタイプのプロセッサとして実施されてもよい。RAM364等のワーキングメモリと、ワイヤレスデバイス368と通信するワイヤレスインターフェイス366がある。インターフェイス366とデバイス368の間の通信には、いかなる無線媒体(例えば、ラジオ波や光波)を使用してもよい。ラジオ波は、コード分割マルチプルアクセス(CDMA)通信等の拡散スペクトル技術や、ブルートゥース仕様書に開示されている周波数ホッピング技術を用いて実施してもよい。
コンピュータ360はROM370とフラッシュメモリ371とを含むが、他のいかなるタイプの不揮発性メモリ(例えば、消去可能プログラマブルROM、またはEEPROM)をフラッシュメモリ371に加え、またはそれの代わりに使用してもよい。入力コントローラ372にはキーボード374およびマウス376が接続されている。シリアルインターフェイス378があり、シリアルデバイス380が接続されている。また、パラレルインターフェイス382はパラレルデバイス384に接続されており、ユニバーサルシリアルバス(USB)インターフェイス386はユニバーサルシリアルバスデバイス388に接続されており、またIEEE1394デバイス400(一般に、ファイヤーワイヤデバイスと呼ばれる)があり、IEEE1394インターフェイス398に接続されている。システムバス390はコンピュータ360の様々なエレメントを接続する。ディスクコントローラ396はフロッピー(登録商標)ディスクドライブ394とハードディスクドライブ392に接続されている。通信コントローラ406により、コンピュータ360は他のコンピュータと(例えば、電子メールメッセージを送信することにより)ネットワーク404を介して通信することができる。I/O(入出力)コントローラ408は、例えば、SCSI(Small Computer System Interface)バスを用いてプリンター410とハードディスク412に接続されている。CRT(陰極線管)414に接続されたディスプレイコントローラ416があるが、ディスプレイはいかなるタイプのディスプレイを使用してもよく、例えば液晶ディスプレイ、発光ダイオードディスプレイ、プラズマディスプレイ等であってもよい。
図9を参照して、本発明の一実施形態による、システム900全般を示す概略図が示されている。システム900は、レーザプリンター908、スキャナー910、ネットワーク装置(デバイス)912、多機能プリンター914など複数の装置(デバイス)を含んでおり、すべてネットワーク100に接続されている。これら複数の装置(デバイス)はここで一般的に「被監視装置(デバイス)」と呼ばれる。システム900にはワークステーション・監視システム902(以下、コントローラ902と呼ぶ)も含まれ、ネットワーク100に接続され被監視装置(デバイス)908、910、912、914を監視および制御する。被監視装置(デバイス)908、910、912、914には各々ユニークなアドレスが与えられている。例えば、装置(デバイス)に割り当てられたIPアドレスはその装置(デバイス)のユニークなアドレスとして機能する。このように、コントローラ902のユーザは、それぞれの被監視装置(デバイス)に割り当てられたユニークなIPアドレスにアクセスすることにより、被監視装置(デバイス)908−914それぞれにアクセスすることができる。当然のことながら、本発明ではネットワークに接続された装置(デバイス)をユニークに特定するためにIPアドレスを必ずしも使用しなくてもよい。
監視ステーションであるコントローラ902は、被監視装置(デバイス)908−914の1つにアクセスした時、SNMPおよび/またはHTTPプロトコルを介して様々な情報を取得する。情報の例としては、トラブルシューティング情報を含む、装置(デバイス)の動作状態に関する詳細な情報がある。例えば、コントローラ902は、ある装置(デバイス)にアクセスし、そのジャム位置を取得し、そのジャムを解消するためにその装置(デバイス)の担当者にメッセージを送信する。レーザプリンター908の動作状態・詳細には、トナーレベル、ペーパージャムの表示、プリンタートレイにある印刷用紙の枚数等の詳細を含まれている。
当然のことながら、コントローラ902はネットワーク100と物理的に接続されていても、ワイヤレスで結合されていてもよい。例えば、パーソナルデジタルアシスタント(PDA)920やラップトップコンピュータ922は、ネットワーク100にワイヤレスに結合しているように示されているが、コントローラ902として使用することもできる。アクセスポイント924は、ネットワーク100とPDA922またはラップトップコンピュータ922との間のワイヤレス通信を可能とするインターフェイスとして機能する。ここからは、コントローラ902がネットワークに接続されている被監視装置(デバイス)の状態を制御および監視するという仮定の下に本発明を説明する。ネットワーク100はコントローラ902と被監視装置(デバイス)908−914の間の通信を容易にし、上記被監視装置(デバイス)の監視と制御を可能とする。ネットワークに接続された装置(デバイス)の数は、本発明を限定するものではない。当然のことながら、ネットワーク100はローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)である。同様に、被監視装置(デバイス)908、910、912、914は例として示されたものである。
コントローラ902は記憶装置(デバイス)904とデータベース906に通信可能に結合している。記憶装置(デバイス)904はハードディスク、光ディスク、及び/または外部のディスクドライブを含む。データベース906は記憶装置(デバイス)904に通信可能にリンクされており、記憶装置(デバイス)904に格納されたデータを容易に検索し読み出すためのリレーショナルデータベースマネージメントシステム(RDBMS)を含んでいる。記憶装置(デバイス)904は、好ましくは、被監視装置(デバイス)908−914の各々に関する詳細情報を格納している。例えば、レーザプリンター908のメーカー、モデル、様々な機能およびトラブルシューティングの詳細等の詳細情報が記憶装置(デバイス)904に格納される。また、所定の基準値と比較したレーザプリンターの動作状態に関する偏差値も記憶装置(デバイス)904に格納されてもよい。データベース906と記憶装置(デバイス)904はコントローラに通信可能に結合していると説明したが、当然のことながら、コントローラ902は記憶装置(デバイス)と一体で、データベースがそれにインストールされてもよい。そのような場合、記憶装置(デバイス)906とデータベース904はコントローラ902に内蔵されているものとして示される。
コントローラ902は、複数の装置(デバイス)908−914の監視と制御を容易にするために、ソフトウェアでインストールされてもよい。コントローラ902は複数の装置(デバイス)908−914を監視するためにシンプルネットワークマネージメントプロトコル(SNMP)、ファイルトランスファープロトコル(FTP)、およびハイパーテキストトランスファープロトコル(HTTP)を使用し、その複数の装置(デバイス)908−914から受信したデータは950で示したようにASN.1バイナリーフォーマット、HTMLフォーマット、またはXMLフォーマットの形式で表される。
図9には画像装置(デバイス)のみを示したが、監視装置(デバイス)と複数の被監視装置(デバイス)の間で情報を通信するネットワークには、機器とメータがネットワークに接続されたホームネットワークを含んでいてもよい。当然のことながら、コントローラ・ワークステーション902により収集されたデータは、さらに処理するために、電子メール、FTP、その他の通信プロトコル手段を介してリモート装置(デバイス)に送信される。ワークステーション902、PDA920、またはラップトップコンピュータ922は、データを収集し、それを格納または通信プロトコルを使って送信するコントローラとすることができるが、コントローラはネットワークに接続されているどの装置(デバイス)であってもよい。どのネットワーク装置(デバイス)(例えば、プリンター)にも、ネットワーク中の他の装置(デバイス)の状態を監視し、収集したデータを格納し、および/または収集したデータを他の通信プロトコル手段(例えば、電子メール、FTP)を通じて送信することができる監視システムの機能を持たせることができる。ゼロックス社のドキュメント4025とHPレーザジェット9000はともに電子メールを送信する能力を有している。
監視システムのアーキテクチャ
図10は、本発明の一実施形態による、リモート装置(デバイス)に関連したデータの監視に使用される監視システム1000(および、付随するインターフェイス機能)を示す。監視システム1000はソフトウェアモジュールMonitorService1004を含む。このソフトウェアモジュールMonitorService1004はNTやウィンドウズ(登録商標)2000のサービスおよびUnix(登録商標)のデーモン等のコンピュータ常駐プログラムである。好ましい実施形態において、監視システムはオブジェクト指向ソフトウェア環境を用いて実装されている。また、Timer(タイマー)モジュール1002とMonitor(モニター)モジュール1006が監視システム1000に含まれている。タイマーモジュール1002とMonitorモジュール1006は、MonitorService(モニターサービス)モジュール1004により呼び出されるライブラリ関数である。例えば、MonitorService1004はInitTimer1003関数を呼び出してTimerモジュール1002を初期化し、obtainDelayAndAction(int&,int&)関数を呼び出して遅延および動作パラメータを取得する。init()関数は、図13に示したように、Monitorモジュール1006の様々なモジュールを初期化するために、MonitorServiceモジュール1004によっても呼び出される。init()関数を用いて、既知の方法で収集されたIPアドレス、パラメータ名、パラメータ値を含む、外部ソースを介して被監視装置(デバイス)に割り当てられたIPアドレスとパラメータ値を取得することができる。Monitorモジュール1006は、サポートデータベース1024と監視データベース1014に通信可能に結合される。これらのデータベースについては、以下でより詳しく説明する。
被監視装置(デバイス)のIPアドレスを一旦取得すると、監視システムはそのIPアドレスを用いて、製造者(ベンダー)およびモデル等の情報取得するため、被監視装置(デバイス)にコンタクトする。監視システム1000により実行される関数としては以下の関数がある。
void initTimer(void)
この関数はタイマーを初期化する。特に、この関数がトリガーになって、Timerオブジェクトはレジストリからタイミング情報を入手する。
void obtainDelayAndAction(int&out_nDelay,int&out_nAction)
この関数は、::Sleep関数(1000倍する必要がある)と動作インジケータのために、秒単位の遅延時間を返す。動作インジケータは以下のように定義されている:0=イベントチェック中;1=被監視データを送信;2=監視してローカルデータベースにデータを格納中。
int init(void)
この関数はMonitorを初期化する。また、監視される装置(デバイス)を生成する。戻り値はエラーコードであり、ゼロはエラーなしを表すと決められている。
int monitorStatus(int in_nAction)
この関数はプリセット情報を監視する。戻り値はエラーコードであり、ゼロはエラーなしを表すと決められている。
int end(void)
この関数はオブジェクトをクローズする前にMonitorをクリーンアップする。戻り値はエラーコードであり、ゼロはエラーなしを表すと決められている。
Monitor Module
図11はMonitor(モニター)モジュール1006の詳細な構造を示す図であり、様々なソフトウェアサブモジュールと、サブモジュール間の呼び出し関数を含んでいる。Monitorモジュール1006は、多数のモジュールにより使用されるクラスを含むCommon(コモン)モジュール1101、図10に示したようにインターフェイス機能により規定されたタスクを完了するために他のサブモジュール(DeviceODCBモジュール1104、Device(デバイス)モジュール1110、HWaccess(HWアクセス)モジュール1116)を管理するMonitorManager(モニターマネージャ)モジュール1102を含む。特に、DeviceODBC(デバイスODBC)モジュール1104は、標準インターフェイスを通じて外部の装置(デバイス)情報にアクセスするために、アクセスされる。HWaccessモジュール1116は、複数の通信プロトコル(例えば、HTTP、SNMP、FTP)のうち選択された通信プロトコルを用いて、被監視装置(デバイス)からベンダー、モデル、ユニークID、ステータス情報を取得する。Monitorソフトウェアモジュールの各々は、以下により詳細に説明する。
上で説明したMonitorモジュールのインターフェイスの一部を以下に挙げて説明する。例えば、モジュールによっては、情報を使いやすいフォーマットで取得するために「init」その他の関数が必要である。
void updateConfig(std::map<infoType,std::string>&)
この関数を呼ぶ前に、obtain関数がnullストリングを返したときに関数呼び出しはベンダーとモデルのエントリーを置き換えないことが好ましい。この関数はDeviceODBC1104の現在のレコードの装置(デバイス)情報データベースを更新する。この関数は下記のObtainConfigが最初に呼ばれた時に最も効率が高い。最初に、この関数はIPアドレスがDeviceODBC1104と同じかどうかをチェックする。IPアドレスフィールドが同じではないと、正しいIPアドレスのレコードがデータベースから取得される。そして、他のフィールドがコピーされ、レコードが更新される。
bool obtainConfig(std::map<infoType,std::string>&,std::map<std::string,
std::vector<SParameter>>&)
この関数は、所与のフォーマットの装置(デバイス)情報のDeviceODBC1104からのマップと、プロトコルとそれに関連するパラメータのマップを取得する。この関数は返すデータがあれば真を返し、もうデータがなければ偽を返す。
bool saveStatus(std::map<infoType,std::string>&)
この関数はステータス情報をDeviceODBC1104に保存し、保存が成功したとき真を返し、失敗したとき偽を返す。
CDevice*createDevice(const std::string&in_sIP,CHWaccess&in_HWaccess,
std::map<std::string,std::vector<SParameter>>&in_ProtocolParameters)
この関数は、in_sIPとin_ProtocolParametersに基づき装置(デバイス)を生成する。生成された装置(デバイス)はCHWaccessを通じてハードウェアに接続される。装置(デバイス)を生成できないときは0を返す。したがって、オブジェクトを呼び出すときは、リターンオブジェクトポインタが0かどうかをチェックしなければならない。
bool canAccessHW(void)
この関数は、ハードウェアがネットワークを通じてアクセスできる時に真を返し、さもなければ偽を返す。
bool getVendor(std::string&out_sVendor)
この関数はベンダー名を返す。その装置(デバイス)がシステムによってサポートされていないが、プロトコルの1つを通してアクセス可能なときは、ストリングに「GENERIC」と表示される。プロセス中でエラーが発生すると、この関数はnullストリングと偽を返す。さもなければ真を返す。
bool getModel(std::string&out_sModel)
この関数は装置(デバイス)のモデルを取得する。モデルを取得すると真を返す。プロセス中でエラーが起こると、本関数はnullストリングと偽を返す。
bool getUniqueID(std::string&out_sUniqueID)
この関数は装置(デバイス)のユニークIDを返す。ユニークIDを取得すると真を返す。プロセス中でエラーを検出すると、本関数はnullストリングと偽を返す。
bool obtainStatus(map<infoType,std::string>&out_StatusMap)
この関数はステータスマップを返す。ステータスを返したときは真を返し、ステータスを取得できなかった時は偽を返す。この関数はHWaccessとDeviceモジュールとは異なるマップを返すことに注意を要する。Deviceモジュールでは、イベントステータス情報はHWaccessから返されるマップに付加され、クリアされる。
enum checkEventStatus(void)
この関数はネットワーク装置(デバイス)のイベントを取得するトリガーとして機能する。enumタイプと値はクラスで定義しなければならない。enum値は以下の値を含む:
eNoEventSinceClearAndNoEventDetected、eNOEventSinceClearAndEventDetected、
eEventSinceClearAndNoEventDetected、eEventSinceClearAndEventDetected。
bool obtainEventStatus(std::map<infoType,std::string>&out_EventStatusMap)
この関数はイベントステータス情報を取得し、ステータスが返されたとき真を返し、ステータスを取得できなかったとき偽を返す。
void clearEventStatus(void)
この関数は最新のobtainStatusファンクションコールまたはclearEventStatusから集積されたイベントステータスをクリアする。
void initBegin(void)
この関数はHWaccessを通じて初期化プロセスを開始するが、特にソフトウェア装置(デバイス)オブジェクトを生成する初期化プロセスを開始する。
void initEnd(void)
この関数はHWaccessを通じて初期化プロセスを終了させるが、これは装置(デバイス)オブジェクト生成が終了することを示す。
bool canAccessIP(const std::string&in_sIP,std::map<std::string,
std::vector<SParameter>>&in_ProtocolParameters)
この関数は、装置(デバイス)がそのIPアドレスでアクセスできるとき真を返し、そうでなければ偽を返す。
bool obtainVendor(std::string&out_sVendor,std::map<std::string,
std::vector<SParameter>>&inOut_ProtocolParameters,const std::string&in_sIP)
この関数はベンダーを取得する。正常に動作すると真を返し、さもなければ空のストリングと偽を返す。このファンクションコールの間、プロトコルが調べられ、特定のプロトコルがステータス監視に使用できなければ、そのプロトコルはinOut_ProtocolParametersから削除される。
bool obtainModel(std::string&out_sModelName,std::map<std::string,
std::vector<SParameter>>&inOut_ProtocolParameters,const std::string&in_sIP)
この関数はモデル名を取得する。この関数は、正常に動作すれば真を返し、さもなければ空のストリングと偽を返す。このファンクションコールの間、プロトコルが調べられ、特定のプロトコルがステータス監視に使用できないとき、そのプロトコルはinOut_ProtocolParametersから削除される。
bool obtainUniqueID(std::string&out_sUniqueID,std::map<std::string,
std::vector<SParameter>>&inOut_ProtocolParameters,const std::string&in_sIP)
この関数はユニークIDを取得する。この関数は、正常に動作したとき真を返し、さもなければ空のストリングと偽を返す。このファンクションコールの間、プロトコルが調べられ、特定のプロトコルがステータス監視に使用できないとき、そのプロトコルはinOut_ProtocolParametersから削除される。
ErrorCode obtainEventStatus(std::map<map<infoType,std::string>&
out_StatusMap,const std::string&in_sIP,std::map<std::string,std::vector
<SParameter>>&in_ProtocolParameters)
この関数はイベントステータスを取得する。ErrorCodeは下で定義する。
bool obtainStatus(std::map<infoType,std::string>&out_StatusMap,const
std::string&in_sIP,const std::string&in_sVendor,const std::string&in_sModel,
std::map<std::string,std::vector<SParameter>>&in_ProtocolParameters)
この関数は装置(デバイス)のステータスを取得する。この関数は、正常に動作したときは真を返し、さもなければ偽を返す。
図12は、図11に示したように、HWaccessモジュール1116により受信されたキー値と関連する値の読み出しの情報を交換するために、HWaccessモジュール1116により使用されるデータ構造を示す図である。例えば、図12に示したように、SKeyValueInfoデータ構造は、所与のウェブページ内の(m_infoType1202に相当する)特定の情報タイプに対応する情報を以下に取得するかを決定するために使用される。一般に、多数のベンダーは、被監視装置(デバイス)に関して、それぞれのウェブページに表示して、キー情報を特定するために、ベンダー特有の識別子と用語を使用する。例えば、プリンター装置(デバイス)により印刷されるページ数を決定するために、ヒューレットパッカード社は「Page Count」機能を使用し、ゼロックス社は「Total Sheet Delivered」機能を使用する。本発明の特徴は、ベンダーごとの違いを克服し、それにより装置(デバイス)特有の情報を識別する標準化され統一された方法を提供し、データ構造/SKeyValueInfo構造体(構造)1200を使用することにより、情報に対応する値を抽出することである。SKeyValueInfoデータ構造体(構造)1200は公開された属性を含んでいる。
SKeyValueInfoは、データストリングまたはキーストリングの形式の被監視装置(デバイス)から受信した情報から、値情報を特定するために生成されたデータ構造体(構造)である。SKeyValueInfoは複数のフィールドを含み、各フィールドは図12に示した情報により表される。SKeyValueInfo構造体(構造)1200は、ストリングキーを表すm_sKeyフィールド1204と、m_nPositionフィールド1206と、m_nInLinePositionフィールド1212とを含む。このm_nPositionフィールド1206は、好ましくは、値情報の位置を特定できるストリング中の位置の数を示すタグベースの値である。例えば、プリンター装置(デバイス)のPage Countは、監視することを前提として、キーワードの次の2番目の位置に見つかる。m_sType1208は、被監視装置(デバイス)の表示されたウェブページから読み出すことができる情報のタイプを表す。
キー(Product Name)の同じデータライン内に値(例えば、被監視装置(デバイス)のモデル名)が見つかった時、m_nPositionフィールドは「0」である。m_sDelimitor1210は、キーと関連する値を抽出するために使用される特定のデリミターを示す。SKeyValueInfoデータ構造体(構造)は、HTMLフォーマットの被監視装置(デバイス)から受信した情報から値情報をいかに抽出するかを示す。
図13は、図10に示した、Monitorモジュール1006の呼び出しシーケンスを説明するための、init()関数のシーケンスを示す。MonitorManager1102は初期化を開始するにあたり、まずHWaccessモジュール1116を初期化する。そして、MonitorManager1102は被監視装置(デバイス)に関する情報を取得し、被監視装置(デバイス)に割り当てられたIPアドレスを用いてその被監視装置(デバイス)と通信する。MonitorManager1102はDeviceODBC1104にアクセスし、被監視装置(デバイス)の設定情報を取得する。MonitorManager1102に返される設定情報は、例えば、被監視装置(デバイス)のIPアドレス、各プロトコルのパラメータ名とそれに関連する値、被監視装置(デバイス)のベンダー・製造者・モデル情報が含まれる。IPアドレスを一旦取得すると、MonitorManager1102は各プロトコルについてそのIPアドレス、パラメータ名、関連値を設定し、図35のCDeviceFactoryクラス1302を通じてDeviceモジュール1110のクラス構造体(構造)に基づきソフトウェアオブジェクトを生成する。デバイスソフトウェアオブジェクトが正常に生成されると、HWaccessモジュール1116を用いて、被監視装置(デバイス)からベンダー、モデル、ユニークIDを取得し、生成されたデバイスソフトウェアオブジェクトに格納する。
デバイスソフトウェアオブジェクトからベンダー、モデル情報、ユニークIDを取得すると、MonitorManager1102は被監視装置(デバイス)から受信した情報でデータベース(例えば、DeviceODBC1104)を更新する。図13には1つの装置(デバイス)を示したが、外部ソースで指示された装置(デバイス)すべてをカバーするため、obtainConfigからupdateConfigまでのステップが繰り返される。また、図23、24、25、26に示した各プロトコルが初期化される。図24、25、26のODBCに対応するデータベーステーブルにアクセスし、アクセスされた装置(デバイス)の必要情報が外部記憶から内部データ構造体(構造)に転送され、アクセスされた装置(デバイス)からのステータス情報の収集が速くなる。
図14は、図11に示した、MonitorManagerモジュール1102による被監視装置(デバイス)のステータスを決定するためのステータス監視機能のシーケンスを示す。DeviceからHWaccessにobtainStatus関数が発行されると、CHWaccessクラスは、以下に説明するように、異なるパラメータを用いて、抽象型クラスを通じて図23、24、25、26に示した各プロトコルにobtainStatus関数コールを発行する。各プロトコルモジュールは被監視装置(デバイス)からステータス情報を抽出するのに必要な情報をすでにキャッシュしている。その被監視装置(デバイス)は、図13に示した初期化時にすでにアクセスしている。それゆえ、ステータス情報は、ステータス監視中に外部ソースにアクセスすることなく被監視装置(デバイス)から素早く抽出することができる。このプロセスは、図15に示したベクトルに格納されたすべての被監視装置(デバイス)について繰り返される。
図15を参照して、ベクトル1500が示されており、図13と14に示されたように、図35のCDeviceFactory1302により生成され、MonitorManager1102により使用される装置(デバイス)を参照している。MonitorManager1102は、例えば、図35のCDeviceFactory1302により生成されたCDeviceオブジェクト1502へのポインタ、CDeviceオブジェクト1504へのポインタ等のデバイスポインタをベクトルに格納している。ベクトルシーケンスが繰り返され、被監視装置(デバイス)のステータスを取得する。obtainStatusコマンドを発行することにより、被監視装置(デバイス)について、被監視装置(デバイス)のポーリングを実行する。ソフトウェアオブジェクトの各々のステータスを一旦取得すると、そのステータスはDeviceODBC1104を通じて更新される。ステータス監視シーケンスは図14を参照して上で説明したので、ここでは繰り返さない。
テーブルIに示したDeviceInfo構造体(構造)は、被監視装置(デバイス)の例に関する情報を示している。DeviceInfo構造体(構造)は、連絡を取る人物の電話番号に加えて電子メールアドレスを含んでいる。
監視データベース
図19は被監視装置(デバイス)の組織を示し、各被監視装置(デバイス)(表1も参照)の装置(デバイス)情報を含んでいる。図19に示したように、各通信プロトコル(例えば、SNMP、HTTP、FTP)に対して一組のパラメータが、各被監視装置(デバイス)の装置(デバイス)情報DeviceInfo1902と関連している。さらに、1つのプロトコル(例えば、SNMP1908、HTTP1910、FTP1912)のパラメータの各組は、パラメータ名と値のペア(例えば、sPar1NameとsPar1Value)のリストとして組織化されている。各プロトコルのパラメータ数は、図19に示した数よりも少ない場合も多い場合もあることに注意すべきである。例えば、ある被監視装置(デバイス)については、ユーザ名とパスワードはFTPパラメータとして格納され、一方、コミュニティ名とパスワードはSNMPパラメータとして格納されてもよい。図19に示したように、監視データベースはDeviceHistory1904とEnumCorrespondence1906に関する情報も含む。
図17は、様々な通信プロトコルにより使用されるパラメータをパスするために使用するSParameterデータ構造体(構造)1700を示している。SParameterは2つのフィールドm_sParName1702とm_sParValue1704を含み、それぞれパラメータの名前と値を表す。
図18は、監視データベースから取得した各プロトコルのパラメータのベクトルを、各被監視装置(デバイス)に関連するソフトウェアオブジェクトにパスするために使用するマップ構造体(構造)1800を示す。マップ構造体(構造)1800は、各プロトコル/キーフィールド1802、1804、1806を、図17に示したSParameterフォーマットに従って構成した、対応するパラメータ1808、1810、1812のベクトルそれぞれと関連づける。例えば、SNMPプロトコル1802について、パラメータベクトル1808はSNMPプロトコルを用いて被監視装置(デバイス)にアクセスするために使用するパラメータ名、パラメータ値ペアのリストを含んでもよい。例えば、ベクトル1808に格納されるSNMPパラメータ名は、対応するパラメータ値とともに「コミュニティ名」と「パスワード」を含んでもよい。しかし、マップ構造体(構造)1800の組織のプロトコルとそれに付随するパラメータベクトルの数はいくつでもよく、図18に示したSNMP、HTTP、FTPプロトコルに限定はされない。
サポートデータベース
図20−22は、図10に示したサポートデータベース1024の組織を示す。サポートデータベースは、各被監視装置(デバイス)からのステータス情報を抽出するのに必要な情報を含み、通信プロトコルにより組織化されている。例えば、図20は、被監視装置(デバイス)から情報を抽出するために使用するSNMP関係のサポート情報のサポートデータベースの組織を表し、SNMPVendor2002、SNMPComVendorStatus2004、EnumCorrespondence2006、SNMPVendorModelStatus2008データ構造体(構造)を含む。サポートデータベースのデータ構造体(構造)は、抽出を制御するパラメータと合わせて、抽出するステータス情報のタイプをユニークに特定するパラメータを含む。例えば、SNMPComVendorStatusデータ構造体(構造)2004は抽出する情報のタイプ(例えば、トナーレベル)を特定するnENUMフィールド2009と、他のプロトコルに関する抽出情報のウェイトや重要性を示すnRelativePriorityフィールド2010を含む。このように、同じ情報が2以上のプロトコルを用いて被監視装置(デバイス)から抽出される場合、nRelativePriority値はどのプロトコルで抽出された値を使用するかに関する表示を与える。例えば、HTTPはトナーレベルが高低を表示する情報だけを抽出でき、一方、SNMPプロトコルは残りのトナーのパーセンテージを抽出できる場合、SNMPのトナーレベルの優先レベルがHTTPの対応する値よりも高くなるであろう。また、サポートデータベースは、プロトコル全体のデフォルトの優先レベルを提供してもよい。一実施形態において、プロトコル値が0から32,000の範囲であるシステムにおいて、SNMPプロトコルは優先値10,000を与えられる。
図21と22は、サポートデータベース1024のHTTPおよびFTP部分に含まれるデータ構造体(構造)を示し、図20を参照して上で説明したデータ構造体(構造)に類似したデータ構造体(構造)を含んでいる。
本発明で使用するenumタイプの例は下で定義するinfoTypeである。(enumタイプは単なる一例であり、本発明を限定するものとして解釈してはならない。)
infoType (typedef int infoType)
このセクションはinfoType(int)の定義を説明する。データタイプには0から99までの範囲の値が割り当てられている。100から499までの値の範囲が装置(デバイス)情報に割り当てられている。500から1999の値の範囲が標準MIBパラメータを含む共通パラメータに割り当てられている。2000から3999の範囲がリコー特有の情報に割り当てられている。4000から4999の範囲がゼロックスに割り当てられている。5000から5999の範囲がレックスマークに割り当てられている。6000から6999がHPに割り当てられている。値は次のように定義されている。
EerrorCode
以下のコードは単なる一例であり、より多くのコードを既存のセットに加えてもよい。範囲0−99は予約されている。範囲100−199はSMTP用、200−299はPOP3用、300−399はSocket用、400−499はHTTP用、500−599はFTP用である。その他の明記しなかった範囲は、必要に応じてユーザが定義してもよい。
DeviceODBCモジュールの抽象型クラス
図16は、本発明によるDeviceODBCモジュールクラス構造体(構造)を示し、DeviceODBCモジュール内でCAbsProtocolParametersをどのように使用するかを示している。CAbsProtocolParametersクラスは監視データベース1014とインターフェイスし、通信プロトコルを用いて被監視装置(デバイス)にアクセスする情報を取得するように設計されている。CabsProtocolParametersクラスはプロトコルに依存する2つの仮想関数を有する:
(1)std::string obtainProtocolName(void);
(2)bool obtainParameterVector(std::vector<SParameter>&out_ParameterVector,
const std::string in_sIP)。
これらの関数を用いて、CDeviceODBCクラスはプロトコルを特定することなくCabsProtocolParameterタイプへのポインタを通じて、多数のプロトコル、それに関連するパラメータ名および値を取り扱うことができる。取得した各装置(デバイス)の情報(例えば、IPアドレス)は図18のデータ構造体(構造)に格納され、obtainConfig関数を通してMonitorManagerモジュール1102に送られる。CDeviceODBCの観点から、プロトコル名およびそれに関連したパラメータ名と値を取得するために使用するオブジェクトは、CAbsProtocolパラメータの一種であると考えられる。新しいプロトコルが追加されると、新しいオブジェクトが生成され、CabsProtocolParametersクラスへのポインタのベクトルに格納される。他の関数を変更する必要はない。
HWaccessモジュールの抽象型クラス
図23は、HWaccessパッケージのパッケージ図を示す。このパッケージは監視するネットワーク装置(デバイス)を特定し、様々なネットワークプロトコル(例えば、SNMP、HTTP、FTP)を用いてネットワーク装置(デバイス)に関する情報を取得する役割がある。このパッケージは、パッケージHTTP2302、SNMP2304、FTP2306およびクラスCHWaccess2300、CAbsProtocol2308、CrecordSet2310を含む。パッケージHTTP2302、SNMP2304、FTP2306は、ネットワーク装置(デバイス)にアクセスしそれから情報を取得するためのネットワークプロトコルを実装する。例えば、HTTPパッケージ2302は、ネットワーク装置(デバイス)のウェブページにアクセスしそのウェブページから情報を取得するためのHTTPプロトコルを実装する。クラスCHWaccess2300はすべてのプロトコルパッケージを管理しネットワーク装置(デバイス)から必要な情報を取得する。クラスCAbsProtocol2308はプロトコルを表す抽象型クラスである。このクラスは、CHWaccess2300とプロトコルパッケージ間のインターフェイスを提供する。クラスCAbsProtocol2308はCHWaccess2300に図23に示した共通関数を提供する。すべてのプロトコルがCHWaccess2300に必要な情報を提供する。後に出てくる図面で説明するように、CAbsProtocol2308から導かれるクラスは、適当なプロトコルの各関数のメソッドを提供する。クラスCRecordSet2310はマイクロソフトファウンデーションクラスのクラスである。プロトコルパッケージの各々はこのクラスによりデータベースにアクセスして、ネットワーク装置(デバイス)のどのベンダーのどのモデルがサポートされそのネットワーク装置(デバイス)から何の情報を取得するかという情報を取得することができる。
図24はSNMPパッケージ2304のパッケージ図を示す。このパッケージにより、SNMPプロトコルによりサポートされたネットワーク装置(デバイス)のベンダーとモデルおよびSNMPプロトコルによりネットワーク装置(デバイス)から取得する情報を決定し、SNMPプロトコルを通じてネットワーク装置(デバイス)にアクセスしてそのネットワーク装置(デバイス)から情報を取得する。そのパッケージはパッケージSNMPaccess2404とSNMPODBC2406およびクラスCSNMPProtocol2402を含み、図23に示したようにクラスCAbsProtocol2400とCRecordSet2408を使用する。SNMPaccessパッケージ2404はネットワーク装置(デバイス)にアクセスしそれから情報を取得するためにSNMPプロトコルを実装する。SNMPODBCパッケージ2406は、SNMPプロトコルによりサポートされたネットワーク装置(デバイス)のベンダーとモデルとSNMPプロトコルによりそのネットワーク装置(デバイス)から取得する情報に関する情報をデータベースにアクセスして取得する。CSNMPProtocolクラス2402はCAbsProtocolクラス2400から導き出されたクラスである。CSNMPProtocol2402はSNMPプロトコルを用いてネットワーク装置(デバイス)から必要な情報を取得する。CSNMPProtocol2402は図23に示したようにCAbsProtocol2400のすべてのインターフェイス関数のメソッドを提供する。図24は、CSNMPProtocol2402が使用するパッケージSNMPaccess2404とSNMPODBC2406の関数を示している。SNMPODBCパッケージ2406はクラスCRecordSet2408を使用しデータベースから情報を取得する。
図25はHTTPパッケージ2302のパッケージ図を示す。このパッケージは、HTTPプロトコルによりサポートされたネットワーク装置(デバイス)のベンダーとモデルおよびHTTPプロトコルによりそのネットワーク装置(デバイス)から取得する情報を決定し、HTTPプロトコルでそのネットワーク装置(デバイス)にアクセスしてそのネットワーク装置(デバイス)から情報を取得する。このパッケージはパッケージHTTPaccess2504とHTTPODBC2506およびクラスCHTTPProtocol2502を含み、図23に示したようにクラスCAbsProtocol2500とCRecordSet2508を使用する。HTTPaccessパッケージ2504はHTTPプロトコルを実装し、ネットワーク装置(デバイス)にアクセスしそのネットワーク装置(デバイス)から情報を取得する。HTTPODBCパッケージ2506は、データベースにアクセスし、そのデータベースからHTTPプロトコルによりサポートされたネットワーク装置(デバイス)のベンダーとモデルおよびHTTPプロトコルによりそのネットワーク装置(デバイス)から取得する情報に関する情報を取得する。CHTTPProtocolクラス2502はCAbsProtocolクラス2500から導き出されたクラスである。CHTTPProtocol2502はHTTPプロトコルを用いてネットワーク装置(デバイス)から必要な情報を取得する。CHTTPProtocol2502は図23を参照して説明したようにCAbsProtocol2500のインターフェイス機能すべてのメソッドを提供する。図25は、CHTTPProtocol2502が使用するパッケージHTTPaccess2504とHTTPODBC2506の関数も示している。HTTPODBCパッケージ2506は、クラスCRecordSet2508を使用してデータベースから情報を取得する。
図26はFTPパッケージ2306のパッケージ図を示している。このパッケージは、FTPプロトコルによりサポートされたネットワーク装置(デバイス)のベンダーとモデルおよびFTPプロトコルによりそのネットワーク装置(デバイス)から取得する情報を決定し、FTPプロトコルによりそのネットワーク装置(デバイス)にアクセスしてそのネットワーク装置(デバイス)から情報を取得する役割を担っている。このパッケージは、パッケージFTPaccess2604とFTPODBC2602およびクラスCFTPProtocol2602を含み、図23を参照して説明したようにクラスCAbsProtocol2600とCRecordSet2608を使用する。FTPaccessパッケージ2604は、ネットワーク装置(デバイス)にアクセスし、そのネットワーク装置(デバイス)から情報を取得するためFTPプロトコルを実装している。FTPODBCパッケージ2606はデータベースにアクセスし、FTPプロトコルによりサポートされたネットワーク装置(デバイス)のベンダーとモデルおよびFTPプロトコルによりそのネットワーク装置(デバイス)から取得する情報に関する情報をそのデータベースから取得する。CFTPProtocolクラス2602はCAbsProtocolクラス2600から導き出されたクラスである。CFTPProtocol2602はFTPプロトコルを用いてネットワーク装置(デバイス)から必要な情報を取得する。CFTPProtocol2602は図23を参照して説明したように、CAbsProtocol2600のインターフェイス関数すべてのメソッドを提供する。図26は、CFTPProtocol2602が使用するパッケージFTPaccess2604とFTPODBC2606の関数も示している。FTPODBCパッケージ2606はクラスCRecordSet2608を用いてデータベースから情報を取得する。
プロトコルパッケージHTTP2302、SNMP2304、FTP2306の各々は、図23から26を参照して説明したように、ネットワーク装置(デバイス)へのアクセスを管理しその装置(デバイス)から情報を取得するクラスを含んでいる。そのクラスは、ネットワーク装置(デバイス)からの情報にアクセスするプロトコルを実行するメソッドを提供する抽象型クラスCAbsProtocol2308から導き出される。抽象型クラスはインターフェイス機能のみを提供し、プロセスは何も実行しない。抽象型クラスから導き出されたクラスはインターフェイス機能を実行するメソッドを提供する。抽象型クラスの派生クラスは多数あるので、異なる派生クラスがインターフェイス機能のプロセスを異なるように実行することができる。例えば、CAbsProtocolのインターフェイス機能はobtainStatus()である。派生クラスCSNMPProtocol2402はSNMPを用いてネットワーク装置(デバイス)のステータス情報を取得するメソッドを提供する関数obtainStatus()を含み、一方派生クラスCHTTPProtocol2502はHTTPを用いてネットワーク装置(デバイス)のステータス情報を取得するメソッドを提供する関数obtainStatus()を含む。HWaccessパッケージの設計によれば、新しいプロトコルを用いてネットワーク装置(デバイス)にアクセスする新しいパッケージを管理するCAbsProtocolの派生クラスを含む新しいパッケージを付加することにより、新しいプロトコルをシステムに追加することができる。抽象型クラスによりシステムを将来的に拡張することができる。
図27A−27Dは、ネットワーク装置(デバイス)にアクセスしそれから情報を取得するためのプロトコルすべてを維持する、図23のHWaccessパッケージで使用されるデータ構造体(構造)を示している。図27Aにおいて、データ構造体(構造)はCAbsProtocol2308へのポインタのベクトル500である。クラスCHWaccess2300はこのデータ構造体(構造)を含んでおり使用する。ベクトル500はCAbsProtocol2308から導き出されたクラスへのポインタを含んでいるが、CHWaccess2300はベクトルをCAbsProtocol2308へのポインタを含むとみなし、仮想ファンクションコールメカニズムを通してCAbsProtocol2308のインターフェイス機能を呼び出す。実際にはCHWaccess2300はCAbsProtocol2308の派生クラスのインターフェイス機能を呼び出す。例えば、ベクトルの第1のエントリーのCAbsProtocolへのポインタ502は派生クラスCSNMPProtocol2402へのポインタであり、ベクトルの第2のエントリーのCAbsProtocolへのポインタ504は派生クラスCHTTPProtocol2502へのポインタであり、ベクトルの第3のエントリーのCAbsProtocolへのポインタ506は派生クラスCFTPProtocol2602へのポインタである。そこで、CHWaccess2300がベクトルのCabsProtocol2308のインターフェイス関数を呼び出すとき、実際にはCSNMPProtocol2402、CHTTPProtocol2502、CFTPProtocol2602のインターフェイス関数を呼び出している。ベクトルの抽象型クラスCAbsProtocol2308を使用することにより、どのプロトコルを使用してもネットワークにアクセスしそれから情報を取得することができる。抽象型クラスCAbsProtocol2308はどのプロトコルが使用されているかの詳細を隠蔽する。
図27BはSNMPにより監視されるネットワーク装置(デバイス)のベンダーとモデルに関する情報と、それからステータス情報を取得するために使用する情報とを維持するためにCSNMPProtocolにより使用されるデータ構造体(構造)を示している。データ構造体(構造)はマップ510である。マップ510へのキーはネットワーク装置(デバイス)のベンダー名を表すストリング512である。マップ510への値は他のマップ514である。マップ514へのキーはネットワーク装置(デバイス)のモデル名を表すストリング516である。マップ514への値はペアのベクトル518である。そのペアには構造体(構造)SOIDinfoTypeと整数が含まれている。構造体(構造)SOIDinfoTypeはSNMPを用いてネットワーク装置(デバイス)から単一のステータス情報を取得するために使用する情報を含む。それゆえ、ペアのベクトル518は特定のベンダーとモデルのネットワーク装置(デバイス)のステータス情報をすべて取得するための情報を含む。マップ510は図28を参照して説明したプロセスを用いて情報が初期化される。マップ510はベンダーのストリング512とモデルのストリング516のエントリー例を示している。
図27Cは、HTTPにより監視されているネットワーク装置(デバイス)のベンダーとモデルに関する情報と、それらからステータス情報を取得するために使用する情報とを維持するためにCHTTPProtocolにより使用されるデータ構造体(構造)を示す。データ構造体(構造)はマップ520である。マップ520へのキーはネットワーク装置(デバイス)のベンダー名を表すストリング522である。マップ520への値は他のマップ524である。マップ524へのキーはネットワーク装置(デバイス)のモデル名を表すストリング526である。マップ524への値はSWebPageInfoのベクトル528である。構造体(構造)SWebPageInfoは、HTTPを用いてネットワーク装置(デバイス)のウェブページからステータス情報をすべて取得するために使用する情報を含んでいる。それゆえ、SWebPageInfoのベクトル528は、そのウェブページのすべてから特定のベンダーとモデルのネットワーク装置(デバイス)のステータス情報をすべて取得するための情報を含んでいる。マップ520は図28を参照して説明したプロセスを用いて情報が初期化される。マップ520は、ベンダーのストリング522とモデルのストリング526のエントリーの一例を示している。
図27Dは、FTPにより監視されるネットワーク装置(デバイス)のベンダーとモデルに関する情報と、それらからステータス情報を取得するために使用する情報とを維持するためにCFTPProtocolにより使用されるデータ構造体(構造)を示す。データ構造はマップ530である。マップ530へのキーはネットワーク装置(デバイス)のベンダー名を表すストリング532である。マップ530への値は他のマップ534である。マップ534へのキーはネットワーク装置(デバイス)のモデル名を表すストリング536である。マップ534への値はSDirFileStatusInfoのベクトル538である。構造体(構造)SDirFileStatusInfoは、FTPを用いてネットワーク装置(デバイス)のFTPファイルからステータス情報をすべて取得するために使用する情報を含む。それゆえ、SDirFileStatusInfoのベクトル538はそのFTPファイルのすべてから特定のベンダーとモデルのネットワーク装置(デバイス)のステータス情報のすべてを取得するために使用する情報を含む。マップ530は図28を参照して説明したプロセスを用いてその情報が初期化される。
図28は、システムにより監視されるネットワーク装置(デバイス)のベンダーに関する情報でプロトコルオブジェクトをすべて初期化するプロセスを示すフローチャートである。同様のプロセスを用いて、システムにより監視されるネットワーク装置(デバイス)のモデルに関する情報でプロトコルオブジェクトをすべて初期化する。監視されるネットワーク装置(デバイス)について、ネットワーク装置(デバイス)のベンダーとモデルは、何の情報をそのネットワーク装置(デバイス)から取得する必要があるかを決定するために知っておく必要がある。ネットワーク装置(デバイス)にアクセスして情報を取得するために使用する各プロトコルオブジェクトは、そのネットワーク装置(デバイス)から何の情報を以下に取得するかを決定するために、ベンダーとモデルを知っている必要がある。初期化を必要とするプロトコルオブジェクトはCabsProtocol2308から導かれたクラスに相当するものであり、CSNMPProtocol、CHTTPProtocol、CFTPProtocolである。プロトコルオブジェクトの初期化では、プロトコルに対応する図27B、27C、27Dを参照して説明したデータ構造に情報を追加する。システムの設計によれば、図27B、27C、27Dのデータ構造に追加される情報はデータベースから来たものであるが、テキストファイルやスプレッドシートなど他の外部ソースから来たものであってもよい。図27Aを参照して説明したCAbsProtocol2308へのポインタのベクトルは、すべてのプロトコルオブジェクトを初期化する。フローチャートのプロセスはベクトルを2回通過する。1回目にベクトルを通過するとき、プロトコルオブジェクトを用いてネットワーク装置(デバイス)のベンダーを見つける。ベンダー名がプロトコルオブジェクトの1つから取得できると、ベクトルを2回目に通過するとき、すべてのプロトコルオブジェクトはそのベンダー名で初期化される。ステップ602において、プロトコルオブジェクトはCAbsProtocolへのポインタのベクトルから取得される。プロトコルオブジェクトはネットワーク装置(デバイス)にアクセスするためのプロトコル(例えば、SNMP、HTTP、FTP)の1つに対応する。ステップ604において、ベクトルから取得可能なプロトコルオブジェクトがまだあるかどうかをチェックする。このチェックは、ベクトルの終わりまで来たかどうかを決定することによりなされる。もしプロトコルオブジェクトがもうなければ、システムはネットワーク装置(デバイス)のベンダー名を取得できない。ベンダー名の取得とネットワーク装置(デバイス)のプロトコルオブジェクトの初期化とに失敗したプロトコルオブジェクトはすべてステップ606で終了する。ベクトルから取得したプロトコルオブジェクトがあれば、そのプロトコルオブジェクトを用いて、ステップ608においてネットワーク装置(デバイス)のベンダー名を取得する。ステップ610において、プロトコルオブジェクトがネットワーク装置(デバイス)のベンダー名を取得可能であるかどうかをチェックする。プロトコルオブジェクトはネットワーク装置(デバイス)のベンダーを決定するために使用する情報をデータベースから取得する。プロトコルオブジェクトがベンダー名を取得することができないとき、プロセスはステップ602に戻り、ベクトルの他のプロトコルオブジェクトを用いてベンダー名を取得することを試みる。プロトコルオブジェクトからベンダー名を取得できたとき、プロセスはステップ612においてプロトコルオブジェクトをそのベンダー名で初期化する。プロトコルオブジェクトは、取得したベンダー名のネットワーク装置(デバイス)からステータス情報をいかに取得するかに関する情報で初期化される。情報は図27B、27C、27Dを参照して説明したようにデータ構造に追加される。ステップ614において、プロトコルオブジェクトはCAbsProtocolへのポインタのベクトルから取得される。ステップ616において、ベクトルから取得可能なプロトコルオブジェクトがもう無いかどうかをチェックする。プロトコルオブジェクトを取得できないとき、すべてのプロトコルオブジェクトはベンダー名が初期化されており、すべてのプロトコルオブジェクトの初期化はステップ606で終了する。すべてのプロトコルオブジェクトはベンダーに関する情報が更新されている。ベクトルから取得されたプロトコルオブジェクトがあれば、ステップ618においてプロトコルオブジェクトのベンダー名を初期化する。ステップ612と同様に、プロトコルオブジェクトは、取得したベンダー名のネットワーク装置(デバイス)からステータス情報をいかに取得するか似関する情報で初期化される。プロトコルオブジェクトをベンダー名で初期化したのち、プロセスはステップ614に戻って、他のプロトコルオブジェクトをベンダー名で初期化する。
図28のステップ608において、プロトコルオブジェクトはネットワーク装置(デバイス)のベンダー名を取得する。SNMP、HTTP、FTPプロトコルオブジェクトはネットワーク装置(デバイス)にアクセスして、ベンダー名を取得することができる。どこでベンダー名を見つけることができるかに関する情報は、データベースから得られる。データベースは、プロトコルによりサポートされたネットワーク装置(デバイス)のベンダーに関する情報と一緒に、ネットワーク装置(デバイス)のベンダー名を探すための情報を提供する。SNMPの場合、ネットワーク装置(デバイス)のMIBにあるベンダー名と関連するエンタープライズオブジェクト識別子に関する情報とそのオブジェクト情報を見つけるために使用するオブジェクト識別子に関する情報が、ベンダー名を取得するためにSNMPプロトコルオブジェクトにより使用される。HTTPの場合、ウェブページとそのウェブページ内の位置に関する情報がベンダー名を取得するためにHTTPプロトコルオブジェクトにより使用される。FTPの場合、FTPファイルとそのFTPファイル内の位置に関する情報がベンダー名を取得するためにFTPプロトコルオブジェクトにより使用される。
図29A−29Dは、異なるプロトコルのベンダーとモデルのネットワーク装置(デバイス)のステータス情報を取得するために使用する異なるデータ構造体(構造)を示している。異なるプロトコルを用いて同一のステータス情報を取得することもできる。しかし、1つのプロトコルにより取得されるステータス情報は他のプロトコルにより取得される情報よりも多いことがあるので、より多くの情報を取得できるプロトコルから取得したステータス情報を使用した方がよい。例えば、プリンターカートリッジトナーレベルはSNMPとHTTPを用いてネットワークプリンターから取得できる。SNMPにより取得されるトナーレベルのステータス情報は「フル」、「OK」、または「エンプティ」であり、一方、HTTPにより取得される同じステータス情報はトナー残量のパーセンテージであるかも知れない。このような場合、HTTPを用いて取得したステータス情報の方が情報量は多いので、HTTPにより取得したステータス情報を使用すればよい。図29A−29Dに示したデータ構造体(構造)は、最も情報の多いステータス情報を取得することを保証している。図29AはSNMPプロトコルを用いて特定のベンダーとモデルのネットワーク装置(デバイス)のステータス情報を取得するために使用するデータ構造体(構造)を示している。そのデータ構造体(構造)はペアのベクトル700(例えば、702と704)であり、そのペアは構造体(構造)SOIDinfoType706と整数よりなる。構造体(構造)SOIDinfoType706は、SNMPを用いてネットワーク装置(デバイス)から特定のステータス情報を取得するために用いる情報を含んでいる。SOIDinfoType706の構造体(構造)は図29Aに示されている。ペア中の整数は、ステータス情報の重みまたは優先度を決定する。整数値が大きいほど、取得されるステータス情報は情報が多いので採用されやすい。整数値が小さければ小さいほど、他のプロトコルから得られた同じステータス情報が採用されやすい。CSNMPProtocol2402は何のステータス情報をネットワーク装置(デバイス)から取得するかを決定するためにベクトル700を用いる。ベクトル700に入れられる情報は特定のベンダーとモデルについて図27Bのデータ構造体(構造)から取得される。
図29Bは、HTTPプロトコルを用いて特定のベンダーとモデルのネットワーク装置(デバイス)のステータス情報を取得するために使用するデータ構造体(構造)を示す。そのデータ構造体(構造)はペア(例えば、710と712)のベクトル708であり、そのペアは構造体(構造)SKeyValueInfo714と整数よりなる。構造体(構造)SKeyValueInfo714はHTTPを用いてネットワーク装置(デバイス)のウェブページから特定のステータス情報を取得するために使用する情報を含む。SKeyValueInfo714の構造体(構造)は図29Bに示されている。ペア中の整数はステータス情報の重みまたは優先度を決定する。CHTTPProtocol2502は、何のステータス情報をネットワーク装置(デバイス)から取得するかを決定するためにベクトル708を使用する。ベクトル708に入っている情報は特定のベンダーおよびモデルについて図27Cのデータ構造体(構造)から取得される。
図29Cは、FTPプロトコルを用いて特定のベンダーおよびモデルのネットワーク装置(デバイス)のステータス情報を取得するために使用するデータ構造体(構造)を示している。そのデータ構造体(構造)はペア(例えば、718と720)のベクトル716であり、そのペアは構造体(構造)SKeyInfoType722と整数よりなる。構造体(構造)SKeyInfoType722は、FTPを用いてネットワーク装置(デバイス)のFTPファイルから特定のステータス情報を取得するために使用する情報を含む。SKeyInfoType722の構造体(構造)は図29Cに示されている。ペア中の整数はステータス情報の重みまたは優先度を決定する。CFTPProtocol2602は、ネットワーク装置(デバイス)から何のステータス情報を取得するかを決定するためにベクトル716を使用する。ベクトル716に入っている情報は特定のベンダーおよびモデルについて図27Dのデータ構造体(構造)から取得される。
図29Dは、様々なプロトコルで取得するステータス情報を維持するために使用するデータ構造体(構造)を示している。そのステータス情報を取得するためにどのプロトコルが使用されたかに関する情報は維持していない。このデータ構造体(構造)はマップ724である。マップ724へのキー726はinfoTypeである。infoTypeは情報のタイプを表す番号である。マップ724への値はペアである。そのペアはストリングと整数よりなる。ペア中のストリングはinfoTypeに対応するネットワーク装置(デバイス)から取得したステータス情報である。ペア中の整数はプロトコルから取得したステータス情報の重みまたは優先度である。一例として、プリンターカートリッジのブラックトナーのレベルを表すinfoType700について、そのペアはストリング「75%」と整数10000を含んでいるとする。ストリング「75%」はカートリッジに75%のトナーが残っていることを示し、整数10000はそのステータス情報の重みまたは優先度である。CSNMPProtocol2402、CHTTPProtocol2502、CFTPProtocol2602はネットワーク装置(デバイス)から取得したステータス情報をマップ724に追加する。
図30は、FTPプロトコルを用いてネットワーク装置(デバイス)からステータス情報を取得するために、図27D、29C、29Dのデータ構造体(構造)がいかに使用されるかの一例を示している。サンプルデータを含むマップ800は、図27Dを参照して説明したデータ構造体(構造)に対応する。マップ800のサンプルデータは、FTPを用いてベンダーリコーとモデルAficio120のネットワーク装置(デバイス)のステータス情報にアクセスするための情報を提供する。ベクトルの各構造体(構造)SDirFileStatusInfo1、SDirFileStatusInfo2、SDirFileStatusInfo3は、ネットワーク装置(デバイス)のFTPファイルからのステータス情報にアクセスするための情報を提供する。SDirFileStatusInfo1802は、ディレクトリ/pubのFTPファイルstatus.txtからネットワーク装置(デバイス)からのステータス情報にアクセスするための情報を含む。5つのステータス情報値をSKeyInfoTypeと整数のペアのベクトルを用いてFTPファイルから取得できる。ベクトルペアの各SKeyInfoTypeは、図30に示したinfoTypeに対応する異なるステータス情報に対応する。マップ804は、図29Dを参照して説明したデータ構造に対応するサンプルデータを含んでいる。マップ804は他のプロトコルにより以前取得したステータス情報を含んでいる。マップ804はinfoType600、610、700に対応する3つのステータス情報値を含んでいる。infoType600のステータス情報は重み500の「ローペーパー(Low Paper)」である。infoType610のステータス情報は重み10000の「24321」である。
infoType70のステータス情報は重み2500の「OK」である。FTPプロトコルを用いてどのステータス情報が取得されるかを決定するため、ベクトル806が生成され、取得するステータス情報を含んでいる。ベクトル806に加えられる情報はマップ800の情報(より具体的には、構造体(構造)SDirFileStatusInfo1802)とマップ804のステータス情報により決定される。マップ800から取得するステータス情報がマップ804にはまだ取得されていないとき、プロセスはステータス情報を取得するために必要な情報をベクトル806に加える。マップ800から取得されるステータス情報がマップ804でまだ取得されていないとき、FTPプロトコルにより取得されるステータス情報はマップ804のステータス情報より情報が多いかどうかを、重みを比較してチェックする。ベクトル806にステータス情報を取得するための情報を加えるのは、FTPにより取得されたステータス情報の重みがマップ804にすでにあるステータス情報の重みよりも大きい場合だけである。SDirFileStatusInfo1に対応するFTPにより取得されるステータス情報はinfoType600、610、620、700、710である。infoType620と710はステータス情報マップ804にないので、ステータス情報を、FTPを用いて取得する必要がある。それゆえ、620(SKeyInfoType3)と710(SKeyInfoType5)に対応するステータス情報を取得するために使用する情報がベクトル806に加えられる。infoType600と700はステータス情報マップ804にある。802に示されたこれらのinfoTypeのFTPにより取得されるステータス情報の重みは、ステータス情報マップ804中のそれらの重みよりも大きい。そのため、FTPによりこれらの2つのinfoTypeについて取得されたステータス情報は、マップ804にあるステータス情報より情報が多い。それゆえ、infoType600(SKeyInfoType1)と700(SKeyInfoType4)のステータス情報を取得するための情報がベクトル806に加えられる。infoType610はステータス情報マップ804にある。802に示したこのinfoTypeのFTPにより得られるステータス情報の重みは、ステータス情報マップ804の重みより小さい。FTPによりこのinfoTypeについて取得されるステータス情報は、マップ804にあるステータス情報より情報が少ない。それゆえ、infoType610(SKeyInfoType2)のステータス情報を取得するための情報はベクトル806には加えない。このベクトル806はinfoType600、620、700、710のステータス情報を取得するため、FTPプロトコルにより使用される。FTPによりステータス情報を取得できれば、2つのステータス情報値がステータス情報マップ804に加えられ、ステータス情報マップ804の2つのステータス情報値が上書きされる。図30は、FTPプロトコルのステータス情報を取得するために、データ構造をいかに使用するかを示す例である。図27B、27C、29A、29Bのデータ構造を使用する同様のプロセスはSNMPとHTTPのステータス情報を取得するために使用される。
図31Aはステータス情報を取得する方法を示すフローチャートである。すべてのプロトコルでここに説明する方法を使用できる。プロトコルオブジェクトを使用して特定のステータス情報を取得する前に、プロトコルオブジェクトはステータス情報が他のプロトコルオブジェクトによりすでに取得されているかどうかをチェックする。ステータス情報がすでに取得されている場合、これから取得するステータス情報が他のプロトコルオブジェクトからすでに取得されたものよりも情報が多いかどうかをチェックしなければならない。最も情報が多いステータス情報が保存される。フローチャートの方法により、最も情報が多いステータス情報が取得されることが保証される。図27B、27C、27Dのデータ構造510、520、530は、どのステータス情報を取得するかを決定するために対応するプロトコルにより使用される。ステップ3102において、ネットワーク装置(デバイス)からステータス情報を取得するために使用する情報を含むペアのベクトルがエントリー無しに生成される。ペアのベクトルは、使用されるプロトコルに応じて、図29Aから29Cのデータ構造700、708、716の1つに対応する。ステップ3104において、与えられたベンダーとモデルのネットワーク装置(デバイス)から1つのステータス情報を取得するために使用される情報が取得される。すべてのプロトコルオブジェクトはサポートするすべてのベンダーとモデルについて何のステータス情報を取得するかに関する情報を維持している。図28を参照して説明した初期化プロセスによりすべてのプロトコルオブジェクトがこの情報で初期化される。1つのステータス情報を取得するために使用される情報は、使用するプロトコルに応じて図29A、29B、29Cの構造体(構造)SOIDinfoType706、SKeyValueInfo714、SKeyInfoType722の1つに格納される。ステップ3106において、ネットワーク装置(デバイス)からステータス情報を取得するために使用される情報がまだあるかチェックする。情報がもうなければ、ステップ3102で生成されたペアのベクトルはプロトコルについてネットワーク装置(デバイス)からすべてのステータス情報を取得するために使用されるすべての情報を含んでいる。ステップ3108において、プロトコルオブジェクトはネットワーク装置(デバイス)からステータス情報を取得するためにペアのベクトルを使用し、そのステータス情報は図29Dを参照して説明したステータス情報マップ724に格納される。プロトコルによるステータス情報の取得はステップ3110で完了する。ネットワーク装置(デバイス)からステータス情報を取得するために使用する情報がもっとあれば、ステップ3112においてそのステータス情報がすでに取得されたかどうかをチェックする。このチェックは図29Dを参照して説明したようにステータス情報を含むマップを見て、そのステータス情報がマップにすでにあるかどうか調べることにより行われる。ステータス情報がマップになければ、ステップ3114においてペアのベクトルにステータス情報を取得するために使用する情報を加える。情報をペアのベクトルに加えた後、ステップ3104に戻りステータス情報を取得するために使用される情報をより多く取得する。ステータス情報がすでに取得されていたら、すでに取得されたステータス情報の重みまたは優先度とステップ3116においてプロトコルを通して取得できるステータス情報の重みまたは優先度とを比較する。もしネットワーク装置(デバイス)のステータス情報のマップ中にあるステータス情報の重みまたは優先度がプロトコルにより取得されるステータス情報の重みまたは優先度よりも大きければ、ステータス情報を取得するために使用する情報をペアのベクトルに加えない。ステップ3104に戻り、ステータス情報を取得するために使用される情報をさらに取得する。マップ中のステータス情報の重みまたは優先度がプロトコルにより取得されるステータス情報の重みまたは優先度より大きくないとき、ステップ3114においてステータス情報を取得するために使用される情報をペアのベクトルに加える。その情報をペアのベクトルに加えた後、ステップ3104に戻り、ステータス情報を取得するために使用される情報をさらに取得する。
図31Bはすべてのプロトコルを用いてネットワーク装置(デバイス)に関するステータス情報を取得するプロセスを説明するためのフローチャートである。図28を参照して説明したようにプロトコルオブジェクトがサポートするネットワーク装置(デバイス)のベンダーとモデルに関する情報でそのプロトコルオブジェクトを初期化した後、そのプロトコルオブジェクトをネットワーク装置(デバイス)からステータス情報を取得するために使用することができる。そのプロトコルオブジェクトは図27B、27C、27Dを参照して説明したデータ構造を用いてベンダーとモデルについてステータス情報をいかに取得するかに関する情報を含む。図27Aに示したCAbsProtocol2308へのポインタのベクトルを使用して、すべてのプロトコルオブジェクトについてステータス情報を取得する。フローチャートのプロセスはそのベクトルを一回通る。ステップ3122において、CAbsProtocolへのポインタのベクトルからプロトコルオブジェクトを取得する。プロトコルオブジェクトはネットワーク装置(デバイス)にアクセスするためのネットワークプロトコル(例えば、SNMP、HTTP、FTP)の1つに対応する。ステップ3124において、ベクトルから取得できるプロトコルオブジェクトがあるかどうかチェックする。このチェックはベクトルの終わりに来たかどうか決定することによりなされる。プロトコルオブジェクトがもうなければ、ステップ3126においてすべてのプロトコルオブジェクトを用いてネットワーク装置(デバイス)からステータス情報を取得し終わっている。ベクトルから取得したプロトコルオブジェクトがあれば、ステップ3128においてそのプロトコルオブジェクトを用いてネットワーク装置(デバイス)のステータス情報を取得する。プロトコルオブジェクトを用いてステータス情報を取得した後、ステップ3122に戻り他のプロトコルオブジェクトを用いてステータス情報をさらに取得する。
図32Aは、プロトコルによりサポートされたネットワーク装置(デバイス)のベンダーとモデルに関する情報を維持するために使用するデータ構造を示す。また、図32Bはそのデータ構造で使用する情報の一例を示す。サポートされたベンダーとモデルおよびそれからステータス情報をいかに取得するかに関するデータベースの情報組織はプロトコルごとに異なる。それゆえ、異なるプロトコルについてデータベースからのサポートされたベンダーとモデルの取得はプロトコルにより異なる。サポートされたベンダーとモデルへのアクセスを簡単にするため、すべてのプロトコルでこの情報を格納しアクセスするためにマップ構造を使用することができる。図32Aはベンダーモデルサポートマップ3200を示す。マップ3200へのキー3202は、プロトコルによりサポートされたベンダーとモデルに関する情報を含むストリングである。マップ3200への値3204は、ベンダーモデル識別番号などであるベンダーとモデルに関する情報を表すために使用することができる整数である。プロトコルによりサポートされたベンダーとモデルに関する情報を含めるためにマップ構造を選択した理由は、マップ構造がキーを容易に発見するルックアップメカニズムを有するからである。このように、ベンダーとモデルがマップに有るかどうかの決定は容易である。図32Aの説明ではデータベースから取得した異なるプロトコルのベンダーおよびモデルに関する情報を示したが、テキストファイルやスプレッドシートなど外部ソースから情報を取得してもよい。
図32Bはベンダーモデルサポートマップ3206とそのサンプルエントリーを示す。マップ3206へのキー3208はベンダー名、セパレータ「%%%%%」、モデル名を含むストリングである。例えば、ベンダー「Xerox」とモデル「NC60」の場合、マップ3206へのキー3208のストリングは「Xerox%%%%%NC60」である。この例ではセパレータとして「%%%%%」を使用したが、ベンダー名とモデル名の一部と混同されないセパレータなら何でもよく、例えば「@@@@@」でもよい。セパレータを使用する理由は、ベンダーとモデルを区別し、ベンダーとモデルをストリングから容易に取得するためである。マップ3206への値3210は整数1である。マップ3206への値3210はいかなる整数であってもよい。各プロトコルについてベンダーモデルサポートマップ3200が維持される。
図33は、プロトコルによりサポートされたベンダーとモデルをすべて含む、図32Aのベンダーモデルサポートマップ3200にサポートされたベンダーとモデルを加える方法を示すフローチャートである。ステップ3302において、データベースからベンダーとモデルを取得する。ベンダーとモデルをデータベースからいかに取得するかはプロトコルごとに異なる。これはサポートされたベンダーとモデルを含むデータベースのテーブルに依存する。ステップ3304において、データベースから取得するベンダーとモデルがあるかどうかをチェックする。取得するものがなければ、ステップ3306においてベンダーモデルサポートテーブル3200にサポートされたベンダーとモデルを入れる方法は終了する。ベンダーモデルサポートマップ3200はプロトコルによりサポートされたベンダーとモデルをすべて含む。サポートされたベンダーとモデルの情報を取得するためにデータベースにアクセスする必要はもうない。データベースから取得したベンダーとモデルがあるとき、ステップ3308においてベンダーモデルサポートマップ3200のキーとして使用されるストリングを生成する。ストリングはベンダー名、セパレータ、モデル名を含む。前述の通り、セパレータはベンダー名やモデル名の一部と混同されないストリングであれば何でもよい。ステップ3310において、そのベンダー名、セパレータ、モデル名からなるストリングがベンダーモデルサポートマップ3200にすでに有るかどうかチェックする。そのストリングがマップ3200にすでにあれば、ステップ3302においてデータベースから他のベンダーとモデルを取得する。そのストリングがマップ3200に無ければ、そのストリングと整数をマップ3200に加える。そのストリングをマップ3200に加えた後、ステップ3302においてデータベースから他のベンダーとモデルを取得する。
図34は、図32Aのベンダーモデルサポートマップ3200からプロトコルによりサポートされたベンダーとモデルを取得する方法を説明するためのフローチャートである。ステップ3402において、キーのストリングをベンダーモデルサポートマップ3200から取得する。ステップ3404において、マップ3200から取得するためにまだキーが有るかどうかチェックする。キーがもうなければ、プロトコルによりサポートされたベンダーとモデルはすべて取得されており、ステップ3406でベンダーとモデルの取得が終了する。キーのストリングをマップ3200から取得すると、ステップ3408においてベンダー名を取得するためにセパレータの前のサブストリングを取得する。ステップ3410において、モデル名を取得するため、セパレータの後のサブストリングを取得する。その後、ステップ3406において、ベンダーとモデルの取得が終了する。マップ3200のエントリーをすべて通り、プロトコルによりサポートされたベンダーとモデルがすべて取得できる。
図35はデバイスパッケージを示すパッケージ図である。このパッケージはネットワーク装置(デバイス)を表すソフトウェアオブジェクトを生成する役割を担っている。デバイスパッケージ1300はCDeviceFactory1302とCDevice1304の2つのクラスにより構成されている。クラスCDeviceFactory1302はネットワーク装置(デバイス)のソフトウェアオブジェクトを生成し初期化する役割を担っている。ソフトウェアオブジェクトの初期化は、ネットワーク装置(デバイス)のベンダー、モデル、ユニーク識別子を決定し、そのネットワーク装置(デバイス)にアクセスするために使用できるプロトコルを設定することを含んでいる。ネットワーク装置(デバイス)にアクセスできないとき、ネットワーク装置(デバイス)のソフトウェアオブジェクトは生成されない。クラスCDevice1304はネットワーク装置(デバイス)のソフトウェアオブジェクトを表す。CDevice1304はネットワーク装置(デバイス)に関する情報を維持し、そのネットワーク装置(デバイス)に関するステータス情報を取得する。CDevice1304は、装置(デバイス)から情報を取得するために、様々なプロトコルを通してネットワーク装置(デバイス)にアクセスするために、HWaccessパッケージ1306を用いる。HWaccessパッケージ1306は図23を参照して説明した。
図36Aは、ネットワーク装置(デバイス)にアクセスするためにどのプロトコルを使用するかを決定するため、ネットワーク装置(デバイス)を表すソフトウェアオブジェクト(図35を参照して説明したCDevice1304)により使用されるデータ構造を示す。CDevice1304はプロトコルパラメータマップ1400を含む。マップ1400へのキー1402はプロトコル(例えば、SNMP、HTTP、FTP)を表すストリングである。マップ1400への値1404は構造体(構造)SParameterのベクトルである。構造体(構造)SParameter1406は、1つのプロトコルについて、ネットワーク装置(デバイス)にアクセスするために使用する情報を含む。SParameter1406は、ネットワーク装置(デバイス)のベンダーとモデルの特徴ではなく、その装置(デバイス)の特徴である情報を含んでいる。例えば、その情報はSNMPによりそのネットワーク装置(デバイス)にアクセスするためのコミュニティ名であってもよく、FTPによりそのネットワーク装置(デバイス)にアクセスするためのユーザ名とパスワードであってもよい。これらは、SNMPやFTPによりネットワーク装置(デバイス)にアクセスするために使用する共通情報である。DeviceODBCを通して取得されるデータベースからの情報は、ネットワーク装置(デバイス)に様々なプロトコルを通じてアクセスできるように、マップに加えられる。マップ中のプロトコルのエントリーは、プロトコルがそのネットワーク装置(デバイス)にアクセスできず、ベンダーとモデルがそのプロトコルによりサポートされていないとき、削除される。一部のプロトコルは、ベンダーとモデルがそれによりサポートされていなくても、ネットワーク装置(デバイス)にアクセスする。例えばSNMPはそのようなプロトコルの例である。
図26Bはネットワーク装置(デバイス)について図36Aのプロトコルパラメータマップ1400のサンプルデータを示す。ネットワーク装置(デバイス)はSNMPとFTPである2つのプロトコルを用いてステータス情報を取得する。ネットワーク装置(デバイス)のマップ1410は、キー「SNMP」と「FTP」の2つのエントリーを含む。SNMPを用いてネットワーク装置(デバイス)にアクセスするため、コミュニティ名が必要である。SNMPのSParameterのベクトルはコミュニティ名に関する情報を含む。パラメータ名COMMUNITYとパラメータ値「private」を用いて、1つのSParameterにネットワーク装置(デバイス)にアクセスさせる。ネットワーク装置(デバイス)にFTPを用いてアクセスするためには、ユーザ名とパスワードが必要である。FTPのSParameterのベクトルはユーザ名とパスワードに関する情報を含む。パラメータ名USERNAMEとパラメータ値「abc」を用い1つのSParameterをネットワーク装置(デバイス)にアクセスさせ、パラメータ名PASSWORDとパラメータ値「xyz」を用い、他のSParameterをネットワーク装置(デバイス)にアクセスさせる。
図37は、ネットワーク装置(デバイス)からステータス情報を取得するためにどのプロトコルを使用するかを決定するために、図36Aのプロトコルパラメータマップ1400をいかに更新するかを説明するフローチャートである。図37のステップを実行し、プロトコルについてネットワーク装置(デバイス)のベンダー名とモデル名を取得する。ステップ3702において、プロトコルを用いてネットワーク装置(デバイス)にアクセスできる化チェックする。ネットワーク装置(デバイス)はマップ1400の情報を用いてそのプロトコルを通じてアクセスする。そのプロトコルを通じてそのネットワーク装置(デバイス)にアクセスできないとき、ステップ3704においてプロトコルパラメータマップ1400からそのプロトコルを削除し、ステップ3714でマップ1400の更新が終了する。そのネットワーク装置(デバイス)にそのプロトコルを通じてアクセスできるとき、ステップ3706でそのネットワーク装置(デバイス)のベンダーをそのプロトコルを用いて取得できるかどうかチェックする。ベンダーを取得できないとき、ステップ3707において、ジェネリックベンダーがそのプロトコルでサポートされているかどうかチェックする。プロトコルがジェネリックベンダーをサポートしているとは、プロトコルがその装置(デバイス)のベンダーを取得できないか、またはサポートしていないときでも、プロトコルがすべての装置(デバイス)に共通なステータス情報(共通ステータス情報)を取得することできることを意味する。そのプロトコルによりジェネリックベンダーがサポートされていないとき、ステップ3704でそのプロトコルはプロトコルパラメータマップ1400から削除され、ステップ3714でマップ1400の更新が終了する。そのプロトコルがジェネリックベンダーをサポートしているとき、そのプロトコルはプロトコルパラメータマップ1400に残され、ステップ3714でマップの更新が終了する。ステップ3706でベンダーを取得できたとき、ステップ3708でそのネットワーク装置(デバイス)のベンダーがプロトコルでサポートされているかどうかチェックする。ベンダーがそのプロトコルによりサポートされていないとき、ステップ3707でジェネリックベンダーがそのプロトコルによりサポートされているかどうかチェックする。ステップ3707以降のステップのシーケンスは上で説明した。
ベンダーがそのプロトコルでサポートされているとき、ステップ3710で、値とワーク装置(デバイス)のモデルがそのプロトコルを用いて取得できるかどうかチェックする。モデルを取得できないとき、ステップ3711で、ジェネリックモデルがそのプロトコルでサポートされているかどうかをチェックする。プロトコルがジェネリックモデルをサポートしているとは、装置(デバイス)のモデルを取得できず、またはサポートしていなくても、プロトコルがベンダーのすべての装置(デバイス)に共通なステータス情報(ベンダースペシフィックステータス情報)を取得できることを意味する。ジェネリックモデルをプロトコルがサポートしていないとき、ステップ3704でそのプロトコルはプロトコルパラメータマップ1400から削除され、ステップ3714でマップ1400の更新が終了する。ジェネリックモデルがプロトコルによりサポートされているとき、そのプロトコルはプロトコルパラメータマップ1400に残され、マップの更新はステップ3714で終了する。ステップ3710でモデルを取得できるとき、ステップ3712でそのネットワーク装置(デバイス)のモデルがプロトコルによりサポートされているかどうかチェックする。そのモデルがプロトコルでサポートされていないとき、ステップ3711で、ジェネリックモデルをそのプロトコルがサポートしているかどうかチェックする。ステップ3711に続くステップのシーケンスについてはすでに説明した。そのモデルがプロトコルによりサポートされているとき、そのプロトコルを用いてネットワーク装置(デバイス)のステータス情報を取得でき、ステップ3714でプロトコルパラメータマップ1400の更新は終了する。ベンダーとモデルが取得またはサポートされていないとき、そのプロトコルはプロトコルパラメータマップ1400から削除し、そのプロトコルはステータス情報を取得するためには使用されない。プロトコルに応じて図37に示したプロセスにはバリエーションがある。HTTPとFTPはフローチャートの説明通りだが、ベンダーがサポートされモデルとジェネリックモデルはサポートされていなくても、SNMPはサポートされステータス情報を取得するために使用することができる。
上で説明したように、ベンダーとモデルが取得またはサポートされていなくても、ステータス情報をネットワーク装置(デバイス)からSNMPにより取得できる。ネットワーク装置(デバイス)がSNMPをサポートし、またSNMPによりアクセスできる限り、そのネットワーク装置(デバイス)の管理情報ベース(MIB)から情報を取得することができる。ステップ3702において、ネットワーク装置(デバイス)がSNMPを通じてアクセスできないとき、ステップ3704でSNMPプロトコルはプロトコルパラメータマップ1400から削除される。しかし、ネットワーク装置(デバイス)にSNMPでアクセスできるとき、ベンダーやモデルが取得及びサポートされているかどうかにかかわらず、SNMPプロトコルはプロトコルパラメータマップ1400に残される。SNMPをサポートするネットワーク装置(デバイス)は、リモートシステムがその装置(デバイス)から情報を常に取得可能であるように、MIBを提供する。しかし、ネットワーク装置(デバイス)から取得可能な情報のタイプと数は、ベンダーとモデルが取得およびサポートされるかどうかに依存する。ベンダーとモデルが取得され、かつ既知であれば、SNMPによりネットワーク装置(デバイス)からより多くの情報を取得することができる。ベンダーとモデルを取得できなくても、SNMPはすべての装置(デバイス)が提供できる情報は取得可能である。例えば、システム説明やシステムが稼働している時間等は取得可能である。SNMPは次の3つの条件の下でネットワーク装置(デバイス)から情報を取得するために使用できる:(1)ベンダーとモデルがサポートされている;(2)ベンダーはサポートされているが、モデルはサポートされていない;(3)ベンダーもモデルもサポートされていない。HTTPとFTPはSNMPのような特徴は有していない。情報を取得できるようにすべてのネットワーク装置(デバイス)が従うことができる標準MIBをSNMPが有している場合、ウェブページとFTPファイルは異なるベンダーとモデルのネットワーク装置(デバイス)ごとに異なる。ネットワーク装置(デバイス)が情報を取得するために従うウェブページとFTPファイルの標準はない。
図39は、infoTypeの抽出を処理するために使用されるオブジェクトへのインターフェイスを定義する抽象型クラスと、被監視装置(デバイス)から取得された情報からの対応する値を示している。infoTypeは情報のタイプを示す非ゼロ整数値である。例えば、700のinfoTypeはブラックトナーレベルに関する情報に対応する。infoTypeの値の例は上で説明した。関数transformData()とend()は、被監視装置(デバイス)からの情報から抽出したinfoTypeとそれに対応する値を返す。入力ストリングから1つ以上のinfoTypeと対応値を得ることができるとき、transformData()とend()の出力は値とinfoTypeのペアのベクトルと定義することができる。関数putParameters()は、infoTypeと値を抽出するためにtransformData()とend()により使用されるオブジェクトの情報を提供する。同様に、putParameters()を修正して、transformData()を通じてより複雑な抽出メソッドを可能とすることができる。抽象型クラスはinfoTypeと値を抽出するためにインターフェイス関数を提供する。CAbsDevDataProcessの派生クラスは関数が被監視装置(デバイス)からinfoTypeと値を抽出する実際のメソッドを提供する。抽象型クラスにより、infoTypeと値を抽出する新しいメソッドの新しいクラスをシステムに加えることができる。
図40は、図26に示したFTPモジュールのクラスストラクチャの改良を示している。関数名は同じだが、obtainFTPVendor()、obtainFTPDirFileInfo()、obtainValueFromFTPFile()、obtainDataFromFTPFile()のパラメータは変更した。主な変更点は、CAbsDevDataFTPFile()へのポインタと重みマップにおいて、被監視装置(デバイス)から情報を取得するために用いる情報を置き換えた点である。装置(デバイス)から情報を取得するために使用する情報は、CAbsDevDataProcessのオブジェクトにカプセル化される。重みマップは、FTPで被監視装置(デバイス)から取得した情報が他のプロトコルですでに取得されていた同じ情報より情報が多いかどうかを決定するために用いられる。図59乃至61に示した補遺1から3は、関係クラス、すなわちCFTPProtocol、CFTPODBC、CFTPaccessの仕様を数字で示している。CFTPProtocolはFTPモジュールを管理して装置(デバイス)から情報を取得する。CFTOPDBCは、情報を取得するためにFTPを介してアクセスできる装置(デバイス)のベンダーとモデルおよび情報の取得方法を決定するためにデータベースにアクセスするFTPODBCパッケージを管理する。CFTPaccessは、装置(デバイス)にアクセスするFTPセッションを提供するFTPaccessパッケージを管理する。これらの補遺はデータ構造とインターフェイス関数を示している。
図41はFTPODBCパッケージの構造を示す。それはFTPaccessパッケージの派生クラスCXXXDevDataProcessを使用する。図60に示した補遺2は、これらの追加されたクラスのオブジェクトを生成する関数createXXX()を示す。CFTPODBCのコンストラクタにおいて、関数init()とsetupCreateFunctionMap()が呼び出される。関数init()はデータベースからFTPがサポートされているベンダーとモデルに関する情報を取得する。関数setupCreateFunctionMap()は、ストリング(マップのキー)と生成関数(マップのキーに対応する値)へのポインタよりなるマップm_createFunctionMapアトリビュートにエントリーする。マップのキーはベンダー名、モデル名、ディレクトリ名、ファイル名よりなるストリングである。ディレクトリ名とファイル名は、情報を装置(デバイス)から抽出するFTPファイルに対応する。その値は、装置(デバイス)から抽出された情報からinfoTypeと値を抽出するために使用する派生クラスCAbsDevDataProcessの1つを生成する関数へのポインタである。マップにはFTPをサポートするすべての装置(デバイス)に関する情報が含まれる。
図42は、派生クラスCXXXDevDataProcessがパッケージに加えられたFTPaccessパッケージを示す。CAbsDevDataProcessの派生クラスはデバイスから取得された情報からデータを抽出する異なるメソッドを提供する。データを抽出する新しいメソッドがある時、新しいクラス、すなわち異なるデータフォーマットを有する新しいFTPファイルを追加することができる。
図43から45は、CFTPProtocolクラスのm_VendorModelSupportMap、m_VendorInfoVector、m_SupportStatusInfoMapをそれぞれ示している。これらのデータ構造の情報はすべてODBCパッケージを通してデータベースから取得できる。
図43はFTPプロトコルによりサポートされたベンダーとモデルを示す。
図44は、被監視装置(デバイス)のベンダー、モデル、ユニークIDに関する情報を取得するCFTPProtocolクラスにより使用されるSVendorInfoストラクトのベクトルを示す。m_sXXXDirとm_sXXXFileは、モデル名とユニークIDを抽出できるFTPファイルのディレクトリとファイル名を示す。CAbsDevDataProcessへのポインタm_pAbsDevDataProcessはFTPファイルからモデル名とユニークIDを抽出する方法を提供する。
図45は、被監視装置(デバイス)から情報を抽出するために使用するマップ構造を示す。マップ構造中のベンダーとモデルに対してSDirFileStatusInfoストラクトのベクトルがある。ベンダーとモデルは情報を抽出する複数のFTPファイルを有することもある。各FTPファイルに対して、SDirFileStatusInfoストラクトが対応する。m_sDirectoryとm_sFileはFTPファイルのディレクトリとファイル名を示し、infoTypeと値を装置(デバイス)のFTPファイルから抽出することができる。CAbsDevDataProcessへのポインタm_pAbsDevDataProcessはFTPファイルからinfoTypeと値を抽出するメソッドを提供する。マップm_InfoTypeMapは、FTPファイルから取得したinfoTypeと値が他のプロトコルを通じて取得した情報より情報が多いかどうかを決定するために使用する重みマップである。
図46から51はCFTPODBCで使用するデータ構造を示している。これらの構造には、図22を参照して説明したようにデータベースから取得した情報が入っている。
図46は、FTPファイルのディレクトリとファイル名に関する情報を含むマップ構造であり、infoTypeと値はFTPサポートがあるすべてのベンダーとモデルについて抽出可能である。各ディレクトリとファイル名に対して、対応する識別子がある。
図47は、図46のベンダーとモデルについてマップのSDirFileIDInfoのベクトルの1つを格納するために使用される。図46と47は図22のデータベース構造を取り扱うために使用する。図48は図32Bと同様である。
図49は、エントリーの一例が入ったm_createFunctionMapのデータ構造を示す。テーブルの左側(マップのキー)は、ベンダー名、モデル名、ディレクトリ名、ファイル名により構成され文字「%」で分離されているストリングを示す。ベンダー名、モデル名、ディレクトリ名、ファイル名の一部でなければ「%」以外のいかなる文字を用いてもよい。ストリングはFTPファイルに対応し、情報をそれから抽出することができる。テーブルの左側は、ベンダー名、ディレクトリ名、ファイル名、ディレクトリ名、ファイル名が文字「%」で分離されたストリングでもよい。このストリングは装置(デバイス)のモデル名とユニークIDを含むベンダーのFTPファイルに対応する。テーブルの右側(マップの値)はcreateXXX()関数のポインタを含む。これらの関数は図41と42のCXXXDevDataProcessのオブジェクトを生成する。このテーブルには、CFTPODBCのコンストラクタで呼び出される関数setupCreateFunctionMap()が入っている。このテーブルは、ベンダー、モデル、ディレクトリ、ファイル名(または、ベンダー、ディレクトリ、ファイル、ディレクトリ、ファイル)に対応する適当なCXXXDevDataProcessオブジェクトを生成するために使用される。ベンダー、モデル、ディレクトリ、ファイル名の各組み合わせに対して、ベンダーとモデルがFTPをサポートすれば情報を抽出するためのCAbsDevDataProcessの派生クラスがある。このように、ベンダー、モデル、ディレクトリ、ファイル名の各組み合わせに対してCAbsDevDataProcessの派生クラスを生成するcreateXXX()関数がある。例えば、FTPファイルsyslogを有するリコージェネリックデバイス(すべてのリコーデバイス)について、装置(デバイス)から情報を抽出するためにCSyslogDevDataProcessを生成するm_createFunctionMapにcreateSyslog()へのポインタがある。ベンダー、ディレクトリ、ファイル、ディレクトリ、ファイルを含むキーについても同様である。CFTPODBCのコンストラクタがsetupCreateFunctionMap()を呼び出す時、このマップはハードコードされていなければならない。このマップのデータは他のソースからは来ない。
図50は、CFTPODBCのm_DirFileInfoDevDataProcessMapのデータ構造を示している。このデータ構造は、被監視装置(デバイス)からステータス情報を取得するために使用されるCFTPProtocolに送られる情報を含む。テーブルの左側(マップのキー)は、図49と同様に、ベンダー名、モデル名、ディレクトリ名、ファイル名が文字「%」で分けられたストリングである。しかし、テーブルの右側(マップの値)は、CAbsDevDataProcessへのポインタとマップよりなるペアが示されている。ポインタはCAbsDevDataProcessクラスのタイプであるが、図41と42に示したCAbsDevDataProcessから導かれたクラスの1つである。派生クラスは図49のテーブルに対応する関数の1つにより生成される。図49のテーブルのキーに対応するcreateXXX()関数は、同じキーに対応する図50のテーブルに入れられるCAbsDevDataProcessの派生クラスを生成する。例えば、図49のテーブル中のキー「RICOJ%GENERIC%%stat」に対応する関数createStat()は、CStatDevDataProcessオブジェクトを生成し、それを同じキーに対応する図50のテーブルに入れる。図50のペアのマップInfoTypeWeightMapはinfoTypeとそれに関連する重みを示している。これらの値はnRelativePriorityとnENUMに対応する図22から取得される。このマップは、他のプロトコルを介してすでに取得されたステータスデータのinfoTypeがFTPにより取得される情報より優先度が低いかどうかをチェックするのに用いる。このマップ構造は図22のデータベースからの情報で初期化される。図56Aから56Cはテーブルにいかにエントリーするかを示している。データベースの情報が、CXXXDevDataProcessオブジェクトが装置(デバイス)から取得した情報からinfoTypeと値をいかに抽出するかを知るように、putParameter()関数を通してCXXXDevDataProcessオブジェクトにいかに送られるかに注意せよ。
図51は、CFTPODBCのm_VendorDevDataProcessMapのデータ構造を示している。このデータ構造は、装置(デバイス)からモデルとユニークIDを取得するために使用する情報を含む。テーブルの左側は、ベンダー名、ディレクトリ名、ファイル名、ディレクトリ名、ファイル名が文字「%」で区切られたストリングである。第1のディレクトリとファイル名は装置(デバイス)のモデル名を含むFTPファイルに対応する。第2のディレクトリとファイル名は装置(デバイス)のユニークIDを含むFTPファイルに対応する。右側はCAbsDevDataProcessタイプオブジェクトへのポインタである。しかし、実際のタイプは図41と42のCAbsDevDataProcessの派生クラスの一つへのポインタであり、図49のテーブル中のcreateXXX()関数の一つにより生成される。このマップ構造は、図22のデータベースからの情報で初期化される。図55Aと55Bはテーブルにいかにエントリーが入れられるかを示している。装置(デバイス)からモデル名とユニークIDをいかに抽出するかをCXXXDevDataProcessオブジェクトが知るように、putParameter()関数を通じてCXXXDevDataProcessオブジェクトにデータベースの情報がいかに送られるかに特に注意せよ。
図52Aと52Bは関数initBegin()を通じたCFTPProtocolの初期化を示している。第1に、この関数はFTPODBCパッケージを通じてデータベースからFTPサポートのあるベンダーとモデルを取得する。CFTPProtocolはベンダーとモデルを取得するためCFTPODBCパッケージのobtainFTPSupportVendorModel()を呼び出す。CFTPProtocolはサポートされているすべてのベンダーとモデルが入っている。次に、データベースから取得した各ベンダーとモデルについて、装置(デバイス)からinfoTypeと値を抽出するために使用する情報を、FTPODBCを通じてデータベースから取得する。CFTPProtocolはCFTPODBCのobtainFTPDirFileInfo()を呼び出し、ディレクトリ、ファイル、重みマップ、CXXXDevDataProcessオブジェクトを取得する。この関数により返された情報はCFTPProtocolに入れられ、装置(デバイス)から情報を取得するために必要とされる。最後に、FTPをサポートしているすべてのベンダーのモデル名とユニークIDをいかに取得するかについての情報を、FTPODBCパッケージを通してデータベースから取得する。CFTPProtocolはCFTPODBCのobtainFTPVendor()を呼び出し、ベンダー、ディレクトリ、モデル名が有る場所のファイル、ユニークIDがある場所のディレクトリとファイル、CXXXDevDataProcessオブジェクトを取得する。この関数により返される情報はすべてCFTPProtocolに入れられ、装置(デバイス)のモデル名とユニークIDを取得するために使用される。
図53は、特定のベンダーとモデルの装置(デバイス)のステータス情報を取得するCFTPProtocolの関数obtainStatus()を示すフローチャートである。最初に、CFTPProtocolが装置(デバイス)とのFTPセッションを初期化する。次に、CFTPProtocolはそのプライベート関数obtainStatusUsingSDirFileStatusInfoVector()を呼び出して、装置(デバイス)からベンダースペシフィックステータス情報の取得を試みる。ベンダースペシフィックステータス情報は、特定のベンダーのいかなるモデルからでも取得可能な情報である。「ジェネリック」はベンダーに関連するすべてのモデルから取得できる情報を示す。次に、CFTPProtocolはそのプライベート関数obtainStatusUsingSDirFileStatusInfoVector()を呼び出すことにより、装置(デバイス)からその装置(デバイス)のモデルに固有のステータス情報を取得することを試みる。最後に、CFTPProtocolはFTPセッションを閉じる。
図54は上記のobtainStatus()関数により使用されるプライベート関数obtainStatusUsingSDirFileStatusInfoVector()のフローチャートを示す。このフローチャートは、スタートから4つめのステップにおいて、プライベート関数selectInfoTypeMap()も組み込む。selectInfoTypeMap()は、重みマップとすべてのプロトコルを通して取得したステータス情報すべてを含むステータスマップとを処理し、FTPを通して取得した情報の重みが他のプロトコルによりすでに取得されている情報の重みより大きいかどうかを決定する。obtainStatusUsingSDirFileStatusInfoVector()は、まず各情報の重みに基づきFTPによりどの情報が取得されるかを決定するため、selectInfoTypeMap()を呼び出す。その後、obtainStatuUsingSDirFileStatusInfoVector()はobtainDataFromFTPFile()を呼び出し、FTPファイルからすべてのステータス情報を取得する。ディレクトリ名、ファイル名、重みマップ、CXXXDevDataProcessオブジェクトはFTPファイルからステータス情報を取得するためにこの関数に送られる。
図55Aと55Bは、CFTPODBCのパブリック関数obtainFTPVendor()のフローチャートを示す。まず、CFTPODBCはベンダー、ディレクトリ名、ファイル名、FTPファイルからモデル名を取得するために使用するキー、ディレクトリ名、ファイル名、FTPファイルからユニークIDを取得するために使用するキーを取得する。次に、ベンダー、ディレクトリ、ファイル、ディレクトリ、ファイル名とこれらを区切る「%」からストリングを形成する。図49のテーブルm_createFunctionMapのキーとして使用するストリングを用いて、createXXX()関数の1つを呼び出し、CAbsDevDataProcessの派生クラスの1つを生成する。FTPファイルからモデルとユニークIDを見つけるために使用するキーはputParameter()関数によりCAbsDevDataProcessの派生クラスに置かれる。CFTPODBCがこの情報をCFTPProtocolに提供できるように、CAbsDevDataProcessの派生クラスは図51のテーブルm_VendorDevDataProcessMapに置かれる。
図56A−56CはCFTPODBCのパブリック関数obtainFTPDirFileInfo()のフローチャートを示している。ベンダーとモデル名を入力されると、この関数はFTPファイルのディレクトリとファイル名、重みマップ、装置(デバイス)からinfoTypeと値を取得するために使用されるCXXXDevDataProcessを返す。ベンダーとモデルは、ステータス情報を取得することができる1以上のFTPファイルを有している。このように、この関数は、ステータス情報を取得できるすべてのFTPファイルと、装置(デバイス)からステータス情報をいかに抽出するかということとに関する情報を取得するため、同じ入力ベンダーとモデルに対して、複数回呼び出される。この関数は図46のマップm_VendorModelSupportMapを用い、入力ベンダーとモデルについてすべてのFTPファイルを取得する。装置(デバイス)からステータス情報を取得するために使用されるベンダー、モデル、ディレクトリ、ファイル名に対してCXXXDevDataProcessオブジェクトを生成する適当なcreateXXX()関数を使用するために、図49のマップm_createFunctionMapを使用する。一旦CXXXDevDataProcessオブジェクトを生成すると、FTPファイルからステータス情報を取得するための情報をデータベースから取得し、putParameters()関数を通してCXXXDevDataProcessオブジェクトと重みマップに格納する。入力ベンダーとモデルのFTPファイルからステータス情報を取得するために使用するすべての情報は、この関数により返されるだけでなく、図50のマップm_DirFileInfoDevDataProcessMapに格納される。
図57はCFTPaccessの関数obtainValueFromFTPFile()のフローチャートを示している。この関数は、入力infoType(in_infoType)に対応するFTPファイルから単一の値を取得する。このシステムにおいて、この関数は装置(デバイス)のモデル名とユニークIDを取得するために使用されるが、他のいかなるタイプの情報を取得するためにも使用できる。このフローチャートにはm_FTPFileProcessorのobtainValueFromFile()の関数が組み込まれている。この関数において、装置(デバイス)のFTPファイルが最初に開かれる。そして、FTPファイルからラインを取得する。そのラインはtransformData()関数を通してFTPファイルに対応するCXXXDevDataProcessオブジェクトに格納される。infoTypeと値がラインから抽出されたとき、transformData()により返される。所望のinfoTypeを取得したかどうかチェックする。もし所望のinfoTypeでなければ、関数がFTPファイルからラインを継続的に取得し、所望のinfoTypeが得られるまで、CXXXDevDataProcessオブジェクトのtransformData()関数に入れる。FTPファイルの終わりに来たら、CXXXDevDataProcessオブジェクトが呼び出され、infoTypeと値を取得し、所望のinfoTypeであるかどうかチェックする。
図58は、CFTPaccessの関数obtainDataFromFTPFile()のフローチャートを示している。この関数はFTPファイルから1以上の情報を取得する。このシステムにおいて、この関数はinfoTypeと値を含むマップ(in_WeightMap)で特定された装置(デバイス)のステータス情報を取得するために使用される。フローチャートにはm_FTPFileProcessorのobtainDataFromFTPFile()の機能が組み込まれている。この関数では、装置(デバイス)のFTPファイルが最初に開かれる。そして、FTPファイルからラインを取得する。そのラインをtransformData()関数を通じてFTPファイルに対応するCXXXDevDataProcessに入れる。そのラインからinfoTypeと値が抽出されれば、transformData()により返される。infoTypeが重みマップにあるinfoTypeであるかどうかチェックする。もしそうなら、そのinfoTypeの重みがデータマップ中のinfoTypeの重みよりも大きい場合にのみ、そのinfoTypeをデータマップに加える。そのinfoTypeが所望のものでないとき、関数が引き続きFTPファイルからラインを取得し、CXXXDevDataProcessオブジェクトのtransformData()関数に入れ、重みマップにある所望のinfoTypeのいずれかを取得する。FTPファイルの終わりに来たとき、CXXXDevDataProcessオブジェクトのend()関数を呼び出し、infoTypeと値を取得し、所望のinfoTypeであるかどうかチェックする。監視が必要でネットワークに接続された少数の装置(デバイス)を含めて本発明を示したが、当然のことながら、本発明の精神と範囲から逸脱することなく、ネットワークに接続する装置(デバイス)の数はいくつであってもよい。また、本発明は様々な装置(デバイス)を監視かつ制御する必要があるホーム環境に適用してもよい。
本発明によれば、マルチベンダー環境において様々な装置(デバイス)の監視が可能となり、特定のプライベートなマネージメント情報ベース(MIB)情報を有さなくても、詳細な情報を読み出し、ユーザが理解しやすく扱いやすいやり方で表示することができる。
実施形態においてはFTPプロトコルを使用したが、本発明で説明した方法は他のプロトコルにも適用可能である。
本発明の実施形態を有線のネットワークに基づき説明したが、当然のことながら、ネットワークの少なくとも一部がワイヤレスであっても本発明を適用することができる。
本発明のコントローラは、本発明の教示によりプログラムされた、従来の汎用デジタルコンピュータまたはマイクロプロセッサであり、コンピュータ技術の当業者には明らかである。熟練したプログラマーは本開示の教示に基づき容易に適当なソフトウェアのコーディングをでき、ソフトウェア技術の当業者には明らかである。本発明はまた特定用途用集積回路や従来のコンポーネント回路を適当に配線して相互接続することにより実施することができ、これは当該分野の当業者には明らかである。
本発明はコンピュータをプログラムし本発明のプロセスを実行させる命令を含むコンピュータプログラム、およびそのコンピュータプログラムが格納された記録媒体を含む。記録媒体には、フレキシブルディスク、光ディスク、CD-ROM、光磁気ディスク、ROM、RAM、EPROM、EEPROM、磁気または光カード、その他の電子的命令を格納するのに好適ないかなる媒体も含む。
明らかに、上記の教示に照らして本発明を様々に修正したり、バリエーションを考えたりすることができる。従って、当然のことながら、添付したクレームの範囲内でここに具体的に説明したものとは別の実施形態で本発明を実施することができる