Commit Graph

496 Commits

Author SHA1 Message Date
Don Zickus
03f0497691 obexd: Add a detailed failure message for exchanging business cards
When sending the ExchangeBusinessCards() command, the command returns
a failure.  It isn't clear what that failure is.  Upon looking through
the code, it is obvious the function is not implemented.

This patch just adds an extra detail message 'Not Implemented' to make
the failure a little more clear about what the problem is.
2016-07-04 14:33:53 +03:00
Syam Sidhardhan
8175785680 obexd: client: Fix memory leaks
We have to free the allocated memory for data and its members.
2016-02-11 15:53:07 +02:00
Luiz Augusto von Dentz
c5a49786e3 obexd/session: Fix crash when disconnecting
If session owner disconnect from the bus while g_obex_connect is pending
it may lead to a crash since it is never canceled connected_cb may still
be called after callback_data is freed.
2015-11-08 20:07:51 +02:00
Luiz Augusto von Dentz
95c09761fd obexd: Fix not destroying session if owner disconnects
If the owner disconnects the session should be destroyed even if the
connection is pending:

obexd/client/session.c:owner_disconnected()
obexd/client/session.c:obc_session_shutdown() 0x822abb8
obexd/client/session.c:obc_session_ref() 0x822abb8: ref=3
obexd/client/session.c:obc_session_unref() 0x822abb8: ref=2
obexd/client/bluetooth.c:transport_connect() port 19
obexd/client/bluetooth.c:transport_callback()
obexd/client/session.c:transport_func()
obexd/client/bluetooth.c:bluetooth_getpacketopt()
obexd/client/pbap.c:pbap_probe() /org/bluez/obex/client/session1
obexd/client/session.c:obc_session_ref() 0x822abb8: ref=3
obexd/client/session.c:obc_session_register() Session(0x822abb8) registered /org/bluez/obex/client/session1
obexd/client/session.c:obc_session_unref() 0x822abb8: ref=2

To fix this the code now checks if the connect callback is pending, in
that case destroy the callback releasing the reference it carrying.
2015-09-14 10:12:30 +03:00
Luiz Augusto von Dentz
6339cced97 obexd: Fix possible crash while processing pending request
session_process_queue needs to be able to access the request .func in
case an error happen and it later calls pending_request_free so .process
shall not attempt to free the request otherwise it will cause crashes:

Invalid read of size 8
   at 0x4349D2: session_process_queue (session.c:857)
   by 0x434AC5: setpath_complete.isra.1 (session.c:1026)
   by 0x434B29: setpath_cb (session.c:1077)
   by 0x416448: handle_response (gobex.c:1128)
   by 0x41739D: incoming_data (gobex.c:1402)
   by 0x59747FA: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.4200.2)
   by 0x5974B97: ??? (in /usr/lib64/libglib-2.0.so.0.4200.2)
   by 0x5974EC1: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.4200.2)
   by 0x40E23F: main (main.c:322)
 Address 0x66e3d30 is 32 bytes inside a block of size 56 free'd
   at 0x4C2ACE9: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x597A50E: g_free (in /usr/lib64/libglib-2.0.so.0.4200.2)
   by 0x4345F5: pending_request_free (session.c:193)
   by 0x4348DF: session_process_setpath (session.c:1131)
   by 0x4349C9: session_process_queue (session.c:854)
   by 0x434AC5: setpath_complete.isra.1 (session.c:1026)
   by 0x434B29: setpath_cb (session.c:1077)
   by 0x416448: handle_response (gobex.c:1128)
   by 0x41739D: incoming_data (gobex.c:1402)
   by 0x59747FA: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.4200.2)
   by 0x5974B97: ??? (in /usr/lib64/libglib-2.0.so.0.4200.2)
   by 0x5974EC1: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.4200.2)
2015-07-21 14:55:49 +03:00
Marcel Holtmann
7a72ebec1c obexd: Fix cross includes from client and plugins 2015-03-01 01:38:12 -08:00
Marcel Holtmann
5d2afbddfd obexd: Fix includes for gobex.h header 2015-03-01 00:26:38 -08:00
Marcel Holtmann
a150d9e7c4 obexd: Fix includes for gdbus.h header 2015-03-01 00:19:28 -08:00
Marcel Holtmann
82113a16f3 obexd: Use local libbluetooth includes 2015-02-28 22:51:31 -08:00
Luiz Augusto von Dentz
c16acfd544 obexd/client: Add check for invalid path
This adds a check for invalid paths in obc_session_setpath.
2015-02-13 14:27:53 +02:00
Szymon Janc
a41df6489d obexd: List all enum values in switch
As described in coding style M10.
2014-12-08 14:00:28 +01:00
Andrei Emeltchenko
4900161462 obexd: Fix comparing array to NULL
An array can never be NULL.
2014-12-04 14:26:57 +02:00
Andrei Emeltchenko
33c2e6b851 obexd: Fix memory leak not freeing desc
descs->data might be NULL while is descs not. Follow scheme in
src/profile.c (in get_profile_version() function).
2014-12-04 14:26:57 +02:00
Luiz Augusto von Dentz
5bf03cc40d obexd/client: Add supported_features support
This adds supported_features support to obc_driver so driver can
provide this information when connecting.

This is required by PBAP 1.2 (page 48):

  'Mandatory if the PSE advertises a PbapSupportedFeatures attribute in
   its SDP record, else excluded.'
2014-12-02 11:36:01 +02:00
Luiz Augusto von Dentz
2eb84f94e0 obexd/client: Add UpdateVersion to PhonebookAccess
This adds UpdateVersion method to PhonebookAccess interface.
2014-12-02 11:36:01 +02:00
Luiz Augusto von Dentz
ee0a057f44 obexd/client: Add FixedImageSize property
This adds FixedImageSize property to PhonebookAccess interface.
2014-12-02 11:36:00 +02:00
Luiz Augusto von Dentz
fb9c29020f obexd/client: Add folder counters properties
This adds PrimaryCounter and SecondaryCounter properties to
PhonebookAccess interface.
2014-12-02 11:36:00 +02:00
Luiz Augusto von Dentz
5ee26d43c6 obexd/client: Add DatabaseIdentifier property
This adds DatabaseIdentifier property to PhonebookAccess interface.
2014-12-02 11:36:00 +02:00
Luiz Augusto von Dentz
f7a8cbd2a3 obexd/client: Add Folder property
This adds Folder property to PhonebookAccess interface.
2014-12-02 11:36:00 +02:00
Luiz Augusto von Dentz
3d88b8631f obexd/client: Parse PBAP record
This add parsing to PBAP record to extract version and supported
features.
2014-12-02 11:36:00 +02:00
Luiz Augusto von Dentz
51763c0e50 obexd/client: Add support for reading version
This adds support for reading profile version via
SDP_ATTR_PFILE_DESC_LIST
2014-12-02 11:35:59 +02:00
Rakesh M K
0a1d0e8968 obexd: Fix crash while session shutdown
g_str_equal has been used for the session path compare
which is not NULL-safe. Used the g_strcmp0() for the NULL-Safe
string comparision.

*#0 strcmp (p1=0x0, p2=0x7105c "/org/bluez/obex/client/session0")
*    at strcmp.c:38
*#1  0xb6e0cd0a in g_str_equal (v1=<value optimized out>,
*    v2=<value optimized out>) at ghash.c:1704
*#2  0x000264d8 in find_session (connection=<value optimized out>,
*    message=0x55b38, user_data=<value optimized out>)
*    at obexd/client/manager.c:162
*#3  remove_session (connection=<value optimized out>, message=0x55b38,
    user_data=<value optimized out>) at obexd/client/manager.c:231
2014-11-26 15:39:00 +02:00
Gowtham Anandha Babu
1c5f3cf0cf obexd/map: Add support for MAP feature bits
Handles MAP supported feature bits as per the
MAP 1.2 specs section 7.1.1.
2014-10-22 11:57:19 +03:00
Gowtham Anandha Babu
faba6c6e41 obexd/client/pbap: Add missing filter entries
Adds the following filter entries:
1) Speed-dial
2) Uniform Caller Identifier
3) Unique Identifier
2014-10-16 09:43:04 +02:00
Gowtham Anandha Babu
d0f7fd035f obexd/client/pbap: Add support for spd,fav
Add support for the speed-dial and favorite folders.
2014-10-16 09:43:04 +02:00
Gowtham Anandha Babu
7e03d3d92f obexd/client: Add support for MAP Event Report 1.1
This adds support for Event Report 1.1 of MAP 1.2 which includes the
following atributes: Subject, datetime, sender_name, priority.
2014-09-17 11:16:37 +03:00
Gowtham Anandha Babu
621861cd84 obexd/client/map: Check msg value is valid
Checks for NULL value before passing to the callback.
2014-09-16 10:19:03 +03:00
Luiz Augusto von Dentz
60ebd27931 obexd/mns: Check event value is valid
This adds a common check before passing the event value to the callback.
2014-09-15 14:50:39 +03:00
Luiz Augusto von Dentz
bb57098100 obexd/client: Fix leaking memory on MNS
In case an event is received twice, due to remote side misbehaving or
not, it would leak the previous data.
2014-09-15 14:50:39 +03:00
Luiz Augusto von Dentz
765fc36308 obexd/client: Fix crash while disconnecting
In case the transport is disconnected while disconnect command is pending
the session is freed on disconnect_complete but disconnect callback is
still valid causing the following crash:

Invalid read of size 4
   at 0x42682A: obc_session_ref (session.c:132)
   by 0x42797B: obc_session_shutdown (session.c:580)
   by 0x4139DA: incoming_data (gobex.c:1406)
   by 0x59712A5: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3800.2)
   by 0x5971627: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
   by 0x5971A39: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3800.2)
   by 0x40D78C: main (main.c:320)
 Address 0x728d814 is 4 bytes inside a block of size 120 free'd
   at 0x4C28577: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x5976F7E: g_free (in /usr/lib64/libglib-2.0.so.0.3800.2)
   by 0x4134B9: handle_response (gobex.c:1129)
   by 0x4139BD: incoming_data (gobex.c:1403)
   by 0x59712A5: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3800.2)
   by 0x5971627: ??? (in /usr/lib64/libglib-2.0.so.0.3800.2)
   by 0x5971A39: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3800.2)
   by 0x40D78C: main (main.c:320)
2014-08-29 10:32:26 +03:00
Luiz Augusto von Dentz
a3fd6fe629 obexd/client: Fix not being able to cancel a suspended transfer
If a transfer is suspended it should be resumed before cancelling
otherwise it will timeout.
2014-08-29 10:32:26 +03:00
Luiz Augusto von Dentz
ea2636c565 obexd/client: Allow suspending transfer while they are queued
Transfer may be created by different processes so it make sense to allow
them to be suspended even if they are not active.
2014-08-29 10:32:26 +03:00
Andrei Emeltchenko
be5df37961 obexd: Fix possible NULL dereference
Remove snprintf error check. Fixes clang warnings below:
...
obexd/client/map.c:471:9: warning: Access to field 'message' results in
a dereference of a null pointer (loaded from variable 'err')
                                                           err->message);
                                                           ^~~~~~~~~~~~
obexd/client/map.c:772:9: warning: Access to field 'message' results in
a dereference of a null pointer (loaded from variable 'err')
                                                           err->message);
                                                           ^~~~~~~~~~~~
...
2014-08-13 12:17:24 +03:00
Andrei Emeltchenko
f937ca0167 obexd: Fix memory leak
Fixes memory leak for message_listing_cb()
2014-08-04 09:10:57 +03:00
Andrei Emeltchenko
68fc5cb2bd obexd: Fix memory leak
Fixes memory leak for folder_listing_cb().
2014-08-04 09:10:55 +03:00
Luiz Augusto von Dentz
1d23383bfe obexd/client: Fix calling g_obex_cancel_req for completed requests
This leads to incorrect responses such as the following:

> ACL data: handle 12 flags 0x02 dlen 26
    L2CAP(d): cid 0x0041 len 22 [psm 3]
      RFCOMM(d): UIH: cr 0 dlci 38 pf 0 ilen 18 fcs 0xfd
        OBEX: Get rsp(f): status 200 len 18
        Status 200 = Success
        Connection ID (0xcb) = 1
        App. Parameters (0x4c) = Sequence length 4
        End of Body (0x49) = Sequence length 0
< ACL data: handle 12 flags 0x00 dlen 11
    L2CAP(d): cid 0x0040 len 7 [psm 3]
      RFCOMM(d): UIH: cr 1 dlci 38 pf 0 ilen 3 fcs 0x27
        OBEX: Get rsp(f): status 715 len 3
