MilterServerContext

MilterServerContext — サーバ側のmilterプロトコルを処理します。

概要

#define             MILTER_SERVER_CONTEXT_ERROR
#define             MILTER_SERVER_CONTEXT_DEFAULT_CONNECTION_TIMEOUT
#define             MILTER_SERVER_CONTEXT_DEFAULT_WRITING_TIMEOUT
#define             MILTER_SERVER_CONTEXT_DEFAULT_READING_TIMEOUT
#define             MILTER_SERVER_CONTEXT_DEFAULT_END_OF_MESSAGE_TIMEOUT
enum                MilterServerContextError;
enum                MilterServerContextState;
                    MilterServerContext;
GQuark              milter_server_context_error_quark   (void);
MilterServerContext* milter_server_context_new          (void);
void                milter_server_context_set_connection_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);
void                milter_server_context_set_writing_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);
void                milter_server_context_set_reading_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);
void                milter_server_context_set_end_of_message_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);
gboolean            milter_server_context_set_connection_spec
                                                        (MilterServerContext *context,
                                                         const gchar *spec,
                                                         GError **error);
gboolean            milter_server_context_establish_connection
                                                        (MilterServerContext *context,
                                                         GError **error);
MilterStatus        milter_server_context_get_status    (MilterServerContext *context);
MilterServerContextState milter_server_context_get_state
                                                        (MilterServerContext *context);
void                milter_server_context_set_state     (MilterServerContext *context,
                                                         MilterServerContextState state);
gboolean            milter_server_context_is_processing (MilterServerContext *context);
gboolean            milter_server_context_negotiate     (MilterServerContext *context,
                                                         MilterOption *option);
gboolean            milter_server_context_connect       (MilterServerContext *context,
                                                         const gchar *host_name,
                                                         struct sockaddr *address,
                                                         socklen_t address_length);
gboolean            milter_server_context_helo          (MilterServerContext *context,
                                                         const gchar *fqdn);
gboolean            milter_server_context_envelope_from (MilterServerContext *context,
                                                         const gchar *from);
gboolean            milter_server_context_envelope_recipient
                                                        (MilterServerContext *context,
                                                         const gchar *recipient);
gboolean            milter_server_context_data          (MilterServerContext *context);
gboolean            milter_server_context_unknown       (MilterServerContext *context,
                                                         const gchar *command);
gboolean            milter_server_context_header        (MilterServerContext *context,
                                                         const gchar *name,
                                                         const gchar *value);
gboolean            milter_server_context_end_of_header (MilterServerContext *context);
gboolean            milter_server_context_body          (MilterServerContext *context,
                                                         const gchar *chunk,
                                                         gsize size);
gboolean            milter_server_context_end_of_message
                                                        (MilterServerContext *context,
                                                         const gchar *chunk,
                                                         gsize size);
gboolean            milter_server_context_quit          (MilterServerContext *context);
gboolean            milter_server_context_abort         (MilterServerContext *context);
gboolean            milter_server_context_is_enable_step
                                                        (MilterServerContext *context,
                                                         MilterStepFlags step);
gboolean            milter_server_context_get_skip_body (MilterServerContext *context);
const gchar*        milter_server_context_get_name      (MilterServerContext *context);
void                milter_server_context_set_name      (MilterServerContext *context,
                                                         const gchar *name);

説明

MilterServerContextは1つのサーバ側のmilterプロトコルセッションを処理します。これは各milterプロトコルセッション毎にMilterServerContextインスタンスが生成されるということです。

詳細

MILTER_SERVER_CONTEXT_ERROR

#define MILTER_SERVER_CONTEXT_ERROR           (milter_server_context_error_quark())

MilterServerContextのエラー用のGErrorクォークを取得するために使われます。


MILTER_SERVER_CONTEXT_DEFAULT_CONNECTION_TIMEOUT

#define MILTER_SERVER_CONTEXT_DEFAULT_CONNECTION_TIMEOUT     300

既定の秒単位での接続タイムアウト。


MILTER_SERVER_CONTEXT_DEFAULT_WRITING_TIMEOUT

#define MILTER_SERVER_CONTEXT_DEFAULT_WRITING_TIMEOUT         10

既定の秒単位での書き込みタイムアウト。


MILTER_SERVER_CONTEXT_DEFAULT_READING_TIMEOUT

#define MILTER_SERVER_CONTEXT_DEFAULT_READING_TIMEOUT         10

既定の秒単位での読み込みタイムアウト。


MILTER_SERVER_CONTEXT_DEFAULT_END_OF_MESSAGE_TIMEOUT

