NETCFG: fix specifying the remote room to IGNET share.
[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-2012 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         FILE *digestfp;
37         int num_msgs_spooled;
38         long lastsent;
39
40         HashList *working_ignetcfg;
41         HashList *the_netmap;
42
43         SpoolControl *next;
44 };
45
46
47 void network_spoolout_room(SpoolControl *sc);
48
49 void InspectQueuedRoom(SpoolControl **pSC,
50                        RoomProcList *room_to_spool,     
51                        HashList *working_ignetcfg,
52                        HashList *the_netmap);
53
54 int HaveSpoolConfig(OneRoomNetCfg* RNCfg);
55
56
57 void network_do_spoolin(HashList *working_ignetcfg, HashList *the_netmap, int *netmap_changed);
58 void network_consolidate_spoolout(HashList *working_ignetcfg, HashList *the_netmap);
59 void free_spoolcontrol_struct(SpoolControl **scc);
60 int writenfree_spoolcontrol_file(SpoolControl **scc, char *filename);
61 int read_spoolcontrol_file(SpoolControl **scc, char *filename);
62
63 void aggregate_recipients(StrBuf **recps, RoomNetCfg Which, OneRoomNetCfg *OneRNCfg, long nSegments);