Fix compile warnings
[jelmer/ctrlproxy.git] / network.h
1 /*
2         ctrlproxy: A modular IRC proxy
3         (c) 2002-2005 Jelmer Vernooij <jelmer@nl.linux.org>
4
5         This program is free software; you can redistribute it and/or modify
6         it under the terms of the GNU General Public License as published by
7         the Free Software Foundation; either version 2 of the License, or
8         (at your option) any later version.
9
10         This program is distributed in the hope that it will be useful,
11         but WITHOUT ANY WARRANTY; without even the implied warranty of
12         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13         GNU General Public License for more details.
14
15         You should have received a copy of the GNU General Public License
16         along with this program; if not, write to the Free Software
17         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20 #ifndef __CTRLPROXY_NETWORK_H__
21 #define __CTRLPROXY_NETWORK_H__
22
23 #ifndef G_MODULE_EXPORT
24 #define G_MODULE_EXPORT 
25 #endif
26
27 #include "state.h"
28
29 struct global;
30 struct network;
31 struct client;
32 struct line;
33
34 enum network_connection_state { 
35                 NETWORK_CONNECTION_STATE_NOT_CONNECTED = 0, 
36                 NETWORK_CONNECTION_STATE_RECONNECT_PENDING,
37                 NETWORK_CONNECTION_STATE_CONNECTED,
38                 NETWORK_CONNECTION_STATE_LOGIN_SENT, 
39                 NETWORK_CONNECTION_STATE_MOTD_RECVD,
40 };
41
42 struct network_connection {
43         enum network_connection_state state;
44
45         union { 
46                 struct {
47                         struct tcp_server_config *current_server;
48                         struct sockaddr *remote_name;
49                         struct sockaddr *local_name;
50                         size_t namelen;
51                         GIOChannel *outgoing;
52                         gint outgoing_id;
53                 } tcp;
54                 
55                 struct {
56                         GIOChannel *outgoing;
57                         gint outgoing_id;
58                 } program;
59
60                 struct {
61                         void *private_data;
62                         struct virtual_network_ops {
63                                 char *name;
64                                 gboolean (*init) (struct network *);
65                                 gboolean (*to_server) (struct network *, struct client *c, struct line *);
66                                 gboolean (*fini) (struct network *);
67                         } *ops;
68                 } virtual;
69         } data;
70 };
71
72 struct network {
73         char *name;
74         struct global *global;
75         struct network_config *config;
76
77         GList *clients;
78         guint reconnect_id;
79
80         struct network_state *state;
81         struct network_info info;
82         struct network_connection connection;
83 };
84
85 /* server.c */
86 G_MODULE_EXPORT struct network *find_network_by_hostname(struct global *global, const char *host, guint16 port, gboolean create);
87 G_MODULE_EXPORT gboolean load_networks(struct global *, struct ctrlproxy_config *cfg);
88 G_MODULE_EXPORT gboolean autoconnect_networks(struct global *);
89 G_MODULE_EXPORT struct network *load_network(struct global *, struct network_config *);
90 G_MODULE_EXPORT void unload_network(struct network *);
91 G_MODULE_EXPORT gboolean connect_network(struct network *);
92 G_MODULE_EXPORT void network_select_next_server(struct network *n);
93 G_MODULE_EXPORT gboolean disconnect_network(struct network *s);
94 G_MODULE_EXPORT void clients_send(struct network *, struct line *, const struct client *exception);
95 G_MODULE_EXPORT gboolean network_send_line(struct network *s, const struct client *c, const struct line *);
96 G_MODULE_EXPORT gboolean network_send_line_direct(struct network *s, const struct client *c, const struct line *);
97 G_MODULE_EXPORT gboolean network_send_args(struct network *s, ...);
98 G_MODULE_EXPORT void register_virtual_network(struct virtual_network_ops *);
99 G_MODULE_EXPORT struct network *find_network(struct global *, const char *);
100 G_MODULE_EXPORT gboolean virtual_network_recv_line(struct network *l, struct line *);
101 G_MODULE_EXPORT gboolean virtual_network_recv_args(struct network *l, const char *origin, ...); 
102
103 #endif /* __CTRLPROXY_NETWORK_H__ */