#define MILTER_SERVER_CONTEXT_DEFAULT_END_OF_MESSAGE_TIMEOUT 300

既定の秒単位でのメッセージ終了時の応答待ちタイムアウト。


enum MilterServerContextError

typedef enum
{
    MILTER_SERVER_CONTEXT_ERROR_CONNECTION_FAILURE,
    MILTER_SERVER_CONTEXT_ERROR_NO_SPEC,
    MILTER_SERVER_CONTEXT_ERROR_INVALID_STATE,
    MILTER_SERVER_CONTEXT_ERROR_BUSY,
    MILTER_SERVER_CONTEXT_ERROR_IO_ERROR,
    MILTER_SERVER_CONTEXT_ERROR_NEWER_VERSION_REQUESTED
} MilterServerContextError;

MilterServerContextの関数呼び出し中に発生するエラーを識別します。

MILTER_SERVER_CONTEXT_ERROR_CONNECTION_FAILURE

接続が失敗したことを示します。

MILTER_SERVER_CONTEXT_ERROR_NO_SPEC

接続指定が設定されていないことを示します。

MILTER_SERVER_CONTEXT_ERROR_INVALID_STATE

現在のMilterServerContextが予期しない応答を受け取ったことを示します。

MILTER_SERVER_CONTEXT_ERROR_BUSY

前の操作の結果を受け取る前に新しい操作が要求されたことを示します。

MILTER_SERVER_CONTEXT_ERROR_IO_ERROR

milterプロトコルデータの読み書き時に発生した入出力エラーを示します。

MILTER_SERVER_CONTEXT_ERROR_NEWER_VERSION_REQUESTED

未サポートの新しいバージョンが要求されたことを示します。

enum MilterServerContextState

typedef enum
{
    MILTER_SERVER_CONTEXT_STATE_START,
    MILTER_SERVER_CONTEXT_STATE_DEFINE_MACRO,
    MILTER_SERVER_CONTEXT_STATE_NEGOTIATE,
    MILTER_SERVER_CONTEXT_STATE_CONNECT,
    MILTER_SERVER_CONTEXT_STATE_HELO,
    MILTER_SERVER_CONTEXT_STATE_ENVELOPE_FROM,
    MILTER_SERVER_CONTEXT_STATE_ENVELOPE_RECIPIENT,
    MILTER_SERVER_CONTEXT_STATE_DATA,
    MILTER_SERVER_CONTEXT_STATE_UNKNOWN,
    MILTER_SERVER_CONTEXT_STATE_HEADER,
    MILTER_SERVER_CONTEXT_STATE_END_OF_HEADER,
    MILTER_SERVER_CONTEXT_STATE_BODY,
    MILTER_SERVER_CONTEXT_STATE_END_OF_MESSAGE,
    MILTER_SERVER_CONTEXT_STATE_QUIT,
    MILTER_SERVER_CONTEXT_STATE_ABORT
} MilterServerContextState;

MilterServerContextの状態を識別します。

MILTER_SERVER_CONTEXT_STATE_START

はじまったばかり。

MILTER_SERVER_CONTEXT_STATE_DEFINE_MACRO

マクロ定義を送信しました。

MILTER_SERVER_CONTEXT_STATE_NEGOTIATE

ネゴシエーション中。

MILTER_SERVER_CONTEXT_STATE_CONNECT

接続情報を送信しました。

MILTER_SERVER_CONTEXT_STATE_HELO

HELOコマンドの情報を送信しました。

MILTER_SERVER_CONTEXT_STATE_ENVELOPE_FROM

MAIL FROMコマンドの情報を送信しました。

MILTER_SERVER_CONTEXT_STATE_ENVELOPE_RECIPIENT

RCPT TOコマンドの情報を送信しました。

MILTER_SERVER_CONTEXT_STATE_DATA

DATAコマンドの情報を送信しました。

MILTER_SERVER_CONTEXT_STATE_UNKNOWN

未知のSMTPコマンドを送信しました。

MILTER_SERVER_CONTEXT_STATE_HEADER

ヘッダを送信した。

MILTER_SERVER_CONTEXT_STATE_END_OF_HEADER

すべてのヘッダを送信しました。

MILTER_SERVER_CONTEXT_STATE_BODY

本文の1かたまりを送信しました。

MILTER_SERVER_CONTEXT_STATE_END_OF_MESSAGE

本文すべてを送信しました。

MILTER_SERVER_CONTEXT_STATE_QUIT

終了要求を送信しました。

