Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c887b84 authored by Juffin Alex Varghese's avatar Juffin Alex Varghese Committed by Gerrit Code Review
Browse files

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
parent ffabe89c
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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
+15 −0
Original line number Diff line number Diff line
@@ -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 {
    }