///char mime_disposition[SIZ];
//int mime_length;
char vcard_partnum[SIZ];
- char *vcard_source = NULL;
+ StrBuf *vcard_source = NULL;
message_summary summ;////TODO: this will leak
memset(&summ, 0, sizeof(summ));
wprintf("[%s]</a>", _("edit"));
}
- free(vcard_source);
+ FreeStrBuf(&vcard_source);
}
}
char mime_disposition[SIZ];
int mime_length;
char vcard_partnum[SIZ];
- char *vcard_source = NULL;
+ StrBuf *vcard_source = NULL;
int i, len;
message_summary summ;/// TODO this will lak
/* Grab the name off the card */
display_vcard(WC->WBuf, vcard_source, 0, 0, namebuf, Msg->msgnum);
- free(vcard_source);
+ FreeStrBuf(&vcard_source);
}
}
if (*namebuf != NULL) {
* \param msgnum Citadel message pointer
*/
void display_vcard(StrBuf *Target,
- const char *vcard_source,
+ StrBuf *vcard_source,
char alpha,
int full,
char **storename,
StrBuf *Buf2;
char this_alpha = 0;
- v = vcard_load((char*)vcard_source); ///TODO
+ v = VCardLoad(vcard_source);
if (v == NULL) return;
* to start with a blank card.
*/
void do_edit_vcard(long msgnum, char *partnum, char *return_to, const char *force_room) {
+ StrBuf *Buf;
char buf[SIZ];
- char *serialized_vcard = NULL;
size_t total_len = 0;
struct vCard *v;
int i;
strcat(whatuser, &buf[5]);
}
}
-
- sprintf(buf, "DLAT %ld|%s", msgnum, partnum);
- serv_puts(buf);
- serv_getln(buf, sizeof buf);
- if (buf[0] != '6') {
- convenience_page("770000", "Error", &buf[4]);
+ Buf = NewStrBuf();
+ serv_printf(buf, "DLAT %ld|%s", msgnum, partnum);
+ StrBuf_ServGetlnBuffered(Buf);
+ if (GetServerStatus(Buf, NULL) != 6) {
+ convenience_page("770000", "Error", &(ChrPtr(Buf)[4]));
return;
}
-
- total_len = atoi(&buf[4]);
- serialized_vcard = malloc(total_len + 2);
+
+ StrBufCutLeft(Buf, 4);
+ total_len = StrBufExtract_long(Buf, 0, '|');
- serv_read(serialized_vcard, total_len);
- serialized_vcard[total_len] = 0;
+ StrBuf_ServGetBLOBBuffered(Buf, total_len);
- v = vcard_load(serialized_vcard);
- free(serialized_vcard);
+ v = VCardLoad(Buf);
+ FreeStrBuf(&Buf);
/* Populate the variables for our form */
i = 0;
while (key = vcard_get_prop(v, "", 0, i, 1), key != NULL) {
+ char prp[256]; /* property name */
+ char prm[256]; /* parameters */
+
value = vcard_get_prop(v, "", 0, i++, 0);
-
- if (!strcasecmp(key, "n")) {
+
+
+ extract_token(prp, key, 0, ';', sizeof prp);
+ safestrncpy(prm, key, sizeof prm);
+ remove_token(prm, 0, ';');
+
+ if (!strcasecmp(prp, "n")) {
extract_token(lastname, value, 0, ';', sizeof lastname);
extract_token(firstname, value, 1, ';', sizeof firstname);
extract_token(middlename, value, 2, ';', sizeof middlename);
extract_token(suffix, value, 4, ';', sizeof suffix);
}
- else if (!strcasecmp(key, "fn")) {
+ else if (!strcasecmp(prp, "fn")) {
safestrncpy(fullname, value, sizeof fullname);
}
- else if (!strcasecmp(key, "title")) {
+ else if (!strcasecmp(prp, "title")) {
safestrncpy(title, value, sizeof title);
}
- else if (!strcasecmp(key, "org")) {
+ else if (!strcasecmp(prp, "org")) {
safestrncpy(org, value, sizeof org);
}
- else if ( (!strcasecmp(key, "adr")) || (!strncasecmp(key, "adr;", 4)) ) {
+ else if (!strcasecmp(prp, "adr")) {
extract_token(pobox, value, 0, ';', sizeof pobox);
extract_token(extadr, value, 1, ';', sizeof extadr);
extract_token(street, value, 2, ';', sizeof street);
extract_token(zipcode, value, 5, ';', sizeof zipcode);
extract_token(country, value, 6, ';', sizeof country);
}
-
- else if ( (!strcasecmp(key, "tel;home")) || (!strcasecmp(key, "tel;type=home")) ) {
- extract_token(hometel, value, 0, ';', sizeof hometel);
- }
-
- else if ( (!strcasecmp(key, "tel;work")) || (!strcasecmp(key, "tel;type=work")) ) {
- extract_token(worktel, value, 0, ';', sizeof worktel);
- }
-
- else if ( (!strcasecmp(key, "tel;fax")) || (!strcasecmp(key, "tel;type=fax")) ) {
- extract_token(faxtel, value, 0, ';', sizeof faxtel);
- }
-
- else if ( (!strcasecmp(key, "tel;cell")) || (!strcasecmp(key, "tel;type=cell")) ) {
- extract_token(mobiletel, value, 0, ';', sizeof mobiletel);
+
+ else if (!strcasecmp(prp, "tel")) {
+
+ if (bmstrcasestr(prm, "home")) {
+ extract_token(hometel, value, 0, ';', sizeof hometel);
+ }
+ else if (bmstrcasestr(prm, "work")) {
+ extract_token(worktel, value, 0, ';', sizeof worktel);
+ }
+ else if (bmstrcasestr(prm, "fax")) {
+ extract_token(faxtel, value, 0, ';', sizeof faxtel);
+ }
+ else if (bmstrcasestr(prm, "cell")) {
+ extract_token(mobiletel, value, 0, ';', sizeof mobiletel);
+ }
+ else { /* Missing or unknown type; put it in the home phone */
+ extract_token(hometel, value, 0, ';', sizeof hometel);
+ }
}
- else if ( (!strcasecmp(key, "email;internet"))
- || (!strcasecmp(key, "email;type=internet")) ) {
+ else if ( (!strcasecmp(prp, "email")) && (bmstrcasestr(prm, "internet")) ) {
if (primary_inetemail[0] == 0) {
safestrncpy(primary_inetemail, value, sizeof primary_inetemail);
}
strcat(other_inetemail, value);
}
}
-
+
+ /* Unrecognized properties are preserved here so we don't discard them
+ * just because the vCard was edited with WebCit.
+ */
else {
strcat(extrafields, key);
strcat(extrafields, ":");
struct vCard *v;
char *serialized_vcard;
char buf[SIZ];
+ StrBuf *Buf;
int i;
if (!havebstr("ok_button")) {
}
/** Make a vCard structure out of the data supplied in the form */
-
- snprintf(buf, sizeof buf, "begin:vcard\r\n%s\r\nend:vcard\r\n",
- bstr("extrafields")
+ Buf = NewStrBuf();
+ StrBufPrintf(Buf, "begin:vcard\r\n%s\r\nend:vcard\r\n",
+ bstr("extrafields")
);
- v = vcard_load(buf); /** Start with the extra fields */
+ v = VCardLoad(Buf); /** Start with the extra fields */
+ FreeStrBuf(&Buf);
if (v == NULL) {
safestrncpy(WC->ImportantMessage,
_("An error has occurred."),
void display_vcard_photo_img(void)
{
long msgnum = 0L;
- char *vcard;
+ StrBuf *vcard;
struct vCard *v;
char *photosrc;
const char *contentType;
msgnum = StrTol(WCC->UrlFragment2);
vcard = load_mimepart(msgnum,"1");
- v = vcard_load(vcard);
+ v = VCardLoad(vcard);
photosrc = vcard_get_prop(v, "PHOTO", 1,0,0);
FlushStrBuf(WCC->WBuf);