Cleaner fix part 1
[bluesky.git] / nfs3 / nfs3_prot.h
index 5839996..2f8a373 100644 (file)
@@ -1,19 +1,15 @@
-/*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
-
 #ifndef _NFS3_PROT_H_RPCGEN
 #define _NFS3_PROT_H_RPCGEN
 
 #include <rpc/rpc.h>
 
+#include <glib.h>
+
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-
 typedef u_quad_t uint64;
 
 typedef quad_t int64;
@@ -26,6 +22,8 @@ typedef int int32;
 #define NFS3_CREATEVERFSIZE 8
 #define NFS3_WRITEVERFSIZE 8
 
+extern char nfsd_instance_verf_cookie[NFS3_WRITEVERFSIZE];
+
 typedef char *filename3;
 
 typedef char *nfspath3;
@@ -642,151 +640,133 @@ struct commit3res {
 };
 typedef struct commit3res commit3res;
 
+/* Structure for tracking a single incoming TCP connection for RPCs.  For now,
+ * used for NFS only. */
+typedef struct {
+    GIOChannel *channel;
+
+    /* The reassembled message, thus far. */
+    GString *msgbuf;
+
+    /* Remaining number of bytes in this message fragment; 0 if we next expect
+     * another fragment header. */
+    uint32_t frag_len;
+
+    /* If frag_len is zero: the number of bytes of the fragment header that
+     * have been read so far. */
+    int frag_hdr_bytes;
+
+    /* Mutex protecting send operations on the socket (to ensure that replies
+     * are not accidentally interleaved). */
+    GMutex *send_lock;
+
+    /* Is this a UDP connection? */
+    gboolean udp_transport;
+
+    /* For UDP connections only, the address of the sender. */
+    struct sockaddr_in peer;
+
+    /* For UDP only, a buffer for accumulating the full contents of a message
+     * before it is sent */
+    GString *sendbuf;
+} RPCConnection;
+
+/* Linked list of cleanup functions to call when a request is completed. */
+struct cleanup_list {
+    void (*func)(void *arg);
+    void *arg;
+    struct cleanup_list *next;
+};
+
+struct BlueSkyProfile;
+
+/* Used to track a single outstanding RPC request.  Not all of the fields are
+ * initially filled in, but more are filled in as the request is processed. */
+typedef struct {
+    /* The corresponding connection on which the request was made. */
+    RPCConnection *connection;
+
+    /* To track the time to complete this request and a timing breakdown. */
+    struct BlueSkyProfile *profile;
+
+    /* Transaction ID of the request, in host byte order. */
+    uint32_t xid;
+
+    /* Raw XDR arguments for the call, including headers (everything except the
+     * fragment headers).  Also, the offset to the actual arguments (number of
+     * bytes making up the headers). */
+    GString *raw_args;
+    size_t raw_args_header_bytes;
+
+    /* Decoded header information. */
+    int req_proc;
+
+    /* The XDR-decoded argument of the call, and the procedure to use for
+     * freeing these arguments.  The actual freeing is done automatically when
+     * the response is sent. */
+    void *args;
+    xdrproc_t xdr_args_free;
+
+    /* Procedure to be used for encoding the eventual return value into XDR. */
+    xdrproc_t xdr_result;
+
+    /* Functions to be called when the response is sent to clean up any
+     * resources. */
+    struct cleanup_list *cleanup;
+} RPCRequest;
+
+extern void async_rpc_send_reply(RPCRequest *req, void *result);
+
 #define NFS_PROGRAM 100003
 #define NFS_V3 3
 
