00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CTRLPROXY_LINESTACK_H__
00021 #define __CTRLPROXY_LINESTACK_H__
00022
00028 struct line;
00029 struct network;
00030 struct irc_client;
00031 #include <sys/time.h>
00032 #include <gmodule.h>
00033
00034 #include "hooks.h"
00035
00036 struct irc_network_state;
00037 struct linestack_marker;
00038 struct linestack_ops;
00039 struct ctrlproxy_config;
00040
00044 struct linestack_context
00045 {
00046 void *backend_data;
00047 const struct linestack_ops *ops;
00048 };
00049
00053 struct linestack_marker {
00054 void *data;
00055 void (*free_fn) (void *);
00056 };
00057
00058
00059 typedef gboolean (*linestack_traverse_fn) (struct irc_line *, time_t, void *);
00063 struct linestack_ops {
00064 char *name;
00065 gboolean (*init) (struct linestack_context *,
00066 const char *name,
00067 struct ctrlproxy_config *,
00068 const struct irc_network_state *
00069 );
00070 gboolean (*fini) (struct linestack_context *);
00071
00072
00073 gboolean (*insert_line) (
00074 struct linestack_context *,
00075 const struct irc_line *,
00076 const struct irc_network_state *);
00077
00078
00079 void *(*get_marker)
00080 (struct linestack_context *);
00081
00082
00083 void *(*get_marker_numlines)
00084 (struct linestack_context *, int numlines);
00085
00086 void (*free_marker) (void *);
00087
00088 gboolean (*traverse) (
00089 struct linestack_context *,
00090 void *from,
00091 void *to,
00092 linestack_traverse_fn,
00093 void *userdata);
00094
00095
00096 struct irc_network_state *(*get_state) (
00097 struct linestack_context *,
00098 void *);
00099
00100
00101
00102 };
00103
00104 G_MODULE_EXPORT void register_linestack(const struct linestack_ops *);
00105 G_MODULE_EXPORT struct linestack_marker *linestack_get_marker_numlines (
00106 struct linestack_context *,
00107 int lines);
00108
00109 G_MODULE_EXPORT struct irc_network_state *linestack_get_state (
00110 struct linestack_context *,
00111 struct linestack_marker *);
00112
00113 G_MODULE_EXPORT gboolean linestack_traverse (
00114 struct linestack_context *,
00115 struct linestack_marker *from,
00116 struct linestack_marker *to,
00117 linestack_traverse_fn,
00118 void *userdata);
00119
00120 G_MODULE_EXPORT gboolean linestack_traverse_object (
00121 struct linestack_context *,
00122 const char *object,
00123 struct linestack_marker *from,
00124 struct linestack_marker *to,
00125 linestack_traverse_fn,
00126 void *userdata);
00127
00128 G_MODULE_EXPORT gboolean linestack_send (
00129 struct linestack_context *,
00130 struct linestack_marker *from,
00131 struct linestack_marker *to,
00132 struct irc_client *,
00133 gboolean dataonly,
00134 gboolean timed,
00135 int time_offset);
00136
00137 G_MODULE_EXPORT gboolean linestack_send_object (
00138 struct linestack_context *,
00139 const char *object,
00140 struct linestack_marker *from,
00141 struct linestack_marker *to,
00142 struct irc_client *,
00143 gboolean dataonly,
00144 gboolean timed,
00145 int time_offset);
00146
00147 G_MODULE_EXPORT gboolean linestack_replay (
00148 struct linestack_context *,
00149 struct linestack_marker *from,
00150 struct linestack_marker *to,
00151 struct irc_network_state *st);
00152
00153 G_MODULE_EXPORT gboolean linestack_insert_line(
00154 struct linestack_context *,
00155 const struct irc_line *l,
00156 enum data_direction dir,
00157 const struct irc_network_state *);
00158
00159 G_MODULE_EXPORT void linestack_free_marker(struct linestack_marker *);
00160 G_MODULE_EXPORT struct linestack_marker *linestack_get_marker(struct linestack_context *);
00161
00170 G_MODULE_EXPORT struct linestack_context *create_linestack(const struct linestack_ops *, const char *name, struct ctrlproxy_config *, const struct irc_network_state *);
00171 G_MODULE_EXPORT void free_linestack_context(struct linestack_context *);
00172 G_MODULE_EXPORT struct linestack_ops *linestack_find_ops(const char *name);
00173
00174 extern const struct linestack_ops linestack_file;
00175
00176 #endif