MILTER_SERVER_CONTEXT_STATE_ABORT

中止要求を送信しました。

MilterServerContext

typedef struct {
    MilterProtocolAgent object;
} MilterServerContext;


milter_server_context_error_quark ()

GQuark              milter_server_context_error_quark   (void);

返値 :


milter_server_context_new ()

MilterServerContext* milter_server_context_new          (void);

新しいコンテキストオブジェクトを生成します。

返値 :

新しいMilterServerContextオブジェクト。

milter_server_context_set_connection_timeout ()

void                milter_server_context_set_connection_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);

接続時のタイムアウトを秒で設定します。もし、contexttimeout秒以内にクライアントに接続できない場合は"timeout"シグナルが発行されます。

context :

MilterServerContext

timeout :

接続時の秒単位のタイムアウト。(既定値はMILTER_SERVER_CONTEXT_DEFAULT_CONNECTION_TIMEOUT

milter_server_context_set_writing_timeout ()

void                milter_server_context_set_writing_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);

書き込み時の秒単位のタイムアウトを設定します。contexttimeout秒以内にクライアントのソケットに書き込めない場合は"timeout"シグナルが発行されます。

context :

MilterServerContext

timeout :

秒単位での書き込みタイムアウト。(既定値はMILTER_SERVER_CONTEXT_DEFAULT_WRITING_TIMEOUT

milter_server_context_set_reading_timeout ()

void                milter_server_context_set_reading_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);

読み込み時のタイムアウトを秒単位で指定します。contexttimeout秒以内にクライアントソケットから応答を受け取らなかった場合は、"timeout"シグナルが発行されます。

context :

MilterServerContext

timeout :

