-changing exit helper code to automatically do the network configuration for an exit...
[oweals/gnunet.git] / src / transport / plugin_transport_smtp.c
index f7cc530e486ee892ce6aa774037255ee8ceec045..b589e117786b61ae6e49e1b7149f4609c02511ca 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -19,7 +19,7 @@
 */
 
 /**
 */
 
 /**
- * @file transports/smtp.c
+ * @file transport/plugin_transport_smtp.c
  * @brief Implementation of the SMTP transport service
  * @author Christian Grothoff
  * @author Renaldo Ferreira
  * @brief Implementation of the SMTP transport service
  * @author Christian Grothoff
  * @author Renaldo Ferreira
@@ -40,7 +40,7 @@
  */
 #define SMTP_MESSAGE_SIZE 65528
 
  */
 #define SMTP_MESSAGE_SIZE 65528
 
-#define DEBUG_SMTP GNUNET_NO
+#define DEBUG_SMTP GNUNET_EXTRA_LOGGING
 
 #define FILTER_STRING_SIZE 64
 
 
 #define FILTER_STRING_SIZE 64
 
@@ -72,6 +72,8 @@ typedef struct
 
 } EmailAddress;
 
 
 } EmailAddress;
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * Encapsulation of a GNUnet message in the SMTP mail body (before
  * base64 encoding).
 /**
  * Encapsulation of a GNUnet message in the SMTP mail body (before
  * base64 encoding).
@@ -86,6 +88,7 @@ typedef struct
   GNUNET_PeerIdentity sender;
 
 } SMTPMessage;
   GNUNET_PeerIdentity sender;
 
 } SMTPMessage;
+GNUNET_NETWORK_STRUCT_END
 
 /* *********** globals ************* */
 
 
 /* *********** globals ************* */
 
@@ -145,8 +148,8 @@ static GNUNET_CronTime last_transmission;
 /** ******************** Base64 encoding ***********/
 
 #define FILLCHAR '='
 /** ******************** Base64 encoding ***********/
 
 #define FILLCHAR '='
-static char *cvt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-  "abcdefghijklmnopqrstuvwxyz" "0123456789+/";
+static char *cvt =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/";
 
 /**
  * Encode into Base64.
 
 /**
  * Encode into Base64.
@@ -171,49 +174,51 @@ base64_encode (const char *data, unsigned int len, char **output)
     (*output)[ret++] = '\n'; \
   }
   ret = 0;
     (*output)[ret++] = '\n'; \
   }
   ret = 0;
-  opt = GNUNET_malloc (2 + (((len * 4 / 3) + 8) * (MAX_CHAR_PER_LINE + 2)) /
-                       MAX_CHAR_PER_LINE);
+  opt =
+      GNUNET_malloc (2 +
+                     (((len * 4 / 3) + 8) * (MAX_CHAR_PER_LINE +
+                                             2)) / MAX_CHAR_PER_LINE);
   /* message must start with \r\n for libesmtp */
   *output = opt;
   opt[0] = '\r';
   opt[1] = '\n';
   ret += 2;
   for (i = 0; i < len; ++i)
   /* message must start with \r\n for libesmtp */
   *output = opt;
   opt[0] = '\r';
   opt[1] = '\n';
   ret += 2;
   for (i = 0; i < len; ++i)
+  {
+    c = (data[i] >> 2) & 0x3f;
+    opt[ret++] = cvt[(int) c];
+    CHECKLINE;
+    c = (data[i] << 4) & 0x3f;
+    if (++i < len)
+      c |= (data[i] >> 4) & 0x0f;
+    opt[ret++] = cvt[(int) c];
+    CHECKLINE;
+    if (i < len)
     {
     {
-      c = (data[i] >> 2) & 0x3f;
+      c = (data[i] << 2) & 0x3f;
+      if (++i < len)
+        c |= (data[i] >> 6) & 0x03;
       opt[ret++] = cvt[(int) c];
       CHECKLINE;
       opt[ret++] = cvt[(int) c];
       CHECKLINE;
-      c = (data[i] << 4) & 0x3f;
-      if (++i < len)
-        c |= (data[i] >> 4) & 0x0f;
+    }
+    else
+    {
+      ++i;
+      opt[ret++] = FILLCHAR;
+      CHECKLINE;
+    }
+    if (i < len)
+    {
+      c = data[i] & 0x3f;
       opt[ret++] = cvt[(int) c];
       CHECKLINE;
       opt[ret++] = cvt[(int) c];
       CHECKLINE;
-      if (i < len)
-        {
-          c = (data[i] << 2) & 0x3f;
-          if (++i < len)
-            c |= (data[i] >> 6) & 0x03;
-          opt[ret++] = cvt[(int) c];
-          CHECKLINE;
-        }
-      else
-        {
-          ++i;
-          opt[ret++] = FILLCHAR;
-          CHECKLINE;
-        }
-      if (i < len)
-        {
-          c = data[i] & 0x3f;
-          opt[ret++] = cvt[(int) c];
-          CHECKLINE;
-        }
-      else
-        {
-          opt[ret++] = FILLCHAR;
-          CHECKLINE;
-        }
     }
     }
+    else
+    {
+      opt[ret++] = FILLCHAR;
+      CHECKLINE;
+    }
+  }
   opt[ret++] = FILLCHAR;
   return ret;
 }
   opt[ret++] = FILLCHAR;
   return ret;
 }
