gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r19485 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r19485 - gnunet/src/transport
Date: Fri, 27 Jan 2012 15:30:28 +0100

Author: wachs
Date: 2012-01-27 15:30:28 +0100 (Fri, 27 Jan 2012)
New Revision: 19485

Modified:
   gnunet/src/transport/plugin_transport_unix.c
Log:
removing retry code
removing unused structs
removing UDP Address structs
fixed PrettyPrinter (printed UDP addresses???)


Modified: gnunet/src/transport/plugin_transport_unix.c
===================================================================
--- gnunet/src/transport/plugin_transport_unix.c        2012-01-27 13:48:30 UTC 
(rev 19484)
+++ gnunet/src/transport/plugin_transport_unix.c        2012-01-27 14:30:28 UTC 
(rev 19485)
@@ -85,6 +85,13 @@
 
 };
 
+struct Session
+{
+  void *addr;
+  size_t addrlen;
+  struct GNUNET_PeerIdentity target;
+};
+
 struct UNIXMessageWrapper
 {
   struct UNIXMessageWrapper *next;
@@ -107,126 +114,10 @@
   void *cont_cls;
 };
 
-/**
- * Network format for IPv4 addresses.
- */
-struct IPv4UdpAddress
-{
-  /**
-   * IPv4 address, in network byte order.
-   */
-  uint32_t ipv4_addr GNUNET_PACKED;
-
-  /**
-   * Port number, in network byte order.
-   */
-  uint16_t u_port GNUNET_PACKED;
-};
-
-
-/**
- * Network format for IPv6 addresses.
- */
-struct IPv6UdpAddress
-{
-  /**
-   * IPv6 address.
-   */
-  struct in6_addr ipv6_addr GNUNET_PACKED;
-
-  /**
-   * Port number, in network byte order.
-   */
-  uint16_t u6_port GNUNET_PACKED;
-};
-GNUNET_NETWORK_STRUCT_END
-
 /* Forward definition */
 struct Plugin;
 
-struct PrettyPrinterContext
-{
-  GNUNET_TRANSPORT_AddressStringCallback asc;
-  void *asc_cls;
-  uint16_t port;
-};
 
-struct RetrySendContext
-{
-
-  /**
-   * Main plugin handle.
-   */
-  struct Plugin *plugin;
-
-  /**
-   * Address of recipient.
-   */
-  char *addr;
-
-  /**
-   * Length of address.
-   */
-  ssize_t addrlen;
-
-  /**
-   * Message to send.
-   */
-  char *msg;
-
-  /**
-   * Size of the message.
-   */
-  int msg_size;
-
-  /**
-   * Handle to send message out on.
-   */
-  struct GNUNET_NETWORK_Handle *send_handle;
-
-  /**
-   * Continuation to call on success or
-   * timeout.
-   */
-  GNUNET_TRANSPORT_TransmitContinuation cont;
-
-  /**
-   * Closure for continuation.
-   */
-  void *cont_cls;
-
-  /**
-   * The peer the message is destined for.
-   */
-  struct GNUNET_PeerIdentity target;
-
-  /**
-   * How long before not retrying any longer.
-   */
-  struct GNUNET_TIME_Absolute timeout;
-
-  /**
-   * How long the last message was delayed.
-   */
-  struct GNUNET_TIME_Relative delay;
-
-  /**
-   * The actual retry task.
-   */
-  GNUNET_SCHEDULER_TaskIdentifier retry_task;
-
-  /**
-   * The priority of the message.
-   */
-  unsigned int priority;
-
-  /**
-   * Entry in the DLL of retry items.
-   */
-  struct RetryList *retry_list_entry;
-};
-
-
 /**
  * UNIX NAT "Session"
  */
@@ -310,6 +201,11 @@
    */
   struct PeerSession *sessions;
 
+  /*
+   * Sessions
+   */
+  struct GNUNET_CONTAINER_MultiHashMap *session_map;
+
   /**
    * ID of task used to update our addresses when one expires.
    */
@@ -423,15 +319,6 @@
   return pos;
 }
 
-/* Forward Declaration */
-static ssize_t
-unix_real_send (void *cls, struct RetrySendContext *incoming_retry_context,
-                struct GNUNET_NETWORK_Handle *send_handle,
-                const struct GNUNET_PeerIdentity *target, const char *msgbuf,
-                size_t msgbuf_size, unsigned int priority,
-                struct GNUNET_TIME_Relative timeout, const void *addr,
-                size_t addrlen, GNUNET_TRANSPORT_TransmitContinuation cont,
-                void *cont_cls);
 
 /**
  * Actually send out the message, assume we've got the address and
@@ -456,7 +343,7 @@
  * @return the number of bytes written, -1 on errors
  */
 static ssize_t
