"hnod",
"msgn",
"jrnl",
- NULL,
+ "rep2",
"list",
"text",
"node",
int do_proto, /* do Citadel protocol responses? */
int crlf, /* Use CRLF newlines instead of LF? */
char *section, /* NULL or a message/rfc822 section */
- int flags /* various flags; see msgbase.h */
+ int flags, /* various flags; see msgbase.h */
+ char **Author,
+ char **Address
) {
struct CitContext *CCC = CC;
struct CtdlMessage *TheMessage = NULL;
- int retcode = om_no_such_msg;
+ int retcode = CIT_OK;
struct encapmsg encap;
int r;
*extract_encapsulated_message,
NULL, NULL, (void *)&encap, 0
);
+
+ if ((Author != NULL) && (*Author == NULL))
+ {
+ *Author = TheMessage->cm_fields['A'];
+ TheMessage->cm_fields['A'] = NULL;
+ }
+ if ((Address != NULL) && (*Address == NULL))
+ {
+ *Address = TheMessage->cm_fields['F'];
+ TheMessage->cm_fields['F'] = NULL;
+ }
CtdlFreeMessage(TheMessage);
TheMessage = NULL;
}
else {
- if (do_proto) cprintf("%d msg %ld has no part %s\n",
- ERROR + MESSAGE_NOT_FOUND, msg_num, section);
+ if (do_proto) {
+ cprintf("%d msg %ld has no part %s\n",
+ ERROR + MESSAGE_NOT_FOUND,
+ msg_num,
+ section);
+ }
retcode = om_no_such_msg;
}
}
/* Ok, output the message now */
- retcode = CtdlOutputPreLoadedMsg(TheMessage, mode, headers_only, do_proto, crlf, flags);
+ if (retcode == CIT_OK)
+ retcode = CtdlOutputPreLoadedMsg(TheMessage, mode, headers_only, do_proto, crlf, flags);
+ if ((Author != NULL) && (*Author == NULL))
+ {
+ *Author = TheMessage->cm_fields['A'];
+ TheMessage->cm_fields['A'] = NULL;
+ }
+ if ((Address != NULL) && (*Address == NULL))
+ {
+ *Address = TheMessage->cm_fields['F'];
+ TheMessage->cm_fields['F'] = NULL;
+ }
+
CtdlFreeMessage(TheMessage);
return(retcode);
}
if (outlen > 0) {
client_write(outbuf, outlen);
- outlen = 0;
}
}
msgid = extract_long(cmdbuf, 0);
headers_only = extract_int(cmdbuf, 1);
- CtdlOutputMsg(msgid, MT_CITADEL, headers_only, 1, 0, NULL, 0);
+ CtdlOutputMsg(msgid, MT_CITADEL, headers_only, 1, 0, NULL, 0, NULL, NULL);
return;
}
msgid = extract_long(cmdbuf, 0);
headers_only = extract_int(cmdbuf, 1);
- CtdlOutputMsg(msgid, MT_RFC822, headers_only, 1, 1, NULL, 0);
+ CtdlOutputMsg(msgid, MT_RFC822, headers_only, 1, 1, NULL, 0, NULL, NULL);
}
msgid = extract_long(cmdbuf, 0);
extract_token(section, cmdbuf, 1, '|', sizeof section);
- CtdlOutputMsg(msgid, MT_MIME, 0, 1, 0, (section[0] ? section : NULL) , 0);
+ CtdlOutputMsg(msgid, MT_MIME, 0, 1, 0, (section[0] ? section : NULL) , 0, NULL, NULL);
}
extract_token(desired_section, cmdbuf, 1, '|', sizeof desired_section);
safestrncpy(CC->download_desired_section, desired_section,
sizeof CC->download_desired_section);
- CtdlOutputMsg(msgid, MT_DOWNLOAD, 0, 1, 1, NULL, 0);
+ CtdlOutputMsg(msgid, MT_DOWNLOAD, 0, 1, 1, NULL, 0, NULL, NULL);
}
extract_token(desired_section, cmdbuf, 1, '|', sizeof desired_section);
safestrncpy(CC->download_desired_section, desired_section,
sizeof CC->download_desired_section);
- CtdlOutputMsg(msgid, MT_SPEW_SECTION, 0, 1, 1, NULL, 0);
-}
+ CtdlOutputMsg(msgid, MT_SPEW_SECTION, 0, 1, 1, NULL, 0, NULL, NULL);
+}
/*
msglist = realloc(msglist, (sizeof(long) * (num_msgs + num_msgs_to_be_merged)) );
if (msglist == NULL) {
MSGM_syslog(LOG_ALERT, "ERROR: can't realloc message list!\n");
+ free(msgs_to_be_merged);
return (ERROR + INTERNAL_ERROR);
}
memcpy(&msglist[num_msgs], msgs_to_be_merged, (sizeof(long) * num_msgs_to_be_merged) );
}
-/*
- * Serialize a struct CtdlMessage into the format used on disk and network.
- *
- * 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 dump_message(struct CtdlMessage *msg, /* unserialized msg */
- long Siz) /* how many chars ? */
-{
- int i;
- static char *forder = FORDER;
- char *buf;
-
- /*
- * Check for valid message format
- */
- if (is_valid_message(msg) == 0) {
- struct CitContext *CCC = CC;
- MSGM_syslog(LOG_ERR, "dump_message() aborting due to invalid message\n");
- return;
- }
-
- buf = (char*) malloc (Siz + 1);
-
- for (i=0; i<26; ++i) if (msg->cm_fields[(int)forder[i]] != NULL) {
- snprintf (buf, Siz, " msg[%c] = %s ...\n", (char) forder[i],
- msg->cm_fields[(int)forder[i]]);
- if (client_write (buf, strlen(buf)) == -1)
- {
- struct CitContext *CCC = CC;
- MSGM_syslog(LOG_ERR, "dump_message(): aborting due to write failure.\n");
- return;
- }
- }
-
- return;
-}
-
-
-
/*
* Check to see if any messages already exist in the current room which
* carry the same Exclusive ID as this one. If any are found, delete them.
cdb_free(cdbfr);
}
if (num_msgs > 0) {
- int have_contenttype = !IsEmptyStr(content_type);
+ int have_contenttype = (content_type != NULL) && !IsEmptyStr(content_type);
int have_delmsgs = (num_dmsgnums == 0) || (dmsgnums == NULL);
int have_more_del = 1;