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