00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __LIBIRC_CLIENT_H__
00021 #define __LIBIRC_CLIENT_H__
00022
00028 #include "line.h"
00029 #include "transport.h"
00030
00031 #include <sys/time.h>
00032 #include <glib.h>
00033 #include <gmodule.h>
00034
00035 struct irc_client_callbacks {
00036 gboolean (*process_from_client) (struct irc_client *, const struct irc_line *);
00037 gboolean (*process_to_client) (struct irc_client *, const struct irc_line *);
00038 void (*disconnect) (struct irc_client *);
00039 void (*free_private_data) (struct irc_client *);
00040 void (*log_fn) (enum log_level l, const struct irc_client *, const char *data);
00041 gboolean (*welcome) (struct irc_client *);
00042 };
00043
00044
00048 struct irc_client {
00049 int references;
00050 struct irc_network *network;
00051 char *description;
00052 gint ping_id;
00053 time_t last_ping;
00054 time_t last_pong;
00055 time_t connect_time;
00056 char *requested_nick;
00057 char *requested_username;
00058 char *requested_hostname;
00059 char *default_origin;
00060 gboolean exit_on_close;
00061 gboolean connected;
00062 gboolean authorized;
00063 struct irc_network_state *state;
00064 struct irc_client_callbacks *callbacks;
00065 struct irc_transport *transport;
00066 };
00067
00071 G_MODULE_EXPORT void client_disconnect(struct irc_client *c, const char *reason);
00072
00073 G_MODULE_EXPORT G_GNUC_NULL_TERMINATED gboolean client_send_args(struct irc_client *c, ...);
00074 G_MODULE_EXPORT G_GNUC_NULL_TERMINATED gboolean client_send_args_ex(struct irc_client *c,
00075 const char *hm, ...);
00076 G_MODULE_EXPORT G_GNUC_NULL_TERMINATED gboolean client_send_response(struct irc_client *c,
00077 int response, ...);
00078 G_MODULE_EXPORT gboolean client_send_line(struct irc_client *c,
00079 const struct irc_line *);
00080 G_MODULE_EXPORT gboolean client_set_charset(struct irc_client *c, const char *name);
00081 G_MODULE_EXPORT const char *client_get_default_target(struct irc_client *c);
00082 G_MODULE_EXPORT const char *client_get_own_hostmask(struct irc_client *c);
00083 G_MODULE_EXPORT struct irc_client *client_ref(struct irc_client *c);
00084 G_MODULE_EXPORT void client_unref(struct irc_client *c);
00085 G_MODULE_EXPORT struct irc_client *irc_client_new(struct irc_transport *transport, const char *default_origin, const char *desc, struct irc_client_callbacks *callbacks);
00086 G_MODULE_EXPORT void clients_send_state(GList *clients,
00087 struct irc_network_state *s);
00088
00089 G_MODULE_EXPORT void client_send_nameslist(struct irc_client *client,
00090 struct irc_channel_state *ch);
00091 G_MODULE_EXPORT gboolean client_send_channel_state_diff(
00092 struct irc_client *client,
00093 struct irc_channel_state *old_state,
00094 struct irc_channel_state *new_state);
00095
00096 G_MODULE_EXPORT gboolean client_send_state_diff(struct irc_client *client, struct irc_network_state *old_state, struct irc_network_state *new_state);
00097
00098 G_MODULE_EXPORT void client_send_channel_state(struct irc_client *c,
00099 struct irc_channel_state *ch);
00100 G_MODULE_EXPORT void client_send_topic(struct irc_client *c, struct irc_channel_state *ch);
00101 G_MODULE_EXPORT void client_send_banlist(struct irc_client *client, struct irc_channel_state *channel);
00102 G_MODULE_EXPORT void client_send_channel_mode(struct irc_client *client, struct irc_channel_state *channel);
00103 G_MODULE_EXPORT void client_send_luserchannels(struct irc_client *c, int num);
00104 G_MODULE_EXPORT void client_send_motd(struct irc_client *c, char **lines);
00105 G_MODULE_EXPORT void client_parse_buffer(struct irc_client *client);
00106 G_MODULE_EXPORT void client_log(enum log_level, const struct irc_client *c, const char *fmt, ...);
00107
00108 #endif