Thanks a lot Dan, your explanations were very clear.Thank to you I got a running example doing creation, connection, disconnection and deletion of the settings. I attached the code I wrote. It is not completely mature yet since it mixes c++ and C. But I intend to put some orthodoxy in it later. I have an other question, I have seen that the connection called "Test of my" is still visible in the list of scanned networks displayed by the network-manager-applet. I thought first that it was because the list was not updated but it seems not to be the case. Worse: I am able to click on it and it looks like it tries to activate it, however I think it does not work. Is this a problem related to the applet or did I miss to remove something when managing the adhoc connection ?
Manuel On 04/10/2014 05:52 PM, Dan Williams wrote:
On Thu, 2014-04-10 at 14:44 +0200, Manuel Yguel wrote:I have successfully created and deleted adhoc networks from the glib API thanks to Dan help. However my test program suffers from one problem: the network connection configurations get stored in the network manager memory and pollute the user interface. Thus I try to call org.freedesktop.NetworkManager.Settings.Connection.Delete for a certain NMConnection object without any success so far. I can see in the D-bus (with qdbusviewer) the configuration for a single network connection and I am able to call the Delete method on it (because I can see it appears when the setting configuration is recorded). However I do not know how to get the number (x) in the path that appears at org/freedesktop/NetworkManager/Settings/x in order to create a proxy for that "Settings.Connection object" and call the Delete method on it later. First I would like to know if there is a way to get the path of the object storing the org.freedesktop.NetworkManager.Settings.Connection from the glib API ?When you add the connection to NetworkManager originally, NM will return to you the object path that you can use to work with the Connection object later. With the libnm-glib API, when you call: gboolean nm_remote_settings_add_connection (NMRemoteSettings *settings, NMConnection *connection, NMRemoteSettingsAddConnectionFunc callback, gpointer user_data); "callback" is called when the add is completed, and your callback has the prototype of: typedef void (*NMRemoteSettingsAddConnectionFunc) (NMRemoteSettings *settings, NMRemoteConnection *connection, GError *error, gpointer user_data); The NMRemoteConnection object (a subclass of NMConnection) represents the actual connection known by NM. You can throw away the NMConnection that you handed to nm_remote_settings_add_connection(), it is unchanged by the call. The NMRemoteConnection is the "live" object, which you can keep around and use later with functions like: void nm_remote_connection_delete (NMRemoteConnection *connection, NMRemoteConnectionResultFunc callback, gpointer user_data);I was first thinking that it may be a NMSettingConnection object. I was able to access it but I was only able to get the uuid or the human name of the connection. I also tried the nm_connection_get_path on the NMConnection object but I get a NULL string. I am quite stuck now and any help would be much appreciated.I think the issue is that you might still be using the NMConnection that you built up to send to NM with the add_connection() call. That object isn't consumed by add_connection(), but serves as a template and can be disposed after calling add_connection(). The NMRemoteConnection is what you want to use. I've committed some more documentation to libnm-glib's NMRemoteSettings object which describes this and hopefully helps you out. http://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=2200687b0f92d553dc79e54b672069b2b704203d There are also some examples here, the ones you're interested in have "libnm-glib" in the name: http://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/examples/C/glib Let us know if you have further questions! Dan
Attachment:
CMakeLists.txt
Description: Text document
Attachment:
manage_adhoc_remote_connection_nm_glib.cpp
Description: Text Data