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?