Browse Source

[Minor] Add some more states for milter protocol

tags/1.6.0
Vsevolod Stakhov 7 years ago
parent
commit
d71409c68e
1 changed files with 34 additions and 9 deletions
  1. 34
    9
      src/libserver/milter.c

+ 34
- 9
src/libserver/milter.c View File

@@ -145,17 +145,43 @@ rspamd_milter_session_dtor (struct rspamd_milter_session *session)
rspamd_fstring_free (session->hostname);
}

if (priv->fd) {
close (priv->fd);
}

g_free (session);
}
}

static void
rspamd_milter_on_protocol_error (struct rspamd_milter_session *session,
struct rspamd_milter_private *priv, GError *err)
{
priv->state = RSPAMD_MILTER_WANNA_DIE;
REF_RETAIN (session);
priv->err_cb (priv->fd, session, priv->ud, err);
REF_RELEASE (session);
g_error_free (err);
}

static void
rspamd_milter_io_handler (gint fd, gshort what, void *ud)
{
struct rspamd_milter_session *session = ud;
struct rspamd_milter_private *priv;
GError *err;

priv = session->priv;

if (what == EV_TIMEOUT) {
msg_debug_milter ("connection timed out");
err = g_error_new (rspamd_milter_quark (), ETIMEDOUT, "connection "
"timed out");
rspamd_milter_on_protocol_error (session, priv, err);
}
else {
rspamd_milter_handle_session (session, priv);
}
}

static inline void
@@ -172,15 +198,6 @@ rspamd_milter_plan_io (struct rspamd_milter_session *session,
event_add (&priv->ev, priv->ptv);
}

static void
rspamd_milter_on_protocol_error (struct rspamd_milter_session *session,
struct rspamd_milter_private *priv, GError *err)
{
REF_RETAIN (session);
priv->err_cb (priv->fd, session, priv->ud, err);
REF_RELEASE (session);
g_error_free (err);
}

#define READ_INT_32(pos, var) do { \
memcpy (&(var), (pos), sizeof (var)); \
@@ -381,6 +398,9 @@ rspamd_milter_process_command (struct rspamd_milter_session *session,
break;
case RSPAMD_MILTER_CMD_BODYEOB:
msg_debug_milter ("got eob command");
REF_RETAIN (session);
priv->fin_cb (priv->fd, session, priv->ud);
REF_RELEASE (session);
break;
case RSPAMD_MILTER_CMD_HELO:
msg_debug_milter ("got helo command");
@@ -406,6 +426,9 @@ rspamd_milter_process_command (struct rspamd_milter_session *session,
}
break;
case RSPAMD_MILTER_CMD_QUIT_NC:
/* We need to reset session and start over */
msg_debug_milter ("got quit_nc command");
rspamd_milter_session_reset (session);
break;
case RSPAMD_MILTER_CMD_HEADER:
msg_debug_milter ("got header command");
@@ -512,6 +535,8 @@ rspamd_milter_process_command (struct rspamd_milter_session *session,
break;
case RSPAMD_MILTER_CMD_QUIT:
msg_debug_milter ("quit command");
priv->state = RSPAMD_MILTER_WANNA_DIE;
REF_RELEASE (session);
break;
case RSPAMD_MILTER_CMD_RCPT:
msg_debug_milter ("rcpt command");

Loading…
Cancel
Save