- use proper signedness
[oweals/gnunet.git] / src / transport / plugin_transport_bluetooth.c
index 5ea4393104526f8f72e2c26bd5f82de3dbc89c1c..a7d3cf3f5fef9d8e1d7f3f7f2300e824284fb4b9 100644 (file)
@@ -730,7 +730,7 @@ create_session (struct MacEndpoint *endpoint,
     }
   GNUNET_STATISTICS_update (endpoint->plugin->env->stats, _("# Bluetooth sessions allocated"), 1,
                             GNUNET_NO);
-  session = GNUNET_malloc (sizeof (struct Session));
+  session = GNUNET_new (struct Session);
   GNUNET_CONTAINER_DLL_insert_tail (endpoint->sessions_head,
                                     endpoint->sessions_tail,
                                    session);
@@ -887,7 +887,7 @@ fragmentmessage_timeout (void *cls,
 static void
 send_with_fragmentation (struct MacEndpoint *endpoint,
                         struct GNUNET_TIME_Relative timeout,
-                        const struct GNUNET_PeerIdentity *target,                      
+                        const struct GNUNET_PeerIdentity *target,
                         const struct GNUNET_MessageHeader *msg,
                         size_t payload_size,
                         GNUNET_TRANSPORT_TransmitContinuation cont, void *cont_cls)
@@ -897,7 +897,7 @@ send_with_fragmentation (struct MacEndpoint *endpoint,
   struct Plugin *plugin;
 
   plugin = endpoint->plugin;
-  fm = GNUNET_malloc (sizeof (struct FragmentMessage));
+  fm = GNUNET_new (struct FragmentMessage);
   fm->macendpoint = endpoint;
   fm->target = *target;
   fm->size_payload = payload_size;
@@ -1001,7 +1001,7 @@ create_macendpoint (struct Plugin *plugin,
   for (pos = plugin->mac_head; NULL != pos; pos = pos->next)
     if (0 == memcmp (addr, &pos->addr, sizeof (struct WlanAddress)))
       return pos;
-  pos = GNUNET_malloc (sizeof (struct MacEndpoint));
+  pos = GNUNET_new (struct MacEndpoint);
   pos->addr = *addr;
   pos->plugin = plugin;
   pos->defrag =
@@ -1085,7 +1085,7 @@ bluetooth_plugin_get_session (void *cls,
  * @param target peer from which to disconnect
  */
 static void
-bluetooth_plugin_disconnect (void *cls, const struct GNUNET_PeerIdentity *target)
+bluetooth_plugin_disconnect_peer (void *cls, const struct GNUNET_PeerIdentity *target)
 {
   struct Plugin *plugin = cls;
   struct Session *session;
@@ -1094,14 +1094,46 @@ bluetooth_plugin_disconnect (void *cls, const struct GNUNET_PeerIdentity *target
   for (endpoint = plugin->mac_head; NULL != endpoint; endpoint = endpoint->next)
     for (session = endpoint->sessions_head; NULL != session; session = session->next)
       if (0 == memcmp (target, &session->target,
-                      sizeof (struct GNUNET_PeerIdentity)))
+        sizeof (struct GNUNET_PeerIdentity)))
       {
         free_session (session);
-       break; /* inner-loop only (in case peer has another MAC as well!) */
+        break; /* inner-loop only (in case peer has another MAC as well!) */
       }
 }
 
 
+/**
+ * Function that can be used to force the plugin to disconnect
+ * from the given peer and cancel all previous transmissions
+ * (and their continuation).
+ *
+ * @param cls closure
+ * @param session session to disconnect
+ */
+static int
+bluetooth_plugin_disconnect_session (void *cls,
+                                     struct Session *session)
+{
+  free_session (session);
+  return GNUNET_OK;
+}
+
+
+/**
+ * Function that is called to get the keepalive factor.
+ * GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT is divided by this number to
+ * calculate the interval between keepalive packets.
+ *
+ * @param cls closure with the `struct Plugin`
+ * @return keepalive factor
+ */
+static unsigned int
+bluetooth_query_keepalive_factor (void *cls)
+{
+  return 3;
+}
+
+
 /**
  * Function that can be used by the transport service to transmit
  * a message using the plugin.   Note that in the case of a
@@ -1758,7 +1790,7 @@ bluetooth_string_to_address (void *cls, const char *addr, uint16_t addrlen,
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
-  wa = GNUNET_malloc (sizeof (struct WlanAddress));
+  wa = GNUNET_new (struct WlanAddress);
   for (i=0;i<6;i++)
     wa->mac.mac[i] = a[i];
   wa->options = htonl (0);
@@ -1767,6 +1799,18 @@ bluetooth_string_to_address (void *cls, const char *addr, uint16_t addrlen,
   return GNUNET_OK;
 }
 
+static void
+bluetooth_plugin_update_session_timeout (void *cls,
+                                  const struct GNUNET_PeerIdentity *peer,
+                                  struct Session *session)
+{
+  if (GNUNET_SCHEDULER_NO_TASK != session->timeout_task)
+    GNUNET_SCHEDULER_cancel (session->timeout_task);
+  session->timeout_task = GNUNET_SCHEDULER_add_delayed (
+      GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, &session_timeout, session);
+}
+
+
 
 /**
  * Entry point for the plugin.
@@ -1789,7 +1833,7 @@ libgnunet_plugin_transport_bluetooth_init (void *cls)
   {
     /* run in 'stub' mode (i.e. as part of gnunet-peerinfo), don't fully
        initialze the plugin or the API */
-    api = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_PluginFunctions));
+    api = GNUNET_new (struct GNUNET_TRANSPORT_PluginFunctions);
     api->cls = NULL;
     api->address_pretty_printer = &bluetooth_plugin_address_pretty_printer;
     api->address_to_string = &bluetooth_plugin_address_to_string;
@@ -1831,7 +1875,7 @@ libgnunet_plugin_transport_bluetooth_init (void *cls)
     return NULL;
   }
 
-  plugin = GNUNET_malloc (sizeof (struct Plugin));
+  plugin = GNUNET_new (struct Plugin);
   plugin->interface = interface;
   plugin->env = env;
   GNUNET_STATISTICS_set (plugin->env->stats, _("# Bluetooth sessions allocated"),
@@ -1889,16 +1933,19 @@ libgnunet_plugin_transport_bluetooth_init (void *cls)
     GNUNET_assert (0);
   }
 
-  api = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_PluginFunctions));
+  api = GNUNET_new (struct GNUNET_TRANSPORT_PluginFunctions);
   api->cls = plugin;
   api->send = &bluetooth_plugin_send;
   api->get_session = &bluetooth_plugin_get_session;
-  api->disconnect = &bluetooth_plugin_disconnect;
+  api->disconnect_peer = &bluetooth_plugin_disconnect_peer;
+  api->disconnect_session = &bluetooth_plugin_disconnect_session;
+  api->query_keepalive_factor = &bluetooth_query_keepalive_factor;
   api->address_pretty_printer = &bluetooth_plugin_address_pretty_printer;
   api->check_address = &bluetooth_plugin_address_suggested;
   api->address_to_string = &bluetooth_plugin_address_to_string;;
   api->string_to_address = &bluetooth_string_to_address;
   api->get_network = &bluetooth_get_network;
+  api->update_session_timeout = &bluetooth_plugin_update_session_timeout;
 
   return api;
 }