+ if (StrLength(sc->Users[roommailalias]) > 0)
+ {
+ long Pos;
+ const char *AtPos;
+
+ Pos = StrLength(sc->ListID);
+ StrBufAppendBuf(sc->ListID, sc->Users[roommailalias], 0);
+ AtPos = strchr(ChrPtr(sc->ListID) + Pos, '@');
+
+ if (AtPos != NULL)
+ {
+ StrBufPeek(sc->ListID, AtPos, 0, '.');
+ }
+ }
+ else
+ {
+ StrBufAppendBufPlain(sc->ListID, HKEY("room_"), 0);
+ StrBufAppendBuf(sc->ListID, RoomName, 0);
+ StrBufAppendBufPlain(sc->ListID, HKEY("."), 0);
+ StrBufAppendBufPlain(sc->ListID, config.c_fqdn, -1, 0);
+ /*
+ * this used to be:
+ * roomname <Room-Number.list-id.fqdn>
+ * according to rfc2919.txt it only has to be a uniq identifier
+ * under the domain of the system;
+ * in general MUAs use it to calculate the reply address nowadays.
+ */
+ }
+ StrBufAppendBufPlain(sc->ListID, HKEY(">"), 0);
+
+ if (StrLength(sc->Users[roommailalias]) == 0)
+ {
+ sc->Users[roommailalias] = NewStrBuf();
+
+ StrBufAppendBufPlain(sc->Users[roommailalias], HKEY("room_"), 0);
+ StrBufAppendBuf(sc->Users[roommailalias], RoomName, 0);
+ StrBufAppendBufPlain(sc->Users[roommailalias], HKEY("@"), 0);
+ StrBufAppendBufPlain(sc->Users[roommailalias], config.c_fqdn, -1, 0);
+
+ StrBufLowerCase(sc->Users[roommailalias]);
+ }
+
+ FreeStrBuf(&RoomName);
+}
+
+static time_t last_digest_delivery = 0;
+
+/*
+ * Batch up and send all outbound traffic from the current room
+ */
+void network_spoolout_room(SpoolControl *sc)
+{
+ struct CitContext *CCC = CC;
+ char buf[SIZ];
+ int i;
+ long lastsent;
+
+ /*
+ * If the room doesn't exist, don't try to perform its networking tasks.
+ * Normally this should never happen, but once in a while maybe a room gets
+ * queued for networking and then deleted before it can happen.
+ */
+ memcpy (&CCC->room, &sc->room, sizeof(ctdlroom));
+
+ syslog(LOG_INFO, "Networking started for <%s>\n", CCC->room.QRname);
+
+ CalcListID(sc);
+
+ /* remember where we started... */
+ lastsent = sc->lastsent;
+
+ /* Fetch the messages we ought to send & prepare them. */
+ CtdlForEachMessage(MSGS_GT, sc->lastsent, NULL, NULL, NULL,
+ network_spool_msg, sc);
+
+ if (StrLength(sc->Users[roommailalias]) > 0)