$Log$
+Revision 1.371 1999/09/24 03:32:19 ajc
+* "read my vCard" and "write my vCard" are written and tested.
+
Revision 1.370 1999/09/24 02:54:17 ajc
* Worked a little more on the vCard stuff. The serv_vcard module is now in
place, and a "read my vcard" function is there; "write my" is next...
Fri Jul 10 1998 Art Cancro <ajc@uncnsrd.mt-kisco.ny.us>
* Initial CVS import
-
{
long msgnum;
struct CtdlMessage *msg;
- struct sermsgret smr;
+ struct ser_ret smr;
if (CC->internal_pgm == 0) {
cprintf("%d This command is for internal programs only.\n",
long newmsgid;
long retval;
char msgidbuf[32];
- struct sermsgret smr;
+ struct ser_ret smr;
/* Get a new message number */
newmsgid = get_new_message_number();
/*
* Serialize a struct CtdlMessage into the format used on disk and network.
*
- * This function returns a "struct sermsgret" (defined in msgbase.h) which
+ * This function loads up a "struct ser_ret" (defined in server.h) which
* contains the length of the serialized message and a pointer to the
* serialized message in memory. THE LATTER MUST BE FREED BY THE CALLER.
*/
-void serialize_message(struct sermsgret *ret, /* return values */
+void serialize_message(struct ser_ret *ret, /* return values */
struct CtdlMessage *msg) /* unserialized msg */
{
size_t wlen;
#define aide_message(text) quickie_message("Citadel",NULL,AIDEROOM,text)
-struct sermsgret {
- size_t len;
- char *ser;
-};
-
#define MSGS_ALL 0
#define MSGS_OLD 1
#define MSGS_NEW 2
void CtdlWriteObject(char *, char *, char *, int, int, int);
struct CtdlMessage *CtdlFetchMessage(long msgnum);
void CtdlFreeMessage(struct CtdlMessage *msg);
-void serialize_message(struct sermsgret *, struct CtdlMessage *);
+void serialize_message(struct ser_ret *, struct CtdlMessage *);
int is_valid_message(struct CtdlMessage *);
char *ser;
strcpy(temp, tmpnam(NULL));
+ ser = serialize_vcard(v);
fp = fopen(temp, "w");
if (fp == NULL) return;
- fwrite("FIXFIXFIXFIX FIX FIX", 100, 1, fp);
+ fprintf(fp, "Content-type: text/x-vcard\r\n\r\n");
+ if (ser == NULL) {
+ fprintf(fp, "begin:vcard\r\nend:vcard\r\n");
+ } else {
+ fwrite(ser, strlen(ser), 1, fp);
+ phree(ser);
+ }
fclose(fp);
/* this handy API function does all the work for us */
#endif
+/*
+ * Serialization routines use this struct to return a pointer and a length
+ */
+struct ser_ret {
+ size_t len;
+ char *ser;
+};
+
+
/*
* New format for a message in memory
*/
v->prop[v->numprops-1].name = strdoop(name);
v->prop[v->numprops-1].value = (value);
}
+
+
+
+
+/*
+ * Serialize a struct vcard into a standard text/x-vcard MIME type.
+ *
+ */
+char *serialize_vcard(struct vCard *v)
+{
+ char *ser;
+ int i;
+ size_t len;
+
+ if (v->magic != CTDL_VCARD_MAGIC) return NULL; /* self check */
+
+ /* Figure out how big a buffer we need to allocate */
+ len = 64; /* for begin, end, and a little padding for safety */
+ if (v->numprops) for (i=0; i<(v->numprops); ++i) {
+ len = len +
+ strlen(v->prop[i].name) +
+ strlen(v->prop[i].value) + 4;
+ }
+
+ ser = mallok(len);
+ if (ser == NULL) return NULL;
+
+ strcpy(ser, "begin:vcard\r\n");
+ if (v->numprops) for (i=0; i<(v->numprops); ++i) {
+ strcat(ser, v->prop[i].name);
+ strcat(ser, ":");
+ strcat(ser, v->prop[i].name);
+ strcat(ser, "\r\n");
+ }
+ strcat(ser, "end:vcard\r\n");
+
+ return ser;
+}
struct vCard *load_vcard(char *);
void free_vcard(struct vCard *);
void set_prop(struct vCard *v, char *name, char *value);
+char *serialize_vcard(struct vCard *);