]> code.citadel.org Git - citadel.git/blobdiff - citadel/msgbase.c
Straightn http client generation
[citadel.git] / citadel / msgbase.c
index d88bef4a6f3e041ac082a8f9c07ff4e22634d29e..2609d1d1da7b08bc7a0ed816a48d531a3961a1bb 100644 (file)
@@ -1239,26 +1239,28 @@ int is_valid_message(struct CtdlMessage *msg) {
        return 1;
 }
 
+void CtdlFreeMessageContents(struct CtdlMessage *msg)
+{
+       int i;
 
+       for (i = 0; i < 256; ++i)
+               if (msg->cm_fields[i] != NULL) {
+                       free(msg->cm_fields[i]);
+               }
+
+       msg->cm_magic = 0;      /* just in case */
+}
 /*
  * 'Destructor' for struct CtdlMessage
  */
 void CtdlFreeMessage(struct CtdlMessage *msg)
 {
-       int i;
-
        if (is_valid_message(msg) == 0) 
        {
                if (msg != NULL) free (msg);
                return;
        }
-
-       for (i = 0; i < 256; ++i)
-               if (msg->cm_fields[i] != NULL) {
-                       free(msg->cm_fields[i]);
-               }
-
-       msg->cm_magic = 0;      /* just in case */
+       CtdlFreeMessageContents(msg);
        free(msg);
 }
 
@@ -1354,7 +1356,7 @@ void fixed_output(char *name, char *filename, char *partnum, char *disp,
                ptr = html_to_ascii(content, length, 80, 0);
                wlen = strlen(ptr);
                client_write(ptr, wlen);
-               if (ptr[wlen-1] != '\n') {
+               if ((wlen > 0) && (ptr[wlen-1] != '\n')) {
                        cprintf("\n");
                }
                free(ptr);
@@ -3261,14 +3263,18 @@ long CtdlSubmitMsg(struct CtdlMessage *msg,     /* message to save */
                        }
                        else {
                                syslog(LOG_DEBUG, "No user <%s>\n", recipient);
-                               CtdlSaveMsgPointerInRoom(config.c_aideroom,
-                                                        newmsgid, 0, msg);
+                               CtdlSaveMsgPointerInRoom(config.c_aideroom, newmsgid, 0, msg);
                        }
                }
 
        /* Perform "after save" hooks */
        syslog(LOG_DEBUG, "Performing after-save hooks\n");
+       if (msg->cm_fields['3'] != NULL) free(msg->cm_fields['3']);
+       msg->cm_fields['3'] = malloc(20);
+       snprintf(msg->cm_fields['3'], 20, "%ld", newmsgid);
        PerformMessageHooks(msg, EVT_AFTERSAVE);
+       free(msg->cm_fields['3']);
+       msg->cm_fields['3'] = NULL;
 
        /* For IGnet mail, we have to save a new copy into the spooler for
         * each recipient, with the R and D fields set to the recipient and
@@ -4543,11 +4549,11 @@ void cmd_ent0(char *entargs)
                {
                        if (StrLength(CCC->StatusMessage)>0)
                        {
-                               StrBufAppendBufPlain(CCC->StatusMessage, HKEY("\n"), 0);
+                               StrBufAppendBufPlain(CCC->StatusMessage, HKEY("\n000\n"), 0);
                                cputbuf(CCC->StatusMessage);
                        }
                        else
-                               client_write(HKEY("\n"));
+                               client_write(HKEY("\n000\n"));
                }
 
                if (do_confirm) {