+2006-04-23 [colin] 2.1.1cvs23
+
+ * src/etpan/imap-thread.c
+ Better logging (line-per-line, hide data in fetch)
+ Fix a const warning
+ * src/gtk/logwindow.c
+ * src/gtk/logwindow.h
+ Better logging (color for input/output)
+
2006-04-21 [colin] 2.1.1cvs22
* src/gtk/quicksearch.c
( cvs diff -u -r 1.179.2.106 -r 1.179.2.107 src/imap.c; cvs diff -u -r 1.34.2.4 -r 1.34.2.5 src/imap.h; cvs diff -u -r 1.105.2.53 -r 1.105.2.54 src/prefs_account.c; ) > 2.1.1cvs20.patchset
( cvs diff -u -r 1.207.2.95 -r 1.207.2.96 src/folderview.c; cvs diff -u -r 1.274.2.107 -r 1.274.2.108 src/mainwindow.c; cvs diff -u -r 1.36.2.60 -r 1.36.2.61 src/common/utils.c; ) > 2.1.1cvs21.patchset
( cvs diff -u -r 1.1.2.41 -r 1.1.2.42 src/gtk/quicksearch.c; ) > 2.1.1cvs22.patchset
+( cvs diff -u -r 1.1.4.34 -r 1.1.4.35 src/etpan/imap-thread.c; cvs diff -u -r 1.1.4.14 -r 1.1.4.15 src/gtk/logwindow.c; cvs diff -u -r 1.1.4.3 -r 1.1.4.4 src/gtk/logwindow.h; ) > 2.1.1cvs23.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=22
+EXTRA_VERSION=23
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
return TRUE;
}
-void imap_logger(int direction, const char * str, size_t size)
+void imap_logger_cmd(int direction, const char * str, size_t size)
{
- gchar buf[512];
+ gchar *buf;
+ gchar **lines;
+ int i = 0;
+
+ buf = malloc(size+1);
+ memset(buf, 0, size+1);
+ strncpy(buf, str, size);
+ buf[size] = '\0';
- memset(buf, 0, 512);
- strncpy(buf, str, size > 510 ? 510:size);
- buf[511] = '\0';
- if (size < 511)
- buf[size] = '\0';
if (!strncmp(buf, "<<<<<<<", 7)
- || !strncmp(buf, ">>>>>>>", 7)
- || buf[0] == '\r' || buf[0] == '\n')
+ || !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);
+
+ while (lines[i] && *lines[i]) {
+ log_print("IMAP4%c %s\n", direction?'>':'<', lines[i]);
+ i++;
+ }
+ g_strfreev(lines);
+ free(buf);
+}
+
+void imap_logger_fetch(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 (strstr(buf, "\n"))
- *strstr(buf, "\n") = ' ';
+ while (strlen(buf) > 0 && buf[strlen(buf)-1] == '\n')
+ buf[strlen(buf)-1] = '\0';
- log_print("IMAP4%c %s\n", direction?'>':'<', buf);
+ 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
mailstream_network_delay.tv_usec = 0;
mailstream_debug = 1;
- mailstream_logger = imap_logger;
+ mailstream_logger = imap_logger_cmd;
imap_hash = chash_new(CHASH_COPYKEY, CHASH_DEFAULTSIZE);
session_hash = chash_new(CHASH_COPYKEY, CHASH_DEFAULTSIZE);
return result.error;
}
-static int etpan_certificate_check(unsigned char *certificate, int len, void *data)
+static int etpan_certificate_check(const unsigned char *certificate, int len, void *data)
{
#ifdef USE_OPENSSL
struct connect_param *param = (struct connect_param *)data;
goto free_fetch_att;
}
+ mailstream_logger = imap_logger_fetch;
+
r = mailimap_uid_fetch(imap, set,
fetch_type, &fetch_result);
+ mailstream_logger = imap_logger_cmd;
+
mailimap_fetch_type_free(fetch_type);
mailimap_set_free(set);
{
GtkTextBuffer *buffer;
GdkColormap *colormap;
- GdkColor color[3] =
- {{0, 0, 0xafff, 0}, {0, 0xefff, 0, 0}, {0, 0xefff, 0, 0}};
- gboolean success[3];
+ GdkColor color[5] =
+ {{0, 0, 0xafff, 0}, {0, 0xefff, 0, 0}, {0, 0xefff, 0, 0},
+ {0, 0, 0, 0}, {0, 0, 0, 0xefff}};
+ gboolean success[5];
gint i;
logwin->msg_color = color[0];
logwin->warn_color = color[1];
logwin->error_color = color[2];
+ logwin->in_color = color[3];
+ logwin->out_color = color[4];
colormap = gdk_drawable_get_colormap(logwin->window->window);
- gdk_colormap_alloc_colors(colormap, color, 3, FALSE, TRUE, success);
+ gdk_colormap_alloc_colors(colormap, color, 5, FALSE, TRUE, success);
- for (i = 0; i < 3; i++) {
+ for (i = 0; i < 5; i++) {
if (success[i] == FALSE) {
GtkStyle *style;
g_warning("LogWindow: color allocation failed\n");
style = gtk_widget_get_style(logwin->window);
logwin->msg_color = logwin->warn_color =
- logwin->error_color = style->black;
+ logwin->error_color = logwin->in_color =
+ logwin->out_color = style->black;
break;
}
}
gtk_text_buffer_create_tag(buffer, "error",
"foreground-gdk", &logwin->error_color,
NULL);
+ gtk_text_buffer_create_tag(buffer, "input",
+ "foreground-gdk", &logwin->in_color,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "output",
+ "foreground-gdk", &logwin->out_color,
+ NULL);
}
void log_window_show(LogWindow *logwin)
GtkTextView *text;
GtkTextBuffer *buffer;
GtkTextIter iter;
- GdkColor *color = NULL;
gchar *head = NULL;
const gchar *tag;
switch (logtext->type) {
case LOG_MSG:
- color = &logwindow->msg_color;
tag = "message";
head = "* ";
break;
case LOG_WARN:
- color = &logwindow->warn_color;
tag = "warn";
head = "** ";
break;
case LOG_ERROR:
- color = &logwindow->error_color;
tag = "error";
head = "*** ";
break;
break;
}
+ if (tag == NULL) {
+ if (strstr(logtext->text, "] POP3>")
+ || strstr(logtext->text, "] IMAP4>")
+ || strstr(logtext->text, "] NNTP>"))
+ tag = "output";
+ if (strstr(logtext->text, "] POP3<")
+ || strstr(logtext->text, "] IMAP4<")
+ || strstr(logtext->text, "] NNTP<"))
+ tag = "input";
+ }
+
if (head)
gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, head, -1,
tag, NULL);
GdkColor msg_color;
GdkColor warn_color;
GdkColor error_color;
+ GdkColor in_color;
+ GdkColor out_color;
gboolean clip;
guint clip_length;