diff options
author | Simon Kelley <simon@thekelleys.org.uk> | 2014-08-12 18:30:44 +0100 |
---|---|---|
committer | Simon Kelley <simon@thekelleys.org.uk> | 2014-08-12 18:30:44 +0100 |
commit | aaeea9f6ed76da5502ccf6cc2e878e9cb8aeae97 (patch) | |
tree | 23e9d6528be8f941942c8b8a081a27f5c8afc685 | |
parent | 40766e55e80f916a1c9ed5c642ddd3b1f758db06 (diff) | |
download | dnsmasq-aaeea9f6ed76da5502ccf6cc2e878e9cb8aeae97.tar.gz |
GetLoopServers Dbus method.loop
-rw-r--r-- | dbus/DBus-interface | 9 | ||||
-rw-r--r-- | src/dbus.c | 34 |
2 files changed, 43 insertions, 0 deletions
diff --git a/dbus/DBus-interface b/dbus/DBus-interface index 8e7ed9d..9a895eb 100644 --- a/dbus/DBus-interface +++ b/dbus/DBus-interface @@ -160,6 +160,15 @@ for SetServersEx is represented as "/eng.mycorp.com/lab.mycorp.com/1003:1234:abcd::1%eth0" ] +GetLoopServers +-------------- + +(Only available if dnsmasq compiled with HAVE_LOOP) + +Return an array of strings, each string is the IP address of an upstream +server which has been found to loop queries back to this dnsmasq instance, and +it therefore not being used. + 2. SIGNALS @@ -35,6 +35,11 @@ const char* introspection_xml_template = " <method name=\"GetVersion\">\n" " <arg name=\"version\" direction=\"out\" type=\"s\"/>\n" " </method>\n" +#ifdef HAVE_LOOP +" <method name=\"GetLoopServers\">\n" +" <arg name=\"server\" direction=\"out\" type=\"as\"/>\n" +" </method>\n" +#endif " <method name=\"SetServers\">\n" " <arg name=\"servers\" direction=\"in\" type=\"av\"/>\n" " </method>\n" @@ -205,6 +210,29 @@ static void dbus_read_servers(DBusMessage *message) cleanup_servers(); } +#ifdef HAVE_LOOP +static DBusMessage *dbus_reply_server_loop(DBusMessage *message) +{ + DBusMessageIter args, args_iter; + struct server *serv; + DBusMessage *reply = dbus_message_new_method_return(message); + + dbus_message_iter_init_append (reply, &args); + dbus_message_iter_open_container (&args, DBUS_TYPE_ARRAY,DBUS_TYPE_STRING_AS_STRING, &args_iter); + + for (serv = daemon->servers; serv; serv = serv->next) + if (serv->flags & SERV_LOOP) + { + prettyprint_addr(&serv->addr, daemon->addrbuff); + dbus_message_iter_append_basic (&args_iter, DBUS_TYPE_STRING, &daemon->addrbuff); + } + + dbus_message_iter_close_container (&args, &args_iter); + + return reply; +} +#endif + static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings) { DBusMessageIter iter, array_iter, string_iter; @@ -433,6 +461,12 @@ DBusHandlerResult message_handler(DBusConnection *connection, dbus_message_append_args(reply, DBUS_TYPE_STRING, &v, DBUS_TYPE_INVALID); } +#ifdef HAVE_LOOP + else if (strcmp(method, "GetLoopServers") == 0) + { + reply = dbus_reply_server_loop(message); + } +#endif else if (strcmp(method, "SetServers") == 0) { dbus_read_servers(message); |