diff options
author | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2006-02-20 21:55:55 +0000 |
---|---|---|
committer | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2006-02-20 21:55:55 +0000 |
commit | 1026ce61fc4cdc0610a5f80e39591ad7ea6911a8 (patch) | |
tree | ba4a8296a63fe161b3a17ec02d6db7b1db99d939 /src/ne_session.c | |
parent | 9f38fbd4af19d5f80ad37494d4f95fd5b008a17b (diff) | |
download | neon-1026ce61fc4cdc0610a5f80e39591ad7ea6911a8.tar.gz |
* src/ne_session.c (add_hook, ne_hook_create_request,
ne_hook_pre_send, ne_hook_post_send, ne_hook_destroy_request,
ne_hook_destroy_session, ne_set_session_private): Moved here...
* src/ne_request.c: ...from here.
(ne_set_request_private): Inline add_hook.
git-svn-id: http://svn.webdav.org/repos/projects/neon/trunk@926 61a7d7f5-40b7-0310-9c16-bb0ea8cb1845
Diffstat (limited to 'src/ne_session.c')
-rw-r--r-- | src/ne_session.c | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/src/ne_session.c b/src/ne_session.c index 707be3d..202fc86 100644 --- a/src/ne_session.c +++ b/src/ne_session.c @@ -1,6 +1,6 @@ /* HTTP session handling - Copyright (C) 1999-2005, Joe Orton <joe@manyfish.co.uk> + Copyright (C) 1999-2006, Joe Orton <joe@manyfish.co.uk> Portions are: Copyright (C) 1999-2000 Tommi Komulainen <Tommi.Komulainen@iki.fi> @@ -267,3 +267,58 @@ void ne_ssl_trust_cert(ne_session *sess, const ne_ssl_certificate *cert) ne_ssl_context_trustcert(sess->ssl_context, cert); #endif } + +typedef void (*void_fn)(void); + +#define ADD_HOOK(hooks, fn, ud) add_hook(&(hooks), NULL, (void_fn)(fn), (ud)) + +static void add_hook(struct hook **hooks, const char *id, void_fn fn, void *ud) +{ + struct hook *hk = ne_malloc(sizeof (struct hook)), *pos; + + if (*hooks != NULL) { + for (pos = *hooks; pos->next != NULL; pos = pos->next) + /* nullop */; + pos->next = hk; + } else { + *hooks = hk; + } + + hk->id = id; + hk->fn = fn; + hk->userdata = ud; + hk->next = NULL; +} + +void ne_hook_create_request(ne_session *sess, + ne_create_request_fn fn, void *userdata) +{ + ADD_HOOK(sess->create_req_hooks, fn, userdata); +} + +void ne_hook_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata) +{ + ADD_HOOK(sess->pre_send_hooks, fn, userdata); +} + +void ne_hook_post_send(ne_session *sess, ne_post_send_fn fn, void *userdata) +{ + ADD_HOOK(sess->post_send_hooks, fn, userdata); +} + +void ne_hook_destroy_request(ne_session *sess, + ne_destroy_req_fn fn, void *userdata) +{ + ADD_HOOK(sess->destroy_req_hooks, fn, userdata); +} + +void ne_hook_destroy_session(ne_session *sess, + ne_destroy_sess_fn fn, void *userdata) +{ + ADD_HOOK(sess->destroy_sess_hooks, fn, userdata); +} + +void ne_set_session_private(ne_session *sess, const char *id, void *userdata) +{ + add_hook(&sess->private, id, NULL, userdata); +} |