@@ -252,38 +257,38 @@ base64_decode (const char *data, unsigned int len, char **output)
                  "base64_decode decoding len=%d\n", len);
 #endif
   for (i = 0; i < len; ++i)
                  "base64_decode decoding len=%d\n", len);
 #endif
   for (i = 0; i < len; ++i)
+  {
+    CHECK_CRLF;
+    if (data[i] == FILLCHAR)
+      break;
+    c = (char) cvtfind (data[i]);
+    ++i;
+    CHECK_CRLF;
+    c1 = (char) cvtfind (data[i]);
+    c = (c << 2) | ((c1 >> 4) & 0x3);
+    (*output)[ret++] = c;
+    if (++i < len)
     {
       CHECK_CRLF;
     {
       CHECK_CRLF;
-      if (data[i] == FILLCHAR)
+      c = data[i];
+      if (FILLCHAR == c)
         break;
         break;
-      c = (char) cvtfind (data[i]);
-      ++i;
+      c = (char) cvtfind (c);
+      c1 = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf);
+      (*output)[ret++] = c1;
+    }
+    if (++i < len)
+    {
       CHECK_CRLF;
       CHECK_CRLF;
-      c1 = (char) cvtfind (data[i]);
-      c = (c << 2) | ((c1 >> 4) & 0x3);
+      c1 = data[i];
+      if (FILLCHAR == c1)
+        break;
+
+      c1 = (char) cvtfind (c1);
+      c = ((c << 6) & 0xc0) | c1;
       (*output)[ret++] = c;
       (*output)[ret++] = c;
-      if (++i < len)
-        {
-          CHECK_CRLF;
-          c = data[i];
-          if (FILLCHAR == c)
-            break;
-          c = (char) cvtfind (c);
-          c1 = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf);
-          (*output)[ret++] = c1;
-        }
-      if (++i < len)
-        {
-          CHECK_CRLF;
-          c1 = data[i];
-          if (FILLCHAR == c1)
-            break;
-
-          c1 = (char) cvtfind (c1);
-          c = ((c << 6) & 0xc0) | c1;
-          (*output)[ret++] = c;
-        }
     }
     }
+  }
 END:
   return ret;
 }
 END:
   return ret;
 }
@@ -323,83 +328,78 @@ listenAndDistribute (void *unused)
 
 
   while (smtp_shutdown == GNUNET_NO)
 
 
   while (smtp_shutdown == GNUNET_NO)
