Merge pull request #47 from Memphiz/win32fix3
[deb_libnfs.git] / include / nfsc / libnfs.h
index 82b4a061d4499c675fb8e92b7776c3f636837ce0..388ea78e6293685ebe5ad028fe063c8f55e33cc0 100644 (file)
 struct nfs_context;
 struct rpc_context;
 
+struct nfs_url {
+       char *server;
+       char *path;
+       char *file;
+};
+
 #if defined(WIN32)
 #define EXTERN __declspec( dllexport )
 #else
@@ -71,7 +77,6 @@ EXTERN int nfs_queue_length(struct nfs_context *nfs);
 struct AUTH;
 EXTERN void nfs_set_auth(struct nfs_context *nfs, struct AUTH *auth);
 
-
 /*
  * When an operation failed, this function can extract a detailed error string.
  */
@@ -106,6 +111,49 @@ EXTERN struct nfs_context *nfs_init_context(void);
 EXTERN void nfs_destroy_context(struct nfs_context *nfs);
 
 
+/*
+ * URL parsing functions.
+ * These functions all parse a URL of the form 
+ * nfs://server/path/file?argv=val[&arg=val]*
+ * and returns a nfs_url.
+ *
+ * Apart from parsing the URL the functions will also update
+ * the nfs context to reflect settings controlled via url arguments.
+ *
+ * Current URL arguments are :
+ * tcp-syncnt=<int>  : Number of SYNs to send during the seccion establish
+ *                     before failing settin up the tcp connection to the
+ *                     server.
+ * uid=<int>         : UID value to use when talking to the server.
+ *                     default it 65534 on Windows and getuid() on unixen.
+ * gid=<int>         : GID value to use when talking to the server.
+ *                     default it 65534 on Windows and getgid() on unixen.
+ */
+/*
+ * Parse a complete NFS URL including, server, path and
+ * filename. Fail if any component is missing.
+ */
+EXTERN struct nfs_url *nfs_parse_url_full(struct nfs_context *nfs, const char *url);
+
+/*
+ * Parse an NFS URL, but do not split path and file. File
+ * in the resulting struct remains NULL.
+ */
+EXTERN struct nfs_url *nfs_parse_url_dir(struct nfs_context *nfs, const char *url);
+
+/*
+ * Parse an NFS URL, but do not fail if file, path or even server is missing.
+ * Check elements of the resulting struct for NULL.
+ */
+EXTERN struct nfs_url *nfs_parse_url_incomplete(struct nfs_context *nfs, const char *url);
+
+
+/*
+ * Free the URL struct returned by the nfs_parse_url_* functions.
+ */
+EXTERN void nfs_destroy_url(struct nfs_url *url);
+
+
 struct nfsfh;
 
 /*
@@ -649,13 +697,16 @@ struct nfsdirent  {
        char *name;
        uint64_t inode;
 
-       /* some extra fields we get for free through the READDIRPLUS3 call. You need libnfs-raw-nfs.h for these */
+       /* Some extra fields we get for free through the READDIRPLUS3 call.
+         You need libnfs-raw-nfs.h for type/mode constants */
        uint32_t type; /* NF3REG, NF3DIR, NF3BLK, ... */
        uint32_t mode;
        uint64_t size;
        struct timeval atime;
        struct timeval mtime;
        struct timeval ctime;
+       uint32_t uid;
+       uint32_t gid;
 };
 /*
  * nfs_readdir() never blocks, so no special sync/async versions are available