-unix_real_send (void *cls, struct RetrySendContext *incoming_retry_context,
+unix_real_send (void *cls,
                 struct GNUNET_NETWORK_Handle *send_handle,
                 const struct GNUNET_PeerIdentity *target, const char *msgbuf,
                 size_t msgbuf_size, unsigned int priority,
@@ -572,7 +459,27 @@
   return sent;
 }
 
+struct gsi_ctx
+{
+  const struct GNUNET_HELLO_Address *address;
+  struct Session *res;
+};
 
+static int
+get_session_it (void *cls, const GNUNET_HashCode * key, void *value)
+{
+  struct gsi_ctx *gsi = cls;
+  struct Session *s = value;
+
+  if ((gsi->address->address_length == s->addrlen) &&
+      (0 == memcmp (gsi->address->address, s->addr, s->addrlen)))
+  {
+    gsi->res = s;
+    return GNUNET_NO;
+  }
+  return GNUNET_YES;
+}
+
 /**
  * Creates a new outbound session the transport service will use to send data 
to the
  * peer
@@ -581,12 +488,25 @@
  * @param address the address
  * @return the session or NULL of max connections exceeded
  */
-
 static struct Session *
 unix_plugin_get_session (void *cls,
                   const struct GNUNET_HELLO_Address *address)
 {
   struct Session * s = NULL;
+  struct Plugin *plugin = cls;
+  struct gsi_ctx gsi;
+
+  /* Checks */
+  GNUNET_assert (plugin != NULL);
+  GNUNET_assert (address != NULL);
+
+  /* Check if already existing */
+  gsi.address = address;
+  gsi.res = NULL;
+  GNUNET_CONTAINER_multihashmap_get_multiple (plugin->session_map, 
&address->peer.hashPubKey, &get_session_it, &gsi);
+
+  /* Create a new session */
+
   GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "To be implemented\n");
   GNUNET_break (0);
   return s;
@@ -815,7 +735,7 @@
   int sent = 0;
   struct UNIXMessageWrapper * msgw = plugin->msg_head;
 
-  sent = unix_real_send (plugin, NULL,
+  sent = unix_real_send (plugin,
                          plugin->unix_sock.desc,
                          &msgw->target,
                          (const char *) msgw->msg,
@@ -1001,27 +921,6 @@
 
 
 /**
- * Append our port and forward the result.
- */
-static void
-append_port (void *cls, const char *hostname)
-{
-  struct PrettyPrinterContext *ppc = cls;
-  char *ret;
-
-  if (hostname == NULL)
-  {
-    ppc->asc (ppc->asc_cls, NULL);
-    GNUNET_free (ppc);
-    return;
-  }
-  GNUNET_asprintf (&ret, "%s:%d", hostname, ppc->port);
-  ppc->asc (ppc->asc_cls, ret);
-  GNUNET_free (ret);
-}
-
-
-/**
  * Convert the transports address to a nice, human-readable
  * format.
  *
@@ -1043,49 +942,14 @@
                                     GNUNET_TRANSPORT_AddressStringCallback asc,
                                     void *asc_cls)
 {
-  struct PrettyPrinterContext *ppc;
-  const void *sb;
-  size_t sbs;
-  struct sockaddr_in a4;
-  struct sockaddr_in6 a6;
-  const struct IPv4UdpAddress *u4;
-  const struct IPv6UdpAddress *u6;
-  uint16_t port;
-
-  if (addrlen == sizeof (struct IPv6UdpAddress))
-  {
-    u6 = addr;
-    memset (&a6, 0, sizeof (a6));
-    a6.sin6_family = AF_INET6;
-    a6.sin6_port = u6->u6_port;
-    memcpy (&a6.sin6_addr, &u6->ipv6_addr, sizeof (struct in6_addr));
-    port = ntohs (u6->u6_port);
-    sb = &a6;
-    sbs = sizeof (a6);
-  }
-  else if (addrlen == sizeof (struct IPv4UdpAddress))
-  {
-    u4 = addr;
-    memset (&a4, 0, sizeof (a4));
-    a4.sin_family = AF_INET;
-    a4.sin_port = u4->u_port;
-    a4.sin_addr.s_addr = u4->ipv4_addr;
-    port = ntohs (u4->u_port);
-    sb = &a4;
-    sbs = sizeof (a4);
-  }
+  if ((addr != NULL) && (addrlen > 0))
+    asc (asc_cls, (const char *) addr);
   else
   {
-    /* invalid address */
-    GNUNET_break_op (0);
-    asc (asc_cls, NULL);
-    return;
+    GNUNET_break (0);
+    asc (asc_cls, "Invalid UNIX address");
   }
-  ppc = GNUNET_malloc (sizeof (struct PrettyPrinterContext));
-  ppc->asc = asc;
-  ppc->asc_cls = asc_cls;
-  ppc->port = port;
-  GNUNET_RESOLVER_hostname_get (sb, sbs, !numeric, timeout, &append_port, ppc);
+
 }
 
 /**
@@ -1161,6 +1025,8 @@
   if (sockets_created == 0)
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("Failed to open UNIX sockets\n"));
 
+  plugin->session_map = GNUNET_CONTAINER_multihashmap_create(10);
+
   GNUNET_SCHEDULER_add_now (address_notification, plugin);
   return api;
 }
@@ -1173,6 +1039,8 @@
 
   unix_transport_server_stop (plugin);
 
+  GNUNET_CONTAINER_multihashmap_destroy (plugin->session_map);
+
   GNUNET_NETWORK_fdset_destroy (plugin->rs);
   GNUNET_NETWORK_fdset_destroy (plugin->ws);
   GNUNET_free (plugin->unix_socket_path);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]