source: protocols/nogaim.h @ 85023c6

Last change on this file since 85023c6 was 85023c6, checked in by Wilmer van der Gaast <wilmer@…>, at 2007-07-15T15:47:34Z

Added imcb_clean_handle() to sanitize handles properly (without putting
IRC-specific stuff into the Jabber module). Only using this in the MUC
code for now because this only works if the IM module can somehow convert
the cleaned up handle back to the original one.

  • Property mode set to 100644
File size: 8.8 KB
Line 
1  /********************************************************************\
2  * BitlBee -- An IRC to other IM-networks gateway                     *
3  *                                                                    *
4  * Copyright 2002-2004 Wilmer van der Gaast and others                *
5  \********************************************************************/
6
7/*
8 * nogaim, soon to be known as im_api. Not a separate product (unless
9 * someone would be interested in such a thing), just a new name.
10 *
11 * Gaim without gaim - for BitlBee
12 *
13 * This file contains functions called by the Gaim IM-modules. It contains
14 * some struct and type definitions from Gaim.
15 *
16 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
17 *                          (and possibly other members of the Gaim team)
18 * Copyright 2002-2007 Wilmer van der Gaast <wilmer@gaast.net>
19 */
20
21/*
22  This program is free software; you can redistribute it and/or modify
23  it under the terms of the GNU General Public License as published by
24  the Free Software Foundation; either version 2 of the License, or
25  (at your option) any later version.
26
27  This program is distributed in the hope that it will be useful,
28  but WITHOUT ANY WARRANTY; without even the implied warranty of
29  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
30  GNU General Public License for more details.
31
32  You should have received a copy of the GNU General Public License with
33  the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
34  if not, write to the Free Software Foundation, Inc., 59 Temple Place,
35  Suite 330, Boston, MA  02111-1307  USA
36*/
37
38#ifndef _NOGAIM_H
39#define _NOGAIM_H
40
41#include "bitlbee.h"
42#include "account.h"
43#include "proxy.h"
44#include "md5.h"
45#include "sha.h"
46
47#define BUF_LEN MSG_LEN
48#define BUF_LONG ( BUF_LEN * 2 )
49#define MSG_LEN 2048
50#define BUF_LEN MSG_LEN
51
52#define BUDDY_ALIAS_MAXLEN 388   /* because MSN names can be 387 characters */
53
54#define WEBSITE "http://www.bitlbee.org/"
55#define GAIM_AWAY_CUSTOM "Custom"
56
57/* Sharing flags between all kinds of things. I just hope I won't hit any
58   limits before 32-bit machines become extinct. ;-) */
59#define OPT_LOGGED_IN   0x00000001
60#define OPT_LOGGING_OUT 0x00000002
61#define OPT_AWAY        0x00000004
62#define OPT_DOES_HTML   0x00000010
63#define OPT_LOCALBUDDY  0x00000020 /* For nicks local to one groupchat */
64#define OPT_TYPING      0x00000100 /* Some pieces of code make assumptions */
65#define OPT_THINKING    0x00000200 /* about these values... Stupid me! */
66
67/* ok. now the fun begins. first we create a connection structure */
68struct im_connection
69{
70        account_t *acc;
71        u_int32_t flags;
72       
73        /* each connection then can have its own protocol-specific data */
74        void *proto_data;
75       
76        /* all connections need an input watcher */
77        int inpa;
78        guint keepalive;
79       
80        /* buddy list stuff. there is still a global groups for the buddy list, but
81         * we need to maintain our own set of buddies, and our own permit/deny lists */
82        GSList *permit;
83        GSList *deny;
84        int permdeny;
85       
86        char displayname[128];
87        char *away;
88       
89        int evil;
90       
91        /* BitlBee */
92        irc_t *irc;
93       
94        struct groupchat *groupchats;
95};
96
97struct groupchat {
98        struct im_connection *ic;
99
100        GList *in_room;
101        GList *ignored;
102       
103        struct groupchat *next;
104        char *channel;
105        char *title;
106        char joined;
107        void *data;
108};
109
110struct buddy {
111        char name[80];
112        char show[BUDDY_ALIAS_MAXLEN];
113        int present;
114        int evil;
115        time_t signon;
116        time_t idle;
117        int uc;
118        guint caps; /* woohoo! */
119        void *proto_data; /* what a hack */
120        struct im_connection *ic; /* the connection it belongs to */
121};
122
123struct prpl {
124        int options;
125        const char *name;
126
127        /* Added this one to be able to add per-account settings, don't think
128           it should be used for anything else. */
129        void (* init)           (account_t *);
130        /* These should all be pretty obvious. */
131        void (* login)          (account_t *);
132        void (* keepalive)      (struct im_connection *);
133        void (* logout)         (struct im_connection *);
134       
135        int  (* buddy_msg)      (struct im_connection *, char *to, char *message, int flags);
136        void (* set_away)       (struct im_connection *, char *state, char *message);
137        void (* get_away)       (struct im_connection *, char *who);
138        int  (* send_typing)    (struct im_connection *, char *who, int flags);
139       
140        /* For now BitlBee doesn't really handle groups, just set it to NULL. */
141        void (* add_buddy)      (struct im_connection *, char *name, char *group);
142        void (* remove_buddy)   (struct im_connection *, char *name, char *group);
143       
144        /* Block list stuff. */
145        void (* add_permit)     (struct im_connection *, char *who);
146        void (* add_deny)       (struct im_connection *, char *who);
147        void (* rem_permit)     (struct im_connection *, char *who);
148        void (* rem_deny)       (struct im_connection *, char *who);
149        /* Doesn't actually have UI hooks. */
150        void (* set_permit_deny)(struct im_connection *);
151       
152        /* Request profile info. Free-formatted stuff, the IM module gives back
153           this info via imcb_log(). */
154        void (* get_info)       (struct im_connection *, char *who);
155        void (* set_my_name)    (struct im_connection *, char *name);
156        void (* set_name)       (struct im_connection *, char *who, char *name);
157       
158        /* Group chat stuff. */
159        void (* chat_invite)    (struct groupchat *, char *who, char *message);
160        void (* chat_leave)     (struct groupchat *);
161        void (* chat_msg)       (struct groupchat *, char *message, int flags);
162        struct groupchat *
163             (* chat_with)      (struct im_connection *, char *who);
164        struct groupchat *
165             (* chat_join)      (struct im_connection *, char *room, char *nick, char *password);
166       
167        GList *(* away_states)(struct im_connection *ic);
168       
169        /* Mainly for AOL, since they think "Bung hole" == "Bu ngho le". *sigh* */
170        int (* handle_cmp) (const char *who1, const char *who2);
171};
172
173/* im_api core stuff. */
174void nogaim_init();
175G_MODULE_EXPORT GSList *get_connections();
176G_MODULE_EXPORT struct prpl *find_protocol( const char *name );
177G_MODULE_EXPORT void register_protocol( struct prpl * );
178
179/* Connection management. */
180G_MODULE_EXPORT struct im_connection *imcb_new( account_t *acc );
181G_MODULE_EXPORT void imcb_free( struct im_connection *ic );
182G_MODULE_EXPORT void imcb_connected( struct im_connection *ic );
183G_MODULE_EXPORT void imc_logout( struct im_connection *ic, int allow_reconnect );
184
185/* Communicating with the user. */
186G_MODULE_EXPORT void imcb_log( struct im_connection *ic, char *format, ... ) G_GNUC_PRINTF( 2, 3 );
187G_MODULE_EXPORT void imcb_error( struct im_connection *ic, char *format, ... ) G_GNUC_PRINTF( 2, 3 );
188G_MODULE_EXPORT void imcb_ask( struct im_connection *ic, char *msg, void *data, void *doit, void *dont );
189G_MODULE_EXPORT void imcb_ask_add( struct im_connection *ic, char *handle, const char *realname );
190
191/* Buddy management */
192G_MODULE_EXPORT void imcb_add_buddy( struct im_connection *ic, char *handle, char *group );
193G_MODULE_EXPORT void imcb_remove_buddy( struct im_connection *ic, char *handle, char *group );
194G_MODULE_EXPORT struct buddy *imcb_find_buddy( struct im_connection *ic, char *handle );
195G_MODULE_EXPORT void imcb_rename_buddy( struct im_connection *ic, char *handle, char *realname );
196G_MODULE_EXPORT void imcb_buddy_nick_hint( struct im_connection *ic, char *handle, char *nick );
197
198/* Buddy activity */
199G_MODULE_EXPORT void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message );
200/* Not implemented yet! */ G_MODULE_EXPORT void imcb_buddy_times( struct im_connection *ic, const char *handle, time_t login, time_t idle );
201G_MODULE_EXPORT void imcb_buddy_msg( struct im_connection *ic, char *handle, char *msg, u_int32_t flags, time_t sent_at );
202G_MODULE_EXPORT void imcb_buddy_typing( struct im_connection *ic, char *handle, u_int32_t flags );
203G_MODULE_EXPORT void imcb_clean_handle( struct im_connection *ic, char *handle );
204
205/* Groupchats */
206G_MODULE_EXPORT void imcb_chat_invited( struct im_connection *ic, char *handle, char *who, char *msg, GList *data );
207G_MODULE_EXPORT struct groupchat *imcb_chat_new( struct im_connection *ic, char *handle );
208G_MODULE_EXPORT void imcb_chat_add_buddy( struct groupchat *b, char *handle );
209G_MODULE_EXPORT void imcb_chat_remove_buddy( struct groupchat *b, char *handle, char *reason );
210G_MODULE_EXPORT void imcb_chat_msg( struct groupchat *c, char *who, char *msg, u_int32_t flags, time_t sent_at );
211G_MODULE_EXPORT void imcb_chat_free( struct groupchat *c );
212
213/* Actions, or whatever. */
214int imc_set_away( struct im_connection *ic, char *away );
215int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags );
216int imc_chat_msg( struct groupchat *c, char *msg, int flags );
217
218void imc_add_allow( struct im_connection *ic, char *handle );
219void imc_rem_allow( struct im_connection *ic, char *handle );
220void imc_add_block( struct im_connection *ic, char *handle );
221void imc_rem_block( struct im_connection *ic, char *handle );
222
223/* Misc. stuff */
224char *set_eval_away_devoice( set_t *set, char *value );
225gboolean auto_reconnect( gpointer data, gint fd, b_input_condition cond );
226void cancel_auto_reconnect( struct account *a );
227
228#endif
Note: See TracBrowser for help on using the repository browser.