diff --git a/epan/dissectors/packet-iax2.c b/epan/dissectors/packet-iax2.c index 589f1f0298..471d582bdd 100644 --- a/epan/dissectors/packet-iax2.c +++ b/epan/dissectors/packet-iax2.c @@ -103,6 +103,7 @@ static int hf_iax2_trunk_call_data = -1; static int hf_iax2_ie_id = -1; static int hf_iax2_length = -1; +static int hf_iax2_version = -1; static int hf_iax2_cap_g723_1 = -1; static int hf_iax2_cap_gsm = -1; static int hf_iax2_cap_ulaw = -1; @@ -126,6 +127,47 @@ static int hf_iax2_cap_h263 = -1; static int hf_iax2_cap_h263_plus = -1; static int hf_iax2_cap_h264 = -1; static int hf_iax2_cap_mpeg4 = -1; +static int hf_iax2_cap_vp8 = -1; +static int hf_iax2_cap_t140_red = -1; +static int hf_iax2_cap_t140 = -1; +static int hf_iax2_cap_g719 = -1; +static int hf_iax2_cap_speex16 = -1; +static int hf_iax2_cap_opus = -1; +static int hf_iax2_cap_testlaw = -1; + +static const int *hf_iax2_caps[] = { + &hf_iax2_cap_g723_1, + &hf_iax2_cap_gsm, + &hf_iax2_cap_ulaw, + &hf_iax2_cap_alaw, + &hf_iax2_cap_g726_aal2, + &hf_iax2_cap_adpcm, + &hf_iax2_cap_slinear, + &hf_iax2_cap_lpc10, + &hf_iax2_cap_g729a, + &hf_iax2_cap_speex, + &hf_iax2_cap_ilbc, + &hf_iax2_cap_g726, + &hf_iax2_cap_g722, + &hf_iax2_cap_siren7, + &hf_iax2_cap_siren14, + &hf_iax2_cap_slinear16, + &hf_iax2_cap_jpeg, + &hf_iax2_cap_png, + &hf_iax2_cap_h261, + &hf_iax2_cap_h263, + &hf_iax2_cap_h263_plus, + &hf_iax2_cap_h264, + &hf_iax2_cap_mpeg4, + &hf_iax2_cap_vp8, + &hf_iax2_cap_t140_red, + &hf_iax2_cap_t140, + &hf_iax2_cap_g719, + &hf_iax2_cap_speex16, + &hf_iax2_cap_opus, + &hf_iax2_cap_testlaw, + NULL +}; static int hf_iax2_fragment_unfinished = -1; static int hf_iax2_payload_data = -1; @@ -437,33 +479,41 @@ static const value_string iax_ies_type[] = { }; static value_string_ext iax_ies_type_ext = VALUE_STRING_EXT_INIT(iax_ies_type); -static const value_string codec_types[] = { - {AST_FORMAT_G723_1, "G.723.1 compression"}, - {AST_FORMAT_GSM, "GSM compression"}, - {AST_FORMAT_ULAW, "Raw mu-law data (G.711)"}, - {AST_FORMAT_ALAW, "Raw A-law data (G.711)"}, - {AST_FORMAT_G726_AAL2, "ADPCM (G.726, 32kbps)"}, - {AST_FORMAT_ADPCM, "ADPCM (IMA)"}, - {AST_FORMAT_SLINEAR, "Raw 16-bit Signed Linear (8000 Hz) PCM"}, - {AST_FORMAT_LPC10, "LPC10, 180 samples/frame"}, - {AST_FORMAT_G729A, "G.729a Audio"}, - {AST_FORMAT_SPEEX, "SpeeX Free Compression"}, - {AST_FORMAT_ILBC, "iLBC Free Compression"}, - {AST_FORMAT_G726, "G.726 compression"}, - {AST_FORMAT_G722, "G.722 wideband"}, - {AST_FORMAT_SIREN7, "G.722.1 32k wideband (aka Siren7)"}, - {AST_FORMAT_SIREN14, "G.722.1 Annex C 48k wideband (aka Siren14)"}, - {AST_FORMAT_SLINEAR16, "Raw 16kHz signed linear audio"}, - {AST_FORMAT_JPEG, "JPEG Images"}, - {AST_FORMAT_PNG, "PNG Images"}, - {AST_FORMAT_H261, "H.261 Video"}, - {AST_FORMAT_H263, "H.263 Video"}, - {AST_FORMAT_H263_PLUS, "H.263+ Video"}, - {AST_FORMAT_H264, "H.264 Video"}, - {AST_FORMAT_MP4_VIDEO, "MPEG4 Video"}, +#define CODEC_MASK(codec) (G_GUINT64_CONSTANT(1) << (codec)) + +static const val64_string codec_types[] = { + {CODEC_MASK(AST_FORMAT_G723_1), "G.723.1 compression"}, + {CODEC_MASK(AST_FORMAT_GSM), "GSM compression"}, + {CODEC_MASK(AST_FORMAT_ULAW), "Raw mu-law data (G.711)"}, + {CODEC_MASK(AST_FORMAT_ALAW), "Raw A-law data (G.711)"}, + {CODEC_MASK(AST_FORMAT_G726_AAL2), "ADPCM (G.726), 32kbps, AAL2 codeword packing)"}, + {CODEC_MASK(AST_FORMAT_ADPCM), "ADPCM (IMA)"}, + {CODEC_MASK(AST_FORMAT_SLINEAR), "Raw 16-bit Signed Linear (8000 Hz) PCM"}, + {CODEC_MASK(AST_FORMAT_LPC10), "LPC10, 180 samples/frame"}, + {CODEC_MASK(AST_FORMAT_G729A), "G.729a Audio"}, + {CODEC_MASK(AST_FORMAT_SPEEX), "SpeeX Free Compression"}, + {CODEC_MASK(AST_FORMAT_ILBC), "iLBC Free Compression"}, + {CODEC_MASK(AST_FORMAT_G726), "ADPCM (G.726, 32kbps, RFC3551 codeword packing)"}, + {CODEC_MASK(AST_FORMAT_G722), "G.722"}, + {CODEC_MASK(AST_FORMAT_SIREN7), "G.722.1 (also known as Siren7, 32kbps assumed)"}, + {CODEC_MASK(AST_FORMAT_SIREN14), "G.722.1 Annex C (also known as Siren14, 48kbps assumed)"}, + {CODEC_MASK(AST_FORMAT_SLINEAR16), "Raw 16-bit Signed Linear (16000 Hz) PCM"}, + {CODEC_MASK(AST_FORMAT_JPEG), "JPEG Images"}, + {CODEC_MASK(AST_FORMAT_PNG), "PNG Images"}, + {CODEC_MASK(AST_FORMAT_H261), "H.261 Video"}, + {CODEC_MASK(AST_FORMAT_H263), "H.263 Video"}, + {CODEC_MASK(AST_FORMAT_H263_PLUS), "H.263+ Video"}, + {CODEC_MASK(AST_FORMAT_H264), "H.264 Video"}, + {CODEC_MASK(AST_FORMAT_MP4_VIDEO), "MPEG4 Video"}, + {CODEC_MASK(AST_FORMAT_VP8), "VP8 Video"}, + {CODEC_MASK(AST_FORMAT_T140_RED), "T.140 RED Text format RFC 4103"}, + {CODEC_MASK(AST_FORMAT_T140), "T.140 Text format - ITU T.140, RFC 4103"}, + {CODEC_MASK(AST_FORMAT_G719), "G.719 (64 kbps assumed)"}, + {CODEC_MASK(AST_FORMAT_SPEEX16), "SpeeX Wideband (16kHz) Free Compression"}, + {CODEC_MASK(AST_FORMAT_OPUS), "Opus audio (8kHz, 16kHz, 24kHz, 48Khz)"}, + {CODEC_MASK(AST_FORMAT_TESTLAW), "Raw testing-law data (G.711)"}, {0, NULL} }; -static value_string_ext codec_types_ext = VALUE_STRING_EXT_INIT(codec_types); static const value_string iax_dataformats[] = { {AST_DATAFORMAT_NULL, "N/A (analogue call?)"}, @@ -1316,8 +1366,40 @@ static guint32 dissect_ies(tvbuff_t *tvb, packet_info *pinfo, guint32 offset, case IAX_IE_CAPABILITY: { - proto_tree *codec_tree; + if (ies_len != 4) { + proto_tree_add_expert(ies_tree, pinfo, &ei_iax_invalid_len, tvb, offset+1, 1); + break; + } + ie_item = + proto_tree_add_bitmask(ies_tree, tvb, offset + 2, ie_hf, + ett_iax2_codecs, hf_iax2_caps, ENC_BIG_ENDIAN); + break; + } + + + case IAX_IE_CAPABILITY2: + { + int version = tvb_get_guint8(tvb, offset + 2); + + proto_tree_add_uint(ies_tree, hf_iax2_version, tvb, offset + 2, 1, version); + + if (version == 0) { + if (ies_len != 9) { + proto_tree_add_expert(ies_tree, pinfo, &ei_iax_invalid_len, tvb, offset+1, 1); + break; + } + + ie_item = + proto_tree_add_bitmask(ies_tree, tvb, offset + 3, ie_hf, + ett_iax2_codecs, hf_iax2_caps, ENC_BIG_ENDIAN); + } + break; + } + + + case IAX_IE_FORMAT: + { if (ies_len != 4) { proto_tree_add_expert(ies_tree, pinfo, &ei_iax_invalid_len, tvb, offset+1, 1); break; @@ -1325,36 +1407,31 @@ static guint32 dissect_ies(tvbuff_t *tvb, packet_info *pinfo, guint32 offset, ie_item = proto_tree_add_item(ies_tree, ie_hf, - tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - codec_tree = - proto_item_add_subtree(ie_item, ett_iax2_codecs); - - proto_tree_add_item(codec_tree, hf_iax2_cap_g723_1, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_gsm, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_ulaw, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_alaw, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_g726_aal2, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_adpcm, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_slinear, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_lpc10, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_g729a, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_speex, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_ilbc, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_g726, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_g722, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_siren7, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_siren14, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_slinear16, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_jpeg, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_png, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_h261, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_h263, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_h263_plus, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_h264, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); - proto_tree_add_item(codec_tree, hf_iax2_cap_mpeg4, tvb, offset + 2, ies_len, ENC_BIG_ENDIAN); + tvb, offset + 2, 4, ENC_BIG_ENDIAN); break; } + + case IAX_IE_FORMAT2: + { + int version = tvb_get_guint8(tvb, offset + 2); + + proto_tree_add_uint(ies_tree, hf_iax2_version, tvb, offset + 2, 1, version); + + if (version == 0) { + if (ies_len != 9) { + proto_tree_add_expert(ies_tree, pinfo, &ei_iax_invalid_len, tvb, offset+1, 1); + break; + } + + ie_item = + proto_tree_add_item(ies_tree, ie_hf, + tvb, offset + 3, 8, ENC_BIG_ENDIAN); + } + break; + } + + case IAX_IE_APPARENT_ADDR: { proto_tree *sockaddr_tree; @@ -1496,10 +1573,20 @@ static guint32 uncompress_subclass(guint8 csub) if (csub == 0xff) return (guint32)-1; else - return 1 << (csub & 0x1F); + return csub & 0x3F; + } + else { + switch (csub) { + case 0x01: return 0; + case 0x02: return 1; + case 0x04: return 2; + case 0x08: return 3; + case 0x10: return 4; + case 0x20: return 5; + case 0x40: return 6; + default: return (guint32)-1; + } } - else - return (guint32)csub; } /* returns the new offset */ @@ -1785,7 +1872,7 @@ dissect_fullpacket(tvbuff_t *tvb, guint32 offset, if (packet_type_tree) { proto_item *item; proto_tree_add_item(packet_type_tree, hf_iax2_voice_csub, tvb, offset+9, 1, ENC_BIG_ENDIAN); - item = proto_tree_add_uint(packet_type_tree, hf_iax2_voice_codec, tvb, offset+9, 1, codec); + item = proto_tree_add_uint64(packet_type_tree, hf_iax2_voice_codec, tvb, offset+9, 1, CODEC_MASK(codec)); PROTO_ITEM_SET_GENERATED(item); } @@ -1811,7 +1898,7 @@ dissect_fullpacket(tvbuff_t *tvb, guint32 offset, proto_item *item; proto_tree_add_item(packet_type_tree, hf_iax2_video_csub, tvb, offset+9, 1, ENC_BIG_ENDIAN); proto_tree_add_item(packet_type_tree, hf_iax2_marker, tvb, offset+9, 1, ENC_BIG_ENDIAN); - item = proto_tree_add_uint(packet_type_tree, hf_iax2_video_codec, tvb, offset+9, 1, codec); + item = proto_tree_add_uint64(packet_type_tree, hf_iax2_video_codec, tvb, offset+9, 1, CODEC_MASK(codec)); PROTO_ITEM_SET_GENERATED(item); } @@ -2448,7 +2535,7 @@ static void dissect_payload(tvbuff_t *tvb, guint32 offset, #endif } else { col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", - val_to_str_ext(codec, &codec_types_ext, "unknown (0x%02x)")); + val64_to_str(CODEC_MASK(codec), codec_types, "unknown (0x%04x)")); } nbytes = tvb_reported_length(sub_tvb); @@ -2619,7 +2706,7 @@ proto_register_iax2(void) {&hf_iax2_voice_codec, {"CODEC", "iax2.voice.codec", - FT_UINT32, BASE_HEX | BASE_EXT_STRING, &codec_types_ext, 0x0, + FT_UINT64, BASE_HEX | BASE_VAL64_STRING, VALS64(codec_types), 0x0, "CODEC gives the codec used to encode audio data", HFILL}}, @@ -2636,7 +2723,7 @@ proto_register_iax2(void) {&hf_iax2_video_codec, {"CODEC", "iax2.video.codec", - FT_UINT32, BASE_HEX | BASE_EXT_STRING, &codec_types_ext, 0, + FT_UINT64, BASE_HEX | BASE_VAL64_STRING, VALS64(codec_types), 0, "The codec used to encode video data", HFILL}}, @@ -2787,7 +2874,7 @@ proto_register_iax2(void) {&hf_iax2_ies[IAX_IE_FORMAT], {"Desired codec format", "iax2.iax.format", - FT_UINT32, BASE_HEX | BASE_EXT_STRING, &codec_types_ext, 0x0, + FT_UINT64, BASE_HEX | BASE_VAL64_STRING, VALS64(codec_types), 0x0, NULL, HFILL}}, {&hf_iax2_ies[IAX_IE_LANGUAGE], @@ -3000,6 +3087,16 @@ proto_register_iax2(void) FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, + {&hf_iax2_ies[IAX_IE_CAPABILITY2], + {"64-bit codec capability", "iax2.iax.capability2", + FT_UINT64, BASE_HEX, NULL, 0x0, + NULL, HFILL}}, + + {&hf_iax2_ies[IAX_IE_FORMAT2], + {"64-bit codec format", "iax2.iax.format2", + FT_UINT64, BASE_HEX | BASE_VAL64_STRING, VALS64(codec_types), 0x0, + NULL, HFILL}}, + {&hf_iax2_ies[IAX_IE_DATAFORMAT], {"Data call format", "iax2.iax.dataformat", FT_UINT32, BASE_HEX, VALS(iax_dataformats), 0x0, @@ -3035,120 +3132,160 @@ proto_register_iax2(void) FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}}, + {&hf_iax2_version, + {"Version", "iax2.version", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL}}, + /* capabilities */ {&hf_iax2_cap_g723_1, {"G.723.1 compression", "iax2.cap.g723_1", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_G723_1, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_G723_1), NULL, HFILL }}, {&hf_iax2_cap_gsm, {"GSM compression", "iax2.cap.gsm", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_GSM, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_GSM), NULL, HFILL }}, {&hf_iax2_cap_ulaw, {"Raw mu-law data (G.711)", "iax2.cap.ulaw", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_ULAW, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_ULAW), NULL, HFILL }}, {&hf_iax2_cap_alaw, {"Raw A-law data (G.711)", "iax2.cap.alaw", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_ALAW, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_ALAW), NULL, HFILL } }, {&hf_iax2_cap_g726_aal2, - {"G.726 compression (AAL2 packing)", "iax2.cap.g726_aal2", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_G726_AAL2, + {"ADPCM (G.726, 32kbps, AAL2 codeword packing)", "iax2.cap.g726_aal2", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_G726_AAL2), NULL, HFILL }}, {&hf_iax2_cap_adpcm, {"ADPCM", "iax2.cap.adpcm", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_ADPCM, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_ADPCM), NULL, HFILL }}, {&hf_iax2_cap_slinear, {"Raw 16-bit Signed Linear (8000 Hz) PCM", "iax2.cap.slinear", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_SLINEAR, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_SLINEAR), NULL, HFILL }}, {&hf_iax2_cap_lpc10, - {"LPC10, 180 samples/frame", - "iax2.cap.lpc10", FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), - AST_FORMAT_LPC10, NULL, HFILL }}, + {"LPC10, 180 samples/frame", "iax2.cap.lpc10", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_LPC10), + NULL, HFILL }}, {&hf_iax2_cap_g729a, {"G.729a Audio", "iax2.cap.g729a", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_G729A, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_G729A), NULL, HFILL }}, {&hf_iax2_cap_speex, - {"SPEEX Audio", "iax2.cap.speex", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_SPEEX, + {"SpeeX Free Compression", "iax2.cap.speex", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_SPEEX), NULL, HFILL }}, {&hf_iax2_cap_ilbc, - {"iLBC Free compressed Audio", "iax2.cap.ilbc", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_ILBC, + {"iLBC Free Compression", "iax2.cap.ilbc", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_ILBC), NULL, HFILL }}, {&hf_iax2_cap_g726, {"ADPCM (G.726, 32kbps, RFC3551 codeword packing)", "iax2.cap.g726", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_G726, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_G726), NULL, HFILL }}, {&hf_iax2_cap_g722, - {"G.722 wideband audio", "iax2.cap.g722", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_G722, + {"G.722", "iax2.cap.g722", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_G722), NULL, HFILL }}, {&hf_iax2_cap_siren7, {"G.722.1 (also known as Siren7, 32kbps assumed)", "iax2.cap.siren7", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_SIREN7, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_SIREN7), NULL, HFILL }}, {&hf_iax2_cap_siren14, {"G.722.1 Annex C (also known as Siren14, 48kbps assumed)", "iax2.cap.siren14", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_SIREN14, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_SIREN14), NULL, HFILL }}, {&hf_iax2_cap_slinear16, {"Raw 16-bit Signed Linear (16000 Hz) PCM", "iax2.cap.slinear16", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_SLINEAR16, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_SLINEAR16), NULL, HFILL }}, {&hf_iax2_cap_jpeg, {"JPEG images", "iax2.cap.jpeg", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_JPEG, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_JPEG), NULL, HFILL }}, {&hf_iax2_cap_png, {"PNG images", "iax2.cap.png", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_PNG, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_PNG), NULL, HFILL }}, {&hf_iax2_cap_h261, {"H.261 video", "iax2.cap.h261", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_H261, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_H261), NULL, HFILL }}, {&hf_iax2_cap_h263, {"H.263 video", "iax2.cap.h263", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_H263, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_H263), NULL, HFILL }}, {&hf_iax2_cap_h263_plus, {"H.263+ video", "iax2.cap.h263_plus", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_H263_PLUS, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_H263_PLUS), NULL, HFILL }}, {&hf_iax2_cap_h264, {"H.264 video", "iax2.cap.h264", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_H264, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_H264), NULL, HFILL }}, {&hf_iax2_cap_mpeg4, {"MPEG4 video", "iax2.cap.mpeg4", - FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), AST_FORMAT_MP4_VIDEO, + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_MP4_VIDEO), + NULL, HFILL }}, + + {&hf_iax2_cap_vp8, + {"VP8 video", "iax2.cap.vp8", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_VP8), + NULL, HFILL }}, + + {&hf_iax2_cap_t140_red, + {"T.140 RED Text format RFC 4103", "iax2.cap.t140_red", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_T140_RED), + NULL, HFILL }}, + + {&hf_iax2_cap_t140, + {"T.140 Text format - ITU T.140, RFC 4103", "iax2.cap.t140", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_T140), + NULL, HFILL }}, + + {&hf_iax2_cap_g719, + {"G.719 (64 kbps assumed)", "iax2.cap.g719", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_G719), + NULL, HFILL }}, + + {&hf_iax2_cap_speex16, + {"SpeeX Wideband (16kHz) Free Compression", "iax2.cap.speex16", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_SPEEX16), + NULL, HFILL }}, + + {&hf_iax2_cap_opus, + {"Opus audio (8kHz, 16kHz, 24kHz, 48Khz)", "iax2.cap.opus", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_OPUS), + NULL, HFILL }}, + + {&hf_iax2_cap_testlaw, + {"Raw testing-law data (G.711)", "iax2.cap.testlaw", + FT_BOOLEAN, 64, TFS(&tfs_supported_not_supported), CODEC_MASK(AST_FORMAT_TESTLAW), NULL, HFILL }}, {&hf_iax2_fragment_unfinished, diff --git a/epan/iax2_codec_type.h b/epan/iax2_codec_type.h index 3604cf247f..84465b02c3 100644 --- a/epan/iax2_codec_type.h +++ b/epan/iax2_codec_type.h @@ -12,64 +12,70 @@ #define __IAX2_CODEC_TYPE_H__ -/* Ref: frame.h from Asterisk source */ +/* Ref: format_compatibility.h from Asterisk source */ /* Data formats for capabilities and frames alike */ /* suitable for use in iax2.codec dissector table */ /*! G.723.1 compression */ -#define AST_FORMAT_G723_1 (1 << 0) +#define AST_FORMAT_G723_1 0 /*! GSM compression */ -#define AST_FORMAT_GSM (1 << 1) +#define AST_FORMAT_GSM 1 /*! Raw mu-law data (G.711) */ -#define AST_FORMAT_ULAW (1 << 2) +#define AST_FORMAT_ULAW 2 /*! Raw A-law data (G.711) */ -#define AST_FORMAT_ALAW (1 << 3) -/*! ADPCM (G.726, 32kbps) */ -#define AST_FORMAT_G726_AAL2 (1 << 4) +#define AST_FORMAT_ALAW 3 +/*! ADPCM (G.726, 32kbps, AAL2 codeword packing) */ +#define AST_FORMAT_G726_AAL2 4 /*! ADPCM (IMA) */ -#define AST_FORMAT_ADPCM (1 << 5) +#define AST_FORMAT_ADPCM 5 /*! Raw 16-bit Signed Linear (8000 Hz) PCM */ -#define AST_FORMAT_SLINEAR (1 << 6) +#define AST_FORMAT_SLINEAR 6 /*! LPC10, 180 samples/frame */ -#define AST_FORMAT_LPC10 (1 << 7) +#define AST_FORMAT_LPC10 7 /*! G.729A audio */ -#define AST_FORMAT_G729A (1 << 8) +#define AST_FORMAT_G729A 8 /*! SpeeX Free Compression */ -#define AST_FORMAT_SPEEX (1 << 9) +#define AST_FORMAT_SPEEX 9 /*! iLBC Free Compression */ -#define AST_FORMAT_ILBC (1 << 10) +#define AST_FORMAT_ILBC 10 /*! ADPCM (G.726, 32kbps, RFC3551 codeword packing) */ -#define AST_FORMAT_G726 (1 << 11) +#define AST_FORMAT_G726 11 /*! G.722 */ -#define AST_FORMAT_G722 (1 << 12) +#define AST_FORMAT_G722 12 /*! G.722.1 (also known as Siren7, 32kbps assumed) */ -#define AST_FORMAT_SIREN7 (1 << 13) +#define AST_FORMAT_SIREN7 13 /*! G.722.1 Annex C (also known as Siren14, 48kbps assumed) */ -#define AST_FORMAT_SIREN14 (1 << 14) +#define AST_FORMAT_SIREN14 14 /*! Raw 16-bit Signed Linear (16000 Hz) PCM */ -#define AST_FORMAT_SLINEAR16 (1 << 15) -/*! Maximum audio format */ -#define AST_FORMAT_MAX_AUDIO (1 << 15) +#define AST_FORMAT_SLINEAR16 15 /*! JPEG Images */ -#define AST_FORMAT_JPEG (1 << 16) +#define AST_FORMAT_JPEG 16 /*! PNG Images */ -#define AST_FORMAT_PNG (1 << 17) +#define AST_FORMAT_PNG 17 /*! H.261 Video */ -#define AST_FORMAT_H261 (1 << 18) +#define AST_FORMAT_H261 18 /*! H.263 Video */ -#define AST_FORMAT_H263 (1 << 19) +#define AST_FORMAT_H263 19 /*! H.263+ Video */ -#define AST_FORMAT_H263_PLUS (1 << 20) +#define AST_FORMAT_H263_PLUS 20 /*! H.264 Video */ -#define AST_FORMAT_H264 (1 << 21) +#define AST_FORMAT_H264 21 /*! MPEG4 Video */ -#define AST_FORMAT_MP4_VIDEO (1 << 22) -/*! Max one */ -#define AST_FORMAT_MAX_VIDEO (1 << 24) +#define AST_FORMAT_MP4_VIDEO 22 +/*! VP8 Video */ +#define AST_FORMAT_VP8 23 +/*! T.140 RED Text format RFC 4103 */ +#define AST_FORMAT_T140_RED 26 +/*! T.140 Text format - ITU T.140, RFC 4103 */ +#define AST_FORMAT_T140 27 /*! G.719 (64 kbps assumed) */ -#define AST_FORMAT_G719 (1 << 32) +#define AST_FORMAT_G719 32 /*! SpeeX Wideband (16kHz) Free Compression */ -#define AST_FORMAT_SPEEX16 (1 << 33) +#define AST_FORMAT_SPEEX16 33 +/*! Opus audio (8kHz, 16kHz, 24kHz, 48Khz) */ +#define AST_FORMAT_OPUS 34 +/*! Raw testing-law data (G.711) */ +#define AST_FORMAT_TESTLAW 47 /* data format for IAX_IE_DATAFORMAT ie */