summaryrefslogtreecommitdiff
path: root/src/ne_session.c
diff options
context:
space:
mode:
authorjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2006-02-20 22:26:47 +0000
committerjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2006-02-20 22:26:47 +0000
commitcb2e5c896ea81ad14c59ec31631c4936b8e50cf4 (patch)
tree37116d64ac527942ec24c83220881408de4f9b00 /src/ne_session.c
parent1026ce61fc4cdc0610a5f80e39591ad7ea6911a8 (diff)
downloadneon-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.c43
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);
+}