X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fnetwork%2Fserv_network.c;h=fb5476cc913f479187a7f73d5f84ff5724f0a619;hb=66f09fdd7c3f58e13ed01431dd5148302327ca6e;hp=5ba84707b7b0914cea2323ad06bee3c3d288381e;hpb=0473a8b1dacc6a9945088ca2df787415fe211b44;p=citadel.git diff --git a/citadel/modules/network/serv_network.c b/citadel/modules/network/serv_network.c index 5ba84707b..fb5476cc9 100644 --- a/citadel/modules/network/serv_network.c +++ b/citadel/modules/network/serv_network.c @@ -106,10 +106,9 @@ struct RoomProcList *rplist = NULL; */ int network_usetable(struct CtdlMessage *msg) { + StrBuf *msgid; struct CitContext *CCC = CC; - char msgid[SIZ]; - struct cdbdata *cdbut; - struct UseTable ut; + time_t now; /* Bail out if we can't generate a message ID */ if (msg == NULL) { @@ -123,28 +122,29 @@ int network_usetable(struct CtdlMessage *msg) } /* Generate the message ID */ - strcpy(msgid, msg->cm_fields['I']); - if (haschar(msgid, '@') == 0) { - strcat(msgid, "@"); + msgid = NewStrBufPlain(msg->cm_fields['I'], -1); + if (haschar(ChrPtr(msgid), '@') == 0) { + StrBufAppendBufPlain(msgid, HKEY("@"), 0); if (msg->cm_fields['N'] != NULL) { - strcat(msgid, msg->cm_fields['N']); + StrBufAppendBufPlain(msgid, msg->cm_fields['N'], -1, 0); } else { + FreeStrBuf(&msgid); return(0); } } - - cdbut = cdb_fetch(CDB_USETABLE, msgid, strlen(msgid)); - if (cdbut != NULL) { - cdb_free(cdbut); - QN_syslog(LOG_DEBUG, "network_usetable() : we already have %s\n", msgid); + now = time(NULL); + if (CheckIfAlreadySeen("Networker Import", + msgid, + now, 0, + eCheckUpdate, + CCC->cs_pid, 0) != 0) + { + FreeStrBuf(&msgid); return(1); } + FreeStrBuf(&msgid); - /* If we got to this point, it's unique: add it. */ - strcpy(ut.ut_msgid, msgid); - ut.ut_timestamp = time(NULL); - cdb_store(CDB_USETABLE, msgid, strlen(msgid), &ut, sizeof(struct UseTable) ); return(0); } @@ -176,7 +176,7 @@ int network_sync_to(char *target_node, long len) 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; } @@ -184,18 +184,31 @@ int network_sync_to(char *target_node, long len) { 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); sc.working_ignetcfg = CtdlLoadIgNetCfg(); sc.the_netmap = CtdlReadNetworkMap(); - CalcListID(&sc); - /* Send ALL messages */ num_spooled = CtdlForEachMessage(MSGS_ALL, 0L, NULL, NULL, NULL, network_spool_msg, &sc); @@ -205,6 +218,7 @@ int network_sync_to(char *target_node, long len) 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); @@ -441,19 +455,6 @@ void network_bounce(struct CtdlMessage *msg, char *reason) } -void free_network_spoolout_room(SpoolControl *sc) -{ - if (sc != NULL) - { - int i; - for (i = subpending; i < maxRoomNetCfg; i++) - FreeStrBuf(&sc->Users[i]); - free(sc); - } -} - - - /* * network_do_queue() @@ -553,7 +554,7 @@ void network_do_queue(void) while (pSC != NULL) { sc = pSC->next; - free_network_spoolout_room(pSC); + free_spoolcontrol_struct(&pSC); pSC = sc; } /* If there is anything in the inbound queue, process it */