forked from osmocom/wireshark
IAX: Improve decoding of IAX2 codec details
This adds a number of new codecs and extends the dissector to handle 64 bit codec masks correctly. Change-Id: Ib9ad5d178db269ba56bbac8ef6429cca49f6fc33 Reviewed-on: https://code.wireshark.org/review/30384 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
99c62bf797
commit
27070dd059
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue