00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __LIBIRC_TRANSPORT_H__
00021 #define __LIBIRC_TRANSPORT_H__
00022
00023 #include <glib.h>
00024 #include "line.h"
00025
00031 struct irc_transport;
00032
00033 struct irc_transport_callbacks {
00034 void (*log)(struct irc_transport *transport, const struct irc_line *l, const GError *error);
00035 void (*hangup) (struct irc_transport *transport);
00036 void (*disconnect)(struct irc_transport *transport);
00037 gboolean (*recv)(struct irc_transport *transport, const struct irc_line *line);
00038 void (*charset_error) (struct irc_transport *transport, const char *error_msg);
00039 gboolean (*error) (struct irc_transport *transport, const char *error_msg);
00040 };
00041
00042 struct irc_transport {
00043 GIOChannel *incoming;
00044 gint incoming_id;
00045 gint outgoing_id;
00046 GIConv incoming_iconv;
00047 GIConv outgoing_iconv;
00048 GQueue *pending_lines;
00049 char *charset;
00050 const struct irc_transport_callbacks *callbacks;
00051 void *userdata;
00052 time_t last_line_sent;
00053 };
00054
00055 struct irc_transport *irc_transport_new_iochannel(GIOChannel *iochannel);
00056 void irc_transport_disconnect(struct irc_transport *transport);
00057 void free_irc_transport(struct irc_transport *);
00058 gboolean transport_set_charset(struct irc_transport *transport, const char *name);
00059 gboolean transport_send_line(struct irc_transport *transport, const struct irc_line *);
00060 gboolean transport_send_args(struct irc_transport *transport, ...);
00061 void transport_parse_buffer(struct irc_transport *transport);
00062 void irc_transport_set_callbacks(struct irc_transport *transport,
00063 const struct irc_transport_callbacks *callbacks, void *userdata);
00064
00065 #endif