+  {
+    fd = OPEN (pipename, O_RDONLY | O_ASYNC);
+    if (fd == -1)
     {
     {
-      fd = OPEN (pipename, O_RDONLY | O_ASYNC);
-      if (fd == -1)
-        {
-          if (smtp_shutdown == GNUNET_NO)
-            GNUNET_thread_sleep (5 * GNUNET_CRON_SECONDS);
-          continue;
-        }
-      fdes = fdopen (fd, "r");
-      while (smtp_shutdown == GNUNET_NO)
-        {
-          /* skip until end of header */
-          do
-            {
-              READLINE (line, linesize);
-            }
-          while ((line[0] != '\r') && (line[0] != '\n'));       /* expect newline */
-          READLINE (line, linesize);    /* read base64 encoded message; decode, process */
-          pos = 0;
-          while (1)
-            {
-              pos = strlen (line) - 1;  /* ignore new line */
-              READLINE (&line[pos], linesize - pos);    /* read base64 encoded message; decode, process */
-              if ((line[pos] == '\r') || (line[pos] == '\n'))
-                break;          /* empty line => end of message! */
-            }
-          size = base64_decode (line, pos, &out);
-          if (size < sizeof (SMTPMessage))
-            {
-              GNUNET_GE_BREAK (ectx, 0);
-              GNUNET_free (out);
-              goto END;
-            }
-
-          mp = (SMTPMessage *) & out[size - sizeof (SMTPMessage)];
-          if (ntohs (mp->header.size) != size)
-            {
-              GNUNET_GE_LOG (ectx,
-                             GNUNET_GE_WARNING | GNUNET_GE_BULK |
-                             GNUNET_GE_USER,
-                             _
-                             ("Received malformed message via %s. Ignored.\n"),
-                             "SMTP");
+      if (smtp_shutdown == GNUNET_NO)
+        GNUNET_thread_sleep (5 * GNUNET_CRON_SECONDS);
+      continue;
+    }
+    fdes = fdopen (fd, "r");
+    while (smtp_shutdown == GNUNET_NO)
+    {
+      /* skip until end of header */
+      do
+      {
+        READLINE (line, linesize);
+      }
+      while ((line[0] != '\r') && (line[0] != '\n'));   /* expect newline */
+      READLINE (line, linesize);        /* read base64 encoded message; decode, process */
+      pos = 0;
+      while (1)
+      {
+        pos = strlen (line) - 1;        /* ignore new line */
+        READLINE (&line[pos], linesize - pos);  /* read base64 encoded message; decode, process */
+        if ((line[pos] == '\r') || (line[pos] == '\n'))
+          break;                /* empty line => end of message! */
+      }
+      size = base64_decode (line, pos, &out);
+      if (size < sizeof (SMTPMessage))
+      {
+        GNUNET_GE_BREAK (ectx, 0);
+        GNUNET_free (out);
+        goto END;
+      }
+
+      mp = (SMTPMessage *) &out[size - sizeof (SMTPMessage)];
+      if (ntohs (mp->header.size) != size)
+      {
+        GNUNET_GE_LOG (ectx,
+                       GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
+                       _("Received malformed message via %s. Ignored.\n"),
+                       "SMTP");
 #if DEBUG_SMTP
 #if DEBUG_SMTP
-              GNUNET_GE_LOG (ectx,
-                             GNUNET_GE_DEBUG | GNUNET_GE_REQUEST |
-                             GNUNET_GE_USER,
-                             "Size returned by base64=%d, in the msg=%d.\n",
-                             size, ntohl (mp->size));
+        GNUNET_GE_LOG (ectx,
+                       GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
+                       "Size returned by base64=%d, in the msg=%d.\n", size,
+                       ntohl (mp->size));
 #endif
 #endif
-              GNUNET_free (out);
-              goto END;
-            }
-          if (stats != NULL)
-            stats->change (stat_bytesReceived, size);
-          coreMP = GNUNET_malloc (sizeof (GNUNET_TransportPacket));
-          coreMP->msg = out;
-          coreMP->size = size - sizeof (SMTPMessage);
-          coreMP->tsession = NULL;
-          coreMP->sender = mp->sender;
+        GNUNET_free (out);
+        goto END;
+      }
+      if (stats != NULL)
+        stats->change (stat_bytesReceived, size);
+      coreMP = GNUNET_malloc (sizeof (GNUNET_TransportPacket));
+      coreMP->msg = out;
+      coreMP->size = size - sizeof (SMTPMessage);
+      coreMP->tsession = NULL;
+      coreMP->sender = mp->sender;
 #if DEBUG_SMTP
 #if DEBUG_SMTP
-          GNUNET_GE_LOG (ectx,
-                         GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
-                         "SMTP message passed to the core.\n");
+      GNUNET_GE_LOG (ectx, GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
+                     "SMTP message passed to the core.\n");
 #endif
 
 #endif
 
-          coreAPI->receive (coreMP);
-        }
-    END:
+      coreAPI->receive (coreMP);
+    }
+END:
 #if DEBUG_SMTP
 #if DEBUG_SMTP
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
-                     "SMTP message processed.\n");
+    GNUNET_GE_LOG (ectx, GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
+                   "SMTP message processed.\n");
 #endif
 #endif
-      if (fdes != NULL)
-        fclose (fdes);
-    }
+    if (fdes != NULL)
+      fclose (fdes);
+  }
   GNUNET_free (line);
   return NULL;
 }
   GNUNET_free (line);
   return NULL;
 }
@@ -423,12 +423,12 @@ api_verify_hello (const GNUNET_MessageHello * hello)
   maddr = (const EmailAddress *) &hello[1];
   if ((ntohs (hello->header.size) !=
        sizeof (GNUNET_MessageHello) + ntohs (hello->senderAddressSize)) ||
   maddr = (const EmailAddress *) &hello[1];
   if ((ntohs (hello->header.size) !=
        sizeof (GNUNET_MessageHello) + ntohs (hello->senderAddressSize)) ||
-      (maddr->senderAddress[ntohs (hello->senderAddressSize) - 1 -
-                            FILTER_STRING_SIZE] != '\0'))
-    {
-      GNUNET_GE_BREAK (ectx, 0);
-      return GNUNET_SYSERR;     /* obviously invalid */
-    }
+      (maddr->senderAddress
+       [ntohs (hello->senderAddressSize) - 1 - FILTER_STRING_SIZE] != '\0'))
+  {
+    GNUNET_GE_BREAK (ectx, 0);
+    return GNUNET_SYSERR;       /* obviously invalid */
+  }
   if (NULL == strstr (maddr->filter, ": "))
     return GNUNET_SYSERR;
   return GNUNET_OK;
   if (NULL == strstr (maddr->filter, ": "))
     return GNUNET_SYSERR;
   return GNUNET_OK;
