connman - tenatively add remove api - needs hooking into ui for "forget"
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Tue, 22 Oct 2013 06:54:38 +0000 (07:54 +0100)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Tue, 22 Oct 2013 06:56:28 +0000 (07:56 +0100)
src/modules/connman/E_Connman.h
src/modules/connman/e_connman.c

index 272233b9fcc65fd9d36fb94c8c867fe4e3f82337..3e58d46656cf45661cc26656e9c915c7242cf413 100644 (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);
 
index 29649a9040fe6f253d5d82379c1b141589742b5c..b0113bdfc38710237a7be689f75ce78d93e516bd 100644 (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)
 {