mirror of
https://github.com/albfan/miraclecast.git
synced 2025-03-09 23:38:56 +00:00
miracled: implement peer properties
Implement basic peer properties and hook them up with dbus. Also add a device_name parser to the wifi implementation so we correctly read the friendly-name of remote devices. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
parent
7457a7cf90
commit
fde71e7352
5 changed files with 159 additions and 12 deletions
|
@ -87,7 +87,6 @@ static int peer_dbus_get_link(sd_bus *bus,
|
|||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
static int peer_dbus_get_name(sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
|
@ -96,7 +95,16 @@ static int peer_dbus_get_name(sd_bus *bus,
|
|||
void *data,
|
||||
sd_bus_error *err)
|
||||
{
|
||||
return -EINVAL;
|
||||
struct peer *p = data;
|
||||
const char *name;
|
||||
int r;
|
||||
|
||||
name = peer_get_friendly_name(p);
|
||||
r = sd_bus_message_append_basic(reply, 's', name ? name : "<unknown>");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int peer_dbus_get_connected(sd_bus *bus,
|
||||
|
@ -107,7 +115,15 @@ static int peer_dbus_get_connected(sd_bus *bus,
|
|||
void *data,
|
||||
sd_bus_error *err)
|
||||
{
|
||||
return -EINVAL;
|
||||
struct peer *p = data;
|
||||
int r, val;
|
||||
|
||||
val = peer_is_connected(p);
|
||||
r = sd_bus_message_append_basic(reply, 'b', &val);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int peer_dbus_get_interface(sd_bus *bus,
|
||||
|
@ -118,7 +134,16 @@ static int peer_dbus_get_interface(sd_bus *bus,
|
|||
void *data,
|
||||
sd_bus_error *err)
|
||||
{
|
||||
return -EINVAL;
|
||||
struct peer *p = data;
|
||||
const char *val;
|
||||
int r;
|
||||
|
||||
val = peer_get_interface(p);
|
||||
r = sd_bus_message_append_basic(reply, 's', val ? : "");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int peer_dbus_get_local_address(sd_bus *bus,
|
||||
|
@ -129,7 +154,16 @@ static int peer_dbus_get_local_address(sd_bus *bus,
|
|||
void *data,
|
||||
sd_bus_error *err)
|
||||
{
|
||||
return -EINVAL;
|
||||
struct peer *p = data;
|
||||
const char *val;
|
||||
int r;
|
||||
|
||||
val = peer_get_local_address(p);
|
||||
r = sd_bus_message_append_basic(reply, 's', val ? : "");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int peer_dbus_get_remote_address(sd_bus *bus,
|
||||
|
@ -140,9 +174,17 @@ static int peer_dbus_get_remote_address(sd_bus *bus,
|
|||
void *data,
|
||||
sd_bus_error *err)
|
||||
{
|
||||
return -EINVAL;
|
||||
struct peer *p = data;
|
||||
const char *val;
|
||||
int r;
|
||||
|
||||
val = peer_get_remote_address(p);
|
||||
r = sd_bus_message_append_basic(reply, 's', val ? : "");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
|
||||
static const sd_bus_vtable peer_dbus_vtable[] = {
|
||||
SD_BUS_VTABLE_START(0),
|
||||
|
@ -171,7 +213,6 @@ static const sd_bus_vtable peer_dbus_vtable[] = {
|
|||
peer_dbus_get_link,
|
||||
0,
|
||||
SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
/*
|
||||
SD_BUS_PROPERTY("Name",
|
||||
"s",
|
||||
peer_dbus_get_name,
|
||||
|
@ -197,7 +238,6 @@ static const sd_bus_vtable peer_dbus_vtable[] = {
|
|||
peer_dbus_get_remote_address,
|
||||
0,
|
||||
0),
|
||||
*/
|
||||
SD_BUS_SIGNAL("ProvisionRequest", "ss", 0),
|
||||
SD_BUS_VTABLE_END
|
||||
};
|
||||
|
|
|
@ -140,6 +140,61 @@ void peer_free(struct peer *p)
|
|||
free(p);
|
||||
}
|
||||
|
||||
const char *peer_get_friendly_name(struct peer *p)
|
||||
{
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
if (p->d)
|
||||
return wifi_dev_get_name(p->d);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool peer_is_connected(struct peer *p)
|
||||
{
|
||||
if (!p)
|
||||
return false;
|
||||
|
||||
if (p->d)
|
||||
return wifi_dev_is_ready(p->d);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *peer_get_interface(struct peer *p)
|
||||
{
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
if (p->d)
|
||||
return wifi_dev_get_interface(p->d);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *peer_get_local_address(struct peer *p)
|
||||
{
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
if (p->d)
|
||||
return wifi_dev_get_local_address(p->d);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *peer_get_remote_address(struct peer *p)
|
||||
{
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
if (p->d)
|
||||
return wifi_dev_get_remote_address(p->d);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void peer_process_wifi(struct peer *p, struct wifi_event *ev)
|
||||
{
|
||||
if (!p || !p->d)
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include "miracled-wifi.h"
|
||||
#include "shl_dlist.h"
|
||||
#include "shl_log.h"
|
||||
#include "shl_util.h"
|
||||
|
||||
struct wifi {
|
||||
sd_event *event;
|
||||
|
@ -69,6 +70,8 @@ struct wifi_dev {
|
|||
char pin[WIFI_PIN_STRLEN + 1];
|
||||
unsigned int provision;
|
||||
|
||||
char *name;
|
||||
|
||||
char *ifname;
|
||||
unsigned int role;
|
||||
|
||||
|
@ -301,7 +304,7 @@ static ssize_t wifi_requestf_retry(struct wifi *w, const char *format, ...)
|
|||
static int wifi_parse_peer(struct wifi *w, size_t len, struct wifi_dev **out)
|
||||
{
|
||||
char buf[512];
|
||||
char *pos, *next;
|
||||
char *pos, *next, *val;
|
||||
int x1, x2, x3, x4, x5, x6, r;
|
||||
struct wifi_dev *d;
|
||||
|
||||
|
@ -336,7 +339,13 @@ static int wifi_parse_peer(struct wifi *w, size_t len, struct wifi_dev **out)
|
|||
if (next)
|
||||
*next = 0;
|
||||
|
||||
log_debug("add info: %s", pos);
|
||||
if ((val = shl_startswith(pos, "device_name="))) {
|
||||
val = strdup(val);
|
||||
if (val) {
|
||||
free(d->name);
|
||||
d->name = val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*out = d;
|
||||
|
@ -1139,6 +1148,7 @@ void wifi_dev_unref(struct wifi_dev *d)
|
|||
|
||||
wifi_dev_set_connected(d, false, false);
|
||||
wifi_dev_lost(d);
|
||||
free(d->name);
|
||||
free(d);
|
||||
}
|
||||
|
||||
|
@ -1244,3 +1254,35 @@ void wifi_dev_disconnect(struct wifi_dev *d)
|
|||
wifi_dev_set_connected(d, false, false);
|
||||
wifi_dev_stop(d);
|
||||
}
|
||||
|
||||
const char *wifi_dev_get_name(struct wifi_dev *d)
|
||||
{
|
||||
if (!d)
|
||||
return NULL;
|
||||
|
||||
return d->name;
|
||||
}
|
||||
|
||||
const char *wifi_dev_get_interface(struct wifi_dev *d)
|
||||
{
|
||||
if (!wifi_dev_is_ready(d))
|
||||
return NULL;
|
||||
|
||||
return d->ifname;
|
||||
}
|
||||
|
||||
const char *wifi_dev_get_local_address(struct wifi_dev *d)
|
||||
{
|
||||
if (!wifi_dev_is_ready(d))
|
||||
return NULL;
|
||||
|
||||
return d->local_addr;
|
||||
}
|
||||
|
||||
const char *wifi_dev_get_remote_address(struct wifi_dev *d)
|
||||
{
|
||||
if (!wifi_dev_is_ready(d))
|
||||
return NULL;
|
||||
|
||||
return d->remote_addr;
|
||||
}
|
||||
|
|
|
@ -123,4 +123,9 @@ int wifi_dev_connect(struct wifi_dev *d, unsigned int provision,
|
|||
const char *pin);
|
||||
void wifi_dev_disconnect(struct wifi_dev *d);
|
||||
|
||||
const char *wifi_dev_get_name(struct wifi_dev *d);
|
||||
const char *wifi_dev_get_interface(struct wifi_dev *d);
|
||||
const char *wifi_dev_get_local_address(struct wifi_dev *d);
|
||||
const char *wifi_dev_get_remote_address(struct wifi_dev *d);
|
||||
|
||||
#endif /* MIRACLED_WIFI_H */
|
||||
|
|
|
@ -63,8 +63,13 @@ int peer_make_name(unsigned int id, char **out);
|
|||
int peer_new_wifi(struct link *l, struct wifi_dev *d, struct peer **out);
|
||||
void peer_free(struct peer *p);
|
||||
|
||||
void peer_process_wifi(struct peer *p, struct wifi_event *ev);
|
||||
const char *peer_get_friendly_name(struct peer *p);
|
||||
bool peer_is_connected(struct peer *p);
|
||||
const char *peer_get_interface(struct peer *p);
|
||||
const char *peer_get_local_address(struct peer *p);
|
||||
const char *peer_get_remote_address(struct peer *p);
|
||||
|
||||
void peer_process_wifi(struct peer *p, struct wifi_event *ev);
|
||||
|
||||
/* link */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue