4 * vNote implementation for Citadel
6 * Copyright (C) 1999-2007 by the citadel.org development team.
7 * This code is freely redistributable under the terms of the GNU General
8 * Public License. All other rights reserved.
18 #if TIME_WITH_SYS_TIME
19 # include <sys/time.h>
23 # include <sys/time.h>
34 #include <libcitadel.h>
37 /* move this into the header file when we're done */
38 #define CTDL_VNOTE_MAGIC 0xa1fa
54 struct vnote *vnote_new(void) {
57 v = (struct vnote *) malloc(sizeof(struct vnote));
59 memset(v, 0, sizeof(struct vnote));
60 v->magic = CTDL_VNOTE_MAGIC;
61 v->pos_left = rand() % 256;
62 v->pos_top = rand() % 256;
66 v->color_green = 0xFF;
72 struct vnote *vnote_new_from_str(char *s) {
78 /* FIXME finish this */
83 void vnote_free(struct vnote *v) {
85 if (v->magic != CTDL_VNOTE_MAGIC) return;
87 if (v->uid) free(v->uid);
88 if (v->summary) free(v->summary);
89 if (v->body) free(v->body);
91 memset(v, 0, sizeof(struct vnote));
96 /* helper function for vnote_serialize() */
97 void vnote_serialize_output_field(char *append_to, char *field, char *label) {
101 if (!append_to) return;
105 mydup = strdup(field);
108 /* FIXME -- do quoted-printable encoding here */
110 sprintf(&append_to[strlen(append_to)], "%s:%s\r\n", label, mydup);
115 char *vnote_serialize(struct vnote *v) {
117 int bytes_needed = 0;
120 if (v->magic != CTDL_VNOTE_MAGIC) return NULL;
123 if (v->summary) bytes_needed += strlen(v->summary);
124 if (v->body) bytes_needed += strlen(v->body);
125 s = malloc(bytes_needed);
129 vnote_serialize_output_field(s, "vnote", "BEGIN");
130 vnote_serialize_output_field(s, "//Citadel//vNote handler library//EN", "PRODID");
131 vnote_serialize_output_field(s, "1.1", "VERSION");
132 vnote_serialize_output_field(s, "PUBLIC", "CLASS");
133 vnote_serialize_output_field(s, v->uid, "UID");
134 vnote_serialize_output_field(s, v->body, "BODY");
135 vnote_serialize_output_field(s, v->body, "NOTE");
136 vnote_serialize_output_field(s, "vnote", "END");
141 #ifdef VNOTE_TEST_HARNESS
143 char *bynari_sample =
146 "PRODID://Bynari Insight Connector 3.1.3-0605191//Import from Outlook//EN\n"
148 "UID:040000008200E00074C5B7101A82E00800000000000000000000000000820425CE8571864B8D141CB3FB8CAC62\n"
149 "NOTE;ENCODING=QUOTED-PRINTABLE:blah blah blah=0D=0A=0D=0A\n"
150 "SUMMARY:blah blah blah=0D=0A=0D=0A\n"
151 "X-OUTLOOK-COLOR:#FFFF00\n"
152 "X-OUTLOOK-WIDTH:200\n"
153 "X-OUTLOOK-HEIGHT:166\n"
154 "X-OUTLOOK-LEFT:80\n"
156 "X-OUTLOOK-CREATE-TIME:20070611T204615Z\n"
157 "REV:20070611T204621Z\n"
164 "UID:20061129111109.7chx73xdok1s at 172.16.45.2\n"
166 "DCREATED:20061129T101109Z\n"
175 printf("Before:\n-------------\n%s-------------\nAfter:\n-----------\n", bynari_sample);
176 v = vnote_new_from_str(bynari_sample);
177 s = vnote_serialize(v);