Pārlūkot izejas kodu

[Minor] Start command parsing implementation (OPTNEG)

tags/1.6.0
Vsevolod Stakhov pirms 7 gadiem
vecāks
revīzija
289af2ae8c
1 mainītis faili ar 25 papildinājumiem un 0 dzēšanām
  1. 25
    0
      src/libserver/milter.c

+ 25
- 0
src/libserver/milter.c Parādīt failu

@@ -121,11 +121,25 @@ rspamd_milter_on_protocol_error (struct rspamd_milter_session *session,
g_error_free (err);
}

#define READ_INT_32(pos, var) do { \
memcpy (&(var), (pos), sizeof (var)); \
(pos) += sizeof (var); \
(var) = ntohl (var); \
} while (0)

static gboolean
rspamd_milter_process_command (struct rspamd_milter_session *session,
struct rspamd_milter_private *priv)
{
GError *err;
rspamd_fstring_t *buf;
const guchar *pos;
guint cmdlen;
guint32 version, actions, protocol;

buf = priv->parser.buf;
pos = buf->str + priv->parser.pos;
cmdlen = priv->parser.datalen;

switch (priv->parser.cur_cmd) {
case RSPAMD_MILTER_CMD_ABORT:
@@ -152,6 +166,17 @@ rspamd_milter_process_command (struct rspamd_milter_session *session,
case RSPAMD_MILTER_CMD_EOH:
break;
case RSPAMD_MILTER_CMD_OPTNEG:
if (cmdlen != sizeof (guint32) * 3) {
err = g_error_new (rspamd_milter_quark (), EINVAL, "invalid "
"optneg command");
rspamd_milter_on_protocol_error (session, priv, err);

return FALSE;
}

READ_INT_32 (pos, version);
READ_INT_32 (pos, actions);
READ_INT_32 (pos, protocol);
break;
case RSPAMD_MILTER_CMD_QUIT:
break;

Notiek ielāde…
Atcelt
Saglabāt