@@ -449,31 +449,27 @@ api_create_hello ()
   EmailAddress *haddr;
   int i;
 
   EmailAddress *haddr;
   int i;
 
-  GNUNET_GC_get_configuration_value_string (coreAPI->cfg,
-                                            "SMTP", "FILTER",
+  GNUNET_GC_get_configuration_value_string (coreAPI->cfg, "SMTP", "FILTER",
                                             "X-mailer: GNUnet", &filter);
   if (NULL == strstr (filter, ": "))
                                             "X-mailer: GNUnet", &filter);
   if (NULL == strstr (filter, ": "))
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
-                     _("SMTP filter string to invalid, lacks ': '\n"));
-      GNUNET_free (filter);
-      return NULL;
-    }
+  {
+    GNUNET_GE_LOG (ectx, GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
+                   _("SMTP filter string to invalid, lacks ': '\n"));
+    GNUNET_free (filter);
+    return NULL;
+  }
 
   if (strlen (filter) > FILTER_STRING_SIZE)
 
   if (strlen (filter) > FILTER_STRING_SIZE)
-    {
-      filter[FILTER_STRING_SIZE] = '\0';
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
-                     _("SMTP filter string to long, capped to `%s'\n"),
-                     filter);
-    }
+  {
+    filter[FILTER_STRING_SIZE] = '\0';
+    GNUNET_GE_LOG (ectx, GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
+                   _("SMTP filter string to long, capped to `%s'\n"), filter);
+  }
   i = (strlen (email) + 8) & (~7);      /* make multiple of 8 */
   msg =
   i = (strlen (email) + 8) & (~7);      /* make multiple of 8 */
   msg =
-    GNUNET_malloc (sizeof (GNUNET_MessageHello) + sizeof (EmailAddress) + i);
+      GNUNET_malloc (sizeof (GNUNET_MessageHello) + sizeof (EmailAddress) + i);
   memset (msg, 0, sizeof (GNUNET_MessageHello) + sizeof (EmailAddress) + i);
   memset (msg, 0, sizeof (GNUNET_MessageHello) + sizeof (EmailAddress) + i);
-  haddr = (EmailAddress *) & msg[1];
+  haddr = (EmailAddress *) &msg[1];
   memset (&haddr->filter[0], 0, FILTER_STRING_SIZE);
   strcpy (&haddr->filter[0], filter);
   memcpy (&haddr->senderAddress[0], email, strlen (email) + 1);
   memset (&haddr->filter[0], 0, FILTER_STRING_SIZE);
   strcpy (&haddr->filter[0], filter);
   memcpy (&haddr->senderAddress[0], email, strlen (email) + 1);
@@ -501,10 +497,10 @@ get_message (void **buf, int *len, void *cls)
 
   *buf = NULL;
   if (len == NULL)
 
   *buf = NULL;
   if (len == NULL)
-    {
-      gmc->pos = 0;
-      return NULL;
-    }
+  {
+    gmc->pos = 0;
+    return NULL;
+  }
   if (gmc->pos == gmc->esize)
     return NULL;                /* done */
   *len = gmc->esize;
   if (gmc->pos == gmc->esize)
     return NULL;                /* done */
   *len = gmc->esize;
@@ -516,13 +512,14 @@ get_message (void **buf, int *len, void *cls)
  * Send a message to the specified remote node.
  *
  * @param tsession the GNUNET_MessageHello identifying the remote node
  * Send a message to the specified remote node.
  *
  * @param tsession the GNUNET_MessageHello identifying the remote node
- * @param message what to send
+ * @param msg what to send
  * @param size the size of the message
  * @param size the size of the message
+ * @param important is this message important enough to override typical limits?
  * @return GNUNET_SYSERR on error, GNUNET_OK on success
  */
 static int
  * @return GNUNET_SYSERR on error, GNUNET_OK on success
  */
 static int
