Made server communication faster by using a shared memory block.
A few other optimizations in request processing in the server.
Moved automatically generated request definitions to server.h and
removed include/server/request.h.

diff --git a/server/object.h b/server/object.h
index c5d69fd..8da0c81 100644
--- a/server/object.h
+++ b/server/object.h
@@ -13,7 +13,6 @@
 
 #include <sys/time.h>
 #include "server.h"
-#include "server/request.h"
 
 #define DEBUG_OBJECTS
 
@@ -29,6 +28,8 @@
 /* operations valid on all objects */
 struct object_ops
 {
+    /* size of this object type */
+    size_t size;
     /* dump the object (for debugging) */
     void (*dump)(struct object *,int);
     /* add a thread to the object wait queue */
@@ -65,49 +66,27 @@
 };
 
 extern void *mem_alloc( size_t size );  /* malloc wrapper */
-extern void *alloc_object( size_t size, const struct object_ops *ops, const char *name );
-extern struct object *create_named_object( const char *name, const struct object_ops *ops,
-                                           size_t size );
-extern int init_object( struct object *obj, const struct object_ops *ops, const char *name );
+extern char *mem_strdup( const char *str );
+extern void *alloc_object( const struct object_ops *ops );
 extern const char *get_object_name( struct object *obj );
+extern void *create_named_object( const struct object_ops *ops, const char *name, size_t len );
 /* grab/release_object can take any pointer, but you better make sure */
 /* that the thing pointed to starts with a struct object... */
 extern struct object *grab_object( void *obj );
 extern void release_object( void *obj );
-extern struct object *find_object( const char *name );
+extern struct object *find_object( const char *name, size_t len );
 extern int no_add_queue( struct object *obj, struct wait_queue_entry *entry );
 extern int no_satisfied( struct object *obj, struct thread *thread );
 extern int no_read_fd( struct object *obj );
 extern int no_write_fd( struct object *obj );
 extern int no_flush( struct object *obj );
 extern int no_get_file_info( struct object *obj, struct get_file_info_reply *info );
+extern void no_destroy( struct object *obj );
 extern void default_select_event( int event, void *private );
 #ifdef DEBUG_OBJECTS
 extern void dump_objects(void);
 #endif
 
-/* request handlers */
-
-struct iovec;
-struct thread;
-
-extern void fatal_protocol_error( const char *err, ... );
-extern void call_req_handler( struct thread *thread, enum request req,
-                              void *data, int len, int fd );
-extern void call_timeout_handler( void *thread );
-extern void call_kill_handler( struct thread *thread, int exit_code );
-
-extern void trace_request( enum request req, void *data, int len, int fd );
-extern void trace_timeout(void);
-extern void trace_kill( int exit_code );
-extern void trace_reply( struct thread *thread, int type, int pass_fd,
-                         struct iovec *vec, int veclen );
-/* check that the string is NULL-terminated and that the len is correct */
-#define CHECK_STRING(func,str,len) \
-  do { if (((str)[(len)-1] || strlen(str) != (len)-1)) \
-         fatal_protocol_error( "%s: invalid string '%.*s'\n", (func), (len), (str) ); \
-     } while(0)
-
 /* select functions */
 
 #define READ_EVENT    1
@@ -143,8 +122,8 @@
 
 extern struct client *add_client( int client_fd, struct thread *self );
 extern void remove_client( struct client *client, int exit_code );
-extern int send_reply_v( struct client *client, int type, int pass_fd,
-                         struct iovec *vec, int veclen );
+extern void client_pass_fd( struct client *client, int pass_fd );
+extern void client_reply( struct client *client );
 
 /* mutex functions */
 
@@ -156,6 +135,7 @@
                                   unsigned int access );
 extern int file_get_mmap_fd( struct file *file );
 extern int grow_file( struct file *file, int size_high, int size_low );
+extern int create_anonymous_file(void);
 extern struct file *create_temp_file( int access );
 extern void file_set_error(void);