ActiveConnection
authorenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 5 Nov 2008 20:31:54 +0000 (20:31 +0000)
committerenglebass <englebass@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 5 Nov 2008 20:31:54 +0000 (20:31 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/e_dbus@37497 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/nm/E_Nm.h
src/lib/nm/Makefile.am
src/lib/nm/e_nm.c
src/lib/nm/e_nm_private.h
src/lib/nm/e_nm_util.c

index 3ae1456..e2d54ab 100644 (file)
@@ -156,6 +156,14 @@ enum E_NMS_Context
   E_NMS_CONTEXT_SYSTEM,
 };
 
+typedef enum E_NM_Active_Connection_State E_NM_Active_Connection_State;
+enum E_NM_Active_Connection_State
+{
+  E_NM_ACTIVE_CONNECTION_STATE_UNKNOWN = 0,
+  E_NM_ACTIVE_CONNECTION_STATE_ACTIVATING = 1,
+  E_NM_ACTIVE_CONNECTION_STATE_ACTIVATED = 2
+};
+
 typedef struct E_NM E_NM;
 struct E_NM
 {
@@ -215,10 +223,10 @@ struct E_NM_Device
 typedef struct E_NM_IP4_Config E_NM_IP4_Config;
 struct E_NM_IP4_Config
 {
-  Ecore_List *addresses;  /* list uints */
-  Ecore_List *nameservers;/* uints */
+  Ecore_List *addresses;  /* list uint */
+  Ecore_List *nameservers;/* uint */
   Ecore_List *domains;    /* char* */
-  Ecore_List *routes;     /* list uints */
+  Ecore_List *routes;     /* list uint */
 };
 
 /* TODO typedef struct E_NM_DHCP4_Config E_NM_DHCP4_Config; */
@@ -229,8 +237,17 @@ typedef struct E_NMS E_NMS;
 typedef struct E_NMS_Connection E_NMS_Connection;
 /* No properties */
 
-/* TODO typedef struct E_NMS_Connection_Secrets E_NMS_Connection_Secrets */
-/* TODO typedef struct E_NM_Connection_Active E_NM_Connection_Active */
+typedef struct E_NM_Connection_Active E_NM_Connection_Active;
+struct E_NM_Connection_Active
+{
+  char                         *service_name;
+  char                         *connection; /* object_path */
+  char                         *specific_object; /* object_path */
+  Ecore_List                   *devices; /* object_path */
+  E_NM_Active_Connection_State  state;
+  int                           def; /* default */
+};
+
 /* TODO typedef struct E_NM_VPN_Connection E_NM_VPN_Connection */
 /* TODO typedef struct E_NM_VPN_Plugin E_NM_VPN_Plugin */
 
@@ -267,7 +284,7 @@ extern "C" {
    EAPI void *e_nm_access_point_data_get(E_NM_Access_Point *access_point);
    EAPI void  e_nm_access_point_callback_properties_changed_set(E_NM_Access_Point *access_point, int (*cb_func)(E_NM_Access_Point *access_point));
 
-   /* org.freedesktop.NetworkManager.Device api */
+   /* org.freedesktop.NetworkManager.Device(.*) api */
    EAPI int   e_nm_device_get(E_NM *nm, const char *device,
                               int (*cb_func)(void *data, E_NM_Device *dev),
                               void *data);
@@ -299,9 +316,10 @@ extern "C" {
    EAPI int   e_nms_list_connections(E_NMS *nms,
                         int (*cb_func)(void *data, Ecore_List *list),
                         void *data);
+
    EAPI void  e_nms_callback_new_connection_set(E_NMS *nms, int (*cb_func)(E_NMS *nms, E_NMS_Context context, const char *connection));
 
-   /* org.freedesktop.NetworkManagerSettings.Connection api */
+   /* org.freedesktop.NetworkManagerSettings.Connection(.*) api */
    EAPI int   e_nms_connection_get(E_NMS *nms, E_NMS_Context context, const char *connection, int (*cb_func)(void *data, E_NMS_Connection *conn), void *data);
    EAPI void  e_nms_connection_free(E_NMS_Connection *conn);
    EAPI void  e_nms_connection_dump(E_NMS_Connection *conn);
@@ -309,12 +327,18 @@ extern "C" {
    /* TODO: e_nms_connection_update */
    /* TODO: e_nms_connection_delete */
    /* TODO: e_nms_connection_get_settings */
+   /* TODO: e_nms_connection_secrets_get_secrets */
 
    /* TODO: e_nms_connection_callback_updated_set */
    /* TODO: e_nms_connection_callback_removed_set */
 
-   /* TODO: org.freedesktop.NetworkManagerSettings.Connection.Secrets api */
    /* TODO: org.freedesktop.NetworkManager.Connection.Active api */
+   EAPI int   e_nm_connection_active_get(E_NM *nm, int (*cb_func)(void *data, E_NM_Connection_Active *conn), void *data);
+   EAPI void  e_nm_connection_active_free(E_NM_Connection_Active *conn);
+   EAPI void  e_nm_connection_active_dump(E_NM_Connection_Active *conn);
+
+   EAPI void  e_nm_connection_active_callback_properties_changed_set(E_NM_Connection_Active *conn, int (*cb_func)(E_NM_Connection_Active *conn));
+
    /* TODO: org.freedesktop.NetworkManager.VPN.Connection api */
    /* TODO: org.freedesktop.NetworkManager.VPN.Plugin api */
 
index a26ee4a..7131bda 100644 (file)
@@ -18,6 +18,7 @@ e_nm_device.c \
 e_nm_ip4_config.c \
 e_nms.c \
 e_nms_connection.c \
+e_nm_connection_active.c \
 e_nm_util.c
 
 
index ef5344d..38f826e 100644 (file)
@@ -6,9 +6,7 @@
 static Property properties[] = {
   { .name = "WirelessEnabled", .sig = "b", .offset = offsetof(E_NM, wireless_enabled) },
   { .name = "WirelessHardwareEnabled", .sig = "b", .offset = offsetof(E_NM, wireless_hardware_enabled) },
-#if 0
-  { .name = "ActiveConnections", .sig = "ao", .offset = offsetof(E_NM, ...) },
-#endif
+  { .name = "ActiveConnections", .sig = "ao", .offset = offsetof(E_NM, active_connections) },
   { .name = "State", .sig = "u", .offset = offsetof(E_NM, state) },
   { .name = NULL }
 };
@@ -163,11 +161,16 @@ e_nm_free(E_NM *nm)
 EAPI void
 e_nm_dump(E_NM *nm)
 {
+  const char *conn;
+
   if (!nm) return;
   printf("E_NM:\n");
   printf("wireless_enabled         : %d\n", nm->wireless_enabled);
   printf("wireless_hardware_enabled: %d\n", nm->wireless_hardware_enabled);
-  /* TODO: active_connections */
+  printf("active_connections       :\n");
+  ecore_list_first_goto(nm->active_connections);
+  while ((conn = ecore_list_next(nm->active_connections)))
+    printf(" - %s\n", conn);
   printf("state                    : ");
   switch (nm->state)
   {
index 429bb01..7749444 100644 (file)
@@ -9,6 +9,7 @@
 #define _E_NM_INTERFACE_DEVICE_WIRELESS "org.freedesktop.NetworkManager.Device.Wireless"
 #define _E_NM_INTERFACE_DEVICE_WIRED "org.freedesktop.NetworkManager.Device.Wired"
 #define _E_NM_INTERFACE_IP4CONFIG "org.freedesktop.NetworkManager.IP4Config"
+#define _E_NM_INTERFACE_CONNECTION_ACTIVE "org.freedesktop.NetworkManager.Connection.Active"
 #define _E_NMS_PATH "/org/freedesktop/NetworkManagerSettings"
 #define E_NMS_SERVICE_SYSTEM "org.freedesktop.NetworkManagerSystemSettings"
 #define E_NMS_SERVICE_USER "org.freedesktop.NetworkManagerUserSettings"
@@ -22,6 +23,7 @@
 #define e_nm_access_point_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_ACCESSPOINT, prop, (E_DBus_Method_Return_Cb) cb, data)
 #define e_nm_device_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_DEVICE, prop, (E_DBus_Method_Return_Cb) cb, data)
 #define e_nm_ip4_config_properties_get(con, dev, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_IP4CONFIG, prop, (E_DBus_Method_Return_Cb) cb, data)
+#define e_nm_connection_active_properties_get(con, prop, cb, data) e_dbus_properties_get(con, _E_NM_SERVICE, E_NM_PATH, _E_NM_INTERFACE_CONNECTION_ACTIVE, prop, (E_DBus_Method_Return_Cb) cb, data)
 
 #define e_nm_signal_handler_add(con, sig, cb, data) e_dbus_signal_handler_add(con, _E_NM_SERVICE, E_NM_PATH, _E_NM_INTERFACE, sig, cb, data)
 #define e_nm_access_point_signal_handler_add(con, dev, sig, cb, data) e_dbus_signal_handler_add(con, _E_NM_SERVICE, dev, _E_NM_INTERFACE_ACCESSPOINT, sig, cb, data)
@@ -104,6 +106,14 @@ struct E_NMS_Connection_Internal
   void *data;
 };
 
+typedef struct E_NM_Connection_Active_Internal E_NM_Connection_Active_Internal;
+struct E_NM_Connection_Active_Internal
+{
+  E_NM_Connection_Active conn;
+
+  E_NM_Internal *nmi;
+};
+
 typedef int (*Object_Cb)(void *data, void *reply);
 #define OBJECT_CB(function) ((Object_Cb)function)
 
index 63b7815..a900e64 100644 (file)
@@ -22,6 +22,7 @@ static void property_object_path(DBusMessageIter *iter, void *value);
 static void property_uint32(DBusMessageIter *iter, void *value);
 static void property_bool(DBusMessageIter *iter, void *value);
 static void property_string_list(DBusMessageIter *iter, void *value);
+static void property_object_path_list(DBusMessageIter *iter, void *value);
 
 typedef void (*Property_Cb)(DBusMessageIter *iter, void *value);
 
@@ -38,6 +39,7 @@ static Sig_Property sigs[] = {
   { .sig = "u", property_uint32 },
   { .sig = "b", property_bool },
   { .sig = "as", property_string_list },
+  { .sig = "ao", property_object_path_list },
   { .sig = NULL }
 };
 
@@ -53,6 +55,7 @@ find_property_cb(const char *sig)
     if (!strcmp(t->sig, sig))
       return t->func;
   }
+  fprintf(stderr, "Missing property parser for sig: %s\n", sig);
   return NULL;
 }
 
@@ -132,6 +135,29 @@ property_string_list(DBusMessageIter *iter, void *value)
   }
 }
 
+static void
+property_object_path_list(DBusMessageIter *iter, void *value)
+{
+  DBusMessageIter a_iter;
+  Ecore_List **list;
+
+  if (!check_arg_type(iter, 'a')) return;
+  dbus_message_iter_recurse(iter, &a_iter);
+  if (!check_arg_type(&a_iter, 'o')) return;
+
+  list = (Ecore_List **)value;
+  *list = ecore_list_new();
+  ecore_list_free_cb_set(*list, free);
+  while (dbus_message_iter_get_arg_type(&a_iter) != DBUS_TYPE_INVALID)
+  {
+    const char *str;
+
+    dbus_message_iter_get_basic(&a_iter, &str);
+    if (str) ecore_list_append(*list, strdup(str));
+    dbus_message_iter_next(&a_iter);
+  }
+}
+
 void
 property(void *data, DBusMessage *msg, DBusError *err)
 {