remote: close file on usteer_init_local_id fread fail
[project/usteer.git] / remote.c
index 282e39b3f290b3ea56abfda3ac81acaea53da24d..bf58ea3c9564226068b41c39d24dacb7a3282243 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -193,7 +193,7 @@ interface_add_station(struct usteer_remote_node *node, struct blob_attr *data)
                                continue;
 
                        if (current_time - local_si->last_connected < config.roam_process_timeout) {
-                               node->node.roam_destination++;
+                               node->node.roam_events.target++;
                                break;
                        }
                }
@@ -210,6 +210,7 @@ remote_node_free(struct usteer_remote_node *node)
        list_del(&node->list);
        list_del(&node->host_list);
        usteer_sta_node_cleanup(&node->node);
+       usteer_measurement_report_node_cleanup(&node->node);
        free(node);
 
        if (!list_empty(&host->nodes))
@@ -264,6 +265,7 @@ interface_get_node(struct usteer_remote_host *host, const char *name)
        node->name = buf + addr_len + 1;
        node->host = host;
        INIT_LIST_HEAD(&node->node.sta_info);
+       INIT_LIST_HEAD(&node->node.measurements);
 
        list_add_tail(&node->list, &remote_nodes);
        list_add_tail(&node->host_list, &host->nodes);
@@ -287,6 +289,8 @@ interface_add_node(struct usteer_remote_host *host, struct blob_attr *data)
        node = interface_get_node(host, msg.name);
        node->check = 0;
        node->node.freq = msg.freq;
+       node->node.channel = msg.channel;
+       node->node.op_class = msg.op_class;
        node->node.n_assoc = msg.n_assoc;
        node->node.max_assoc = msg.max_assoc;
        node->node.noise = msg.noise;
@@ -311,6 +315,9 @@ interface_recv_msg(struct interface *iface, char *addr_str, void *buf, int len)
        struct blob_attr *cur;
        int rem;
 
+       if (config.local_mode)
+               return;
+
        if (blob_pad_len(data) != len) {
                MSG(DEBUG, "Invalid message length (header: %d, real: %d)\n", blob_pad_len(data), len);
                return;
@@ -565,6 +572,8 @@ static void usteer_send_node(struct usteer_node *node, struct sta_info *sta)
        blob_put_int32(&buf, APMSG_NODE_LOAD, node->load);
        blob_put_int32(&buf, APMSG_NODE_N_ASSOC, node->n_assoc);
        blob_put_int32(&buf, APMSG_NODE_MAX_ASSOC, node->max_assoc);
+       blob_put_int32(&buf, APMSG_NODE_OP_CLASS, node->op_class);
+       blob_put_int32(&buf, APMSG_NODE_CHANNEL, node->channel);
        blob_put(&buf, APMSG_NODE_BSSID, node->bssid, sizeof(node->bssid));
        if (node->rrm_nr) {
                r = blob_nest_start(&buf, APMSG_NODE_RRM_NR);
@@ -600,7 +609,7 @@ usteer_check_timeout(void)
        int timeout = config.remote_node_timeout;
 
        list_for_each_entry_safe(node, tmp, &remote_nodes, list) {
-               if (node->check++ > timeout)
+               if (config.local_mode || node->check++ > timeout)
                        remote_node_free(node);
        }
 }
@@ -647,7 +656,8 @@ usteer_send_update_timer(struct uloop_timeout *t)
        usteer_update_time();
        uloop_timeout_set(t, config.remote_update_interval);
 
-       if (!avl_is_empty(&local_nodes) || host_info_blob) {
+       if (!config.local_mode &&
+           (!avl_is_empty(&local_nodes) || host_info_blob)) {
                c = usteer_update_init();
                for_each_local_node(node)
                        usteer_send_node(node, NULL);
@@ -668,8 +678,10 @@ usteer_init_local_id(void)
                return -1;
        }
 
-       if (fread(&local_id, sizeof(local_id), 1, f) < 1)
+       if (fread(&local_id, sizeof(local_id), 1, f) < 1) {
+               fclose(f);
                return -1;
+       }
 
        fclose(f);
        return 0;