-api_send (GNUNET_TSession * tsession,
-          const void *msg, const unsigned int size, int important)
+api_send (GNUNET_TSession * tsession, const void *msg, const unsigned int size,
+          int important)
 {
   const GNUNET_MessageHello *hello;
   const EmailAddress *haddr;
 {
   const GNUNET_MessageHello *hello;
   const EmailAddress *haddr;
@@ -534,6 +531,7 @@ api_send (GNUNET_TSession * tsession,
   smtp_session_t session;
   smtp_message_t message;
   smtp_recipient_t recipient;
   smtp_session_t session;
   smtp_message_t message;
   smtp_recipient_t recipient;
+
 #define EBUF_LEN 128
   char ebuf[EBUF_LEN];
   GNUNET_CronTime now;
 #define EBUF_LEN 128
   char ebuf[EBUF_LEN];
   GNUNET_CronTime now;
@@ -541,10 +539,10 @@ api_send (GNUNET_TSession * tsession,
   if (smtp_shutdown == GNUNET_YES)
     return GNUNET_SYSERR;
   if ((size == 0) || (size > smtpAPI.mtu))
   if (smtp_shutdown == GNUNET_YES)
     return GNUNET_SYSERR;
   if ((size == 0) || (size > smtpAPI.mtu))
-    {
-      GNUNET_GE_BREAK (ectx, 0);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_BREAK (ectx, 0);
+    return GNUNET_SYSERR;
+  }
   now = GNUNET_get_time ();
   if ((important != GNUNET_YES) &&
       ((now - last_transmission) * rate_limit) < GNUNET_CRON_HOURS)
   now = GNUNET_get_time ();
   if ((important != GNUNET_YES) &&
       ((now - last_transmission) * rate_limit) < GNUNET_CRON_HOURS)
@@ -557,42 +555,39 @@ api_send (GNUNET_TSession * tsession,
   GNUNET_mutex_lock (lock);
   session = smtp_create_session ();
   if (session == NULL)
   GNUNET_mutex_lock (lock);
   session = smtp_create_session ();
   if (session == NULL)
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_ERROR | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_IMMEDIATE,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_create_session",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-      GNUNET_mutex_unlock (lock);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_ERROR | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_IMMEDIATE, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_create_session", smtp_strerror (smtp_errno (), ebuf,
+                                                         EBUF_LEN));
+    GNUNET_mutex_unlock (lock);
+    return GNUNET_SYSERR;
+  }
   if (0 == smtp_set_server (session, smtp_server_name))
   if (0 == smtp_set_server (session, smtp_server_name))
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_ERROR | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_IMMEDIATE,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_set_server",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-      smtp_destroy_session (session);
-      GNUNET_mutex_unlock (lock);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_ERROR | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_IMMEDIATE, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_set_server", smtp_strerror (smtp_errno (), ebuf,
+                                                     EBUF_LEN));
+    smtp_destroy_session (session);
+    GNUNET_mutex_unlock (lock);
+    return GNUNET_SYSERR;
+  }
   haddr = (const EmailAddress *) &hello[1];
   message = smtp_add_message (session);
   if (message == NULL)
   haddr = (const EmailAddress *) &hello[1];
   message = smtp_add_message (session);
   if (message == NULL)
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_BULK,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_add_message",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-      smtp_destroy_session (session);
-      GNUNET_mutex_unlock (lock);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_add_message", smtp_strerror (smtp_errno (), ebuf,
+                                                      EBUF_LEN));
+    smtp_destroy_session (session);
+    GNUNET_mutex_unlock (lock);
+    return GNUNET_SYSERR;
+  }
   smtp_set_header (message, "To", NULL, haddr->senderAddress);
   smtp_set_header (message, "From", NULL, email);
 
   smtp_set_header (message, "To", NULL, haddr->senderAddress);
   smtp_set_header (message, "From", NULL, email);
 
@@ -602,84 +597,77 @@ api_send (GNUNET_TSession * tsession,
   fvalue[0] = '\0';
   fvalue += 2;
   if (0 == smtp_set_header (message, filter, fvalue))
   fvalue[0] = '\0';
   fvalue += 2;
   if (0 == smtp_set_header (message, filter, fvalue))
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_BULK,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_set_header",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-      smtp_destroy_session (session);
-      GNUNET_mutex_unlock (lock);
-      GNUNET_free (filter);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_set_header", smtp_strerror (smtp_errno (), ebuf,
+                                                     EBUF_LEN));
+    smtp_destroy_session (session);
+    GNUNET_mutex_unlock (lock);
+    GNUNET_free (filter);
+    return GNUNET_SYSERR;
+  }
   GNUNET_free (filter);
   m = GNUNET_malloc (size + sizeof (SMTPMessage));
   memcpy (m, msg, size);
   GNUNET_free (filter);
   m = GNUNET_malloc (size + sizeof (SMTPMessage));
   memcpy (m, msg, size);
