urlwrapper: add support for nfs: URI scheme

Now that NFSv4 almost works, add support for handling nfs: urls to urlwrapper.
Should later be replaced by a better solution but it works for the time being.
This commit is contained in:
François Revol
2012-08-09 21:28:26 +02:00
parent 6ac7788b61
commit 8d9d55630a
2 changed files with 37 additions and 0 deletions
+36
View File
@@ -18,6 +18,7 @@
#include <stdio.h>
#include <unistd.h>
#include <fs_volume.h>
#include <Alert.h>
#include <Debug.h>
#include <NodeInfo.h>
@@ -466,6 +467,41 @@ UrlWrapper::ArgvReceived(int32 argc, char** argv)
return;
}
if (proto == "nfs") {
BString parameter(host);
_DecodeUrlString(path);
if (url.HasPort())
parameter << ":" << port;
//XXX: should not always be absolute! FIXME
parameter << ":/" << path;
BString prettyPath(path);
prettyPath.Remove(0, prettyPath.FindLast("/") + 1);
if (path == "" || path == "/")
prettyPath = "root";
prettyPath << " on " << host;
prettyPath.Prepend("/");
if (mkdir(prettyPath.String(), 0755) < 0) {
perror("mkdir");
return;
}
dev_t volume;
uint32 flags = 0;
fprintf(stderr, "parms:'%s'\n", parameter.String());
volume = fs_mount_volume(prettyPath.String(), NULL, "nfs4", flags,
parameter.String());
if (volume < B_OK) {
fprintf(stderr, "fs_mount_volume: %s\n", strerror(volume));
return;
}
BMessage m(B_REFS_RECEIVED);
entry_ref ref;
if (get_ref_for_path(prettyPath.String(), &ref) < B_OK)
return;
m.AddRef("refs", &ref);
be_roster->Launch(kTrackerSig, &m);
return;
}
/*
+1
View File
@@ -17,6 +17,7 @@ resource(1, "BEOS:FILE_TYPES") message
"types" = "application/x-vnd.Be.URL.icq",
"types" = "application/x-vnd.Be.URL.msn",
"types" = "application/x-vnd.Be.URL.mms",
"types" = "application/x-vnd.Be.URL.nfs",
"types" = "application/x-vnd.Be.URL.rtp",
"types" = "application/x-vnd.Be.URL.rtsp",
// "types" = "application/x-vnd.Be.URL.audio",