forked from osmocom/wireshark
SIP: Add a filter for VIA parameter be-route
This commit is contained in:
parent
e6c4557c0b
commit
8be21c7867
|
@ -73,6 +73,7 @@ static dissector_handle_t sigcomp_handle;
|
||||||
static dissector_handle_t sip_diag_handle;
|
static dissector_handle_t sip_diag_handle;
|
||||||
static dissector_handle_t sip_uri_userinfo_handle;
|
static dissector_handle_t sip_uri_userinfo_handle;
|
||||||
static dissector_handle_t sip_via_branch_handle;
|
static dissector_handle_t sip_via_branch_handle;
|
||||||
|
static dissector_handle_t sip_via_be_route_handle;
|
||||||
/* Dissector to dissect the text part of an reason code */
|
/* Dissector to dissect the text part of an reason code */
|
||||||
static dissector_handle_t sip_reason_code_handle;
|
static dissector_handle_t sip_reason_code_handle;
|
||||||
|
|
||||||
|
@ -208,6 +209,7 @@ static gint hf_sip_via_oc_algo = -1;
|
||||||
static gint hf_sip_via_oc_validity = -1;
|
static gint hf_sip_via_oc_validity = -1;
|
||||||
static gint hf_sip_via_oc_seq = -1;
|
static gint hf_sip_via_oc_seq = -1;
|
||||||
static gint hf_sip_oc_seq_timestamp = -1;
|
static gint hf_sip_oc_seq_timestamp = -1;
|
||||||
|
static gint hf_sip_via_be_route = -1;
|
||||||
|
|
||||||
static gint hf_sip_rack_rseq_no = -1;
|
static gint hf_sip_rack_rseq_no = -1;
|
||||||
static gint hf_sip_rack_cseq_no = -1;
|
static gint hf_sip_rack_cseq_no = -1;
|
||||||
|
@ -280,6 +282,7 @@ static gint ett_sip_session_id = -1;
|
||||||
static gint ett_sip_p_access_net_info = -1;
|
static gint ett_sip_p_access_net_info = -1;
|
||||||
static gint ett_sip_p_charging_vector = -1;
|
static gint ett_sip_p_charging_vector = -1;
|
||||||
static gint ett_sip_feature_caps = -1;
|
static gint ett_sip_feature_caps = -1;
|
||||||
|
static gint ett_sip_via_be_route = -1;
|
||||||
|
|
||||||
static expert_field ei_sip_unrecognized_header = EI_INIT;
|
static expert_field ei_sip_unrecognized_header = EI_INIT;
|
||||||
static expert_field ei_sip_header_no_colon = EI_INIT;
|
static expert_field ei_sip_header_no_colon = EI_INIT;
|
||||||
|
@ -788,7 +791,8 @@ static header_parameter_t via_parameters_hf_array[] =
|
||||||
{"oc", &hf_sip_via_oc},
|
{"oc", &hf_sip_via_oc},
|
||||||
{"oc-validity", &hf_sip_via_oc_validity },
|
{"oc-validity", &hf_sip_via_oc_validity },
|
||||||
{"oc-seq", &hf_sip_via_oc_seq},
|
{"oc-seq", &hf_sip_via_oc_seq},
|
||||||
{"oc-algo", &hf_sip_via_oc_algo}
|
{"oc-algo", &hf_sip_via_oc_algo},
|
||||||
|
{"be-route", &hf_sip_via_be_route}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -2838,7 +2842,8 @@ static void dissect_sip_via_header(tvbuff_t *tvb, proto_tree *tree, gint start_o
|
||||||
{
|
{
|
||||||
if (equals_found)
|
if (equals_found)
|
||||||
{
|
{
|
||||||
proto_tree_add_item(tree, *(via_parameter->hf_item), tvb,
|
proto_item* via_parameter_item;
|
||||||
|
via_parameter_item = proto_tree_add_item(tree, *(via_parameter->hf_item), tvb,
|
||||||
parameter_name_end + 1, current_offset - parameter_name_end - 1,
|
parameter_name_end + 1, current_offset - parameter_name_end - 1,
|
||||||
ENC_UTF_8 | ENC_NA);
|
ENC_UTF_8 | ENC_NA);
|
||||||
|
|
||||||
|
@ -2875,6 +2880,10 @@ static void dissect_sip_via_header(tvbuff_t *tvb, proto_tree *tree, gint start_o
|
||||||
parameter_name_end + 1, current_offset - parameter_name_end - 1, &ts);
|
parameter_name_end + 1, current_offset - parameter_name_end - 1, &ts);
|
||||||
proto_item_set_generated(ti);
|
proto_item_set_generated(ti);
|
||||||
}
|
}
|
||||||
|
} else if (g_ascii_strcasecmp(param_name, "be-route") == 0) {
|
||||||
|
tvbuff_t* next_tvb;
|
||||||
|
next_tvb = tvb_new_subset_length_caplen(tvb, parameter_name_end + 1, current_offset - parameter_name_end - 1, current_offset - parameter_name_end - 1);
|
||||||
|
call_dissector(sip_via_be_route_handle, next_tvb, pinfo, proto_item_add_subtree(via_parameter_item, ett_sip_via_be_route));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -7321,6 +7330,11 @@ void proto_register_sip(void)
|
||||||
FT_STRING, BASE_NONE, NULL, 0x0,
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
||||||
NULL, HFILL }
|
NULL, HFILL }
|
||||||
},
|
},
|
||||||
|
{ &hf_sip_via_be_route,
|
||||||
|
{ "be-route", "sip.Via.be_route",
|
||||||
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
{ &hf_sip_p_acc_net_i_acc_type,
|
{ &hf_sip_p_acc_net_i_acc_type,
|
||||||
{ "access-type", "sip.P-Access-Network-Info.access-type",
|
{ "access-type", "sip.P-Access-Network-Info.access-type",
|
||||||
FT_STRING, BASE_NONE, NULL, 0x0,
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
||||||
|
@ -7526,7 +7540,8 @@ void proto_register_sip(void)
|
||||||
&ett_sip_session_id,
|
&ett_sip_session_id,
|
||||||
&ett_sip_p_access_net_info,
|
&ett_sip_p_access_net_info,
|
||||||
&ett_sip_p_charging_vector,
|
&ett_sip_p_charging_vector,
|
||||||
&ett_sip_feature_caps
|
&ett_sip_feature_caps,
|
||||||
|
&ett_sip_via_be_route
|
||||||
};
|
};
|
||||||
static gint *ett_raw[] = {
|
static gint *ett_raw[] = {
|
||||||
&ett_raw_text,
|
&ett_raw_text,
|
||||||
|
@ -7754,6 +7769,7 @@ proto_reg_handoff_sip(void)
|
||||||
sip_diag_handle = find_dissector("sip.diagnostic");
|
sip_diag_handle = find_dissector("sip.diagnostic");
|
||||||
sip_uri_userinfo_handle = find_dissector("sip.uri_userinfo");
|
sip_uri_userinfo_handle = find_dissector("sip.uri_userinfo");
|
||||||
sip_via_branch_handle = find_dissector("sip.via_branch");
|
sip_via_branch_handle = find_dissector("sip.via_branch");
|
||||||
|
sip_via_be_route_handle = find_dissector("sip.via_be_route");
|
||||||
/* Check for a dissector to parse Reason Code texts */
|
/* Check for a dissector to parse Reason Code texts */
|
||||||
sip_reason_code_handle = find_dissector("sip.reason_code");
|
sip_reason_code_handle = find_dissector("sip.reason_code");
|
||||||
/* SIP content type and internet media type used by other dissectors are the same */
|
/* SIP content type and internet media type used by other dissectors are the same */
|
||||||
|
|
Loading…
Reference in New Issue