Netconfigs: start abstracting handling of network config files
[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 maplist maplist;
31
32 struct maplist {
33         struct maplist *next;
34         StrBuf *remote_nodename;
35         StrBuf *remote_roomname;
36 };
37
38
39 typedef struct SpoolControl SpoolControl;
40
41 struct SpoolControl {
42         long lastsent;
43         StrBuf *Sender;
44         StrBuf *RoomInfo;
45         namelist *NetConfigs[maxRoomNetCfg];
46         StrBuf *misc;
47         FILE *digestfp;
48         int num_msgs_spooled;
49
50         HashList *working_ignetcfg;
51         HashList *the_netmap;
52 };
53
54
55 void network_spoolout_room(RoomProcList *room_to_spool,                        
56                            HashList *working_ignetcfg,
57                            HashList *the_netmap);
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 int writenfree_spoolcontrol_file(SpoolControl **scc, char *filename);
62 int read_spoolcontrol_file(SpoolControl **scc, char *filename);
63 int is_recipient(SpoolControl *sc, const char *Name);