more code cleanup
[oweals/gnunet.git] / src / transport / plugin_transport_template.c
index 1d949f3450bdb66f3b9e9def07eb5af9b11a4baf..f6a02fe873fdcebf4a65abf2f55a302debbdd496 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -122,70 +122,52 @@ struct Plugin
    */
   struct Session *sessions;
 
-  /**
-   * Handle for the statistics service.
-   */
-  struct GNUNET_STATISTICS_Handle *statistics;
-
 };
 
-
-
-/**
- * Function that can be used by the transport service to validate that
- * another peer is reachable at a particular address (even if we
- * already have a connection to this peer, this function is required
- * to establish a new one).
- *
- * @param cls closure
- * @param target who should receive this message
- * @param challenge challenge code to use
- * @param addrlen length of the address
- * @param addr the address
- * @param timeout how long should we try to transmit these?
- * @return GNUNET_OK if the transmission has been scheduled
- */
-static int
-template_plugin_validate (void *cls,
-                         const struct GNUNET_PeerIdentity *target,
-                         uint32_t challenge,
-                         struct GNUNET_TIME_Relative timeout,
-                         const void *addr,
-                         size_t addrlen)
-{
-  // FIXME
-  return GNUNET_SYSERR;
-}
-
-
 /**
  * Function that can be used by the transport service to transmit
  * a message using the plugin.
  *
  * @param cls closure
- * @param service_context value passed to the transport-service
- *        to identify the neighbour
  * @param target who should receive this message
  * @param priority how important is the message
- * @param msg the message to transmit
+ * @param msgbuf the message to transmit
+ * @param msgbuf_size number of bytes in 'msgbuf'
  * @param timeout when should we time out 
+ * @param session which session must be used (or NULL for "any")
+ * @param addr the address to use (can be NULL if the plugin
+ *                is "on its own" (i.e. re-use existing TCP connection))
+ * @param addrlen length of the address in bytes
+ * @param force_address GNUNET_YES if the plugin MUST use the given address,
+ *                otherwise the plugin may use other addresses or
+ *                existing connections (if available)
  * @param cont continuation to call once the message has
  *        been transmitted (or if the transport is ready
  *        for the next transmission call; or if the
  *        peer disconnected...)
  * @param cont_cls closure for cont
+ * @return number of bytes used (on the physical network, with overheads);
+ *         -1 on hard errors (i.e. address invalid); 0 is a legal value
+ *         and does NOT mean that the message was not transmitted (DV)
  */
-static void 
+static ssize_t
 template_plugin_send (void *cls,
-                      struct ReadyList *service_context,
-                      const struct GNUNET_PeerIdentity *target,
-                     unsigned int priority,
-                      const struct GNUNET_MessageHeader *msg,
+                      const struct GNUNET_PeerIdentity *
+                      target,
+                      const char *msgbuf,
+                      size_t msgbuf_size,
+                      unsigned int priority,
                       struct GNUNET_TIME_Relative timeout,
-                      GNUNET_TRANSPORT_TransmitContinuation cont,
-                      void *cont_cls)
+                     struct Session *session,
+                      const void *addr,
+                      size_t addrlen,
+                      int force_address,
+                      GNUNET_TRANSPORT_TransmitContinuation
+                      cont, void *cont_cls)
 {
-  //  struct Plugin *plugin = cls;
+  int bytes_sent = 0;
+  /*  struct Plugin *plugin = cls; */
+  return bytes_sent;
 }
 
 
@@ -196,17 +178,11 @@ template_plugin_send (void *cls,
  * (and their continuationc).
  *
  * @param cls closure
- * @param service_context must correspond to the service context
- *        of the corresponding Transmit call; the plugin should
- *        not cancel a send call made with a different service
- *        context pointer!  Never NULL.
- * @param target peer for which the last transmission is
- *        to be cancelled
+ * @param target peer from which to disconnect
  */
 static void
-template_plugin_cancel (void *cls,
-                        struct ReadyList *service_context,
-                        const struct GNUNET_PeerIdentity *target)
+template_plugin_disconnect (void *cls,
+                            const struct GNUNET_PeerIdentity *target)
 {
   // struct Plugin *plugin = cls;
   // FIXME
@@ -240,23 +216,6 @@ template_plugin_address_pretty_printer (void *cls,
   asc (asc_cls, NULL);
 }
 
-/**
- * Set a quota for receiving data from the given peer; this is a
- * per-transport limit.  The transport should limit its read/select
- * calls to stay below the quota (in terms of incoming data).
- *
- * @param cls closure
- * @param target the peer for whom the quota is given
- * @param quota_in quota for receiving/sending data in bytes per ms
- */
-static void
-template_plugin_set_receive_quota (void *cls,
-                                   const struct GNUNET_PeerIdentity *target,
-                                   uint32_t quota_in)
-{
-  // struct Plugin *plugin = cls;
-  // FIXME!
-}
 
 
 /**
@@ -273,17 +232,40 @@ template_plugin_set_receive_quota (void *cls,
  */
 static int
 template_plugin_address_suggested (void *cls,
-                                   const void *addr, size_t addrlen)
+                                  const void *addr,
+                                  size_t addrlen)
 {
-  // struct Plugin *plugin = cls;
+  /* struct Plugin *plugin = cls; */
 
   /* check if the address is plausible; if so,
      add it to our list! */
-  // FIXME!
   return GNUNET_OK;
 }
 
 
+/**
+ * Function called for a quick conversion of the binary address to
+ * a numeric address.  Note that the caller must not free the 
+ * address and that the next call to this function is allowed
+ * to override the address again.
+ *
+ * @param cls closure
+ * @param addr binary address
+ * @param addrlen length of the address
+ * @return string representing the same address 
+ */
+static const char* 
+template_plugin_address_to_string (void *cls,
+                                  const void *addr,
+                                  size_t addrlen)
+{
+  GNUNET_break (0);
+  return NULL;
+}
+
+
+
+
 /**
  * Entry point for the plugin.
  */
@@ -296,16 +278,13 @@ gnunet_plugin_transport_template_init (void *cls)
 
   plugin = GNUNET_malloc (sizeof (struct Plugin));
   plugin->env = env;
-  plugin->statistics = NULL;
   api = GNUNET_malloc (sizeof (struct GNUNET_TRANSPORT_PluginFunctions));
   api->cls = plugin;
-  api->validate = &template_plugin_validate;
   api->send = &template_plugin_send;
-  api->cancel = &template_plugin_cancel;
+  api->disconnect = &template_plugin_disconnect;
   api->address_pretty_printer = &template_plugin_address_pretty_printer;
-  api->set_receive_quota = &template_plugin_set_receive_quota;
-  api->address_suggested = &template_plugin_address_suggested;
-  api->cost_estimate = 42;      // FIXME
+  api->check_address = &template_plugin_address_suggested;
+  api->address_to_string = &template_plugin_address_to_string;
   return api;
 }