diff --git a/dom/bluetooth/BluetoothOppManager.cpp b/dom/bluetooth/BluetoothOppManager.cpp index 7bd69fb8d45f..6af07e9d46d1 100644 --- a/dom/bluetooth/BluetoothOppManager.cpp +++ b/dom/bluetooth/BluetoothOppManager.cpp @@ -333,6 +333,7 @@ BluetoothOppManager::SendFile(BlobParent* aActor) } SendConnectRequest(); + mTransferMode = false; return true; } @@ -379,6 +380,7 @@ BluetoothOppManager::AfterOppConnected() sSentFileLength = 0; mReceivedDataBufferOffset = 0; mAbortFlag = false; + mSuccessFlag = false; mWaitingForConfirmationFlag = true; } @@ -391,6 +393,10 @@ BluetoothOppManager::AfterOppDisconnected() mLastCommand = 0; mBlob = nullptr; + // We can't reset mSuccessFlag here since this function may be called + // before we send system message of transfer complete + // mSuccessFlag = false; + if (mInputStream) { mInputStream->Close(); mInputStream = nullptr; @@ -608,8 +614,6 @@ BluetoothOppManager::ReceiveSocketData(UnixSocketRawData* aMessage) SendDisconnectRequest(); } else { // Remote request or unknown mLastCommand - mTransferMode = true; - mSuccessFlag = false; ObexHeaderSet pktHeaders(opCode); if (opCode == ObexRequestCode::Connect) { @@ -621,6 +625,7 @@ BluetoothOppManager::ReceiveSocketData(UnixSocketRawData* aMessage) &pktHeaders); ReplyToConnect(); AfterOppConnected(); + mTransferMode = true; } else if (opCode == ObexRequestCode::Disconnect) { // Section 3.3.2 "Disconnect", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] @@ -739,8 +744,6 @@ BluetoothOppManager::SendConnectRequest() index += AppendHeaderConnectionId(&req[index], mConnectionId); SetObexPacketInfo(req, ObexRequestCode::Connect, index); mLastCommand = ObexRequestCode::Connect; - mTransferMode = false; - mSuccessFlag = false; UnixSocketRawData* s = new UnixSocketRawData(index); memcpy(s->mData, req, s->mSize); @@ -1109,4 +1112,5 @@ BluetoothOppManager::OnDisconnect() // call AfterOppDisconnected here to ensure all variables will be cleaned. AfterOppDisconnected(); mConnectedDeviceAddress.AssignLiteral("00:00:00:00:00:00"); + mSuccessFlag = false; }