Can someone commit this for Ross (as long as it compiles)? If not, I'll do it 
in a week or so.
Thanks for the help digging up all of nm's api.
Brian


On Sun, Jul 22, 2007 at 08:07:59PM -0400, Ross Vandegrift wrote:
> Hello everyone,
> 
> As I mentioned earlier, I've been playing a bit with getting
> NetworkManager support to do good stuff in E.  This patch updates
> e_dbus to use the most accurate NM interface that I could find.
> 
> The patch adds all the functionality required, but I am too dumb to
> figure out how to get "cvs diff -N" to work like "diff -N" and
> actually include the new file.  Instead, I've attached the missing
> file which will need to go into src/lib/nm/ for e_dbus.
> 
> Next email will have a simple sample app that gets information about
> network devices from NetworkManager.
> 
> 
> 
> ? src/lib/nm/e_nm_network.c
> Index: src/lib/nm/E_Nm.h
> ===================================================================
> RCS file: /var/cvs/e/e17/proto/e_dbus/src/lib/nm/E_Nm.h,v
> retrieving revision 1.1
> diff -u -r1.1 E_Nm.h
> --- src/lib/nm/E_Nm.h 21 Mar 2007 10:31:16 -0000      1.1
> +++ src/lib/nm/E_Nm.h 23 Jul 2007 00:01:55 -0000
> @@ -26,4 +26,26 @@
>  /* org.freedesktop.NetworkManager api */
>  int e_nm_get_devices(E_NM_Context *ctx, E_NM_Callback_Func cb_func, void 
> *data);
>  int e_nm_sleep(E_NM_Context *ctx, E_NM_Callback_Func cb_func, void *data, 
> int do_sleep);
> +
> +
> +/* org.freedesktop.NetworkManager.Device api */
> +int e_nm_device_get_name(E_NM_Context *ctx, const char *device,
> +                      E_NM_Callback_Func cb_func, void *data);
> +int e_nm_device_get_type(E_NM_Context *ctx, const char *device, 
> +                      E_NM_Callback_Func cb_func, void *data);
> +int e_nm_device_get_hal_udi(E_NM_Context *ctx, const char *device,
> +                         E_NM_Callback_Func cb_func, void *data);
> +int e_nm_device_get_ip4_address(E_NM_Context *ctx, const char *device,
> +                             E_NM_Callback_Func cb_func, void *data);
> +int e_nm_device_get_link_active(E_NM_Context *ctx, const char *device,
> +                             E_NM_Callback_Func cb_func, void *data);
> +int e_nm_device_wireless_get_strength(E_NM_Context *ctx, const char *device,
> +                                   E_NM_Callback_Func cb_func, void *data);
> +int e_nm_device_wireless_get_active_network(E_NM_Context *ctx,
> +                                         const char *device,
> +                                         E_NM_Callback_Func cb_func,
> +                                         void *data);
> +int e_nm_device_wireless_get_networks(E_NM_Context *ctx, const char *device, 
> +                                   E_NM_Callback_Func cb_func, void *data);
>  #endif
> +
> Index: src/lib/nm/Makefile.am
> ===================================================================
> RCS file: /var/cvs/e/e17/proto/e_dbus/src/lib/nm/Makefile.am,v
> retrieving revision 1.5
> diff -u -r1.5 Makefile.am
> --- src/lib/nm/Makefile.am    22 Mar 2007 07:47:37 -0000      1.5
> +++ src/lib/nm/Makefile.am    23 Jul 2007 00:01:55 -0000
> @@ -12,6 +12,7 @@
>  e_nm.c \
>  e_nm_manager.c \
>  e_nm_device.c \
> +e_nm_network.c \
>  e_nm_util.c 
>  
>  
> Index: src/lib/nm/e_nm_device.c
> ===================================================================
> RCS file: /var/cvs/e/e17/proto/e_dbus/src/lib/nm/e_nm_device.c,v
> retrieving revision 1.2
> diff -u -r1.2 e_nm_device.c
> --- src/lib/nm/e_nm_device.c  22 Mar 2007 19:52:59 -0000      1.2
> +++ src/lib/nm/e_nm_device.c  23 Jul 2007 00:01:55 -0000
> @@ -1,72 +1,161 @@
> +/*
> + * This file defines functions that query each of the functions provided by
> + * the NetworkManager Device interface.
> + */
> +
>  #include "E_Nm.h"
>  #include "e_nm_private.h"
>  #include <Ecore_Data.h>
>  
> -#define e_nm_device_call_new(path, member) 
> dbus_message_new_method_call(E_NM_SERVICE, path, E_NM_INTERFACE_DEVICE, 
> member)
> -#define e_nm_device_wired_call_new(path, member) 
> dbus_message_new_method_call(E_NM_SERVICE, path, E_NM_INTERFACE_DEVICE_WIRED, 
> member)
> -#define e_nm_device_wireless_call_new(path, member) 
> dbus_message_new_method_call(E_NM_SERVICE, path, 
> E_NM_INTERFACE_DEVICE_WIRELESS, member)
> +/**
> + * Get the system name of a NetworkManager device
> + *
> + * Returns an Ecore_List of dbus object paths for network devices. This list 
> is
> + * of const char *, and is freed automatically after the callback returns.
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
> +int
> +e_nm_device_get_name(E_NM_Context *ctx, const char *device,
> +                  E_NM_Callback_Func cb_func, void *data)
> +{
> +  return e_nm_get_from_device (ctx, device, cb_func, data, "getName",
> +                            DBUS_TYPE_STRING);
> +}
>  
>  
> +/**
> + * Return the type of a an NM device:
> + *
> + * 0: unknown
> + * 1: wired
> + * 2: wireless
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
>  int
> -e_nm_device_deactivate(E_NM_Context *ctx, const char *device, 
> E_NM_Callback_Func cb_func, void *data)
> +e_nm_device_get_type(E_NM_Context *ctx, const char *device, 
> +                  E_NM_Callback_Func cb_func, void *data)
>  {
> -  E_NM_Callback *cb;
> -  DBusMessage *msg;
> -  int ret;
> +  return e_nm_get_from_device (ctx, device, cb_func, data, "getType",
> +                            DBUS_TYPE_INT32);
> +}
>  
> -  cb = e_nm_callback_new(cb_func, data);
> -  msg = e_nm_device_call_new(device, "Deactivate");
> -  ret = e_dbus_message_send(ctx->conn, msg, cb_nm_generic, -1, cb) ? 1 : 0;
> -  dbus_message_unref(msg);
> -  return ret;
> +
> +/**
> + * Get the HAL UDI of a NetworkManager device
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
> +int
> +e_nm_device_get_hal_udi(E_NM_Context *ctx, const char *device,
> +                     E_NM_Callback_Func cb_func, void *data)
> +{
> +  return e_nm_get_from_device (ctx, device, cb_func, data, "getHalUdi",
> +                            DBUS_TYPE_STRING);
>  }
>  
> +
> +/**
> + * Get the IPv4 address of a NetworkManager device
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
>  int
> -e_nm_device_wired_activate(E_NM_Context *ctx, const char *device, 
> E_NM_Callback_Func cb_func, void *data, char user_requested)
> +e_nm_device_get_ip4_address(E_NM_Context *ctx, const char *device,
> +                          E_NM_Callback_Func cb_func, void *data)
>  {
> -  E_NM_Callback *cb;
> -  DBusMessage *msg;
> -  int ret;
> -  dbus_bool_t val;
> +  return e_nm_get_from_device (ctx, device, cb_func, data, "getIP4Address",
> +                            DBUS_TYPE_UINT32);
> +}
>  
> -  val = user_requested;
>  
> -  cb = e_nm_callback_new(cb_func, data);
> -  msg = e_nm_device_wired_call_new(device, "Activate");
> -  dbus_message_append_args(msg, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID);
> -  ret = e_dbus_message_send(ctx->conn, msg, cb_nm_generic, -1, cb) ? 1 : 0;
> -  dbus_message_unref(msg);
> -  return ret;
> +/**
> + * Get the link status of a NetworkManager device
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
> +int
> +e_nm_device_get_link_active(E_NM_Context *ctx, const char *device,
> +                         E_NM_Callback_Func cb_func, void *data)
> +{
> +  return e_nm_get_from_device (ctx, device, cb_func, data, "getLinkActive",
> +                            DBUS_TYPE_BOOLEAN);
>  }
>  
> +
> +/**
> + * Get the signal strength of a the wireless network that a NetworkManager 
> + * device is connected to.
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
>  int
> -e_nm_device_wireless_get_active_networks(E_NM_Context *ctx, const char 
> *device, E_NM_Callback_Func cb_func, void *data)
> +e_nm_device_wireless_get_strength(E_NM_Context *ctx, const char *device,
> +                         E_NM_Callback_Func cb_func, void *data)
>  {
> -  E_NM_Callback *cb;
> -  DBusMessage *msg;
> -  int ret;
> +  return e_nm_get_from_device (ctx, device, cb_func, data, "getStrength",
> +                            DBUS_TYPE_INT32);
> +}
>  
> -  cb = e_nm_callback_new(cb_func, data);
> -  msg = e_nm_device_wireless_call_new(device, "GetActiveNetworks");
> -  ret = e_dbus_message_send(ctx->conn, msg, cb_nm_string_list, -1, cb) ? 1 : 
> 0;
> -  dbus_message_unref(msg);
> -  return ret;
> +
> +/**
> + * Find the NetworkManager device's currently associated wireless network
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
> +int
> +e_nm_device_wireless_get_active_network(E_NM_Context *ctx, const char 
> *device,
> +                                     E_NM_Callback_Func cb_func, void *data)
> +{
> +  return e_nm_get_from_device (ctx, device, cb_func, data, 
> "getActiveNetwork",
> +                            DBUS_TYPE_STRING);
>  }
>  
> +
> +/**
> + * Get the list of available wireless networks
> + *
> + * Returns an Ecore_List of wireless network names
> + *
> + * @param ctx an e_nm context
> + * @param device a NetworkManager device to communicate with
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + */
>  int
> -e_nm_device_wireless_activate(E_NM_Context *ctx, const char *device, 
> E_NM_Callback_Func cb_func, void *data, const char *access_point, char 
> user_requested)
> +e_nm_device_wireless_get_networks(E_NM_Context *ctx, const char *device, 
> +                               E_NM_Callback_Func cb_func, void *data)
>  {
>    E_NM_Callback *cb;
>    DBusMessage *msg;
>    int ret;
> -  dbus_bool_t val;
> -
> -  val = user_requested;
>  
>    cb = e_nm_callback_new(cb_func, data);
> -  msg = e_nm_device_wireless_call_new(device, "Activate");
> -  dbus_message_append_args(msg, DBUS_TYPE_STRING, &access_point, 
> DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID);
> -  ret = e_dbus_message_send(ctx->conn, msg, cb_nm_generic, -1, cb) ? 1 : 0;
> +  msg = e_nm_device_call_new(device, "getNetworks");
> +  ret = e_dbus_message_send(ctx->conn, msg, cb_nm_string_list, -1, cb) ? 1 : 
> 0;
>    dbus_message_unref(msg);
>    return ret;
>  }
> +
> Index: src/lib/nm/e_nm_manager.c
> ===================================================================
> RCS file: /var/cvs/e/e17/proto/e_dbus/src/lib/nm/e_nm_manager.c,v
> retrieving revision 1.2
> diff -u -r1.2 e_nm_manager.c
> --- src/lib/nm/e_nm_manager.c 22 Mar 2007 19:52:59 -0000      1.2
> +++ src/lib/nm/e_nm_manager.c 23 Jul 2007 00:01:55 -0000
> @@ -1,6 +1,6 @@
>  #include "E_Nm.h"
>  #include "e_nm_private.h"
> -#define e_nm_manager_call_new(member) 
> dbus_message_new_method_call(E_NM_SERVICE, E_NM_PATH_NETWORK_MANAGER, 
> E_NM_INTERFACE_NETWORK_MANAGER, member)
> +
>  
>  /**
>   * Get all network devices.
> @@ -9,9 +9,9 @@
>   * of const char *, and is freed automatically after the callback returns.
>   *
>   * @param ctx an e_nm context
> - * @param cb a callback to call when the method returns (or an error is 
> received)
> + * @param cb a callback, used when the method returns (or an error is 
> received)
>   * @param data user data to pass to the callback function
> - */
> + **/
>  int
>  e_nm_get_devices(E_NM_Context *ctx, E_NM_Callback_Func cb_func, void *data)
>  {
> @@ -20,35 +20,59 @@
>    int ret;
>  
>    cb = e_nm_callback_new(cb_func, data);
> -  msg = e_nm_manager_call_new("GetDevices");
> +  msg = e_nm_manager_call_new("getDevices");
>  
>    ret = e_dbus_message_send(ctx->conn, msg, cb_nm_string_list, -1, cb) ? 1 : 
> 0;
>    dbus_message_unref(msg);
>    return ret;
>  }
>  
> +
>  /**
> - * Sleep or wake up network manager.
> - *
> - * The return_data of the callback will be NULL.
> + * Find the active device that NM has chosen
> + * 
> + * Returns a single string containing the dbus path to the active device
>   *
>   * @param ctx an e_nm context
> - * @param cb a callback to call when the method returns (or an error is 
> received)
> + * @param cb a callback, used when the method returns (or an error is 
> received)
>   * @param data user data to pass to the callback function
> - */
> + **/
>  int
> -e_nm_sleep(E_NM_Context *ctx, E_NM_Callback_Func cb_func, void *data, int 
> do_sleep)
> +e_nm_get_active_device(E_NM_Context *ctx, E_NM_Callback_Func cb_func,
> +                    void *data)
>  {
> -  E_NM_Callback *cb;
> -  DBusMessage *msg;
> -  int ret;
> -  dbus_bool_t var = do_sleep;
> +  return e_nm_get_from_nm (ctx, cb_func, data,
> +                        "getActiveDevice", DBUS_TYPE_STRING);
> +}
>  
> -  cb = e_nm_callback_new(cb_func, data);
> -  msg = e_nm_manager_call_new("Sleep");
> -  dbus_message_append_args(msg, DBUS_TYPE_BOOLEAN, &var, DBUS_TYPE_INVALID);
>  
> -  ret = e_dbus_message_send(ctx->conn, msg, cb_nm_generic, -1, cb) ? 1 : 0;
> -  dbus_message_unref(msg);
> -  return ret;
> +/**
> + * Query the current state of the network
> + * 
> + * Returns a single string containing the status:
> + *
> + *  "connecting":  there is a pending network connection (waiting for a DHCP
> + *                  request to complete, waiting for an encryption
> + *                  key/passphrase, waiting for a wireless network, etc)
> + *
> + *  "connected":    there is an active network connection
> + *
> + *  "scanning":     there is no active network connection, but NetworkManager
> + *                  is looking for an access point to associate with
> + *
> + *  "disconnected": there is no network connection
> + * 
> + *
> + *
> + * @param ctx an e_nm context
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + **/
> +int
> +e_nm_status(E_NM_Context *ctx, E_NM_Callback_Func cb_func,
> +                    void *data)
> +{
> +
> +  return e_nm_get_from_nm (ctx, cb_func, data,
> +                        "status", DBUS_TYPE_STRING);
>  }
> Index: src/lib/nm/e_nm_private.h
> ===================================================================
> RCS file: /var/cvs/e/e17/proto/e_dbus/src/lib/nm/e_nm_private.h,v
> retrieving revision 1.2
> diff -u -r1.2 e_nm_private.h
> --- src/lib/nm/e_nm_private.h 22 Mar 2007 01:44:13 -0000      1.2
> +++ src/lib/nm/e_nm_private.h 23 Jul 2007 00:01:55 -0000
> @@ -5,8 +5,14 @@
>  #define E_NM_INTERFACE_NETWORK_MANAGER "org.freedesktop.NetworkManager"
>  #define E_NM_PATH_NETWORK_MANAGER "/org/freedesktop/NetworkManager"
>  #define E_NM_INTERFACE_DEVICE "org.freedesktop.NetworkManager.Device"
> -#define E_NM_INTERFACE_DEVICE_WIRED 
> "org.freedesktop.NetworkManager.Device.Wired"
> -#define E_NM_INTERFACE_DEVICE_WIRELESS 
> "org.freedesktop.NetworkManager.Device.Wireless"
> +
> +
> +#define e_nm_manager_call_new(member) 
> dbus_message_new_method_call(E_NM_SERVICE, E_NM_PATH_NETWORK_MANAGER, 
> E_NM_INTERFACE_NETWORK_MANAGER, member)
> +
> +#define e_nm_device_call_new(path, member) 
> dbus_message_new_method_call(E_NM_SERVICE, path, E_NM_INTERFACE_DEVICE, 
> member)
> +
> +#define e_nm_network_call_new(member) 
> dbus_message_new_method_call(E_NM_SERVICE, E_NM_PATH_NETWORK_MANAGER, 
> E_NM_INTERFACE_NETWORK_MANAGER, member)
> +
>  
>  typedef struct E_NM_Callback E_NM_Callback;
>  struct E_NM_Callback
> @@ -34,6 +40,16 @@
>  E_NM_Callback * e_nm_callback_new(E_NM_Callback_Func cb_func, void 
> *user_data);
>  void e_nm_callback_free(E_NM_Callback *callback);
>  
> +int e_nm_get_from_nm(E_NM_Context *ctx, E_NM_Callback_Func cb_func, void 
> *data,
> +                  const char *method, int rettype);
> +int e_nm_get_from_device(E_NM_Context *ctx, const char *device,
> +                      E_NM_Callback_Func cb_func, void *data,
> +                      const char *method, int rettype);
> +
>  void cb_nm_generic(void *data, DBusMessage *msg, DBusError *err);
> +void cb_nm_int32(void *data, DBusMessage *msg, DBusError *err);
> +void cb_nm_uint32(void *data, DBusMessage *msg, DBusError *err);
> +void cb_nm_string(void *data, DBusMessage *msg, DBusError *err);
> +void cb_nm_boolean(void *data, DBusMessage *msg, DBusError *err);
>  void cb_nm_string_list(void *data, DBusMessage *msg, DBusError *err);
>  #endif
> Index: src/lib/nm/e_nm_util.c
> ===================================================================
> RCS file: /var/cvs/e/e17/proto/e_dbus/src/lib/nm/e_nm_util.c,v
> retrieving revision 1.2
> diff -u -r1.2 e_nm_util.c
> --- src/lib/nm/e_nm_util.c    22 Mar 2007 07:20:04 -0000      1.2
> +++ src/lib/nm/e_nm_util.c    23 Jul 2007 00:01:55 -0000
> @@ -1,10 +1,91 @@
>  #include "E_Nm.h"
>  #include "e_nm_private.h"
> +#include "E_DBus.h"
>  #include <string.h>
>  #include <Ecore_Data.h>
>  
>  /**
>   * @internal
> + * @brief returns an e_dbus callback for a given dbus type
> + * @param rettype the return type we want to find a callback for
> + **/
> +E_NM_Callback_Func
> +e_nm_callback_by_type (int rettype)
> +{
> +  switch (rettype)
> +    {
> +    case DBUS_TYPE_STRING:
> +      return (E_NM_Callback_Func) cb_nm_string;
> +      
> +    case DBUS_TYPE_INT32:
> +      return (E_NM_Callback_Func) cb_nm_int32;
> +      
> +    case DBUS_TYPE_UINT32:
> +      return (E_NM_Callback_Func) cb_nm_uint32;
> +      
> +    case DBUS_TYPE_BOOLEAN:
> +      return (E_NM_Callback_Func) cb_nm_boolean;
> +
> +    default:
> +      return (E_NM_Callback_Func) cb_nm_generic;
> +    }
> +}
> +
> +/**
> + * @internal
> + * @brief Send "get" messages to NetworkManager via e_dbus
> + * @param ctx an e_nm context
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + * @param method the name of the method that should be called
> + * @param rettype the type of the data that will be returned to the callback
> + **/
> +int
> +e_nm_get_from_nm(E_NM_Context *ctx, E_NM_Callback_Func cb_func, void *data,
> +              const char *method, int rettype)
> +{
> +  E_NM_Callback *cb;
> +  DBusMessage *msg;
> +  int ret;
> +
> +  cb = e_nm_callback_new(cb_func, data);
> +  msg = e_nm_manager_call_new(method);
> +  ret = e_dbus_message_send(ctx->conn, msg, 
> +                         e_nm_callback_by_type (rettype), -1, cb) ? 1 : 0;
> +  dbus_message_unref(msg);
> +  return ret;
> +}
> +
> +
> +/**
> + * @internal
> + * @brief Send "get" messages to a Device via e_dbus
> + * @param ctx an e_nm context
> + * @param cb a callback, used when the method returns (or an error is 
> received)
> + * @param data user data to pass to the callback function
> + * @param method the name of the method that should be called
> + * @param rettype the type of the data that will be returned to the callback
> + **/
> +int
> +e_nm_get_from_device(E_NM_Context *ctx, const char *device,
> +                  E_NM_Callback_Func cb_func, void *data,
> +                  const char *method, int rettype)
> +{
> +  E_NM_Callback *cb;
> +  DBusMessage *msg;
> +  int ret;
> +
> +  cb = e_nm_callback_new(cb_func, data);
> +  msg = e_nm_device_call_new(device, method);
> +  ret = e_dbus_message_send(ctx->conn, msg, 
> +                         e_nm_callback_by_type (rettype), -1, cb) ? 1 : 0;
> +  dbus_message_unref(msg);
> +  return ret;
> +}
> +
> +
> +/**
> + * @internal
>   * @brief Create a callback structure
>   * @param cb_func the callback function
>   * @param user_data data to pass to the callback
> @@ -54,6 +135,139 @@
>  
>  /**
>   * @internal
> + * @brief Callback for methods that return DBUS_TYPE_INT32
> + */
> +void
> +cb_nm_int32(void *data, DBusMessage *msg, DBusError *err)
> +{
> +  E_NM_Callback *cb;
> +  dbus_int32_t *i;
> +
> +  i = malloc (sizeof (dbus_int32_t));
> +
> +  cb = data;
> +  if (!cb->func)
> +    goto out;
> + 
> +  if (dbus_error_is_set (err)) 
> +    {
> +      cb->func (cb->user_data, NULL, err);
> +      dbus_error_free (err);
> +      goto out;
> +    }
> +
> +  /* Actually emit the integer */
> +  dbus_message_get_args (msg, err,
> +                      DBUS_TYPE_INT32, i,
> +                      DBUS_TYPE_INVALID);
> +  cb->func (cb->user_data, i, err);  
> +  
> +out:
> +  e_nm_callback_free(cb);
> +  return;
> +}
> +
> +/**
> + * @internal
> + * @brief Callback for methods that return DBUS_TYPE_UINT32
> + */
> +void
> +cb_nm_uint32(void *data, DBusMessage *msg, DBusError *err)
> +{
> +  E_NM_Callback *cb;
> +  dbus_uint32_t *i;
> +
> +  i = malloc (sizeof (dbus_uint32_t));
> +
> +  cb = data;
> +  if (!cb->func)
> +    goto out;
> + 
> +  if (dbus_error_is_set (err)) 
> +    {
> +      cb->func (cb->user_data, NULL, err);
> +      dbus_error_free (err);
> +      goto out;
> +    }
> +
> +  /* Actually emit the unsigned integer */
> +  dbus_message_get_args (msg, err,
> +                      DBUS_TYPE_UINT32, i,
> +                      DBUS_TYPE_INVALID);
> +  cb->func (cb->user_data, i, err);  
> +  
> +out:
> +  e_nm_callback_free(cb);
> +  return;
> +}
> +
> +/**
> + * @internal
> + * @brief Callback for methods that return DBUS_TYPE_BOOLEAN
> + */
> +void
> +cb_nm_boolean(void *data, DBusMessage *msg, DBusError *err)
> +{
> +  E_NM_Callback *cb;
> +  dbus_bool_t i;
> +
> +  cb = data;
> +  if (!cb->func)
> +    goto out;
> + 
> +  if (dbus_error_is_set (err)) 
> +    {
> +      cb->func (cb->user_data, NULL, err);
> +      dbus_error_free (err);
> +      goto out;
> +    }
> +
> +  /* Actually emit the unsigned integer */
> +  dbus_message_get_args (msg, err,
> +                      DBUS_TYPE_BOOLEAN, &i,
> +                      DBUS_TYPE_INVALID);
> +  cb->func (cb->user_data, i, err);  
> +  
> +out:
> +  e_nm_callback_free(cb);
> +  return;
> +}
> +
> +/**
> + * @internal
> + * @brief Callback for methods returning a single string
> + */
> +void
> +cb_nm_string(void *data, DBusMessage *msg, DBusError *err)
> +{
> +  E_NM_Callback *cb;
> +  char *str;
> +
> +  cb = data;
> +  if (!cb->func)
> +    goto out;
> +   
> +  if (dbus_error_is_set (err)) 
> +    {
> +      cb->func (cb->user_data, NULL, err);
> +      dbus_error_free (err);
> +      goto out;
> +    }
> +
> +  /* Actually emit the string */
> +  dbus_message_get_args (msg, err,
> +                      DBUS_TYPE_STRING, &str,
> +                      DBUS_TYPE_INVALID);
> +  cb->func (cb->user_data, str, err);  
> +
> +out:
> +  e_nm_callback_free(cb);
> +  return;
> +}
> +
> +
> +/**
> + * @internal
>   * @brief Callback for methods returning a list of strings or object paths
>   */
>  void
> 
> 
> 
> -- 
> Ross Vandegrift
> [EMAIL PROTECTED]
> 
> "The good Christian should beware of mathematicians, and all those who
> make empty prophecies. The danger already exists that the mathematicians
> have made a covenant with the devil to darken the spirit and to confine
> man in the bonds of Hell."
>       --St. Augustine, De Genesi ad Litteram, Book II, xviii, 37

