diff options
author | gilles <gilles@poolp.org> | 2016-07-06 09:55:22 +0200 |
---|---|---|
committer | gilles <gilles@poolp.org> | 2016-07-06 09:55:22 +0200 |
commit | 34700e01174a50cb99a6ba2c44be60a6af2436df (patch) | |
tree | 8b1b6ca3fddc9d8c38a10f04c663480ba3e5ffd4 | |
parent | set_udata / get_udata are deprecated now that we have session/transaction allocators (diff) | |
parent | remove filter_api_{g,s}et_udata functions (diff) | |
download | OpenSMTPD-extras-34700e01174a50cb99a6ba2c44be60a6af2436df.tar.xz OpenSMTPD-extras-34700e01174a50cb99a6ba2c44be60a6af2436df.zip |
Merge branch 'master' of ssh://ssh.github.com/OpenSMTPD/OpenSMTPD-extras
-rw-r--r-- | api/filter_api.c | 73 | ||||
-rw-r--r-- | api/smtpd-api.h | 10 | ||||
-rw-r--r-- | extras/filters/filter-stub/filter_stub.c | 27 |
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); |