- minor renamings
[oweals/gnunet.git] / src / dv / plugin_transport_dv.c
index 142bfaa3dc53338f62cb4383e2d72cfb952f0aa8..d3187664ac39dbd74a15a6a2930fcdb9423d19eb 100644 (file)
@@ -70,7 +70,7 @@ struct PendingRequest
   GNUNET_TRANSPORT_TransmitContinuation transmit_cont;
 
   /**
-   * Closure for transmit_cont.
+   * Closure for @e transmit_cont.
    */
   void *transmit_cont_cls;
 
@@ -84,6 +84,10 @@ struct PendingRequest
    */
   struct Session *session;
 
+  /**
+   * Number of bytes to transmit.
+   */
+  size_t size;
 };
 
 
@@ -113,6 +117,8 @@ struct Session
    */
   struct PendingRequest *pr_tail;
 
+  struct GNUNET_HELLO_Address *address;
+
   /**
    * To whom are we talking to.
    */
@@ -187,10 +193,7 @@ notify_distance_change (struct Session *session)
   ats.type = htonl ((uint32_t) GNUNET_ATS_QUALITY_NET_DISTANCE);
   ats.value = htonl (session->distance);
   plugin->env->update_address_metrics (plugin->env->cls,
-                                      &session->sender,
-                                      NULL, 0,
-                                      session,
-                                      &ats, 1);
+      session->address, session, &ats, 1);
 }
 
 
@@ -214,14 +217,16 @@ unbox_cb (void *cls,
   ats.type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
   ats.value = htonl (session->distance);
   session->active = GNUNET_YES;
-  plugin->env->receive (plugin->env->cls,
-                       &session->sender,
-                        message,
-                       session, "", 0);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Delivering message of type %u with %u bytes from peer `%s'\n",
+       ntohs (message->type),
+       ntohs (message->size),
+       GNUNET_i2s (&session->sender));
+
+  plugin->env->receive (plugin->env->cls, session->address, session,
+                        message);
   plugin->env->update_address_metrics (plugin->env->cls,
-                                       &session->sender, NULL,
-                                       0, session,
-                                       &ats, 1);
+      session->address, session, &ats, 1);
   return GNUNET_OK;
 }
 
@@ -245,8 +250,7 @@ handle_dv_message_received (void *cls,
   struct Session *session;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received `%s' message for peer `%s': new distance %u\n",
-       "DV_MESSAGE_RECEIVED",
+       "Received DV_MESSAGE_RECEIVED message for peer `%s': new distance %u\n",
        GNUNET_i2s (sender), distance);
   session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
                                               sender);
@@ -258,6 +262,8 @@ handle_dv_message_received (void *cls,
   if (GNUNET_MESSAGE_TYPE_DV_BOX == ntohs (msg->type))
   {
     /* need to unbox using MST */
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Unboxing DV message using MST\n");
     GNUNET_SERVER_mst_receive (plugin->mst,
                               session,
                               (const char *) &msg[1],
@@ -269,13 +275,14 @@ handle_dv_message_received (void *cls,
   ats.type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
   ats.value = htonl (distance);
   session->active = GNUNET_YES;
-  plugin->env->receive (plugin->env->cls, sender,
-                        msg,
-                        session, "", 0);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Delivering message of type %u with %u bytes from peer `%s'\n",
+       ntohs (msg->type),
+       ntohs (msg->size),
+       GNUNET_i2s (sender));
+  plugin->env->receive (plugin->env->cls, session->address, session, msg);
   plugin->env->update_address_metrics (plugin->env->cls,
-                                      sender, "",
-                                       0, session,
-                                       &ats, 1);
+      session->address, session, &ats, 1);
 }
 
 
@@ -319,6 +326,8 @@ handle_dv_connect (void *cls,
   }
 
   session = GNUNET_new (struct Session);
+  session->address = GNUNET_HELLO_address_allocate (peer, PLUGIN_NAME,
+      NULL, 0, GNUNET_HELLO_ADDRESS_INFO_NONE);
   session->sender = *peer;
   session->plugin = plugin;
   session->distance = distance;
@@ -329,9 +338,10 @@ handle_dv_connect (void *cls,
                                                    GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Creating new session %p for peer `%s'\n",
+       "Creating new DV session %p for peer `%s' at distance %u\n",
        session,
-       GNUNET_i2s (peer));
+       GNUNET_i2s (peer),
+       distance);
 
   /* Notify transport and ats about new connection */
   ats[0].type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
@@ -339,9 +349,7 @@ handle_dv_connect (void *cls,
   ats[1].type = htonl (GNUNET_ATS_NETWORK_TYPE);
   ats[1].value = htonl ((uint32_t) network);
   session->active = GNUNET_YES;
-  plugin->env->session_start (plugin->env->cls, peer,
-                              PLUGIN_NAME,
-                              NULL, 0,
+  plugin->env->session_start (plugin->env->cls, session->address,
                               session, ats, 2);
 }
 
@@ -419,9 +427,11 @@ free_session (struct Session *session)
     if (NULL != pr->transmit_cont)
       pr->transmit_cont (pr->transmit_cont_cls,
                         &session->sender,
-                        GNUNET_SYSERR, 0, 0);
+                        GNUNET_SYSERR,
+                         pr->size, 0);
     GNUNET_free (pr);
   }
+  GNUNET_HELLO_address_free (session->address);
   GNUNET_free (session);
 }
 
@@ -472,7 +482,8 @@ send_finished (void *cls,
   if (NULL != pr->transmit_cont)
     pr->transmit_cont (pr->transmit_cont_cls,
                       &session->sender,
-                      ok, 0, 0);
+                      ok,
+                       pr->size, 0);
   GNUNET_free (pr);
 }
 
@@ -515,6 +526,8 @@ dv_plugin_send (void *cls,
   if (ntohs (msg->size) != msgbuf_size)
   {
     /* need to box */
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Boxing DV message\n");
     box = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader) + msgbuf_size);
     box->type = htons (GNUNET_MESSAGE_TYPE_DV_BOX);
     box->size = htons (sizeof (struct GNUNET_MessageHeader) + msgbuf_size);
@@ -525,13 +538,14 @@ dv_plugin_send (void *cls,
   pr->transmit_cont = cont;
   pr->transmit_cont_cls = cont_cls;
   pr->session = session;
+  pr->size = msgbuf_size;
   GNUNET_CONTAINER_DLL_insert_tail (session->pr_head,
                                    session->pr_tail,
                                    pr);
 
   pr->th = GNUNET_DV_send (plugin->dvh,
                           &session->sender,
-                          msg ,
+                          msg,
                           &send_finished,
                           pr);
   GNUNET_free_non_null (box);
@@ -569,7 +583,8 @@ dv_plugin_disconnect_peer (void *cls,
     if (NULL != pr->transmit_cont)
       pr->transmit_cont (pr->transmit_cont_cls,
                         &session->sender,
-                        GNUNET_SYSERR, 0, 0);
+                        GNUNET_SYSERR,
+                         pr->size, 0);
     GNUNET_free (pr);
   }
   session->active = GNUNET_NO;
@@ -601,7 +616,8 @@ dv_plugin_disconnect_session (void *cls,
     if (NULL != pr->transmit_cont)
       pr->transmit_cont (pr->transmit_cont_cls,
                         &session->sender,
-                        GNUNET_SYSERR, 0, 0);
+                        GNUNET_SYSERR,
+                         pr->size, 0);
     GNUNET_free (pr);
   }
   session->active = GNUNET_NO;
@@ -671,7 +687,7 @@ dv_plugin_address_to_string (void *cls,
  *
  * @param cls closure
  * @param addr pointer to the address
- * @param addrlen length of addr
+ * @param addrlen length of @a addr
  * @return #GNUNET_OK if this is a plausible address for this peer
  *         and transport, #GNUNET_SYSERR if not
  *
@@ -742,14 +758,27 @@ dv_plugin_string_to_address (void *cls,
   return GNUNET_SYSERR;
 }
 
+
+/**
+ * Function that will be called whenever the transport service wants to
+ * notify the plugin that a session is still active and in use and
+ * therefore the session timeout for this session has to be updated
+ *
+ * @param cls closure (`struct Plugin *`)
+ * @param peer which peer was the session for
+ * @param session which session is being updated
+ */
 static void
 dv_plugin_update_session_timeout (void *cls,
                                   const struct GNUNET_PeerIdentity *peer,
                                   struct Session *session)
 {
-
+  /* DV currently doesn't time out like "normal" plugins,
+     so it should be safe to do nothing, right?
+     (or should we add an internal timeout?) */
 }
 
+
 /**
  * Function to obtain the network type for a session
  * FIXME: we should probably look at the network type