Add support for setting time server configuration
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 14 Dec 2009 04:45:58 +0000 (05:45 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 14 Dec 2009 04:45:58 +0000 (05:45 +0100)
include/property.h
src/element.c
src/ipv4.c

index a6ea83c..0cf5d2b 100644 (file)
@@ -46,6 +46,7 @@ enum connman_property_id {
        CONNMAN_PROPERTY_ID_IPV4_GATEWAY,
        CONNMAN_PROPERTY_ID_IPV4_BROADCAST,
        CONNMAN_PROPERTY_ID_IPV4_NAMESERVER,
+       CONNMAN_PROPERTY_ID_IPV4_TIMESERVER,
 };
 
 enum connman_property_type {
index ef5f775..6917a29 100644 (file)
@@ -868,6 +868,14 @@ int connman_element_get_value(struct connman_element *element,
                *((char **) value) = element->ipv4.nameserver;
                __connman_element_unlock(element);
                break;
+       case CONNMAN_PROPERTY_ID_IPV4_TIMESERVER:
+               if (element->ipv4.timeserver == NULL)
+                       return connman_element_get_value(element->parent,
+                                                               id, value);
+               __connman_element_lock(element);
+               *((char **) value) = element->ipv4.timeserver;
+               __connman_element_unlock(element);
+               break;
        default:
                return -EINVAL;
        }
@@ -1091,6 +1099,7 @@ int __connman_element_append_ipv4(struct connman_element *element,
        const char *method = NULL;
        const char *address = NULL, *netmask = NULL, *gateway = NULL;
        const char *broadcast = NULL, *nameserver = NULL;
+       const char *timeserver = NULL;
 
        connman_element_get_value(element,
                                CONNMAN_PROPERTY_ID_IPV4_METHOD, &method);
@@ -1105,6 +1114,8 @@ int __connman_element_append_ipv4(struct connman_element *element,
                        CONNMAN_PROPERTY_ID_IPV4_BROADCAST, &broadcast);
        connman_element_get_value(element,
                        CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, &nameserver);
+       connman_element_get_value(element,
+                       CONNMAN_PROPERTY_ID_IPV4_TIMESERVER, &timeserver);
 
        if (method != NULL)
                connman_dbus_dict_append_variant(dict, "IPv4.Method",
@@ -1130,6 +1141,10 @@ int __connman_element_append_ipv4(struct connman_element *element,
                connman_dbus_dict_append_variant(dict, "IPv4.Nameserver",
                                                DBUS_TYPE_STRING, &nameserver);
 
+       if (timeserver != NULL)
+               connman_dbus_dict_append_variant(dict, "IPv4.Timeserver",
+                                               DBUS_TYPE_STRING, &timeserver);
+
        return 0;
 }
 
@@ -1218,6 +1233,18 @@ int __connman_element_set_ipv4(struct connman_element *element,
                element->ipv4.nameserver = g_strdup(nameserver);
 
                connman_element_update(element);
+       } else if (g_str_equal(name, "IPv4.Timeserver") == TRUE) {
+               const char *timeserver;
+
+               if (type != DBUS_TYPE_STRING)
+                       return -EINVAL;
+
+               dbus_message_iter_get_basic(value, &timeserver);
+
+               g_free(element->ipv4.timeserver);
+               element->ipv4.nameserver = g_strdup(timeserver);
+
+               connman_element_update(element);
        }
 
        return 0;
index 01a430a..06566bf 100644 (file)
@@ -175,7 +175,7 @@ static int ipv4_probe(struct connman_element *element)
        struct connman_element *connection;
        struct connman_ipv4 ipv4;
        const char *address = NULL, *netmask = NULL, *broadcast = NULL;
-       const char *nameserver = NULL;
+       const char *nameserver = NULL, *timeserver = NULL;
 
        DBG("element %p name %s", element, element->name);
 
@@ -188,6 +188,8 @@ static int ipv4_probe(struct connman_element *element)
 
        connman_element_get_value(element,
                        CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, &nameserver);
+       connman_element_get_value(element,
+                       CONNMAN_PROPERTY_ID_IPV4_TIMESERVER, &timeserver);
 
        DBG("address %s", address);
        DBG("netmask %s", netmask);
@@ -202,10 +204,13 @@ static int ipv4_probe(struct connman_element *element)
        if (broadcast)
                ipv4.broadcast.s_addr = inet_addr(broadcast);
        else
-               ipv4.broadcast.s_addr = ipv4.address.s_addr | ~ipv4.netmask.s_addr;
+               ipv4.broadcast.s_addr = ipv4.address.s_addr |
+                                               ~ipv4.netmask.s_addr;
 
        set_ipv4(element, &ipv4, nameserver);
 
+       connman_timeserver_append(timeserver);
+
        connection = connman_element_create(NULL);
 
        connection->type    = CONNMAN_ELEMENT_TYPE_CONNECTION;
@@ -220,8 +225,15 @@ static int ipv4_probe(struct connman_element *element)
 
 static void ipv4_remove(struct connman_element *element)
 {
+       const char *timeserver = NULL;
+
        DBG("element %p name %s", element, element->name);
 
+       connman_element_get_value(element,
+                       CONNMAN_PROPERTY_ID_IPV4_TIMESERVER, &timeserver);
+
+       connman_timeserver_remove(timeserver);
+
        clear_ipv4(element);
 }