diff --git a/include/btstack/hci_cmds.h b/include/btstack/hci_cmds.h index cee6138d7..ffcf8bea7 100644 --- a/include/btstack/hci_cmds.h +++ b/include/btstack/hci_cmds.h @@ -478,6 +478,7 @@ extern "C" { #define RFCOMM_CHANNEL_ALREADY_REGISTERED 0x71 #define RFCOMM_NO_OUTGOING_CREDITS 0x72 #define RFCOMM_AGGREGATE_FLOW_OFF 0x73 +#define RFCOMM_DATA_LEN_EXCEEDS_MTU 0x74 #define SDP_HANDLE_ALREADY_REGISTERED 0x80 #define SDP_QUERY_INCOMPLETE 0x81 diff --git a/src/rfcomm.c b/src/rfcomm.c index 4f5673331..8b7a0ca84 100644 --- a/src/rfcomm.c +++ b/src/rfcomm.c @@ -2008,6 +2008,11 @@ int rfcomm_send_internal(uint16_t rfcomm_cid, uint8_t *data, uint16_t len){ log_error("rfcomm_send_internal cid 0x%02x doesn't exist!", rfcomm_cid); return 1; } + + if (len > channel->max_frame_size){ + log_error("rfcomm_send_internal cid 0x%02x, rfcomm data lenght exceeds MTU!", rfcomm_cid); + return RFCOMM_DATA_LEN_EXCEEDS_MTU; + } if (!channel->credits_outgoing){ log_info("rfcomm_send_internal cid 0x%02x, no rfcomm outgoing credits!", rfcomm_cid);