aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Faurot <eric@openbsd.org>2016-07-06 09:52:02 +0200
committerEric Faurot <eric@openbsd.org>2016-07-06 09:52:02 +0200
commit75cf2077df40c0cecf17c2ed0765109e401a567b (patch)
treec31603021341870832cdcc324c79346bb106e9f5
parentmerge parse_response in proceed (diff)
downloadOpenSMTPD-extras-75cf2077df40c0cecf17c2ed0765109e401a567b.tar.xz
OpenSMTPD-extras-75cf2077df40c0cecf17c2ed0765109e401a567b.zip
remove filter_api_{g,s}et_udata functions
reorganize code a bit internally
-rw-r--r--api/filter_api.c73
-rw-r--r--api/smtpd-api.h10
-rw-r--r--extras/filters/filter-stub/filter_stub.c27
3 files changed, 57 insertions, 53 deletions
diff --git a/api/filter_api.c b/api/filter_api.c
index 13adaad..6ba4864 100644
--- a/api/filter_api.c
+++ b/api/filter_api.c
@@ -68,9 +68,8 @@ struct filter_session {
char *line;
} response;
- void *session;
- void *transaction;
- void *udata;
+ void *usession;
+ void *utx;
void *data_buffer;
void (*data_buffer_cb)(uint64_t, FILE *, void *);
@@ -112,17 +111,17 @@ static struct filter_internals {
void (*disconnect)(uint64_t);
void (*reset)(uint64_t);
+
+ void *(*session_alloc)(uint64_t);
+ void (*session_free)(void *);
+
+ void *(*tx_alloc)(uint64_t);
+ void (*tx_free)(void *);
void (*tx_begin)(uint64_t);
void (*tx_commit)(uint64_t);
void (*tx_rollback)(uint64_t);
} cb;
- void *(*session_allocator)(uint64_t);
- void (*session_destructor)(void *);
-
- void *(*transaction_allocator)(uint64_t);
- void (*transaction_destructor)(void *);
-
int data_buffered;
} fi;
@@ -272,16 +271,14 @@ filter_dispatch(struct mproc *p, struct imsg *imsg)
s->pipe.iev.sock = -1;
s->pipe.oev.sock = -1;
tree_xset(&sessions, id, s);
- if (fi.session_allocator)
- s->session = fi.session_allocator(id);
+ if (fi.cb.session_alloc)
+ s->usession = fi.cb.session_alloc(id);
break;
case EVENT_DISCONNECT:
filter_dispatch_disconnect(id);
s = tree_xget(&sessions, id);
- if (fi.session_destructor) {
- if (s->session)
- fi.session_destructor(s->session);
- }
+ if (fi.cb.session_free && s->usession)
+ fi.cb.session_free(s->usession);
if (s->data_buffer)
data_buffered_release(s);
s = tree_xpop(&sessions, id);
@@ -498,8 +495,8 @@ filter_dispatch_tx_begin(uint64_t id)
s->tx = 1;
- if (fi.transaction_allocator)
- s->transaction = fi.transaction_allocator(id);
+ if (fi.cb.tx_alloc)
+ s->utx = fi.cb.tx_alloc(id);
if (fi.cb.tx_begin)
fi.cb.tx_begin(id);
@@ -523,9 +520,9 @@ filter_dispatch_tx_commit(uint64_t id)
if (fi.cb.tx_commit)
fi.cb.tx_commit(id);
- if (fi.transaction_destructor && s->transaction) {
- fi.transaction_destructor(s->transaction);
- s->transaction = NULL;
+ if (fi.cb.tx_free && s->utx) {
+ fi.cb.tx_free(s->utx);
+ s->utx = NULL;
}
}
@@ -547,9 +544,9 @@ filter_dispatch_tx_rollback(uint64_t id)
if (fi.cb.tx_rollback)
fi.cb.tx_rollback(id);
- if (fi.transaction_destructor && s->transaction) {
- fi.transaction_destructor(s->transaction);
- s->transaction = NULL;
+ if (fi.cb.tx_free && s->utx) {
+ fi.cb.tx_free(s->utx);
+ s->utx = NULL;
}
}
@@ -840,13 +837,13 @@ imsg_to_str(int imsg)
void
filter_api_session_allocator(void *(*f)(uint64_t))
{
- fi.session_allocator = f;
+ fi.cb.session_alloc = f;
}
void
filter_api_session_destructor(void (*f)(void *))
{
- fi.session_destructor = f;
+ fi.cb.session_free = f;
}
void *
@@ -855,19 +852,19 @@ filter_api_session(uint64_t id)
struct filter_session *s;
s = tree_xget(&sessions, id);
- return s->session;
+ return s->usession;
}
void
filter_api_transaction_allocator(void *(*f)(uint64_t))
{
- fi.transaction_allocator = f;
+ fi.cb.tx_alloc = f;
}
void
filter_api_transaction_destructor(void (*f)(void *))
{
- fi.transaction_destructor = f;
+ fi.cb.tx_free = f;
}
void *
@@ -876,7 +873,7 @@ filter_api_transaction(uint64_t id)
struct filter_session *s;
s = tree_xget(&sessions, id);
- return s->transaction;
+ return s->utx;
}
void
@@ -1100,24 +1097,6 @@ filter_api_loop(void)
}
}
-void
-filter_api_set_udata(uint64_t id, void *data)
-{
- struct filter_session *s;
-
- s = tree_xget(&sessions, id);
- s->udata = data;
-}
-
-void *
-filter_api_get_udata(uint64_t id)
-{
- struct filter_session *s;
-
- s = tree_xget(&sessions, id);
- return s->udata;
-}
-
int
filter_api_accept(uint64_t id)
{
diff --git a/api/smtpd-api.h b/api/smtpd-api.h
index 103320e..8d5e02f 100644
--- a/api/smtpd-api.h
+++ b/api/smtpd-api.h
@@ -381,19 +381,17 @@ const char *esc_description(enum enhanced_status_code);
/* filter_api.c */
-void filter_api_session_allocator(void *(*)(uint64_t));
-void filter_api_session_destructor(void (*)(void *));
+void filter_api_session_allocator(void *(*)(uint64_t));
+void filter_api_session_destructor(void (*)(void *));
void *filter_api_session(uint64_t);
-void filter_api_transaction_allocator(void *(*)(uint64_t));
-void filter_api_transaction_destructor(void (*)(void *));
+void filter_api_transaction_allocator(void *(*)(uint64_t));
+void filter_api_transaction_destructor(void (*)(void *));
void *filter_api_transaction(uint64_t);
void filter_api_setugid(uid_t, gid_t);
void filter_api_set_chroot(const char *);
void filter_api_no_chroot(void);
-void filter_api_set_udata(uint64_t, void *);
-void *filter_api_get_udata(uint64_t);
void filter_api_data_buffered(void);
void filter_api_data_buffered_stream(uint64_t);
diff --git a/extras/filters/filter-stub/filter_stub.c b/extras/filters/filter-stub/filter_stub.c
index 5b6c240..d9a26a1 100644
--- a/extras/filters/filter-stub/filter_stub.c
+++ b/extras/filters/filter-stub/filter_stub.c
@@ -24,6 +24,28 @@
#include <smtpd-api.h>
+static void *
+session_alloc(uint64_t id)
+{
+ return (void *)-1;
+}
+
+static void
+session_free(void *session)
+{
+}
+
+static void *
+transaction_alloc(uint64_t id)
+{
+ return (void *)-1;
+}
+
+static void
+transaction_free(void *transaction)
+{
+}
+
static int
on_connect(uint64_t id, struct filter_connect *conn)
{
@@ -132,6 +154,11 @@ main(int argc, char **argv)
log_debug("debug: starting...");
+ filter_api_session_allocator(session_alloc);
+ filter_api_session_destructor(session_free);
+ filter_api_transaction_allocator(transaction_alloc);
+ filter_api_transaction_destructor(transaction_free);
+
filter_api_on_connect(on_connect);
filter_api_on_helo(on_helo);
filter_api_on_mail(on_mail);