1 /********************************************************************\
2   * BitlBee -- An IRC to other IM-networks gateway                     *
3   *                                                                    *
4   * Copyright 2002-2004 Wilmer van der Gaast and others                *
5   \********************************************************************/
6 
7 /* Layer for retrieving and storing buddy information */
8 
9 /*
10   This program is free software; you can redistribute it and/or modify
11   it under the terms of the GNU General Public License as published by
12   the Free Software Foundation; either version 2 of the License, or
13   (at your option) any later version.
14 
15   This program is distributed in the hope that it will be useful,
16   but WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   GNU General Public License for more details.
19 
20   You should have received a copy of the GNU General Public License with
21   the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
22   if not, write to the Free Software Foundation, Inc., 51 Franklin St.,
23   Fifth Floor, Boston, MA  02110-1301  USA
24 */
25 
26 #ifndef __STORAGE_H__
27 #define __STORAGE_H__
28 
29 typedef enum {
30 	STORAGE_OK = 0,
31 	STORAGE_NO_SUCH_USER,
32 	STORAGE_INVALID_PASSWORD,
33 	STORAGE_CHECK_BACKEND,
34 	STORAGE_ALREADY_EXISTS,
35 	STORAGE_OTHER_ERROR /* Error that isn't caused by user input, such as
36 	                       a database that is unreachable. log() will be
37 	                       used for the exact error message */
38 } storage_status_t;
39 
40 typedef struct {
41 	const char *name;
42 
43 	/* May be set to NULL if not required */
44 	void (*init)(void);
45 
46 	storage_status_t (*check_pass)(irc_t *irc, const char *nick, const char *password);
47 
48 	storage_status_t (*load)(irc_t *irc, const char *password);
49 	storage_status_t (*save)(irc_t *irc, int overwrite);
50 	storage_status_t (*remove)(const char *nick);
51 
52 	/* May be NULL if not supported by backend */
53 	storage_status_t (*rename)(const char *onick, const char *nnick, const char *password);
54 } storage_t;
55 
56 storage_status_t storage_check_pass(irc_t *irc, const char *nick, const char *password);
57 
58 storage_status_t storage_load(irc_t * irc, const char *password);
59 storage_status_t storage_save(irc_t *irc, char *password, int overwrite);
60 storage_status_t storage_remove(const char *nick);
61 
62 void register_storage_backend(storage_t *);
63 G_GNUC_MALLOC GList *storage_init(const char *primary, char **migrate);
64 
65 extern const struct prpl protocol_missing;
66 
67 #endif /* __STORAGE_H__ */
68