|
|
Sponsor |
Re: Request for the 1.0 release: msg#00251freedesktop.dbus
Havoc Pennington wrote: >I think we could have a dbus_connection_set_allow_peer_to_crash_me() and >the apps in a desktop session could set this when talking to the system >or session bus. The bus itself I'd prefer to keep the validation turned >on. That depends on the underlying OS having support for the TCP Security Flag, as defined by RFC 3514. >The big win would be to just optimize the marshaling/demarshaling code >though, since that's what I made slow when adding recursive types. Yeah, that's what showed up most often in my profilings: the recursive types. >> org.freedesktop.Hal /org/freedesktop/Hal >> org.freedesktop.Hal.Manager.foo > >Yeah, there are long threads about that in the past. My feeling is that >these things are the same as: > > - a process ID or application name ("bus name") > - an interface name > - an object pointer/reference The problem is that all three, individually, are necessary to their own extent: - the service name is necessary, or you won't know which peer to talk to - the interface name is necessary to define what semantics you expect from the peer - the standardised object name is unnecessary for general application objects, but is so for standard services. We could just say "use /", but what would happen if two services were merged into the same application? Some bindings -- like Java -- won't allow you to have different semantics in the same object The problem arises when they are connected together. If we allow empty interface names, callers could just ignore it when talking to well-known objects. The call in my example would reduce to: org.freedesktop.Hal /org/freedesktop/Hal foo (since we know that /org/freedesktop/Hal implements only org.freedesktop.Hal.Manager) And just as information, in DCOP, the distinction between object names and interfaces was lost a long time ago. Just as with the Hal example, the object name was mandated, so that callers knew what objects to talk to. It even happened quite often that the object name contain the word "interface" (prime example: the "MainApplication-Interface" object in all KDE applications). This became the standard practice, so the whole concept of interface was forgotten in DCOP, even though it is still supported by the library. When two objects of the same type were added to the same application, they distinguished by appending a number -- for instance, mainwindow#1, mainwindow#2, etc. >It might be cute to have the idea of some kind of "default" interface >and "default" object so that callers can skip the interface and object >names, but nobody quite figured out how that would work yet. Interesting. This is the behaviour in DCOP. It is implemented by making a call to an empty object name -- analogous to the empty interface name case. Of course, it doesn't have to be an empty name. It could be a default name ("/default" or even "/"). By the same token, the default interface case can be handled either by an empty name or by a default name (say, "org.freedesktop.DBus.Default"). By the way, you've just reminded me of a common practice in DCOP that is not possible in D-Bus, but I have no idea if apps rely on being able to call a remote, default object. It would be a fragile behaviour anyways, so I expect this not to be a problem to convert. >http://dbus.freedesktop.org/doc/diagram.png > >but I think that just makes it more confusing for most people ;-) It confused the hell out of me :-) >The purpose of this namespace is just to keep >multiple libraries/modules in the same process from stepping on each >other. Which they can already do by opening *different* connections. As I said, I am contemplating always opening private DBusConnections in the bindings to prevent this kind of "stepping on my toes". >One thing you could do in KDE is have the Qt bindings default to an >org.kde namespace, or have a setDefaultNamespace() call that kdelibs >would use to set org.kde; then for intra-KDE communication you don't >have to type all the namespace stuff, you'd only have to type it if you >talked to org.freedesktop or whatever stuff. Yes, I have something similar. When generating the automatic introspection for an arbitrary object, the interface name is produced from the class' name. Since Qt claims everything starting with Q as a namespace (:->), any class starting with Q will see "com.trolltech.Qt" prepended. Everything else will receive the application's organizationDomain and applicationName as namespacing (those are two properties defined in the application object). By the way, in case the user did not set the organizationDomain for his app, the binding defaults to a prefix of "local" (i.e., "local.MyClassName"). According to the recent drafts for Multicast DNS (mDNS), the "local" top-level domain is to be reserved for link-local resolution. I have abused the notion to determine that an interface is local to an application, since no entity can register a DNS domain ending in "local". >There's a signal on DBusGProxy called "destroy", which is emitted when >the app on the other end goes away. So people can connect a handler to >"destroy" and know when their proxy becomes invalid. How do you know when the object ceases to be valid on the remote app, but the remote app is still there? >"for_name_owner" is attached to a unique bus name (i.e. a specific >currently-running process). So if the current screensaver program >exited, you would get the "destroy" signal and have to make a new proxy >if a new screensaver program started up. > >"for_name" is simpler (and also avoids a round trip on proxy creation to >get the current name owner's unique name), but it can be bad in some >cases also (if you have an interface that assumes state across method >calls, and you get a different process in between calls) Those are nice features. Currently, I have implemented only the "for_name_owner" mode. I'll add to my to-do list. This "destroyed" signal, does it behave like a D-Bus signal? I mean, I know it's synthesised by the binding, but does it contain interface information too? (owner and path are unique to the object, signal name is "destroyed"). -- Thiago José Macieira - thiago.macieira AT trolltech.com Trolltech AS - Sandakerveien 116, NO-0402 Oslo, Norway
dbus mailing list dbus-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@xxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dbus
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: Request for the 1.0 release, Havoc Pennington |
|---|---|
| Next by Date: | Re: implementing IN_PROGRESS, Thiago Macieira |
| Previous by Thread: | Re: Request for the 1.0 release, Thiago Macieira |
| Next by Thread: | Re: Request for the 1.0 release, Havoc Pennington |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
Free MagazinesCisco NewsReceive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business. subscribe Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field. subscribe The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business. subscribe Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company. subscribe Total Telecom Total Telecom is "The Economist of the communications industry". subscribe |
Home | sitemap
| advertise | OSDir is
an inevitable website.
|