Don't use charsets by default (#117).
[jelmer/ctrlproxy.git] / src / network.h
index 9a197ca6fa764b9941072f776af28b6414b326a8..a14d093b2f88ac5bf47170973aa82b81b7a55be9 100644 (file)
 #ifndef __CTRLPROXY_NETWORK_H__
 #define __CTRLPROXY_NETWORK_H__
 
+/**
+ * @file
+ * @brief Network functions
+ */
+
 #ifndef G_MODULE_EXPORT
 #define G_MODULE_EXPORT 
 #endif
 
 #include "state.h"
+#include "isupport.h"
+#include <sys/socket.h>
+
+#define DEFAULT_NETWORK_CHARSET NULL
 
 struct global;
 struct network;
@@ -35,53 +44,60 @@ struct linestack_context;
 enum network_connection_state { 
                NETWORK_CONNECTION_STATE_NOT_CONNECTED = 0, 
                NETWORK_CONNECTION_STATE_RECONNECT_PENDING,
-               NETWORK_CONNECTION_STATE_CONNECTED,
                NETWORK_CONNECTION_STATE_LOGIN_SENT, 
                NETWORK_CONNECTION_STATE_MOTD_RECVD,
 };
 
+/**
+ * Information about the connection to a network.
+ */
 struct network_connection {
        enum network_connection_state state;
 
        time_t last_line_sent;
+       time_t last_line_recvd;
        GQueue *pending_lines;
-       gint queue_send_id;
+
+       GIOChannel *outgoing;
+       gint outgoing_id;
+       gint incoming_id;
+       GIConv outgoing_iconv;
+       GIConv incoming_iconv;
 
        union { 
                struct {
                        struct tcp_server_config *current_server;
                        struct sockaddr *remote_name;
                        struct sockaddr *local_name;
-                       size_t namelen;
-                       GIOChannel *outgoing;
-                       gint outgoing_id;
+                       socklen_t namelen;
+                       char *last_disconnect_reason;
+                       gint ping_id;
                } tcp;
                
-               struct {
-                       GIOChannel *outgoing;
-                       gint outgoing_id;
-               } program;
-
                struct {
                        void *private_data;
                        struct virtual_network_ops {
                                char *name;
                                gboolean (*init) (struct network *);
-                               gboolean (*to_server) (struct network *, struct client *c, struct line *);
+                               gboolean (*to_server) (struct network *, struct client *c, const struct line *);
                                gboolean (*fini) (struct network *);
                        } *ops;
                } virtual;
        } data;
 };
 
+/**
+ * An IRC network
+ */
 struct network {
-       char *name;
        struct global *global;
        struct network_config *config;
 
        GList *clients;
        guint reconnect_id;
 
+       gpointer ssl_credentials;
+
        struct network_state *state;
        struct network_info info;
        struct network_connection connection;
@@ -89,6 +105,7 @@ struct network {
 };
 
 /* server.c */
+G_MODULE_EXPORT gboolean network_set_charset(struct network *n, const char *name);
 G_MODULE_EXPORT struct network *find_network_by_hostname(struct global *global, const char *host, guint16 port, gboolean create);
 G_MODULE_EXPORT gboolean load_networks(struct global *, struct ctrlproxy_config *cfg);
 G_MODULE_EXPORT gboolean autoconnect_networks(struct global *);
@@ -97,15 +114,18 @@ G_MODULE_EXPORT void unload_network(struct network *);
 G_MODULE_EXPORT gboolean connect_network(struct network *);
 G_MODULE_EXPORT void network_select_next_server(struct network *n);
 G_MODULE_EXPORT gboolean disconnect_network(struct network *s);
-G_MODULE_EXPORT void clients_send(struct network *, struct line *, const struct client *exception);
-G_MODULE_EXPORT gboolean network_send_line(struct network *s, struct client *c, const struct line *);
+G_MODULE_EXPORT void clients_send(GList *clients, struct line *, const struct client *exception);
+G_MODULE_EXPORT void clients_send_args_ex(GList *clients, const char *hostmask, ...);
+G_MODULE_EXPORT gboolean network_send_line(struct network *s, struct client *c, const struct line *, gboolean);
 G_MODULE_EXPORT gboolean network_send_args(struct network *s, ...);
 G_MODULE_EXPORT void register_virtual_network(struct virtual_network_ops *);
 G_MODULE_EXPORT struct network *find_network(struct global *, const char *);
 G_MODULE_EXPORT gboolean virtual_network_recv_line(struct network *l, struct line *);
 G_MODULE_EXPORT gboolean virtual_network_recv_args(struct network *l, const char *origin, ...); 
+G_MODULE_EXPORT gboolean virtual_network_recv_response(struct network *n, int num, ...);
 typedef void (*new_network_notify_fn) (struct network *, void *);
 G_MODULE_EXPORT void register_new_network_notify(struct global *, new_network_notify_fn, void *userdata);
 G_MODULE_EXPORT struct linestack_context *new_linestack(struct network *network);
+char *network_generate_feature_string(struct network *n);
 
 #endif /* __CTRLPROXY_NETWORK_H__ */