秒単位での読み込み時のタイムアウト。(既定値はMILTER_SERVER_CONTEXT_DEFAULT_READING_TIMEOUT

milter_server_context_set_end_of_message_timeout ()

void                milter_server_context_set_end_of_message_timeout
                                                        (MilterServerContext *context,
                                                         gdouble timeout);

メッセージ終了時のタイムアウトを秒単位で設定します。contexttimeout秒以内にクライアントソケットからメッセージ終了時の応答を受け取らなかった場合は、"timeout"シグナルが発行されます。

context :

MilterServerContext

timeout :

秒単位でのメッセージ終了時のタイムアウト。(既定値はMILTER_SERVER_CONTEXT_DEFAULT_END_OF_MESSAGE_TIMEOUT

milter_server_context_set_connection_spec ()

gboolean            milter_server_context_set_connection_spec
                                                        (MilterServerContext *context,
                                                         const gchar *spec,
                                                         GError **error);

クライアントの接続指定を設定します。specが不正な形式で、errorNULLでない場合は、エラーの詳細はerrorに設定されます。

context :

MilterServerContext

spec :

クライアントの接続指定。

error :

エラーを受け取る場所のアドレス、またはNULL

返値 :

成功時はTRUE

milter_server_context_establish_connection ()

gboolean            milter_server_context_establish_connection
                                                        (MilterServerContext *context,
                                                         GError **error);

クライアントへの接続を確立します。接続確立が失敗して、errorNULLでない場合は、エラーの詳細はerrorに設定されます。

context :

MilterServerContext

error :

エラーを受け取る場所のアドレス、またはNULL

返値 :

成功時はTRUE

milter_server_context_get_status ()

MilterStatus        milter_server_context_get_status    (MilterServerContext *context);

現在の状態を取得します。

context :

MilterServerContext

返値 :

現在の状態。

milter_server_context_get_state ()

MilterServerContextState milter_server_context_get_state
                                                        (MilterServerContext *context);

現在の状態を取得します。

context :

MilterServerContext

返値 :

現在の状態。

milter_server_context_set_state ()

void                milter_server_context_set_state     (MilterServerContext *context,
                                                         MilterServerContextState state);

現在の状態を設定します。

context :

MilterServerContext

state :

新しい状態。

milter_server_context_is_processing ()

gboolean            milter_server_context_is_processing (MilterServerContext *context);

応答を待っているかどうかを取得します。

context :

MilterServerContext

返値 :

最後の書き込みの後に応答を受け取っていたらTRUE、そうでなければFALSE

milter_server_context_negotiate ()

gboolean            milter_server_context_negotiate     (MilterServerContext *context,
                                                         MilterOption *option);

クライアントとネゴシエーションします。

context :

MilterServerContext

option :

ネゴシエーションのオプション。

返値 :

成功時はTRUE

milter_server_context_connect ()

gboolean            milter_server_context_connect       (MilterServerContext *context,
                                                         const gchar *host_name,
                                                         struct sockaddr *address,
                                                         socklen_t address_length);

接続されたSMTPクライアントの情報を送信します。

context :

MilterServerContext

host_name :

接続してきたSMTPクライアントのホスト名。

address :

接続してきたSMTPクライアントのアドレス。

address_length :

addressのサイズ。

返値 :

成功時はTRUE

milter_server_context_helo ()

gboolean            milter_server_context_helo          (MilterServerContext *context,
                                                         const gchar *fqdn);

HELOに渡されたFQDNを送信します。

context :

MilterServerContext

fqdn :

FQDN。

返値 :

成功時はTRUE

milter_server_context_envelope_from ()

gboolean            milter_server_context_envelope_from (MilterServerContext *context,
                                                         const gchar *from);

MAIL FROM時に渡されたパラメタを送信します。

context :

MilterServerContext

from :

送信者のアドレス。

返値 :

成功時はTRUE

milter_server_context_envelope_recipient ()

gboolean            milter_server_context_envelope_recipient
                                                        (MilterServerContext *context,
                                                         const gchar *recipient);

RCPT TO時に渡されたパラメタを送信します。

context :

MilterServerContext

recipient :

宛先アドレス。

返値 :

成功時はTRUE

milter_server_context_data ()

gboolean            milter_server_context_data          (MilterServerContext *context);

DATAコマンドを受信したことを通知します。

context :

MilterServerContext

返値 :

成功時はTRUE

milter_server_context_unknown ()

gboolean            milter_server_context_unknown       (MilterServerContext *context,
                                                         const gchar *command);

受信した未知のSMTPコマンドを送信します。

context :

MilterServerContext

command :

未知のSMTPコマンド。

返値 :

成功時はTRUE

milter_server_context_header ()

gboolean            milter_server_context_header        (MilterServerContext *context,
                                                         const gchar *name,
                                                         const gchar *value);

ヘッダを送信します。

context :

MilterServerContext

name :

ヘッダ名。

value :

ヘッダ値。

返値 :

成功時はTRUE

milter_server_context_end_of_header ()

gboolean            milter_server_context_end_of_header (MilterServerContext *context);

すべてのヘッダが送信されたことを通知します。

context :

MilterServerContext

返値 :

成功時はTRUE

milter_server_context_body ()

gboolean            milter_server_context_body          (MilterServerContext *context,
                                                         const gchar *chunk,
                                                         gsize size);

本文の1かたまりを送信します。

context :

MilterServerContext

chunk :

本文の1かたまり。

size :

chunkのサイズ。

返値 :

成功時はTRUE

milter_server_context_end_of_message ()

gboolean            milter_server_context_end_of_message
                                                        (MilterServerContext *context,
                                                         const gchar *chunk,
                                                         gsize size);

すべての本文のかたまりを送信したことを通知します。未送信の最後の本文のかたまりも一緒に送信することができます。

context :

MilterServerContext

chunk :

本文のかたまり。NULLかもしれません。

size :

chunkのサイズ。

返値 :

成功時はTRUE

milter_server_context_quit ()

gboolean            milter_server_context_quit          (MilterServerContext *context);

現在の接続を終了します。

context :

MilterServerContext

返値 :

成功時はTRUE

milter_server_context_abort ()

gboolean            milter_server_context_abort         (MilterServerContext *context);

現在の接続を中止します。

context :

MilterServerContext

返値 :

成功時はTRUE

milter_server_context_is_enable_step ()

gboolean            milter_server_context_is_enable_step
                                                        (MilterServerContext *context,
                                                         MilterStepFlags step);

contextのオプションでstepフラグが有効かどうかを取得します。

context :

MilterServerContext

step :

ステップフラグ。

返値 :

stepフラグが有効ならTRUE、そうでなければFALSE

milter_server_context_get_skip_body ()

gboolean            milter_server_context_get_skip_body (MilterServerContext *context);

contextが本文のかたまりを送っている間にスキップ応答を受け取ったかどうかを取得します。

context :

MilterServerContext

返値 :

本文のかたまりを省略していたらTRUE、そうでなければFALSE

milter_server_context_get_name ()

const gchar*        milter_server_context_get_name      (MilterServerContext *context);

contextの名前を取得します。

context :

MilterServerContext

返値 :

contextの名前。

milter_server_context_set_name ()

void                milter_server_context_set_name      (MilterServerContext *context,
                                                         const gchar *name);

contextの名前を設定します。

context :

MilterServerContext

name :

名前。