> #include "E_Nm.h"
> #include "e_nm_private.h"
> 
> /**
>  * Get the ESSID of a wireless network
>  *
>  * @param ctx an e_nm context
>  * @param cb a callback, used when the method returns (or an error is 
> received)
>  * @param data user data to pass to the callback function
>  **/
> int
> e_nm_network_get_name(E_NM_Context *ctx, const char *device,
>                     E_NM_Callback_Func cb_func, void *data)
> {
>   return e_nm_get_from_device (ctx, device, cb_func, data, "getName",
>                              DBUS_TYPE_STRING);
> }
> 
> /**
>  * Get the MAC address of a wireless network's AP
>  *
>  * @param ctx an e_nm context
>  * @param cb a callback, used when the method returns (or an error is 
> received)
>  * @param data user data to pass to the callback function
>  **/
> int
> e_nm_network_get_address(E_NM_Context *ctx, const char *device,
>                        E_NM_Callback_Func cb_func, void *data)
> {
>   return e_nm_get_from_device (ctx, device, cb_func, data, "getAddress",
>                              DBUS_TYPE_STRING);
> }
> 
> 
> /**
>  * Get the strength of the network; given out of 100
>  *
>  * @param ctx an e_nm context
>  * @param cb a callback, used when the method returns (or an error is 
> received)
>  * @param data user data to pass to the callback function
>  **/
> int
> e_nm_network_get_strength(E_NM_Context *ctx, const char *device,
>                         E_NM_Callback_Func cb_func, void *data)
> {
>   return e_nm_get_from_device (ctx, device, cb_func, data, "getStrength",
>                              DBUS_TYPE_INT32);
> }
> 
> 
> /**
>  * Get the frequency of the network; given in GHz
>  *
>  * @param ctx an e_nm context
>  * @param cb a callback, used when the method returns (or an error is 
> received)
>  * @param data user data to pass to the callback function
>  **/
> int
> e_nm_network_get_frequency(E_NM_Context *ctx, const char *device,
>                          E_NM_Callback_Func cb_func, void *data)
> {
>   return e_nm_get_from_device (ctx, device, cb_func, data, "getFrequency",
>                              DBUS_TYPE_DOUBLE);
> }
> 
> 
> /**
>  * Get the data rate of the network; given in Mbps
>  *
>  * @param ctx an e_nm context
>  * @param cb a callback, used when the method returns (or an error is 
> received)
>  * @param data user data to pass to the callback function
>  **/
> int
> e_nm_network_get_rate(E_NM_Context *ctx, const char *device,
>                        E_NM_Callback_Func cb_func, void *data)
> {
>   return e_nm_get_from_device (ctx, device, cb_func, data, "getRate",
>                              DBUS_TYPE_INT32);
> }
> 
> 
> /**
>  * Return true if the network requires encryption
>  *
>  * @param ctx an e_nm context
>  * @param cb a callback, used when the method returns (or an error is 
> received)
>  * @param data user data to pass to the callback function
>  **/
> int
> e_nm_network_get_encryption(E_NM_Context *ctx, const char *device,
>                           E_NM_Callback_Func cb_func, void *data)
> {
>   return e_nm_get_from_device (ctx, device, cb_func, data, "getEncryption",
>                              DBUS_TYPE_BOOLEAN);
> }

> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc.
> Still grepping through log files to find problems?  Stop.
> Now Search log events and configuration files using AJAX and a browser.
> Download your FREE copy of Splunk now >>  http://get.splunk.com/
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to