-#if defined(__STDC__) || defined(__cplusplus)
-#define NFSPROC3_NULL 0
-extern  void * nfsproc3_null_3(void *, CLIENT *);
-extern  void * nfsproc3_null_3_svc(void *, struct svc_req *);
-#define NFSPROC3_GETATTR 1
-extern  getattr3res * nfsproc3_getattr_3(nfs_fh3 *, CLIENT *);
-extern  getattr3res * nfsproc3_getattr_3_svc(nfs_fh3 *, struct svc_req *);
-#define NFSPROC3_SETATTR 2
-extern  wccstat3 * nfsproc3_setattr_3(setattr3args *, CLIENT *);
-extern  wccstat3 * nfsproc3_setattr_3_svc(setattr3args *, struct svc_req *);
-#define NFSPROC3_LOOKUP 3
-extern  lookup3res * nfsproc3_lookup_3(diropargs3 *, CLIENT *);
-extern  lookup3res * nfsproc3_lookup_3_svc(diropargs3 *, struct svc_req *);
-#define NFSPROC3_ACCESS 4
-extern  access3res * nfsproc3_access_3(access3args *, CLIENT *);
-extern  access3res * nfsproc3_access_3_svc(access3args *, struct svc_req *);
-#define NFSPROC3_READLINK 5
-extern  readlink3res * nfsproc3_readlink_3(nfs_fh3 *, CLIENT *);
-extern  readlink3res * nfsproc3_readlink_3_svc(nfs_fh3 *, struct svc_req *);
-#define NFSPROC3_READ 6
-extern  read3res * nfsproc3_read_3(read3args *, CLIENT *);
-extern  read3res * nfsproc3_read_3_svc(read3args *, struct svc_req *);
-#define NFSPROC3_WRITE 7
-extern  write3res * nfsproc3_write_3(write3args *, CLIENT *);
-extern  write3res * nfsproc3_write_3_svc(write3args *, struct svc_req *);
-#define NFSPROC3_CREATE 8
-extern  diropres3 * nfsproc3_create_3(create3args *, CLIENT *);
-extern  diropres3 * nfsproc3_create_3_svc(create3args *, struct svc_req *);
-#define NFSPROC3_MKDIR 9
-extern  diropres3 * nfsproc3_mkdir_3(mkdir3args *, CLIENT *);
-extern  diropres3 * nfsproc3_mkdir_3_svc(mkdir3args *, struct svc_req *);
-#define NFSPROC3_SYMLINK 10
-extern  diropres3 * nfsproc3_symlink_3(symlink3args *, CLIENT *);
-extern  diropres3 * nfsproc3_symlink_3_svc(symlink3args *, struct svc_req *);
-#define NFSPROC3_MKNOD 11
-extern  diropres3 * nfsproc3_mknod_3(mknod3args *, CLIENT *);
-extern  diropres3 * nfsproc3_mknod_3_svc(mknod3args *, struct svc_req *);
-#define NFSPROC3_REMOVE 12
-extern  wccstat3 * nfsproc3_remove_3(diropargs3 *, CLIENT *);
-extern  wccstat3 * nfsproc3_remove_3_svc(diropargs3 *, struct svc_req *);
-#define NFSPROC3_RMDIR 13
-extern  wccstat3 * nfsproc3_rmdir_3(diropargs3 *, CLIENT *);
-extern  wccstat3 * nfsproc3_rmdir_3_svc(diropargs3 *, struct svc_req *);
-#define NFSPROC3_RENAME 14
-extern  rename3res * nfsproc3_rename_3(rename3args *, CLIENT *);
-extern  rename3res * nfsproc3_rename_3_svc(rename3args *, struct svc_req *);
-#define NFSPROC3_LINK 15
-extern  link3res * nfsproc3_link_3(link3args *, CLIENT *);
-extern  link3res * nfsproc3_link_3_svc(link3args *, struct svc_req *);
-#define NFSPROC3_READDIR 16
-extern  readdir3res * nfsproc3_readdir_3(readdir3args *, CLIENT *);
-extern  readdir3res * nfsproc3_readdir_3_svc(readdir3args *, struct svc_req *);
-#define NFSPROC3_READDIRPLUS 17
-extern  readdirplus3res * nfsproc3_readdirplus_3(readdirplus3args *, CLIENT *);
-extern  readdirplus3res * nfsproc3_readdirplus_3_svc(readdirplus3args *, struct svc_req *);
-#define NFSPROC3_FSSTAT 18
-extern  fsstat3res * nfsproc3_fsstat_3(nfs_fh3 *, CLIENT *);
-extern  fsstat3res * nfsproc3_fsstat_3_svc(nfs_fh3 *, struct svc_req *);
-#define NFSPROC3_FSINFO 19
-extern  fsinfo3res * nfsproc3_fsinfo_3(nfs_fh3 *, CLIENT *);
-extern  fsinfo3res * nfsproc3_fsinfo_3_svc(nfs_fh3 *, struct svc_req *);
-#define NFSPROC3_PATHCONF 20
-extern  pathconf3res * nfsproc3_pathconf_3(nfs_fh3 *, CLIENT *);
-extern  pathconf3res * nfsproc3_pathconf_3_svc(nfs_fh3 *, struct svc_req *);
-#define NFSPROC3_COMMIT 21
-extern  commit3res * nfsproc3_commit_3(commit3args *, CLIENT *);
-extern  commit3res * nfsproc3_commit_3_svc(commit3args *, struct svc_req *);
-extern int nfs_program_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
-
-#else /* K&R C */
 #define NFSPROC3_NULL 0
