![]() |
iPlanet Web Server, Enterprise Edition NSAPI プログラマーズガイド |
付録 A データ構造体のリファレンス
NSAPI は、nsapi.h ヘッダーファイルに定義されている多数のデータ構造体を使用します。このヘッダーファイルは、server-root/plugins/include ディレクトリ内にあります。第 5 章「NSAPI 関数のリファレンス」に記載されている NSAPI 関数は、ほとんどのデータ構造体とデータフィールドへのアクセスを提供します。 naspi.h 内のデータ構造体に直接アクセスする前に、アクセス関数が存在しているかどうかを確認してください。
iPlanet Web Server 4.x のいくつかのデータ構造体の非公開化については、「いくつかのデータ構造体の非公開化」を参照してください。
この章のその他の部分では、参照用に、頻繁に使用される nsapi.h 内の公開データ構造体のいくつかを説明します。 ここでは、各データ構造体のもっとも一般的に使われるフィールドだけが記載されていることに注意してください。完全な詳細は nsapi.h 内にあります。
いくつかのデータ構造体の非公開化
iPlanet Web 4.x では、いくつかのデータ構造体が nsapi.h から nsapi_pvt.h に移動されました。 nsapi_pvt.h 内のデータ構造体は、現在は非公開 (私設) データ構造体とみなされており、それらに直接アクセスするコードを書くべきではありません。 代わりに、アクセス関数を使用します。 これらのデータ構造体に直接アクセスするプラグインを書いている人はほとんどいないと思われるため、この変更がカスタマ定義のプラグインに与える影響はごくわずかと思われます。 公開ドメインから削除されているデータ構造体と、今後アクセスに使用できるアクセス関数を見るには、nsapi_pvt.h 内を見てください。nsapi_pvt.h に定義されているデータ構造体の内容にアクセスする、Enterprise Server 3.x 用に書かれたプラグインは、iPlanet Web Server 4.x および 6.x のものとはソースレベルでの互換性はなくなります。つまり、このようなプラグインをソースから構築するためには #include "nsapi_pvt.h" の指定が必要になります。 nsapi_pvt.h 内のデータ構造体のいくつかはサイズが変更されているため、これらのプログラムが iPlanet Web Server 4.x および 6.x とバイナリレベルでの互換性がなくなる可能性も若干あります。 特に、 directive 構造体はより大きくなっています。つまり、dtable にある指令を使ってインデックス処理を行なうプラグインは、再構築 (組み込まれている nsapi_pvt.h を使用して) しなければ動作しません。
プラグインの大半は nsapi_pvt.h 内のデータ構造体の内部を参照しないため、ほとんどの既存の NSAPI プラグインは iPlanet Web Server 6.0 とのバイナリレベルでの互換性もソースレベルでの互換性もあるものと見込んでいます。
session
session は、クライアントとサーバ間の接続を開いてから閉じるまでの時間です。 Session データ構造体は、次に示すように、送信される要求にかかわらず、全体に適用される変数を保持します。
pblock
パラメータブロックとは、pb_entry 構造体を保持するハッシュテーブルです。 その内容は、ほとんどのコードに対して透過です。 このデータ構造体は NSAPI で頻繁に使われます。これは、パラメータと値をパッケージ化するための基本的なメカニズムを提供します。 パラメータブロックを作成および管理したり、エントリを抽出、追加、削除するための、多くの関数があります。 第 5 章「NSAPI 関数のリファレンス」 で、名前が pblock_ で始まる関数を参照してください。 pblock データフィールドに直接アクセスするコードを書く必要はないはずです。
typedef struct {
int hsize;
struct pb_entry **ht;
} pblock;
pb_entry
pb_entry は、パラメータブロック内の単一の要素です。
struct pb_entry {
pb_param *param;
struct pb_entry *next;
};
pb_param
pb_param は、pb_entry に格納されているような、「名前−値」のペアを表します。
typedef struct {
char *name,*value;
} pb_param;
Session->client
Session->client パラメータブロック構造体には、次の 2 つのエントリがあります。
ip エントリは、クライアントマシンの IP アドレスです。
dns エントリは、リモートマシンの DNS 名です。 このメンバーは、session_dns 関数呼び出しからアクセスする必要があります。
/*
* session_dns は、このセッションにクライアントの DNS ホスト名を返し、
* それをクライアントの pblock ブロックに挿入する。使用できない場合は、
* NULL を返す
*/
char *session_dns(Session *sn);
request
HTTP プロトコルのもとでは、セッションに対応する要求は 1 つだけです。 Request 構造体は、該当のセッションにある要求に適用される変数があります (たとえば、変数にはクライアントの HTTP ヘッダーが含まれます)。
stat
プログラムが指定されたファイルのために stat( ) 関数を呼び出すとき、システムは、そのファイルに関する情報を提供する構造体を返します。 この構造体に固有の詳細情報はプラットフォームの実装から入手できるはずですが、構造体の基本的な概要は次のとおりです。
サーバのプラグイン API アクティビティのためにもっとも重要な要素は、st_size、st_atime、st_mtime、および st_ctime です。
typedef struct {
void *data; /* データ */
HANDLE fdmap;
int size; /* 最大データ長 */
char *name; /* 内部使用: 公開される場合、リンクを解除する ファイル名 */
SYS_FILE fd; /* 内部使用: 領域のためのファイル記述子 */
} shmem_s;
cinfo
cinfo データ構造体は、ファイルの内容情報を記録します。
typedef struct {
char *type;
/* ファイル内のデータの種類を識別する*/
char *encoding;
/* encoding は、uuencode など、ファイルに適用されている /*
/* 圧縮方式またはその他の内容に依存しない変換方式を識別する /*
char *language;
/* テキストドキュメントの言語を識別する */
} cinfo;
前へ 目次 索引 DocHome 次へ
Copyright © 2000 Sun Microsystems, Inc. Some preexisting portions Copyright © 2000 Netscape Communications Corp. All rights reserved.
Last Updated September 21, 2001