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;
58 char extrafields[SIZ];
79 sprintf(buf, "MSG0 %s|1", bstr("msgnum") );
86 while (serv_gets(buf), strcmp(buf, "000")) {
87 if (!strncasecmp(buf, "from=", 5)) {
88 strcpy(whatuser, &buf[5]);
90 else if (!strncasecmp(buf, "node=", 5)) {
91 strcat(whatuser, " @ ");
92 strcat(whatuser, &buf[5]);
96 total_len = atoi(&buf[4]);
99 sprintf(buf, "OPNA %s|%s", bstr("msgnum"), bstr("partnum") );
107 total_len = atoi(&buf[4]);
108 serialized_vcard = malloc(total_len + 1);
109 while (bytes < total_len) {
111 if ((total_len - bytes) < thisblock) thisblock = total_len - bytes;
112 sprintf(buf, "READ %d|%d", bytes, thisblock);
116 thisblock = atoi(&buf[4]);
117 serv_read(&serialized_vcard[bytes], thisblock);
121 wprintf("Error: %s<BR>\n", &buf[4]);
127 serialized_vcard[total_len + 1] = 0;
129 v = vcard_load(serialized_vcard);
130 free(serialized_vcard);
132 /* Populate the variables for our form */
134 while (key = vcard_get_prop(v, "", 0, i, 1), key != NULL) {
135 value = vcard_get_prop(v, "", 0, i++, 0);
137 if (!strcasecmp(key, "n")) {
138 extract_token(lastname, value, 0, ';');
139 extract_token(firstname, value, 1, ';');
140 extract_token(middlename, value, 2, ';');
141 extract_token(prefix, value, 3, ';');
142 extract_token(suffix, value, 4, ';');
145 else if (!strcasecmp(key, "adr")) {
146 extract_token(pobox, value, 0, ';');
147 extract_token(extadr, value, 1, ';');
148 extract_token(street, value, 2, ';');
149 extract_token(city, value, 3, ';');
150 extract_token(state, value, 4, ';');
151 extract_token(zipcode, value, 5, ';');
152 extract_token(country, value, 6, ';');
155 else if (!strcasecmp(key, "tel;home")) {
156 extract_token(hometel, value, 0, ';');
159 else if (!strcasecmp(key, "tel;work")) {
160 extract_token(worktel, value, 0, ';');
164 strcat(extrafields, key);
165 strcat(extrafields, ":");
166 strcat(extrafields, value);
167 strcat(extrafields, "\n");
174 /* Display the form */
175 wprintf("<FORM METHOD=\"POST\" ACTION=\"/submit_vcard\">\n");
176 wprintf("<H2><IMG VALIGN=CENTER SRC=\"/static/vcard.gif\">"
177 "Contact information for ");
181 wprintf("<TABLE border=0><TR>"
186 "<TD>Suffix</TD></TR>\n");
187 wprintf("<TR><TD><INPUT TYPE=\"text\" NAME=\"prefix\" "
188 "VALUE=\"%s\" MAXLENGTH=\"5\"></TD>",
190 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"firstname\" "
191 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
193 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"middlename\" "
194 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
196 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"lastname\" "
197 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
199 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"suffix\" "
200 "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR></TABLE>\n",
203 wprintf("<TABLE border=0><TR><TD>PO box (optional):</TD>"
204 "<TD><INPUT TYPE=\"text\" NAME=\"pobox\" "
205 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
207 wprintf("<TR><TD>Address line 1:</TD>"
208 "<TD><INPUT TYPE=\"text\" NAME=\"extadr\" "
209 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
211 wprintf("<TR><TD>Address line 2:</TD>"
212 "<TD><INPUT TYPE=\"text\" NAME=\"street\" "
213 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
215 wprintf("<TR><TD>City:</TD>"
216 "<TD><INPUT TYPE=\"text\" NAME=\"city\" "
217 "VALUE=\"%s\" MAXLENGTH=\"29\">\n",
220 "<INPUT TYPE=\"text\" NAME=\"state\" "
221 "VALUE=\"%s\" MAXLENGTH=\"2\">\n",
223 wprintf(" ZIP code: "
224 "<INPUT TYPE=\"text\" NAME=\"zipcode\" "
225 "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR>\n",
227 wprintf("<TR><TD>Country:</TD>"
228 "<TD><INPUT TYPE=\"text\" NAME=\"country\" "
229 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
232 wprintf("<TABLE BORDER=0><TR><TD>Home telephone:</TD>"
233 "<TD><INPUT TYPE=\"text\" NAME=\"hometel\" "
234 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
236 wprintf("<TR><TD>Work telephone:</TD>"
237 "<TD><INPUT TYPE=\"text\" NAME=\"worktel\" "
238 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
241 wprintf("<INPUT TYPE=\"hidden\" NAME=\"extrafields\" VALUE=\"");
242 escputs(extrafields);
245 wprintf("<CENTER>\n");
246 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
247 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
248 wprintf("</CENTER></FORM>\n");
256 void submit_vcard(void) {
259 if (strcmp(bstr("sc"), "OK")) {
264 sprintf(buf, "ENT0 1|||4||");
265 fprintf(stderr, "%s\n", buf);
268 fprintf(stderr, "%s\n", buf);
274 serv_puts("Content-type: text/x-vcard");
276 serv_puts("begin:vcard");
277 serv_printf("n:%s;%s;%s;%s;%s",
283 serv_printf("adr:%s;%s;%s;%s;%s;%s;%s",
291 serv_printf("tel;home:%s", bstr("hometel") );
292 serv_printf("tel;work:%s", bstr("worktel") );
293 serv_printf("%s", bstr("extrafields") );
294 serv_puts("end:vcard");