-MX
authorMartin Schanzenbach <mschanzenbach@posteo.de>
Fri, 23 Mar 2012 10:17:40 +0000 (10:17 +0000)
committerMartin Schanzenbach <mschanzenbach@posteo.de>
Fri, 23 Mar 2012 10:17:40 +0000 (10:17 +0000)
src/namestore/namestore_common.c

index 24711ba470c8326ca45c677fe716a6d14e91a8c9..b9b114e8a166081a1a99c73dbff31b6d7794cf3c 100644 (file)
@@ -309,6 +309,8 @@ GNUNET_NAMESTORE_value_to_string (uint32_t type,
 {
   char tmp[INET6_ADDRSTRLEN];
   struct GNUNET_CRYPTO_ShortHashAsciiEncoded enc;
+  uint16_t mx_pref;
+  char* result;
 
   switch (type)
   {
@@ -329,13 +331,14 @@ GNUNET_NAMESTORE_value_to_string (uint32_t type,
     // FIXME
     return NULL;
   case GNUNET_DNSPARSER_TYPE_PTR:
-    GNUNET_break (0);
-    // FIXME
-    return NULL;
+    return GNUNET_strndup (data, data_size);
   case GNUNET_DNSPARSER_TYPE_MX:
-    GNUNET_break (0);
-    // FIXME
-    return NULL;
+    mx_pref = ntohs(*((uint16_t*)data));
+    if (GNUNET_asprintf(&result, "%hu,%s", mx_pref, data+sizeof(uint16_t))
+        != 0)
+      return result;
+    else
+      return NULL;
   case GNUNET_DNSPARSER_TYPE_TXT:
     return GNUNET_strndup (data, data_size);
   case GNUNET_DNSPARSER_TYPE_AAAA:
@@ -379,6 +382,9 @@ GNUNET_NAMESTORE_string_to_value (uint32_t type,
   struct in_addr value_a;
   struct in6_addr value_aaaa;
   struct GNUNET_CRYPTO_ShortHashCode pkey;
+  uint16_t mx_pref;
+  uint16_t mx_pref_n;
+  char result[253];
 
   switch (type)
   {
@@ -408,9 +414,14 @@ GNUNET_NAMESTORE_string_to_value (uint32_t type,
     // FIXME
     return GNUNET_SYSERR;
   case GNUNET_DNSPARSER_TYPE_MX:
-    GNUNET_break (0);
-    // FIXME
-    return GNUNET_SYSERR;
+    if (SSCANF(s, "%hu,%s", &mx_pref, result) != 2)
+      return GNUNET_SYSERR;
+    *data_size = sizeof (uint16_t)+strlen(result)+1;
+    *data = GNUNET_malloc (*data_size);
+    mx_pref_n = htons(mx_pref);
+    memcpy(*data, &mx_pref_n, sizeof (uint16_t));
+    strcpy((*data)+sizeof (uint16_t), result);
+    return GNUNET_OK;
   case GNUNET_DNSPARSER_TYPE_TXT:
     *data = GNUNET_strdup (s);
     *data_size = strlen (s);