-  mp = (SMTPMessage *) & m[size];
+  mp = (SMTPMessage *) &m[size];
   mp->header.size = htons (size + sizeof (SMTPMessage));
   mp->header.type = htons (0);
   mp->sender = *coreAPI->my_identity;
   gm_cls.ebody = NULL;
   gm_cls.pos = 0;
   mp->header.size = htons (size + sizeof (SMTPMessage));
   mp->header.type = htons (0);
   mp->sender = *coreAPI->my_identity;
   gm_cls.ebody = NULL;
   gm_cls.pos = 0;
-  gm_cls.esize =
-    base64_encode (m, size + sizeof (SMTPMessage), &gm_cls.ebody);
+  gm_cls.esize = base64_encode (m, size + sizeof (SMTPMessage), &gm_cls.ebody);
   GNUNET_free (m);
   if (0 == smtp_size_set_estimate (message, gm_cls.esize))
   GNUNET_free (m);
   if (0 == smtp_size_set_estimate (message, gm_cls.esize))
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_BULK,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_size_set_estimate",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_size_set_estimate", smtp_strerror (smtp_errno (), ebuf,
+                                                            EBUF_LEN));
+  }
   if (0 == smtp_set_messagecb (message, &get_message, &gm_cls))
   if (0 == smtp_set_messagecb (message, &get_message, &gm_cls))
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_BULK,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_set_messagecb",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-      smtp_destroy_session (session);
-      GNUNET_mutex_unlock (lock);
-      GNUNET_free (gm_cls.ebody);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_set_messagecb", smtp_strerror (smtp_errno (), ebuf,
+                                                        EBUF_LEN));
+    smtp_destroy_session (session);
+    GNUNET_mutex_unlock (lock);
+    GNUNET_free (gm_cls.ebody);
+    return GNUNET_SYSERR;
+  }
   recipient = smtp_add_recipient (message, haddr->senderAddress);
   if (recipient == NULL)
   recipient = smtp_add_recipient (message, haddr->senderAddress);
   if (recipient == NULL)
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_BULK,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_add_recipient",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-      smtp_destroy_session (session);
-      GNUNET_mutex_unlock (lock);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_add_recipient", smtp_strerror (smtp_errno (), ebuf,
+                                                        EBUF_LEN));
+    smtp_destroy_session (session);
+    GNUNET_mutex_unlock (lock);
+    return GNUNET_SYSERR;
+  }
   if (0 == smtp_start_session (session))
   if (0 == smtp_start_session (session))
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                     GNUNET_GE_BULK,
-                     _("SMTP: `%s' failed: %s.\n"),
-                     "smtp_start_session",
-                     smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
-      smtp_destroy_session (session);
-      GNUNET_mutex_unlock (lock);
-      GNUNET_free (gm_cls.ebody);
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_LOG (ectx,
+                   GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_start_session", smtp_strerror (smtp_errno (), ebuf,
+                                                        EBUF_LEN));
+    smtp_destroy_session (session);
+    GNUNET_mutex_unlock (lock);
+    GNUNET_free (gm_cls.ebody);
+    return GNUNET_SYSERR;
+  }
   if (stats != NULL)
     stats->change (stat_bytesSent, size);
   if (coreAPI->load_monitor != NULL)
     GNUNET_network_monitor_notify_transmission (coreAPI->load_monitor,
   if (stats != NULL)
     stats->change (stat_bytesSent, size);
   if (coreAPI->load_monitor != NULL)
     GNUNET_network_monitor_notify_transmission (coreAPI->load_monitor,
-                                                GNUNET_ND_UPLOAD,
-                                                gm_cls.esize);
+                                                GNUNET_ND_UPLOAD, gm_cls.esize);
   smtp_message_reset_status (message);  /* this is needed to plug a 28-byte/message memory leak in libesmtp */
   smtp_destroy_session (session);
   GNUNET_mutex_unlock (lock);
   smtp_message_reset_status (message);  /* this is needed to plug a 28-byte/message memory leak in libesmtp */
   smtp_destroy_session (session);
   GNUNET_mutex_unlock (lock);
