summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2009-08-21 11:02:43 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2009-08-21 11:02:43 +0100
commit1193f79b5c4526a6043da6d3902a9071ac25252b (patch)
tree31b5b3d8a1c1ba0fb6dbe11c899bfa72fe92d1f6
parent063f515dd919c6988ed63c52d7b49d8ff5ad7e10 (diff)
McdAccount: turn the lowmem check for requests into an overridable virtual method
-rw-r--r--src/mcd-account-priv.h5
-rw-r--r--src/mcd-account-requests.c34
-rw-r--r--src/mcd-account.c1
-rw-r--r--src/mcd-account.h6
4 files changed, 42 insertions, 4 deletions
diff --git a/src/mcd-account-priv.h b/src/mcd-account-priv.h
index 33740460..bd4fa0e1 100644
--- a/src/mcd-account-priv.h
+++ b/src/mcd-account-priv.h
@@ -165,5 +165,8 @@ void account_stats_iface_init (McSvcAccountInterfaceStatsClass *iface,
gpointer iface_data);
void account_stats_instance_init (TpSvcDBusProperties *self);
-#endif /* __MCD_ACCOUNT_PRIV_H__ */
+G_GNUC_INTERNAL gboolean _mcd_account_check_request_real (McdAccount *account,
+ GHashTable *request,
+ GError **error);
+#endif /* __MCD_ACCOUNT_PRIV_H__ */
diff --git a/src/mcd-account-requests.c b/src/mcd-account-requests.c
index fda4ab58..ba4dc34f 100644
--- a/src/mcd-account-requests.c
+++ b/src/mcd-account-requests.c
@@ -171,9 +171,8 @@ _mcd_account_create_request (McdAccount *account, GHashTable *properties,
mcd_account_get_account_manager (account));
DBusGConnection *dgc = tp_proxy_get_dbus_connection (dbus_daemon);
- if (mcd_master_has_low_memory (mcd_master_get_default ()))
+ if (!mcd_account_check_request (account, properties, error))
{
- g_set_error (error, MC_ERROR, MC_LOWMEM_ERROR, "Insufficient memory");
return NULL;
}
@@ -320,3 +319,34 @@ account_channelrequests_iface_init (McSvcAccountInterfaceChannelRequestsClass *i
#undef IMPLEMENT
}
+gboolean
+mcd_account_check_request (McdAccount *account, GHashTable *request,
+ GError **error)
+{
+ gboolean (*impl) (McdAccount *account, GHashTable *request,
+ GError **error);
+
+ g_return_val_if_fail (MCD_IS_ACCOUNT (account), FALSE);
+ g_return_val_if_fail (request != NULL, FALSE);
+
+ impl = MCD_ACCOUNT_GET_CLASS (account)->check_request;
+
+ if (impl == NULL)
+ return TRUE;
+
+ return impl (account, request, error);
+}
+
+/* Default implementation of check_request */
+gboolean
+_mcd_account_check_request_real (McdAccount *account, GHashTable *request,
+ GError **error)
+{
+ if (mcd_master_has_low_memory (mcd_master_get_default ()))
+ {
+ g_set_error (error, MC_ERROR, MC_LOWMEM_ERROR, "Insufficient memory");
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/src/mcd-account.c b/src/mcd-account.c
index 07d5ecab..39ecac60 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -2125,6 +2125,7 @@ mcd_account_class_init (McdAccountClass * klass)
klass->set_parameter = set_parameter;
klass->delete = _mcd_account_delete;
klass->load = _mcd_account_load_real;
+ klass->check_request = _mcd_account_check_request_real;
g_object_class_install_property
(object_class, PROP_DBUS_DAEMON,
diff --git a/src/mcd-account.h b/src/mcd-account.h
index de8008a3..0b3befcc 100644
--- a/src/mcd-account.h
+++ b/src/mcd-account.h
@@ -62,7 +62,8 @@ struct _McdAccountClass
gboolean (*delete) (McdAccount *account, GError **error);
void (*load) (McdAccount *account, McdAccountLoadCb callback,
gpointer user_data);
- void (*_mc_reserved5) (void);
+ gboolean (*check_request) (McdAccount *account, GHashTable *request,
+ GError **error);
void (*_mc_reserved6) (void);
void (*_mc_reserved7) (void);
};
@@ -116,4 +117,7 @@ TpConnectionStatusReason mcd_account_get_connection_status_reason (McdAccount *a
McdConnection *mcd_account_get_connection (McdAccount *account);
+gboolean mcd_account_check_request (McdAccount *account, GHashTable *request,
+ GError **error);
+
#endif