pCfgLine = pRNCFG->NetConfigs[ignet_push_share];
while (pCfgLine != NULL)
{
- if (strcmp(ChrPtr(pCfgLine->Value[0]), target_node))
+ if (!strcmp(ChrPtr(pCfgLine->Value[0]), target_node))
break;
pCfgLine = pCfgLine->next;
}
{
return -1;
}
+
memset(&sc, 0, sizeof(SpoolControl));
memset(&OneRNCFG, 0, sizeof(OneRoomNetCfg));
sc.RNCfg = &OneRNCFG;
sc.RNCfg->NetConfigs[ignet_push_share] = DuplicateOneGenericCfgLine(pCfgLine);
+ sc.Users[ignet_push_share] = NewStrBufPlain(NULL,
+ StrLength(pCfgLine->Value[0]) +
+ StrLength(pCfgLine->Value[1]) + 10);
+ StrBufAppendBuf(sc.Users[ignet_push_share],
+ pCfgLine->Value[0],
+ 0);
+ StrBufAppendBufPlain(sc.Users[ignet_push_share],
+ HKEY(","),
+ 0);
+
+ StrBufAppendBuf(sc.Users[ignet_push_share],
+ pCfgLine->Value[1],
+ 0);
+ CalcListID(&sc);
end_critical_section(S_NETCONFIGS);
DeleteHash(&sc.working_ignetcfg);
DeleteHash(&sc.the_netmap);
+ free_spoolcontrol_struct_members(&sc);
QN_syslog(LOG_NOTICE, "Synchronized %d messages to <%s>\n",
num_spooled, target_node);
}
}
-RoomProcList *CreateRoomProcListEntry(struct ctdlroom *qrbuf, const OneRoomNetCfg *OneRNCFG)
+RoomProcList *CreateRoomProcListEntry(struct ctdlroom *qrbuf, OneRoomNetCfg *OneRNCFG)
{
int i;
struct RoomProcList *ptr;
ptr->lcname[ptr->namelen] = '\0';
ptr->key = hashlittle(ptr->lcname, ptr->namelen, 9872345);
+ ptr->lastsent = OneRNCFG->lastsent;
ptr->OneRNCfg = OneRNCFG;
return ptr;
}
/*
* Batch up and send all outbound traffic from the current room
*/
-void network_queue_interesting_rooms(struct ctdlroom *qrbuf, void *data, const OneRoomNetCfg *OneRNCfg)
+void network_queue_interesting_rooms(struct ctdlroom *qrbuf, void *data, OneRoomNetCfg *OneRNCfg)
{
struct RoomProcList *ptr;
roomlists *RP = (roomlists*) data;
+ if (!HaveSpoolConfig(OneRNCfg))
+ return;
+
ptr = CreateRoomProcListEntry(qrbuf, OneRNCfg);
- ptr->next = RP->rplist;
- RP->rplist = ptr;
+ if (ptr != NULL)
+ {
+ ptr->next = RP->rplist;
+ RP->rplist = ptr;
+ }
}
/*
int network_room_handler (struct ctdlroom *qrbuf)
{
struct RoomProcList *ptr;
- const OneRoomNetCfg* RNCfg;
+ OneRoomNetCfg* RNCfg;
if (qrbuf->QRdefaultview == VIEW_QUEUE)
return 1;
if (RNCfg == NULL)
return 1;
+ if (!HaveSpoolConfig(RNCfg))
+ return 1;
+
ptr = CreateRoomProcListEntry(qrbuf, RNCfg);
if (ptr == NULL)
return 1;
+ ptr->OneRNCfg = NULL;
begin_critical_section(S_RPLIST);
ptr->next = rplist;
rplist = ptr;
-
-
-
-
/*
* network_do_queue()
*
HashList *the_netmap = NULL;
int netmap_changed = 0;
roomlists RL;
+ SpoolControl *sc = NULL;
+ SpoolControl *pSC;
/*
* Run the full set of processing tasks no more frequently
}
if (ptr->namelen > 0) {
- network_spoolout_room(ptr,
- working_ignetcfg,
- the_netmap);
+ InspectQueuedRoom(&sc,
+ ptr,
+ working_ignetcfg,
+ the_netmap);
}
ptr = ptr->next;
}
}
+
+ pSC = sc;
+ while (pSC != NULL)
+ {
+ network_spoolout_room(pSC);
+ pSC = pSC->next;
+ }
+
+ pSC = sc;
+ while (pSC != NULL)
+ {
+ sc = pSC->next;
+ free_spoolcontrol_struct(&pSC);
+ pSC = sc;
+ }
/* If there is anything in the inbound queue, process it */
if (!server_shutting_down) {
network_do_spoolin(working_ignetcfg,
/* Save the network map back to disk */
if (netmap_changed) {
StrBuf *MapStr = CtdlSerializeNetworkMap(the_netmap);
- CtdlPutSysConfig(IGNETMAP, SmashStrBuf(&MapStr));
+ char *pMapStr = SmashStrBuf(&MapStr);
+ CtdlPutSysConfig(IGNETMAP, pMapStr);
+ free(pMapStr);
}
/* combine singe message files into one spool entry per remote node. */
last_run = time(NULL);
}
destroy_network_queue_room(RL.rplist);
+ SaveChangedConfigs();
+
}