diff --git a/src/common/capwap_element.c b/src/common/capwap_element.c index ea88adf..bb851a3 100644 --- a/src/common/capwap_element.c +++ b/src/common/capwap_element.c @@ -337,6 +337,31 @@ int capwap_parsing_packet(struct capwap_packet_rxmng* rxmngpacket, struct capwap return PARSING_COMPLETE; } +/* */ +int capwap_packet_getdata(struct capwap_packet_rxmng* rxmngpacket, uint8_t* buffer, int maxlength) { + int result; + + ASSERT(rxmngpacket != NULL); + ASSERT(buffer != NULL); + ASSERT(maxlength > 0); + + /* Get only data packet */ + if (rxmngpacket->isctrlpacket || IS_FLAG_K_HEADER(rxmngpacket->header)) { + return -1; + } else if (rxmngpacket->packetlength > maxlength) { + return -1; + } + + /* Get data packet */ + rxmngpacket->readerpacketallowed = rxmngpacket->packetlength; + result = rxmngpacket->read_ops.read_block((capwap_message_elements_handle)rxmngpacket, buffer, rxmngpacket->packetlength); + if (result != rxmngpacket->packetlength) { + return -1; + } + + return result; +} + /* */ int capwap_validate_parsed_packet(struct capwap_parsed_packet* packet, struct capwap_array* returnedmessage) { unsigned short binding; diff --git a/src/common/capwap_element.h b/src/common/capwap_element.h index 01377e6..da19466 100644 --- a/src/common/capwap_element.h +++ b/src/common/capwap_element.h @@ -144,7 +144,10 @@ struct capwap_parsed_packet { int capwap_parsing_packet(struct capwap_packet_rxmng* rxmngpacket, struct capwap_connection* connection, struct capwap_parsed_packet* packet); int capwap_validate_parsed_packet(struct capwap_parsed_packet* packet, struct capwap_array* returnedmessage); void capwap_free_parsed_packet(struct capwap_parsed_packet* packet); + struct capwap_list_item* capwap_get_message_element(struct capwap_parsed_packet* packet, uint16_t type); void* capwap_get_message_element_data(struct capwap_parsed_packet* packet, uint16_t type); +int capwap_packet_getdata(struct capwap_packet_rxmng* rxmngpacket, uint8_t* buffer, int maxlength); + #endif /* __CAPWAP_ELEMENT_HEADER__ */