前へ     目次     索引     DocHome     次へ     
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 データ構造体は、次に示すように、送信される要求にかかわらず、全体に適用される変数を保持します。


typedef struct {
/* リモートクライアントに関する情報 */
    pblock *client;

    /* リモートクライアントへのソケット記述子 */
    SYS_NETFD csd;

    /* ソケット記述子のための入力バッファ */
    netbuf *inbuf;

    /* リモートクライアントに関する */
    /* 生のソケット情報 (内部使用) */
    struct in_addr iaddr;
} 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 ヘッダーが含まれます)。


typedef struct {
    /* サーバの動作している変数 */
    pblock *vars;

    /* このリクエストのメソッド、 URI プロトコルバージョン */
    block *reqpb;

    /* プロトコル固有のヘッダー */
    int loadhdrs;
    pblock *headers;

    /* サーバの応答ヘッダー */
    pblock *srvhdrs;

    /* この要求を満たすために構築されたオブジェクトセット */
    httpd_objset *os;

    /* request_stat_path が最後に返した stat */
    char *statpath;
    struct stat *finfo;
} Request;



stat



プログラムが指定されたファイルのために stat( ) 関数を呼び出すとき、システムは、そのファイルに関する情報を提供する構造体を返します。 この構造体に固有の詳細情報はプラットフォームの実装から入手できるはずですが、構造体の基本的な概要は次のとおりです。


struct stat {
    dev_t      st_dev;     /* i ノードのデバイス */
    inot_t     st_ino;     /* i ノード番号 */
    short      st_mode;    /* モードビット */
    short      st_nlink;   /* ファイルへのリンク数 /*
    short      st_uid;     /* 所有者のユーザ ID */
    short      st_gid;     /* 所有者のグループ ID */
    dev_t      st_rdev;    /* 特定のファイル用 */
    off_t      st_size;    /* ファイルサイズ (文字数) */
    time_t     st_atime;   /* 最後にアクセスした時間 */
    time_t     st_mtime;   /* 最後に更新した時間 */
    time_t     st_ctime;   /* i ノードが最後に変更された時間*/
}

サーバのプラグイン API アクティビティのためにもっとも重要な要素は、st_sizest_atimest_mtime、および st_ctime です。



shmem_s




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