2015-10-19 12:03:23

by Simon Fels

[permalink] [raw]
Subject: [PATCH] obexd: pbap: add headers correctly for size query

When client queries for the size of a phonebook we fall into a
indefinite loop as g_obex_apparam_encode always returns the same
number of items added to the buffer regardless how often it is
called. In former times where this code wasn't using GObexApparams
a array was reduced each time the headers where added and so we could
easily find out when we've added all headers. However today we need
to solve this a bit differently by also setting the firstpacket flag
when we receive the phonebook size result from the phonebook
implementation which then lets us correctly go through without
falling into a indefinite loop.
---
obexd/plugins/pbap.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c
index f2f9166..1ecf379 100644
--- a/obexd/plugins/pbap.c
+++ b/obexd/plugins/pbap.c
@@ -193,6 +193,8 @@ static void phonebook_size_result(const char *buffer, size_t bufsize,
pbap->obj->apparam = g_obex_apparam_set_uint16(NULL, PHONEBOOKSIZE_TAG,
phonebooksize);

+ pbap->obj->firstpacket = TRUE;
+
if (missed > 0) {
DBG("missed %d", missed);

@@ -833,7 +835,7 @@ static ssize_t vobject_pull_get_next_header(void *object, void *buf, size_t mtu,

*hi = G_OBEX_HDR_APPARAM;

- if (pbap->params->maxlistcount == 0 || obj->firstpacket) {
+ if (obj->firstpacket) {
obj->firstpacket = FALSE;

return g_obex_apparam_encode(obj->apparam, buf, mtu);
--
2.5.0