diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-12-07 19:06:41 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-12-07 19:06:41 +0300 |
commit | 46ceb4ad592937ac210d1fcdfe5ee0f53d317b39 (patch) | |
tree | 229575849706886df9da026885bee94c9392c8eb /lib/kvstorage | |
parent | 8f1675ae06e1aa919d92fdabdc4e0d4e19c24d50 (diff) | |
download | rspamd-46ceb4ad592937ac210d1fcdfe5ee0f53d317b39.tar.gz rspamd-46ceb4ad592937ac210d1fcdfe5ee0f53d317b39.zip |
Reorganize util.c as it should contain only common utilities.
Libkvstorage client is now deprecated as I plan to replace it with hiredis library.
Diffstat (limited to 'lib/kvstorage')
-rw-r--r-- | lib/kvstorage/libkvstorageclient.c | 142 | ||||
-rw-r--r-- | lib/kvstorage/libkvstorageclient.h | 24 |
2 files changed, 107 insertions, 59 deletions
diff --git a/lib/kvstorage/libkvstorageclient.c b/lib/kvstorage/libkvstorageclient.c index 4d3b17dd3..d05e8b5e0 100644 --- a/lib/kvstorage/libkvstorageclient.c +++ b/lib/kvstorage/libkvstorageclient.c @@ -23,11 +23,22 @@ #include "config.h" -#include "main.h" +#include "mem_pool.h" +#include "util.h" #include "libkvstorageclient.h" #define MAX_KV_LINE 1024 +#ifdef CRLF +#undef CRLF +#undef CR +#undef LF +#endif + +#define CRLF "\r\n" +#define CR '\r' +#define LF '\n' + struct kvstorage_buf { guint pos; guint len; @@ -242,12 +253,13 @@ rspamd_kvstorage_parse_reply_error (struct kvstorage_buf *buf) static enum rspamd_kvstorage_error rspamd_kvstorage_parse_get_line (struct kvstorage_buf *buf, guint *len, guint *flags) { - guint8 *p, *c; + guint8 *p, *c, *end; gboolean error = TRUE; gchar *err_str; p = buf->data; - while (p - buf->data < buf->pos) { + end = buf->data + buf->pos; + while (p < end) { if (g_ascii_isspace (*p)) { error = FALSE; while (p - buf->data < buf->pos && g_ascii_isspace (*p)) { @@ -268,10 +280,11 @@ rspamd_kvstorage_parse_get_line (struct kvstorage_buf *buf, guint *len, guint *f /* Here we got key, flags and size items */ /* Skip key */ error = TRUE; - while (p - buf->data < buf->pos) { + while (p < end) { if (g_ascii_isspace (*p)) { error = FALSE; - while (p - buf->data < buf->pos && g_ascii_isspace (*p)) { + /* Skip spaces after key */ + while (p < end && g_ascii_isspace (*p)) { p ++; } break; @@ -285,9 +298,10 @@ rspamd_kvstorage_parse_get_line (struct kvstorage_buf *buf, guint *len, guint *f /* Read flags */ c = p; error = TRUE; - while (p - buf->data < buf->pos) { + while (p < end) { if (g_ascii_isspace (*p)) { error = FALSE; + /* Skip spaces after flags */ while (p - buf->data < buf->pos && g_ascii_isspace (*p)) { p ++; } @@ -308,16 +322,8 @@ rspamd_kvstorage_parse_get_line (struct kvstorage_buf *buf, guint *len, guint *f } /* Read len */ c = p; - error = TRUE; - while (p - buf->data < buf->pos) { - if (g_ascii_isspace (*p)) { - error = FALSE; - while (p - buf->data < buf->pos && g_ascii_isspace (*p)) { - p ++; - } - break; - } - else if (!g_ascii_isdigit (*p)) { + while (p < end) { + if (!g_ascii_isdigit (*p)) { break; } p ++; @@ -347,9 +353,9 @@ rspamd_kvstorage_connect_cb (int fd, short what, gpointer ud) cb (KVSTORAGE_ERROR_TIMEOUT, d->c, d->ud); } else { + d->c->state = KV_STATE_CONNECTED; cb (KVSTORAGE_ERROR_OK, d->c, d->ud); } - d->c->state = KV_STATE_CONNECTED; } static void @@ -364,7 +370,7 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) cb = (kvstorage_read_cb)d->c->read_cb; if (what == EV_TIMEOUT) { - cb (KVSTORAGE_ERROR_TIMEOUT, d->key, NULL, 0, d->c, d->ud); + cb (KVSTORAGE_ERROR_TIMEOUT, d->key, d->keylen, NULL, 0, d->c, d->ud); return; } if (d->c->state == KV_STATE_GET) { @@ -391,6 +397,7 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) } else if (r == 0) { /* We have written everything */ + d->buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, d->c->pool); d->c->state = KV_STATE_READ_ELT; event_del (&d->c->ev); event_set (&d->c->ev, d->c->sock, EV_READ, rspamd_kvstorage_read_cb, d); @@ -403,7 +410,7 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) } else { /* Error occured during writing */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, NULL, 0, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, NULL, 0, d->c, d->ud); } } else if (d->c->state == KV_STATE_WRITE_DATA) { @@ -424,6 +431,7 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) else if (r == 0) { /* We have written everything */ d->c->state = KV_STATE_READ_ELT; + d->buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, d->c->pool); event_del (&d->c->ev); event_set (&d->c->ev, d->c->sock, EV_READ, rspamd_kvstorage_read_cb, d); if (d->c->tv.tv_sec != 0 || d->c->tv.tv_usec != 0) { @@ -435,7 +443,7 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) } else { /* Error occured during writing */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, NULL, 0, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, NULL, 0, d->c, d->ud); } } else if (d->c->state == KV_STATE_READ_ELT) { @@ -455,10 +463,11 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) else if (r == 0) { /* Got all data about elt */ if ((r = rspamd_kvstorage_parse_get_line (d->buf, &d->datalen, &flags)) != KVSTORAGE_ERROR_OK) { - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, NULL, 0, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, NULL, 0, d->c, d->ud); return; } rspamd_kvstorage_buf_drainline (d->buf); + /* Now allocate and read the data */ databuf = rspamd_kvstorage_buf_create (d->datalen, d->c->pool); memcpy (databuf->data, d->buf->data, d->buf->pos); @@ -475,7 +484,7 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) } else { /* Error occured during reading reply line */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, NULL, 0, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, NULL, 0, d->c, d->ud); } } else if (d->c->state == KV_STATE_READ_DATA) { @@ -486,7 +495,6 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) d->c->state = KV_STATE_READ_REPLY; /* Save databuf */ d->data = d->buf->data; - d->buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, d->c->pool); event_del (&d->c->ev); event_set (&d->c->ev, d->c->sock, EV_READ, rspamd_kvstorage_read_cb, d); if (d->c->tv.tv_sec != 0 || d->c->tv.tv_usec != 0) { @@ -509,7 +517,7 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) } else { /* Error occured */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, NULL, 0, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, NULL, 0, d->c, d->ud); } } else if (d->c->state == KV_STATE_READ_REPLY) { @@ -527,11 +535,12 @@ rspamd_kvstorage_read_cb (int fd, short what, gpointer ud) } } else if (r == 0) { - cb (rspamd_kvstorage_parse_reply_error (d->buf), d->key, d->data, d->datalen, d->c, d->ud); + d->c->state = KV_STATE_CONNECTED; + cb (rspamd_kvstorage_parse_reply_error (d->buf), d->key, d->keylen, d->data, d->datalen, d->c, d->ud); } else { /* Error occured during reading reply line */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, NULL, 0, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, NULL, 0, d->c, d->ud); } } } @@ -547,7 +556,7 @@ rspamd_kvstorage_write_cb (int fd, short what, gpointer ud) cb = (kvstorage_write_cb)d->c->write_cb; if (what == EV_TIMEOUT) { - cb (KVSTORAGE_ERROR_TIMEOUT, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_TIMEOUT, d->key, d->keylen, d->c, d->ud); return; } if (d->c->state == KV_STATE_SET) { @@ -574,6 +583,7 @@ rspamd_kvstorage_write_cb (int fd, short what, gpointer ud) } else if (r == 0) { /* We have written everything */ + d->buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, d->c->pool); d->c->state = KV_STATE_READ_REPLY; event_del (&d->c->ev); event_set (&d->c->ev, d->c->sock, EV_READ, rspamd_kvstorage_write_cb, d); @@ -586,7 +596,7 @@ rspamd_kvstorage_write_cb (int fd, short what, gpointer ud) } else { /* Error occured during writing */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, d->c, d->ud); } } else if (d->c->state == KV_STATE_WRITE_DATA) { @@ -607,6 +617,7 @@ rspamd_kvstorage_write_cb (int fd, short what, gpointer ud) else if (r == 0) { /* We have written everything */ d->c->state = KV_STATE_READ_REPLY; + d->buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, d->c->pool); event_del (&d->c->ev); event_set (&d->c->ev, d->c->sock, EV_READ, rspamd_kvstorage_write_cb, d); if (d->c->tv.tv_sec != 0 || d->c->tv.tv_usec != 0) { @@ -618,7 +629,7 @@ rspamd_kvstorage_write_cb (int fd, short what, gpointer ud) } else { /* Error occured during writing */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, d->c, d->ud); } } else if (d->c->state == KV_STATE_READ_REPLY) { @@ -636,11 +647,12 @@ rspamd_kvstorage_write_cb (int fd, short what, gpointer ud) } } else if (r == 0) { - cb (rspamd_kvstorage_parse_reply_error (d->buf), d->key, d->c, d->ud); + d->c->state = KV_STATE_CONNECTED; + cb (rspamd_kvstorage_parse_reply_error (d->buf), d->key, d->keylen, d->c, d->ud); } else { /* Error occured during reading reply line */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, d->c, d->ud); } } } @@ -656,7 +668,7 @@ rspamd_kvstorage_delete_cb (int fd, short what, gpointer ud) cb = (kvstorage_write_cb)d->c->write_cb; if (what == EV_TIMEOUT) { - cb (KVSTORAGE_ERROR_TIMEOUT, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_TIMEOUT, d->key, d->keylen, d->c, d->ud); return; } if (d->c->state == KV_STATE_SET) { @@ -683,6 +695,7 @@ rspamd_kvstorage_delete_cb (int fd, short what, gpointer ud) } else if (r == 0) { /* We have written everything */ + d->buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, d->c->pool); d->c->state = KV_STATE_READ_REPLY; event_del (&d->c->ev); event_set (&d->c->ev, d->c->sock, EV_READ, rspamd_kvstorage_delete_cb, d); @@ -695,7 +708,7 @@ rspamd_kvstorage_delete_cb (int fd, short what, gpointer ud) } else { /* Error occured during writing */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, d->c, d->ud); } } else if (d->c->state == KV_STATE_WRITE_DATA) { @@ -716,6 +729,7 @@ rspamd_kvstorage_delete_cb (int fd, short what, gpointer ud) else if (r == 0) { /* We have written everything */ d->c->state = KV_STATE_READ_REPLY; + d->buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, d->c->pool); event_del (&d->c->ev); event_set (&d->c->ev, d->c->sock, EV_READ, rspamd_kvstorage_delete_cb, d); if (d->c->tv.tv_sec != 0 || d->c->tv.tv_usec != 0) { @@ -727,7 +741,7 @@ rspamd_kvstorage_delete_cb (int fd, short what, gpointer ud) } else { /* Error occured during writing */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, d->c, d->ud); } } else if (d->c->state == KV_STATE_READ_REPLY) { @@ -745,11 +759,12 @@ rspamd_kvstorage_delete_cb (int fd, short what, gpointer ud) } } else if (r == 0) { - cb (rspamd_kvstorage_parse_reply_error (d->buf), d->key, d->c, d->ud); + d->c->state = KV_STATE_CONNECTED; + cb (rspamd_kvstorage_parse_reply_error (d->buf), d->key, d->keylen, d->c, d->ud); } else { /* Error occured during reading reply line */ - cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->c, d->ud); + cb (KVSTORAGE_ERROR_INTERNAL_ERROR, d->key, d->keylen, d->c, d->ud); } } } @@ -773,7 +788,7 @@ rspamd_kvstorage_connect_async (const gchar *host, gint sock; /* Here we do NOT try to resolve hostname */ - if ((sock = make_universal_stream_socket (host, port, TRUE, FALSE, FALSE)) == -1) { + if ((sock = make_universal_stream_socket (host, port, TRUE, FALSE, TRUE)) == -1) { return KVSTORAGE_ERROR_SERVER_ERROR; } @@ -819,7 +834,7 @@ rspamd_kvstorage_connect_async (const gchar *host, */ enum rspamd_kvstorage_error rspamd_kvstorage_get_async (struct rspamd_kvstorage_connection *conn, - const gpointer key, kvstorage_read_cb cb, gpointer ud) + const gpointer key, guint keylen, kvstorage_read_cb cb, gpointer ud) { struct rspamd_kvstorage_async_data *d; @@ -833,7 +848,7 @@ rspamd_kvstorage_get_async (struct rspamd_kvstorage_connection *conn, d->c = conn; d->ud = ud; d->key = memory_pool_strdup (conn->pool, key); - d->keylen = strlen (d->key); + d->keylen = keylen; conn->state = KV_STATE_GET; /* Set event */ @@ -858,7 +873,8 @@ rspamd_kvstorage_get_async (struct rspamd_kvstorage_connection *conn, */ enum rspamd_kvstorage_error rspamd_kvstorage_set_async (struct rspamd_kvstorage_connection *conn, - const gpointer key, const gpointer value, gsize len, guint expire, kvstorage_write_cb cb, gpointer ud) + const gpointer key, guint keylen, const gpointer value, gsize len, guint expire, kvstorage_write_cb cb, + gpointer ud) { struct rspamd_kvstorage_async_data *d; @@ -872,7 +888,7 @@ rspamd_kvstorage_set_async (struct rspamd_kvstorage_connection *conn, d->c = conn; d->ud = ud; d->key = memory_pool_strdup (conn->pool, key); - d->keylen = strlen (d->key); + d->keylen = keylen; d->data = value; d->datalen = len; conn->state = KV_STATE_SET; @@ -898,7 +914,7 @@ rspamd_kvstorage_set_async (struct rspamd_kvstorage_connection *conn, */ enum rspamd_kvstorage_error rspamd_kvstorage_delete_async (struct rspamd_kvstorage_connection *conn, - const gpointer key, kvstorage_write_cb cb, gpointer ud) + const gpointer key, guint keylen, kvstorage_write_cb cb, gpointer ud) { struct rspamd_kvstorage_async_data *d; @@ -912,7 +928,7 @@ rspamd_kvstorage_delete_async (struct rspamd_kvstorage_connection *conn, d->c = conn; d->ud = ud; d->key = memory_pool_strdup (conn->pool, key); - d->keylen = strlen (d->key); + d->keylen = keylen; conn->state = KV_STATE_SET; /* Set event */ @@ -989,7 +1005,7 @@ rspamd_kvstorage_connect_sync (const gchar *host, */ enum rspamd_kvstorage_error rspamd_kvstorage_get_sync (struct rspamd_kvstorage_connection *conn, - const gpointer key, gpointer **value, guint *len) + const gpointer key, guint keylen, gpointer **value, guint *len) { struct kvstorage_buf *buf, *databuf; gint r; @@ -1001,7 +1017,7 @@ rspamd_kvstorage_get_sync (struct rspamd_kvstorage_connection *conn, buf = rspamd_kvstorage_buf_create (MAX_KV_LINE, conn->pool); - r = rspamd_snprintf (buf->data, buf->len, "get %s" CRLF, key); + r = rspamd_snprintf (buf->data, buf->len, "get %*s" CRLF, keylen, key); buf->len = r; while ((r = rspamd_kvstorage_buf_writeall (buf, conn)) > 0) { poll_sync_socket (conn->sock, tv_to_msec (&conn->tv), POLL_OUT); @@ -1051,17 +1067,16 @@ rspamd_kvstorage_get_sync (struct rspamd_kvstorage_connection *conn, */ enum rspamd_kvstorage_error rspamd_kvstorage_set_sync (struct rspamd_kvstorage_connection *conn, - const gpointer key, const gpointer value, gsize len, guint expire) + const gpointer key, guint keylen, const gpointer value, gsize len, guint expire) { struct kvstorage_buf *buf; - gint r, keylen, buflen; + gint r, buflen; if (conn == NULL || conn->state != KV_STATE_CONNECTED) { return KVSTORAGE_ERROR_INTERNAL_ERROR; } /* Create buf */ - keylen = strlen (key); buflen = len + keylen + sizeof ("set 4294967296 4294967296 4294967296" CRLF); buf = rspamd_kvstorage_buf_create (buflen, conn->pool); @@ -1091,17 +1106,16 @@ rspamd_kvstorage_set_sync (struct rspamd_kvstorage_connection *conn, */ enum rspamd_kvstorage_error rspamd_kvstorage_delete_sync (struct rspamd_kvstorage_connection *conn, - const gpointer key) + const gpointer key, guint keylen) { struct kvstorage_buf *buf; - gint r, keylen, buflen; + gint r, buflen; if (conn == NULL || conn->state != KV_STATE_CONNECTED) { return KVSTORAGE_ERROR_INTERNAL_ERROR; } /* Create buf */ - keylen = strlen (key); buflen = MAX (keylen + sizeof ("delete " CRLF), MAX_KV_LINE); buf = rspamd_kvstorage_buf_create (buflen, conn->pool); @@ -1137,3 +1151,29 @@ rspamd_kvstorage_close_sync (struct rspamd_kvstorage_connection *conn) return KVSTORAGE_ERROR_OK; } + +const gchar* +rspamd_kvstorage_strerror (enum rspamd_kvstorage_error err) +{ + switch (err) { + case KVSTORAGE_ERROR_OK: + return "operation completed"; + case KVSTORAGE_ERROR_TIMEOUT: + return "operation timeout"; + case KVSTORAGE_ERROR_NOT_FOUND: + return "key not found"; + case KVSTORAGE_ERROR_NOT_STORED: + return "key not stored"; + case KVSTORAGE_ERROR_EXISTS: + return "key exists"; + case KVSTORAGE_ERROR_SERVER_ERROR: + return "server error"; + case KVSTORAGE_ERROR_CLIENT_ERROR: + return "client error"; + case KVSTORAGE_ERROR_INTERNAL_ERROR: + return "library error"; + } + + /* Not reached */ + return "unknown error"; +} diff --git a/lib/kvstorage/libkvstorageclient.h b/lib/kvstorage/libkvstorageclient.h index 262c5e89e..11145fd49 100644 --- a/lib/kvstorage/libkvstorageclient.h +++ b/lib/kvstorage/libkvstorageclient.h @@ -26,6 +26,7 @@ #define LIBKVSTORAGECLIENT_H_ #include <glib.h> +#include <sys/time.h> /* Errors */ enum rspamd_kvstorage_error { @@ -45,10 +46,11 @@ struct rspamd_kvstorage_connection; /* Callbacks for async API */ typedef void (*kvstorage_connect_cb) (enum rspamd_kvstorage_error code, struct rspamd_kvstorage_connection *conn, gpointer user_data); -typedef void (*kvstorage_read_cb) (enum rspamd_kvstorage_error code, const gpointer key, +typedef void (*kvstorage_read_cb) (enum rspamd_kvstorage_error code, const gpointer key, guint keylen, const gpointer value, gsize datalen, struct rspamd_kvstorage_connection *conn, gpointer user_data); -typedef void (*kvstorage_write_cb) (enum rspamd_kvstorage_error code, const gpointer key, struct rspamd_kvstorage_connection *conn, +typedef void (*kvstorage_write_cb) (enum rspamd_kvstorage_error code, const gpointer key, guint keylen, + struct rspamd_kvstorage_connection *conn, gpointer user_data); /* Asynced API */ @@ -74,7 +76,7 @@ enum rspamd_kvstorage_error rspamd_kvstorage_connect_async (const gchar *host, * @param ud user data for callback */ enum rspamd_kvstorage_error rspamd_kvstorage_get_async (struct rspamd_kvstorage_connection *conn, - const gpointer key, kvstorage_read_cb cb, gpointer ud); + const gpointer key, guint keylen, kvstorage_read_cb cb, gpointer ud); /** * Write key asynced @@ -85,7 +87,7 @@ enum rspamd_kvstorage_error rspamd_kvstorage_get_async (struct rspamd_kvstorage_ * @param ud user data for callback */ enum rspamd_kvstorage_error rspamd_kvstorage_set_async (struct rspamd_kvstorage_connection *conn, - const gpointer key, const gpointer value, gsize len, guint expire, kvstorage_write_cb cb, gpointer ud); + const gpointer key, guint keylen, const gpointer value, gsize len, guint expire, kvstorage_write_cb cb, gpointer ud); /** * Delete key asynced @@ -95,7 +97,7 @@ enum rspamd_kvstorage_error rspamd_kvstorage_set_async (struct rspamd_kvstorage_ * @param ud user data for callback */ enum rspamd_kvstorage_error rspamd_kvstorage_delete_async (struct rspamd_kvstorage_connection *conn, - const gpointer key, kvstorage_write_cb cb, gpointer ud); + const gpointer key, guint keylen, kvstorage_write_cb cb, gpointer ud); /** * Close connection @@ -122,7 +124,7 @@ enum rspamd_kvstorage_error rspamd_kvstorage_connect_sync (const gchar *host, * @param value value readed */ enum rspamd_kvstorage_error rspamd_kvstorage_get_sync (struct rspamd_kvstorage_connection *conn, - const gpointer key, gpointer **value, guint *len); + const gpointer key, guint keylen, gpointer **value, guint *len); /** * Write key synced @@ -131,7 +133,7 @@ enum rspamd_kvstorage_error rspamd_kvstorage_get_sync (struct rspamd_kvstorage_c * @param value data to write */ enum rspamd_kvstorage_error rspamd_kvstorage_set_sync (struct rspamd_kvstorage_connection *conn, - const gpointer key, const gpointer value, gsize len, guint expire); + const gpointer key, guint keylen, const gpointer value, gsize len, guint expire); /** * Delete key synced @@ -139,7 +141,7 @@ enum rspamd_kvstorage_error rspamd_kvstorage_set_sync (struct rspamd_kvstorage_c * @param key key to delete */ enum rspamd_kvstorage_error rspamd_kvstorage_delete_sync (struct rspamd_kvstorage_connection *conn, - const gpointer key); + const gpointer key, guint keylen); /** * Close connection @@ -147,4 +149,10 @@ enum rspamd_kvstorage_error rspamd_kvstorage_delete_sync (struct rspamd_kvstorag */ enum rspamd_kvstorage_error rspamd_kvstorage_close_sync (struct rspamd_kvstorage_connection *conn); +/** + * Convert error code to string + * @param err error code to be converted + */ +const gchar* rspamd_kvstorage_strerror (enum rspamd_kvstorage_error err); + #endif /* LIBKVSTORAGECLIENT_H_ */ |