4 * Handles editing of vCard objects.
15 #include <sys/types.h>
17 #include <sys/socket.h>
20 #include <netinet/in.h>
33 void edit_vcard(void) {
35 char *serialized_vcard = NULL;
57 char extrafields[SIZ];
76 sprintf(buf, "OPNA %s|%s", bstr("msgnum"), bstr("partnum") );
84 total_len = atoi(&buf[4]);
85 serialized_vcard = malloc(total_len + 1);
86 while (bytes < total_len) {
88 if ((total_len - bytes) < thisblock) thisblock = total_len - bytes;
89 sprintf(buf, "READ %d|%d", bytes, thisblock);
93 thisblock = atoi(&buf[4]);
94 serv_read(&serialized_vcard[bytes], thisblock);
98 wprintf("Error: %s<BR>\n", &buf[4]);
104 serialized_vcard[total_len + 1] = 0;
106 v = vcard_load(serialized_vcard);
107 free(serialized_vcard);
109 /* Populate the variables for our form */
111 while (key = vcard_get_prop(v, "", 0, i, 1), key != NULL) {
112 value = vcard_get_prop(v, "", 0, i++, 0);
114 if (!strcasecmp(key, "n")) {
115 extract_token(lastname, value, 0, ';');
116 extract_token(firstname, value, 1, ';');
117 extract_token(middlename, value, 2, ';');
118 extract_token(prefix, value, 3, ';');
119 extract_token(suffix, value, 4, ';');
122 else if (!strcasecmp(key, "adr")) {
123 extract_token(pobox, value, 0, ';');
124 extract_token(extadr, value, 1, ';');
125 extract_token(street, value, 2, ';');
126 extract_token(city, value, 3, ';');
127 extract_token(state, value, 4, ';');
128 extract_token(zipcode, value, 5, ';');
129 extract_token(country, value, 6, ';');
132 else if (!strcasecmp(key, "tel;home")) {
133 extract_token(hometel, value, 0, ';');
136 else if (!strcasecmp(key, "tel;work")) {
137 extract_token(worktel, value, 0, ';');
141 strcat(extrafields, key);
142 strcat(extrafields, ":");
143 strcat(extrafields, value);
144 strcat(extrafields, "\n");
151 /* Display the form */
152 wprintf("<FORM METHOD=\"POST\" ACTION=\"/submit_vcard\">\n");
153 wprintf("<H2><IMG VALIGN=CENTER SRC=\"/static/vcard.gif\">"
154 "Contact information for FIXME</H2>\n");
156 wprintf("<TABLE border=0><TR>"
161 "<TD>Suffix</TD></TR>\n");
162 wprintf("<TR><TD><INPUT TYPE=\"text\" NAME=\"prefix\" "
163 "VALUE=\"%s\" MAXLENGTH=\"5\"></TD>",
165 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"firstname\" "
166 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
168 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"middlename\" "
169 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
171 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"lastname\" "
172 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
174 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"suffix\" "
175 "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR></TABLE>\n",
178 wprintf("<TABLE border=0><TR><TD>PO box (optional):</TD>"
179 "<TD><INPUT TYPE=\"text\" NAME=\"pobox\" "
180 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
182 wprintf("<TR><TD>Address line 1:</TD>"
183 "<TD><INPUT TYPE=\"text\" NAME=\"extadr\" "
184 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
186 wprintf("<TR><TD>Address line 2:</TD>"
187 "<TD><INPUT TYPE=\"text\" NAME=\"street\" "
188 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
190 wprintf("<TR><TD>City:</TD>"
191 "<TD><INPUT TYPE=\"text\" NAME=\"city\" "
192 "VALUE=\"%s\" MAXLENGTH=\"29\">\n",
195 "<INPUT TYPE=\"text\" NAME=\"state\" "
196 "VALUE=\"%s\" MAXLENGTH=\"2\">\n",
198 wprintf(" ZIP code: "
199 "<INPUT TYPE=\"text\" NAME=\"zipcode\" "
200 "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR>\n",
202 wprintf("<TR><TD>Country:</TD>"
203 "<TD><INPUT TYPE=\"text\" NAME=\"country\" "
204 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
207 wprintf("<TABLE BORDER=0><TR><TD>Home telephone:</TD>"
208 "<TD><INPUT TYPE=\"text\" NAME=\"hometel\" "
209 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
211 wprintf("<TR><TD>Work telephone:</TD>"
212 "<TD><INPUT TYPE=\"text\" NAME=\"worktel\" "
213 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
216 wprintf("<INPUT TYPE=\"hidden\" NAME=\"extrafields\" VALUE=\"");
217 escputs(extrafields);
220 wprintf("<CENTER>\n");
221 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
222 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
223 wprintf("</CENTER></FORM>\n");
231 void submit_vcard(void) {
235 sprintf(buf, "ENT0 1|||4||");
236 fprintf(stderr, "%s\n", buf);
239 fprintf(stderr, "%s\n", buf);
245 serv_puts("Content-type: text/x-vcard");
247 serv_puts("begin:vcard");
248 serv_printf("n:%s;%s;%s;%s;%s",
254 serv_printf("adr:%s;%s;%s;%s;%s;%s;%s",
262 serv_printf("tel;home:%s", bstr("hometel") );
263 serv_printf("tel;work:%s", bstr("worktel") );
264 serv_printf("%s", bstr("extrafields") );
265 serv_puts("end:vcard");