summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuffin Alex Varghese <jalex@codeaurora.org>2015-01-30 18:57:11 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2015-03-03 15:05:02 -0800
commit39b40fa22cb25a9471d6ce51871338ee3df9499f (patch)
treee6953ded186cb353829f5a3d9000677382bbaa4d
parentd9daafe18844b05a934b593021882b07a829ebda (diff)
downloadandroid_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.java14
-rw-r--r--src/com/android/bluetooth/opp/BluetoothOppTransport.java15
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 {
}