mirror of
https://github.com/albfan/miraclecast.git
synced 2025-03-09 23:38:56 +00:00
Merge branch 'agusakov'
This commit is contained in:
commit
640f731d44
18 changed files with 562 additions and 44 deletions
|
@ -308,6 +308,7 @@ static const sd_bus_vtable peer_dbus_vtable[] = {
|
|||
0,
|
||||
SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_SIGNAL("ProvisionDiscovery", "ss", 0),
|
||||
SD_BUS_SIGNAL("GoNegRequest", "ss", 0),
|
||||
SD_BUS_VTABLE_END
|
||||
};
|
||||
|
||||
|
@ -408,6 +409,31 @@ void peer_dbus_provision_discovery(struct peer *p,
|
|||
log_vERR(r);
|
||||
}
|
||||
|
||||
void peer_dbus_go_neg_request(struct peer *p,
|
||||
const char *type,
|
||||
const char *pin)
|
||||
{
|
||||
_shl_free_ char *node = NULL;
|
||||
int r;
|
||||
|
||||
if (!type)
|
||||
return;
|
||||
if (!pin)
|
||||
pin = "";
|
||||
|
||||
node = peer_dbus_get_path(p);
|
||||
if (!node)
|
||||
return;
|
||||
|
||||
r = sd_bus_emit_signal(p->l->m->bus,
|
||||
node,
|
||||
"org.freedesktop.miracle.wifi.Peer",
|
||||
"GoNegRequest",
|
||||
"ss", type, pin);
|
||||
if (r < 0)
|
||||
log_vERR(r);
|
||||
}
|
||||
|
||||
void peer_dbus_formation_failure(struct peer *p, const char *reason)
|
||||
{
|
||||
_shl_free_ char *node = NULL;
|
||||
|
|
|
@ -200,6 +200,16 @@ void peer_supplicant_provision_discovery(struct peer *p,
|
|||
peer_dbus_provision_discovery(p, prov, pin);
|
||||
}
|
||||
|
||||
void peer_supplicant_go_neg_request(struct peer *p,
|
||||
const char *prov,
|
||||
const char *pin)
|
||||
{
|
||||
if (!p || !p->public)
|
||||
return;
|
||||
|
||||
peer_dbus_go_neg_request(p, prov, pin);
|
||||
}
|
||||
|
||||
void peer_supplicant_formation_failure(struct peer *p,
|
||||
const char *reason)
|
||||
{
|
||||
|
|
|
@ -94,6 +94,17 @@ struct supplicant {
|
|||
bool p2p_scanning : 1;
|
||||
};
|
||||
|
||||
/* Device Password ID */
|
||||
enum wps_dev_password_id {
|
||||
DEV_PW_DEFAULT = 0x0000,
|
||||
DEV_PW_USER_SPECIFIED = 0x0001,
|
||||
DEV_PW_MACHINE_SPECIFIED = 0x0002,
|
||||
DEV_PW_REKEY = 0x0003,
|
||||
DEV_PW_PUSHBUTTON = 0x0004,
|
||||
DEV_PW_REGISTRAR_SPECIFIED = 0x0005,
|
||||
DEV_PW_NFC_CONNECTION_HANDOVER = 0x0007
|
||||
};
|
||||
|
||||
static void supplicant_failed(struct supplicant *s);
|
||||
static void supplicant_peer_drop_group(struct supplicant_peer *sp);
|
||||
|
||||
|
@ -998,11 +1009,50 @@ static void supplicant_event_p2p_prov_disc_pbc_req(struct supplicant *s,
|
|||
free(sp->pin);
|
||||
sp->pin = NULL;
|
||||
|
||||
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
|
||||
}
|
||||
|
||||
static void supplicant_event_p2p_go_neg_request(struct supplicant *s,
|
||||
struct wpas_message *ev)
|
||||
{
|
||||
struct supplicant_peer *sp;
|
||||
const char *mac;
|
||||
int r;
|
||||
|
||||
|
||||
r = wpas_message_read(ev, "s", &mac);
|
||||
if (r < 0) {
|
||||
log_debug("no p2p-mac in P2P-GO-NEG-REQUEST information: %s",
|
||||
wpas_message_get_raw(ev));
|
||||
return;
|
||||
}
|
||||
|
||||
sp = find_peer_by_p2p_mac(s, mac);
|
||||
if (!sp) {
|
||||
log_debug("stale P2P-GO-NEG-REQUEST: %s",
|
||||
wpas_message_get_raw(ev));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* prov should be set by previous
|
||||
* P2P-PROV-DISC-PBC-REQ
|
||||
* P2P-PROV-DISC-SHOW-PIN
|
||||
* or P2P-PROV-DISC-ENTER-PIN
|
||||
* if not set pbc mode
|
||||
*/
|
||||
|
||||
if (!sp->prov) {
|
||||
sp->prov = strdup("pbc");
|
||||
free(sp->pin);
|
||||
sp->pin = NULL;
|
||||
}
|
||||
|
||||
if (!sp->g) {
|
||||
log_debug("PBC provision discovery for %s", mac);
|
||||
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
|
||||
log_debug("GO Negotiation Request from %s", mac);
|
||||
peer_supplicant_go_neg_request(sp->p, sp->prov, sp->pin);
|
||||
} else {
|
||||
log_debug("PBC provision discovery for already connected peer %s",
|
||||
log_debug("GO Negotiation Request from already connected peer %s",
|
||||
mac);
|
||||
}
|
||||
}
|
||||
|
@ -1051,13 +1101,7 @@ static void supplicant_event_p2p_prov_disc_show_pin(struct supplicant *s,
|
|||
free(sp->pin);
|
||||
sp->pin = u;
|
||||
|
||||
if (!sp->g) {
|
||||
log_debug("DISPLAY provision discovery for %s", mac);
|
||||
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
|
||||
} else {
|
||||
log_debug("DISPLAY provision discovery for already connected peer %s",
|
||||
mac);
|
||||
}
|
||||
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
|
||||
}
|
||||
|
||||
static void supplicant_event_p2p_prov_disc_enter_pin(struct supplicant *s,
|
||||
|
@ -1091,13 +1135,7 @@ static void supplicant_event_p2p_prov_disc_enter_pin(struct supplicant *s,
|
|||
free(sp->pin);
|
||||
sp->pin = NULL;
|
||||
|
||||
if (!sp->g) {
|
||||
log_debug("PIN provision discovery for %s", mac);
|
||||
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
|
||||
} else {
|
||||
log_debug("PIN provision discovery for already connected peer %s",
|
||||
mac);
|
||||
}
|
||||
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
|
||||
}
|
||||
|
||||
static void supplicant_event_p2p_go_neg_success(struct supplicant *s,
|
||||
|
@ -1340,6 +1378,14 @@ static void supplicant_event_ap_sta_disconnected(struct supplicant *s,
|
|||
return;
|
||||
}
|
||||
|
||||
if (sp->s->pending == sp) {
|
||||
sp->s->pending = NULL;
|
||||
if (sp->p->connected)
|
||||
peer_supplicant_connected_changed(sp->p, false);
|
||||
else
|
||||
peer_supplicant_formation_failure(sp->p, "disconnected");
|
||||
}
|
||||
|
||||
log_debug("unbind peer %s from its group", p2p_mac);
|
||||
supplicant_peer_drop_group(sp);
|
||||
}
|
||||
|
@ -1394,6 +1440,8 @@ static void supplicant_event(struct supplicant *s, struct wpas_message *m)
|
|||
supplicant_event_p2p_prov_disc_enter_pin(s, m);
|
||||
else if (!strcmp(name, "P2P-GO-NEG-SUCCESS"))
|
||||
supplicant_event_p2p_go_neg_success(s, m);
|
||||
else if (!strcmp(name, "P2P-GO-NEG-REQUEST"))
|
||||
supplicant_event_p2p_go_neg_request(s, m);
|
||||
else if (!strcmp(name, "P2P-GROUP-STARTED"))
|
||||
supplicant_event_p2p_group_started(s, m);
|
||||
else if (!strcmp(name, "P2P-GROUP-REMOVED"))
|
||||
|
@ -1621,7 +1669,7 @@ static int supplicant_status_fn(struct wpas *w,
|
|||
|
||||
r = wpas_message_append(m, "ss",
|
||||
"device_name",
|
||||
s->l->friendly_name ? : "unknown");
|
||||
s->l->friendly_name ? : "Miracle");
|
||||
if (r < 0) {
|
||||
log_vERR(r);
|
||||
goto error;
|
||||
|
|
|
@ -39,6 +39,8 @@
|
|||
#include "util.h"
|
||||
#include "wifid.h"
|
||||
|
||||
#define DO_NOT_RELY_UDEV 1
|
||||
|
||||
const char *arg_wpa_bindir = "/usr/bin";
|
||||
unsigned int arg_wpa_loglevel = LOG_NOTICE;
|
||||
|
||||
|
@ -97,9 +99,9 @@ static void manager_add_udev_link(struct manager *m,
|
|||
|
||||
link_set_friendly_name(l, m->friendly_name);
|
||||
|
||||
#if 0
|
||||
#if DO_NOT_RELY_UDEV
|
||||
if (udev_device_has_tag(d, "miracle"))
|
||||
#endif
|
||||
#endif
|
||||
link_set_managed(l, true);
|
||||
}
|
||||
|
||||
|
@ -135,10 +137,14 @@ static int manager_udev_fn(sd_event_source *source,
|
|||
link_renamed(l, ifname);
|
||||
}
|
||||
|
||||
#if DO_NOT_RELY_UDEV
|
||||
link_set_managed(l, true);
|
||||
#else
|
||||
if (udev_device_has_tag(d, "miracle"))
|
||||
link_set_managed(l, true);
|
||||
else
|
||||
link_set_managed(l, false);
|
||||
#endif
|
||||
} else {
|
||||
manager_add_udev_link(m, d);
|
||||
}
|
||||
|
@ -331,7 +337,7 @@ static void manager_read_name(struct manager *m)
|
|||
|
||||
r = sd_bus_message_read(rep, "s", &name);
|
||||
if (r < 0)
|
||||
goto error;
|
||||
name = "undefined";
|
||||
|
||||
if (shl_isempty(name)) {
|
||||
log_warning("no hostname set on systemd.hostname1, using: %s",
|
||||
|
|
|
@ -101,6 +101,9 @@ void peer_supplicant_wfd_subelements_changed(struct peer *p);
|
|||
void peer_supplicant_provision_discovery(struct peer *p,
|
||||
const char *prov,
|
||||
const char *pin);
|
||||
void peer_supplicant_go_neg_request(struct peer *p,
|
||||
const char *prov,
|
||||
const char *pin);
|
||||
void peer_supplicant_formation_failure(struct peer *p, const char *reason);
|
||||
void peer_supplicant_connected_changed(struct peer *p, bool connected);
|
||||
|
||||
|
@ -109,6 +112,9 @@ void peer_dbus_properties_changed(struct peer *p, const char *prop, ...);
|
|||
void peer_dbus_provision_discovery(struct peer *p,
|
||||
const char *prov,
|
||||
const char *pin);
|
||||
void peer_dbus_go_neg_request(struct peer *p,
|
||||
const char *type,
|
||||
const char *pin);
|
||||
void peer_dbus_formation_failure(struct peer *p, const char *reason);
|
||||
void peer_dbus_added(struct peer *p);
|
||||
void peer_dbus_removed(struct peer *p);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue