more code
[oweals/gnunet.git] / src / transport / plugin_transport_unix.c
index 4562d08e522c08badf6c5bfeb764a696dfa06654..55787a7f93e8fb9ea4d15bfcd7c8b11f448a3dd1 100644 (file)
@@ -82,9 +82,10 @@ struct UNIXMessage
 
 struct Session
 {
+  struct GNUNET_PeerIdentity target;
+
   void *addr;
   size_t addrlen;
-  struct GNUNET_PeerIdentity target;
 
   /**
    * Session timeout task
@@ -310,7 +311,7 @@ struct LookupCtx
 };
 
 int lookup_session_it (void *cls,
-                       const GNUNET_HashCode * key,
+                       const struct GNUNET_HashCode * key,
                        void *value)
 {
   struct LookupCtx *lctx = cls;
@@ -347,7 +348,7 @@ lookup_session (struct Plugin *plugin, struct GNUNET_PeerIdentity *sender, const
  * to close a session due to a disconnect or failure to
  * establish a connection.
  *
- * @param session session to close down
+ * @param s session to close down
  */
 static void
 disconnect_session (struct Session *s)
@@ -394,7 +395,7 @@ disconnect_session (struct Session *s)
 }
 
 static int
-get_session_delete_it (void *cls, const GNUNET_HashCode * key, void *value)
+get_session_delete_it (void *cls, const struct GNUNET_HashCode * key, void *value)
 {
   struct Session *s = value;
   disconnect_session (s);
@@ -497,7 +498,6 @@ unix_real_send (void *cls,
   size_t sbs;
   struct sockaddr_un un;
   size_t slen;
-  int retry;
 
   GNUNET_assert (NULL != plugin);
 
@@ -539,7 +539,6 @@ unix_real_send (void *cls,
 
   /* Send the data */
   sent = 0;
-  retry = GNUNET_NO;
   sent = GNUNET_NETWORK_socket_sendto (send_handle, msgbuf, msgbuf_size, sb, sbs);
 
   if ((GNUNET_SYSERR == sent) && ((errno == EAGAIN) || (errno == ENOBUFS)))
@@ -596,7 +595,7 @@ unix_real_send (void *cls,
   /* Calling continuation */
   if (cont != NULL)
   {
-    if ((sent == GNUNET_SYSERR) && (retry == GNUNET_NO))
+    if (sent == GNUNET_SYSERR)
       cont (cont_cls, target, GNUNET_SYSERR);
     if (sent > 0)
       cont (cont_cls, target, GNUNET_OK);
@@ -612,11 +611,8 @@ unix_real_send (void *cls,
     return -1;
   }
   /* failed and retry: return 0 */
-  if ((GNUNET_SYSERR == sent) && (retry == GNUNET_YES))
+  if (GNUNET_SYSERR == sent)
     return 0;
-  /* failed and no retry: return -1 */
-  if ((GNUNET_SYSERR == sent) && (retry == GNUNET_NO))
-    return -1;
   /* default */
   return -1;
 }
@@ -630,7 +626,7 @@ struct gsi_ctx
 
 
 static int
-get_session_it (void *cls, const GNUNET_HashCode * key, void *value)
+get_session_it (void *cls, const struct GNUNET_HashCode * key, void *value)
 {
   struct gsi_ctx *gsi = cls;
   struct Session *s = value;
@@ -677,7 +673,6 @@ unix_plugin_get_session (void *cls,
   }
 
   /* Create a new session */
-
   s = GNUNET_malloc (sizeof (struct Session) + address->address_length);
   s->addr = &s[1];
   s->addrlen = address->address_length;
@@ -757,7 +752,11 @@ unix_plugin_send (void *cls,
   if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_contains_value(plugin->session_map,
       &session->target.hashPubKey, session))
   {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid session for peer `%s' `%s'\n",
+                GNUNET_i2s (&session->target),
+                (char *) session->addr);
     GNUNET_break (0);
+
     return GNUNET_SYSERR;
   }
 
@@ -828,7 +827,7 @@ unix_demultiplexer (struct Plugin *plugin, struct GNUNET_PeerIdentity *sender,
   GNUNET_STATISTICS_set (plugin->env->stats,"# UNIX bytes received",
       plugin->bytes_in_recv, GNUNET_NO);
 
-  addr = GNUNET_HELLO_address_allocate(sender, "unix", un->sun_path, strlen (un->sun_path));
+  addr = GNUNET_HELLO_address_allocate(sender, "unix", un->sun_path, strlen (un->sun_path) + 1);
   s = lookup_session (plugin, sender, un);
   if (NULL == s)
     s = unix_plugin_get_session (plugin, addr);
@@ -1220,7 +1219,8 @@ address_notification (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 
   plugin->env->notify_address (plugin->env->cls, GNUNET_YES,
                                plugin->unix_socket_path,
-                               strlen (plugin->unix_socket_path) + 1);
+                               strlen (plugin->unix_socket_path) + 1,
+                               "unix");
 }
 
 
@@ -1234,15 +1234,14 @@ session_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   struct Session *s = cls;
 
   s->timeout_task = GNUNET_SCHEDULER_NO_TASK;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Session %p was idle for %llu, disconnecting\n",
-      s, GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
-
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Session %p was idle for %llu ms, disconnecting\n",
+              s, (unsigned long long) GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
   /* call session destroy function */
   disconnect_session(s);
-
 }
 
+
 /**
  * Start session timeout
  */
@@ -1251,15 +1250,15 @@ start_session_timeout (struct Session *s)
 {
   GNUNET_assert (NULL != s);
   GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == s->timeout_task);
-
   s->timeout_task =  GNUNET_SCHEDULER_add_delayed (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
                                                    &session_timeout,
                                                    s);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Timeout for session %p set to %llu\n",
-      s, GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Timeout for session %p set to %llu ms\n",
+              s,  (unsigned long long) GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
 }
 
+
 /**
  * Increment session timeout due to activity
  */
@@ -1273,11 +1272,12 @@ reschedule_session_timeout (struct Session *s)
   s->timeout_task =  GNUNET_SCHEDULER_add_delayed (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
                                                    &session_timeout,
                                                    s);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Timeout rescheduled for session %p set to %llu\n",
-      s, GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Timeout rescheduled for session %p set to %llu ms\n",
+              s, (unsigned long long) GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
 }
 
+
 /**
  * Cancel timeout
  */
@@ -1290,18 +1290,12 @@ stop_session_timeout (struct Session *s)
   {
     GNUNET_SCHEDULER_cancel (s->timeout_task);
     s->timeout_task = GNUNET_SCHEDULER_NO_TASK;
-
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Timeout rescheduled for session %p canceled\n",
-      s, GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Timeout for session %p was not active\n",
-      s);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Timeout stopped for session %p canceled\n",
+                s, (unsigned long long) GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT.rel_value);
   }
 }
 
-
 /**
  * The exported method. Makes the core api available via a global and
  * returns the unix transport API.