Add an updated Azure run
[bluesky.git] / nfs3 / nfs3_prot.h
index 6a3e316..2f8a373 100644 (file)
@@ -22,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;
@@ -653,16 +655,39 @@ typedef struct {
     /* 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;
 
-    /* Timining information for generating statistics about response times. */
-    int64_t time_start;
+    /* 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;
@@ -684,6 +709,10 @@ typedef struct {
 
     /* 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);
@@ -819,6 +848,8 @@ extern  bool_t xdr_commit3args (XDR *, commit3args*);
 extern  bool_t xdr_commit3resok (XDR *, commit3resok*);
 extern  bool_t xdr_commit3res (XDR *, commit3res*);
 
+extern void xdr_string_create(XDR *xdrs, GString *string, enum xdr_op op);
+
 #ifdef __cplusplus
 }
 #endif