MilterServerContext: milter manager Reference Manual

## MilterServerContext MilterServerContext — Process server side milter protocol. |

## Functions

GQuark | milter_server_context_error_quark ()
MilterServerContext * | milter_server_context_new ()
void | milter_server_context_set_connection_timeout ()
void | milter_server_context_set_writing_timeout ()
void | milter_server_context_set_reading_timeout ()
void | milter_server_context_set_end_of_message_timeout ()
void | milter_server_context_set_all_timeouts ()
gboolean | milter_server_context_set_connection_spec ()
gboolean | milter_server_context_establish_connection ()
MilterStatus | milter_server_context_get_status ()
void | milter_server_context_set_status ()
MilterServerContextState | milter_server_context_get_state ()
void | milter_server_context_set_state ()
MilterServerContextState | milter_server_context_get_last_state ()
gboolean | milter_server_context_is_processing ()
gboolean | milter_server_context_negotiate ()
gboolean | milter_server_context_connect ()
gboolean | milter_server_context_helo ()
gboolean | milter_server_context_envelope_from ()
gboolean | milter_server_context_envelope_recipient ()
gboolean | milter_server_context_data ()
gboolean | milter_server_context_unknown ()
gboolean | milter_server_context_header ()
gboolean | milter_server_context_end_of_header ()
gboolean | milter_server_context_body ()
gboolean | milter_server_context_end_of_message ()
gboolean | milter_server_context_quit ()
gboolean | milter_server_context_abort ()
void | milter_server_context_set_option ()
MilterOption * | milter_server_context_get_option ()
gboolean | milter_server_context_is_enable_step ()
gboolean | milter_server_context_get_skip_body ()
const gchar * | milter_server_context_get_name ()
void | milter_server_context_set_name ()
gdouble | milter_server_context_get_elapsed ()
gboolean | milter_server_context_is_negotiated ()
gboolean | milter_server_context_is_processing_message ()
void | milter_server_context_set_processing_message ()
gboolean | milter_server_context_is_quitted ()
void | milter_server_context_set_quitted ()
void | milter_server_context_reset_message_related_data ()
MilterMessageResult * | milter_server_context_get_message_result ()
void | milter_server_context_set_message_result ()
gboolean | milter_server_context_need_reply ()
gboolean | milter_server_context_has_accepted_recipient ()

## Properties

double | connection-timeout | Read / Write / Construct
double | end-of-message-timeout | Read / Write / Construct
MilterMessageResult * | message-result | Read / Write
char * | name | Read / Write
double | reading-timeout | Read / Write / Construct
MilterServerContextState | state | Read / Write
MilterStatus | status | Read / Write
double | writing-timeout | Read / Write / Construct

## Signals

void | connection-timeout | Run Last
void | end-of-message-timeout | Run Last
void | message-processed | Run Last
void | reading-timeout | Run Last
void | ready | Run Last
void | state-transited | Run Last
gboolean | stop-on-body | Run Last
gboolean | stop-on-connect | Run Last
gboolean | stop-on-data | Run Last
gboolean | stop-on-end-of-header | Run Last
gboolean | stop-on-end-of-message | Run Last
gboolean | stop-on-envelope-from | Run Last
gboolean | stop-on-envelope-recipient | Run Last
gboolean | stop-on-header | Run Last
gboolean | stop-on-helo | Run Last
void | stopped | Run Last
void | writing-timeout | Run Last

## Types and Values

#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

## Object Hierarchy

        GObject
        ╰── MilterAgent
            ╰── MilterProtocolAgent
                ╰── MilterServerContext
                    ╰── MilterManagerChild

## Description

The `MilterServerContext` processes one server side milter protocol session. It means `MilterServerContext` instance is created for each milter protocol session.

## Functions

### milter_server_context_error_quark ()

    GQuark
    milter_server_context_error_quark (void);

### milter_server_context_new ()

    MilterServerContext *
    milter_server_context_new (void);

Creates a new context object.

#### Returns

a new `MilterServerContext` object.

### milter_server_context_set_connection_timeout ()

    void
    milter_server_context_set_connection_timeout
                                   (MilterServerContext *context,
                                    gdouble timeout);

Sets the timeout in seconds on connection. If `context` doesn't connects to client in `timeout` seconds, “timeout” signal is emitted.

#### Parameters

context | a `MilterServerContext`. |
timeout | the connection timeout in seconds. (default is `MILTER_SERVER_CONTEXT_DEFAULT_CONNECTION_TIMEOUT`) |

