1
0
Fork 0
mirror of https://github.com/albfan/miraclecast.git synced 2025-03-09 23:38:56 +00:00

Separate go_neg_request and provision_discovery

Signed-off-by: Andrey Gusakov <andrey.gusakov@cogentembedded.com>
This commit is contained in:
Andrey Gusakov 2014-09-20 09:15:02 +04:00 committed by albfan
parent 563a415a24
commit 0d54cd4e0b
7 changed files with 75 additions and 1 deletions

View file

@ -975,6 +975,17 @@ static int ctl_wifi_peer_fn(sd_bus *bus,
return cli_log_parser(r);
ctl_fn_peer_provision_discovery(p, prov, pin);
} else if (sd_bus_message_is_signal(m,
"org.freedesktop.miracle.wifi.Peer",
"GoNegRequest")) {
/* connection request */
const char *prov, *pin;
r = sd_bus_message_read(m, "ss", &prov, &pin);
if (r < 0)
return cli_log_parser(r);
ctl_fn_peer_go_neg_request(p, prov, pin);
} else if (sd_bus_message_is_signal(m,
"org.freedesktop.miracle.wifi.Peer",
"FormationFailure")) {

View file

@ -251,6 +251,9 @@ void ctl_fn_peer_free(struct ctl_peer *p);
void ctl_fn_peer_provision_discovery(struct ctl_peer *p,
const char *prov,
const char *pin);
void ctl_fn_peer_go_neg_request(struct ctl_peer *p,
const char *prov,
const char *pin);
void ctl_fn_peer_formation_failure(struct ctl_peer *p, const char *reason);
void ctl_fn_peer_connected(struct ctl_peer *p);
void ctl_fn_peer_disconnected(struct ctl_peer *p);

View file

@ -440,6 +440,18 @@ void ctl_fn_peer_provision_discovery(struct ctl_peer *p,
if (cli_running())
cli_printf("[" CLI_YELLOW "PROV" CLI_DEFAULT "] Peer: %s Type: %s PIN: %s\n",
p->label, prov, pin);
}
void ctl_fn_peer_go_neg_request(struct ctl_peer *p,
const char *prov,
const char *pin)
{
if (p->l != running_link || shl_isempty(p->wfd_subelements))
return;
if (cli_running())
cli_printf("[" CLI_YELLOW "GO NEG" CLI_DEFAULT "] Peer: %s Type: %s PIN: %s\n",
p->label, prov, pin);
if (!running_peer) {
/* auto accept any incoming connection attempt */

View file

@ -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;

View file

@ -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)
{

View file

@ -1008,6 +1008,8 @@ static void supplicant_event_p2p_prov_disc_pbc_req(struct supplicant *s,
sp->prov = t;
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,
@ -1048,7 +1050,7 @@ static void supplicant_event_p2p_go_neg_request(struct supplicant *s,
if (!sp->g) {
log_debug("GO Negotiation Request from %s", mac);
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
peer_supplicant_go_neg_request(sp->p, sp->prov, sp->pin);
} else {
log_debug("GO Negotiation Request from already connected peer %s",
mac);
@ -1098,6 +1100,8 @@ static void supplicant_event_p2p_prov_disc_show_pin(struct supplicant *s,
sp->prov = t;
free(sp->pin);
sp->pin = u;
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
}
static void supplicant_event_p2p_prov_disc_enter_pin(struct supplicant *s,
@ -1130,6 +1134,8 @@ static void supplicant_event_p2p_prov_disc_enter_pin(struct supplicant *s,
sp->prov = t;
free(sp->pin);
sp->pin = NULL;
peer_supplicant_provision_discovery(sp->p, sp->prov, sp->pin);
}
static void supplicant_event_p2p_go_neg_success(struct supplicant *s,

View file

@ -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);