diff options
author | Juffin Alex Varghese <jalex@codeaurora.org> | 2015-01-30 18:57:11 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-03-03 15:05:02 -0800 |
commit | 39b40fa22cb25a9471d6ce51871338ee3df9499f (patch) | |
tree | e6953ded186cb353829f5a3d9000677382bbaa4d | |
parent | d9daafe18844b05a934b593021882b07a829ebda (diff) | |
download | android_packages_apps_Bluetooth-39b40fa22cb25a9471d6ce51871338ee3df9499f.tar.gz android_packages_apps_Bluetooth-39b40fa22cb25a9471d6ce51871338ee3df9499f.tar.bz2 android_packages_apps_Bluetooth-39b40fa22cb25a9471d6ce51871338ee3df9499f.zip |
Bluetooth-OPP: Check socket congestion status before writing the data
This change will ensure that data will be send to socket only after
congestion is cleared. Otherwise, if socket is already in congestion
and send the data before clearing, will cause transfer failure.
CRs-Fixed: 790313
Change-Id: I8847a9f3473d97cd6fadf24e293ac179418df457
-rw-r--r-- | src/com/android/bluetooth/opp/BluetoothOppObexClientSession.java | 14 | ||||
-rw-r--r-- | src/com/android/bluetooth/opp/BluetoothOppTransport.java | 15 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/com/android/bluetooth/opp/BluetoothOppObexClientSession.java b/src/com/android/bluetooth/opp/BluetoothOppObexClientSession.java index 6684b1fd7..0b480e70b 100644 --- a/src/com/android/bluetooth/opp/BluetoothOppObexClientSession.java +++ b/src/com/android/bluetooth/opp/BluetoothOppObexClientSession.java @@ -587,6 +587,20 @@ public class BluetoothOppObexClientSession implements BluetoothOppObexSession { } readLength = a.read(buffer, 0, outputBufferSize); + + while (true) { + int congStatus = ((BluetoothOppTransport)mTransport1).getSockCongStatus(); + if ((congStatus == 0) || (congStatus == -1)) { + break; + } + try { + Thread.sleep(5); + } catch (InterruptedException slpe) { + Log.v(TAG, "Interrupted while checking the socket congestion evt"); + break; + } + } + int writtenLength = 0; while (writtenLength != readLength) { //SET MTU SIZE BEFORE WRITE diff --git a/src/com/android/bluetooth/opp/BluetoothOppTransport.java b/src/com/android/bluetooth/opp/BluetoothOppTransport.java index 25c66fc7e..0615c1899 100644 --- a/src/com/android/bluetooth/opp/BluetoothOppTransport.java +++ b/src/com/android/bluetooth/opp/BluetoothOppTransport.java @@ -99,6 +99,21 @@ public class BluetoothOppTransport implements ObexTransport { return status; } + /** + * Returns the Congestion status of the Socket + */ + public int getSockCongStatus() { + ByteBuffer bb = ByteBuffer.allocate(4); + bb.order(ByteOrder.LITTLE_ENDIAN); + int status; + try { + status = mSocket.getSocketOpt(5, bb.array()); + } catch (IOException ex) { + return -1; + } + return bb.getInt(); + } + public void connect() throws IOException { } |