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

Reply via email to