diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c
index 0584524..84f4a8a 100644
--- a/obexd/plugins/pbap.c
+++ b/obexd/plugins/pbap.c
struct pbap_session {
struct apparam_field *params;
gchar *folder;
+ uint32_t find_handle;
GString *buffer;
struct cache cache;
};
}
}
+static void cache_entry_done(void *user_data)
+{
+ struct pbap_session *pbap = user_data;
+ const char *id;
+ int ret;
+
+ pbap->cache.valid = TRUE;
+
+ id = cache_find(&pbap->cache, pbap->find_handle);
+
+ ret = phonebook_get_entry(pbap->folder, id, pbap->params, query_result,
+ pbap);
+ if (ret < 0)
+ obex_object_set_io_flags(pbap, G_IO_ERR, ret);
+}
+
static struct apparam_field *parse_aparam(const guint8 *buffer, guint32 hlen)
{
struct apparam_field *param;
pbap = g_new0(struct pbap_session, 1);
pbap->folder = g_strdup("/");
+ pbap->find_handle = PHONEBOOK_INVALID_HANDLE;
if (err)
*err = 0;
goto fail;
}
+ if (pbap->cache.valid == FALSE) {
+ pbap->find_handle = handle;
+ ret = phonebook_create_cache(pbap->folder, cache_entry_notify,
+ cache_entry_done, pbap);
+ goto done;
+ }
+
id = cache_find(&pbap->cache, handle);
if (!id) {
ret = -ENOENT;
ret = phonebook_get_entry(pbap->folder, id, pbap->params, query_result,
pbap);
+
+done:
if (ret < 0)
goto fail;