summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiederik de Groot <dkgroot@talon.nl>2017-02-11 13:41:58 +0100
committerMichael Mann <mmann78@netscape.net>2017-02-12 16:21:02 +0000
commitea0a7f211ce5d503de6a46502f98c80cec205d7e (patch)
tree91a2671840c9ea69d222c7167e8c975ed0bda5d2
parentfb3a7caa1746e4e33b21a90cce5921ded621a0b9 (diff)
downloadwireshark-ea0a7f211ce5d503de6a46502f98c80cec205d7e.tar.gz
[skinny]: Add struct/union guards to multi-part message handlers
Improve multi-part message handling - Calculate (sub) structure/union length - Add a guard when iterating over multi-part message - For fixed length messages, advance the cursor when iteration falls short of max length Change-Id: Id2af3aa1a878328f105e173cabe2b68dd0343507 Reviewed-on: https://code.wireshark.org/review/20057 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r--epan/dissectors/packet-skinny.c1842
-rw-r--r--epan/dissectors/packet-skinny.c.in11
-rw-r--r--epan/dissectors/packet-skinny.h11
-rw-r--r--epan/dissectors/packet-skinny.h.in11
-rwxr-xr-xtools/parse_xml2skinny_dissector.py107
5 files changed, 913 insertions, 1069 deletions
diff --git a/epan/dissectors/packet-skinny.c b/epan/dissectors/packet-skinny.c
index bffa263e58..0851910f73 100644
--- a/epan/dissectors/packet-skinny.c
+++ b/epan/dissectors/packet-skinny.c
@@ -264,6 +264,7 @@ static const value_string message_id[] = {
};
static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_id);
+
/* Declare Enums and Defines */
static const value_string DisplayLabels_36[] = {
{ 0x00000, "Empty" },
@@ -2337,13 +2338,11 @@ handle_RegisterMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
{
- /* start struct : sid / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sid */
}
ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_BIG_ENDIAN);
ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
@@ -2571,84 +2570,72 @@ handle_CapabilitiesRes(ptvcursor_t *cursor, packet_info * pinfo _U_)
guint32 payloadCapability = 0;
capCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_capCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : caps / size: 16 */
+ if (capCount <= 16) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [ref: capCount = %d, max:18]", capCount);
- for (counter_1 = 0; counter_1 < 18; counter_1++) {
- if (counter_1 < capCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [%d / %d]", counter_1 + 1, capCount);
- payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
- if (payloadCapability == MEDIA_PAYLOAD_G7231) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
- ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 4);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
- {
- /* start struct : modemRelay / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
- ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ if (capCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (capCount * 16) && capCount <= 18) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 18; counter_1++) {
+ if (counter_1 < capCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "caps [%d / %d]", counter_1 + 1, capCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_G7231) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: modemRelay */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
- {
- /* start struct : sprtPayload / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
- ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: sprtPayload */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
- {
- /* start struct : sse / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
- ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: sse */
- }
- ptvcursor_pop_subtree(cursor);
- } else {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
- {
- /* start struct : codecParams / size: 4 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
- ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
+ ptvcursor_advance(cursor, 4);
}
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 4);
+ } else {
+ ptvcursor_advance(cursor, 16);
}
- } else {
- ptvcursor_advance(cursor, 16);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: caps */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: caps */
+ } else {
+ ptvcursor_advance(cursor, (capCount * 16)); /* guard kicked in -> skip the rest */;
}
}
@@ -2678,6 +2665,7 @@ handle_AlarmMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
static void
handle_MulticastMediaReceptionAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
+ si->multicastReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_multicastReceptionStatus, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_passThruPartyID, 4, ENC_LITTLE_ENDIAN);
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
@@ -2696,6 +2684,7 @@ handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_
{
guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
+ si->mediaReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_mediaReceptionStatus, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6);
ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
@@ -2815,13 +2804,11 @@ static void
handle_RegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
{
- /* start struct : sid / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sid */
}
ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
@@ -2900,7 +2887,6 @@ handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
guint32 dataLength = 0;
{
- /* start struct : deviceToUserData / size: 2020 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
@@ -2912,7 +2898,6 @@ handle_DeviceToUserDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
ptvcursor_pop_subtree(cursor);
- /* end struct: deviceToUserData */
}
}
@@ -2928,7 +2913,6 @@ handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo
{
guint32 dataLength = 0;
{
- /* start struct : deviceToUserData / size: 2020 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserData");
ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
@@ -2940,7 +2924,6 @@ handle_DeviceToUserDataResponseMessage(ptvcursor_t *cursor, packet_info * pinfo
ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
ptvcursor_pop_subtree(cursor);
- /* end struct: deviceToUserData */
}
}
@@ -2971,283 +2954,267 @@ handle_UpdateCapabilitiesMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : customPictureFormat / size: 20 */
+ if (customPictureFormatCount <= 20) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:6]", customPictureFormatCount);
- for (counter_1 = 0; counter_1 < 6; counter_1++) {
- if (counter_1 < customPictureFormatCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
- ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 20);
+ if (customPictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (customPictureFormatCount * 20) && customPictureFormatCount <= 6) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 6; counter_1++) {
+ if (counter_1 < customPictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 20);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: customPictureFormat */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: customPictureFormat */
+ } else {
+ ptvcursor_advance(cursor, (customPictureFormatCount * 20)); /* guard kicked in -> skip the rest */;
}
{
- /* start struct : confResources / size: 36 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : serviceResource / size: 24 */
+ if (serviceResourceCount <= 24) { /* tvb struct size guard */
guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:4]", serviceResourceCount);
- for (counter_2 = 0; counter_2 < 4; counter_2++) {
- if (counter_2 < serviceResourceCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
- layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_5 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
- for (counter_5 = 0; counter_5 < 5; counter_5++) {
- if (counter_5 < layoutCount) {
- ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 4);
+ if (serviceResourceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (serviceResourceCount * 24) && serviceResourceCount <= 4) { /* tvb counter size guard */
+ for (counter_2 = 0; counter_2 < 4; counter_2++) {
+ if (counter_2 < serviceResourceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
+ layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
+ if (layoutCount <= 5) { /* tvb enum size guard */
+ guint32 counter_7 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
+ for (counter_7 = 0; counter_7 < 5; counter_7++) {
+ if (counter_7 < layoutCount) {
+ ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 4);
+ }
}
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
+ } else {
+ ptvcursor_advance(cursor, (5 * 4)); /* guard kicked in -> skip the rest */;
}
- ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
+ ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 24);
}
- ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 24);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: serviceResource */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: serviceResource */
+ } else {
+ ptvcursor_advance(cursor, (serviceResourceCount * 24)); /* guard kicked in -> skip the rest */;
}
ptvcursor_pop_subtree(cursor);
- /* end struct: confResources */
}
- {
- /* start struct : audiocaps / size: 16 */
+ if (audioCapCount <= 16) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:18]", audioCapCount);
- for (counter_1 = 0; counter_1 < 18; counter_1++) {
- if (counter_1 < audioCapCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
- payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
- if (payloadCapability == MEDIA_PAYLOAD_G7231) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
- ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 4);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
- {
- /* start struct : modemRelay / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
- ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ if (audioCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (audioCapCount * 16) && audioCapCount <= 18) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 18; counter_1++) {
+ if (counter_1 < audioCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_G7231) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: modemRelay */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
- {
- /* start struct : sprtPayload / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
- ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: sprtPayload */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
- {
- /* start struct : sse / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
- ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: sse */
- }
- ptvcursor_pop_subtree(cursor);
- } else {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
- {
- /* start struct : codecParams / size: 4 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
- ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
+ } else {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
}
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 4);
+ } else {
+ ptvcursor_advance(cursor, 16);
}
- } else {
- ptvcursor_advance(cursor, 16);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: audiocaps */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: audiocaps */
+ } else {
+ ptvcursor_advance(cursor, (audioCapCount * 16)); /* guard kicked in -> skip the rest */;
}
- {
- /* start struct : vidCaps / size: 44 */
+ if (videoCapCount <= 44) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:10]", videoCapCount);
- for (counter_1 = 0; counter_1 < 10; counter_1++) {
- if (counter_1 < videoCapCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
- payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
- levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : levelPreference / size: 24 */
- guint32 counter_4 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:4]", levelPreferenceCount);
- for (counter_4 = 0; counter_4 < 4; counter_4++) {
- if (counter_4 < levelPreferenceCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_4 + 1, levelPreferenceCount);
- ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 24);
+ if (videoCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (videoCapCount * 44) && videoCapCount <= 10) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 10; counter_1++) {
+ if (counter_1 < videoCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
+ if (levelPreferenceCount <= 24) { /* tvb struct size guard */
+ guint32 counter_5 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:4]", levelPreferenceCount);
+ if (levelPreferenceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (levelPreferenceCount * 24) && levelPreferenceCount <= 4) { /* tvb counter size guard */
+ for (counter_5 = 0; counter_5 < 4; counter_5++) {
+ if (counter_5 < levelPreferenceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_5 + 1, levelPreferenceCount);
+ ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 24);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
}
ptvcursor_pop_subtree(cursor);
- /* end for loop tree: levelPreference */
+ } else {
+ ptvcursor_advance(cursor, (levelPreferenceCount * 24)); /* guard kicked in -> skip the rest */;
}
- ptvcursor_pop_subtree(cursor);
- /* end struct: levelPreference */
- }
- if (payloadCapability == MEDIA_PAYLOAD_H261) {
- /* start union : capability / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
- {
- /* start struct : h261VideoCapability / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
- ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_H261) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: h261VideoCapability */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
- /* start union : capability / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
- {
- /* start struct : h263VideoCapability / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_advance(cursor, 4);
- ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
- ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
+ ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: h263VideoCapability */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
- /* start union : capability / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
- {
- /* start struct : vieoVideoCapability / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
- ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
+ ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
ptvcursor_pop_subtree(cursor);
- /* end struct: vieoVideoCapability */
}
- ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_advance(cursor, 44);
}
- } else {
- ptvcursor_advance(cursor, 44);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: vidCaps */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: vidCaps */
+ } else {
+ ptvcursor_advance(cursor, (videoCapCount * 44)); /* guard kicked in -> skip the rest */;
}
- {
- /* start struct : dataCaps / size: 16 */
+ if (dataCapCount <= 16) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:5]", dataCapCount);
- for (counter_1 = 0; counter_1 < 5; counter_1++) {
- if (counter_1 < dataCapCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
- ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 16);
+ if (dataCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (dataCapCount * 16) && dataCapCount <= 5) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ if (counter_1 < dataCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 16);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: dataCaps */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: dataCaps */
+ } else {
+ ptvcursor_advance(cursor, (dataCapCount * 16)); /* guard kicked in -> skip the rest */;
}
}
@@ -3263,6 +3230,7 @@ handle_OpenMultiMediaReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info *
{
guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ si->multimediaReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_multimediaReceptionStatus, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_ipv4or6(cursor, hf_skinny_ipAddr_ipv4, hf_skinny_ipAddr_ipv6);
ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
@@ -3401,28 +3369,29 @@ handle_AuditConferenceResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_last, 4, ENC_LITTLE_ENDIAN);
numberOfEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_numberOfEntries, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : conferenceEntry / size: 76 */
+ if (numberOfEntries <= 76) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [ref: numberOfEntries = %d, max:32]", numberOfEntries);
- for (counter_1 = 0; counter_1 < 32; counter_1++) {
- if (counter_1 < numberOfEntries) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [%d / %d]", counter_1 + 1, numberOfEntries);
- ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_resourceType, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_numberOfActiveParticipants, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_appID, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII|ENC_NA);
- ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII|ENC_NA);
- } else {
- ptvcursor_advance(cursor, 76);
+ if (numberOfEntries && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (numberOfEntries * 76) && numberOfEntries <= 32) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 32; counter_1++) {
+ if (counter_1 < numberOfEntries) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "conferenceEntry [%d / %d]", counter_1 + 1, numberOfEntries);
+ ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_resourceType, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfReservedParticipants, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_numberOfActiveParticipants, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appID, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_appConfID, 32, ENC_ASCII|ENC_NA);
+ ptvcursor_add(cursor, hf_skinny_appData, 24, ENC_ASCII|ENC_NA);
+ } else {
+ ptvcursor_advance(cursor, 76);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: conferenceEntry */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: conferenceEntry */
+ } else {
+ ptvcursor_advance(cursor, (numberOfEntries * 76)); /* guard kicked in -> skip the rest */;
}
}
@@ -3442,17 +3411,19 @@ handle_AuditParticipantResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
numberOfEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_numberOfEntries, 4, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_1 = 0;
+ if (numberOfEntries <= 256) { /* tvb integer size guard */
+ guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "participantEntry [ref: numberOfEntries = %d, max:256]", numberOfEntries);
- for (counter_1 = 0; counter_1 < 256; counter_1++) {
- if (counter_1 < numberOfEntries) {
+ for (counter_2 = 0; counter_2 < 256; counter_2++) {
+ if (counter_2 < numberOfEntries) {
ptvcursor_add(cursor, hf_skinny_participantEntry, 4, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 4);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: participantEntry */
+ } else {
+ ptvcursor_advance(cursor, (256 * 4)); /* guard kicked in -> skip the rest */;
}
}
@@ -3468,7 +3439,6 @@ handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo
{
guint32 dataLength = 0;
{
- /* start struct : deviceToUserDataVersion1 / size: 2040 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserDataVersion1");
ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
@@ -3485,7 +3455,6 @@ handle_DeviceToUserDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo
ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
ptvcursor_pop_subtree(cursor);
- /* end struct: deviceToUserDataVersion1 */
}
}
@@ -3501,7 +3470,6 @@ handle_DeviceToUserDataResponseMessageVersion1(ptvcursor_t *cursor, packet_info
{
guint32 dataLength = 0;
{
- /* start struct : deviceToUserDataVersion1 / size: 2040 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "deviceToUserDataVersion1");
ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
@@ -3518,7 +3486,6 @@ handle_DeviceToUserDataResponseMessageVersion1(ptvcursor_t *cursor, packet_info
ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
ptvcursor_pop_subtree(cursor);
- /* end struct: deviceToUserDataVersion1 */
}
}
@@ -3549,168 +3516,448 @@ handle_UpdateCapabilitiesV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
+ if (customPictureFormatCount <= 20) { /* tvb struct size guard */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:6]", customPictureFormatCount);
+ if (customPictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (customPictureFormatCount * 20) && customPictureFormatCount <= 6) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 6; counter_1++) {
+ if (counter_1 < customPictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 20);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_advance(cursor, (customPictureFormatCount * 20)); /* guard kicked in -> skip the rest */;
+ }
{
- /* start struct : customPictureFormat / size: 20 */
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
+ ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
+ serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
+ if (serviceResourceCount <= 24) { /* tvb struct size guard */
+ guint32 counter_2 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:4]", serviceResourceCount);
+ if (serviceResourceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (serviceResourceCount * 24) && serviceResourceCount <= 4) { /* tvb counter size guard */
+ for (counter_2 = 0; counter_2 < 4; counter_2++) {
+ if (counter_2 < serviceResourceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
+ layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
+ if (layoutCount <= 5) { /* tvb enum size guard */
+ guint32 counter_7 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
+ for (counter_7 = 0; counter_7 < 5; counter_7++) {
+ if (counter_7 < layoutCount) {
+ ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 4);
+ }
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
+ } else {
+ ptvcursor_advance(cursor, (5 * 4)); /* guard kicked in -> skip the rest */;
+ }
+ ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 24);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_advance(cursor, (serviceResourceCount * 24)); /* guard kicked in -> skip the rest */;
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ if (audioCapCount <= 16) { /* tvb struct size guard */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:18]", audioCapCount);
+ if (audioCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (audioCapCount * 16) && audioCapCount <= 18) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 18; counter_1++) {
+ if (counter_1 < audioCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
+ if (payloadCapability == MEDIA_PAYLOAD_G7231) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
+ ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
+ ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
+ ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
+ ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
+ ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 4);
+ }
+ } else {
+ ptvcursor_advance(cursor, 16);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_advance(cursor, (audioCapCount * 16)); /* guard kicked in -> skip the rest */;
+ }
+ if (videoCapCount <= 60) { /* tvb struct size guard */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:10]", videoCapCount);
+ if (videoCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (videoCapCount * 60) && videoCapCount <= 10) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 10; counter_1++) {
+ if (counter_1 < videoCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
+ payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
+ if (levelPreferenceCount <= 24) { /* tvb struct size guard */
+ guint32 counter_5 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:4]", levelPreferenceCount);
+ if (levelPreferenceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (levelPreferenceCount * 24) && levelPreferenceCount <= 4) { /* tvb counter size guard */
+ for (counter_5 = 0; counter_5 < 4; counter_5++) {
+ if (counter_5 < levelPreferenceCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_5 + 1, levelPreferenceCount);
+ ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 24);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_advance(cursor, (levelPreferenceCount * 24)); /* guard kicked in -> skip the rest */;
+ }
+ if (payloadCapability == MEDIA_PAYLOAD_H261) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_advance(cursor, 4);
+ ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
+ ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ } else if (payloadCapability == MEDIA_PAYLOAD_H264) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H264");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
+ ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
+ {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
+ ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_pop_subtree(cursor);
+ }
+ ptvcursor_pop_subtree(cursor);
+ ptvcursor_advance(cursor, 16);
+ }
+ } else {
+ ptvcursor_advance(cursor, 60);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_advance(cursor, (videoCapCount * 60)); /* guard kicked in -> skip the rest */;
+ }
+ if (dataCapCount <= 16) { /* tvb struct size guard */
+ guint32 counter_1 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:5]", dataCapCount);
+ if (dataCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (dataCapCount * 16) && dataCapCount <= 5) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ if (counter_1 < dataCapCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
+ ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 16);
+ }
+ ptvcursor_pop_subtree(cursor);
+ }
+ }
+ ptvcursor_pop_subtree(cursor);
+ } else {
+ ptvcursor_advance(cursor, (dataCapCount * 16)); /* guard kicked in -> skip the rest */;
+ }
+}
+
+/*
+ * Message: UpdateCapabilitiesV3Message
+ * Opcode: 0x0044
+ * Type: RegistrationAndManagement
+ * Direction: dev2pbx
+ * VarLength: yes
+ */
+static void
+handle_UpdateCapabilitiesV3Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
+{
+ guint32 audioCapCount = 0;
+ guint32 videoCapCount = 0;
+ guint32 dataCapCount = 0;
+ guint32 customPictureFormatCount = 0;
+ guint32 serviceResourceCount = 0;
+ guint32 layoutCount = 0;
+ guint32 payloadCapability = 0;
+ guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
+ guint32 levelPreferenceCount = 0;
+ audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
+ videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
+ dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
+ customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
+ ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
+ if (customPictureFormatCount <= 20) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:6]", customPictureFormatCount);
- for (counter_1 = 0; counter_1 < 6; counter_1++) {
- if (counter_1 < customPictureFormatCount) {
+ if (customPictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (customPictureFormatCount * 20) && customPictureFormatCount <= 6) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < customPictureFormatCount; counter_1++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 20);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: customPictureFormat */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: customPictureFormat */
+ } else {
+ ptvcursor_advance(cursor, (customPictureFormatCount * 20)); /* guard kicked in -> skip the rest */;
}
{
- /* start struct : confResources / size: 36 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : serviceResource / size: 24 */
+ if (serviceResourceCount <= 24) { /* tvb struct size guard */
guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:4]", serviceResourceCount);
- for (counter_2 = 0; counter_2 < 4; counter_2++) {
- if (counter_2 < serviceResourceCount) {
+ if (serviceResourceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (serviceResourceCount * 24) && serviceResourceCount <= 4) { /* tvb counter size guard */
+ for (counter_2 = 0; counter_2 < serviceResourceCount; counter_2++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_5 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:5]", layoutCount);
- for (counter_5 = 0; counter_5 < 5; counter_5++) {
- if (counter_5 < layoutCount) {
- ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 4);
- }
+ if (layoutCount <= 5) { /* tvb enum size guard */
+ guint32 counter_6 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:layoutCount]", layoutCount);
+ for (counter_6 = 0; counter_6 < layoutCount; counter_6++) {
+ ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
+ } else {
+ ptvcursor_advance(cursor, (layoutCount * 4)); /* guard kicked in -> skip the rest */;
}
ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 24);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: serviceResource */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: serviceResource */
+ } else {
+ ptvcursor_advance(cursor, (serviceResourceCount * 24)); /* guard kicked in -> skip the rest */;
}
ptvcursor_pop_subtree(cursor);
- /* end struct: confResources */
}
- {
- /* start struct : audiocaps / size: 16 */
+ if (audioCapCount <= 16) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:18]", audioCapCount);
- for (counter_1 = 0; counter_1 < 18; counter_1++) {
- if (counter_1 < audioCapCount) {
+ if (audioCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (audioCapCount * 16) && audioCapCount <= 18) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < audioCapCount; counter_1++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
if (payloadCapability == MEDIA_PAYLOAD_G7231) {
- /* start union : PAYLOADS / maxsize: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 4);
} else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
- /* start union : PAYLOADS / maxsize: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
{
- /* start struct : modemRelay / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: modemRelay */
}
ptvcursor_pop_subtree(cursor);
} else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
- /* start union : PAYLOADS / maxsize: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
{
- /* start struct : sprtPayload / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sprtPayload */
}
ptvcursor_pop_subtree(cursor);
} else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
- /* start union : PAYLOADS / maxsize: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
{
- /* start struct : sse / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sse */
}
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : PAYLOADS / maxsize: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 4);
}
- } else {
- ptvcursor_advance(cursor, 16);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: audiocaps */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: audiocaps */
+ } else {
+ ptvcursor_advance(cursor, (audioCapCount * 16)); /* guard kicked in -> skip the rest */;
}
- {
- /* start struct : vidCaps / size: 60 */
+ if (videoCapCount <= 72) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:10]", videoCapCount);
- for (counter_1 = 0; counter_1 < 10; counter_1++) {
- if (counter_1 < videoCapCount) {
+ if (videoCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (videoCapCount * 72) && videoCapCount <= 10) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < videoCapCount; counter_1++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : levelPreference / size: 24 */
+ if (levelPreferenceCount <= 24) { /* tvb struct size guard */
guint32 counter_4 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:4]", levelPreferenceCount);
- for (counter_4 = 0; counter_4 < 4; counter_4++) {
- if (counter_4 < levelPreferenceCount) {
+ if (levelPreferenceCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (levelPreferenceCount * 24) && levelPreferenceCount <= 4) { /* tvb counter size guard */
+ for (counter_4 = 0; counter_4 < levelPreferenceCount; counter_4++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_4 + 1, levelPreferenceCount);
ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
@@ -3718,33 +3965,27 @@ handle_UpdateCapabilitiesV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 24);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: levelPreference */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: levelPreference */
+ } else {
+ ptvcursor_advance(cursor, (levelPreferenceCount * 24)); /* guard kicked in -> skip the rest */;
}
+ ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
if (payloadCapability == MEDIA_PAYLOAD_H261) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
{
- /* start struct : h261VideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h261VideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
} else if (payloadCapability == MEDIA_PAYLOAD_H263) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
{
- /* start struct : h263VideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
@@ -3783,15 +4024,12 @@ handle_UpdateCapabilitiesV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h263VideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
} else if (payloadCapability == MEDIA_PAYLOAD_H264) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H264");
{
- /* start struct : h264VideoCapability / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
@@ -3800,356 +4038,47 @@ handle_UpdateCapabilitiesV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h264VideoCapability */
}
ptvcursor_pop_subtree(cursor);
} else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
{
- /* start struct : vieoVideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: vieoVideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
}
- } else {
- ptvcursor_advance(cursor, 60);
+ ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
+ if (hdr_version >= V16_MSG_TYPE) {
+ ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: vidCaps */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: vidCaps */
+ } else {
+ ptvcursor_advance(cursor, (videoCapCount * 72)); /* guard kicked in -> skip the rest */;
}
- {
- /* start struct : dataCaps / size: 16 */
+ if (dataCapCount <= 20) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:5]", dataCapCount);
- for (counter_1 = 0; counter_1 < 5; counter_1++) {
- if (counter_1 < dataCapCount) {
+ if (dataCapCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (dataCapCount * 20) && dataCapCount <= 5) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < dataCapCount; counter_1++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 16);
- }
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: dataCaps */
- }
- ptvcursor_pop_subtree(cursor);
- /* end struct: dataCaps */
- }
-}
-
-/*
- * Message: UpdateCapabilitiesV3Message
- * Opcode: 0x0044
- * Type: RegistrationAndManagement
- * Direction: dev2pbx
- * VarLength: yes
- */
-static void
-handle_UpdateCapabilitiesV3Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
-{
- guint32 audioCapCount = 0;
- guint32 videoCapCount = 0;
- guint32 dataCapCount = 0;
- guint32 customPictureFormatCount = 0;
- guint32 serviceResourceCount = 0;
- guint32 layoutCount = 0;
- guint32 payloadCapability = 0;
- guint32 hdr_version = tvb_get_letohl(ptvcursor_tvbuff(cursor), 4);
- guint32 levelPreferenceCount = 0;
- audioCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_audioCapCount, 4, ENC_LITTLE_ENDIAN);
- videoCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_videoCapCount, 4, ENC_LITTLE_ENDIAN);
- dataCapCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_dataCapCount, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_RTPPayloadFormat, 4, ENC_LITTLE_ENDIAN);
- customPictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_customPictureFormatCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : customPictureFormat / size: 20 */
- guint32 counter_1 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [ref: customPictureFormatCount = %d, max:customPictureFormatCount]", customPictureFormatCount);
- for (counter_1 = 0; counter_1 < customPictureFormatCount; counter_1++) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "customPictureFormat [%d / %d]", counter_1 + 1, customPictureFormatCount);
- ptvcursor_add(cursor, hf_skinny_pictureWidth, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_pictureHeight, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_pixelAspectRatio, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_clockConversionCode, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_clockDivisor, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: customPictureFormat */
- }
- ptvcursor_pop_subtree(cursor);
- /* end struct: customPictureFormat */
- }
- {
- /* start struct : confResources / size: 36 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "confResources");
- ptvcursor_add(cursor, hf_skinny_activeStreamsOnRegistration, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxBW, 4, ENC_LITTLE_ENDIAN);
- serviceResourceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_serviceResourceCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : serviceResource / size: 24 */
- guint32 counter_2 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [ref: serviceResourceCount = %d, max:serviceResourceCount]", serviceResourceCount);
- for (counter_2 = 0; counter_2 < serviceResourceCount; counter_2++) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serviceResource [%d / %d]", counter_2 + 1, serviceResourceCount);
- layoutCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_layoutCount, 4, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_4 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "layouts [ref: layoutCount = %d, max:layoutCount]", layoutCount);
- for (counter_4 = 0; counter_4 < layoutCount; counter_4++) {
- ptvcursor_add(cursor, hf_skinny_layouts, 4, ENC_LITTLE_ENDIAN);
- }
- ptvcursor_pop_subtree(cursor); /* end for loop tree: layouts */
- }
- ptvcursor_add(cursor, hf_skinny_serviceNum, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxStreams, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxConferences, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_activeConferenceOnRegistration, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end for loop tree: serviceResource */
}
- ptvcursor_pop_subtree(cursor);
- /* end struct: serviceResource */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: confResources */
- }
- {
- /* start struct : audiocaps / size: 16 */
- guint32 counter_1 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [ref: audioCapCount = %d, max:audioCapCount]", audioCapCount);
- for (counter_1 = 0; counter_1 < audioCapCount; counter_1++) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audiocaps [%d / %d]", counter_1 + 1, audioCapCount);
- payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxFramesPerPacket, 4, ENC_LITTLE_ENDIAN);
- if (payloadCapability == MEDIA_PAYLOAD_G7231) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_G7231");
- ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 4);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_MODEMRELAY) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_ModemRelay");
- {
- /* start struct : modemRelay / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
- ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: modemRelay */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SPRT) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SPRT");
- {
- /* start struct : sprtPayload / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
- ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: sprtPayload */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_V150_LC_SSE) {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_v150_LC_SSE");
- {
- /* start struct : sse / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
- ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: sse */
- }
- ptvcursor_pop_subtree(cursor);
- } else {
- /* start union : PAYLOADS / maxsize: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any payloadCapability");
- {
- /* start struct : codecParams / size: 4 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
- ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
- }
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 4);
- }
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: audiocaps */
- }
- ptvcursor_pop_subtree(cursor);
- /* end struct: audiocaps */
- }
- {
- /* start struct : vidCaps / size: 72 */
- guint32 counter_1 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [ref: videoCapCount = %d, max:videoCapCount]", videoCapCount);
- for (counter_1 = 0; counter_1 < videoCapCount; counter_1++) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidCaps [%d / %d]", counter_1 + 1, videoCapCount);
- payloadCapability = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_videoCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
- levelPreferenceCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
- ptvcursor_add(cursor, hf_skinny_levelPreferenceCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : levelPreference / size: 24 */
- guint32 counter_3 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [ref: levelPreferenceCount = %d, max:levelPreferenceCount]", levelPreferenceCount);
- for (counter_3 = 0; counter_3 < levelPreferenceCount; counter_3++) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "levelPreference [%d / %d]", counter_3 + 1, levelPreferenceCount);
- ptvcursor_add(cursor, hf_skinny_transmitPreference, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_minBitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_serviceNumber, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: levelPreference */
- }
- ptvcursor_pop_subtree(cursor);
- /* end struct: levelPreference */
- }
- ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
- if (payloadCapability == MEDIA_PAYLOAD_H261) {
- /* start union : capability / maxsize: 24 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H261");
- {
- /* start struct : h261VideoCapability / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
- ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: h261VideoCapability */
- }
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 16);
- } else if (payloadCapability == MEDIA_PAYLOAD_H263) {
- /* start union : capability / maxsize: 24 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H263");
- {
- /* start struct : h263VideoCapability / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit2, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit3, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit4, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit5, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit6, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit7, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit8, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit9, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit10, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit11, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit12, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit13, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit14, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit15, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit16, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit17, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit18, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit19, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit20, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit21, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit22, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit23, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit24, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit25, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit26, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit27, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit28, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit29, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit30, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit31, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit32, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_advance(cursor, 4);
- ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
- ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: h263VideoCapability */
- }
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 16);
- } else if (payloadCapability == MEDIA_PAYLOAD_H264) {
- /* start union : capability / maxsize: 24 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_H264");
- {
- /* start struct : h264VideoCapability / size: 24 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
- ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_customMaxMBPS, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_customMaxFS, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: h264VideoCapability */
- }
- ptvcursor_pop_subtree(cursor);
- } else if (payloadCapability == MEDIA_PAYLOAD_VIEO) {
- /* start union : capability / maxsize: 24 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadCapability is Media_Payload_Vieo");
- {
- /* start struct : vieoVideoCapability / size: 8 */
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
- ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end struct: vieoVideoCapability */
- }
- ptvcursor_pop_subtree(cursor);
- ptvcursor_advance(cursor, 16);
- }
- ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
- if (hdr_version >= V16_MSG_TYPE) {
- ptvcursor_add(cursor, hf_skinny_ipAddressingMode, 4, ENC_LITTLE_ENDIAN);
- }
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: vidCaps */
- }
- ptvcursor_pop_subtree(cursor);
- /* end struct: vidCaps */
- }
- {
- /* start struct : dataCaps / size: 20 */
- guint32 counter_1 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [ref: dataCapCount = %d, max:dataCapCount]", dataCapCount);
- for (counter_1 = 0; counter_1 < dataCapCount; counter_1++) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataCaps [%d / %d]", counter_1 + 1, dataCapCount);
- ptvcursor_add(cursor, hf_skinny_payloadCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_dataCapabilityDirection, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_encryptionCapability, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: dataCaps */
- }
- ptvcursor_pop_subtree(cursor);
- /* end struct: dataCaps */
+ } else {
+ ptvcursor_advance(cursor, (dataCapCount * 20)); /* guard kicked in -> skip the rest */;
}
}
@@ -4278,36 +4207,28 @@ handle_MwiNotificationMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_mwiControlNumber, 25, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_areMessagesWaiting, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : totalVmCounts / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "totalVmCounts");
ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: totalVmCounts */
}
{
- /* start struct : priorityVmCounts / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "priorityVmCounts");
ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: priorityVmCounts */
}
{
- /* start struct : totalFaxCounts / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "totalFaxCounts");
ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: totalFaxCounts */
}
{
- /* start struct : priorityFaxCounts / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "priorityFaxCounts");
ptvcursor_add(cursor, hf_skinny_numNewMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numOldMsgs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: priorityFaxCounts */
}
}
@@ -4469,7 +4390,6 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U
compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : qualifierOut / size: 20 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierOut");
ptvcursor_add(cursor, hf_skinny_precedenceValue, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_ssValue, 4, ENC_LITTLE_ENDIAN);
@@ -4480,67 +4400,64 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U
}
if (hdr_version >= V11_MSG_TYPE) {
if (compressionType == MEDIA_PAYLOAD_G7231) {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
}
}
ptvcursor_pop_subtree(cursor);
- /* end struct: qualifierOut */
}
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : mTxMediaEncryptionKeyInfo / size: 18 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mTxMediaEncryptionKeyInfo");
ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_2 = 0;
+ if (keylen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < keylen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < keylen) {
ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
- {
- guint32 counter_2 = 0;
+ if (saltlen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < saltlen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < saltlen) {
ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: mTxMediaEncryptionKeyInfo */
}
ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
@@ -4552,37 +4469,29 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U
}
if (hdr_version >= V21_MSG_TYPE) {
{
- /* start struct : latentCapsInfo / size: 36 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "latentCapsInfo");
ptvcursor_add(cursor, hf_skinny_active, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : modemRelay / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: modemRelay */
}
{
- /* start struct : sprtPayload / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sprtPayload */
}
{
- /* start struct : sse / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sse */
}
{
- /* start struct : payloadParam / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadParam");
ptvcursor_add(cursor, hf_skinny_nse, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_rfc2833, 1, ENC_LITTLE_ENDIAN);
@@ -4593,10 +4502,8 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U
ptvcursor_add(cursor, hf_skinny_FutureUse2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_FutureUse3, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: payloadParam */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: latentCapsInfo */
}
}
}
@@ -4734,13 +4641,11 @@ static void
handle_ConfigStatMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
{
- /* start struct : sid / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sid */
}
ptvcursor_add(cursor, hf_skinny_userName, 40, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_serverName, 40, ENC_ASCII|ENC_NA);
@@ -4759,7 +4664,6 @@ static void
handle_DefineTimeDate(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
{
- /* start struct : timeDataInfo / size: 32 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "timeDataInfo");
ptvcursor_add(cursor, hf_skinny_wYear, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_wMonth, 4, ENC_LITTLE_ENDIAN);
@@ -4770,7 +4674,6 @@ handle_DefineTimeDate(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_wSecond, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_wMilliseconds, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: timeDataInfo */
}
ptvcursor_add(cursor, hf_skinny_systemTime, 4, ENC_LITTLE_ENDIAN);
}
@@ -4815,32 +4718,31 @@ handle_ButtonTemplateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
guint32 totalButtonCount = 0;
{
- /* start struct : buttonTemplate / size: 14 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "buttonTemplate");
ptvcursor_add(cursor, hf_skinny_buttonOffset, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_buttonCount, 4, ENC_LITTLE_ENDIAN);
totalButtonCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_totalButtonCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : definition / size: 2 */
+ if (totalButtonCount <= 2) { /* tvb struct size guard */
guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref: totalButtonCount = %d, max:42]", totalButtonCount);
- for (counter_2 = 0; counter_2 < 42; counter_2++) {
- if (counter_2 < totalButtonCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalButtonCount);
- ptvcursor_add(cursor, hf_skinny_instanceNumber, 1, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_buttonDefinition, 1, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 2);
+ if (totalButtonCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (totalButtonCount * 2) && totalButtonCount <= 42) { /* tvb counter size guard */
+ for (counter_2 = 0; counter_2 < 42; counter_2++) {
+ if (counter_2 < totalButtonCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalButtonCount);
+ ptvcursor_add(cursor, hf_skinny_instanceNumber, 1, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_buttonDefinition, 1, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 2);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: definition */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: definition */
+ } else {
+ ptvcursor_advance(cursor, (totalButtonCount * 2)); /* guard kicked in -> skip the rest */;
}
ptvcursor_pop_subtree(cursor);
- /* end struct: buttonTemplate */
}
}
@@ -4896,54 +4798,45 @@ handle_ServerResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0);
{
- /* start struct : server / size: 48 */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "server [max:5]");
for (counter_1 = 0; counter_1 < 5; counter_1++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "server [%d / %d]", counter_1 + 1, 5);
ptvcursor_add(cursor, hf_skinny_ServerName, 48, ENC_ASCII|ENC_NA);
ptvcursor_pop_subtree(cursor);
- /* end for loop tree: server */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: server */
}
{
- guint32 counter_1 = 0;
+ guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverTcpListenPort [max:5]");
- for (counter_1 = 0; counter_1 < 5; counter_1++) {
+ for (counter_2 = 0; counter_2 < 5; counter_2++) {
ptvcursor_add(cursor, hf_skinny_serverTcpListenPort, 4, ENC_LITTLE_ENDIAN);
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: serverTcpListenPort */
}
if (hdr_data_length < 293) {
{
- /* start struct : serverIpAddr / size: 4 */
guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [max:5]");
for (counter_2 = 0; counter_2 < 5; counter_2++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [%d / %d]", counter_2 + 1, 5);
ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_BIG_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end for loop tree: serverIpAddr */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: serverIpAddr */
}
}
if (hdr_data_length > 292) {
{
- /* start struct : serverIpAddr / size: 20 */
guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [max:5]");
for (counter_2 = 0; counter_2 < 5; counter_2++) {
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "serverIpAddr [%d / %d]", counter_2 + 1, 5);
dissect_skinny_ipv4or6(cursor, hf_skinny_stationIpAddr_ipv4, hf_skinny_stationIpAddr_ipv6);
ptvcursor_pop_subtree(cursor);
- /* end for loop tree: serverIpAddr */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: serverIpAddr */
}
}
}
@@ -4981,7 +4874,6 @@ handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pi
compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : qualifierIn / size: 12 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
if (hdr_version <= V10_MSG_TYPE) {
@@ -4989,28 +4881,23 @@ handle_StartMulticastMediaReceptionMessage(ptvcursor_t *cursor, packet_info * pi
}
if (hdr_version >= V11_MSG_TYPE) {
if (compressionType == MEDIA_PAYLOAD_G7231) {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
}
}
ptvcursor_pop_subtree(cursor);
- /* end struct: qualifierIn */
}
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
@@ -5036,7 +4923,6 @@ handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info *
compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : qualifierOut / size: 20 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierOut");
ptvcursor_add(cursor, hf_skinny_precedenceValue, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_ssValue, 4, ENC_LITTLE_ENDIAN);
@@ -5047,28 +4933,23 @@ handle_StartMulticastMediaTransmissionMessage(ptvcursor_t *cursor, packet_info *
}
if (hdr_version >= V11_MSG_TYPE) {
if (compressionType == MEDIA_PAYLOAD_G7231) {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
}
}
ptvcursor_pop_subtree(cursor);
- /* end struct: qualifierOut */
}
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
@@ -5128,7 +5009,6 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : qualifierIn / size: 12 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
if (hdr_version <= V10_MSG_TYPE) {
@@ -5136,67 +5016,64 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
}
if (hdr_version >= V11_MSG_TYPE) {
if (compressionType == MEDIA_PAYLOAD_G7231) {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
}
}
ptvcursor_pop_subtree(cursor);
- /* end struct: qualifierIn */
}
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : mRxMediaEncryptionKeyInfo / size: 18 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mRxMediaEncryptionKeyInfo");
ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_2 = 0;
+ if (keylen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < keylen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < keylen) {
ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
- {
- guint32 counter_2 = 0;
+ if (saltlen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < saltlen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < saltlen) {
ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: mRxMediaEncryptionKeyInfo */
}
ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
@@ -5219,37 +5096,29 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
if (hdr_version >= V21_MSG_TYPE) {
if (hdr_data_length > 132) {
{
- /* start struct : latentCapsInfo / size: 36 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "latentCapsInfo");
ptvcursor_add(cursor, hf_skinny_active, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : modemRelay / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "modemRelay");
ptvcursor_add(cursor, hf_skinny_capAndVer, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_modAnd2833, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: modemRelay */
}
{
- /* start struct : sprtPayload / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sprtPayload");
ptvcursor_add(cursor, hf_skinny_chan0MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan2MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan3MaxPayload, 2, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_chan2MaxWindow, 2, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sprtPayload */
}
{
- /* start struct : sse / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sse");
ptvcursor_add(cursor, hf_skinny_standard, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_vendor, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sse */
}
{
- /* start struct : payloadParam / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadParam");
ptvcursor_add(cursor, hf_skinny_nse, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_rfc2833, 1, ENC_LITTLE_ENDIAN);
@@ -5260,10 +5129,8 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_FutureUse2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_FutureUse3, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: payloadParam */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: latentCapsInfo */
}
}
}
@@ -5321,32 +5188,31 @@ handle_SoftKeyTemplateResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
guint32 totalSoftKeyCount = 0;
{
- /* start struct : softKeyTemplate / size: 32 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyTemplate");
ptvcursor_add(cursor, hf_skinny_softKeyOffset, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_softKeyCount, 4, ENC_LITTLE_ENDIAN);
totalSoftKeyCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_totalSoftKeyCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : definition / size: 20 */
+ if (totalSoftKeyCount <= 20) { /* tvb struct size guard */
guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref: totalSoftKeyCount = %d, max:32]", totalSoftKeyCount);
- for (counter_2 = 0; counter_2 < 32; counter_2++) {
- if (counter_2 < totalSoftKeyCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeyCount);
- dissect_skinny_displayLabel(cursor, hf_skinny_softKeyLabel, 16);
- ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 20);
+ if (totalSoftKeyCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (totalSoftKeyCount * 20) && totalSoftKeyCount <= 32) { /* tvb counter size guard */
+ for (counter_2 = 0; counter_2 < 32; counter_2++) {
+ if (counter_2 < totalSoftKeyCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeyCount);
+ dissect_skinny_displayLabel(cursor, hf_skinny_softKeyLabel, 16);
+ ptvcursor_add(cursor, hf_skinny_softKeyEvent, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 20);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: definition */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: definition */
+ } else {
+ ptvcursor_advance(cursor, (totalSoftKeyCount * 20)); /* guard kicked in -> skip the rest */;
}
ptvcursor_pop_subtree(cursor);
- /* end struct: softKeyTemplate */
}
}
@@ -5362,46 +5228,45 @@ handle_SoftKeySetResMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
guint32 totalSoftKeySetCount = 0;
{
- /* start struct : softKeySets / size: 15 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeySets");
ptvcursor_add(cursor, hf_skinny_softKeySetOffset, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_softKeySetCount, 4, ENC_LITTLE_ENDIAN);
totalSoftKeySetCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_totalSoftKeySetCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : definition / size: 3 */
+ if (totalSoftKeySetCount <= 3) { /* tvb struct size guard */
guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [ref: totalSoftKeySetCount = %d, max:16]", totalSoftKeySetCount);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < totalSoftKeySetCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeySetCount);
- {
- guint32 counter_5 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyTemplateIndex [max:16]");
- for (counter_5 = 0; counter_5 < 16; counter_5++) {
- ptvcursor_add(cursor, hf_skinny_softKeyTemplateIndex, 1, ENC_LITTLE_ENDIAN);
+ if (totalSoftKeySetCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (totalSoftKeySetCount * 3) && totalSoftKeySetCount <= 16) { /* tvb counter size guard */
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
+ if (counter_2 < totalSoftKeySetCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "definition [%d / %d]", counter_2 + 1, totalSoftKeySetCount);
+ {
+ guint32 counter_7 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyTemplateIndex [max:16]");
+ for (counter_7 = 0; counter_7 < 16; counter_7++) {
+ ptvcursor_add(cursor, hf_skinny_softKeyTemplateIndex, 1, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: softKeyTemplateIndex */
}
- ptvcursor_pop_subtree(cursor); /* end for loop tree: softKeyTemplateIndex */
- }
- {
- guint32 counter_5 = 0;
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyInfoIndex [max:16]");
- for (counter_5 = 0; counter_5 < 16; counter_5++) {
- ptvcursor_add(cursor, hf_skinny_softKeyInfoIndex, 2, ENC_LITTLE_ENDIAN);
+ {
+ guint32 counter_7 = 0;
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "softKeyInfoIndex [max:16]");
+ for (counter_7 = 0; counter_7 < 16; counter_7++) {
+ ptvcursor_add(cursor, hf_skinny_softKeyInfoIndex, 2, ENC_LITTLE_ENDIAN);
+ }
+ ptvcursor_pop_subtree(cursor); /* end for loop tree: softKeyInfoIndex */
}
- ptvcursor_pop_subtree(cursor); /* end for loop tree: softKeyInfoIndex */
+ } else {
+ ptvcursor_advance(cursor, 3);
}
- } else {
- ptvcursor_advance(cursor, 3);
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: definition */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: definition */
+ } else {
+ ptvcursor_advance(cursor, (totalSoftKeySetCount * 3)); /* guard kicked in -> skip the rest */;
}
ptvcursor_pop_subtree(cursor);
- /* end struct: softKeySets */
}
}
@@ -5459,12 +5324,10 @@ handle_CallStateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_privacy, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : precedence / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "precedence");
ptvcursor_add(cursor, hf_skinny_precedenceLevel, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_precedenceDomain, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: precedence */
}
}
@@ -5590,7 +5453,6 @@ handle_StartMediaFailureDetectionMessage(ptvcursor_t *cursor, packet_info * pinf
compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_compressionType, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : qualifierIn / size: 12 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
if (hdr_version <= V10_MSG_TYPE) {
@@ -5598,28 +5460,23 @@ handle_StartMediaFailureDetectionMessage(ptvcursor_t *cursor, packet_info * pinf
}
if (hdr_version >= V11_MSG_TYPE) {
if (compressionType == MEDIA_PAYLOAD_G7231) {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
}
}
ptvcursor_pop_subtree(cursor);
- /* end struct: qualifierIn */
}
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
@@ -5666,7 +5523,6 @@ handle_UserToDeviceDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
guint32 dataLength = 0;
{
- /* start struct : userToDeviceData / size: 2020 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "userToDeviceData");
ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
@@ -5678,7 +5534,6 @@ handle_UserToDeviceDataMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_dataLength, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
ptvcursor_pop_subtree(cursor);
- /* end struct: userToDeviceData */
}
}
@@ -5737,7 +5592,6 @@ static void
handle_StartAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
{
- /* start struct : AnnList / size: 12 */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "AnnList [max:32]");
for (counter_1 = 0; counter_1 < 32; counter_1++) {
@@ -5746,17 +5600,15 @@ handle_StartAnnouncementMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_country, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_toneAnnouncement, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end for loop tree: AnnList */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: AnnList */
}
ptvcursor_add(cursor, hf_skinny_annAckReq, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_conferenceID, 4, ENC_LITTLE_ENDIAN);
{
- guint32 counter_1 = 0;
+ guint32 counter_2 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "matrixConfPartyID [max:16]");
- for (counter_1 = 0; counter_1 < 16; counter_1++) {
+ for (counter_2 = 0; counter_2 < 16; counter_2++) {
ptvcursor_add(cursor, hf_skinny_matrixConfPartyID, 4, ENC_LITTLE_ENDIAN);
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: matrixConfPartyID */
@@ -5972,24 +5824,19 @@ handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pi
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : payloadType / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType");
ptvcursor_add(cursor, hf_skinny_payload_rfc_number, 4, ENC_LITTLE_ENDIAN);
payloadType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_payloadType, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: payloadType */
}
ptvcursor_add(cursor, hf_skinny_isConferenceCreator, 4, ENC_LITTLE_ENDIAN);
if (payloadType <= MEDIA_PAYLOAD_AMR_WB) {
- /* start union : capability / maxsize: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType <= Media_Payload_AMR_WB");
{
- /* start struct : audioParameters / size: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audioParameters");
ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : qualifierIn / size: 12 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
if (hdr_version <= V10_MSG_TYPE) {
@@ -5997,80 +5844,68 @@ handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pi
}
if (hdr_version >= V11_MSG_TYPE) {
if (compressionType == MEDIA_PAYLOAD_G7231) {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
}
}
ptvcursor_pop_subtree(cursor);
- /* end struct: qualifierIn */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: audioParameters */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 28);
} else if (payloadType >= MEDIA_PAYLOAD_H261 && payloadType <= MEDIA_PAYLOAD_H264_FEC) {
- /* start union : capability / maxsize: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "Media_Payload_H261 <= payloadType <= Media_Payload_H264_FEC");
{
- /* start struct : vidParameters / size: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidParameters");
ptvcursor_add(cursor, hf_skinny_bitRate, 4, ENC_LITTLE_ENDIAN);
pictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_pictureFormatCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : pictureFormat / size: 8 */
+ if (pictureFormatCount <= 8) { /* tvb struct size guard */
guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [ref: pictureFormatCount = %d, max:5]", pictureFormatCount);
- for (counter_3 = 0; counter_3 < 5; counter_3++) {
- if (counter_3 < pictureFormatCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
- ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 8);
+ if (pictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (pictureFormatCount * 8) && pictureFormatCount <= 5) { /* tvb counter size guard */
+ for (counter_3 = 0; counter_3 < 5; counter_3++) {
+ if (counter_3 < pictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 8);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: pictureFormat */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: pictureFormat */
+ } else {
+ ptvcursor_advance(cursor, (pictureFormatCount * 8)); /* guard kicked in -> skip the rest */;
}
ptvcursor_add(cursor, hf_skinny_confServiceNum, 4, ENC_LITTLE_ENDIAN);
if (payloadType == MEDIA_PAYLOAD_H261) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H261");
{
- /* start struct : h261VideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h261VideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
} else if (payloadType == MEDIA_PAYLOAD_H263) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H263");
{
- /* start struct : h263VideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
@@ -6109,15 +5944,12 @@ handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pi
ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h263VideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
} else if (payloadType == MEDIA_PAYLOAD_H264) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H264");
{
- /* start struct : h264VideoCapability / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
@@ -6126,77 +5958,71 @@ handle_OpenMultiMediaReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pi
ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h264VideoCapability */
}
ptvcursor_pop_subtree(cursor);
} else if (payloadType == MEDIA_PAYLOAD_VIEO) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_Vieo");
{
- /* start struct : vieoVideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: vieoVideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
}
ptvcursor_pop_subtree(cursor);
- /* end struct: vidParameters */
}
ptvcursor_pop_subtree(cursor);
} else if (payloadType >= MEDIA_PAYLOAD_CLEAR_CHAN) {
- /* start union : capability / maxsize: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType >= Media_Payload_Clear_Chan");
{
- /* start struct : dataParameters / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataParameters");
ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: dataParameters */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 36);
}
{
- /* start struct : mRxMediaEncryptionKeyInfo / size: 18 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mRxMediaEncryptionKeyInfo");
ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_2 = 0;
+ if (keylen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < keylen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < keylen) {
ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
- {
- guint32 counter_2 = 0;
+ if (saltlen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < saltlen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < saltlen) {
ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: mRxMediaEncryptionKeyInfo */
}
ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
@@ -6234,24 +6060,19 @@ handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pin
si->callId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : payloadType / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType");
ptvcursor_add(cursor, hf_skinny_payload_rfc_number, 4, ENC_LITTLE_ENDIAN);
payloadType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_payloadType, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: payloadType */
}
ptvcursor_add(cursor, hf_skinny_DSCPValue, 4, ENC_LITTLE_ENDIAN);
if (payloadType <= MEDIA_PAYLOAD_AMR_WB) {
- /* start union : capability / maxsize: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType <= Media_Payload_AMR_WB");
{
- /* start struct : audioParameters / size: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "audioParameters");
ptvcursor_add(cursor, hf_skinny_millisecondPacketSize, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : qualifierIn / size: 12 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "qualifierIn");
ptvcursor_add(cursor, hf_skinny_ecValue, 4, ENC_LITTLE_ENDIAN);
if (hdr_version <= V10_MSG_TYPE) {
@@ -6259,80 +6080,68 @@ handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pin
}
if (hdr_version >= V11_MSG_TYPE) {
if (compressionType == MEDIA_PAYLOAD_G7231) {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "compressionType is Media_Payload_G7231");
ptvcursor_add(cursor, hf_skinny_g723BitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
} else {
- /* start union : codecParamsUnion / maxsize: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any compressionType");
{
- /* start struct : codecParams / size: 4 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "codecParams");
ptvcursor_add(cursor, hf_skinny_codecMode, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_dynamicPayload, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam1, 1, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_codecParam2, 1, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: codecParams */
}
ptvcursor_pop_subtree(cursor);
}
}
ptvcursor_pop_subtree(cursor);
- /* end struct: qualifierIn */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: audioParameters */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 28);
} else if (payloadType >= MEDIA_PAYLOAD_H261 && payloadType <= MEDIA_PAYLOAD_H264_FEC) {
- /* start union : capability / maxsize: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "Media_Payload_H261 <= payloadType <= Media_Payload_H264_FEC");
{
- /* start struct : vidParameters / size: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vidParameters");
ptvcursor_add(cursor, hf_skinny_bitRate, 4, ENC_LITTLE_ENDIAN);
pictureFormatCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_pictureFormatCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : pictureFormat / size: 8 */
+ if (pictureFormatCount <= 8) { /* tvb struct size guard */
guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [ref: pictureFormatCount = %d, max:5]", pictureFormatCount);
- for (counter_3 = 0; counter_3 < 5; counter_3++) {
- if (counter_3 < pictureFormatCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
- ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 8);
+ if (pictureFormatCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (pictureFormatCount * 8) && pictureFormatCount <= 5) { /* tvb counter size guard */
+ for (counter_3 = 0; counter_3 < 5; counter_3++) {
+ if (counter_3 < pictureFormatCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureFormat [%d / %d]", counter_3 + 1, pictureFormatCount);
+ ptvcursor_add(cursor, hf_skinny_format, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_MPI, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 8);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: pictureFormat */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: pictureFormat */
+ } else {
+ ptvcursor_advance(cursor, (pictureFormatCount * 8)); /* guard kicked in -> skip the rest */;
}
ptvcursor_add(cursor, hf_skinny_confServiceNum, 4, ENC_LITTLE_ENDIAN);
if (payloadType == MEDIA_PAYLOAD_H261) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H261");
{
- /* start struct : h261VideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h261VideoCapability");
ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOffCapability, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_stillImageTransmission, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h261VideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
} else if (payloadType == MEDIA_PAYLOAD_H263) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H263");
{
- /* start struct : h263VideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263VideoCapability");
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h263_capability_bitfield");
ptvcursor_add_no_advance(cursor, hf_skinny_Generic_Bitfield_Bit1, 4, ENC_LITTLE_ENDIAN);
@@ -6371,15 +6180,12 @@ handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pin
ptvcursor_pop_subtree(cursor); /* end bitfield: h263_capability_bitfield */
ptvcursor_add(cursor, hf_skinny_annexNandWFutureUse, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h263VideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
} else if (payloadType == MEDIA_PAYLOAD_H264) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_H264");
{
- /* start struct : h264VideoCapability / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "h264VideoCapability");
ptvcursor_add(cursor, hf_skinny_profile, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_level, 4, ENC_LITTLE_ENDIAN);
@@ -6388,77 +6194,71 @@ handle_StartMultiMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pin
ptvcursor_add(cursor, hf_skinny_customMaxDPB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_customMaxBRandCPB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: h264VideoCapability */
}
ptvcursor_pop_subtree(cursor);
} else if (payloadType == MEDIA_PAYLOAD_VIEO) {
- /* start union : capability / maxsize: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType is Media_Payload_Vieo");
{
- /* start struct : vieoVideoCapability / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "vieoVideoCapability");
ptvcursor_add(cursor, hf_skinny_modelNumber, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_bandwidth, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: vieoVideoCapability */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 16);
}
ptvcursor_pop_subtree(cursor);
- /* end struct: vidParameters */
}
ptvcursor_pop_subtree(cursor);
} else if (payloadType >= MEDIA_PAYLOAD_CLEAR_CHAN) {
- /* start union : capability / maxsize: 44 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "payloadType >= Media_Payload_Clear_Chan");
{
- /* start struct : dataParameters / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "dataParameters");
ptvcursor_add(cursor, hf_skinny_protocolDependentData, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_maxBitRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: dataParameters */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 36);
}
{
- /* start struct : mTxMediaEncryptionKeyInfo / size: 18 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "mTxMediaEncryptionKeyInfo");
ptvcursor_add(cursor, hf_skinny_algorithmID, 4, ENC_LITTLE_ENDIAN);
keylen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_keylen, 2, ENC_LITTLE_ENDIAN);
saltlen = tvb_get_letohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_saltlen, 2, ENC_LITTLE_ENDIAN);
- {
- guint32 counter_2 = 0;
+ if (keylen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "key [ref: keylen = %d, max:16]", keylen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < keylen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < keylen) {
ptvcursor_add(cursor, hf_skinny_key, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: key */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
- {
- guint32 counter_2 = 0;
+ if (saltlen <= 16) { /* tvb integer size guard */
+ guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "salt [ref: saltlen = %d, max:16]", saltlen);
- for (counter_2 = 0; counter_2 < 16; counter_2++) {
- if (counter_2 < saltlen) {
+ for (counter_3 = 0; counter_3 < 16; counter_3++) {
+ if (counter_3 < saltlen) {
ptvcursor_add(cursor, hf_skinny_salt, 1, ENC_LITTLE_ENDIAN);
} else {
ptvcursor_advance(cursor, 1);
}
}
ptvcursor_pop_subtree(cursor); /* end for loop tree: salt */
+ } else {
+ ptvcursor_advance(cursor, (16 * 1)); /* guard kicked in -> skip the rest */;
}
ptvcursor_add(cursor, hf_skinny_isMKIPresent, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_keyDerivationRate, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: mTxMediaEncryptionKeyInfo */
}
ptvcursor_add(cursor, hf_skinny_streamPassThroughID, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_associatedStreamID, 4, ENC_LITTLE_ENDIAN);
@@ -6500,117 +6300,96 @@ handle_MiscellaneousCommandMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
command = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_command, 4, ENC_LITTLE_ENDIAN);
if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEPICTURE) {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdatePicture");
{
- /* start struct : videoFastUpdatePicture / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdatePicture");
ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numberOfGOBs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: videoFastUpdatePicture */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 8);
} else if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEGOB) {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdateGOB");
{
- /* start struct : videoFastUpdateGOB / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdateGOB");
ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numberOfGOBs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: videoFastUpdateGOB */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 8);
} else if (command == MISCCOMMANDTYPE_VIDEOFASTUPDATEMB) {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_videoFastUpdateMB");
{
- /* start struct : videoFastUpdateMB / size: 12 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "videoFastUpdateMB");
ptvcursor_add(cursor, hf_skinny_firstGOB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_firstMB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numberOfMBs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: videoFastUpdateMB */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 4);
} else if (command == MISCCOMMANDTYPE_LOSTPICTURE) {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_lostPicture");
{
- /* start struct : lostPicture / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lostPicture");
ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: lostPicture */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 8);
} else if (command == MISCCOMMANDTYPE_LOSTPARTIALPICTURE) {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_lostPartialPicture");
{
- /* start struct : lostPartialPicture / size: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lostPartialPicture");
{
- /* start struct : pictureReference / size: 8 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "pictureReference");
ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: pictureReference */
}
ptvcursor_add(cursor, hf_skinny_firstMB, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numberOfMBs, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: lostPartialPicture */
}
ptvcursor_pop_subtree(cursor);
} else if (command == MISCCOMMANDTYPE_RECOVERYREFERENCEPICTURE) {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_recoveryReferencePicture");
{
- /* start struct : recoveryReferencePictureValue / size: 12 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePictureValue");
recoveryReferencePictureCount = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_recoveryReferencePictureCount, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : recoveryReferencePicture / size: 8 */
+ if (recoveryReferencePictureCount <= 8) { /* tvb struct size guard */
guint32 counter_3 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePicture [ref: recoveryReferencePictureCount = %d, max:4]", recoveryReferencePictureCount);
- for (counter_3 = 0; counter_3 < 4; counter_3++) {
- if (counter_3 < recoveryReferencePictureCount) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePicture [%d / %d]", counter_3 + 1, recoveryReferencePictureCount);
- ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 8);
+ if (recoveryReferencePictureCount && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (recoveryReferencePictureCount * 8) && recoveryReferencePictureCount <= 4) { /* tvb counter size guard */
+ for (counter_3 = 0; counter_3 < 4; counter_3++) {
+ if (counter_3 < recoveryReferencePictureCount) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "recoveryReferencePicture [%d / %d]", counter_3 + 1, recoveryReferencePictureCount);
+ ptvcursor_add(cursor, hf_skinny_pictureNumber, 4, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_longTermPictureIndex, 4, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 8);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: recoveryReferencePicture */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: recoveryReferencePicture */
+ } else {
+ ptvcursor_advance(cursor, (recoveryReferencePictureCount * 8)); /* guard kicked in -> skip the rest */;
}
ptvcursor_pop_subtree(cursor);
- /* end struct: recoveryReferencePictureValue */
}
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 4);
} else if (command == MISCCOMMANDTYPE_TEMPORALSPATIALTRADEOFF) {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "command is MiscCommandType_temporalSpatialTradeOff");
ptvcursor_add(cursor, hf_skinny_temporalSpatialTradeOff, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
ptvcursor_advance(cursor, 12);
} else {
- /* start union : u / maxsize: 16 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "any command");
ptvcursor_add(cursor, hf_skinny_none, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
@@ -6816,7 +6595,6 @@ handle_UserToDeviceDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo
{
guint32 dataLength = 0;
{
- /* start struct : userToDeviceDataVersion1 / size: 2040 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "userToDeviceDataVersion1");
ptvcursor_add(cursor, hf_skinny_applicationID, 4, ENC_LITTLE_ENDIAN);
si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
@@ -6833,7 +6611,6 @@ handle_UserToDeviceDataMessageVersion1(ptvcursor_t *cursor, packet_info * pinfo
ptvcursor_add(cursor, hf_skinny_routingID, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_xml(cursor, hf_skinny_xmldata, pinfo, dataLength, 2000);
ptvcursor_pop_subtree(cursor);
- /* end struct: userToDeviceDataVersion1 */
}
}
@@ -6884,7 +6661,6 @@ handle_ConfigStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
guint32 userName_len = 0;
guint32 serverName_len = 0;
{
- /* start struct : sid / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
DeviceName_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), -1)+1;
if (DeviceName_len > 1) {
@@ -6895,7 +6671,6 @@ handle_ConfigStatV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sid */
}
ptvcursor_add(cursor, hf_skinny_numberOfLines, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_numberOfSpeedDials, 4, ENC_LITTLE_ENDIAN);
@@ -7274,14 +7049,12 @@ handle_QoSListenMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : appID / size: 112 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "appID");
ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII|ENC_NA);
ptvcursor_pop_subtree(cursor);
- /* end struct: appID */
}
}
@@ -7311,14 +7084,12 @@ handle_QoSPathMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : appID / size: 112 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "appID");
ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII|ENC_NA);
ptvcursor_pop_subtree(cursor);
- /* end struct: appID */
}
}
@@ -7382,14 +7153,12 @@ handle_QoSModifyMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_burstSize, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_peakRate, 4, ENC_LITTLE_ENDIAN);
{
- /* start struct : appID / size: 112 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "appID");
ptvcursor_add(cursor, hf_skinny_vendorID, 32, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_version, 16, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_appName, 32, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_subAppID, 32, ENC_ASCII|ENC_NA);
ptvcursor_pop_subtree(cursor);
- /* end struct: appID */
}
}
@@ -7441,6 +7210,7 @@ handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_ipv4or6(cursor, hf_skinny_transmitIpAddr_ipv4, hf_skinny_transmitIpAddr_ipv6);
ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
+ si->mediaTransmissionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_mediaTransmissionStatus, 4, ENC_LITTLE_ENDIAN);
}
@@ -7460,6 +7230,7 @@ handle_StartMultiMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info *
ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN);
dissect_skinny_ipv4or6(cursor, hf_skinny_transmitIpAddr_ipv4, hf_skinny_transmitIpAddr_ipv6);
ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN);
+ si->multimediaTransmissionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_multimediaTransmissionStatus, 4, ENC_LITTLE_ENDIAN);
}
@@ -7552,23 +7323,24 @@ handle_CallCountRespMessage(ptvcursor_t *cursor, packet_info * pinfo _U_)
ptvcursor_add(cursor, hf_skinny_startingLineInstance, 4, ENC_LITTLE_ENDIAN);
lineDataEntries = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_skinny_lineDataEntries, 4, ENC_LITTLE_ENDIAN);
- {
- /* start struct : lineData / size: 4 */
+ if (lineDataEntries <= 4) { /* tvb struct size guard */
guint32 counter_1 = 0;
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineData [ref: lineDataEntries = %d, max:42]", lineDataEntries);
- for (counter_1 = 0; counter_1 < 42; counter_1++) {
- if (counter_1 < lineDataEntries) {
- ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineData [%d / %d]", counter_1 + 1, lineDataEntries);
- ptvcursor_add(cursor, hf_skinny_maxNumCalls, 2, ENC_LITTLE_ENDIAN);
- ptvcursor_add(cursor, hf_skinny_busyTrigger, 2, ENC_LITTLE_ENDIAN);
- } else {
- ptvcursor_advance(cursor, 4);
+ if (lineDataEntries && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (lineDataEntries * 4) && lineDataEntries <= 42) { /* tvb counter size guard */
+ for (counter_1 = 0; counter_1 < 42; counter_1++) {
+ if (counter_1 < lineDataEntries) {
+ ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "lineData [%d / %d]", counter_1 + 1, lineDataEntries);
+ ptvcursor_add(cursor, hf_skinny_maxNumCalls, 2, ENC_LITTLE_ENDIAN);
+ ptvcursor_add(cursor, hf_skinny_busyTrigger, 2, ENC_LITTLE_ENDIAN);
+ } else {
+ ptvcursor_advance(cursor, 4);
+ }
+ ptvcursor_pop_subtree(cursor);
}
- ptvcursor_pop_subtree(cursor);
- /* end for loop tree: lineData */
}
ptvcursor_pop_subtree(cursor);
- /* end struct: lineData */
+ } else {
+ ptvcursor_advance(cursor, (lineDataEntries * 4)); /* guard kicked in -> skip the rest */;
}
}
@@ -7598,13 +7370,11 @@ static void
handle_SPCPRegisterTokenReq(ptvcursor_t *cursor, packet_info * pinfo _U_)
{
{
- /* start struct : sid / size: 24 */
ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "sid");
ptvcursor_add(cursor, hf_skinny_DeviceName, 16, ENC_ASCII|ENC_NA);
ptvcursor_add(cursor, hf_skinny_reserved_for_future_use, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_instance, 4, ENC_LITTLE_ENDIAN);
ptvcursor_pop_subtree(cursor);
- /* end struct: sid */
}
ptvcursor_add(cursor, hf_skinny_stationIpAddr, 4, ENC_LITTLE_ENDIAN);
ptvcursor_add(cursor, hf_skinny_deviceType, 4, ENC_LITTLE_ENDIAN);
@@ -7850,15 +7620,19 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
si->messId = data_messageid;
si->messageName = val_to_str_ext(data_messageid, &message_id_ext, "0x%08X (Unknown)");
si->callId = 0;
- si->lineId = 0;
+ si->lineId = -1;
si->passThruId = 0;
si->callState = 0;
+ si->hasCallInfo = FALSE;
g_free(si->callingParty);
si->callingParty = NULL;
g_free(si->calledParty);
si->calledParty = NULL;
- si->openreceiveStatus = 0;
- si->startmediatransmisionStatus = 0;
+ si->mediaReceptionStatus = -1;
+ si->mediaTransmissionStatus = -1;
+ si->multimediaReceptionStatus = -1;
+ si->multimediaTransmissionStatus = -1;
+ si->multicastReceptionStatus = -1;
/* In the interest of speed, if "tree" is NULL, don't do any work not
* necessary to generate protocol tree items.
diff --git a/epan/dissectors/packet-skinny.c.in b/epan/dissectors/packet-skinny.c.in
index b2ddc6b73c..961c1b717c 100644
--- a/epan/dissectors/packet-skinny.c.in
+++ b/epan/dissectors/packet-skinny.c.in
@@ -123,6 +123,7 @@ cog.out('static value_string_ext message_id_ext = VALUE_STRING_EXT_INIT(message_
]]]*/
/*[[[end]]]*/
+
/* Declare Enums and Defines */
/* [[[cog
for enum in skinny.enum:
@@ -358,15 +359,19 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
si->messId = data_messageid;
si->messageName = val_to_str_ext(data_messageid, &message_id_ext, "0x%08X (Unknown)");
si->callId = 0;
- si->lineId = 0;
+ si->lineId = -1;
si->passThruId = 0;
si->callState = 0;
+ si->hasCallInfo = FALSE;
g_free(si->callingParty);
si->callingParty = NULL;
g_free(si->calledParty);
si->calledParty = NULL;
- si->openreceiveStatus = 0;
- si->startmediatransmisionStatus = 0;
+ si->mediaReceptionStatus = -1;
+ si->mediaTransmissionStatus = -1;
+ si->multimediaReceptionStatus = -1;
+ si->multimediaTransmissionStatus = -1;
+ si->multicastReceptionStatus = -1;
/* In the interest of speed, if "tree" is NULL, don't do any work not
* necessary to generate protocol tree items.
diff --git a/epan/dissectors/packet-skinny.h b/epan/dissectors/packet-skinny.h
index 0de7b14fb8..2348e2e0f6 100644
--- a/epan/dissectors/packet-skinny.h
+++ b/epan/dissectors/packet-skinny.h
@@ -42,16 +42,19 @@ typedef struct _skinny_info_t
{
guint32 messId;
guint32 maxProtocolVersion;
- guint32 lineId;
+ gint32 lineId;
guint32 callId;
guint32 passThruId;
const gchar * messageName;
guint32 callState;
+ gboolean hasCallInfo;
gchar * callingParty;
gchar * calledParty;
- gboolean hasCallInfo;
- guint32 openreceiveStatus;
- guint32 startmediatransmisionStatus;
+ gint32 mediaReceptionStatus;
+ gint32 mediaTransmissionStatus;
+ gint32 multimediaReceptionStatus;
+ gint32 multimediaTransmissionStatus;
+ gint32 multicastReceptionStatus;
} skinny_info_t;
/*
diff --git a/epan/dissectors/packet-skinny.h.in b/epan/dissectors/packet-skinny.h.in
index e7c4528b0b..0ef076ab05 100644
--- a/epan/dissectors/packet-skinny.h.in
+++ b/epan/dissectors/packet-skinny.h.in
@@ -54,16 +54,19 @@ typedef struct _skinny_info_t
{
guint32 messId;
guint32 maxProtocolVersion;
- guint32 lineId;
+ gint32 lineId;
guint32 callId;
guint32 passThruId;
const gchar * messageName;
guint32 callState;
+ gboolean hasCallInfo;
gchar * callingParty;
gchar * calledParty;
- gboolean hasCallInfo;
- guint32 openreceiveStatus;
- guint32 startmediatransmisionStatus;
+ gint32 mediaReceptionStatus;
+ gint32 mediaTransmissionStatus;
+ gint32 multimediaReceptionStatus;
+ gint32 multimediaTransmissionStatus;
+ gint32 multicastReceptionStatus;
} skinny_info_t;
/*
diff --git a/tools/parse_xml2skinny_dissector.py b/tools/parse_xml2skinny_dissector.py
index 2dde4033ef..d6fea70be0 100755
--- a/tools/parse_xml2skinny_dissector.py
+++ b/tools/parse_xml2skinny_dissector.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python2
#
# Wireshark Dissector Generator for SkinnyProtocolOptimized.xml
#
@@ -38,8 +37,21 @@ import xml.sax.handler
indentation = 0
indent_str = ''
fieldsArray = {}
-si_fields = {"callReference" : "si->callId", "lineInstance": "si->lineId", "passThruPartyId" : "si->passThruId", "callState" : "si->callState", "callingParty" : "si->callingParty", "calledParty" : "si->calledParty", "openReceiveChannelStatus" : "si->openreceiveStatus", "startMediaTransmissionStatus" : "si->startmediatransmisionStatus"}
-debug = 1
+si_fields = {
+ "callReference" : "si->callId",
+ "lineInstance": "si->lineId",
+ "passThruPartyId" : "si->passThruId",
+ "callState" : "si->callState",
+ "callingParty" : "si->callingParty",
+ "calledParty" : "si->calledParty",
+ "mediaReceptionStatus" : "si->mediaReceptionStatus",
+ "mediaTransmissionStatus" : "si->mediaTransmissionStatus",
+ "multimediaReceptionStatus" : "si->multimediaReceptionStatus",
+ "multimediaTransmissionStatus" : "si->multimediaTransmissionStatus",
+ "multicastReceptionStatus" : "si->multicastReceptionStatus",
+}
+
+debug = 0
def xml2obj(src):
"""
@@ -49,7 +61,8 @@ def xml2obj(src):
non_id_char = re.compile('[^_0-9a-zA-Z]')
def _name_mangle(name):
- return non_id_char.sub('_', name)
+ return non_id_char.sub('_',
+ name)
class DataNode(object):
def __init__(self):
@@ -196,11 +209,12 @@ def xml2obj(src):
if declarations > 1:
ret += "\n"
- #ret += self.indent_out('if (!cursor || !pinfo) {return;}\n\n') # ugly check to get rid of compiler warning about unused parameters
if (self.fields is not None):
for fields in self.fields:
ret += '%s' %fields.dissect()
+
self.decr_indent()
+
ret += "}\n\n"
return ret
@@ -280,7 +294,7 @@ def xml2obj(src):
if self.type in int_sizes:
self.intsize = int_sizes[self.type]
else:
- print "ERROR integer %s with type: %s, could not be found" %(self.name, self.type)
+ print("ERROR integer %s with type: %s, could not be found" %(self.name, self.type))
if self.declare == "yes" and self.type != "ipport":
if self.basemessage.declared is None or self.name not in self.basemessage.declared:
@@ -305,9 +319,12 @@ def xml2obj(src):
size = self.size
if size:
- variable = 'counter_%d' %indentation
- ret += self.indent_out('{\n')
+ if self.size_fieldname:
+ ret += self.indent_out('if (%s <= %s) { /* tvb integer size guard */\n' %(self.size_fieldname, size))
+ else:
+ ret += self.indent_out('{\n')
self.incr_indent()
+ variable = 'counter_%d' %indentation
ret += self.indent_out('guint32 %s = 0;\n' %(variable));
if self.size_fieldname:
ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
@@ -336,7 +353,10 @@ def xml2obj(src):
ret += self.indent_out('%s = tvb_get_guint8(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(self.name))
if self.name in si_fields.keys():
- ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
+ if self.endianness == "big":
+ ret += self.indent_out('%s = tvb_get_ntohs(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
+ else:
+ ret += self.indent_out('%s = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor));\n' %(si_fields[self.name]))
ret += self.indent_out('ptvcursor_add(cursor, hf_skinny_%s, %d, %s);\n' %(self.name, self.intsize, self.endian))
@@ -350,6 +370,11 @@ def xml2obj(src):
ret += self.indent_out('}\n')
ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %self.name)
self.decr_indent()
+ if self.size_fieldname:
+ ret += self.indent_out('} else {\n')
+ self.incr_indent()
+ ret += self.indent_out('ptvcursor_advance(cursor, (%s * %s)); /* guard kicked in -> skip the rest */;\n' %(size, self.intsize))
+ self.decr_indent()
ret += self.indent_out('}\n')
return ret
@@ -369,7 +394,7 @@ def xml2obj(src):
if self.type in enum_sizes:
self.intsize = enum_sizes[self.type]
else:
- print "ERROR enum %s with type: %s, could not be found" %(self.name, self.type)
+ print("ERROR enum %s with type: %s, could not be found" %(self.name, self.type))
if self.declare == "yes":
if self.basemessage.declared is None or self.name not in self.basemessage.declared:
@@ -384,8 +409,6 @@ def xml2obj(src):
def dissect(self):
ret = ''
endian = "ENC_LITTLE_ENDIAN"
-
-
size = 0
if self.size_fieldname:
if self.basemessage.dynamic == "yes":
@@ -396,9 +419,12 @@ def xml2obj(src):
size = self.size
if size:
- variable = 'counter_%d' %indentation
- ret += self.indent_out('{\n')
+ if self.size_fieldname:
+ ret += self.indent_out('if (%s <= %s) { /* tvb enum size guard */\n' %(self.size_fieldname, self.maxsize))
+ else:
+ ret += self.indent_out('{\n')
self.incr_indent()
+ variable = 'counter_%d' %indentation
ret += self.indent_out('guint32 %s = 0;\n' %(variable));
if self.size_fieldname:
ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
@@ -433,6 +459,11 @@ def xml2obj(src):
ret += self.indent_out('}\n')
ret += self.indent_out('ptvcursor_pop_subtree(cursor); /* end for loop tree: %s */\n' %self.name)
self.decr_indent()
+ if self.size_fieldname:
+ ret += self.indent_out('} else {\n')
+ self.incr_indent()
+ ret += self.indent_out('ptvcursor_advance(cursor, (%s * %s)); /* guard kicked in -> skip the rest */;\n' %(size, self.intsize))
+ self.decr_indent()
ret += self.indent_out('}\n')
return ret
@@ -703,25 +734,36 @@ def xml2obj(src):
size = self.size
if size:
- ret += self.indent_out('{\n')
+ if self.size_fieldname:
+ ret += self.indent_out('if (%s <= %s) { /* tvb struct size guard */\n' %(self.size_fieldname, self.intsize))
+ else:
+ ret += self.indent_out('{\n')
self.incr_indent()
if debug:
ret += self.indent_out('/* start struct : %s / size: %d */\n' %(self.name, self.intsize))
+ #self.incr_indent()
ret += self.indent_out('guint32 %s = 0;\n' %(variable));
if self.size_fieldname:
- ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, size, self.size_fieldname))
+ ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [ref: %s = %%d, max:%s]", %s);\n' %(self.name, self.size_fieldname, self.maxsize, self.size_fieldname))
+ if self.maxsize:
+ ret += self.indent_out('if (%s && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (%s * %s) && %s <= %s) { /* tvb counter size guard */\n' %(self.size_fieldname, self.size_fieldname, self.intsize, self.size_fieldname, self.maxsize))
+ else:
+ ret += self.indent_out('if (%s && tvb_get_letohl(ptvcursor_tvbuff(cursor), 0) + 8 >= ptvcursor_current_offset(cursor) + (%s * %s)) { /* tvb counter size guard */\n' %(self.size_fieldname, self.size_fieldname, self.intsize))
+ self.incr_indent()
else:
ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s [max:%s]");\n' %(self.name, size))
+
ret += self.indent_out('for (%s = 0; %s < %s; %s++) {\n' %(variable, variable, size, variable));
if self.basemessage.dynamic == "no" and self.size_fieldname:
self.incr_indent()
ret += self.indent_out('if (%s < %s) {\n' %(variable,self.size_fieldname))
self.incr_indent()
else:
- ret += self.indent_out('{\n')
- self.incr_indent()
if debug:
- ret += self.indent_out('/* start struct : %s / size: %d */\n' %(self.name, self.intsize))
+ ret += self.indent_out('{ /* start struct : %s / size: %d */\n' %(self.name, self.intsize))
+ else:
+ ret += self.indent_out('{\n')
+ self.incr_indent()
ret += self.indent_out('ptvcursor_add_text_with_subtree(cursor, SUBTREE_UNDEFINED_LENGTH, ett_skinny_tree, "%s");\n' %(self.name))
if size:
@@ -742,15 +784,31 @@ def xml2obj(src):
if size:
ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
- if debug:
- ret += self.indent_out('/* end for loop tree: %s */\n' %self.name)
self.decr_indent()
- ret += self.indent_out('}\n')
+ if debug:
+ ret += self.indent_out('} /* end for loop tree: %s */\n' %self.name)
+ else:
+ ret += self.indent_out('}\n')
+ if self.size_fieldname:
+ self.decr_indent()
+ if debug:
+ ret += self.indent_out('} /* end counter tvb size guard */\n')
+ else:
+ ret += self.indent_out('}\n')
ret += self.indent_out('ptvcursor_pop_subtree(cursor);\n')
- ret += self.indent_out('/* end struct: %s */\n' %self.name)
+ if debug:
+ ret += self.indent_out('/* end struct: %s */\n' %self.name)
self.decr_indent()
- ret += self.indent_out('}\n')
+ if self.size_fieldname:
+ ret += self.indent_out('} else {\n')
+ self.incr_indent()
+ ret += self.indent_out('ptvcursor_advance(cursor, (%s * %s)); /* guard kicked in -> skip the rest */;\n' %(self.size_fieldname, self.intsize));
+ self.decr_indent()
+ if debug:
+ ret += self.indent_out('} /* end struct size guard */\n')
+ else:
+ ret += self.indent_out('}\n')
return ret
@@ -903,6 +961,7 @@ def xml2obj(src):
#skinny = xml2obj('SkinnyProtocolOptimized.xml')
#for message in skinny.message:
+# print(message)
# message.dissect()
#for key,value in fieldsArray.items():