When is an interface not an interface?



...when it can be modified at will by its implementors.  Warning, rant ahead.

The DBUS interface org.freedesktop.NetworkManager.Connection.Active is 
declared once in nm-active-connection.xml, including the signal 
PropertiesChanged.

In nm-vpn-connection.xml this same interface is redeclared without the signal,
because the same file also declares 
org.freedesktop.NetworkManager.VPN.Connection with a signal of the same name. 
The Vpn property is also omitted.

As a result my interface object to a Connection.Active never receives 
PropertiesChanged, because VPN.Connection emits this signal and 
Connection.Active does not.

This is sloppy OO.  VPN connection objects should fulfil the interface that 
they appear to advertise, allowing client authors to treat them as 
activeconnections.  Not to mention that including the both bindings headers 
from nm-active-connection.xml and nm-vpn-connection.xml gets me a compiler 
error due to multiple definitions of the same class, so I have to maintain my 
own copy of those files with the competing interface removed, increasing the 
chance that I get out of sync with the NM I am building for.

I don't see any reason for the extra interface, can it be removed and can VPN 
connections emit Connection.Active.PropertiesChanged?

Will 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]