component/bt: Change the fragement method to avoid crash when the data transmit should fragement.

This commit is contained in:
Yulong 2017-05-25 09:59:03 -04:00
parent 2aadbee43c
commit 81ff34742b
2 changed files with 4 additions and 6 deletions

View file

@ -26,7 +26,7 @@
#include "hash_map.h" #include "hash_map.h"
#include "hash_functions.h" #include "hash_functions.h"
#include "bt_trace.h"
#define APPLY_CONTINUATION_FLAG(handle) (((handle) & 0xCFFF) | 0x1000) #define APPLY_CONTINUATION_FLAG(handle) (((handle) & 0xCFFF) | 0x1000)
@ -91,12 +91,11 @@ static void fragment_and_dispatch(BT_HDR *packet)
max_packet_size = max_data_size + HCI_ACL_PREAMBLE_SIZE; max_packet_size = max_data_size + HCI_ACL_PREAMBLE_SIZE;
remaining_length = packet->len; remaining_length = packet->len;
STREAM_TO_UINT16(continuation_handle, stream); STREAM_TO_UINT16(continuation_handle, stream);
continuation_handle = APPLY_CONTINUATION_FLAG(continuation_handle); continuation_handle = APPLY_CONTINUATION_FLAG(continuation_handle);
if (remaining_length > max_packet_size) { if (remaining_length > max_data_size) {
current_fragment_packet = packet; current_fragment_packet = packet;
UINT16_TO_STREAM(stream, max_packet_size); UINT16_TO_STREAM(stream, max_data_size);
packet->len = max_packet_size; packet->len = max_packet_size;
callbacks->fragmented(packet, false); callbacks->fragmented(packet, false);
packet->offset += max_data_size; packet->offset += max_data_size;
@ -107,7 +106,6 @@ static void fragment_and_dispatch(BT_HDR *packet)
stream = packet->data + packet->offset; stream = packet->data + packet->offset;
UINT16_TO_STREAM(stream, continuation_handle); UINT16_TO_STREAM(stream, continuation_handle);
UINT16_TO_STREAM(stream, remaining_length - HCI_ACL_PREAMBLE_SIZE); UINT16_TO_STREAM(stream, remaining_length - HCI_ACL_PREAMBLE_SIZE);
// Apparently L2CAP can set layer_specific to a max number of segments to transmit // Apparently L2CAP can set layer_specific to a max number of segments to transmit
if (packet->layer_specific) { if (packet->layer_specific) {
packet->layer_specific--; packet->layer_specific--;

View file

@ -54,7 +54,7 @@ inline void trc_dump_buffer(const char *prefix, uint8_t *data, uint16_t len)
} }
#ifdef BTTRC_DUMP_BUFFER #ifdef BTTRC_DUMP_BUFFER
#define BTTRC_DUMP_BUFFER(_prefix, _data, _len) trc_dump_buffer(_data, _len) #define BTTRC_DUMP_BUFFER(_prefix, _data, _len) trc_dump_buffer(_prefix, _data, _len)
#else #else
#define BTTRC_DUMP_BUFFER(_prefix, _data, _len) #define BTTRC_DUMP_BUFFER(_prefix, _data, _len)
#endif #endif