### milter_server_context_set_writing_timeout ()

    void
    milter_server_context_set_writing_timeout
                                   (MilterServerContext *context,
                                    gdouble timeout);

Sets the timeout in seconds on writing. If `context` doesn't write to client socket in `timeout` seconds, “timeout” signal is emitted.

#### Parameters

context | a `MilterServerContext`. |
timeout | the writing timeout in seconds. (default is `MILTER_SERVER_CONTEXT_DEFAULT_WRITING_TIMEOUT`) |

### milter_server_context_set_reading_timeout ()

    void
    milter_server_context_set_reading_timeout
                                   (MilterServerContext *context,
                                    gdouble timeout);

Sets the timeout in seconds on reading. If `context` doesn't receive response from client socket in `timeout` seconds, “timeout” signal is emitted.

#### Parameters

context | a `MilterServerContext`. |
timeout | the reading timeout in seconds. (default is `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);

Sets the timeout in seconds on end-of-message. If `context` doesn't receive response for end-of-message from client socket in `timeout` seconds, “timeout” signal is emitted.

#### Parameters

context | a `MilterServerContext`. |
timeout | the timeout in seconds on end-of-message. (default is `MILTER_SERVER_CONTEXT_DEFAULT_END_OF_MESSAGE_TIMEOUT`) |

### milter_server_context_set_all_timeouts ()

    void
    milter_server_context_set_all_timeouts
                                   (MilterServerContext *context,
                                    gdouble timeout);

Sets the timeout in seconds on connection, writing, reading and end-of-message at once.

See the comments of the fllowing functions about each timeout:

1. milter_server_context_set_connection_timeout()

2. milter_server_context_set_writing_timeout()

3. milter_server_context_set_reading_timeout()

4. milter_server_context_set_end_of_message_timeout()

#### Parameters

context | a `MilterServerContext`. |
timeout | the timeout in seconds. |

Since: 2.1.0

### milter_server_context_set_connection_spec ()

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

Sets a connection specification of client. If `spec` is invalid format and `error` is not `NULL`, error detail is stored into `error` .

#### Parameters

context | a `MilterServerContext`. |
spec | the connection spec of client. |
error | return location for an error, or `NULL`. |

#### Returns

`TRUE` on success.

### milter_server_context_establish_connection ()

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

Establishes a connection to client. If establishing is failed and `error` is not `NULL`, error detail is stored into `error` .

#### Parameters

context | a `MilterServerContext`. |
error | return location for an error, or `NULL`. |

#### Returns

`TRUE` on success.

### milter_server_context_get_status ()

    MilterStatus
    milter_server_context_get_status (MilterServerContext *context);

Gets the current status.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

the current status.

### milter_server_context_set_status ()

    void
    milter_server_context_set_status (MilterServerContext *context,
                                      MilterStatus status);

Sets the current status.

#### Parameters

context | a `MilterServerContext`. |
status | the new status. |

### milter_server_context_get_state ()

    MilterServerContextState
    milter_server_context_get_state (MilterServerContext *context);

Gets the current state.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

the current state.

### milter_server_context_set_state ()

    void
    milter_server_context_set_state (MilterServerContext *context,
                                     MilterServerContextState state);

Sets the current state.

#### Parameters

context | a `MilterServerContext`. |
state | the new state. |

### milter_server_context_get_last_state ()

    MilterServerContextState
    milter_server_context_get_last_state (MilterServerContext *context);

Gets the last state. It's one of start, negotiate, connect, helo, envelope-from, envelope-recipient, data, unknown, header, end-of-header, body and end-of-message.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

the last state.

### milter_server_context_is_processing ()

    gboolean
    milter_server_context_is_processing (MilterServerContext *context);

Gets whether waiting response.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` if any response is received after the last writing, `FALSE` otherwise.

### milter_server_context_negotiate ()

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

Negotiates with client.

#### Parameters

context | a `MilterServerContext`. |
option | the negotiate option. |

#### Returns

`TRUE` on success.

### milter_server_context_connect ()

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

Sends connected SMTP client information.

#### Parameters

context | a `MilterServerContext`. |
host_name | the host name of connected SMTP client. |
address | the address of connected SMTP client. |
address_length | the length of `address` . |

#### Returns

`TRUE` on success.

### milter_server_context_helo ()

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

Sends the FQDN passed on HELO.

#### Parameters

context | a `MilterServerContext`. |
fqdn | the FQDN. |

#### Returns

`TRUE` on success.

### milter_server_context_envelope_from ()

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

Sends the parameter passed on MAIL FROM.

#### Parameters

context | a `MilterServerContext`. |
from | the envelope from address. |

#### Returns

`TRUE` on success.

### milter_server_context_envelope_recipient ()

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

Sends the parameter passed on RCPT TO.

#### Parameters

context | a `MilterServerContext`. |
recipient | the envelope recipient address. |

#### Returns

`TRUE` on success.

### milter_server_context_data ()

    gboolean
    milter_server_context_data (MilterServerContext *context);

Notifies DATA is received.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` on success.

### milter_server_context_unknown ()

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

Sends received unknown SMTP command.

#### Parameters

context | a `MilterServerContext`. |
command | the unknown SMTP command. |

#### Returns

`TRUE` on success.

### milter_server_context_header ()

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

Sends a header.

#### Parameters

context | a `MilterServerContext`. |
name | the header name. |
value | the header value. |

#### Returns

`TRUE` on success.

### milter_server_context_end_of_header ()

    gboolean
    milter_server_context_end_of_header (MilterServerContext *context);

Notifies all headers are sent.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` on success.

### milter_server_context_body ()

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

Sends a body chunk.

#### Parameters

context | a `MilterServerContext`. |
chunk | the body chunk. |
size | the size of `chunk` . |

#### Returns

`TRUE` on success.

### milter_server_context_end_of_message ()

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

Notifies all body chunks are sent with optional the last body chunk.

#### Parameters

context | a `MilterServerContext`. |
chunk | the body chunk. maybe `NULL`. |
size | the size of `chunk` . |

#### Returns

`TRUE` on success.

### milter_server_context_quit ()

    gboolean
    milter_server_context_quit (MilterServerContext *context);

Quits the current connection.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` on success.

### milter_server_context_abort ()

    gboolean
    milter_server_context_abort (MilterServerContext *context);

Aborts the current connection.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` on success.

### milter_server_context_set_option ()

    void
    milter_server_context_set_option (MilterServerContext *context,
                                      MilterOption *option);

Set negotiate option.

#### Parameters

context | a `MilterServerContext`. |
option | the negotiate option. |

### milter_server_context_get_option ()

    MilterOption *
    milter_server_context_get_option (MilterServerContext *context);

#### Parameters

context | A MilterServerContext. |

#### Returns

The negotiate option.

[transfer none]

### milter_server_context_is_enable_step ()

    gboolean
    milter_server_context_is_enable_step (MilterServerContext *context,
                                          MilterStepFlags step);

Gets whether `step` flag is enabled in the `context` 's option.

#### Parameters

context | a `MilterServerContext`. |
step | the step flag. |

#### Returns

`TRUE` if `step` flags is enabled, `FALSE` otherwise.

### milter_server_context_get_skip_body ()

    gboolean
    milter_server_context_get_skip_body (MilterServerContext *context);

Gets whether `context` received skip response on sending body chunks.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` if body chunks are skipped, `FALSE` otherwise.

### milter_server_context_get_name ()

    const gchar *
    milter_server_context_get_name (MilterServerContext *context);

Gets the name of `context` .

#### Parameters

context | a `MilterServerContext`. |

#### Returns

the name of `context` .

### milter_server_context_set_name ()

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

Sets the name of `context` .

#### Parameters

context | a `MilterServerContext`. |
name | the name. |

### milter_server_context_get_elapsed ()

    gdouble
    milter_server_context_get_elapsed (MilterServerContext *context);

Gets the elapsed time.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

the elapsed time of `context` .

### milter_server_context_is_negotiated ()

    gboolean
    milter_server_context_is_negotiated (MilterServerContext *context);

Gets whether negotiation is succeeded.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` if `context` is negotiated, `FALSE` otherwise.

### milter_server_context_is_processing_message ()

    gboolean
    milter_server_context_is_processing_message
                                   (MilterServerContext *context);

Gets whether the context is processing message.

#### Parameters

context | A MilterServerContext. |

#### Returns

`TRUE` if `context` is processing message, `FALSE` otherwise.

### milter_server_context_set_processing_message ()

    void
    milter_server_context_set_processing_message
                                   (MilterServerContext *context,
                                    gboolean processing_message);

Sets whether the context is processing message.

#### Parameters

context | A MilterServerContext. |
processing_message | whether the context is processing message. |

### milter_server_context_is_quitted ()

    gboolean
    milter_server_context_is_quitted (MilterServerContext *context);

Gets whether the context is quitted.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` if `context` is quitted, `FALSE` otherwise.

### milter_server_context_set_quitted ()

    void
    milter_server_context_set_quitted (MilterServerContext *context,
                                       gboolean quitted);

Sets whether the context is quitted.

#### Parameters

context | a `MilterServerContext`. |
quitted | whether the context is quitted. |

### milter_server_context_reset_message_related_data ()

    void
    milter_server_context_reset_message_related_data
                                   (MilterServerContext *context);

Resets message related data in the context. It should be called before each 2nd or later messages in the same milter session. There are no bad effects if it is called before 1st message.

#### Parameters

context | a `MilterServerContext`. |

### milter_server_context_get_message_result ()

    MilterMessageResult *
    milter_server_context_get_message_result
                                   (MilterServerContext *context);

Gets the message result of `context` .

#### Parameters

context | A MilterServerContext. |

#### Returns

The message result of `context` .

[transfer none]

### milter_server_context_set_message_result ()

    void
    milter_server_context_set_message_result
                                   (MilterServerContext *context,
                                    MilterMessageResult *result);

Sets the message result of `context` .

#### Parameters

context | A MilterServerContext. |
result | The message result. |

### milter_server_context_need_reply ()

    gboolean
    milter_server_context_need_reply (MilterServerContext *context,
                                      MilterServerContextState state);

Gets whether the context needs to reply on `state` .

#### Parameters

context | a `MilterServerContext`. |
state | a `MilterServerContextState`. |

#### Returns

`TRUE` if `context` needs to reply on `state` , `FALSE` otherwise.

### milter_server_context_has_accepted_recipient ()

    gboolean
    milter_server_context_has_accepted_recipient
                                   (MilterServerContext *context);

Returns `TRUE` if the context has one or more accepted recipients. If the context doesn't know about recipients, it always returns `FALSE`.

#### Parameters

context | a `MilterServerContext`. |

#### Returns

`TRUE` if `context` has one or more accepted recipients, `FALSE` otherwise.

## Types and Values

### MILTER_SERVER_CONTEXT_ERROR

    #define MILTER_SERVER_CONTEXT_ERROR           (milter_server_context_error_quark())

Used to get the GError quark for MilterServerContext errors.

### MILTER_SERVER_CONTEXT_DEFAULT_CONNECTION_TIMEOUT

    #define MILTER_SERVER_CONTEXT_DEFAULT_CONNECTION_TIMEOUT     300

The default connection timeout in seconds.

### MILTER_SERVER_CONTEXT_DEFAULT_WRITING_TIMEOUT

    #define MILTER_SERVER_CONTEXT_DEFAULT_WRITING_TIMEOUT         10

The default writing timeout in seconds.

### MILTER_SERVER_CONTEXT_DEFAULT_READING_TIMEOUT

    #define MILTER_SERVER_CONTEXT_DEFAULT_READING_TIMEOUT         10

The default reading timeout in seconds.

### MILTER_SERVER_CONTEXT_DEFAULT_END_OF_MESSAGE_TIMEOUT

    #define MILTER_SERVER_CONTEXT_DEFAULT_END_OF_MESSAGE_TIMEOUT 300

The default end-of-message response timeout in seconds.

### enum MilterServerContextError

These identify the variable errors that can occur while calling `MilterServerContext` functions.

#### Members

MILTER_SERVER_CONTEXT_ERROR_CONNECTION_FAILURE | Indicates a connection failure. |
MILTER_SERVER_CONTEXT_ERROR_NO_SPEC | Indicates the connection spec isn't set. |
MILTER_SERVER_CONTEXT_ERROR_INVALID_STATE | Indicates unexpected response is received on the current `MilterServerContextState`. |
MILTER_SERVER_CONTEXT_ERROR_BUSY | Indicates a new operation is requested before the previous operation's response is received. |
MILTER_SERVER_CONTEXT_ERROR_IO_ERROR | Indicates an IO error causing on writing/reading milter protocol data. |
MILTER_SERVER_CONTEXT_ERROR_NEWER_VERSION_REQUESTED | Indicates unsupported newer version is requested. |

### enum MilterServerContextState

These identify the state of `MilterServerContext`.

#### Members

MILTER_SERVER_CONTEXT_STATE_INVALID | Invalid state. |
MILTER_SERVER_CONTEXT_STATE_START | Just started. |
MILTER_SERVER_CONTEXT_STATE_DEFINE_MACRO | Sent macro definition. |
MILTER_SERVER_CONTEXT_STATE_NEGOTIATE | Negotiating. |
MILTER_SERVER_CONTEXT_STATE_CONNECT | Sent connection information. |
MILTER_SERVER_CONTEXT_STATE_HELO | Sent HELO information. |
MILTER_SERVER_CONTEXT_STATE_ENVELOPE_FROM | Sent MAIL FROM command information. |
MILTER_SERVER_CONTEXT_STATE_ENVELOPE_RECIPIENT | Sent RCPT TO command information. |
MILTER_SERVER_CONTEXT_STATE_DATA | Sent DATA command information. |
MILTER_SERVER_CONTEXT_STATE_UNKNOWN | Sent unknown SMTP command. |
MILTER_SERVER_CONTEXT_STATE_HEADER | Sent a header. |
MILTER_SERVER_CONTEXT_STATE_END_OF_HEADER | Sent all headers. |
MILTER_SERVER_CONTEXT_STATE_BODY | Sent a body chunk. |
MILTER_SERVER_CONTEXT_STATE_END_OF_MESSAGE | Sent all body chunks. |
MILTER_SERVER_CONTEXT_STATE_QUIT | Sent quit request. |
MILTER_SERVER_CONTEXT_STATE_ABORT | Sent abort request. |

## Property Details

### The `“connection-timeout”` property

      “connection-timeout”       double

The timeout seconds for connecting to a filter.

Owner: MilterServerContext

Flags: Read / Write / Construct

Allowed values: >= 0

Default value: 300

### The `“end-of-message-timeout”` property

      “end-of-message-timeout”   double

The timeout seconds between sending end-of-message to a filter and waiting for its reply.

Owner: MilterServerContext

Flags: Read / Write / Construct

Allowed values: >= 0

Default value: 300

### The `“message-result”` property

      “message-result”           MilterMessageResult *

Result of the current processing message.

Owner: MilterServerContext

Flags: Read / Write

### The `“name”` property

      “name”                     char *

The name of the MilterServerContext.

Owner: MilterServerContext

Flags: Read / Write

Default value: NULL

### The `“reading-timeout”` property

      “reading-timeout”          double

The timeout seconds for reading reply from a filter.

Owner: MilterServerContext

Flags: Read / Write / Construct

Allowed values: >= 0

Default value: 10

### The `“state”` property

      “state”                    MilterServerContextState

The state of the MilterServerContext.

Owner: MilterServerContext

Flags: Read / Write

Default value: MILTER_SERVER_CONTEXT_STATE_START

### The `“status”` property

      “status”                   MilterStatus

The status of the MilterServerContext.

Owner: MilterServerContext

Flags: Read / Write

Default value: MILTER_STATUS_NOT_CHANGE

### The `“writing-timeout”` property

      “writing-timeout”          double

The timeout seconds for writing information from MTA to a filter.

Owner: MilterServerContext

Flags: Read / Write / Construct

Allowed values: >= 0

Default value: 10

## Signal Details

### The `“connection-timeout”` signal

    void
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last

### The `“end-of-message-timeout”` signal

    void
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last

### The `“message-processed”` signal

    void
    user_function (MilterServerContext *milterservercontext,
                   MilterMessageResult *arg1,
                   gpointer             user_data)

Flags: Run Last

### The `“reading-timeout”` signal

    void
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last

### The `“ready”` signal

    void
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last

### The `“state-transited”` signal

    void
    user_function (MilterServerContext     *milterservercontext,
                   MilterServerContextState arg1,
                   gpointer                 user_data)

Flags: Run Last

### The `“stop-on-body”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   char                *arg1,
                   guint64              arg2,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-connect”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   char                *arg1,
                   gpointer             arg2,
                   guint                arg3,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-data”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-end-of-header”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-end-of-message”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   char                *arg1,
                   guint64              arg2,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-envelope-from”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   char                *arg1,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-envelope-recipient”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   char                *arg1,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-header”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   char                *arg1,
                   char                *arg2,
                   gpointer             user_data)

Flags: Run Last

### The `“stop-on-helo”` signal

    gboolean
    user_function (MilterServerContext *milterservercontext,
                   char                *arg1,
                   gpointer             user_data)

Flags: Run Last

### The `“stopped”` signal

    void
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last

### The `“writing-timeout”` signal

    void
    user_function (MilterServerContext *milterservercontext,
                   gpointer             user_data)

Flags: Run Last