X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fnetwork%2Fserv_network.c;h=00719bfea96eddb6d0ee94cd96ee78578efc96a3;hp=5dedf0c536ec52754710e18c0078b74182fd8f20;hb=f7754d28818ab3ea8a2831f6b1ebfd94ab69c09a;hpb=6f6eb4d360b12286078f262d8c452b009cc7c605 diff --git a/citadel/modules/network/serv_network.c b/citadel/modules/network/serv_network.c index 5dedf0c53..00719bfea 100644 --- a/citadel/modules/network/serv_network.c +++ b/citadel/modules/network/serv_network.c @@ -149,6 +149,93 @@ 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, @@ -194,6 +281,7 @@ int network_sync_to(char *target_node, long len) 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);