From 1ee6c18cfb5eb03f33a5938b37e357dd3fd2c164 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 8 Dec 2005 14:41:53 +0100 Subject: Add abstraction layer for storage --- storage.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 storage.h (limited to 'storage.h') diff --git a/storage.h b/storage.h new file mode 100644 index 00000000..d7c70ddc --- /dev/null +++ b/storage.h @@ -0,0 +1,48 @@ + /********************************************************************\ + * BitlBee -- An IRC to other IM-networks gateway * + * * + * Copyright 2002-2004 Wilmer van der Gaast and others * + \********************************************************************/ + +/* Layer for retrieving and storing buddy information */ + +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License with + the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL; + if not, write to the Free Software Foundation, Inc., 59 Temple Place, + Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __STORAGE_H__ +#define __STORAGE_H__ + +typedef struct { + const char *name; + + /* May be set to NULL if not required */ + void (*init) (void); + + int (*load) (const char *nick, const char *password, irc_t * irc); + int (*exists) (const char *nick); + int (*save) (irc_t *irc); + int (*remove) (const char *nick); + int (*check_pass) (const char *nick, const char *pass); + + /* May be NULL if not supported by backend */ + int (*rename) (const char *onick, const char *nnick, const char *password); +} storage_t; + +void register_storage_backend(storage_t *); +storage_t *storage_init(const char *name); + +#endif /* __STORAGE_H__ */ -- cgit v1.2.3 From a1f17d45fae99428c8024168b55b4279c59ac867 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 8 Dec 2005 15:14:28 +0100 Subject: Simplify storage API a bit --- storage.h | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'storage.h') diff --git a/storage.h b/storage.h index d7c70ddc..25aa2cb0 100644 --- a/storage.h +++ b/storage.h @@ -26,20 +26,28 @@ #ifndef __STORAGE_H__ #define __STORAGE_H__ +typedef enum { + STORAGE_OK = 0, + STORAGE_NO_SUCH_USER, + STORAGE_INVALID_PASSWORD, + STORAGE_ALREADY_EXISTS, + STORAGE_OTHER_ERROR /* Error that isn't caused by user input, such as + a database that is unreachable. log() will be + used for the exact error message */ +} storage_status_t; + typedef struct { const char *name; /* May be set to NULL if not required */ void (*init) (void); - int (*load) (const char *nick, const char *password, irc_t * irc); - int (*exists) (const char *nick); - int (*save) (irc_t *irc); - int (*remove) (const char *nick); - int (*check_pass) (const char *nick, const char *pass); + storage_status_t (*load) (const char *nick, const char *password, irc_t * irc); + storage_status_t (*save) (irc_t *irc, int overwrite); + storage_status_t (*remove) (const char *nick, const char *password); /* May be NULL if not supported by backend */ - int (*rename) (const char *onick, const char *nnick, const char *password); + storage_status_t (*rename) (const char *onick, const char *nnick, const char *password); } storage_t; void register_storage_backend(storage_t *); -- cgit v1.2.3 From 7989fcf34257201f54538f289cce1c651341e142 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 8 Dec 2005 15:37:39 +0100 Subject: Add check_pass function --- storage.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'storage.h') diff --git a/storage.h b/storage.h index 25aa2cb0..3139d63b 100644 --- a/storage.h +++ b/storage.h @@ -42,6 +42,8 @@ typedef struct { /* May be set to NULL if not required */ void (*init) (void); + storage_status_t (*check_pass) (const char *nick, const char *password); + storage_status_t (*load) (const char *nick, const char *password, irc_t * irc); storage_status_t (*save) (irc_t *irc, int overwrite); storage_status_t (*remove) (const char *nick, const char *password); -- cgit v1.2.3 From ab49fdcec9a09df839ec488e570672f2dd904dc7 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 10 Dec 2005 15:50:49 +0100 Subject: Use helper functions rather then the backends directly. This will be used for transparent upgrade support later on. --- storage.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'storage.h') diff --git a/storage.h b/storage.h index 3139d63b..f799e3f9 100644 --- a/storage.h +++ b/storage.h @@ -52,6 +52,14 @@ typedef struct { storage_status_t (*rename) (const char *onick, const char *nnick, const char *password); } storage_t; +storage_status_t storage_check_pass (const char *nick, const char *password); + +storage_status_t storage_load (const char *nick, const char *password, irc_t * irc); +storage_status_t storage_save (irc_t *irc, int overwrite); +storage_status_t storage_remove (const char *nick, const char *password); + +storage_status_t storage_rename (const char *onick, const char *nnick, const char *password); + void register_storage_backend(storage_t *); storage_t *storage_init(const char *name); -- cgit v1.2.3 From b73ac9c35fb53203b8d0668251dfb66096883863 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 14 Dec 2005 00:05:27 +0100 Subject: Add support for 'primary' and 'migrate' account storages. Fix two bugs in the text storage backend that were introduced by my previous changes. --- storage.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'storage.h') diff --git a/storage.h b/storage.h index f799e3f9..301b424c 100644 --- a/storage.h +++ b/storage.h @@ -61,6 +61,6 @@ storage_status_t storage_remove (const char *nick, const char *password); storage_status_t storage_rename (const char *onick, const char *nnick, const char *password); void register_storage_backend(storage_t *); -storage_t *storage_init(const char *name); +GList *storage_init(const char *primary, char **migrate); #endif /* __STORAGE_H__ */ -- cgit v1.2.3