]> code.citadel.org Git - citadel.git/blob - libcitadel/lib/vnote.c
more vnote hacking
[citadel.git] / libcitadel / lib / vnote.c
1 /*
2  * $Id: $
3  *
4  * vNote implementation for Citadel
5  *
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.
9  */
10
11
12 #include <stdlib.h>
13 #include <unistd.h>
14 #include <stdio.h>
15 #include <fcntl.h>
16 #include <signal.h>
17
18 #if TIME_WITH_SYS_TIME
19 # include <sys/time.h>
20 # include <time.h>
21 #else
22 # if HAVE_SYS_TIME_H
23 #  include <sys/time.h>
24 # else
25 #  include <time.h>
26 # endif
27 #endif
28
29 #include <ctype.h>
30 #include <string.h>
31 #include <errno.h>
32 #include <limits.h>
33 #include <string.h>
34 #include <libcitadel.h>
35
36
37 /* move this into the header file when we're done */
38 #define CTDL_VNOTE_MAGIC        0xa1fa
39 struct vnote {
40         int magic;
41         char *uid;
42         char *summary;
43         char *body;
44         int pos_left;
45         int pos_top;
46         int pos_width;
47         int pos_height;
48         int color_red;
49         int color_green;
50         int color_blue;
51 };
52
53
54 struct vnote *vnote_new(void) {
55         struct vnote *v;
56
57         v = (struct vnote *) malloc(sizeof(struct vnote));
58         if (v) {
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;
63                 v->pos_width = 200;
64                 v->pos_height = 150;
65                 v->color_red = 0xFF;
66                 v->color_green = 0xFF;
67                 v->color_blue = 0x00;
68         }
69         return v;
70 }
71
72 struct vnote *vnote_new_from_str(char *s) {
73         struct vnote *v;
74
75         v = vnote_new();
76         if (!v) return NULL;
77
78         /* FIXME finish this */
79 }
80
81 void vnote_free(struct vnote *v) {
82         if (!v) return;
83         if (v->magic != CTDL_VNOTE_MAGIC) return;
84
85         if (v->uid) free(v->uid);
86         if (v->summary) free(v->summary);
87         if (v->body) free(v->body);
88         
89         memset(v, 0, sizeof(struct vnote));
90         free(v);
91 }
92
93 char *vnote_serialize(struct vnote *v) {
94         char *s;
95         int bytes_needed = 0;
96
97         if (!v) return NULL;
98         if (v->magic != CTDL_VNOTE_MAGIC) return NULL;
99
100         bytes_needed = 1024;
101         if (v->summary) bytes_needed += strlen(v->summary);
102         if (v->body) bytes_needed += strlen(v->body);
103         s = malloc(bytes_needed);
104         if (!s) return NULL;
105
106         strcpy(s, "BEGIN:vnote\r\n"
107                 "VERSION:1.1\r\n"
108                 "PRODID://Citadel//vNote handler library//EN\r\n"
109                 "CLASS:PUBLIC\r\n"
110         );
111         if (v->uid) {
112                 strcat(s, "UID:");
113                 strcat(s, v->uid);
114                 strcat(s, "\r\n");
115         }
116
117         strcat(s, "END:vnote\r\n");
118         return(s);
119 }
120
121
122 #ifdef VNOTE_TEST_HARNESS
123
124 char *bynari_sample =
125         "BEGIN:vnote\n"
126         "VERSION:1.1\n"
127         "PRODID://Bynari Insight Connector 3.1.3-0605191//Import from Outlook//EN\n"
128         "CLASS:PUBLIC\n"
129         "UID:040000008200E00074C5B7101A82E00800000000000000000000000000820425CE8571864B8D141CB3FB8CAC62\n"
130         "NOTE;ENCODING=QUOTED-PRINTABLE:blah blah blah=0D=0A=0D=0A\n"
131         "SUMMARY:blah blah blah=0D=0A=0D=0A\n"
132         "X-OUTLOOK-COLOR:#FFFF00\n"
133         "X-OUTLOOK-WIDTH:200\n"
134         "X-OUTLOOK-HEIGHT:166\n"
135         "X-OUTLOOK-LEFT:80\n"
136         "X-OUTLOOK-TOP:80\n"
137         "X-OUTLOOK-CREATE-TIME:20070611T204615Z\n"
138         "REV:20070611T204621Z\n"
139         "END:vnote\n"
140 ;
141
142 char *horde_sample =
143         "BEGIN:VNOTE\n"
144         "VERSION:1.1\n"
145         "UID:20061129111109.7chx73xdok1s at 172.16.45.2\n"
146         "BODY:HORDE_1\n"
147         "DCREATED:20061129T101109Z\n"
148         "END:VNOTE\n"
149 ;
150
151
152 main() {
153         char *s;
154         struct vnote *v;
155
156         v = vnote_new_from_str(bynari_sample);
157         s = vnote_serialize(v);
158         vnote_free(v);
159         if (s) {
160                 printf("%s\n", s);
161                 free(s);
162         }
163
164         exit(0);
165 }
166 #endif