-fix NPE
[oweals/gnunet.git] / src / transport / plugin_transport_unix.c
index ddb5f747cd5df0ada158f092f39260c9372c8031..359cf575d463e82a83a8276173abd37752b2e401 100644 (file)
@@ -14,8 +14,8 @@
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 
 /**
@@ -137,7 +137,7 @@ struct UNIXMessageWrapper
   /**
    * Session this message belongs to.
    */
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
 
   /**
    * Function to call upon transmission.
@@ -174,18 +174,18 @@ struct UNIXMessageWrapper
 /**
  * Handle for a session.
  */
-struct Session
+struct GNUNET_ATS_Session
 {
 
   /**
    * Sessions with pending messages (!) are kept in a DLL.
    */
-  struct Session *next;
+  struct GNUNET_ATS_Session *next;
 
   /**
    * Sessions with pending messages (!) are kept in a DLL.
    */
-  struct Session *prev;
+  struct GNUNET_ATS_Session *prev;
 
   /**
    * To whom are we talking to (set to our identity
@@ -278,7 +278,7 @@ struct Plugin
   struct GNUNET_TRANSPORT_PluginEnvironment *env;
 
   /**
-   * Sessions (map from peer identity to `struct Session`)
+   * Sessions (map from peer identity to `struct GNUNET_ATS_Session`)
    */
   struct GNUNET_CONTAINER_MultiPeerMap *session_map;
 
@@ -335,7 +335,7 @@ struct Plugin
  */
 static void
 notify_session_monitor (struct Plugin *plugin,
-                        struct Session *session,
+                        struct GNUNET_ATS_Session *session,
                         enum GNUNET_TRANSPORT_SessionState state)
 {
   struct GNUNET_TRANSPORT_SessionInfo info;
@@ -431,7 +431,7 @@ unix_plugin_address_to_string (void *cls,
  */
 static int
 unix_plugin_session_disconnect (void *cls,
-                                struct Session *session)
+                                struct GNUNET_ATS_Session *session)
 {
   struct Plugin *plugin = cls;
   struct UNIXMessageWrapper *msgw;
@@ -497,14 +497,14 @@ unix_plugin_session_disconnect (void *cls,
 /**
  * Session was idle for too long, so disconnect it
  *
- * @param cls the `struct Session *` to disconnect
+ * @param cls the `struct GNUNET_ATS_Session *` to disconnect
  * @param tc scheduler context
  */
 static void
 session_timeout (void *cls,
                 const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  struct Session *session = cls;
+  struct GNUNET_ATS_Session *session = cls;
   struct GNUNET_TIME_Relative left;
 
   session->timeout_task = NULL;
@@ -538,7 +538,7 @@ session_timeout (void *cls,
  * @param session session for which the timeout should be rescheduled
  */
 static void
-reschedule_session_timeout (struct Session *session)
+reschedule_session_timeout (struct GNUNET_ATS_Session *session)
 {
   GNUNET_assert (NULL != session->timeout_task);
   session->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
@@ -584,7 +584,7 @@ struct LookupCtx
   /**
    * Location to store the session, if found.
    */
-  struct Session *res;
+  struct GNUNET_ATS_Session *res;
 
   /**
    * Address we are looking for.
@@ -607,7 +607,7 @@ lookup_session_it (void *cls,
                   void *value)
 {
   struct LookupCtx *lctx = cls;
-  struct Session *session = value;
+  struct GNUNET_ATS_Session *session = value;
 
   if (0 == GNUNET_HELLO_address_cmp (lctx->address,
                                      session->address))
@@ -626,7 +626,7 @@ lookup_session_it (void *cls,
  * @param address the address to find
  * @return NULL if session was not found
  */
-static struct Session *
+static struct GNUNET_ATS_Session *
 lookup_session (struct Plugin *plugin,
                 const struct GNUNET_HELLO_Address *address)
 {
@@ -797,13 +797,29 @@ resend:
  */
 static enum GNUNET_ATS_Network_Type
 unix_plugin_get_network (void *cls,
-                         struct Session *session)
+                         struct GNUNET_ATS_Session *session)
 {
   GNUNET_assert (NULL != session);
   return GNUNET_ATS_NET_LOOPBACK;
 }
 
 
+/**
+ * Function obtain the network type for a session
+ *
+ * @param cls closure (`struct Plugin *`)
+ * @param address the address
+ * @return the network type
+ */
+static enum GNUNET_ATS_Network_Type
+unix_plugin_get_network_for_address (void *cls,
+                                     const struct GNUNET_HELLO_Address *address)
+
+{
+  return GNUNET_ATS_NET_LOOPBACK;
+}
+
+
 /**
  * Creates a new outbound session the transport service will use to send data to the
  * peer
@@ -812,12 +828,12 @@ unix_plugin_get_network (void *cls,
  * @param address the address
  * @return the session or NULL of max connections exceeded
  */
-static struct Session *
+static struct GNUNET_ATS_Session *
 unix_plugin_get_session (void *cls,
                         const struct GNUNET_HELLO_Address *address)
 {
   struct Plugin *plugin = cls;
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
   struct UnixAddress *ua;
   char * addrstr;
   uint32_t addr_str_len;
@@ -870,7 +886,7 @@ unix_plugin_get_session (void *cls,
   }
 
   /* create a new session */
-  session = GNUNET_new (struct Session);
+  session = GNUNET_new (struct GNUNET_ATS_Session);
   session->target = address->peer;
   session->address = GNUNET_HELLO_address_copy (address);
   session->plugin = plugin;
@@ -913,7 +929,7 @@ unix_plugin_get_session (void *cls,
 static void
 unix_plugin_update_session_timeout (void *cls,
                                     const struct GNUNET_PeerIdentity *peer,
-                                    struct Session *session)
+                                    struct GNUNET_ATS_Session *session)
 {
   struct Plugin *plugin = cls;
 
@@ -945,7 +961,7 @@ unix_demultiplexer (struct Plugin *plugin,
                     const struct UnixAddress *ua,
                     size_t ua_len)
 {
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
   struct GNUNET_HELLO_Address *address;
 
   GNUNET_assert (ua_len >= sizeof (struct UnixAddress));
@@ -1087,7 +1103,7 @@ unix_plugin_do_write (struct Plugin *plugin)
 {
   ssize_t sent = 0;
   struct UNIXMessageWrapper *msgw;
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
   int did_delete;
 
   session = NULL;
@@ -1285,7 +1301,7 @@ unix_plugin_select_write (void *cls,
  */
 static ssize_t
 unix_plugin_send (void *cls,
-                  struct Session *session,
+                  struct GNUNET_ATS_Session *session,
                   const char *msgbuf,
                   size_t msgbuf_size,
                   unsigned int priority,
@@ -1383,6 +1399,7 @@ unix_transport_server_start (void *cls)
   if (NULL == plugin->unix_sock.desc)
   {
     GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "socket");
+    GNUNET_free (un);
     return GNUNET_SYSERR;
   }
   if ('\0' != un->sun_path[0])
@@ -1638,7 +1655,7 @@ address_notification (void *cls,
  *
  * @param cls the plugin
  * @param key peer identity (unused)
- * @param value the `struct Session *` to disconnect
+ * @param value the `struct GNUNET_ATS_Session *` to disconnect
  * @return #GNUNET_YES (always, continue to iterate)
  */
 static int
@@ -1647,7 +1664,7 @@ get_session_delete_it (void *cls,
                       void *value)
 {
   struct Plugin *plugin = cls;
-  struct Session *session = value;
+  struct GNUNET_ATS_Session *session = value;
 
   unix_plugin_session_disconnect (plugin, session);
   return GNUNET_YES;
@@ -1679,7 +1696,7 @@ unix_plugin_peer_disconnect (void *cls,
  *
  * @param cls the `struct Plugin` with the monitor callback (`sic`)
  * @param peer peer we send information about
- * @param value our `struct Session` to send information about
+ * @param value our `struct GNUNET_ATS_Session` to send information about
  * @return #GNUNET_OK (continue to iterate)
  */
 static int
@@ -1688,7 +1705,7 @@ send_session_info_iter (void *cls,
                         void *value)
 {
   struct Plugin *plugin = cls;
-  struct Session *session = value;
+  struct GNUNET_ATS_Session *session = value;
 
   notify_session_monitor (plugin,
                           session,
@@ -1797,6 +1814,7 @@ libgnunet_plugin_transport_unix_init (void *cls)
   api->check_address = &unix_plugin_check_address;
   api->string_to_address = &unix_plugin_string_to_address;
   api->get_network = &unix_plugin_get_network;
+  api->get_network_for_address = &unix_plugin_get_network_for_address;
   api->update_session_timeout = &unix_plugin_update_session_timeout;
   api->setup_monitor = &unix_plugin_setup_monitor;
   sockets_created = unix_transport_server_start (plugin);
@@ -1831,7 +1849,7 @@ libgnunet_plugin_transport_unix_done (void *cls)
   struct UNIXMessageWrapper * msgw;
   struct UnixAddress *ua;
   size_t len;
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
 
   if (NULL == plugin)
   {