diff options
author | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2006-02-20 22:26:47 +0000 |
---|---|---|
committer | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2006-02-20 22:26:47 +0000 |
commit | cb2e5c896ea81ad14c59ec31631c4936b8e50cf4 (patch) | |
tree | 37116d64ac527942ec24c83220881408de4f9b00 /src/ne_session.c | |
parent | 1026ce61fc4cdc0610a5f80e39591ad7ea6911a8 (diff) | |
download | neon-cb2e5c896ea81ad14c59ec31631c4936b8e50cf4.tar.gz |
* src/ne_request.h (ne_unhook_pre_send, ne_unhook_post_send,
ne_unhook_destroy_request, ne_unhook_destroy_session): Add prototypes.
* src/ne_session.c (remove_hook, ne_unhook_pre_send,
ne_unhook_post_send, ne_unhook_destroy_request,
ne_unhook_destroy_session): New functions.
* test/request.c (hooks): New test case.
git-svn-id: http://svn.webdav.org/repos/projects/neon/trunk@927 61a7d7f5-40b7-0310-9c16-bb0ea8cb1845
Diffstat (limited to 'src/ne_session.c')
-rw-r--r-- | src/ne_session.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/ne_session.c b/src/ne_session.c index 202fc86..fda7eab 100644 --- a/src/ne_session.c +++ b/src/ne_session.c @@ -322,3 +322,46 @@ void ne_set_session_private(ne_session *sess, const char *id, void *userdata) { add_hook(&sess->private, id, NULL, userdata); } + +static void remove_hook(struct hook **hooks, void_fn fn, void *ud) +{ + struct hook **p = hooks; + + while (*p) { + if ((*p)->fn == fn && (*p)->userdata == ud) { + (*p) = (*p)->next; + break; + } + p = &(*p)->next; + } +} + +#define REMOVE_HOOK(hooks, fn, ud) remove_hook(&hooks, (void_fn)fn, ud) + +void ne_unhook_create_request(ne_session *sess, + ne_create_request_fn fn, void *userdata) +{ + REMOVE_HOOK(sess->create_req_hooks, fn, userdata); +} + +void ne_unhook_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata) +{ + REMOVE_HOOK(sess->pre_send_hooks, fn, userdata); +} + +void ne_unhook_post_send(ne_session *sess, ne_post_send_fn fn, void *userdata) +{ + REMOVE_HOOK(sess->post_send_hooks, fn, userdata); +} + +void ne_unhook_destroy_request(ne_session *sess, + ne_destroy_req_fn fn, void *userdata) +{ + REMOVE_HOOK(sess->destroy_req_hooks, fn, userdata); +} + +void ne_unhook_destroy_session(ne_session *sess, + ne_destroy_sess_fn fn, void *userdata) +{ + REMOVE_HOOK(sess->destroy_sess_hooks, fn, userdata); +} |