From c118dd6a05d60caa3775ad16535d485767558ec2 Mon Sep 17 00:00:00 2001
From: Jakob Olsson <jakobols@kth.se>
Date: Thu, 7 Jun 2018 11:37:20 +0200
Subject: [PATCH] add global ip address variable

---
 common.h |  2 +-
 dongle.c | 32 ++++++++++++++++++++++++++++----
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/common.h b/common.h
index 6fb0dbe..865417f 100644
--- a/common.h
+++ b/common.h
@@ -27,7 +27,7 @@
 #include "libmobile_zte.h"
 
 extern int debug;
-extern char *ip_addr;
+extern char *global_ip_addr;
 extern struct ubus_context *global_ctx;
 
 #define debug_print(...)                  \
diff --git a/dongle.c b/dongle.c
index 4518c8f..3a3f7b5 100644
--- a/dongle.c
+++ b/dongle.c
@@ -18,6 +18,8 @@
 
 struct ubus_context *global_ctx;
 int debug;
+char *global_ip_addr;
+
 struct uloop_timeout timeout = { .cb = devices_status };
 static struct option long_options[] = {
 	{"debug", required_argument, NULL, 'd'},
@@ -100,39 +102,61 @@ int tag_missing_devices(void)
 int add_device(struct device *new_dev)
 {
 	struct device *dev;
+	int rv;
 
 	dev = search_list(new_dev->usb.if_name);
 	if (dev) {
 		if (dev->ip)
 			free(dev->ip);
+
 		if (new_dev->ip)
 			dev->ip = strdup(new_dev->ip);
 		else
 			dev->ip = NULL;
+
 		if (!dev->ubus_obj && dev->ip) {
 			dev->ubus_obj = dongle_create_dynamic_object(dev);
-			if (dev->ubus_obj)
-				publish_ubus_object(global_ctx, dev->ubus_obj);
+			if (!dev->ubus_obj)
+				goto fail;
+
+			rv = publish_ubus_object(global_ctx, dev->ubus_obj);
+			if (rv)
+				goto fail;
+
+			global_ip_addr = dev->ip;
+
 		} else if (dev->ubus_obj && !dev->ip) {
 			unpublish_ubus_object(global_ctx, dev->ubus_obj);
 			dongle_destroy_dynamic_object(dev->ubus_obj);
 		}
 		dev->present = true;
+
 		delete_device(new_dev);
 		goto already_present;
 	}
+
 	new_dev->present = true;
 	if (list_empty(&devices))
 		INIT_LIST_HEAD(&devices);
+
 	list_add_tail(&new_dev->list, &devices);
 	if (new_dev->ip) {
 		new_dev->ubus_obj = dongle_create_dynamic_object(new_dev);
-		if (new_dev->ubus_obj)
-			publish_ubus_object(global_ctx, new_dev->ubus_obj);
+		if (!new_dev->ubus_obj)
+			goto fail;
+
+		rv = publish_ubus_object(global_ctx, new_dev->ubus_obj);
+		if (rv)
+			goto fail;
+
+		global_ip_addr = new_dev->ip;
 	}
+
 	return 0;
 already_present:
 	return -1;
+fail:
+	return -2;
 }
 
 int delete_all_devices(void)
-- 
GitLab