☠☠ backed out by 927da4815ef9 ☠ ☠ | |
author | Thomas Zimmermann <tdz@users.sourceforge.net> |
Wed, 03 Sep 2014 16:43:14 +0200 | |
changeset 203372 | f991f546dbcdc00086d3cebbbd7a06232204e088 |
parent 203371 | ab4056a1aa06d05695a4ecfff2ee7d0356fa3cff |
child 203373 | cffeecd46cade055f3762b4a9ab2fb0bbe34ce70 |
push id | 48665 |
push user | ryanvm@gmail.com |
push date | Wed, 03 Sep 2014 20:40:15 +0000 |
treeherder | mozilla-inbound@0da762e6868a [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | btian |
bugs | 1059813 |
milestone | 35.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/bluetooth/bluedroid/BluetoothOppManager.cpp +++ b/dom/bluetooth/bluedroid/BluetoothOppManager.cpp @@ -746,107 +746,110 @@ BluetoothOppManager::ValidateFileName() } bool BluetoothOppManager::ComposePacket(uint8_t aOpCode, UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aMessage); + const uint8_t* data = aMessage->GetData(); int frameHeaderLength = 0; // See if this is the first part of each Put packet if (mPutPacketReceivedLength == 0) { // Section 3.3.3 "Put", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] frameHeaderLength = 3; - mPacketLength = ((((int)aMessage->mData[1]) << 8) | aMessage->mData[2]) - - frameHeaderLength; + mPacketLength = ((static_cast<int>(data[1]) << 8) | data[2]) - + frameHeaderLength; + /** * A PUT request from remote devices may be divided into multiple parts. * In other words, one request may need to be received multiple times, * so here we keep a variable mPutPacketReceivedLength to indicate if * current PUT request is done. */ mReceivedDataBuffer = new uint8_t[mPacketLength]; mPutFinalFlag = (aOpCode == ObexRequestCode::PutFinal); } - int dataLength = aMessage->mSize - frameHeaderLength; + int dataLength = aMessage->GetSize() - frameHeaderLength; // Check length before memcpy to prevent from memory pollution if (dataLength < 0 || mPutPacketReceivedLength + dataLength > mPacketLength) { BT_LOGR("Received packet size is unreasonable"); ReplyToPut(mPutFinalFlag, false); DeleteReceivedFile(); FileTransferComplete(); return false; } memcpy(mReceivedDataBuffer.get() + mPutPacketReceivedLength, - &aMessage->mData[frameHeaderLength], dataLength); + &data[frameHeaderLength], dataLength); mPutPacketReceivedLength += dataLength; return (mPutPacketReceivedLength == mPacketLength); } void BluetoothOppManager::ServerDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); uint8_t opCode; - int receivedLength = aMessage->mSize; + int receivedLength = aMessage->GetSize(); + const uint8_t* data = aMessage->GetData(); if (mPutPacketReceivedLength > 0) { opCode = mPutFinalFlag ? ObexRequestCode::PutFinal : ObexRequestCode::Put; } else { - opCode = aMessage->mData[0]; + opCode = data[0]; // When there's a Put packet right after a PutFinal packet, // which means it's the start point of a new file. if (mPutFinalFlag && (opCode == ObexRequestCode::Put || opCode == ObexRequestCode::PutFinal)) { mNewFileFlag = true; AfterFirstPut(); } } ObexHeaderSet pktHeaders(opCode); if (opCode == ObexRequestCode::Connect) { // Section 3.3.1 "Connect", IrOBEX 1.2 // [opcode:1][length:2][version:1][flags:1][MaxPktSizeWeCanReceive:2] // [Headers:var] - if (!ParseHeaders(&aMessage->mData[7], receivedLength - 7, &pktHeaders)) { + if (!ParseHeaders(&data[7], receivedLength - 7, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToConnect(); AfterOppConnected(); } else if (opCode == ObexRequestCode::Abort) { // Section 3.3.5 "Abort", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); DeleteReceivedFile(); } else if (opCode == ObexRequestCode::Disconnect) { // Section 3.3.2 "Disconnect", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); AfterOppDisconnected(); FileTransferComplete(); } else if (opCode == ObexRequestCode::Put || @@ -919,17 +922,18 @@ BluetoothOppManager::ServerDataHandler(U } } void BluetoothOppManager::ClientDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); - uint8_t opCode = aMessage->mData[0]; + const uint8_t* data = aMessage->GetData(); + uint8_t opCode = data[0]; // Check response code and send out system message as finished if the response // code is somehow incorrect. uint8_t expectedOpCode = ObexResponseCode::Success; if (mLastCommand == ObexRequestCode::Put) { expectedOpCode = ObexResponseCode::Continue; } @@ -976,20 +980,19 @@ BluetoothOppManager::ClientDataHandler(U } } else if (mLastCommand == ObexRequestCode::Connect) { MOZ_ASSERT(!mFileName.IsEmpty()); MOZ_ASSERT(mBlob); AfterOppConnected(); // Keep remote information - mRemoteObexVersion = aMessage->mData[3]; - mRemoteConnectionFlags = aMessage->mData[4]; - mRemoteMaxPacketLength = - (((int)(aMessage->mData[5]) << 8) | aMessage->mData[6]); + mRemoteObexVersion = data[3]; + mRemoteConnectionFlags = data[4]; + mRemoteMaxPacketLength = ((static_cast<int>(data[5]) << 8) | data[6]); // The length of file name exceeds maximum length. int fileNameByteLen = (mFileName.Length() + 1) * 2; int headerLen = kPutRequestHeaderSize + kPutRequestAppendHeaderSize; if (fileNameByteLen > mRemoteMaxPacketLength - headerLen) { BT_WARNING("The length of file name is aberrant."); SendDisconnectRequest(); return; @@ -1248,18 +1251,17 @@ void BluetoothOppManager::SendObexData(uint8_t* aData, uint8_t aOpcode, int aSize) { SetObexPacketInfo(aData, aOpcode, aSize); if (!mIsServer) { mLastCommand = aOpcode; } - UnixSocketRawData* s = new UnixSocketRawData(aSize); - memcpy(s->mData, aData, s->mSize); + UnixSocketRawData* s = new UnixSocketRawData(aData, aSize); mSocket->SendSocketData(s); } void BluetoothOppManager::FileTransferComplete() { if (mSendTransferCompleteFlag) { return;
--- a/dom/bluetooth/bluez/BluetoothHfpManager.cpp +++ b/dom/bluetooth/bluez/BluetoothHfpManager.cpp @@ -702,17 +702,18 @@ BluetoothHfpManager::HandleShutdown() // Virtual function of class SocketConsumer void BluetoothHfpManager::ReceiveSocketData(BluetoothSocket* aSocket, nsAutoPtr<UnixSocketRawData>& aMessage) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aSocket); - nsAutoCString msg((const char*)aMessage->mData.get(), aMessage->mSize); + nsAutoCString msg(reinterpret_cast<const char*>(aMessage->GetData()), + aMessage->GetSize()); msg.StripWhitespace(); nsTArray<nsCString> atCommandValues; // For more information, please refer to 4.34.1 "Bluetooth Defined AT // Capabilities" in Bluetooth hands-free profile 1.6 if (msg.Find("AT+BRSF=") != -1) { #ifdef MOZ_B2G_RIL
--- a/dom/bluetooth/bluez/BluetoothOppManager.cpp +++ b/dom/bluetooth/bluez/BluetoothOppManager.cpp @@ -769,106 +769,108 @@ BluetoothOppManager::ValidateFileName() bool BluetoothOppManager::ComposePacket(uint8_t aOpCode, UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aMessage); int frameHeaderLength = 0; + const uint8_t* data = aMessage->GetData(); // See if this is the first part of each Put packet if (mPutPacketReceivedLength == 0) { // Section 3.3.3 "Put", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] frameHeaderLength = 3; - mPacketLength = ((((int)aMessage->mData[1]) << 8) | aMessage->mData[2]) - - frameHeaderLength; + mPacketLength = ((static_cast<int>(data[1]) << 8) | data[2]) - + frameHeaderLength; /** * A PUT request from remote devices may be divided into multiple parts. * In other words, one request may need to be received multiple times, * so here we keep a variable mPutPacketReceivedLength to indicate if * current PUT request is done. */ mReceivedDataBuffer = new uint8_t[mPacketLength]; mPutFinalFlag = (aOpCode == ObexRequestCode::PutFinal); } - int dataLength = aMessage->mSize - frameHeaderLength; + int dataLength = aMessage->GetSize() - frameHeaderLength; // Check length before memcpy to prevent from memory pollution if (dataLength < 0 || mPutPacketReceivedLength + dataLength > mPacketLength) { BT_LOGR("Received packet size is unreasonable"); ReplyToPut(mPutFinalFlag, false); DeleteReceivedFile(); FileTransferComplete(); return false; } memcpy(mReceivedDataBuffer.get() + mPutPacketReceivedLength, - &aMessage->mData[frameHeaderLength], dataLength); + &data[frameHeaderLength], dataLength); mPutPacketReceivedLength += dataLength; return (mPutPacketReceivedLength == mPacketLength); } void BluetoothOppManager::ServerDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); uint8_t opCode; - int receivedLength = aMessage->mSize; + int receivedLength = aMessage->GetSize(); + const uint8_t* data = aMessage->GetData(); if (mPutPacketReceivedLength > 0) { opCode = mPutFinalFlag ? ObexRequestCode::PutFinal : ObexRequestCode::Put; } else { - opCode = aMessage->mData[0]; + opCode = data[0]; // When there's a Put packet right after a PutFinal packet, // which means it's the start point of a new file. if (mPutFinalFlag && (opCode == ObexRequestCode::Put || opCode == ObexRequestCode::PutFinal)) { mNewFileFlag = true; AfterFirstPut(); } } ObexHeaderSet pktHeaders(opCode); if (opCode == ObexRequestCode::Connect) { // Section 3.3.1 "Connect", IrOBEX 1.2 // [opcode:1][length:2][version:1][flags:1][MaxPktSizeWeCanReceive:2] // [Headers:var] - if (!ParseHeaders(&aMessage->mData[7], receivedLength - 7, &pktHeaders)) { + if (!ParseHeaders(&data[7], receivedLength - 7, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToConnect(); AfterOppConnected(); } else if (opCode == ObexRequestCode::Abort) { // Section 3.3.5 "Abort", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); DeleteReceivedFile(); } else if (opCode == ObexRequestCode::Disconnect) { // Section 3.3.2 "Disconnect", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); AfterOppDisconnected(); FileTransferComplete(); } else if (opCode == ObexRequestCode::Put || @@ -941,17 +943,18 @@ BluetoothOppManager::ServerDataHandler(U } } void BluetoothOppManager::ClientDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); - uint8_t opCode = aMessage->mData[0]; + const uint8_t* data = aMessage->GetData(); + uint8_t opCode = data[0]; // Check response code and send out system message as finished if the response // code is somehow incorrect. uint8_t expectedOpCode = ObexResponseCode::Success; if (mLastCommand == ObexRequestCode::Put) { expectedOpCode = ObexResponseCode::Continue; } @@ -998,20 +1001,19 @@ BluetoothOppManager::ClientDataHandler(U } } else if (mLastCommand == ObexRequestCode::Connect) { MOZ_ASSERT(!mFileName.IsEmpty()); MOZ_ASSERT(mBlob); AfterOppConnected(); // Keep remote information - mRemoteObexVersion = aMessage->mData[3]; - mRemoteConnectionFlags = aMessage->mData[4]; - mRemoteMaxPacketLength = - (((int)(aMessage->mData[5]) << 8) | aMessage->mData[6]); + mRemoteObexVersion = data[3]; + mRemoteConnectionFlags = data[4]; + mRemoteMaxPacketLength = (static_cast<int>(data[5]) << 8) | data[6]; // The length of file name exceeds maximum length. int fileNameByteLen = (mFileName.Length() + 1) * 2; int headerLen = kPutRequestHeaderSize + kPutRequestAppendHeaderSize; if (fileNameByteLen > mRemoteMaxPacketLength - headerLen) { BT_WARNING("The length of file name is aberrant."); SendDisconnectRequest(); return; @@ -1269,18 +1271,17 @@ void BluetoothOppManager::SendObexData(uint8_t* aData, uint8_t aOpcode, int aSize) { SetObexPacketInfo(aData, aOpcode, aSize); if (!mIsServer) { mLastCommand = aOpcode; } - UnixSocketRawData* s = new UnixSocketRawData(aSize); - memcpy(s->mData, aData, s->mSize); + UnixSocketRawData* s = new UnixSocketRawData(aData, aSize); mSocket->SendSocketData(s); } void BluetoothOppManager::FileTransferComplete() { if (mSendTransferCompleteFlag) { return;
--- a/dom/bluetooth2/bluedroid/BluetoothOppManager.cpp +++ b/dom/bluetooth2/bluedroid/BluetoothOppManager.cpp @@ -746,107 +746,110 @@ BluetoothOppManager::ValidateFileName() } bool BluetoothOppManager::ComposePacket(uint8_t aOpCode, UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aMessage); + const uint8_t* data = aMessage->GetData(); int frameHeaderLength = 0; // See if this is the first part of each Put packet if (mPutPacketReceivedLength == 0) { // Section 3.3.3 "Put", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] frameHeaderLength = 3; - mPacketLength = ((((int)aMessage->mData[1]) << 8) | aMessage->mData[2]) - - frameHeaderLength; + mPacketLength = ((static_cast<int>(data[1]) << 8) | data[2]) - + frameHeaderLength; + /** * A PUT request from remote devices may be divided into multiple parts. * In other words, one request may need to be received multiple times, * so here we keep a variable mPutPacketReceivedLength to indicate if * current PUT request is done. */ mReceivedDataBuffer = new uint8_t[mPacketLength]; mPutFinalFlag = (aOpCode == ObexRequestCode::PutFinal); } - int dataLength = aMessage->mSize - frameHeaderLength; + int dataLength = aMessage->GetSize() - frameHeaderLength; // Check length before memcpy to prevent from memory pollution if (dataLength < 0 || mPutPacketReceivedLength + dataLength > mPacketLength) { BT_LOGR("Received packet size is unreasonable"); ReplyToPut(mPutFinalFlag, false); DeleteReceivedFile(); FileTransferComplete(); return false; } memcpy(mReceivedDataBuffer.get() + mPutPacketReceivedLength, - &aMessage->mData[frameHeaderLength], dataLength); + &data[frameHeaderLength], dataLength); mPutPacketReceivedLength += dataLength; return (mPutPacketReceivedLength == mPacketLength); } void BluetoothOppManager::ServerDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); uint8_t opCode; - int receivedLength = aMessage->mSize; + int receivedLength = aMessage->GetSize(); + const uint8_t* data = aMessage->GetData(); if (mPutPacketReceivedLength > 0) { opCode = mPutFinalFlag ? ObexRequestCode::PutFinal : ObexRequestCode::Put; } else { - opCode = aMessage->mData[0]; + opCode = data[0]; // When there's a Put packet right after a PutFinal packet, // which means it's the start point of a new file. if (mPutFinalFlag && (opCode == ObexRequestCode::Put || opCode == ObexRequestCode::PutFinal)) { mNewFileFlag = true; AfterFirstPut(); } } ObexHeaderSet pktHeaders(opCode); if (opCode == ObexRequestCode::Connect) { // Section 3.3.1 "Connect", IrOBEX 1.2 // [opcode:1][length:2][version:1][flags:1][MaxPktSizeWeCanReceive:2] // [Headers:var] - if (!ParseHeaders(&aMessage->mData[7], receivedLength - 7, &pktHeaders)) { + if (!ParseHeaders(&data[7], receivedLength - 7, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToConnect(); AfterOppConnected(); } else if (opCode == ObexRequestCode::Abort) { // Section 3.3.5 "Abort", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); DeleteReceivedFile(); } else if (opCode == ObexRequestCode::Disconnect) { // Section 3.3.2 "Disconnect", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); AfterOppDisconnected(); FileTransferComplete(); } else if (opCode == ObexRequestCode::Put || @@ -919,17 +922,18 @@ BluetoothOppManager::ServerDataHandler(U } } void BluetoothOppManager::ClientDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); - uint8_t opCode = aMessage->mData[0]; + const uint8_t* data = aMessage->GetData(); + uint8_t opCode = data[0]; // Check response code and send out system message as finished if the response // code is somehow incorrect. uint8_t expectedOpCode = ObexResponseCode::Success; if (mLastCommand == ObexRequestCode::Put) { expectedOpCode = ObexResponseCode::Continue; } @@ -976,20 +980,19 @@ BluetoothOppManager::ClientDataHandler(U } } else if (mLastCommand == ObexRequestCode::Connect) { MOZ_ASSERT(!mFileName.IsEmpty()); MOZ_ASSERT(mBlob); AfterOppConnected(); // Keep remote information - mRemoteObexVersion = aMessage->mData[3]; - mRemoteConnectionFlags = aMessage->mData[4]; - mRemoteMaxPacketLength = - (((int)(aMessage->mData[5]) << 8) | aMessage->mData[6]); + mRemoteObexVersion = data[3]; + mRemoteConnectionFlags = data[4]; + mRemoteMaxPacketLength = ((static_cast<int>(data[5]) << 8) | data[6]); // The length of file name exceeds maximum length. int fileNameByteLen = (mFileName.Length() + 1) * 2; int headerLen = kPutRequestHeaderSize + kPutRequestAppendHeaderSize; if (fileNameByteLen > mRemoteMaxPacketLength - headerLen) { BT_WARNING("The length of file name is aberrant."); SendDisconnectRequest(); return; @@ -1248,18 +1251,17 @@ void BluetoothOppManager::SendObexData(uint8_t* aData, uint8_t aOpcode, int aSize) { SetObexPacketInfo(aData, aOpcode, aSize); if (!mIsServer) { mLastCommand = aOpcode; } - UnixSocketRawData* s = new UnixSocketRawData(aSize); - memcpy(s->mData, aData, s->mSize); + UnixSocketRawData* s = new UnixSocketRawData(aData, aSize); mSocket->SendSocketData(s); } void BluetoothOppManager::FileTransferComplete() { if (mSendTransferCompleteFlag) { return;
--- a/dom/bluetooth2/bluez/BluetoothHfpManager.cpp +++ b/dom/bluetooth2/bluez/BluetoothHfpManager.cpp @@ -702,17 +702,18 @@ BluetoothHfpManager::HandleShutdown() // Virtual function of class SocketConsumer void BluetoothHfpManager::ReceiveSocketData(BluetoothSocket* aSocket, nsAutoPtr<UnixSocketRawData>& aMessage) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aSocket); - nsAutoCString msg((const char*)aMessage->mData.get(), aMessage->mSize); + nsAutoCString msg(reinterpret_cast<const char*>(aMessage->GetData()), + aMessage->GetSize()); msg.StripWhitespace(); nsTArray<nsCString> atCommandValues; // For more information, please refer to 4.34.1 "Bluetooth Defined AT // Capabilities" in Bluetooth hands-free profile 1.6 if (msg.Find("AT+BRSF=") != -1) { #ifdef MOZ_B2G_RIL
--- a/dom/bluetooth2/bluez/BluetoothOppManager.cpp +++ b/dom/bluetooth2/bluez/BluetoothOppManager.cpp @@ -769,106 +769,108 @@ BluetoothOppManager::ValidateFileName() bool BluetoothOppManager::ComposePacket(uint8_t aOpCode, UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(aMessage); int frameHeaderLength = 0; + const uint8_t* data = aMessage->GetData(); // See if this is the first part of each Put packet if (mPutPacketReceivedLength == 0) { // Section 3.3.3 "Put", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] frameHeaderLength = 3; - mPacketLength = ((((int)aMessage->mData[1]) << 8) | aMessage->mData[2]) - - frameHeaderLength; + mPacketLength = ((static_cast<int>(data[1]) << 8) | data[2]) - + frameHeaderLength; /** * A PUT request from remote devices may be divided into multiple parts. * In other words, one request may need to be received multiple times, * so here we keep a variable mPutPacketReceivedLength to indicate if * current PUT request is done. */ mReceivedDataBuffer = new uint8_t[mPacketLength]; mPutFinalFlag = (aOpCode == ObexRequestCode::PutFinal); } - int dataLength = aMessage->mSize - frameHeaderLength; + int dataLength = aMessage->GetSize() - frameHeaderLength; // Check length before memcpy to prevent from memory pollution if (dataLength < 0 || mPutPacketReceivedLength + dataLength > mPacketLength) { BT_LOGR("Received packet size is unreasonable"); ReplyToPut(mPutFinalFlag, false); DeleteReceivedFile(); FileTransferComplete(); return false; } memcpy(mReceivedDataBuffer.get() + mPutPacketReceivedLength, - &aMessage->mData[frameHeaderLength], dataLength); + &data[frameHeaderLength], dataLength); mPutPacketReceivedLength += dataLength; return (mPutPacketReceivedLength == mPacketLength); } void BluetoothOppManager::ServerDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); uint8_t opCode; - int receivedLength = aMessage->mSize; + int receivedLength = aMessage->GetSize(); + const uint8_t* data = aMessage->GetData(); if (mPutPacketReceivedLength > 0) { opCode = mPutFinalFlag ? ObexRequestCode::PutFinal : ObexRequestCode::Put; } else { - opCode = aMessage->mData[0]; + opCode = data[0]; // When there's a Put packet right after a PutFinal packet, // which means it's the start point of a new file. if (mPutFinalFlag && (opCode == ObexRequestCode::Put || opCode == ObexRequestCode::PutFinal)) { mNewFileFlag = true; AfterFirstPut(); } } ObexHeaderSet pktHeaders(opCode); if (opCode == ObexRequestCode::Connect) { // Section 3.3.1 "Connect", IrOBEX 1.2 // [opcode:1][length:2][version:1][flags:1][MaxPktSizeWeCanReceive:2] // [Headers:var] - if (!ParseHeaders(&aMessage->mData[7], receivedLength - 7, &pktHeaders)) { + if (!ParseHeaders(&data[7], receivedLength - 7, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToConnect(); AfterOppConnected(); } else if (opCode == ObexRequestCode::Abort) { // Section 3.3.5 "Abort", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); DeleteReceivedFile(); } else if (opCode == ObexRequestCode::Disconnect) { // Section 3.3.2 "Disconnect", IrOBEX 1.2 // [opcode:1][length:2][Headers:var] - if (!ParseHeaders(&aMessage->mData[3], receivedLength - 3, &pktHeaders)) { + if (!ParseHeaders(&data[3], receivedLength - 3, &pktHeaders)) { ReplyError(ObexResponseCode::BadRequest); return; } ReplyToDisconnectOrAbort(); AfterOppDisconnected(); FileTransferComplete(); } else if (opCode == ObexRequestCode::Put || @@ -941,17 +943,18 @@ BluetoothOppManager::ServerDataHandler(U } } void BluetoothOppManager::ClientDataHandler(UnixSocketRawData* aMessage) { MOZ_ASSERT(NS_IsMainThread()); - uint8_t opCode = aMessage->mData[0]; + const uint8_t* data = aMessage->GetData(); + uint8_t opCode = data[0]; // Check response code and send out system message as finished if the response // code is somehow incorrect. uint8_t expectedOpCode = ObexResponseCode::Success; if (mLastCommand == ObexRequestCode::Put) { expectedOpCode = ObexResponseCode::Continue; } @@ -998,20 +1001,19 @@ BluetoothOppManager::ClientDataHandler(U } } else if (mLastCommand == ObexRequestCode::Connect) { MOZ_ASSERT(!mFileName.IsEmpty()); MOZ_ASSERT(mBlob); AfterOppConnected(); // Keep remote information - mRemoteObexVersion = aMessage->mData[3]; - mRemoteConnectionFlags = aMessage->mData[4]; - mRemoteMaxPacketLength = - (((int)(aMessage->mData[5]) << 8) | aMessage->mData[6]); + mRemoteObexVersion = data[3]; + mRemoteConnectionFlags = data[4]; + mRemoteMaxPacketLength = (static_cast<int>(data[5]) << 8) | data[6]; // The length of file name exceeds maximum length. int fileNameByteLen = (mFileName.Length() + 1) * 2; int headerLen = kPutRequestHeaderSize + kPutRequestAppendHeaderSize; if (fileNameByteLen > mRemoteMaxPacketLength - headerLen) { BT_WARNING("The length of file name is aberrant."); SendDisconnectRequest(); return; @@ -1269,18 +1271,17 @@ void BluetoothOppManager::SendObexData(uint8_t* aData, uint8_t aOpcode, int aSize) { SetObexPacketInfo(aData, aOpcode, aSize); if (!mIsServer) { mLastCommand = aOpcode; } - UnixSocketRawData* s = new UnixSocketRawData(aSize); - memcpy(s->mData, aData, s->mSize); + UnixSocketRawData* s = new UnixSocketRawData(aData, aSize); mSocket->SendSocketData(s); } void BluetoothOppManager::FileTransferComplete() { if (mSendTransferCompleteFlag) { return;