-extern  void * nfsproc3_null_3();
-extern  void * nfsproc3_null_3_svc();
+extern void nfsproc3_null_3_svc(void *, RPCRequest *);
 #define NFSPROC3_GETATTR 1
-extern  getattr3res * nfsproc3_getattr_3();
-extern  getattr3res * nfsproc3_getattr_3_svc();
+extern void nfsproc3_getattr_3_svc(nfs_fh3 *, RPCRequest *);
 #define NFSPROC3_SETATTR 2
-extern  wccstat3 * nfsproc3_setattr_3();
-extern  wccstat3 * nfsproc3_setattr_3_svc();
+extern void nfsproc3_setattr_3_svc(setattr3args *, RPCRequest *);
 #define NFSPROC3_LOOKUP 3
-extern  lookup3res * nfsproc3_lookup_3();
-extern  lookup3res * nfsproc3_lookup_3_svc();
+extern void nfsproc3_lookup_3_svc(diropargs3 *, RPCRequest *);
 #define NFSPROC3_ACCESS 4
-extern  access3res * nfsproc3_access_3();
-extern  access3res * nfsproc3_access_3_svc();
+extern void nfsproc3_access_3_svc(access3args *, RPCRequest *);
 #define NFSPROC3_READLINK 5
-extern  readlink3res * nfsproc3_readlink_3();
-extern  readlink3res * nfsproc3_readlink_3_svc();
+extern void nfsproc3_readlink_3_svc(nfs_fh3 *, RPCRequest *);
 #define NFSPROC3_READ 6
-extern  read3res * nfsproc3_read_3();
-extern  read3res * nfsproc3_read_3_svc();
+extern void nfsproc3_read_3_svc(read3args *, RPCRequest *);
 #define NFSPROC3_WRITE 7
-extern  write3res * nfsproc3_write_3();
-extern  write3res * nfsproc3_write_3_svc();
+extern void nfsproc3_write_3_svc(write3args *, RPCRequest *);
 #define NFSPROC3_CREATE 8
-extern  diropres3 * nfsproc3_create_3();
-extern  diropres3 * nfsproc3_create_3_svc();
+extern void nfsproc3_create_3_svc(create3args *, RPCRequest *);
 #define NFSPROC3_MKDIR 9
-extern  diropres3 * nfsproc3_mkdir_3();
-extern  diropres3 * nfsproc3_mkdir_3_svc();
+extern void nfsproc3_mkdir_3_svc(mkdir3args *, RPCRequest *);
 #define NFSPROC3_SYMLINK 10
