NETCFG: fix specifying the remote room to IGNET share.
authorWilfried Goesgens <dothebart@citadel.org>
Sat, 9 Feb 2013 12:25:00 +0000 (13:25 +0100)
committerWilfried Goesgens <dothebart@citadel.org>
Sat, 9 Feb 2013 12:25:00 +0000 (13:25 +0100)
citadel/modules/network/netspool.h
citadel/modules/network/serv_netmail.c
citadel/modules/network/serv_netspool.c

index e62e8cfb3f9d58f259694356e81c5e7ef15936a6..a93db2c172f1e5ec8bf9c067f099703316fab02d 100644 (file)
@@ -60,4 +60,4 @@ void free_spoolcontrol_struct(SpoolControl **scc);
 int writenfree_spoolcontrol_file(SpoolControl **scc, char *filename);
 int read_spoolcontrol_file(SpoolControl **scc, char *filename);
 
-void aggregate_recipients(StrBuf **recps, RoomNetCfg Which, OneRoomNetCfg *OneRNCfg);
+void aggregate_recipients(StrBuf **recps, RoomNetCfg Which, OneRoomNetCfg *OneRNCfg, long nSegments);
index d18f04540a91cdf8abccd5e116bd8f5e91a8f988..18e7372c57b6a610abf9493f5f528cd748235859 100644 (file)
@@ -82,8 +82,9 @@
 
 void network_deliver_list(struct CtdlMessage *msg, SpoolControl *sc, const char *RoomName);
 
-void aggregate_recipients(StrBuf **recps, RoomNetCfg Which, OneRoomNetCfg *OneRNCfg)
+void aggregate_recipients(StrBuf **recps, RoomNetCfg Which, OneRoomNetCfg *OneRNCfg, long nSegments)
 {
+       int i;
        size_t recps_len = 0;
        RoomNetCfgLine *nptr;
        struct CitContext *CCC = CC;
@@ -112,7 +113,8 @@ void aggregate_recipients(StrBuf **recps, RoomNetCfg Which, OneRoomNetCfg *OneRN
        /* Each recipient */
        for (nptr = OneRNCfg->NetConfigs[Which]; nptr != NULL; nptr = nptr->next) {
                if (nptr != OneRNCfg->NetConfigs[Which]) {
-                       StrBufAppendBufPlain(*recps, HKEY(","), 0);
+                       for (i = 0; i < nSegments; i++)
+                               StrBufAppendBufPlain(*recps, HKEY(","), i);
                }
                StrBufAppendBuf(*recps, nptr->Value[0], 0);
        }
@@ -127,7 +129,6 @@ void network_deliver_digest(SpoolControl *sc)
        int i;
        struct CtdlMessage *msg = NULL;
        long msglen;
-       StrBuf *recps = NULL;
        struct recptypes *valid;
        char bounce_to[256];
 
@@ -185,7 +186,6 @@ void network_deliver_digest(SpoolControl *sc)
        /* Now generate the delivery instructions */
        if (sc->Users[listrecp] == NULL)
                return;
-       aggregate_recipients(&recps, digestrecp, sc->RNCfg);
 
        /* Where do we want bounces and other noise to be heard?
         *Surely not the list members! */
@@ -499,6 +499,7 @@ void network_process_participate(SpoolControl *sc, struct CtdlMessage *omsg, lon
 void network_process_ignetpush(SpoolControl *sc, struct CtdlMessage *omsg, long *delete_after_send)
 {
        StrBuf *Recipient;
+       StrBuf *RemoteRoom;
        const char *Pos = NULL;
        struct CtdlMessage *msg = NULL;
        struct CitContext *CCC = CC;
@@ -548,9 +549,11 @@ void network_process_ignetpush(SpoolControl *sc, struct CtdlMessage *omsg, long
 
        /* Now send it to every node */
        Recipient = NewStrBufPlain(NULL, StrLength(sc->Users[ignet_push_share]));
+       RemoteRoom = NewStrBufPlain(NULL, StrLength(sc->Users[ignet_push_share]));
        while ((Pos != StrBufNOTNULL) &&
-              StrBufExtract_NextToken(Recipient, sc->Users[ignet_push_share], &Pos, '|'))
+              StrBufExtract_NextToken(Recipient, sc->Users[ignet_push_share], &Pos, ','))
        {
+               StrBufExtract_NextToken(RemoteRoom, sc->Users[ignet_push_share], &Pos, ',');
                send = 1;
                NewStrBufDupAppendFlush(&Buf, Recipient, NULL, 1);
                        
@@ -603,9 +606,9 @@ void network_process_ignetpush(SpoolControl *sc, struct CtdlMessage *omsg, long
                        if (msg->cm_fields['C'] != NULL) {
                                free(msg->cm_fields['C']);
                        }
-                       if (StrLength(Recipient) > 0) {
+                       if (StrLength(RemoteRoom) > 0) {
                                msg->cm_fields['C'] =
-                                       strdup(ChrPtr(Recipient));
+                                       strdup(ChrPtr(RemoteRoom));
                        }
                        else {
                                msg->cm_fields['C'] =
@@ -650,6 +653,7 @@ void network_process_ignetpush(SpoolControl *sc, struct CtdlMessage *omsg, long
        }
        FreeStrBuf(&Buf);
        FreeStrBuf(&Recipient);
+       FreeStrBuf(&RemoteRoom);
        CtdlFreeMessage(msg);
 }
 
index bc7db52b3c04e81b8edb5a5723f2388998dd5adc..1b06b63a75f538320f6d64730094c5cc25afd8ab 100644 (file)
@@ -142,13 +142,16 @@ void DeleteLastSent(const CfgLineType *ThisOne, RoomNetCfgLine **data)
        *data = NULL;
 }
 
-RoomNetCfg SpoolCfgs [4] = {
+static const RoomNetCfg SpoolCfgs [4] = {
        listrecp,
        digestrecp,
        participate,
        ignet_push_share
 };
 
+static const long SpoolCfgsCopyN [4] = {
+       1, 1, 1, 2
+};
 
 int HaveSpoolConfig(OneRoomNetCfg* RNCfg)
 {
@@ -206,7 +209,10 @@ void InspectQueuedRoom(SpoolControl **pSC,
 
        for (i=0; i < 4; i++)
        {
-               aggregate_recipients(&sc->Users[SpoolCfgs[i]], SpoolCfgs[i], sc->RNCfg);
+               aggregate_recipients(&sc->Users[SpoolCfgs[i]],
+                                    SpoolCfgs[i],
+                                    sc->RNCfg,
+                                    SpoolCfgsCopyN[i]);
        }
        
        if (StrLength(sc->RNCfg->Sender) > 0)