removed some newlines from above
[citadel.git] / citadel / modules / network / netspool.h
1 /*
2  * This module handles shared rooms, inter-Citadel mail, and outbound
3  * mailing list processing.
4  *
5  * Copyright (c) 2000-2016 by the citadel.org team
6  *
7  * This program is open source software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  *
21  * ** NOTE **   A word on the S_NETCONFIGS semaphore:
22  * This is a fairly high-level type of critical section.  It ensures that no
23  * two threads work on the netconfigs files at the same time.  Since we do
24  * so many things inside these, here are the rules:
25  *  1. begin_critical_section(S_NETCONFIGS) *before* begin_ any others.
26  *  2. Do *not* perform any I/O with the client during these sections.
27  *
28  */
29
30 typedef struct SpoolControl SpoolControl;
31
32 struct SpoolControl {
33         OneRoomNetCfg *RNCfg;
34         struct ctdlroom room;
35         StrBuf *Users[maxRoomNetCfg];
36         StrBuf *RoomInfo;
37         StrBuf *ListID;
38         FILE *digestfp;
39         int haveDigest;
40         int num_msgs_spooled;
41         long lastsent;
42         HashList *working_ignetcfg;
43         HashList *the_netmap;
44         SpoolControl *next;
45 };
46
47
48 void network_spoolout_room(SpoolControl *sc);
49
50 void InspectQueuedRoom(SpoolControl **pSC,
51                        RoomProcList *room_to_spool,     
52                        HashList *working_ignetcfg,
53                        HashList *the_netmap);
54
55 int HaveSpoolConfig(OneRoomNetCfg* RNCfg);
56
57 void Netmap_AddMe(struct CtdlMessage *msg, const char *defl, long defllen);
58 void network_do_spoolin(HashList *working_ignetcfg, HashList *the_netmap, int *netmap_changed);
59 void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netmap);
60 void free_spoolcontrol_struct(SpoolControl **scc);
61 void free_spoolcontrol_struct_members(SpoolControl *scc);
62 int writenfree_spoolcontrol_file(SpoolControl **scc, char *filename);
63 int read_spoolcontrol_file(SpoolControl **scc, char *filename);
64
65 void aggregate_recipients(StrBuf **recps, RoomNetCfg Which, OneRoomNetCfg *OneRNCfg, long nSegments);
66
67 void CalcListID(SpoolControl *sc);