connman - tenatively add remove api - needs hooking into ui for "forget"

This commit is contained in:
Carsten Haitzler 2013-10-22 07:54:38 +01:00
parent fdbb4525a2
commit 5f60606ffe
2 changed files with 44 additions and 6 deletions

View File

@ -69,6 +69,7 @@ struct Connman_Service
{
Eldbus_Pending *connect;
Eldbus_Pending *disconnect;
Eldbus_Pending *remov;
void *data;
} pending;
};
@ -93,6 +94,7 @@ typedef void (*Econnman_Simple_Cb)(void *data, const char *error);
bool econnman_service_connect(struct Connman_Service *cs, Econnman_Simple_Cb cb, void *data);
bool econnman_service_disconnect(struct Connman_Service *cs, Econnman_Simple_Cb cb, void *data);
bool econnman_service_remove(struct Connman_Service *cs, Econnman_Simple_Cb cb, void *data);
void econnman_powered_set(struct Connman_Manager *cm, Eina_Bool powered);

View File

@ -247,6 +247,11 @@ static void _service_free(struct Connman_Service *cs)
eldbus_pending_cancel(cs->pending.disconnect);
free(cs->pending.data);
}
if (cs->pending.remov)
{
eldbus_pending_cancel(cs->pending.remov);
free(cs->pending.data);
}
free(cs->name);
_eina_str_array_clean(cs->security);
@ -294,6 +299,7 @@ static void _service_connection_cb(void *data, const Eldbus_Message *msg,
cd->cs->pending.connect = NULL;
cd->cs->pending.disconnect = NULL;
cd->cs->pending.remov = NULL;
cd->cs->pending.data = NULL;
free(cd);
@ -306,10 +312,10 @@ bool econnman_service_connect(struct Connman_Service *cs,
EINA_SAFETY_ON_NULL_RETURN_VAL(cs, false);
if (cs->pending.connect || cs->pending.disconnect)
if (cs->pending.connect || cs->pending.disconnect || cs->pending.remov)
{
ERR("Pending connection: connect=%p disconnect=%p", cs->pending.connect,
cs->pending.disconnect);
ERR("Pending connection: connect=%p disconnect=%p remov=%p", cs->pending.connect,
cs->pending.disconnect, cs->pending.remov);
return false;
}
@ -336,10 +342,10 @@ bool econnman_service_disconnect(struct Connman_Service *cs,
EINA_SAFETY_ON_NULL_RETURN_VAL(cs, false);
if (cs->pending.connect || cs->pending.disconnect)
if (cs->pending.connect || cs->pending.disconnect || cs->pending.remov)
{
ERR("Pending connection: connect=%p disconnect=%p", cs->pending.connect,
cs->pending.disconnect);
ERR("Pending connection: connect=%p disconnect=%p remov=%p", cs->pending.connect,
cs->pending.disconnect, cs->pending.remov);
return false;
}
@ -359,6 +365,36 @@ fail:
return false;
}
bool econnman_service_remove(struct Connman_Service *cs,
Econnman_Simple_Cb cb, void *data)
{
struct connection_data *cd;
EINA_SAFETY_ON_NULL_RETURN_VAL(cs, false);
if (cs->pending.connect || cs->pending.disconnect || cs->pending.remov)
{
ERR("Pending connection: connect=%p disconnect=%p remov=%p", cs->pending.connect,
cs->pending.disconnect, cs->pending.remov);
return false;
}
cd = calloc(1, sizeof(*cd));
EINA_SAFETY_ON_NULL_GOTO(cd, fail);
cd->cs = cs;
cd->cb = cb;
cd->user_data = data;
cs->pending.connect = eldbus_proxy_call(cs->service_iface, "Remove",
_service_connection_cb, cd,
-1, "");
return true;
fail:
return false;
}
static struct Connman_Service *_manager_find_service_stringshared(
struct Connman_Manager *cm, const char *path)
{