END_TEST START_TEST(test_dbmail_message_get_header) { char *t; DbmailMessage *h = dbmail_message_new(); DbmailMessage *m = dbmail_message_new(); GString *s, *j; s = g_string_new(multipart_message); m = dbmail_message_init_with_string(m, s); t = dbmail_message_hdrs_to_string(m); j = g_string_new(t); h = dbmail_message_init_with_string(h, j); g_free(t); fail_unless(dbmail_message_get_header(m, "X-Foobar")==NULL, "get_header failed on full message"); fail_unless(strcmp(dbmail_message_get_header(m,"Subject"),"multipart/mixed")==0,"get_header failed on full message"); fail_unless(dbmail_message_get_header(h, "X-Foobar")==NULL, "get_header failed on headers-only message"); fail_unless(strcmp(dbmail_message_get_header(h,"Subject"),"multipart/mixed")==0,"get_header failed on headers-only message"); dbmail_message_free(m); dbmail_message_free(h); g_string_free(s,TRUE); g_string_free(j,TRUE); }
END_TEST //DbmailMessage * dbmail_message_init_with_stream(DbmailMessage *self, GMimeStream *stream, int type); /* START_TEST(test_dbmail_message_init_with_stream) { } END_TEST */ //gchar * dbmail_message_hdrs_to_string(DbmailMessage *self); START_TEST(test_dbmail_message_hdrs_to_string) { char *result; GString *s; DbmailMessage *m; s = g_string_new(multipart_message); m = dbmail_message_new(); m = dbmail_message_init_with_string(m, s); result = dbmail_message_hdrs_to_string(m); fail_unless(strlen(result)==676, "dbmail_message_hdrs_to_string failed [%d] != [634]\n[%s]\n", strlen(result), result); g_string_free(s,TRUE); dbmail_message_free(m); g_free(result); }
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); }