END_TEST START_TEST(test_dbmail_message_encoded) { DbmailMessage *m = dbmail_message_new(); GString *s = g_string_new(encoded_message_koi); //const char *exp = ":: [ Arrty ] :: [ Roy (L) Stèphanie ] <*****@*****.**>"; u64_t id = 0; m = dbmail_message_init_with_string(m, s); fail_unless(strcmp(dbmail_message_get_header(m,"From"),"=?koi8-r?Q?=E1=CE=D4=CF=CE=20=EE=C5=C8=CF=D2=CF=DB=C9=C8=20?=<*****@*****.**>")==0, "dbmail_message_get_header failed for koi-8 encoded header"); dbmail_message_free(m); m = dbmail_message_new(); g_string_printf(s, "%s", utf7_header); m = dbmail_message_init_with_string(m, s); g_string_free(s, TRUE); dbmail_message_store(m); id = dbmail_message_get_physid(m); dbmail_message_free(m); m = dbmail_message_new(); m = dbmail_message_retrieve(m, id, DBMAIL_MESSAGE_FILTER_FULL); dbmail_message_free(m); }
END_TEST //DbmailMessage * dbmail_message_retrieve(DbmailMessage *self, u64_t physid, int filter); START_TEST(test_dbmail_message_retrieve) { DbmailMessage *m, *n; GString *s; u64_t physid; s = g_string_new(multipart_message); m = dbmail_message_new(); m = dbmail_message_init_with_string(m, s); fail_unless(m != NULL, "dbmail_message_init_with_string failed"); dbmail_message_set_header(m, "References", "<*****@*****.**> <*****@*****.**> <*****@*****.**> "); dbmail_message_store(m); physid = dbmail_message_get_physid(m); fail_unless(physid > 0, "dbmail_message_get_physid failed"); n = dbmail_message_new(); n = dbmail_message_retrieve(n,physid,DBMAIL_MESSAGE_FILTER_HEAD); fail_unless(n != NULL, "dbmail_message_retrieve failed"); fail_unless(n->content != NULL, "dbmail_message_retrieve failed"); dbmail_message_free(m); dbmail_message_free(n); g_string_free(s,TRUE); }
END_TEST START_TEST(test_dbmail_message_store2) { DbmailMessage *m, *n; u64_t physid; char *t; char *expect; m = message_init(broken_message2); dbmail_message_set_header(m, "Return-Path", dbmail_message_get_header(m, "From")); expect = dbmail_message_to_string(m); fail_unless(m != NULL, "dbmail_message_store2 failed"); dbmail_message_store(m); physid = dbmail_message_get_physid(m); dbmail_message_free(m); n = dbmail_message_new(); dbmail_message_set_physid(n, physid); n = dbmail_message_retrieve(n,physid,DBMAIL_MESSAGE_FILTER_FULL); fail_unless(n != NULL, "_mime_retrieve failed"); t = dbmail_message_to_string(n); COMPARE(expect,t); dbmail_message_free(n); g_free(expect); g_free(t); }
int do_migrate(int migrate_limit) { C c; R r; int id = 0; int count = 0; DbmailMessage *m; qprintf ("Mirgrate legacy 2.2.x messageblks to mimeparts...\n"); if (!yes_to_all) { qprintf ("\tmigration skipped. Use -y option to perform mirgration.\n"); return 0; } qprintf ("Preparing to migrate %d physmessages.\n", migrate_limit); c = db_con_get(); TRY r = db_query(c, "SELECT DISTINCT(physmessage_id) FROM %smessageblks LIMIT %d", DBPFX, migrate_limit); qprintf ("Migrating %d physmessages...\n", migrate_limit); while (db_result_next(r)) { count++; id = db_result_get_u64(r,0); m = dbmail_message_new(); m = dbmail_message_retrieve(m, id, DBMAIL_MESSAGE_FILTER_FULL); if(!dm_message_store(m)) { if(verbose) qprintf ("%d ",id); db_update("DELETE FROM %smessageblks WHERE physmessage_id = %d", DBPFX, id); } else { if(!verbose) qprintf ("migrating physmessage_id: %d\n",id); qprintf ("failed\n"); return -1; } dbmail_message_free(m); } CATCH(SQLException) LOG_SQLERROR; return -1; FINALLY db_con_close(c); END_TRY; qprintf ("Migration complete. Migrated %d physmessages.\n", count); return 0; }
int do_migrate(int migrate_limit) { Connection_T c; ResultSet_T r; int id = 0; volatile int count = 0; DbmailMessage *m; qprintf ("Migrate legacy 2.2.x messageblks to mimeparts...\n"); if (!yes_to_all) { qprintf ("\tmigration skipped. Use -y option to perform migration.\n"); return 0; } qprintf ("Preparing to migrate up to %d physmessages.\n", migrate_limit); c = db_con_get(); TRY db_begin_transaction(c); r = db_query(c, "SELECT DISTINCT(physmessage_id) FROM %smessageblks LIMIT %d", DBPFX, migrate_limit); while (db_result_next(r)) { count++; id = db_result_get_u64(r,0); m = dbmail_message_new(NULL); m = dbmail_message_retrieve(m, id); if(! dm_message_store(m)) { if(verbose) qprintf ("%d ",id); db_update("DELETE FROM %smessageblks WHERE physmessage_id = %d", DBPFX, id); } dbmail_message_free(m); } db_commit_transaction(c); CATCH(SQLException) LOG_SQLERROR; db_rollback_transaction(c); return -1; FINALLY db_con_close(c); END_TRY; qprintf ("Migration complete. Migrated %d physmessages.\n", count); return 0; }
static char *store_and_retrieve(DbmailMessage *m) { u64_t physid; DbmailMessage *n; char *t; dbmail_message_store(m); physid = dbmail_message_get_physid(m); fail_unless(physid != 0,"dbmail_message_store failed. physid [%llu]", physid); dbmail_message_free(m); n = dbmail_message_new(); dbmail_message_set_physid(n, physid); n = dbmail_message_retrieve(n,physid,DBMAIL_MESSAGE_FILTER_FULL); fail_unless(n != NULL, "_mime_retrieve failed"); t = dbmail_message_to_string(n); dbmail_message_free(n); return t; }
void Http_getMessages(T R) { DbmailMessage *m = dbmail_message_new(); struct evbuffer *buf; uint64_t pid; uint64_t id = 0; if (! Request_getId(R)) return; if (! (id = strtoull(Request_getId(R), NULL, 10))) { Request_error(R, HTTP_NOTFOUND, "Not found"); return; } db_get_physmessage_id(id, &pid); if (! pid) { Request_error(R, HTTP_NOTFOUND, "Not found"); return; } buf = evbuffer_new(); m = dbmail_message_retrieve(m, pid); if (Request_getMethod(R) == NULL) { /* * retrieve message meta-data * C < GET /messages/1245911 */ uint64_t size = dbmail_message_get_size(m, TRUE); Request_setContentType(R,"application/json; charset=utf-8"); evbuffer_add_printf(buf, "{\"messages\": {\n"); evbuffer_add_printf(buf, " \"%lu\":{\"size\":%lu}", id, size); evbuffer_add_printf(buf, "\n}}\n"); } else if (MATCH(Request_getMethod(R), "view")) { /* * retrieve message by message_idnr * C < GET /messages/1245911/view */ char *s = dbmail_message_to_string(m); Request_setContentType(R, "message/rfc822; charset=utf-8"); evbuffer_add_printf(buf, "%s", s); g_free(s); } else if (MATCH(Request_getMethod(R),"headers")) { Request_setContentType(R, "text/plain; charset=utf-8"); if (Request_getArg(R) && strlen(Request_getArg(R))) { /* * retrieve selected message headers * C < GET /messages/1245911/headers/subject,from,to */ int i = 0; char **headerlist = g_strsplit(Request_getArg(R),",",0); while (headerlist[i]) { char *hname = headerlist[i]; hname[0] = g_ascii_toupper(hname[0]); TRACE(TRACE_DEBUG,"header: [%s]", headerlist[i]); GList * headers = dbmail_message_get_header_repeated(m, headerlist[i]); while(headers) { evbuffer_add_printf(buf, "%s: %s\n", hname, (char *)headers->data); if (! g_list_next(headers)) break; headers = g_list_next(headers); } i++; } } else { /* * retrieve all message headers * C < GET /messages/1245911/headers */ char *s = dbmail_message_hdrs_to_string(m); Request_setContentType(R, "text/plain; charset=utf-8"); evbuffer_add_printf(buf, "%s", s); g_free(s); } } if (EVBUFFER_LENGTH(buf)) Request_send(R, HTTP_OK, "OK", buf); else Request_error(R, HTTP_SERVUNAVAIL, "Server error"); evbuffer_free(buf); dbmail_message_free(m); }