mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
Today fire_watches() has the boolean "exact" parameter specifying how the matching of the modified node with registered watches is to be handled (only the exact node name is matching or all nodes being in the subtree beneath the watched node). For the handling of <special-watch>/<domid> watch events 2 additional matching possibility needs to be added, as those events should only be delivered to clients having requested such events, either by watching <special-watch> with the depth=1 parameter, or by directly watching for <special-watch>/<domid>, while the traditional special watch events should NOT delivered to those watchers. For this purpose rename the "exact" parameter to "match" and make it an enum with four possible values. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jason Andryuk <jason.andryuk@amd.com>
50 lines
1.7 KiB
C
50 lines
1.7 KiB
C
/*
|
|
Watch code for Xen Store Daemon.
|
|
Copyright (C) 2005 Rusty Russell IBM Corporation
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _XENSTORED_WATCH_H
|
|
#define _XENSTORED_WATCH_H
|
|
|
|
#include "core.h"
|
|
|
|
int do_watch(const void *ctx, struct connection *conn,
|
|
struct buffered_data *in);
|
|
int do_unwatch(const void *ctx, struct connection *conn,
|
|
struct buffered_data *in);
|
|
|
|
/* Fire all watches: !exact means all the children are affected (ie. rm). */
|
|
enum watch_match {
|
|
MATCH_EXACT,
|
|
MATCH_SUBTREE,
|
|
MATCH_DEPTH, /* watches with depth > 0, MATCH_SUBTREE semantics */
|
|
MATCH_NODEPTH /* watches with no depth, MATCH_EXACT semantics */
|
|
};
|
|
|
|
void fire_watches(struct connection *conn, const void *tmp, const char *name,
|
|
const struct node *node, enum watch_match match,
|
|
struct node_perms *perms);
|
|
|
|
void conn_delete_all_watches(struct connection *conn);
|
|
|
|
const char *dump_state_watches(FILE *fp, struct connection *conn,
|
|
unsigned int conn_id);
|
|
|
|
void read_state_watch(const void *ctx, const void *state);
|
|
void read_state_watch_ext(const void *ctx, const void *state);
|
|
|
|
#endif /* _XENSTORED_WATCH_H */
|