/*
- * $Id$
- *
* This module handles shared rooms, inter-Citadel mail, and outbound
* mailing list processing.
*
*/
msg = CtdlFetchMessage(msgnum, 1);
if (msg != NULL) {
-
+ if (msg->cm_fields['V'] == NULL){
+ /* local message, no enVelope */
+ StrBuf *Buf;
+ Buf = NewStrBuf();
+ StrBufAppendBufPlain(Buf, msg->cm_fields['O'], -1, 0);
+ StrBufAppendBufPlain(Buf, HKEY("@"), 0);
+ StrBufAppendBufPlain(Buf, config.c_fqdn, -1, 0);
+
+ msg->cm_fields['K'] = SmashStrBuf(&Buf);
+ }
+ else {
+ msg->cm_fields['K'] = strdup (msg->cm_fields['V']);
+ }
/* Set the 'List-ID' header */
if (msg->cm_fields['L'] != NULL) {
free(msg->cm_fields['L']);
}
download_len = extract_long(&buf[4], 0);
- bytes_received = 0L;
- fp = fopen(tempfilename, "w");
- if (fp == NULL) {
- CtdlLogPrintf(CTDL_CRIT, "cannot open download file locally: %s\n",
- strerror(errno));
- return;
- }
-
- while (bytes_received < download_len) {
- /*
- * If shutting down we can exit here and unlink the temp file.
- * this shouldn't loose us any messages.
- */
- if (CtdlThreadCheckStop())
- {
- fclose(fp);
- unlink(tempfilename);
- return;
- }
- snprintf(buf, sizeof buf, "READ %ld|%ld",
- bytes_received,
- ((download_len - bytes_received > IGNET_PACKET_SIZE)
- ? IGNET_PACKET_SIZE : (download_len - bytes_received)));
- if (sock_puts(sock, buf) < 0) {
- fclose(fp);
- unlink(tempfilename);
- return;
- }
- if (sock_getln(sock, buf, sizeof buf) < 0) {
- fclose(fp);
- unlink(tempfilename);
+ if (download_len>0) {
+ bytes_received = 0L;
+ fp = fopen(tempfilename, "w");
+ if (fp == NULL) {
+ CtdlLogPrintf(CTDL_CRIT, "cannot open download file locally: %s\n",
+ strerror(errno));
return;
}
- if (buf[0] == '6') {
- plen = extract_long(&buf[4], 0);
- if (sock_read(sock, pbuf, plen, 1) < 0) {
+
+ CtdlLogPrintf(CTDL_DEBUG, "For this download we are expecting %d bytes\n", download_len);
+ while (bytes_received < download_len) {
+ /*
+ * If shutting down we can exit here and unlink the temp file.
+ * this shouldn't loose us any messages.
+ */
+ if (CtdlThreadCheckStop())
+ {
fclose(fp);
unlink(tempfilename);
return;
}
- fwrite((char *) pbuf, plen, 1, fp);
- bytes_received = bytes_received + plen;
+ snprintf(buf, sizeof buf, "READ %ld|%ld",
+ bytes_received,
+ ((download_len - bytes_received > IGNET_PACKET_SIZE)
+ ? IGNET_PACKET_SIZE : (download_len - bytes_received)));
+
+ if (sock_puts(sock, buf) < 0) {
+ fclose(fp);
+ unlink(tempfilename);
+ return;
+ }
+ if (sock_getln(sock, buf, sizeof buf) < 0) {
+ fclose(fp);
+ unlink(tempfilename);
+ return;
+ }
+
+ if (buf[0] == '6') {
+ plen = extract_long(&buf[4], 0);
+ if (sock_read(sock, pbuf, plen, 1) < 0) {
+ fclose(fp);
+ unlink(tempfilename);
+ return;
+ }
+ fwrite((char *) pbuf, plen, 1, fp);
+ bytes_received = bytes_received + plen;
+ }
}
- }
-
- fclose(fp);
+ fclose(fp);
+ }
/* Last chance for shutdown exit */
if (CtdlThreadCheckStop())
{
CtdlLogPrintf(CTDL_DEBUG, "network: polling <%s>\n", node);
CtdlLogPrintf(CTDL_NOTICE, "Connecting to <%s> at %s:%s\n", node, host, port);
- sock = sock_connect(host, port, "tcp");
+ sock = sock_connect(host, port);
if (sock < 0) {
CtdlLogPrintf(CTDL_ERR, "Could not connect: %s\n", strerror(errno));
network_talking_to(node, NTT_REMOVE);
* with a static variable instead.
*/
if (doing_queue) {
+ CtdlClearSystemContext();
return NULL;
}
doing_queue = 1;
else {
CtdlLogPrintf(CTDL_DEBUG, "network: Task STOPPED.\n");
}
+ CtdlClearSystemContext();
return NULL;
}
else
CtdlThreadSchedule("IGnet Network", CTDLTHREAD_BIGSTACK, network_do_queue, NULL, 0);
/* return our Subversion id for the Log */
- return "$Id$";
+ return "network";
}