diff options
author | Jirka Novak <j.novak@netsystem.cz> | 2021-10-27 00:28:54 +0200 |
---|---|---|
committer | Wireshark GitLab Utility <gerald+gitlab-utility@wireshark.org> | 2021-10-27 06:47:55 +0000 |
commit | e880cf61d7a7c2f9c4f5aa05add465bb3debb642 (patch) | |
tree | 1ed25548c98d2dd6990320fcbc27588a78ad1f2f | |
parent | c87743f93393e3a96061259a416a76b94458ca06 (diff) |
Flow sequence: Shows more information about various skinny messages
For many skinny messages additional information is shown next to
message. It simplifies call flow analysis.
-rw-r--r-- | docbook/release-notes.adoc | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-skinny.c | 84 | ||||
-rw-r--r-- | epan/dissectors/packet-skinny.h | 1 | ||||
-rw-r--r-- | ui/voip_calls.c | 1 |
4 files changed, 87 insertions, 1 deletions
diff --git a/docbook/release-notes.adoc b/docbook/release-notes.adoc index 780e814e47..bb7f959dab 100644 --- a/docbook/release-notes.adoc +++ b/docbook/release-notes.adoc @@ -119,6 +119,8 @@ The following features are new (or have been significantly updated) since versio * RTP streams are created based on Skinny protocol messages +* Flow sequence shows more infor about various Skinny messages + // === Removed Features and Support // === Removed Dissectors diff --git a/epan/dissectors/packet-skinny.c b/epan/dissectors/packet-skinny.c index f1b81cc89e..4882fc69af 100644 --- a/epan/dissectors/packet-skinny.c +++ b/epan/dissectors/packet-skinny.c @@ -362,7 +362,7 @@ static const value_string DisplayLabels_200[] = { { 0x00014, "Off Hook" }, { 0x00015, "On Hook" }, { 0x00016, "Ring Out" }, - { 0x00017, "From" }, + { 0x00017, "From " }, { 0x00018, "Connected" }, { 0x00019, "Busy" }, { 0x0001a, "Line In Use" }, @@ -627,6 +627,28 @@ static const value_string KeyPadButton[] = { }; static value_string_ext KeyPadButton_ext = VALUE_STRING_EXT_INIT(KeyPadButton); +static const value_string KeyPadButton_short[] = { + { 0x00000, "0" }, + { 0x00001, "1" }, + { 0x00002, "2" }, + { 0x00003, "3" }, + { 0x00004, "4" }, + { 0x00005, "5" }, + { 0x00006, "6" }, + { 0x00007, "7" }, + { 0x00008, "8" }, + { 0x00009, "9" }, + { 0x0000a, "A" }, + { 0x0000b, "B" }, + { 0x0000c, "C" }, + { 0x0000d, "D" }, + { 0x0000e, "*" }, + { 0x0000f, "#" }, + { 0x00010, "+" }, + { 0x00000, NULL } +}; +static value_string_ext KeyPadButton_short_ext = VALUE_STRING_EXT_INIT(KeyPadButton_short); + static const value_string DeviceStimulus[] = { { 0x00001, "LastNumberRedial" }, { 0x00002, "SpeedDial" }, @@ -2338,6 +2360,7 @@ dissect_skinny_displayLabel(ptvcursor_t *cursor, int hfindex, gint length) } } if (show_replaced_str) { + si->additionalInfo = g_strdup_printf("\"%s\"", wmem_strbuf_get_str(wmem_new)); proto_item_append_text(item, " => \"%s\"" , wmem_strbuf_get_str(wmem_new)); } ptvcursor_advance(cursor, length); @@ -2497,6 +2520,13 @@ handle_KeypadButtonMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_ { guint32 hdr_data_length = tvb_get_letohl(ptvcursor_tvbuff(cursor), 0); + si->additionalInfo = g_strdup_printf("\"%s\"", + try_val_to_str_ext( + tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)), + &KeyPadButton_short_ext + ) + ); + ptvcursor_add(cursor, hf_skinny_kpButton, 4, ENC_LITTLE_ENDIAN); if (hdr_data_length > 8) { si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -2797,6 +2827,7 @@ handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_ guint32 passThroughPartyId = 0; address media_addr; guint16 media_port = 0; + char *media_addr_str = NULL; si->mediaReceptionStatus = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_mediaReceptionStatus, 4, ENC_LITTLE_ENDIAN); @@ -2806,6 +2837,9 @@ handle_OpenReceiveChannelAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_ ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN); srtp_add_address(pinfo, PT_UDP, &media_addr, media_port, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL); + media_addr_str = address_to_display(NULL, &media_addr); + si->additionalInfo = g_strdup_printf("%s:%d", media_addr_str, media_port); + wmem_free(NULL, media_addr_str); ptvcursor_add(cursor, hf_skinny_portNumber, 4, ENC_LITTLE_ENDIAN); passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); si->passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -4477,6 +4511,12 @@ handle_RegisterAckMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_c static void handle_StartToneMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { + si->additionalInfo = g_strdup_printf("\"%s\"", + try_val_to_str_ext( + tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)), + &DeviceTone_ext + ) + ); ptvcursor_add(cursor, hf_skinny_tone, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_tone_output_direction, 4, ENC_LITTLE_ENDIAN); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -4588,6 +4628,7 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U guint16 saltlen = 0; address media_addr; guint16 media_port = 0; + char *media_addr_str = NULL; ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN); passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -4599,6 +4640,9 @@ handle_StartMediaTransmissionMessage(ptvcursor_t *cursor, packet_info * pinfo _U ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN); srtp_add_address(pinfo, PT_UDP, &media_addr, media_port, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL); + media_addr_str = address_to_display(NULL, &media_addr); + si->additionalInfo = g_strdup_printf("%s:%d", media_addr_str, media_port); + wmem_free(NULL, media_addr_str); ptvcursor_add(cursor, hf_skinny_remotePortNumber, 4, ENC_LITTLE_ENDIAN); ptvcursor_add(cursor, hf_skinny_milliSecondPacketSize, 4, ENC_LITTLE_ENDIAN); compressionType = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -4792,6 +4836,10 @@ handle_CallInfoMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv ptvcursor_add_no_advance(cursor, hf_skinny_RestrictInformationType_BitsReserved, 4, ENC_LITTLE_ENDIAN); ptvcursor_advance(cursor, 4); ptvcursor_pop_subtree(cursor); /* end bitfield: partyPIRestrictionBits */ + + if (si->callingParty && si->calledParty) { + si->additionalInfo = g_strdup_printf("\"%s -> %s\"", si->callingParty, si->calledParty); + } } /* @@ -5265,6 +5313,7 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, s guint16 saltlen = 0; address media_addr; guint16 media_port = 0; + char *media_addr_str = NULL; ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN); passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -5353,6 +5402,9 @@ handle_OpenReceiveChannelMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, s ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN); srtp_add_address(pinfo, PT_UDP, &media_addr, media_port, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL); + media_addr_str = address_to_display(NULL, &media_addr); + si->additionalInfo = g_strdup_printf("%s:%d", media_addr_str, media_port); + wmem_free(NULL, media_addr_str); ptvcursor_add(cursor, hf_skinny_sourcePortNumber, 4, ENC_LITTLE_ENDIAN); } if (hdr_version >= V16_MSG_TYPE) { @@ -5600,6 +5652,12 @@ static void handle_CallStateMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_conv_info_t * skinny_conv _U_) { si->callState = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); + si->additionalInfo = g_strdup_printf("\"%s\"", + try_val_to_str_ext( + tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)), + &DCallState_ext + ) + ); ptvcursor_add(cursor, hf_skinny_callState, 4, ENC_LITTLE_ENDIAN); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -5791,6 +5849,13 @@ handle_DialedNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_ guint32 VariableDirnumSize = (hdr_version >= V18_MSG_TYPE) ? 25 : 24; if (hdr_version <= V17_MSG_TYPE) { + guint32 dialedNumber_len; + + dialedNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), 24)+1; + if (dialedNumber_len > 1) { + si->additionalInfo = g_strdup_printf("\"%s\"", tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), dialedNumber_len)); + } + ptvcursor_add(cursor, hf_skinny_dialedNumber, 24, ENC_ASCII|ENC_NA); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -5798,6 +5863,13 @@ handle_DialedNumberMessage(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_ ptvcursor_add(cursor, hf_skinny_callReference, 4, ENC_LITTLE_ENDIAN); } if (hdr_version >= V18_MSG_TYPE) { + guint32 dialedNumber_len; + + dialedNumber_len = tvb_strnlen(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), VariableDirnumSize)+1; + if (dialedNumber_len > 1) { + si->additionalInfo = g_strdup_printf("\"%s\"", tvb_format_stringzpad(pinfo->pool, ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor), dialedNumber_len)); + } + ptvcursor_add(cursor, hf_skinny_dialedNumber, VariableDirnumSize, ENC_ASCII|ENC_NA); si->lineId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); ptvcursor_add(cursor, hf_skinny_lineInstance, 4, ENC_LITTLE_ENDIAN); @@ -7384,6 +7456,10 @@ handle_CallInfoV2Message(ptvcursor_t *cursor, packet_info * pinfo _U_, skinny_co ptvcursor_advance(cursor, 1); } } + + if (si->callingParty && si->calledParty) { + si->additionalInfo = g_strdup_printf("\"%s -> %s\"", si->callingParty, si->calledParty); + } } /* @@ -7628,6 +7704,7 @@ handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo guint32 passThroughPartyId = 0; address media_addr; guint16 media_port = 0; + char *media_addr_str = NULL; ptvcursor_add(cursor, hf_skinny_conferenceId, 4, ENC_LITTLE_ENDIAN); passThroughPartyId = tvb_get_letohl(ptvcursor_tvbuff(cursor), ptvcursor_current_offset(cursor)); @@ -7641,6 +7718,9 @@ handle_StartMediaTransmissionAckMessage(ptvcursor_t *cursor, packet_info * pinfo ptvcursor_current_offset(cursor), ENC_LITTLE_ENDIAN); srtp_add_address(pinfo, PT_UDP, &media_addr, media_port, 0, "SKINNY", pinfo->num, false, NULL, NULL, NULL); + media_addr_str = address_to_display(NULL, &media_addr); + si->additionalInfo = g_strdup_printf("%s:%d", media_addr_str, media_port); + wmem_free(NULL, media_addr_str); 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); @@ -8113,6 +8193,8 @@ static int dissect_skinny_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre si->multimediaReceptionStatus = -1; si->multimediaTransmissionStatus = -1; si->multicastReceptionStatus = -1; + g_free(si->additionalInfo); + si->additionalInfo = NULL; col_add_fstr(pinfo->cinfo, COL_INFO,"%s ", si->messageName); col_set_fence(pinfo->cinfo, COL_INFO); diff --git a/epan/dissectors/packet-skinny.h b/epan/dissectors/packet-skinny.h index 779154b7c9..82632744e4 100644 --- a/epan/dissectors/packet-skinny.h +++ b/epan/dissectors/packet-skinny.h @@ -74,6 +74,7 @@ typedef struct _skinny_info_t gint32 multimediaTransmissionStatus; gint32 multicastReceptionStatus; //skinny_conv_info_t * skinny_conv; + gchar * additionalInfo; } skinny_info_t; /* diff --git a/ui/voip_calls.c b/ui/voip_calls.c index 6630b02107..dd3edb1a5a 100644 --- a/ui/voip_calls.c +++ b/ui/voip_calls.c @@ -4066,6 +4066,7 @@ skinny_calls_packet(void *tap_offset_ptr, packet_info *pinfo, epan_dissect_t *ed add_to_graph(tapinfo, pinfo, edt, si->messageName, comment, callsinfo->call_num, &(pinfo->src), &(pinfo->dst), 1); g_free(comment); + append_to_frame_graph(tapinfo, pinfo->num, si->additionalInfo, NULL); tapinfo->redraw |= REDRAW_SKINNY; |