-extern  diropres3 * nfsproc3_symlink_3();
-extern  diropres3 * nfsproc3_symlink_3_svc();
+extern void nfsproc3_symlink_3_svc(symlink3args *, RPCRequest *);
 #define NFSPROC3_MKNOD 11
-extern  diropres3 * nfsproc3_mknod_3();
-extern  diropres3 * nfsproc3_mknod_3_svc();
+extern void nfsproc3_mknod_3_svc(mknod3args *, RPCRequest *);
 #define NFSPROC3_REMOVE 12
-extern  wccstat3 * nfsproc3_remove_3();
-extern  wccstat3 * nfsproc3_remove_3_svc();
+extern void nfsproc3_remove_3_svc(diropargs3 *, RPCRequest *);
 #define NFSPROC3_RMDIR 13
-extern  wccstat3 * nfsproc3_rmdir_3();
-extern  wccstat3 * nfsproc3_rmdir_3_svc();
+extern void nfsproc3_rmdir_3_svc(diropargs3 *, RPCRequest *);
 #define NFSPROC3_RENAME 14
-extern  rename3res * nfsproc3_rename_3();
-extern  rename3res * nfsproc3_rename_3_svc();
+extern void nfsproc3_rename_3_svc(rename3args *, RPCRequest *);
 #define NFSPROC3_LINK 15
-extern  link3res * nfsproc3_link_3();
-extern  link3res * nfsproc3_link_3_svc();
+extern void nfsproc3_link_3_svc(link3args *, RPCRequest *);
 #define NFSPROC3_READDIR 16
-extern  readdir3res * nfsproc3_readdir_3();
-extern  readdir3res * nfsproc3_readdir_3_svc();
+extern void nfsproc3_readdir_3_svc(readdir3args *, RPCRequest *);
 #define NFSPROC3_READDIRPLUS 17
-extern  readdirplus3res * nfsproc3_readdirplus_3();
-extern  readdirplus3res * nfsproc3_readdirplus_3_svc();
+extern void nfsproc3_readdirplus_3_svc(readdirplus3args *, RPCRequest *);
 #define NFSPROC3_FSSTAT 18
-extern  fsstat3res * nfsproc3_fsstat_3();
-extern  fsstat3res * nfsproc3_fsstat_3_svc();
+extern void nfsproc3_fsstat_3_svc(nfs_fh3 *, RPCRequest *);
 #define NFSPROC3_FSINFO 19
-extern  fsinfo3res * nfsproc3_fsinfo_3();
-extern  fsinfo3res * nfsproc3_fsinfo_3_svc();
+extern void nfsproc3_fsinfo_3_svc(nfs_fh3 *, RPCRequest *);
 #define NFSPROC3_PATHCONF 20
-extern  pathconf3res * nfsproc3_pathconf_3();
-extern  pathconf3res * nfsproc3_pathconf_3_svc();
+extern void nfsproc3_pathconf_3_svc(nfs_fh3 *, RPCRequest *);
 #define NFSPROC3_COMMIT 21
-extern  commit3res * nfsproc3_commit_3();
-extern  commit3res * nfsproc3_commit_3_svc();
-extern int nfs_program_3_freeresult ();
-#endif /* K&R C */
+extern void nfsproc3_commit_3_svc(commit3args *, RPCRequest *);
 
 /* the xdr functions */
 
-#if defined(__STDC__) || defined(__cplusplus)
 extern  bool_t xdr_uint64 (XDR *, uint64*);
 extern  bool_t xdr_int64 (XDR *, int64*);
 extern  bool_t xdr_uint32 (XDR *, uint32*);
@@ -868,89 +848,7 @@ extern  bool_t xdr_commit3args (XDR *, commit3args*);
 extern  bool_t xdr_commit3resok (XDR *, commit3resok*);
 extern  bool_t xdr_commit3res (XDR *, commit3res*);
 
