前へ 目次 索引 DocHome 次へ |
iPlanet Calendar Server 5.1 イベント通知サービスマニュアル |
第 5 章 iPlanet Messaging Server 固有の情報
この章では、ENS API を使用するために必要となる iPlanet Messaging Server に固有の項目について説明します。
iPlanet Messaging Server のイベントおよびパラメータ
iPlanet Messaging Server のイベントおよびパラメータ
iPlanet Messaging Server では、イベント参照は 1 つだけですが、そのイベント参照を複数のパラメータで構成することができます。 各パラメータには、値とペイロードがあります。iPlanet Messaging Server は、次の種類のイベントをサポートしています。
NewMsg - ユーザのメールボックスに新しいメッセージを受信しました。
上記のサポートされるイベントに対して、以下が適用されます。DeleteMsg - ユーザがメールボックスからメッセージを削除しました (IMAP プロトコルでは、「expunge (抹消)」が実行されました)。
UpdateMsg - メッセージが (NewMsg 以外のイベントによって) メールボックスに追加されました。たとえば、ユーザが電子メールをメールボックスにコピーしました。
ReadMsg - メールボックス内のメッセージが読まれました (IMAP プロトコルでは、メッセージに「Seen (既読)」のマークが付けられました)。
PurgeMsg - メッセージは、メールボックスからパージされました (IMAP プロトコルでは、「expunge (抹消)」が実行されました)。
すべてのイベントは、INBOX にのみ関係します。
NewMsg 通知は、メッセージがユーザのメールボックスに入って初めて発行されます (「サーバが受け付けて、メッセージキューに入ったところで発行される」とは反対)。
DeleteMsg イベントと PurgeMsg イベントはどちらも、メッセージがユーザのメールボックスから削除されたとき (IMAP プロトコルでは、メッセージに expunge が実行されたとき) に対応しています。 IMAP プロトコルで削除とマークが付けられたときではありません。 2 つのイベントの唯一の違いは、誰がメッセージを削除したか、という点です。 DeleteMsg は、ユーザがメッセージを削除したことを示し、PurgeMsg は、iPlanet Messaging Server がメッセージを削除したことを示します (たとえば、メッセージの期限が切れた場合)。
通知には、イベントの種類に応じて、さまざまな情報を運びます。たとえば、NewMsg は、新しいメッセージの IMAP uid を示します。
パラメータ
iBiff は、ENS イベント参照に次の形式を使用します。enp://127.0.0.1/store?param=value¶m1=value1¶m2=value2
イベントキーの enp://127.0.0.1/store は、文字列として一意であるということ以外、大きな意味はありません。 たとえば、イベントキーのホスト名の部分には、ホスト名としての意味はありません。 URI の一部である文字列というだけです。 ただし、イベントキーはユーザが構成することができます。 iBiff 構成パラメータの一覧を、以下の別の節に示します。
イベント参照の 2 番目の部分は、パラメータとその値のペアで構成されています。 この部分は、疑問符 (?) を使ってイベントキーと区切られています。 パラメータと値は、等号 (=) で区切られています。 パラメータと値の各ペアは、アンパサンド (&) で区切られています。値が空の場合もありますが、これはただ値が存在しないということです。
表 5-1 で、すべての通知に含める必要がある、必須構成パラメータについて説明します。
表 5-2 で、イベントの種類に依存する、オプションの構成パラメータについて説明します。
メッセージのサイズを指定する。 ペイロードは通常、メッセージが短縮されたものであるため、これは、ペイロードのサイズとは一致しない。
メッセージヘッダーのサイズを指定する。 ペイロードは短縮されているため、これは、ペイロードのヘッダーのサイズとは一致しない。
注 サブスクライバは、イベント参照を構文解析するとき、文書化されていないパラメータについても許すべきです。 将来、新しいパラメータが追加されたときに互換性を持たせることができます。
ペイロード
イベントに応じて、ENS 通知のペイロード部分には次のデータが含まれます。
メッセージのヘッダー - (文字列) - 長さは特定の (構成可能な) サイズに制限されます。次の各節に示す構成パラメータを参照してください。
表 5-3 に、各イベントの種類で使用できるパラメータを示します。メッセージ本体の最初の数バイト - (文字列)。 実際のバイト数は構成可能です。次の各節に示す構成パラメータを参照してください。
例
次に、NewMsg イベント参照の例を示します (読みやすくするために数行に分けてありますが、実際は 1 行です)。
enp://127.0.0.1/store?evtType=NewMsg&mailboxName=ketu310×tamp=972423964000
&process=16233&hostname=ketu&numMsgs=1&size=3339&uidValidity=972423964&
imapUid=1&hdrLen=810これは、関連付けられているペイロードです。本体の部分は縮められています。
次に別の例として、DeleteMsg イベントの例を示します (ここでも 1 行を読みやすくするために数行に分けています)。 この例では、ホストドメイン symult.com のユーザ ID blim の mailboxName を示しています。
enp://127.0.0.1/store?evtType=DeleteMsg&mailboxName=blim@symult.com&
timestamp=972423953000&process=15354&hostname=ketu&numMsgs=0&
uidValidity=972423928&imapUid=2&lastUid=23 番目に、ReadMsg イベントの例を示します (ここでも 1 行を読みやすくするために数行に分けています)。 この例では、uidSeqSeen パラメータに空の値が示されています。 また、前述の例と同じユーザ ID を共有していますが、これは別のユーザ、つまりデフォルトのドメイン内にいるユーザと対応しています。
enp://127.0.0.1/store?evtType=ReadMsg&mailboxName=blim×tamp=972423952000&
process=15354&hostname=ketu&uidValidity=972423928&uidSeqSeen=&uidSeqDel=1
iPlanet Messaging Server のコーディング例
iPlanet Messaging Server は、完全な ENS 実装を伴って出荷されていますが、デフォルトでは使用できません。 iPlanet Messaging Server で ENS を使用可能にするには、『iPlanet Messaging Server 5.2 管理者ガイド』の付録 C を参照してください。次の 2 つのコーディング例で、ENS API の使い方を説明します。 コーディング例は、製品の次のディレクトリにあります。
server-root/bin/msg/enssdk/examples
パブリッシャのコードサンプル
次のコーディング例は、簡単な対話形式の非同期パブリッシャを与えます。* Copyright 2000 by Sun Microsystems, Inc.
* ハードコード化された以下のイベント参照を使用してイベントを公開します。
* また、通知ペイロードとしてプロンプトに入力されたデータを使用します。
* 対応するサブスクライバの asub を同じ通知サーバ上で実行すると、
static pas_dispatcher_t *disp = NULL;
static publisher_t *_publisher = NULL;
printf("\n使用法:\napub ホストポート\n");
static void _exit_error(const char *msg)
static void _open_ack(void *arg, int rc, void *enc)
_publisher = (publisher_t *)enc;
printf("状態 %d のため、パブリッシャの作成に失敗しました\n", rc);
static void _publish_ack(void *arg, int rc, void *ignored)
printf("状態 %d のため、公開に失敗しました\n", rc);
if ( !fgets(input, sizeof(input), stdin) ) {
input[strlen(input) - 1] = 0; /* \n を取り除く*/
if (*input == ヤ.ユ && input[1] == 0) {
message_len = strlen(message);
publish(_publisher, "enp://127.0.0.1/store",
_publish_ack, NULL, (void *)message, 0);
port = (unsigned short)atoi(argv[2]);
disp = pas_dispatcher_new(NULL);
if (disp == NULL) _exit_error("パブリッシャを作成できません");
publisher_new_a(disp, NULL, host, port, _open_ack, disp);
サブスクライバのコードサンプル
次のコーディング例は、簡単なサブスクライバを設定します。* Copyright 1997 by Sun Microsystems, Inc.
* この単純化されたプログラムは、ハードコード化された次のイベント参照
* 続いて、apub プロセスのいずれかが使用されて、apub プロセスが放出した
* メッセージを受信したら、各々の受信した通知のペイロードを
static pas_dispatcher_t *disp = NULL;
static subscriber_t *_subscriber = NULL;
static subscription_t *_subscription = NULL;
printf("\n使用法:\nasub ホストポート\n");
static void _exit_error(const char *msg)
static void _subscribe_ack(void *arg, int rc, void *subscription)
subscriber_keepalive(_subscriber, 30000);
printf("購読に失敗しました - 状態 %d\n", rc);
static void _unsubscribe_ack(void *arg, int rc, void *ignored)
printf("購読の解除に失敗しました - 状態 %d\n", rc);
subscriber_delete(_subscriber);
static int _handle_notify(void *arg, char *url, char *str, int len)
printf("[%s] %.*s\n", url, len, (str) ? str : "(null)");
static void _open_ack(void *arg, int rc, void *enc)
_subscriber = (subscriber_t *)enc;
printf("状態 %d のため、サブスクライバの作成に失敗しました\n", rc);
subscribe(_subscriber, "enp://127.0.0.1/store",
static void _unsubscribe(int sig)
unsubscribe(_subscriber, _subscription, _unsubscribe_ack, NULL);
port = (unsigned short)atoi(argv[2]);
disp = pas_dispatcher_new(NULL);
if (disp == NULL) _exit_error("パブリッシャを作成できません");
subscriber_new_a(disp, NULL, host, port, _open_ack, NULL);
実装上の注意
現在の実装では、購読するイベントに対するセキュリティ保護を提供していません。 したがって、ユーザはすべてのイベントと他のすべてのユーザのメールの一部分を登録することができます。 このため、ENS サブスクライバは、少なくともファイアウォールの「安全」な側に配置することをお勧めします。
前へ 目次 索引 DocHome 次へ
Copyright (C) 2002 Sun Microsystems, Inc. Some preexisting portions Copyright (C) 2000 Netscape Communications Corp. All rights reserved.
最終更新日: 2002 年 1 月 31 日