Rework networker
[citadel.git] / citadel / modules / network / netconfig.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 _nodeconf {
31         int DeleteMe;
32         StrBuf *NodeName;
33         StrBuf *Secret;
34         StrBuf *Host;
35         StrBuf *Port;
36 }NodeConf;
37
38 typedef struct __NetMap {
39         StrBuf *NodeName;
40         time_t lastcontact;
41         StrBuf *NextHop;
42 }NetMap;
43
44 HashList* load_ignetcfg(void);
45
46 HashList* read_network_map(void);
47 StrBuf *SerializeNetworkMap(HashList *Map);
48 void network_learn_topology(char *node, char *path, HashList *the_netmap, int *netmap_changed);
49
50 int is_valid_node(const StrBuf **nexthop,
51                   const StrBuf **secret,
52                   StrBuf *node,
53                   HashList *IgnetCfg,
54                   HashList *the_netmap);