Imported Upstream version 1.40
[platform/upstream/connman.git] / src / peer.c
index 340cbcc..bad5c84 100644 (file)
@@ -82,7 +82,7 @@ static void stop_dhcp_server(struct connman_peer *peer)
        peer->dhcp_server = NULL;
 
        if (peer->ip_pool)
-               __connman_ippool_unref(peer->ip_pool);
+               __connman_ippool_free(peer->ip_pool);
        peer->ip_pool = NULL;
        peer->lease_ip = 0;
 }
@@ -154,7 +154,7 @@ static int start_dhcp_server(struct connman_peer *peer)
 
        err = __connman_inet_modify_address(RTM_NEWADDR,
                                NLM_F_REPLACE | NLM_F_ACK, index, AF_INET,
-                               gateway, NULL, prefixlen, broadcast);
+                               gateway, NULL, prefixlen, broadcast, true);
        if (err < 0)
                goto error;
 
@@ -606,6 +606,9 @@ static int peer_connect(struct connman_peer *peer)
 {
        int err = -ENOTSUP;
 
+       if (is_connected(peer))
+               return -EISCONN;
+
        if (peer_driver->connect)
                err = peer_driver->connect(peer,
                                        CONNMAN_PEER_WPS_UNKNOWN, NULL);
@@ -980,7 +983,10 @@ void connman_peer_add_service(struct connman_peer *peer,
 
        service = g_malloc0(sizeof(struct _peer_service));
        service->type = type;
-       service->data = g_memdup(data, data_length * sizeof(unsigned char));
+       if (data_length > 0) {
+               service->data = g_malloc(data_length * sizeof(unsigned char));
+               memcpy(service->data, data, data_length * sizeof(unsigned char));
+       }
        service->length = data_length;
 
        peer->services = g_slist_prepend(peer->services, service);
@@ -1177,6 +1183,18 @@ const char *__connman_peer_get_path(struct connman_peer *peer)
        return peer->path;
 }
 
+static void disconnect_peer_hash_table(gpointer key,
+                                       gpointer value, gpointer user_data)
+{
+       struct connman_peer *peer = value;
+       peer_disconnect(peer);
+}
+
+void __connman_peer_disconnect_all(void)
+{
+       g_hash_table_foreach(peers_table, disconnect_peer_hash_table, NULL);
+}
+
 int __connman_peer_init(void)
 {
        DBG("");