-#else /* K&R C */
-extern bool_t xdr_uint64 ();
-extern bool_t xdr_int64 ();
-extern bool_t xdr_uint32 ();
-extern bool_t xdr_int32 ();
-extern bool_t xdr_filename3 ();
-extern bool_t xdr_nfspath3 ();
-extern bool_t xdr_cookieverf3 ();
-extern bool_t xdr_createverf3 ();
-extern bool_t xdr_writeverf3 ();
-extern bool_t xdr_nfsstat3 ();
-extern bool_t xdr_ftype3 ();
-extern bool_t xdr_specdata3 ();
-extern bool_t xdr_nfs_fh3 ();
-extern bool_t xdr_nfstime3 ();
-extern bool_t xdr_fattr3 ();
-extern bool_t xdr_post_op_attr ();
-extern bool_t xdr_wcc_attr ();
-extern bool_t xdr_pre_op_attr ();
-extern bool_t xdr_wcc_data ();
-extern bool_t xdr_post_op_fh3 ();
-extern bool_t xdr_set_uint32 ();
-extern bool_t xdr_set_uint64 ();
-extern bool_t xdr_time_how ();
-extern bool_t xdr_set_time ();
-extern bool_t xdr_sattr3 ();
-extern bool_t xdr_diropargs3 ();
-extern bool_t xdr_diropres3ok ();
-extern bool_t xdr_diropres3 ();
-extern bool_t xdr_wccstat3 ();
-extern bool_t xdr_getattr3res ();
-extern bool_t xdr_sattrguard3 ();
-extern bool_t xdr_setattr3args ();
-extern bool_t xdr_lookup3resok ();
-extern bool_t xdr_lookup3res ();
-extern bool_t xdr_access3args ();
-extern bool_t xdr_access3resok ();
-extern bool_t xdr_access3res ();
-extern bool_t xdr_readlink3resok ();
-extern bool_t xdr_readlink3res ();
-extern bool_t xdr_read3args ();
-extern bool_t xdr_read3resok ();
-extern bool_t xdr_read3res ();
-extern bool_t xdr_stable_how ();
-extern bool_t xdr_write3args ();
-extern bool_t xdr_write3resok ();
-extern bool_t xdr_write3res ();
-extern bool_t xdr_createmode3 ();
-extern bool_t xdr_createhow3 ();
-extern bool_t xdr_create3args ();
-extern bool_t xdr_mkdir3args ();
-extern bool_t xdr_symlinkdata3 ();
-extern bool_t xdr_symlink3args ();
-extern bool_t xdr_devicedata3 ();
-extern bool_t xdr_mknoddata3 ();
-extern bool_t xdr_mknod3args ();
-extern bool_t xdr_rename3args ();
-extern bool_t xdr_rename3wcc ();
-extern bool_t xdr_rename3res ();
-extern bool_t xdr_link3args ();
-extern bool_t xdr_link3wcc ();
-extern bool_t xdr_link3res ();
-extern bool_t xdr_readdir3args ();
-extern bool_t xdr_entry3 ();
-extern bool_t xdr_dirlist3 ();
-extern bool_t xdr_readdir3resok ();
-extern bool_t xdr_readdir3res ();
-extern bool_t xdr_readdirplus3args ();
-extern bool_t xdr_entryplus3 ();
-extern bool_t xdr_dirlistplus3 ();
-extern bool_t xdr_readdirplus3resok ();
-extern bool_t xdr_readdirplus3res ();
-extern bool_t xdr_fsstat3resok ();
-extern bool_t xdr_fsstat3res ();
-extern bool_t xdr_fsinfo3resok ();
-extern bool_t xdr_fsinfo3res ();
-extern bool_t xdr_pathconf3resok ();
-extern bool_t xdr_pathconf3res ();
-extern bool_t xdr_commit3args ();
-extern bool_t xdr_commit3resok ();
-extern bool_t xdr_commit3res ();
-
-#endif /* K&R C */
+extern void xdr_string_create(XDR *xdrs, GString *string, enum xdr_op op);
 
 #ifdef __cplusplus
 }