source: storage.h @ e805611

Last change on this file since e805611 was 5a8afc3, checked in by dequis <dx@…>, at 2016-11-21T06:58:47Z

Manual merge with wilmer's approach to handling missing protocols

Turns out he already implemented pretty much the same thing in the
parson branch... last year.

The differences between the two approaches are subtle (there aren't too
many ways to do this, some lines are the exact same thing) but I decided
I like his version better, so this mostly reverts a handful of my
changes while keeping others. The main advantage of his approach is that
no fake protocols are registered, no actual prpl functions are called,
and the missing prpl is a singleton constant.

New things compared to the implementation in the other branch:

  • The explain_unknown_protocol() function.
  • Fixed named chatrooms throwing a warning and losing the "account" setting when saving. See changes in irc_im.c
  • Fixed the "server" setting dropping when saving. See account.c

Differences with my previous implementation:

  • Accounts with missing protocols don't autoconnect
  • 'account list' marks them as "(missing!)"
  • Property mode set to 100644
File size: 2.5 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/* 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
29typedef 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
40typedef 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
56storage_status_t storage_check_pass(irc_t *irc, const char *nick, const char *password);
57
58storage_status_t storage_load(irc_t * irc, const char *password);
59storage_status_t storage_save(irc_t *irc, char *password, int overwrite);
60storage_status_t storage_remove(const char *nick);
61
62void register_storage_backend(storage_t *);
63G_GNUC_MALLOC GList *storage_init(const char *primary, char **migrate);
64
65extern const struct prpl protocol_missing;
66
67#endif /* __STORAGE_H__ */
Note: See TracBrowser for help on using the repository browser.