2006-06-19 [colin] 2.3.0cvs23
[claws.git] / src / etpan / imap-thread.c
index ff0b75a825a6db3a5b1ef38ad2fcd4552a1dfbe1..f3d0d192f963f724544fbd2401cdb3b197434e7b 100644 (file)
@@ -105,6 +105,40 @@ void imap_logger_fetch(int direction, const char * str, size_t size)
        free(buf);
 }
 
+void imap_logger_append(int direction, const char * str, size_t size) 
+{
+       gchar *buf;
+       gchar **lines;
+       int i = 0;
+
+       buf = malloc(size+1);
+       memset(buf, 0, size+1);
+       strncpy(buf, str, size);
+       buf[size] = '\0';
+       if (!strncmp(buf, "<<<<<<<", 7) 
+       ||  !strncmp(buf, ">>>>>>>", 7)) {
+               free(buf);
+               return;
+       }
+       while (strstr(buf, "\r"))
+               *strstr(buf, "\r") = ' ';
+       while (strlen(buf) > 0 && buf[strlen(buf)-1] == '\n')
+               buf[strlen(buf)-1] = '\0';
+
+       lines = g_strsplit(buf, "\n", -1);
+
+       if (direction == 0 || (buf[0] == '*' && buf[1] == ' ') || size < 32) {
+               while (lines[i] && *lines[i]) {
+                       log_print("IMAP4%c %s\n", direction?'>':'<', lines[i]);
+                       i++;
+               }
+       } else {
+               log_print("IMAP4%c [data - %zd bytes]\n", direction?'>':'<', size);
+       }
+       g_strfreev(lines);
+       free(buf);
+}
+
 #define ETPAN_DEFAULT_NETWORK_TIMEOUT 60
 static gboolean etpan_skip_ssl_cert_check = FALSE;
 
@@ -346,8 +380,10 @@ static int etpan_certificate_check(const unsigned char *certificate, int len, vo
                return 0;
        } else if (ssl_certificate_check(cert, 
                (gchar *)param->server, (gushort)param->port) == TRUE) {
+               X509_free(cert);
                return 0;
        } else {
+               X509_free(cert);
                return -1;
        }
 #else
@@ -2135,9 +2171,13 @@ static void append_run(struct etpan_thread_op * op)
                return;
        }
        
+       mailstream_logger = imap_logger_append;
+       
        r = mailimap_append(param->imap, param->mailbox,
                            param->flag_list, NULL,
                            data, size/*, &uid */);
+
+       mailstream_logger = imap_logger_cmd;
        
        munmap(data, size);
        close(fd);