wine/server/change.c
Alexandre Julliard 9caa71eef4 Redesign of the server communication protocol to allow arbitrary sized
data to be exchanged.
Split request and reply structures to make backwards compatibility
easier.
Moved many console functions to dlls/kernel, added code page support,
changed a few requests to behave properly with the new protocol.
2001-11-30 18:46:42 +00:00

83 lines
2.2 KiB
C

/*
* Server-side change notification management
*
* Copyright (C) 1998 Alexandre Julliard
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include "winnt.h"
#include "handle.h"
#include "thread.h"
#include "request.h"
struct change
{
struct object obj; /* object header */
int subtree; /* watch all the subtree */
int filter; /* notification filter */
};
static void change_dump( struct object *obj, int verbose );
static int change_signaled( struct object *obj, struct thread *thread );
static const struct object_ops change_ops =
{
sizeof(struct change), /* size */
change_dump, /* dump */
add_queue, /* add_queue */
remove_queue, /* remove_queue */
change_signaled, /* signaled */
no_satisfied, /* satisfied */
NULL, /* get_poll_events */
NULL, /* poll_event */
no_get_fd, /* get_fd */
no_flush, /* flush */
no_get_file_info, /* get_file_info */
no_destroy /* destroy */
};
static struct change *create_change_notification( int subtree, int filter )
{
struct change *change;
if ((change = alloc_object( &change_ops, -1 )))
{
change->subtree = subtree;
change->filter = filter;
}
return change;
}
static void change_dump( struct object *obj, int verbose )
{
struct change *change = (struct change *)obj;
assert( obj->ops == &change_ops );
fprintf( stderr, "Change notification sub=%d filter=%08x\n",
change->subtree, change->filter );
}
static int change_signaled( struct object *obj, struct thread *thread )
{
/* struct change *change = (struct change *)obj;*/
assert( obj->ops == &change_ops );
return 0; /* never signaled for now */
}
/* create a change notification */
DECL_HANDLER(create_change_notification)
{
struct change *change;
reply->handle = 0;
if ((change = create_change_notification( req->subtree, req->filter )))
{
reply->handle = alloc_handle( current->process, change,
STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE, 0 );
release_object( change );
}
}