[evolution-kolab] CamelImapxAcl: API / stubs rework
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab] CamelImapxAcl: API / stubs rework
- Date: Tue, 2 Oct 2012 09:54:57 +0000 (UTC)
commit 0c161e120282dc0ef762874e1fde75d91a370646
Author: Christian Hilberg <hilberg kernelconcepts de>
Date: Mon Oct 1 18:43:07 2012 +0200
CamelImapxAcl: API / stubs rework
* instead of plain strings for ACL, use datastructures here
similar to CamelImapxMetadata
* this (a) eases data handling and (b) makes the API and
internal functions look more like those implemented in
CamelImapxMetadata
src/libekolab/camel-imapx-acl.c | 269 +++++++++++++++++++++++++++++++++------
src/libekolab/camel-imapx-acl.h | 70 ++++++++---
2 files changed, 284 insertions(+), 55 deletions(-)
---
diff --git a/src/libekolab/camel-imapx-acl.c b/src/libekolab/camel-imapx-acl.c
index 589b8de..04c0fe5 100644
--- a/src/libekolab/camel-imapx-acl.c
+++ b/src/libekolab/camel-imapx-acl.c
@@ -37,26 +37,119 @@
/*----------------------------------------------------------------------------*/
+static gboolean
+imapx_acl_entry_validate_access_id (const gchar *access_id,
+ GError **err)
+{
+ g_return_val_if_fail (access_id != NULL, FALSE);
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ /* FIXME implement me */
+ g_warning ("%s[%u] FIXME implement me", __func__, __LINE__);
+
+ return TRUE;
+}
+
+static gboolean
+imapx_acl_entry_validate_rights (const gchar *rights,
+ GError **err)
+{
+ g_return_val_if_fail (rights != NULL, FALSE);
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ /* FIXME implement me */
+ g_warning ("%s[%u] FIXME implement me", __func__, __LINE__);
+
+ return TRUE;
+}
+
+static void
+imapx_acl_entry_gdestroy (gpointer data)
+{
+ CamelImapxAclEntry *entry = NULL;
+
+ if (data == NULL)
+ return;
+
+ entry = (CamelImapxAclEntry *) data;
+ camel_imapx_acl_entry_free (entry);
+}
/*----------------------------------------------------------------------------*/
+CamelImapxAclEntry*
+camel_imapx_acl_entry_new (const gchar *access_id,
+ const gchar *rights,
+ GError **err)
+{
+ CamelImapxAclEntry *entry = NULL;
+ GError *tmp_err = NULL;
+ gboolean ok = FALSE;
+
+ g_return_val_if_fail (access_id != NULL, NULL);
+ /* rights may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+ ok = imapx_acl_entry_validate_access_id (access_id,
+ &tmp_err);
+ if (! ok)
+ goto exit;
+
+ if (rights != NULL) {
+ ok = imapx_acl_entry_validate_rights (rights,
+ &tmp_err);
+ if (! ok)
+ goto exit;
+ }
+
+ entry = g_new0 (CamelImapxAclEntry, 1);
+ entry->access_id = g_strdup (access_id);
+ entry->rights = g_strdup (rights);
+
+ exit:
+ if (tmp_err != NULL) {
+ g_propagate_error (err, tmp_err);
+ return NULL;
+ }
+
+ return entry;
+}
+
+void
+camel_imapx_acl_entry_free (CamelImapxAclEntry *entry)
+{
+ if (entry == NULL)
+ return;
+
+ if (entry->access_id != NULL)
+ g_free (entry->access_id);
+
+ if (entry->rights != NULL)
+ g_free (entry->rights);
+
+ g_free (entry);
+}
+
CamelImapxAcl*
camel_imapx_acl_new (gboolean locked)
{
CamelImapxAcl *acl = g_new0 (CamelImapxAcl, 1);
- g_mutex_init (&(acl->acl_lock));
+ g_mutex_init (&(acl->lock));
if (locked)
- g_mutex_lock (&(acl->acl_lock));
+ g_mutex_lock (&(acl->lock));
+ /* foldername:myrights */
acl->myrights = g_hash_table_new_full (g_str_hash,
g_str_equal,
g_free,
g_free);
+
+ /* foldername:access_id:rights */
acl->mboxes = g_hash_table_new_full (g_str_hash,
g_str_equal,
g_free,
- g_free);
+ (GDestroyNotify) g_hash_table_destroy);
return acl;
}
@@ -66,14 +159,16 @@ camel_imapx_acl_free (CamelImapxAcl *acl)
if (acl == NULL)
return;
- if (acl->myrights)
+ while (! g_mutex_trylock (&(acl->lock)));
+
+ if (acl->myrights != NULL)
g_hash_table_destroy (acl->myrights);
- if (acl->mboxes)
+
+ if (acl->mboxes != NULL)
g_hash_table_destroy (acl->mboxes);
- while (! g_mutex_trylock (&(acl->acl_lock)));
- g_mutex_unlock (&(acl->acl_lock));
- g_mutex_clear (&(acl->acl_lock));
+ g_mutex_unlock (&(acl->lock));
+ g_mutex_clear (&(acl->lock));
g_free (acl);
}
@@ -89,7 +184,7 @@ camel_imapx_acl_resect (CamelImapxAcl *acl)
return NULL;
/* (acquire acl lock) */
- g_mutex_lock (&(acl->acl_lock));
+ g_mutex_lock (&(acl->lock));
tmp_acl = camel_imapx_acl_new (FALSE);
@@ -103,82 +198,182 @@ camel_imapx_acl_resect (CamelImapxAcl *acl)
tmp_acl->mboxes = mboxes;
/* (release acl lock) */
- g_mutex_unlock (&(acl->acl_lock));
+ g_mutex_unlock (&(acl->lock));
return tmp_acl;
}
gboolean
-camel_imapx_acl_add_acl_from_server_response (CamelImapxAcl *acl,
- CamelIMAPXStream *is,
- GCancellable *cancellable,
- GError **err)
+camel_imapx_acl_validate (CamelImapxAcl *acl,
+ GError **err)
{
g_return_val_if_fail (acl != NULL, FALSE);
- g_return_val_if_fail (CAMEL_IS_IMAPX_STREAM (is), FALSE);
- (void)cancellable; /* FIXME */ /* cancellable may be NULL */
g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
- /* FIXME implement me */
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
+
g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
+
return TRUE;
}
+GList*
+camel_imapx_acl_get_as_list (CamelImapxAcl *acl,
+ const gchar *mbox_name)
+{
+ g_return_val_if_fail (acl != NULL, NULL);
+ g_return_val_if_fail (mbox_name != NULL, NULL);
+
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
+
+ g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
+
+ return NULL;
+}
+
+void
+camel_imapx_acl_free_list (GList *entries)
+{
+ if (entries == NULL)
+ return;
+
+ g_list_free_full (entries,
+ imapx_acl_entry_gdestroy);
+}
+
gboolean
-camel_imapx_acl_add_myrights_from_server_response (CamelImapxAcl *acl,
- CamelIMAPXStream *is,
- GCancellable *cancellable,
- GError **err)
+camel_imapx_acl_update_acl (CamelImapxAcl *acl,
+ const gchar *mbox_name,
+ const GList *entries,
+ GError **err)
{
g_return_val_if_fail (acl != NULL, FALSE);
- g_return_val_if_fail (CAMEL_IS_IMAPX_STREAM (is), FALSE);
- (void)cancellable; /* FIXME */ /* cancellable may be NULL */
+ g_return_val_if_fail (mbox_name != NULL, FALSE);
+ /* entries may be NULL (used for deletion) */
g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
- /* FIXME implement me */
+ if (entries == NULL)
+ return TRUE;
+
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
+
g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
+
return TRUE;
}
+gchar*
+camel_imapx_acl_get_myrights (CamelImapxAcl *acl,
+ const gchar *mbox_name)
+{
+ g_return_val_if_fail (acl != NULL, FALSE);
+ g_return_val_if_fail (mbox_name != NULL, FALSE);
+
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
+
+ g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
+
+ return NULL;
+}
+
gboolean
-camel_imapx_acl_remove_acl (CamelImapxAcl *acl,
- const gchar *mailbox_name)
+camel_imapx_acl_update_myrights (CamelImapxAcl *acl,
+ const gchar *mbox_name,
+ const gchar *rights,
+ GError **err)
{
g_return_val_if_fail (acl != NULL, FALSE);
- g_return_val_if_fail (mailbox_name != NULL, FALSE);
+ g_return_val_if_fail (mbox_name != NULL, FALSE);
+ /* rights may be NULL (used for deletion) */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
- /* FIXME implement me */
g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
+
return TRUE;
}
gboolean
-camel_imapx_acl_remove_myrights (CamelImapxAcl *acl,
- const gchar *mailbox_name)
+camel_imapx_acl_update_acl_from_server_response (CamelImapxAcl *acl,
+ CamelIMAPXStream *is,
+ GCancellable *cancellable,
+ GError **err)
{
g_return_val_if_fail (acl != NULL, FALSE);
- g_return_val_if_fail (mailbox_name != NULL, FALSE);
+ g_return_val_if_fail (CAMEL_IS_IMAPX_STREAM (is), FALSE);
+ /* cancellable may be NULL */
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
- /* FIXME implement me */
g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
+
return TRUE;
}
gboolean
-camel_imapx_acl_validate_imapacl (const gchar *imapacl,
- GError **err)
+camel_imapx_acl_update_myrights_from_server_response (CamelImapxAcl *acl,
+ CamelIMAPXStream *is,
+ GCancellable *cancellable,
+ GError **err)
{
- /* imapacl may be NULL */
+ g_return_val_if_fail (acl != NULL, FALSE);
+ g_return_val_if_fail (CAMEL_IS_IMAPX_STREAM (is), FALSE);
+ /* cancellable may be NULL */
g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
- if (imapacl == NULL)
- return TRUE;
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
+
+ g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
return TRUE;
}
+GSList*
+camel_imapx_acl_new_commandlist (CamelImapxAcl *acl,
+ GError **err)
+{
+ g_return_val_if_fail (acl != NULL, NULL);
+ g_return_val_if_fail (err == NULL || *err == NULL, FALSE);
+
+ /* (acquire acl lock) */
+ g_mutex_lock (&(acl->lock));
+
+ g_warning ("%s()[%u] FIXME implement me", __func__, __LINE__);
+
+ /* (release acl lock) */
+ g_mutex_unlock (&(acl->lock));
+
+ return NULL;
+}
+
/*----------------------------------------------------------------------------*/
diff --git a/src/libekolab/camel-imapx-acl.h b/src/libekolab/camel-imapx-acl.h
index 4dc4391..f43368c 100644
--- a/src/libekolab/camel-imapx-acl.h
+++ b/src/libekolab/camel-imapx-acl.h
@@ -41,14 +41,29 @@
/*----------------------------------------------------------------------------*/
-typedef struct _CamelImapxAcl {
+typedef struct _CamelImapxAclEntry CamelImapxAclEntry;
+struct _CamelImapxAclEntry {
+ gchar *access_id;
+ gchar *rights;
+};
+
+typedef struct _CamelImapxAcl CamelImapxAcl;
+struct _CamelImapxAcl {
GHashTable *myrights; /* MYRIGHTS per folder */
GHashTable *mboxes; /* ACL per folder */
- GMutex acl_lock;
-} CamelImapxAcl;
+ GMutex lock;
+};
/*----------------------------------------------------------------------------*/
+CamelImapxAclEntry*
+camel_imapx_acl_entry_new (const gchar *access_id,
+ const gchar *rights,
+ GError **err);
+
+void
+camel_imapx_acl_entry_free (CamelImapxAclEntry *entry);
+
CamelImapxAcl*
camel_imapx_acl_new (gboolean locked);
@@ -59,27 +74,46 @@ CamelImapxAcl*
camel_imapx_acl_resect (CamelImapxAcl *acl);
gboolean
-camel_imapx_acl_add_acl_from_server_response (CamelImapxAcl *acl,
- CamelIMAPXStream *is,
- GCancellable *cancellable,
- GError **err);
-gboolean
-camel_imapx_acl_add_myrights_from_server_response (CamelImapxAcl *acl,
- CamelIMAPXStream *is,
- GCancellable *cancellable,
- GError **err);
+camel_imapx_acl_validate (CamelImapxAcl *acl,
+ GError **err);
+
+GList*
+camel_imapx_acl_get_as_list (CamelImapxAcl *acl,
+ const gchar *mbox_name);
+
+void
+camel_imapx_acl_free_list (GList *entries);
gboolean
-camel_imapx_acl_remove_acl (CamelImapxAcl *acl,
- const gchar *mailbox_name);
+camel_imapx_acl_update_acl (CamelImapxAcl *acl,
+ const gchar *mbox_name,
+ const GList *entries,
+ GError **err);
+
+gchar*
+camel_imapx_acl_get_myrights (CamelImapxAcl *acl,
+ const gchar *mbox_name);
gboolean
-camel_imapx_acl_remove_myrights (CamelImapxAcl *acl,
- const gchar *mailbox_name);
+camel_imapx_acl_update_myrights (CamelImapxAcl *acl,
+ const gchar *mbox_name,
+ const gchar *rights,
+ GError **err);
gboolean
-camel_imapx_acl_validate_imapacl (const gchar *imapacl,
- GError **err);
+camel_imapx_acl_update_acl_from_server_response (CamelImapxAcl *acl,
+ CamelIMAPXStream *is,
+ GCancellable *cancellable,
+ GError **err);
+gboolean
+camel_imapx_acl_update_myrights_from_server_response (CamelImapxAcl *acl,
+ CamelIMAPXStream *is,
+ GCancellable *cancellable,
+ GError **err);
+
+GSList*
+camel_imapx_acl_new_commandlist (CamelImapxAcl *acl,
+ GError **err);
/*----------------------------------------------------------------------------*/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]