@@ -689,13 +677,14 @@ api_send (GNUNET_TSession * tsession,
 
 /**
  * Establish a connection to a remote node.
 
 /**
  * Establish a connection to a remote node.
- * @param helo the hello-Message for the target node
+ * @param hello the hello-Message for the target node
  * @param tsessionPtr the session handle that is to be set
  * @param tsessionPtr the session handle that is to be set
+ * @param may_reuse can we re-use an existing connection?
  * @return GNUNET_OK on success, GNUNET_SYSERR if the operation failed
  */
 static int
  * @return GNUNET_OK on success, GNUNET_SYSERR if the operation failed
  */
 static int
-api_connect (const GNUNET_MessageHello * hello,
-             GNUNET_TSession ** tsessionPtr, int may_reuse)
+api_connect (const GNUNET_MessageHello * hello, GNUNET_TSession ** tsessionPtr,
+             int may_reuse)
 {
   GNUNET_TSession *tsession;
 
 {
   GNUNET_TSession *tsession;
 
@@ -718,11 +707,11 @@ static int
 api_disconnect (GNUNET_TSession * tsession)
 {
   if (tsession != NULL)
 api_disconnect (GNUNET_TSession * tsession)
 {
   if (tsession != NULL)
-    {
-      if (tsession->internal != NULL)
-        GNUNET_free (tsession->internal);
-      GNUNET_free (tsession);
-    }
+  {
+    if (tsession->internal != NULL)
+      GNUNET_free (tsession->internal);
+    GNUNET_free (tsession);
+  }
   return GNUNET_OK;
 }
 
   return GNUNET_OK;
 }
 
@@ -735,15 +724,14 @@ api_start_transport_server ()
 {
   smtp_shutdown = GNUNET_NO;
   /* initialize SMTP network */
 {
   smtp_shutdown = GNUNET_NO;
   /* initialize SMTP network */
-  dispatchThread =
-    GNUNET_thread_create (&listenAndDistribute, NULL, 1024 * 4);
+  dispatchThread = GNUNET_thread_create (&listenAndDistribute, NULL, 1024 * 4);
   if (dispatchThread == NULL)
   if (dispatchThread == NULL)
-    {
-      GNUNET_GE_DIE_STRERROR (ectx,
-                              GNUNET_GE_ADMIN | GNUNET_GE_BULK |
-                              GNUNET_GE_FATAL, "pthread_create");
-      return GNUNET_SYSERR;
-    }
+  {
+    GNUNET_GE_DIE_STRERROR (ectx,
+                            GNUNET_GE_ADMIN | GNUNET_GE_BULK | GNUNET_GE_FATAL,
+                            "pthread_create");
+    return GNUNET_SYSERR;
+  }
   return GNUNET_OK;
 }
 
   return GNUNET_OK;
 }
 
@@ -766,8 +754,8 @@ api_stop_transport_server ()
  * Convert SMTP hello to an IP address (always fails).
  */
 static int
  * Convert SMTP hello to an IP address (always fails).
  */
 static int
-api_hello_to_address (const GNUNET_MessageHello * hello,
-                      void **sa, unsigned int *sa_len)
+api_hello_to_address (const GNUNET_MessageHello * hello, void **sa,
+                      unsigned int *sa_len)
 {
   return GNUNET_SYSERR;
 }
 {
   return GNUNET_SYSERR;
 }
@@ -807,62 +795,51 @@ inittransport_smtp (GNUNET_CoreAPIForTransport * core)
   coreAPI = core;
   ectx = core->ectx;
   if (!GNUNET_GC_have_configuration_value (coreAPI->cfg, "SMTP", "EMAIL"))
   coreAPI = core;
   ectx = core->ectx;
   if (!GNUNET_GC_have_configuration_value (coreAPI->cfg, "SMTP", "EMAIL"))
-    {
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_ERROR | GNUNET_GE_BULK | GNUNET_GE_USER,
-                     _
-                     ("No email-address specified, can not start SMTP transport.\n"));
-      return NULL;
-    }
-  GNUNET_GC_get_configuration_value_number (coreAPI->cfg,
-                                            "SMTP",
-                                            "MTU",
-                                            1200,
+  {
+    GNUNET_GE_LOG (ectx, GNUNET_GE_ERROR | GNUNET_GE_BULK | GNUNET_GE_USER,
+                   _
+                   ("No email-address specified, can not start SMTP transport.\n"));
+    return NULL;
+  }
+  GNUNET_GC_get_configuration_value_number (coreAPI->cfg, "SMTP", "MTU", 1200,
                                             SMTP_MESSAGE_SIZE,
                                             SMTP_MESSAGE_SIZE, &mtu);
                                             SMTP_MESSAGE_SIZE,
                                             SMTP_MESSAGE_SIZE, &mtu);
-  GNUNET_GC_get_configuration_value_number (coreAPI->cfg,
-                                            "SMTP",
-                                            "RATELIMIT",
+  GNUNET_GC_get_configuration_value_number (coreAPI->cfg, "SMTP", "RATELIMIT",
                                             0, 0, 1024 * 1024, &rate_limit);
   stats = coreAPI->service_request ("stats");
   if (stats != NULL)
                                             0, 0, 1024 * 1024, &rate_limit);
   stats = coreAPI->service_request ("stats");
   if (stats != NULL)
-    {
-      stat_bytesReceived
-        = stats->create (gettext_noop ("# bytes received via SMTP"));
-      stat_bytesSent = stats->create (gettext_noop ("# bytes sent via SMTP"));
-      stat_bytesDropped
-        = stats->create (gettext_noop ("# bytes dropped by SMTP (outgoing)"));
-    }
-  GNUNET_GC_get_configuration_value_filename (coreAPI->cfg,
-                                              "SMTP",
-                                              "PIPE",
+  {
+    stat_bytesReceived =
+        stats->create (gettext_noop ("# bytes received via SMTP"));
+    stat_bytesSent = stats->create (gettext_noop ("# bytes sent via SMTP"));
+    stat_bytesDropped =
+        stats->create (gettext_noop ("# bytes dropped by SMTP (outgoing)"));
+  }
+  GNUNET_GC_get_configuration_value_filename (coreAPI->cfg, "SMTP", "PIPE",
                                               GNUNET_DEFAULT_DAEMON_VAR_DIRECTORY
                                               "/smtp-pipe", &pipename);
   UNLINK (pipename);
   if (0 != mkfifo (pipename, S_IWUSR | S_IRUSR | S_IWGRP | S_IWOTH))
                                               GNUNET_DEFAULT_DAEMON_VAR_DIRECTORY
                                               "/smtp-pipe", &pipename);
   UNLINK (pipename);
   if (0 != mkfifo (pipename, S_IWUSR | S_IRUSR | S_IWGRP | S_IWOTH))
-    {
-      GNUNET_GE_LOG_STRERROR (ectx,
-                              GNUNET_GE_ADMIN | GNUNET_GE_BULK |
-                              GNUNET_GE_FATAL, "mkfifo");
-      GNUNET_free (pipename);
-      coreAPI->service_release (stats);
-      stats = NULL;
-      return NULL;
-    }
+  {
+    GNUNET_GE_LOG_STRERROR (ectx,
+                            GNUNET_GE_ADMIN | GNUNET_GE_BULK | GNUNET_GE_FATAL,
+                            "mkfifo");
+    GNUNET_free (pipename);
+    coreAPI->service_release (stats);
+    stats = NULL;
+    return NULL;
+  }
   /* we need to allow the mailer program to send us messages;
   /* we need to allow the mailer program to send us messages;
-     easiest done by giving it write permissions (see Mantis #1142) */
+   * easiest done by giving it write permissions (see Mantis #1142) */
   if (0 != chmod (pipename, S_IWUSR | S_IRUSR | S_IWGRP | S_IWOTH))
     GNUNET_GE_LOG_STRERROR (ectx,
                             GNUNET_GE_ADMIN | GNUNET_GE_BULK |
                             GNUNET_GE_WARNING, "chmod");
   if (0 != chmod (pipename, S_IWUSR | S_IRUSR | S_IWGRP | S_IWOTH))
     GNUNET_GE_LOG_STRERROR (ectx,
                             GNUNET_GE_ADMIN | GNUNET_GE_BULK |
                             GNUNET_GE_WARNING, "chmod");
-  GNUNET_GC_get_configuration_value_string (coreAPI->cfg,
-                                            "SMTP", "EMAIL", NULL, &email);
+  GNUNET_GC_get_configuration_value_string (coreAPI->cfg, "SMTP", "EMAIL", NULL,
+                                            &email);
   lock = GNUNET_mutex_create (GNUNET_NO);
   lock = GNUNET_mutex_create (GNUNET_NO);
-  GNUNET_GC_get_configuration_value_string (coreAPI->cfg,
-                                            "SMTP",
-                                            "SERVER",
-                                            "localhost:25",
-                                            &smtp_server_name);
+  GNUNET_GC_get_configuration_value_string (coreAPI->cfg, "SMTP", "SERVER",
+                                            "localhost:25", &smtp_server_name);
   sa.sa_handler = SIG_IGN;
   sigemptyset (&sa.sa_mask);
   sa.sa_flags = 0;
   sa.sa_handler = SIG_IGN;
   sigemptyset (&sa.sa_mask);
   sa.sa_flags = 0;
@@ -890,10 +867,10 @@ donetransport_smtp ()
   sigaction (SIGPIPE, &old_handler, NULL);
   GNUNET_free (smtp_server_name);
   if (stats != NULL)
   sigaction (SIGPIPE, &old_handler, NULL);
   GNUNET_free (smtp_server_name);
   if (stats != NULL)
-    {
-      coreAPI->service_release (stats);
-      stats = NULL;
-    }
+  {
+    coreAPI->service_release (stats);
+    stats = NULL;
+  }
   GNUNET_mutex_destroy (lock);
   lock = NULL;
   UNLINK (pipename);
   GNUNET_mutex_destroy (lock);
   lock = NULL;
   UNLINK (pipename);