Re: Query regarding MAP 1.2 implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Tue, Sep 2, 2014 at 8:22 AM, Gowtham Anandha Babu
<gowtham.ab@xxxxxxxxxxx> wrote:
>
> Hi Luiz,
>
>> -----Original Message-----
>> From: linux-bluetooth-owner@xxxxxxxxxxxxxxx [mailto:linux-bluetooth-
>> owner@xxxxxxxxxxxxxxx] On Behalf Of Luiz Augusto von Dentz
>> Sent: Monday, September 01, 2014 6:37 PM
>> To: Gowtham Anandha Babu
>> Cc: linux-bluetooth@xxxxxxxxxxxxxxx; Bharat Panda
>> Subject: Re: Query regarding MAP 1.2 implementation
>>
>> Hi,
>>
>> On Mon, Sep 1, 2014 at 3:29 PM, Gowtham Anandha Babu
>> <gowtham.ab@xxxxxxxxxxx> wrote:
>>
>> > The current message-dummy.c looks like, it is creating a virtual folder in the
>> system (Ex. Home/PC-NAME/map-messages/).
>> > So, I created the map-messages directory in home/PC-NAME/. Then I tried
>> SETPATH (mentioned in the previous thread).
>> > The output is...
>> >
>> >  obexd[29146]: obexd/src/obex.c:cmd_setpath()
>> > obexd[29146]: SETPATH(0x5), (null)(0xffffffff)
>> > obexd[29146]: obexd/src/obex.c:parse_name() NAME:
>> > obexd[29146]: obexd/plugins/mas.c:mas_setpath() SETPATH: name
>> nonhdr
>> > 0x20
>> > obexd[29146]: SETPATH(0x5), SUCCESS(0x20)
>> >
>> > But When I tried to call GetFolderListing() The output is...
>> >
>> > obexd[29146]: obexd/src/obex.c:cmd_get() session 0x1008c40
>> > obexd[29146]: GET(0x3), (null)(0xffffffff)
>> > obexd[29146]: obexd/src/obex.c:parse_type() TYPE:
>> > x-obex/folder-listing
>> > obexd[29146]: obexd/plugins/mas.c:mas_get() GET: name (null) type
>> > x-obex/folder-listing mas 0x1015c00
>> > obexd[29146]: obexd/plugins/mas.c:get_params() Error when parsing
>> parameters!
>> > obexd[29146]: GET(0x3), BAD_REQUEST(0x40)
>> >
>> > But I had few folders created inside the map-messages.
>>
>> Bad request is normally when there is something wrong with the command
>> itself, the error comes from here:
>>
>> mas->inparams = g_obex_apparam_decode(buffer, size);
>> if (mas->inparams == NULL) {
>>     DBG("Error when parsing parameters!");
>>     return -EBADR;
>> }
>>
>> I suspect the problem is that there is no application parameters set which is
>> fine since all the parameters of GetFolderListing are optional, please try with
>> the attached patch I will send it shortly as a proper patch to the mailing list.
>>
>>
>> --
>> Luiz Augusto von Dentz
>
>
> I applied the patch which was attached in the previous reply. Still I am getting the same error.
> I tried printing the "size" inside the get_params function. Its value is '0' for GetFolderListing request.
> If size=0, then g_obex_apparam_decode()  function always return NULL, which leads to "Error when parsing parameters!".

My bad, the check should be size <= 0 otherwise it will still cause
this problem.


-- 
Luiz Augusto von Dentz
From e90daba9a202f072d626f3404c7b0181a4aa3ac1 Mon Sep 17 00:00:00 2001
From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
Date: Mon, 1 Sep 2014 16:01:40 +0300
Subject: [PATCH BlueZ] obexd/mas: Fix parsing of application parameters

Some commands don't have any mandatory application parameter which means
inparams can be NULL which should not be treated as a bad request.
---
 obexd/plugins/mas.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/obexd/plugins/mas.c b/obexd/plugins/mas.c
index 5729c22..24b26ae 100644
--- a/obexd/plugins/mas.c
+++ b/obexd/plugins/mas.c
@@ -83,8 +83,8 @@ static int get_params(struct obex_session *os, struct mas_session *mas)
 	ssize_t size;
 
 	size = obex_get_apparam(os, &buffer);
-	if (size < 0)
-		size = 0;
+	if (size <= 0)
+		return 0;
 
 	mas->inparams = g_obex_apparam_decode(buffer, size);
 	if (mas->inparams == NULL) {
@@ -249,7 +249,9 @@ static void get_messages_listing_cb(void *session, int err, uint16_t size,
 		return;
 	}
 
-	g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT, &max);
+	if (mas->inparams)
+		g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT,
+									&max);
 
 	if (max == 0) {
 		if (!entry)
@@ -397,7 +399,9 @@ static void get_folder_listing_cb(void *session, int err, uint16_t size,
 		return;
 	}
 
-	g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT, &max);
+	if (mas->inparams)
+		g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT,
+									&max);
 
 	if (max == 0) {
 		if (err != -EAGAIN)
@@ -493,8 +497,12 @@ static void *folder_listing_open(const char *name, int oflag, mode_t mode,
 
 	DBG("name = %s", name);
 
-	g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT, &max);
-	g_obex_apparam_get_uint16(mas->inparams, MAP_AP_STARTOFFSET, &offset);
+	if (mas->inparams) {
+		g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT,
+									&max);
+		g_obex_apparam_get_uint16(mas->inparams, MAP_AP_STARTOFFSET,
+								&offset);
+	}
 
 	*err = messages_get_folder_listing(mas->backend_data, name, max,
 					offset, get_folder_listing_cb, mas);
@@ -526,6 +534,9 @@ static void *msg_listing_open(const char *name, int oflag, mode_t mode,
 		return NULL;
 	}
 
+	if (!mas->inparams)
+		goto done;
+
 	g_obex_apparam_get_uint16(mas->inparams, MAP_AP_MAXLISTCOUNT, &max);
 	g_obex_apparam_get_uint16(mas->inparams, MAP_AP_STARTOFFSET, &offset);
 	g_obex_apparam_get_uint8(mas->inparams, MAP_AP_SUBJECTLENGTH,
@@ -548,6 +559,7 @@ static void *msg_listing_open(const char *name, int oflag, mode_t mode,
 	g_obex_apparam_get_uint8(mas->inparams, MAP_AP_FILTERPRIORITY,
 						&filter.priority);
 
+done:
 	*err = messages_get_messages_listing(mas->backend_data, name, max,
 			offset, subject_len, &filter,
 			get_messages_listing_cb, mas);
-- 
1.9.3


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux