Fix Bluez5 FullDiscovery SDP scan
authorAlex Blasche <alexander.blasche@digia.com>
Wed, 20 Aug 2014 12:24:40 +0000 (14:24 +0200)
committerAlex Blasche <alexander.blasche@digia.com>
Mon, 25 Aug 2014 13:02:17 +0000 (15:02 +0200)
commit2b5027a808e4cf525926058542786167dfed24ea
tree3d2c5e25298e976ad9a62be8ad7856907af7edad
parent0a8327d422228489a62aa8fed8bdaa9d1291c055
Fix Bluez5 FullDiscovery SDP scan

Several bugs prevented QBLuetoothServiceDiscoveryAgent from properly
working on Bluez5

1.) If parseSDPRecord returned an empty QByteArray we continued the
parse loop without further advancing the sdpResult list.

2.) Each sdp result was individually base64 encoded but the library
side decoded the entire list of items in one go. The item separation
gets lost during the transfer. As a result only every second item was
properly decoded. Therefore only every second sdp record was properly
recognized. Now we encode the entire result and transfer it in one go.

3.) Don't separate the xml items based on their size anymore. Although
this is possibly slower it is a lot simpler to understand
and debug. In combination with the above two problems the previous
pointer based logic was leading to crashes too.

4.) QProcess::readAll() seems to loose data when the process
finished and the output was very large. After this patch we start
reading right after the start of the sdpscanner.

Change-Id: I84a0be9d68e86c851945751c576a3ccf755db883
Reviewed-by: Aaron McCarthy <mccarthy.aaron@gmail.com>
src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp
src/tools/sdpscanner/main.cpp