gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r20812 - gnunet/src/transport
Date: Thu, 29 Mar 2012 16:04:31 +0200

Author: wachs
Date: 2012-03-29 16:04:31 +0200 (Thu, 29 Mar 2012)
New Revision: 20812

Modified:
   gnunet/src/transport/plugin_transport_http.c
Log:
- implementented string to address


Modified: gnunet/src/transport/plugin_transport_http.c
===================================================================
--- gnunet/src/transport/plugin_transport_http.c        2012-03-29 13:18:50 UTC 
(rev 20811)
+++ gnunet/src/transport/plugin_transport_http.c        2012-03-29 14:04:31 UTC 
(rev 20812)
@@ -151,6 +151,9 @@
 }
 
 
+
+
+
 /**
  * Convert the transports address to a nice, human-readable
  * format.
@@ -318,7 +321,81 @@
   return delay;
 }
 
+
 /**
+ * Function called to convert a string address to
+ * a binary address.
+ *
+ * @param cls closure ('struct Plugin*')
+ * @param addr string address
+ * @param addrlen length of the address
+ * @param buf location to store the buffer
+ *        If the function returns GNUNET_SYSERR, its contents are undefined.
+ * @param added length of created address
+ * @return GNUNET_OK on success, GNUNET_SYSERR on failure
+ */
+int http_string_to_address (void *cls,
+                           const char *addr,
+                           uint16_t addrlen,
+                           void **buf,
+                           size_t *added)
+{
+#if !BUILD_HTTPS
+  char *protocol = "http";
+#else
+  char *protocol = "https";
+#endif
+  char *addr_str = NULL;
+  struct sockaddr_in addr_4;
+  struct sockaddr_in6 addr_6;
+  struct IPv4HttpAddress * http_4addr;
+  struct IPv6HttpAddress * http_6addr;
+  GNUNET_break (0);
+  if ((addr == NULL) || (addrlen == 0) || (buf == NULL))
+    return GNUNET_SYSERR;
+
+  /* protocoll + "://" + ":" */
+  if (addrlen <= strlen (protocol) + 4);
+    return GNUNET_SYSERR;
+
+  if (NULL == (addr = strstr(addr_str, "://")))
+      return GNUNET_SYSERR;
+
+  addr_str = &addr_str[3];
+
+  if (GNUNET_OK == GNUNET_STRINGS_to_address_ipv4(addr, strlen(addr_str), 
&addr_4))
+  {
+    http_4addr = GNUNET_malloc (sizeof (struct IPv4HttpAddress));
+    http_4addr = GNUNET_malloc (sizeof (struct IPv6HttpAddress));
+    http_4addr->u4_port = addr_4.sin_port;
+    http_4addr->ipv4_addr = (uint32_t) addr_4.sin_addr.s_addr;
+
+    (*buf) = http_4addr;
+    (*added) = sizeof (struct IPv4HttpAddress);
+    GNUNET_break (0);
+    return GNUNET_OK;
+  }
+  else if (GNUNET_OK == GNUNET_STRINGS_to_address_ipv6(addr, strlen(addr_str), 
&addr_6))
+  {
+    http_6addr = GNUNET_malloc (sizeof (struct IPv6HttpAddress));
+    http_6addr->u6_port = addr_6.sin6_port;
+    http_6addr->ipv6_addr = addr_6.sin6_addr;
+
+    (*buf) = http_6addr;
+    (*added) = sizeof (struct IPv6HttpAddress);
+    GNUNET_break (0);
+    return GNUNET_OK;
+
+  }
+  else
+  {
+    return GNUNET_SYSERR;
+  }
+}
+
+
+
+/**
  * 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
@@ -1384,7 +1461,7 @@
   api->address_pretty_printer = &http_plugin_address_pretty_printer;
   api->check_address = &http_plugin_address_suggested;
   api->address_to_string = &http_plugin_address_to_string;
-  api->string_to_address = NULL; // FIXME!
+  api->string_to_address = &http_string_to_address;
   api->get_session = &http_get_session;
   api->send = &http_plugin_send;
 




reply via email to

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