diff --git a/src/miracled-dbus.c b/src/miracled-dbus.c index 9a8a737..4981f8f 100644 --- a/src/miracled-dbus.c +++ b/src/miracled-dbus.c @@ -332,13 +332,24 @@ void peer_dbus_removed(struct peer *p) static int link_dbus_start_scan(sd_bus *bus, sd_bus_message *msg, void *data, sd_bus_error *err) { - return -EINVAL; + struct link *l = data; + int r; + + r = link_start_scan(l); + if (r < 0) + return r; + + return sd_bus_reply_method_return(msg, NULL); } static int link_dbus_stop_scan(sd_bus *bus, sd_bus_message *msg, void *data, sd_bus_error *err) { - return -EINVAL; + struct link *l = data; + + link_stop_scan(l); + + return sd_bus_reply_method_return(msg, NULL); } static int link_dbus_get_type(sd_bus *bus, diff --git a/src/miracled-link.c b/src/miracled-link.c index 79b418b..4afb82b 100644 --- a/src/miracled-link.c +++ b/src/miracled-link.c @@ -307,3 +307,29 @@ int link_set_friendly_name(struct link *l, const char *name) return 0; } + +int link_start_scan(struct link *l) +{ + if (!l) + return -EINVAL; + + switch (l->type) { + case LINK_VIRTUAL: + return -EOPNOTSUPP; + case LINK_WIFI: + return wifi_set_discoverable(l->w, true); + } + + return -EINVAL; +} + +void link_stop_scan(struct link *l) +{ + if (!l) + return; + + switch (l->type) { + case LINK_WIFI: + wifi_set_discoverable(l->w, false); + } +} diff --git a/src/miracled.h b/src/miracled.h index 5fdbfcd..2b4c1c2 100644 --- a/src/miracled.h +++ b/src/miracled.h @@ -108,6 +108,9 @@ void link_free(struct link *l); int link_set_friendly_name(struct link *l, const char *name); +int link_start_scan(struct link *l); +void link_stop_scan(struct link *l); + /* manager */ struct manager {