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
{
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; */
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 */
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);
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);
/* 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 */
e_nm_ip4_config.c \
e_nms.c \
e_nms_connection.c \
+e_nm_connection_active.c \
e_nm_util.c
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 }
};
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)
{
#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"
#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)
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)
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);
{ .sig = "u", property_uint32 },
{ .sig = "b", property_bool },
{ .sig = "as", property_string_list },
+ { .sig = "ao", property_object_path_list },
{ .sig = NULL }
};
if (!strcmp(t->sig, sig))
return t->func;
}
+ fprintf(stderr, "Missing property parser for sig: %s\n", sig);
return NULL;
}
}
}
+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)
{