/* Message Types */
typedef unsigned long long stamp_t;
-typedef struct {
- stamp_t when;
- char *channel;
- char *from;
- char *msg;
-} log_t;
+typedef struct server_t server_t;
+typedef struct channel_t channel_t;
+typedef struct user_t user_t;
-typedef struct {
- char *name;
+typedef enum {
+ IRC,
+ XMPP,
+} protocol_t;
+
+typedef struct server_t {
+ protocol_t protocol;
+ char *name;
+ server_t *next;
+} server_t;
+
+typedef struct channel_t {
+ server_t *server;
+ char *name;
+ char *topic;
+ FILE *log;
+ int seen;
+ channel_t *next;
} channel_t;
+typedef struct user_t {
+ server_t *server;
+ char *name;
+ user_t *alias;
+ user_t *next;
+} user_t;
+
+typedef struct {
+ stamp_t when;
+ channel_t *channel;
+ user_t *from;
+ char *text;
+} message_t;
+
/* Global Data */
-extern log_t *chat_log;
-extern int chat_len;
+extern server_t *servers;
+extern channel_t *channels;
+extern user_t *users;
+extern message_t *messages;
+extern int history;
/* Chat functions */
void chat_init(void);
-void chat_config(const char *group, const char *name, const char *key, const char *value);
-void chat_recv(const char *channel, const char *from, const char *msg);
-void chat_send(const char *channel, const char *msg);
+void chat_config(const char *group, const char *name,
+ const char *key, const char *value);
+void chat_recv(channel_t *channel, user_t *from, const char *text);
+void chat_send(channel_t *channel, const char *text);
void chat_exit(void);
-/* Protocol functions */
-extern void irc_init(void);
-extern void irc_config(const char *group, const char *name, const char *key, const char *value);
-extern void irc_send(const char *channel, const char *msg);
+void add_server(server_t *server);
+void add_channel(channel_t *channel);
+void add_user(user_t *user);
+
+/* IRC functions */
+extern void irc_config(server_t *server, channel_t *channel,
+ const char *group, const char *name,
+ const char *key, const char *value);
+extern void irc_send(channel_t *channel, const char *text);
extern void irc_exit(void);
+extern void irc_init(void);
+/* XMPP functions */
extern void xmpp_init(void);
-extern void xmpp_config(const char *group, const char *name, const char *key, const char *value);
-extern void xmpp_send(const char *channel, const char *msg);
+extern void xmpp_config(server_t *server, channel_t *channel,
+ const char *group, const char *name,
+ const char *key, const char *value);
+extern void xmpp_send(channel_t *channel, const char *text);
extern void xmpp_exit(void);