This email list is read-only. Emails sent to this list will be discarded ---------------------------------- include/network.h | 8 +++ include/plugin.h | 5 ++ plugins/bluetooth.c | 1 + plugins/dhclient.c | 1 + plugins/dnsproxy.c | 1 + plugins/ethernet.c | 1 + plugins/ipv4.c | 1 + plugins/loopback.c | 1 + plugins/netdev.c | 1 + plugins/polkit.c | 1 + plugins/resolvconf.c | 1 + plugins/resolvfile.c | 1 + plugins/supplicant.c | 1 + plugins/udhcp.c | 1 + plugins/wifi.c | 1 + src/connman.h | 5 ++ src/detect.c | 4 -- src/device.c | 2 + src/network.c | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++ 19 files changed, 176 insertions(+), 4 deletions(-)
New commits: commit 8e65bc5177df5ac686c04986ed60d54a98f11fb2 Author: Marcel Holtmann <[email protected]> Date: Tue Dec 30 06:01:45 2008 +0100 Add CONNMAN_API_SUBJECT_TO_CHANGE definition commit fd24c47b801a63ff9a16384adcf3c73f8e3a77d8 Author: Marcel Holtmann <[email protected]> Date: Tue Dec 30 03:45:08 2008 +0100 Add initial support for Network interface Diff in this email is a maximum of 400 lines. diff --git a/include/network.h b/include/network.h index 292dd9f..6d2f3b7 100644 --- a/include/network.h +++ b/include/network.h @@ -22,6 +22,9 @@ #ifndef __CONNMAN_NETWORK_H #define __CONNMAN_NETWORK_H +#include <connman/types.h> +#include <connman/device.h> + #ifdef __cplusplus extern "C" { #endif @@ -35,6 +38,7 @@ extern "C" { enum connman_network_type { CONNMAN_NETWORK_TYPE_UNKNOWN = 0, CONNMAN_NETWORK_TYPE_WIFI = 1, + CONNMAN_NETWORK_TYPE_HSO = 23, }; struct connman_network; @@ -46,6 +50,8 @@ extern void connman_network_unref(struct connman_network *network); extern const char *connman_network_get_identifier(struct connman_network *network); +extern struct connman_device *connman_network_get_device(struct connman_network *network); + extern void *connman_network_get_data(struct connman_network *network); extern void connman_network_set_data(struct connman_network *network, void *data); @@ -55,6 +61,8 @@ struct connman_network_driver { int priority; int (*probe) (struct connman_network *network); void (*remove) (struct connman_network *network); + int (*connect) (struct connman_network *network); + int (*disconnect) (struct connman_network *network); }; extern int connman_network_driver_register(struct connman_network_driver *driver); diff --git a/include/plugin.h b/include/plugin.h index 941229d..cbd1c12 100644 --- a/include/plugin.h +++ b/include/plugin.h @@ -26,6 +26,11 @@ extern "C" { #endif +#ifndef CONNMAN_API_SUBJECT_TO_CHANGE +#error "Please define CONNMAN_API_SUBJECT_TO_CHANGE to acknowledge your \ +understanding that ConnMan hasn't reached a stable API." +#endif + /** * SECTION:plugin * @title: Plugin premitives diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c index 8993ca6..1799f77 100644 --- a/plugins/bluetooth.c +++ b/plugins/bluetooth.c @@ -28,6 +28,7 @@ #include <gdbus.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/device.h> #include <connman/dbus.h> diff --git a/plugins/dhclient.c b/plugins/dhclient.c index 04787d1..20de09a 100644 --- a/plugins/dhclient.c +++ b/plugins/dhclient.c @@ -27,6 +27,7 @@ #include <sys/wait.h> #include <glib/gstdio.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/driver.h> #include <connman/dbus.h> diff --git a/plugins/dnsproxy.c b/plugins/dnsproxy.c index 39eefec..e8df6bf 100644 --- a/plugins/dnsproxy.c +++ b/plugins/dnsproxy.c @@ -29,6 +29,7 @@ #include <arpa/inet.h> #include <netinet/in.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/resolver.h> #include <connman/log.h> diff --git a/plugins/ethernet.c b/plugins/ethernet.c index 7b5ca41..434e3b7 100644 --- a/plugins/ethernet.c +++ b/plugins/ethernet.c @@ -34,6 +34,7 @@ #include <glib.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/device.h> #include <connman/rtnl.h> diff --git a/plugins/ipv4.c b/plugins/ipv4.c index b7d79be..33c73a4 100644 --- a/plugins/ipv4.c +++ b/plugins/ipv4.c @@ -35,6 +35,7 @@ #include <linux/netlink.h> #include <linux/rtnetlink.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/driver.h> #include <connman/resolver.h> diff --git a/plugins/loopback.c b/plugins/loopback.c index 29e6547..7dc47fe 100644 --- a/plugins/loopback.c +++ b/plugins/loopback.c @@ -31,6 +31,7 @@ #include <arpa/inet.h> #include <net/if.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/log.h> diff --git a/plugins/netdev.c b/plugins/netdev.c index b32c12f..2499301 100644 --- a/plugins/netdev.c +++ b/plugins/netdev.c @@ -23,6 +23,7 @@ #include <config.h> #endif +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/driver.h> #include <connman/log.h> diff --git a/plugins/polkit.c b/plugins/polkit.c index 1bf3f90..5396ad2 100644 --- a/plugins/polkit.c +++ b/plugins/polkit.c @@ -28,6 +28,7 @@ #include <glib.h> #include <polkit-dbus/polkit-dbus.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/security.h> #include <connman/dbus.h> diff --git a/plugins/resolvconf.c b/plugins/resolvconf.c index 7dc1205..30002d5 100644 --- a/plugins/resolvconf.c +++ b/plugins/resolvconf.c @@ -27,6 +27,7 @@ #include <unistd.h> #include <stdlib.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/resolver.h> #include <connman/log.h> diff --git a/plugins/resolvfile.c b/plugins/resolvfile.c index 440656a..a900981 100644 --- a/plugins/resolvfile.c +++ b/plugins/resolvfile.c @@ -30,6 +30,7 @@ #include <string.h> #include <sys/stat.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/resolver.h> #include <connman/log.h> diff --git a/plugins/supplicant.c b/plugins/supplicant.c index d907534..c51be35 100644 --- a/plugins/supplicant.c +++ b/plugins/supplicant.c @@ -29,6 +29,7 @@ #include <glib.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/log.h> #include <connman/dbus.h> diff --git a/plugins/udhcp.c b/plugins/udhcp.c index 9ac8c89..2cc3c61 100644 --- a/plugins/udhcp.c +++ b/plugins/udhcp.c @@ -26,6 +26,7 @@ #include <stdio.h> #include <unistd.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/driver.h> #include <connman/dbus.h> diff --git a/plugins/wifi.c b/plugins/wifi.c index ca39cec..10541f2 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -33,6 +33,7 @@ #include <gdbus.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE #include <connman/plugin.h> #include <connman/driver.h> #include <connman/rtnl.h> diff --git a/src/connman.h b/src/connman.h index 55f78c0..948fe77 100644 --- a/src/connman.h +++ b/src/connman.h @@ -21,6 +21,8 @@ #include <glib.h> +#define CONNMAN_API_SUBJECT_TO_CHANGE + #include <connman/dbus.h> #define NM_SERVICE "org.freedesktop.NetworkManager" @@ -124,6 +126,9 @@ void __connman_device_cleanup(void); int __connman_network_init(void); void __connman_network_cleanup(void); +void __connman_network_set_device(struct connman_network *network, + struct connman_device *device); + #include <connman/rtnl.h> int __connman_rtnl_init(void); diff --git a/src/detect.c b/src/detect.c index 9ede7db..e97e9df 100644 --- a/src/detect.c +++ b/src/detect.c @@ -37,10 +37,6 @@ #include <glib.h> -#include <connman/device.h> -#include <connman/rtnl.h> -#include <connman/log.h> - #include "connman.h" static GSList *device_list = NULL; diff --git a/src/device.c b/src/device.c index 07129ba..e466c0c 100644 --- a/src/device.c +++ b/src/device.c @@ -836,6 +836,8 @@ int connman_device_add_network(struct connman_device *device, if (err < 0) return err; + __connman_network_set_device(network, device); + g_hash_table_insert(device->networks, g_strdup(identifier), network); diff --git a/src/network.c b/src/network.c index 3e35a38..d244895 100644 --- a/src/network.c +++ b/src/network.c @@ -23,6 +23,8 @@ #include <config.h> #endif +#include <gdbus.h> + #include "connman.h" struct connman_network { @@ -32,8 +34,118 @@ struct connman_network { struct connman_network_driver *driver; void *driver_data; + + struct connman_device *device; }; +static DBusMessage *get_properties(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + DBusMessage *reply; + DBusMessageIter array, dict; + + DBG("conn %p", conn); + + reply = dbus_message_new_method_return(msg); + if (reply == NULL) + return NULL; + + dbus_message_iter_init_append(reply, &array); + + dbus_message_iter_open_container(&array, DBUS_TYPE_ARRAY, + DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING + DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING + DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); + + dbus_message_iter_close_container(&array, &dict); + + return reply; +} + +static DBusMessage *set_property(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + DBusMessageIter iter, value; + const char *name; + + DBG("conn %p", conn); + + if (dbus_message_iter_init(msg, &iter) == FALSE) + return __connman_error_invalid_arguments(msg); + + dbus_message_iter_get_basic(&iter, &name); + dbus_message_iter_next(&iter); + dbus_message_iter_recurse(&iter, &value); + + if (__connman_security_check_privileges(msg) < 0) + return __connman_error_permission_denied(msg); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); +} + +static DBusMessage *do_connect(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + DBG("conn %p", conn); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); +} + +static DBusMessage *do_disconnect(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + DBG("conn %p", conn); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); +} + +static GDBusMethodTable network_methods[] = { + { "GetProperties", "", "a{sv}", get_properties }, + { "SetProperty", "sv", "", set_property }, + { "Connect", "", "", do_connect }, + { "Disconnect", "", "", do_disconnect }, + { }, +}; + +static GDBusSignalTable network_signals[] = { + { "PropertyChanged", "sv" }, + { }, +}; + +static DBusConnection *connection; + +static void emit_networks_signal(void) +{ +} + +static int register_interface(struct connman_element *element) +{ + struct connman_network *network = element->network; + + g_dbus_unregister_interface(connection, element->path, + CONNMAN_NETWORK_INTERFACE); + + if (g_dbus_register_interface(connection, element->path, + CONNMAN_NETWORK_INTERFACE, + network_methods, network_signals, + NULL, network, NULL) == FALSE) { + connman_error("Failed to register %s network", element->path); + return -EIO; + } + + emit_networks_signal(); + + return 0; +} + +static void unregister_interface(struct connman_element *element) +{ + emit_networks_signal(); + + g_dbus_unregister_interface(connection, element->path, + CONNMAN_NETWORK_INTERFACE); +} + static GSList *driver_list = NULL; static gint compare_priority(gconstpointer a, gconstpointer b) @@ -156,6 +268,23 @@ const char *connman_network_get_identifier(struct connman_network *network) return network->identifier; } +void __connman_network_set_device(struct connman_network *network, _______________________________________________ Commits mailing list [email protected] https://lists.moblin.org/mailman/listinfo/commits
