blob: c9925b11f42e0e7bfba08c5fc8d89a14c3671b1b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
All info for mapping uri -> dbus name + remainder path is stored in config files read by the client at startup.
Each "mountpoint" in a mountpoint daemon owns a name like "org.gtk.vfs.mount.smb.$server.$share".
It also instantiates a Mountpoint interface at /org/gtk/vfs/mount/smb/$server/$share which
listens to operations.
Each daemon that contains at least one mountpoint also registers a org.gtk.vfs.Daemon interface
at /org/gtk/vfs/Daemon which supports operations like GetConnection and CancelOp.
Clients use GetNameOwner to map uri -> mountpoint name -> owner of name -> GetConnection call so that
it can handle multiple mountpoints in each daemon. This can be cached, and NameOwnerChanged can be used
to invalidate the cache.
----------------------
How we map URIs
----------------------
Mapping functions needed:
uri to mount + path
mount + path to uri
root parent
Mapping %m://%u@%h:%p/%f
ftp:
m_ftp.h_%h.p_%p.u_%u
smb:
smb://user@/ <-> smb-root.u_user
smb:/// <-> smb-root; path = /
smb:///foo <-> smb-root; path = /foo, type == link
smb://foo/ <-> smb-browse; path = /foo
smb://foo/server -> smb-browse; path = /foo/server, type == link
smb://user@foo/ <-> smb-browse.u_user; path = /foo
smb://user@foo:21/ <-> smb-browse.u_user.p_21; path = /foo
smb://domain;user@foo:21/ <-> smb-browse.d_domain.u_user.p_21; path = /foo
smb:///foo/share/blah <-> smb-share.h_foo.s_share, path = /blah
m_smb-browse.u_%u path includes hostname
computer:
m_computer
network:
m_network
http:
https:
m_http(s), username+path+port in path
authentication (no mount)
dav:
davs:
m_dav.h_%h.p_%p.u_%u.f_%f (f== path prefix)
nfs.h_server.p_port.u_user.f_/opt/prefix
Find it by using ListNames
nfs:
nfs.h_server.p_port.f_/opt/prefix
Find it by using ListNames
sftp:
trash:
---
HowTo handle:
uri query part
filename encoding - paths are raw, get utf8 via get_display_name op. (What about IRIs? Try to do utf8 paths if possible?)
automounting? - http?
|