From 5feb37d83f3d82d873f5ea40e1098ef11261813e Mon Sep 17 00:00:00 2001 From: Philippe De Swert Date: Sat, 31 Aug 2013 13:52:25 +0300 Subject: [PATCH] Add dbus method to query network settings. Signed-off-by: Philippe De Swert --- debian/usb_moded.conf | 8 +++++++- src/usb_moded-config-private.h | 3 ++- src/usb_moded-config.c | 25 +++++++++++++++++++++++++ src/usb_moded-dbus.c | 25 ++++++++++++++++++++++++- src/usb_moded-dbus.h | 1 + 5 files changed, 59 insertions(+), 3 deletions(-) diff --git a/debian/usb_moded.conf b/debian/usb_moded.conf index 99b5dea..0aff517 100644 --- a/debian/usb_moded.conf +++ b/debian/usb_moded.conf @@ -16,9 +16,15 @@ - + + + + diff --git a/src/usb_moded-config-private.h b/src/usb_moded-config-private.h index fdb82d1..672de7b 100644 --- a/src/usb_moded-config-private.h +++ b/src/usb_moded-config-private.h @@ -18,7 +18,7 @@ 02110-1301 USA */ /* - * Gets information from Gconf/ini file for the usb modes + * Gets/sets information for the usb modes from dbus */ /*============================================================================= */ @@ -26,3 +26,4 @@ const char * get_mode_setting(void); int set_mode_setting(const char *mode); int set_network_setting(const char *config, const char *setting); +const char *get_network_setting(const char *config); diff --git a/src/usb_moded-config.c b/src/usb_moded-config.c index b80fafe..fed81c5 100644 --- a/src/usb_moded-config.c +++ b/src/usb_moded-config.c @@ -383,6 +383,31 @@ int set_network_setting(const char *config, const char *setting) return(!ret); } +const char * get_network_setting(const char *config) +{ + const char * ret = 0; + + if(!strcmp(config, NETWORK_IP_KEY)) + { + ret = get_network_ip(); + if(!ret) + ret = strdup("192.168.2.15"); + } + else if(!strcmp(config, NETWORK_INTERFACE_KEY)) + { + + ret = get_network_interface(); + if(!ret) + ret = strdup("usb0"); + } + else if(!strcmp(config, NETWORK_GATEWAY_KEY)) + return(get_network_gateway()); + else + /* no matching keys, return error */ + return(NULL); + return(ret); +} + int conf_file_merge(void) { GDir *confdir; diff --git a/src/usb_moded-dbus.c b/src/usb_moded-dbus.c index 26d77be..27db43e 100644 --- a/src/usb_moded-dbus.c +++ b/src/usb_moded-dbus.c @@ -137,7 +137,7 @@ static DBusHandlerResult msg_handler(DBusConnection *const connection, DBusMessa reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, member); else { - /* error checking is done when setting the GConf key */ + /* error checking is done when setting configuration */ if(!set_network_setting(config, setting)) { if((reply = dbus_message_new_method_return(msg))) @@ -148,6 +148,29 @@ static DBusHandlerResult msg_handler(DBusConnection *const connection, DBusMessa } dbus_error_free(&err); } + else if(!strcmp(member, USB_MODE_NETWORK_GET)) + { + char *config = 0; + const char *setting = 0; + DBusError err = DBUS_ERROR_INIT; + + if(!dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &config, DBUS_TYPE_INVALID)) + { + reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, member); + } + else + { + setting = get_network_setting(config); + if(setting) + { + if((reply = dbus_message_new_method_return(msg))) + dbus_message_append_args (reply, DBUS_TYPE_STRING, &config, DBUS_TYPE_STRING, &setting, DBUS_TYPE_INVALID); + free((void *)setting); + } + else + reply = dbus_message_new_error(msg, DBUS_ERROR_INVALID_ARGS, config); + } + } else if(!strcmp(member, USB_MODE_CONFIG_GET)) { const char *config = get_mode_setting(); diff --git a/src/usb_moded-dbus.h b/src/usb_moded-dbus.h index 028d7f9..018a28c 100644 --- a/src/usb_moded-dbus.h +++ b/src/usb_moded-dbus.h @@ -40,6 +40,7 @@ #define USB_MODE_STATE_SET "set_mode" /* set a mode (only works when connected) */ #define USB_MODE_CONFIG_SET "set_config" /* set the mode that needs to be activated in the config file */ #define USB_MODE_NETWORK_SET "net_config" /* set the network config in the config file */ +#define USB_MODE_NETWORK_GET "get_net_config" /* get the network config from the config file */ /* state definitions for signals and method parameters */ #define USB_CONNECTED "USB connected"