2014-04-08 16:27:49 +03:00
Luiz Augusto von Dentz
b35cdac7b1 obexd/client: Fix not sending OBEX Disconnect when disconnecting
Sending OBEX Disconnect command before disconnecting the transport is
mandatory.
2014-03-21 16:13:45 +02:00
Luiz Augusto von Dentz
3bf9192cf2 obexd/client: Fix not being able cancel GET requests
In case of GET operation the code does not use g_obex_get_req_pkt since
the beggining to be able to read the header from the first response, this
means that the request should be cancel with g_obex_cancel_req not with
g_obex_cancel_transfer.
2014-03-20 16:23:55 +02:00
Luiz Augusto von Dentz
d4390c088c obexd/transfer: Add Transfer.Resume method
This method can be used to resume ongoing transfers.
2014-02-20 12:45:59 +02:00
Luiz Augusto von Dentz
ff10649bd2 obexd/transfer: Add Transfer.Suspend method
This method can be used to suspend ongoing transfers.
2014-02-20 12:45:59 +02:00
Marcel Holtmann
8ed6c3815c obexd: Make btio/btio.h include local 2014-01-25 20:33:04 -08:00
Luiz Augusto von Dentz
b3b5fc6229 obexd/session: Fix crash when transport is disconnected
When transport is disconnected unexpectedly it can cause the following
crash:
gobex-DEBUG: gobex/gobex.c:g_obex_send_internal() The transport is not connected
Invalid read of size 8
   at 0x42662E: session_process_queue (session.c:789)
   by 0x42668F: session_process (session.c:719)
   by 0x3D46047E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x40D5FC: main (main.c:319)
 Address 0x5086760 is 32 bytes inside a block of size 56 free'd
   at 0x4A074C4: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x3D4604D9AE: g_free (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x426146: session_process_setpath (session.c:1063)
   by 0x426629: session_process_queue (session.c:786)
   by 0x42668F: session_process (session.c:719)
   by 0x3D46047E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x40D5FC: main (main.c:319)
2013-10-15 09:56:45 +03:00
Luiz Augusto von Dentz
a01efa88a7 obexd/MAP: Fix parsing message handles as decimal numbers
The spec clearly states the handles are hexadecimal:

MAP 1.2 - Page 29

  ""handle" is the message handle in hexadecimal representation with up
  to 16 digits; leading zero digits may be used so the MCE shall accept
  both handles with and without leading zeros (e.g.,"00000012345678AB"
  or "12345678AB")."
2013-10-09 17:37:44 +02:00
Luiz Augusto von Dentz
fd02ee7b32 obexd/MAP: Fix sending \0 after filler byte
It is not necessary to append \0 after the filler byte (0x30), the spec
just talk about the a byte not bytes.
2013-10-09 17:37:41 +02:00
Luiz Augusto von Dentz
ce3b7eab71 obexd/session: Fix crash while disconnecting
Requests need to be cancelled when obc_session_shutdown is called
otherwise they can trigger the callback with invalid/freed data as in
the following backtrace:
Invalid read of size 8
   at 0x426684: setpath_cb (session.c:998)
   by 0x412AEB: handle_response (gobex.c:949)
   by 0x413010: incoming_data (gobex.c:1192)
   by 0x3D46047E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x40D59C: main (main.c:319)
 Address 0x571f598 is 40 bytes inside a block of size 56 free'd
   at 0x4A074C4: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x3D4604D9AE: g_free (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x426EA9: obc_session_shutdown (session.c:555)
   by 0x4254B4: remove_session (manager.c:62)
   by 0x43DC53: process_message.isra.5 (object.c:259)
   by 0x3D4981CE85: ??? (in /usr/lib64/libdbus-1.so.3.7.4)
   by 0x3D4980FA30: dbus_connection_dispatch (in /usr/lib64/libdbus-1.so.3.7.4)
   by 0x43A9D7: message_dispatch (mainloop.c:76)
   by 0x3D46048962: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46047E05: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048157: ??? (in /usr/lib64/libglib-2.0.so.0.3600.3)
   by 0x3D46048559: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.3600.3)
2013-10-07 19:02:43 +03:00
Szymon Janc
15777b97b4 obexd/MAP: Fix protected property value
"Sent" flag value was returned instead of "Protected" one.
This also fix following build error:

  CC     obexd/client/obexd-map.o
obexd/client/map.c:711:17: error: ‘get_protected’ defined but not
    used [-Werror=unused-function]
cc1: all warnings being treated as errors
2013-10-04 14:10:33 +03:00
Szymon Janc
2acbd111a9 obexd/client: Remove unused static functions
This fix following build error:

  CC     obexd/client/obexd-dbus.o
obexd/client/dbus.c:70:13: error: ‘append_array_variant’ defined but
    not used [-Werror=unused-function]
obexd/client/dbus.c:97:13: error: ‘append_dict_variant’ defined but
    not used [-Werror=unused-function]
2013-10-04 14:10:33 +03:00
Szymon Janc
9cd1d095e2 client/transfer: Return "error" for unknown status in status2str
This can happen only if there is a bug in obexd code.
This fix following build error:

  CC     obexd/client/obexd-transfer.o
obexd/client/transfer.c: In function ‘status2str’:
obexd/client/transfer.c:277:1: error: control reaches end of non-void
    function [-Werror=return-type]
2013-10-04 14:10:33 +03:00
Szymon Janc
757e10de01 obexd/MAP: Fix missing include
This fix following build error:

  CC     obexd/client/obexd-map.o
obexd/client/map.c: In function ‘msg_element’:
obexd/client/map.c:1113:2: error: implicit declaration of function ‘strtoull’ [-Werror=implicit-function-declaration]
2013-10-04 14:10:33 +03:00
Szymon Janc
d606c25221 obexd/MAP: Remove unused mas_drivers variable
This fix following build error:

  CC     obexd/client/obexd-mns.o
obexd/client/mns.c:344:38: error: ‘mas_drivers’ defined but not used
    [-Werror=unused-variable]
cc1: all warnings being treated as errors
2013-10-04 14:10:33 +03:00