X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fnetwork%2Fserv_network.c;h=6c9ed94b95c7625c1656f1b8814ccb8aa02383bf;hb=ce8ccae34638f0a250526db7da80b7ce412eb3a2;hp=00719bfea96eddb6d0ee94cd96ee78578efc96a3;hpb=f7754d28818ab3ea8a2831f6b1ebfd94ab69c09a;p=citadel.git diff --git a/citadel/modules/network/serv_network.c b/citadel/modules/network/serv_network.c index 00719bfea..6c9ed94b9 100644 --- a/citadel/modules/network/serv_network.c +++ b/citadel/modules/network/serv_network.c @@ -149,93 +149,6 @@ int network_usetable(struct CtdlMessage *msg) } -void CalcListID(SpoolControl *sc) -{ - const char *err; - int fd; - struct CitContext *CCC = CC; - char filename[PATH_MAX]; -#define MAX_LISTIDLENGTH 150 - - assoc_file_name(filename, sizeof filename, &sc->room, ctdl_info_dir); - fd = open(filename, 0); - - if (fd != 0) { - struct stat stbuf; - - fstat(fd, &stbuf); - if (stbuf.st_size > 0) - { - sc->RoomInfo = NewStrBufPlain(NULL, stbuf.st_size + 1); - StrBufReadBLOB(sc->RoomInfo, &fd, 0, stbuf.st_size, &err); - } - close(fd); - } - - sc->ListID = NewStrBufPlain(NULL, 1024); - if (StrLength(sc->RoomInfo) > 0) - { - const char *Pos = NULL; - StrBufSipLine(sc->ListID, sc->RoomInfo, &Pos); - - if (StrLength(sc->ListID) > MAX_LISTIDLENGTH) - { - StrBufCutAt(sc->ListID, MAX_LISTIDLENGTH, NULL); - StrBufAppendBufPlain(sc->ListID, HKEY("..."), 0); - } - StrBufAsciify(sc->ListID, ' '); - } - else - { - StrBufAppendBufPlain(sc->ListID, CCC->room.QRname, -1, 0); - } - - StrBufAppendBufPlain(sc->ListID, HKEY("<"), 0); - - 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); - StrBufAppendBufPlain(sc->ListID, sc->room.QRname, -1, 0); - StrBufAppendBufPlain(sc->ListID, HKEY("."), 0); - StrBufAppendBufPlain(sc->ListID, config.c_fqdn, -1, 0); - /* - * this used to be: - * roomname - * 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(); - - StrBufPrintf(sc->Users[roommailalias], - "room_%s@%s", - CCC->room.QRname, - config.c_fqdn); - - StrBufAsciify(sc->Users[roommailalias], '_'); - StrBufLowerCase(sc->Users[roommailalias]); - } - -} /* * Send the *entire* contents of the current room to one specific network node, @@ -263,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; } @@ -271,17 +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); @@ -291,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); @@ -527,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() @@ -639,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 */