forked from osmocom/wireshark
Mark all the items for TCAP statistics as generated
svn path=/trunk/; revision=21524
This commit is contained in:
parent
c84eda3a80
commit
20a3a52951
|
@ -47,8 +47,8 @@
|
|||
|
||||
/* Initialize the protocol and registered fields */
|
||||
int proto_tcap = -1;
|
||||
static int hf_tcap_tag = -1;
|
||||
static int hf_tcap_length = -1;
|
||||
static int hf_tcap_tag = -1;
|
||||
static int hf_tcap_length = -1;
|
||||
static int hf_tcap_data = -1;
|
||||
static int hf_tcap_tid = -1;
|
||||
|
||||
|
@ -183,18 +183,19 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
|
|||
gp_tcapsrt_info=tcapsrt_razinfo();
|
||||
tcap_subdissector_used=FALSE;
|
||||
gp_tcap_context=NULL;
|
||||
dissect_tcap_TCMessage(FALSE, tvb, 0, pinfo, tree, -1);
|
||||
dissect_tcap_TCMessage(FALSE, tvb, 0, pinfo, tree, -1);
|
||||
|
||||
if (gtcap_HandleSRT &&
|
||||
!tcap_subdissector_used ) {
|
||||
if (gtcap_DisplaySRT && tree) {
|
||||
stat_item = proto_tree_add_text(tree, tvb, 0, 0, "Stat");
|
||||
PROTO_ITEM_SET_GENERATED(stat_item);
|
||||
stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
|
||||
}
|
||||
p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
|
||||
tcap_private.context=p_tcap_context;
|
||||
|
||||
/* If the current message is TCAP only,
|
||||
/* If the current message is TCAP only,
|
||||
save the Application contexte name for the next messages */
|
||||
if ( p_tcap_context &&
|
||||
cur_oid &&
|
||||
|
@ -202,13 +203,13 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
|
|||
/* Save the application context and the sub dissector */
|
||||
ber_oid_dissector_table = find_dissector_table("ber.oid");
|
||||
strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
p_tcap_context->subdissector_handle=subdissector_handle;
|
||||
p_tcap_context->oid_present=TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (gtcap_HandleSRT &&
|
||||
p_tcap_context &&
|
||||
p_tcap_context->callback) {
|
||||
|
@ -222,14 +223,14 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
|
|||
void
|
||||
proto_reg_handoff_tcap(void)
|
||||
{
|
||||
|
||||
|
||||
static gboolean prefs_initialized = FALSE;
|
||||
|
||||
|
||||
if (! prefs_initialized) {
|
||||
sccp_ssn_table = find_dissector_table("sccp.ssn");
|
||||
prefs_initialized = TRUE;
|
||||
}
|
||||
|
||||
|
||||
data_handle = find_dissector("data");
|
||||
#include "packet-tcap-dis-tab.c"
|
||||
}
|
||||
|
@ -261,7 +262,7 @@ proto_register_tcap(void)
|
|||
{ "Transaction Id", "tcap.tid",
|
||||
FT_BYTES, BASE_HEX, NULL, 0,
|
||||
"", HFILL }
|
||||
},
|
||||
},
|
||||
/* Tcap Service Response Time */
|
||||
{ &hf_tcapsrt_SessionId,
|
||||
{ "Session Id",
|
||||
|
@ -293,7 +294,7 @@ proto_register_tcap(void)
|
|||
FT_UINT32, BASE_DEC, NULL, 0x0,
|
||||
"", HFILL }
|
||||
},
|
||||
#include "packet-tcap-hfarr.c"
|
||||
#include "packet-tcap-hfarr.c"
|
||||
};
|
||||
|
||||
/* Setup protocol subtree array */
|
||||
|
@ -356,7 +357,7 @@ proto_register_tcap(void)
|
|||
"Persistent stats for SRT",
|
||||
"Statistics for Response Time",
|
||||
>cap_PersistentSRT);
|
||||
|
||||
|
||||
prefs_register_uint_preference(tcap_module, "repetitiontimeout",
|
||||
"Repetition timeout",
|
||||
"Maximal delay for message repetion",
|
||||
|
@ -366,7 +367,7 @@ proto_register_tcap(void)
|
|||
"lost timeout",
|
||||
"Maximal delay for message lost",
|
||||
10, >cap_LostTimeout);
|
||||
|
||||
|
||||
ansi_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
|
||||
itu_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
|
||||
|
||||
|
@ -399,7 +400,7 @@ static void init_tcap(void) {
|
|||
range_foreach(ssn_range, range_delete_callback);
|
||||
g_free(ssn_range);
|
||||
}
|
||||
|
||||
|
||||
ssn_range = range_copy(global_ssn_range);
|
||||
range_foreach(ssn_range, range_add_callback);
|
||||
tcapsrt_init_routine();
|
||||
|
@ -417,11 +418,11 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
gint32 tag;
|
||||
guint32 len;
|
||||
gboolean ind_field;
|
||||
|
||||
|
||||
while (tvb_reported_length_remaining(tvb, offset) > 0)
|
||||
{
|
||||
saved_offset = offset;
|
||||
|
||||
|
||||
offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
|
||||
tag_offset = offset;
|
||||
offset = get_ber_length(tree, tvb, offset, &len, &ind_field);
|
||||
|
@ -441,9 +442,9 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
tag_offset, len_offset-tag_offset, len);
|
||||
if (len-(2*ind_field)) /*should always be positive unless we get an empty contructor pointless? */
|
||||
{
|
||||
next_tvb = tvb_new_subset(tvb, offset, len-(2*ind_field), len-(2*ind_field));
|
||||
next_tvb = tvb_new_subset(tvb, offset, len-(2*ind_field), len-(2*ind_field));
|
||||
dissect_tcap_param(pinfo, subtree,next_tvb,0);
|
||||
}
|
||||
}
|
||||
if (ind_field)
|
||||
proto_tree_add_text(subtree, tvb, offset+len-2, 2, "CONSTRUCTOR EOC");
|
||||
offset += len;
|
||||
|
@ -462,7 +463,7 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
saved_offset+1, 1, len);
|
||||
if (len) /* check for NULLS */
|
||||
{
|
||||
next_tvb = tvb_new_subset(tvb, offset, len, len);
|
||||
next_tvb = tvb_new_subset(tvb, offset, len, len);
|
||||
dissect_ber_octet_string(TRUE, pinfo, tree, next_tvb, 0, hf_tcap_data,
|
||||
NULL);
|
||||
}
|
||||
|
@ -473,7 +474,7 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
}
|
||||
|
||||
static void raz_tcap_private(struct tcap_private_t * p_tcap_private)
|
||||
{
|
||||
{
|
||||
memset(p_tcap_private,0,sizeof(struct tcap_private_t) );
|
||||
}
|
||||
|
||||
|
@ -493,7 +494,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
gint ind_field;
|
||||
proto_tree * stat_tree=NULL;
|
||||
proto_item * stat_item=NULL;
|
||||
/*
|
||||
/*
|
||||
* ok lets look at the oid and ssn and try and find a dissector, otherwise lets decode it.
|
||||
*/
|
||||
ber_oid_dissector_table = find_dissector_table("ber.oid");
|
||||
|
@ -504,10 +505,10 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
next_tvb = tvb_new_subset(tvb, s_offset, len+(offset-s_offset), len+(offset-s_offset));
|
||||
if (!next_tvb)
|
||||
return offset+len;
|
||||
|
||||
|
||||
dissect_ber_choice(pinfo, tree, next_tvb, 0,
|
||||
Component_choice, hf_index, ett_tcap_Component,NULL);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Handle The TCAP Service Response Time
|
||||
|
@ -517,6 +518,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
/* Create TCAP context and tree for display */
|
||||
if (gtcap_DisplaySRT && tree) {
|
||||
stat_item = proto_tree_add_text(tcap_stat_tree, tvb, offset, -1, "Stat");
|
||||
PROTO_ITEM_SET_GENERATED(stat_item);
|
||||
stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
|
||||
}
|
||||
p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
|
||||
|
@ -539,7 +541,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
/* ACN, changed, Fallback to lower version */
|
||||
/* and update the subdissector (purely formal) */
|
||||
strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
p_tcap_context->subdissector_handle=subdissector_handle;
|
||||
}
|
||||
|
@ -547,7 +549,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
} else {
|
||||
/* We do not have the OID in the TCAP context, so store it */
|
||||
strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
p_tcap_context->subdissector_handle=subdissector_handle;
|
||||
p_tcap_context->oid_present=TRUE;
|
||||
|
@ -561,8 +563,8 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
}
|
||||
} /* no OID */
|
||||
} /* no TCAP context */
|
||||
|
||||
if ( p_tcap_context
|
||||
|
||||
if ( p_tcap_context
|
||||
&& p_tcap_context->oid_present) {
|
||||
/* Take the subdissector from the context */
|
||||
subdissector_handle=p_tcap_context->subdissector_handle;
|
||||
|
@ -580,17 +582,17 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
* If we do not currently know the subdissector, we have to find it
|
||||
* - first, according to the OID
|
||||
* - then according to the SSN
|
||||
* - and at least, take the default Data handler
|
||||
* - and at least, take the default Data handler
|
||||
*/
|
||||
if (ber_oid_dissector_table && cur_oid) {
|
||||
/* Search if we can find the sub protocol according to the A.C.N */
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
/* found */
|
||||
is_subdissector=TRUE;
|
||||
} else {
|
||||
/* Search if we can found the sub protocol according to the SSN table */
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= get_itu_tcap_subdissector(pinfo->match_port))) {
|
||||
/* Found according to SSN */
|
||||
is_subdissector=TRUE;
|
||||
|
@ -613,11 +615,11 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
} else {
|
||||
/* We have it already */
|
||||
}
|
||||
|
||||
|
||||
/* Call the sub dissector if present, and not already called */
|
||||
if (is_subdissector)
|
||||
call_dissector(subdissector_handle, next_tvb, pinfo, tcap_top_tree);
|
||||
|
||||
|
||||
return offset+len;
|
||||
}
|
||||
|
||||
|
@ -632,7 +634,7 @@ dissect_tcap_TheExternUserInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
|
|||
guint32 len, start_offset;
|
||||
gint ind_field;
|
||||
|
||||
/*
|
||||
/*
|
||||
* ok lets look at the oid and ssn and try and find a dissector, otherwise lets decode it.
|
||||
*/
|
||||
ber_oid_dissector_table = find_dissector_table("ber.oid");
|
||||
|
@ -640,12 +642,12 @@ dissect_tcap_TheExternUserInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
|
|||
offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
|
||||
offset = get_ber_length(tree, tvb, offset, &len, &ind_field);
|
||||
|
||||
next_tvb = tvb_new_subset(tvb, start_offset, len +(offset - start_offset), len+(offset - start_offset));
|
||||
next_tvb = tvb_new_subset(tvb, start_offset, len +(offset - start_offset), len+(offset - start_offset));
|
||||
if (!next_tvb)
|
||||
return offset+len;
|
||||
|
||||
if (ber_oid_dissector_table && tcapext_oid){
|
||||
if(!dissector_try_string(ber_oid_dissector_table, tcapext_oid, next_tvb, pinfo, tcap_top_tree))
|
||||
if(!dissector_try_string(ber_oid_dissector_table, tcapext_oid, next_tvb, pinfo, tcap_top_tree))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -666,7 +668,7 @@ void call_tcap_dissector(dissector_handle_t handle, tvbuff_t* tvb, packet_info*
|
|||
requested_subdissector_handle = NULL;
|
||||
RETHROW;
|
||||
} ENDTRY;
|
||||
|
||||
|
||||
requested_subdissector_handle = NULL;
|
||||
|
||||
}
|
||||
|
|
|
@ -55,8 +55,8 @@
|
|||
|
||||
/* Initialize the protocol and registered fields */
|
||||
int proto_tcap = -1;
|
||||
static int hf_tcap_tag = -1;
|
||||
static int hf_tcap_length = -1;
|
||||
static int hf_tcap_tag = -1;
|
||||
static int hf_tcap_length = -1;
|
||||
static int hf_tcap_data = -1;
|
||||
static int hf_tcap_tid = -1;
|
||||
|
||||
|
@ -2405,18 +2405,19 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
|
|||
gp_tcapsrt_info=tcapsrt_razinfo();
|
||||
tcap_subdissector_used=FALSE;
|
||||
gp_tcap_context=NULL;
|
||||
dissect_tcap_TCMessage(FALSE, tvb, 0, pinfo, tree, -1);
|
||||
dissect_tcap_TCMessage(FALSE, tvb, 0, pinfo, tree, -1);
|
||||
|
||||
if (gtcap_HandleSRT &&
|
||||
!tcap_subdissector_used ) {
|
||||
if (gtcap_DisplaySRT && tree) {
|
||||
stat_item = proto_tree_add_text(tree, tvb, 0, 0, "Stat");
|
||||
PROTO_ITEM_SET_GENERATED(stat_item);
|
||||
stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
|
||||
}
|
||||
p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
|
||||
tcap_private.context=p_tcap_context;
|
||||
|
||||
/* If the current message is TCAP only,
|
||||
/* If the current message is TCAP only,
|
||||
save the Application contexte name for the next messages */
|
||||
if ( p_tcap_context &&
|
||||
cur_oid &&
|
||||
|
@ -2424,13 +2425,13 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
|
|||
/* Save the application context and the sub dissector */
|
||||
ber_oid_dissector_table = find_dissector_table("ber.oid");
|
||||
strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
p_tcap_context->subdissector_handle=subdissector_handle;
|
||||
p_tcap_context->oid_present=TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (gtcap_HandleSRT &&
|
||||
p_tcap_context &&
|
||||
p_tcap_context->callback) {
|
||||
|
@ -2444,14 +2445,14 @@ dissect_tcap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
|
|||
void
|
||||
proto_reg_handoff_tcap(void)
|
||||
{
|
||||
|
||||
|
||||
static gboolean prefs_initialized = FALSE;
|
||||
|
||||
|
||||
if (! prefs_initialized) {
|
||||
sccp_ssn_table = find_dissector_table("sccp.ssn");
|
||||
prefs_initialized = TRUE;
|
||||
}
|
||||
|
||||
|
||||
data_handle = find_dissector("data");
|
||||
|
||||
/*--- Included file: packet-tcap-dis-tab.c ---*/
|
||||
|
@ -2461,7 +2462,7 @@ proto_reg_handoff_tcap(void)
|
|||
|
||||
|
||||
/*--- End of included file: packet-tcap-dis-tab.c ---*/
|
||||
#line 235 "packet-tcap-template.c"
|
||||
#line 236 "packet-tcap-template.c"
|
||||
}
|
||||
|
||||
static void init_tcap(void);
|
||||
|
@ -2491,7 +2492,7 @@ proto_register_tcap(void)
|
|||
{ "Transaction Id", "tcap.tid",
|
||||
FT_BYTES, BASE_HEX, NULL, 0,
|
||||
"", HFILL }
|
||||
},
|
||||
},
|
||||
/* Tcap Service Response Time */
|
||||
{ &hf_tcapsrt_SessionId,
|
||||
{ "Session Id",
|
||||
|
@ -3024,7 +3025,7 @@ proto_register_tcap(void)
|
|||
"", HFILL }},
|
||||
|
||||
/*--- End of included file: packet-tcap-hfarr.c ---*/
|
||||
#line 297 "packet-tcap-template.c"
|
||||
#line 298 "packet-tcap-template.c"
|
||||
};
|
||||
|
||||
/* Setup protocol subtree array */
|
||||
|
@ -3089,7 +3090,7 @@ proto_register_tcap(void)
|
|||
&ett_tcap_ErrorCode,
|
||||
|
||||
/*--- End of included file: packet-tcap-ettarr.c ---*/
|
||||
#line 307 "packet-tcap-template.c"
|
||||
#line 308 "packet-tcap-template.c"
|
||||
};
|
||||
|
||||
/*static enum_val_t tcap_options[] = {
|
||||
|
@ -3142,7 +3143,7 @@ proto_register_tcap(void)
|
|||
"Persistent stats for SRT",
|
||||
"Statistics for Response Time",
|
||||
>cap_PersistentSRT);
|
||||
|
||||
|
||||
prefs_register_uint_preference(tcap_module, "repetitiontimeout",
|
||||
"Repetition timeout",
|
||||
"Maximal delay for message repetion",
|
||||
|
@ -3152,7 +3153,7 @@ proto_register_tcap(void)
|
|||
"lost timeout",
|
||||
"Maximal delay for message lost",
|
||||
10, >cap_LostTimeout);
|
||||
|
||||
|
||||
ansi_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
|
||||
itu_sub_dissectors = g_hash_table_new(g_direct_hash,g_direct_equal);
|
||||
|
||||
|
@ -3185,7 +3186,7 @@ static void init_tcap(void) {
|
|||
range_foreach(ssn_range, range_delete_callback);
|
||||
g_free(ssn_range);
|
||||
}
|
||||
|
||||
|
||||
ssn_range = range_copy(global_ssn_range);
|
||||
range_foreach(ssn_range, range_add_callback);
|
||||
tcapsrt_init_routine();
|
||||
|
@ -3203,11 +3204,11 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
gint32 tag;
|
||||
guint32 len;
|
||||
gboolean ind_field;
|
||||
|
||||
|
||||
while (tvb_reported_length_remaining(tvb, offset) > 0)
|
||||
{
|
||||
saved_offset = offset;
|
||||
|
||||
|
||||
offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
|
||||
tag_offset = offset;
|
||||
offset = get_ber_length(tree, tvb, offset, &len, &ind_field);
|
||||
|
@ -3227,9 +3228,9 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
tag_offset, len_offset-tag_offset, len);
|
||||
if (len-(2*ind_field)) /*should always be positive unless we get an empty contructor pointless? */
|
||||
{
|
||||
next_tvb = tvb_new_subset(tvb, offset, len-(2*ind_field), len-(2*ind_field));
|
||||
next_tvb = tvb_new_subset(tvb, offset, len-(2*ind_field), len-(2*ind_field));
|
||||
dissect_tcap_param(pinfo, subtree,next_tvb,0);
|
||||
}
|
||||
}
|
||||
if (ind_field)
|
||||
proto_tree_add_text(subtree, tvb, offset+len-2, 2, "CONSTRUCTOR EOC");
|
||||
offset += len;
|
||||
|
@ -3248,7 +3249,7 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
saved_offset+1, 1, len);
|
||||
if (len) /* check for NULLS */
|
||||
{
|
||||
next_tvb = tvb_new_subset(tvb, offset, len, len);
|
||||
next_tvb = tvb_new_subset(tvb, offset, len, len);
|
||||
dissect_ber_octet_string(TRUE, pinfo, tree, next_tvb, 0, hf_tcap_data,
|
||||
NULL);
|
||||
}
|
||||
|
@ -3259,7 +3260,7 @@ dissect_tcap_param(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offs
|
|||
}
|
||||
|
||||
static void raz_tcap_private(struct tcap_private_t * p_tcap_private)
|
||||
{
|
||||
{
|
||||
memset(p_tcap_private,0,sizeof(struct tcap_private_t) );
|
||||
}
|
||||
|
||||
|
@ -3279,7 +3280,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
gint ind_field;
|
||||
proto_tree * stat_tree=NULL;
|
||||
proto_item * stat_item=NULL;
|
||||
/*
|
||||
/*
|
||||
* ok lets look at the oid and ssn and try and find a dissector, otherwise lets decode it.
|
||||
*/
|
||||
ber_oid_dissector_table = find_dissector_table("ber.oid");
|
||||
|
@ -3290,10 +3291,10 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
next_tvb = tvb_new_subset(tvb, s_offset, len+(offset-s_offset), len+(offset-s_offset));
|
||||
if (!next_tvb)
|
||||
return offset+len;
|
||||
|
||||
|
||||
dissect_ber_choice(pinfo, tree, next_tvb, 0,
|
||||
Component_choice, hf_index, ett_tcap_Component,NULL);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Handle The TCAP Service Response Time
|
||||
|
@ -3303,6 +3304,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
/* Create TCAP context and tree for display */
|
||||
if (gtcap_DisplaySRT && tree) {
|
||||
stat_item = proto_tree_add_text(tcap_stat_tree, tvb, offset, -1, "Stat");
|
||||
PROTO_ITEM_SET_GENERATED(stat_item);
|
||||
stat_tree = proto_item_add_subtree(stat_item, ett_tcap_stat);
|
||||
}
|
||||
p_tcap_context=tcapsrt_call_matching(tvb, pinfo, stat_tree, gp_tcapsrt_info);
|
||||
|
@ -3325,7 +3327,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
/* ACN, changed, Fallback to lower version */
|
||||
/* and update the subdissector (purely formal) */
|
||||
strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
p_tcap_context->subdissector_handle=subdissector_handle;
|
||||
}
|
||||
|
@ -3333,7 +3335,7 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
} else {
|
||||
/* We do not have the OID in the TCAP context, so store it */
|
||||
strncpy(p_tcap_context->oid,cur_oid, LENGTH_OID);
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
p_tcap_context->subdissector_handle=subdissector_handle;
|
||||
p_tcap_context->oid_present=TRUE;
|
||||
|
@ -3347,8 +3349,8 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
}
|
||||
} /* no OID */
|
||||
} /* no TCAP context */
|
||||
|
||||
if ( p_tcap_context
|
||||
|
||||
if ( p_tcap_context
|
||||
&& p_tcap_context->oid_present) {
|
||||
/* Take the subdissector from the context */
|
||||
subdissector_handle=p_tcap_context->subdissector_handle;
|
||||
|
@ -3366,17 +3368,17 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
* If we do not currently know the subdissector, we have to find it
|
||||
* - first, according to the OID
|
||||
* - then according to the SSN
|
||||
* - and at least, take the default Data handler
|
||||
* - and at least, take the default Data handler
|
||||
*/
|
||||
if (ber_oid_dissector_table && cur_oid) {
|
||||
/* Search if we can find the sub protocol according to the A.C.N */
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= dissector_get_string_handle(ber_oid_dissector_table, cur_oid)) ) {
|
||||
/* found */
|
||||
is_subdissector=TRUE;
|
||||
} else {
|
||||
/* Search if we can found the sub protocol according to the SSN table */
|
||||
if ( (subdissector_handle
|
||||
if ( (subdissector_handle
|
||||
= get_itu_tcap_subdissector(pinfo->match_port))) {
|
||||
/* Found according to SSN */
|
||||
is_subdissector=TRUE;
|
||||
|
@ -3399,11 +3401,11 @@ dissect_tcap_TheComponent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
|
|||
} else {
|
||||
/* We have it already */
|
||||
}
|
||||
|
||||
|
||||
/* Call the sub dissector if present, and not already called */
|
||||
if (is_subdissector)
|
||||
call_dissector(subdissector_handle, next_tvb, pinfo, tcap_top_tree);
|
||||
|
||||
|
||||
return offset+len;
|
||||
}
|
||||
|
||||
|
@ -3418,7 +3420,7 @@ dissect_tcap_TheExternUserInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
|
|||
guint32 len, start_offset;
|
||||
gint ind_field;
|
||||
|
||||
/*
|
||||
/*
|
||||
* ok lets look at the oid and ssn and try and find a dissector, otherwise lets decode it.
|
||||
*/
|
||||
ber_oid_dissector_table = find_dissector_table("ber.oid");
|
||||
|
@ -3426,12 +3428,12 @@ dissect_tcap_TheExternUserInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
|
|||
offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
|
||||
offset = get_ber_length(tree, tvb, offset, &len, &ind_field);
|
||||
|
||||
next_tvb = tvb_new_subset(tvb, start_offset, len +(offset - start_offset), len+(offset - start_offset));
|
||||
next_tvb = tvb_new_subset(tvb, start_offset, len +(offset - start_offset), len+(offset - start_offset));
|
||||
if (!next_tvb)
|
||||
return offset+len;
|
||||
|
||||
if (ber_oid_dissector_table && tcapext_oid){
|
||||
if(!dissector_try_string(ber_oid_dissector_table, tcapext_oid, next_tvb, pinfo, tcap_top_tree))
|
||||
if(!dissector_try_string(ber_oid_dissector_table, tcapext_oid, next_tvb, pinfo, tcap_top_tree))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -3452,7 +3454,7 @@ void call_tcap_dissector(dissector_handle_t handle, tvbuff_t* tvb, packet_info*
|
|||
requested_subdissector_handle = NULL;
|
||||
RETHROW;
|
||||
} ENDTRY;
|
||||
|
||||
|
||||
requested_subdissector_handle = NULL;
|
||||
|
||||
}
|
||||
|
|
|
@ -136,7 +136,7 @@ static void
|
|||
dbg(unsigned level, char* fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
|
||||
if (level > debug_level) return;
|
||||
va_start(ap,fmt);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
|
@ -149,7 +149,7 @@ tcaphash_context_equal(gconstpointer k1, gconstpointer k2)
|
|||
{
|
||||
const struct tcaphash_context_key_t *key1 = (const struct tcaphash_context_key_t *) k1;
|
||||
const struct tcaphash_context_key_t *key2 = (const struct tcaphash_context_key_t *) k2;
|
||||
|
||||
|
||||
return (key1->session_id == key2->session_id);
|
||||
}
|
||||
|
||||
|
@ -169,14 +169,14 @@ tcaphash_begin_equal(gconstpointer k1, gconstpointer k2)
|
|||
const struct tcaphash_begin_info_key_t *key2 = (const struct tcaphash_begin_info_key_t *) k2;
|
||||
|
||||
if (key1->hashKey == key2->hashKey) {
|
||||
|
||||
|
||||
if ( ( (key1->opc_hash == key2->opc_hash) &&
|
||||
(key1->dpc_hash == key2->dpc_hash) &&
|
||||
(key1->tid == key2->tid) )
|
||||
(key1->tid == key2->tid) )
|
||||
||
|
||||
( (key1->opc_hash == key2->dpc_hash) &&
|
||||
(key1->dpc_hash == key2->opc_hash) &&
|
||||
(key1->tid == key2->tid) )
|
||||
(key1->tid == key2->tid) )
|
||||
)
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ tcaphash_cont_equal(gconstpointer k1, gconstpointer k2)
|
|||
(key1->src_tid == key2->src_tid) &&
|
||||
(key1->dst_tid == key2->dst_tid) ) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if ( (key1->opc_hash == key2->dpc_hash) &&
|
||||
(key1->dpc_hash == key2->opc_hash) &&
|
||||
(key1->src_tid == key2->dst_tid) &&
|
||||
|
@ -238,11 +238,11 @@ tcaphash_end_equal(gconstpointer k1, gconstpointer k2)
|
|||
if (key1->hashKey == key2->hashKey) {
|
||||
if ( ( (key1->opc_hash == key2->opc_hash) &&
|
||||
(key1->dpc_hash == key2->dpc_hash) &&
|
||||
(key1->tid == key2->tid) )
|
||||
(key1->tid == key2->tid) )
|
||||
||
|
||||
( (key1->opc_hash == key2->dpc_hash) &&
|
||||
(key1->dpc_hash == key2->opc_hash) &&
|
||||
(key1->tid == key2->tid) ) )
|
||||
(key1->tid == key2->tid) ) )
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
@ -258,8 +258,8 @@ tcaphash_end_calchash(gconstpointer k)
|
|||
return hashkey;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update a record with the data of the Request
|
||||
/*
|
||||
* Update a record with the data of the Request
|
||||
*/
|
||||
static void
|
||||
update_tcaphash_begincall(struct tcaphash_begincall_t *p_tcaphash_begincall,
|
||||
|
@ -271,9 +271,9 @@ update_tcaphash_begincall(struct tcaphash_begincall_t *p_tcaphash_begincall,
|
|||
p_tcaphash_begincall->context->begin_time = pinfo->fd->abs_ts;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Append a new dialogue, using the same Key, to the chained list
|
||||
* The time is stored too
|
||||
* The time is stored too
|
||||
*/
|
||||
static struct tcaphash_begincall_t *
|
||||
append_tcaphash_begincall(struct tcaphash_begincall_t *prev_begincall,
|
||||
|
@ -281,7 +281,7 @@ append_tcaphash_begincall(struct tcaphash_begincall_t *prev_begincall,
|
|||
packet_info *pinfo)
|
||||
{
|
||||
struct tcaphash_begincall_t *p_new_tcaphash_begincall = NULL;
|
||||
|
||||
|
||||
/* Append the transaction to the list, when the same key is found
|
||||
This should append when the tcap-transaction Id is reused */
|
||||
|
||||
|
@ -290,7 +290,7 @@ append_tcaphash_begincall(struct tcaphash_begincall_t *prev_begincall,
|
|||
p_tcaphash_context->begincall=p_new_tcaphash_begincall;
|
||||
p_new_tcaphash_begincall->beginkey=prev_begincall->beginkey;
|
||||
p_new_tcaphash_begincall->context->first_frame = pinfo->fd->num;
|
||||
p_new_tcaphash_begincall->next_begincall=NULL;
|
||||
p_new_tcaphash_begincall->next_begincall=NULL;
|
||||
p_new_tcaphash_begincall->previous_begincall=prev_begincall;
|
||||
p_new_tcaphash_begincall->father=FALSE;
|
||||
|
||||
|
@ -313,15 +313,15 @@ append_tcaphash_contcall(struct tcaphash_contcall_t *prev_contcall,
|
|||
struct tcaphash_context_t *p_tcaphash_context)
|
||||
{
|
||||
struct tcaphash_contcall_t *p_new_tcaphash_contcall = NULL;
|
||||
|
||||
|
||||
/* Append the transaction to the list, when the same key is found
|
||||
This should append when the tcap-transaction Id is reused */
|
||||
|
||||
|
||||
p_new_tcaphash_contcall = se_alloc0(sizeof(struct tcaphash_contcall_t));
|
||||
p_new_tcaphash_contcall->context=p_tcaphash_context;
|
||||
p_tcaphash_context->contcall=p_new_tcaphash_contcall;
|
||||
p_new_tcaphash_contcall->contkey=prev_contcall->contkey;
|
||||
p_new_tcaphash_contcall->next_contcall=NULL;
|
||||
p_new_tcaphash_contcall->next_contcall=NULL;
|
||||
p_new_tcaphash_contcall->previous_contcall=prev_contcall;
|
||||
p_new_tcaphash_contcall->father=FALSE;
|
||||
|
||||
|
@ -339,7 +339,7 @@ append_tcaphash_endcall(struct tcaphash_endcall_t *prev_endcall,
|
|||
struct tcaphash_context_t *p_tcaphash_context)
|
||||
{
|
||||
struct tcaphash_endcall_t *p_new_tcaphash_endcall = NULL;
|
||||
|
||||
|
||||
/* Append the transaction to the list, when the same key is found
|
||||
This should append when the tcap-transaction Id is reused */
|
||||
|
||||
|
@ -347,7 +347,7 @@ append_tcaphash_endcall(struct tcaphash_endcall_t *prev_endcall,
|
|||
p_new_tcaphash_endcall->context=p_tcaphash_context;
|
||||
p_tcaphash_context->endcall=p_new_tcaphash_endcall;
|
||||
p_new_tcaphash_endcall->endkey=prev_endcall->endkey;
|
||||
p_new_tcaphash_endcall->next_endcall=NULL;
|
||||
p_new_tcaphash_endcall->next_endcall=NULL;
|
||||
p_new_tcaphash_endcall->previous_endcall=prev_endcall;
|
||||
p_new_tcaphash_endcall->father=FALSE;
|
||||
|
||||
|
@ -360,8 +360,8 @@ append_tcaphash_endcall(struct tcaphash_endcall_t *prev_endcall,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Find the dialog by Key and Time
|
||||
/*
|
||||
* Find the dialog by Key and Time
|
||||
*/
|
||||
static struct tcaphash_begincall_t *
|
||||
find_tcaphash_begin(struct tcaphash_begin_info_key_t *p_tcaphash_begin_key,
|
||||
|
@ -369,7 +369,7 @@ find_tcaphash_begin(struct tcaphash_begin_info_key_t *p_tcaphash_begin_key,
|
|||
{
|
||||
struct tcaphash_begincall_t *p_tcaphash_begincall = NULL;
|
||||
p_tcaphash_begincall = (struct tcaphash_begincall_t *)g_hash_table_lookup(tcaphash_begin, p_tcaphash_begin_key);
|
||||
|
||||
|
||||
if(p_tcaphash_begincall) {
|
||||
do {
|
||||
if ( p_tcaphash_begincall->context ) {
|
||||
|
@ -379,7 +379,7 @@ find_tcaphash_begin(struct tcaphash_begin_info_key_t *p_tcaphash_begin_key,
|
|||
( !isBegin &&
|
||||
pinfo->fd->num >= p_tcaphash_begincall->context->first_frame &&
|
||||
( p_tcaphash_begincall->context->last_frame?pinfo->fd->num <= p_tcaphash_begincall->context->last_frame:1 )
|
||||
)
|
||||
)
|
||||
) {
|
||||
/* We have a dialogue, with this key, opened before this request */
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
|
@ -401,7 +401,7 @@ find_tcaphash_begin(struct tcaphash_begin_info_key_t *p_tcaphash_begin_key,
|
|||
} else {
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(23,"Not in Bhash ");
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -414,7 +414,7 @@ find_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
{
|
||||
struct tcaphash_contcall_t *p_tcaphash_contcall = NULL;
|
||||
p_tcaphash_contcall = (struct tcaphash_contcall_t *)g_hash_table_lookup(tcaphash_cont, p_tcaphash_cont_key);
|
||||
|
||||
|
||||
if(p_tcaphash_contcall) {
|
||||
do {
|
||||
if ( p_tcaphash_contcall->context &&
|
||||
|
@ -423,7 +423,7 @@ find_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
/* We have a dialogue, with this key, opened before this request */
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(10,"C%d ", p_tcaphash_contcall->context->session_id);
|
||||
#endif
|
||||
#endif
|
||||
return p_tcaphash_contcall;
|
||||
break;
|
||||
} else {
|
||||
|
@ -444,7 +444,7 @@ find_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(23,"Not in Chash ");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -454,23 +454,23 @@ find_tcaphash_end(struct tcaphash_end_info_key_t *p_tcaphash_end_key,
|
|||
{
|
||||
struct tcaphash_endcall_t *p_tcaphash_endcall = NULL;
|
||||
p_tcaphash_endcall = (struct tcaphash_endcall_t *)g_hash_table_lookup(tcaphash_end, p_tcaphash_end_key);
|
||||
|
||||
|
||||
if(p_tcaphash_endcall) {
|
||||
do {
|
||||
if ( p_tcaphash_endcall->context ) {
|
||||
if ( ( isEnd &&
|
||||
(p_tcaphash_endcall->context->last_frame?pinfo->fd->num == p_tcaphash_endcall->context->last_frame:1)
|
||||
(p_tcaphash_endcall->context->last_frame?pinfo->fd->num == p_tcaphash_endcall->context->last_frame:1)
|
||||
)
|
||||
||
|
||||
( !isEnd &&
|
||||
pinfo->fd->num >= p_tcaphash_endcall->context->first_frame &&
|
||||
(p_tcaphash_endcall->context->last_frame?pinfo->fd->num <= p_tcaphash_endcall->context->last_frame:1)
|
||||
(p_tcaphash_endcall->context->last_frame?pinfo->fd->num <= p_tcaphash_endcall->context->last_frame:1)
|
||||
)
|
||||
) {
|
||||
/* We have a dialogue, with this key, opened before this request */
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(10,"E%d ", p_tcaphash_endcall->context->session_id);
|
||||
#endif
|
||||
#endif
|
||||
return p_tcaphash_endcall;
|
||||
break;
|
||||
} else {
|
||||
|
@ -492,12 +492,12 @@ find_tcaphash_end(struct tcaphash_end_info_key_t *p_tcaphash_end_key,
|
|||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(23,"Not in Ehash ");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* New record to create, to identify a new transaction
|
||||
* New record to create, to identify a new transaction
|
||||
*/
|
||||
static struct tcaphash_context_t *
|
||||
new_tcaphash_context(struct tcaphash_context_key_t *p_tcaphash_context_key,
|
||||
|
@ -505,8 +505,8 @@ new_tcaphash_context(struct tcaphash_context_key_t *p_tcaphash_context_key,
|
|||
{
|
||||
struct tcaphash_context_key_t *p_new_tcaphash_context_key;
|
||||
struct tcaphash_context_t *p_new_tcaphash_context = NULL;
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
with the tcap transaction Id as Main Key
|
||||
Once created, this entry will be updated later */
|
||||
|
||||
|
@ -526,7 +526,7 @@ new_tcaphash_context(struct tcaphash_context_key_t *p_tcaphash_context_key,
|
|||
}
|
||||
|
||||
/*
|
||||
* New record to create, to identify a new transaction
|
||||
* New record to create, to identify a new transaction
|
||||
*/
|
||||
static struct tcaphash_begincall_t *
|
||||
new_tcaphash_begin(struct tcaphash_begin_info_key_t *p_tcaphash_begin_key,
|
||||
|
@ -534,8 +534,8 @@ new_tcaphash_begin(struct tcaphash_begin_info_key_t *p_tcaphash_begin_key,
|
|||
{
|
||||
struct tcaphash_begin_info_key_t *p_new_tcaphash_begin_key;
|
||||
struct tcaphash_begincall_t *p_new_tcaphash_begincall = NULL;
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
with the tcap transaction Id as Main Key
|
||||
Once created, this entry will be updated later */
|
||||
|
||||
|
@ -564,7 +564,7 @@ new_tcaphash_begin(struct tcaphash_begin_info_key_t *p_tcaphash_begin_key,
|
|||
|
||||
|
||||
/*
|
||||
* New record to create, to identify a new transaction
|
||||
* New record to create, to identify a new transaction
|
||||
*/
|
||||
static struct tcaphash_contcall_t *
|
||||
new_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
||||
|
@ -572,8 +572,8 @@ new_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
{
|
||||
struct tcaphash_cont_info_key_t *p_new_tcaphash_cont_key;
|
||||
struct tcaphash_contcall_t *p_new_tcaphash_contcall = NULL;
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
with the tcap transaction Id as Main Key
|
||||
Once created, this entry will be updated later */
|
||||
|
||||
|
@ -583,9 +583,9 @@ new_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
p_new_tcaphash_cont_key->dst_tid = p_tcaphash_cont_key->dst_tid;
|
||||
p_new_tcaphash_cont_key->opc_hash = p_tcaphash_cont_key->opc_hash;
|
||||
p_new_tcaphash_cont_key->dpc_hash = p_tcaphash_cont_key->dpc_hash;
|
||||
|
||||
|
||||
p_new_tcaphash_contcall = se_alloc0(sizeof(struct tcaphash_contcall_t));
|
||||
p_new_tcaphash_contcall->contkey=p_new_tcaphash_cont_key;
|
||||
p_new_tcaphash_contcall->contkey=p_new_tcaphash_cont_key;
|
||||
p_new_tcaphash_contcall->context=p_tcaphash_context;
|
||||
p_tcaphash_context->contcall=p_new_tcaphash_contcall;
|
||||
p_new_tcaphash_contcall->father=TRUE;
|
||||
|
@ -602,7 +602,7 @@ new_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
|
||||
|
||||
/*
|
||||
* New record to create, to identify a new transaction
|
||||
* New record to create, to identify a new transaction
|
||||
*/
|
||||
static struct tcaphash_endcall_t *
|
||||
new_tcaphash_end(struct tcaphash_end_info_key_t *p_tcaphash_end_key,
|
||||
|
@ -610,8 +610,8 @@ new_tcaphash_end(struct tcaphash_end_info_key_t *p_tcaphash_end_key,
|
|||
{
|
||||
struct tcaphash_end_info_key_t *p_new_tcaphash_end_key;
|
||||
struct tcaphash_endcall_t *p_new_tcaphash_endcall = NULL;
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
|
||||
/* Register the transaction in the hash table
|
||||
with the tcap transaction Id as Main Key
|
||||
Once created, this entry will be updated later */
|
||||
|
||||
|
@ -624,11 +624,11 @@ new_tcaphash_end(struct tcaphash_end_info_key_t *p_tcaphash_end_key,
|
|||
p_new_tcaphash_endcall = se_alloc0(sizeof(struct tcaphash_endcall_t));
|
||||
p_new_tcaphash_endcall->endkey=p_new_tcaphash_end_key;
|
||||
p_new_tcaphash_endcall->context=p_tcaphash_context;
|
||||
p_tcaphash_context->endcall=p_new_tcaphash_endcall;
|
||||
p_tcaphash_context->endcall=p_new_tcaphash_endcall;
|
||||
p_new_tcaphash_endcall->father=TRUE;
|
||||
p_new_tcaphash_endcall->next_endcall=NULL;
|
||||
p_new_tcaphash_endcall->previous_endcall=NULL;
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(10,"E%d ", p_new_tcaphash_endcall->context->session_id);
|
||||
#endif
|
||||
|
@ -639,7 +639,7 @@ new_tcaphash_end(struct tcaphash_end_info_key_t *p_tcaphash_end_key,
|
|||
|
||||
|
||||
|
||||
static struct tcaphash_contcall_t *
|
||||
static struct tcaphash_contcall_t *
|
||||
create_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
||||
struct tcaphash_context_t *p_tcaphash_context)
|
||||
{
|
||||
|
@ -648,7 +648,7 @@ create_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
|
||||
p_tcaphash_contcall1 = (struct tcaphash_contcall_t *)
|
||||
g_hash_table_lookup(tcaphash_cont, p_tcaphash_cont_key);
|
||||
|
||||
|
||||
if (p_tcaphash_contcall1) {
|
||||
/* Walk through list of transaction with identical keys */
|
||||
/* go the the end to insert new record */
|
||||
|
@ -668,16 +668,16 @@ create_tcaphash_cont(struct tcaphash_cont_info_key_t *p_tcaphash_cont_key,
|
|||
}
|
||||
|
||||
|
||||
static struct tcaphash_endcall_t *
|
||||
static struct tcaphash_endcall_t *
|
||||
create_tcaphash_end(struct tcaphash_end_info_key_t *p_tcaphash_end_key,
|
||||
struct tcaphash_context_t *p_tcaphash_context)
|
||||
{
|
||||
struct tcaphash_endcall_t *p_tcaphash_endcall1 = NULL;
|
||||
struct tcaphash_endcall_t *p_tcaphash_endcall = NULL;
|
||||
|
||||
|
||||
p_tcaphash_endcall1 = (struct tcaphash_endcall_t *)
|
||||
g_hash_table_lookup(tcaphash_end, p_tcaphash_end_key);
|
||||
|
||||
|
||||
if (p_tcaphash_endcall1) {
|
||||
/* Walk through list of transaction with identical keys */
|
||||
/* go the the end to insert new record */
|
||||
|
@ -718,7 +718,7 @@ tcapsrt_init_routine(void)
|
|||
dbg(16,"Destroy hash_begin ");
|
||||
#endif
|
||||
g_hash_table_destroy(tcaphash_begin);
|
||||
}
|
||||
}
|
||||
|
||||
if (tcaphash_cont != NULL) {
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
|
@ -752,7 +752,7 @@ tcapsrt_init_routine(void)
|
|||
|
||||
/*
|
||||
* Service Responsee Time analyze
|
||||
* Called just after dissector call
|
||||
* Called just after dissector call
|
||||
*/
|
||||
struct tcaphash_context_t *
|
||||
tcapsrt_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
|
@ -761,7 +761,7 @@ tcapsrt_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
struct tcaphash_context_t *tcap_context=NULL;
|
||||
|
||||
switch (p_tcapsrt_info->ope) {
|
||||
|
||||
|
||||
case TC_BEGIN: /*InitialDP*/
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(1,"TC_BEGIN ");
|
||||
|
@ -772,24 +772,24 @@ tcapsrt_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
case TC_CONT:
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(1,"TC_CONT ");
|
||||
#endif
|
||||
#endif
|
||||
tcap_context=tcaphash_cont_matching(tvb, pinfo, tree, p_tcapsrt_info);
|
||||
break;
|
||||
|
||||
case TC_ABORT:
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(1,"TC_ABORT ");
|
||||
#endif
|
||||
#endif
|
||||
tcap_context=tcaphash_end_matching(tvb, pinfo, tree, p_tcapsrt_info);
|
||||
break;
|
||||
|
||||
|
||||
case TC_END:
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(1,"TC_END ");
|
||||
#endif
|
||||
tcap_context=tcaphash_end_matching(tvb, pinfo, tree, p_tcapsrt_info);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(1,"Unknow %d ", p_tcapsrt_info->ope);
|
||||
|
@ -804,12 +804,12 @@ tcapsrt_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
/*
|
||||
* Create the record identifiying the TCAP transaction
|
||||
* When the identifier for the transaction is reused, check
|
||||
* When the identifier for the transaction is reused, check
|
||||
* the following criteria before to append a new record:
|
||||
* - a timeout corresponding to a message retransmission is detected,
|
||||
* - a message hast been lost
|
||||
* - a timeout corresponding to a message retransmission is detected,
|
||||
* - a message hast been lost
|
||||
* - or the previous transaction has been be closed
|
||||
*/
|
||||
static struct tcaphash_context_t *
|
||||
|
@ -817,11 +817,11 @@ tcaphash_begin_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
struct tcapsrt_info_t *p_tcapsrt_info)
|
||||
{
|
||||
struct tcaphash_context_t *p_tcaphash_context=NULL;
|
||||
struct tcaphash_context_key_t tcaphash_context_key;
|
||||
struct tcaphash_context_key_t tcaphash_context_key;
|
||||
struct tcaphash_begincall_t *p_tcaphash_begincall, *p_new_tcaphash_begincall;
|
||||
struct tcaphash_begin_info_key_t tcaphash_begin_key;
|
||||
proto_item *ti;
|
||||
|
||||
proto_item *pi;
|
||||
|
||||
/* prepare the key data */
|
||||
tcaphash_begin_key.tid = p_tcapsrt_info->src_tid;
|
||||
tcaphash_begin_key.opc_hash = mtp3_pc_hash( ((address *)(&pinfo->src))->data);
|
||||
|
@ -840,7 +840,7 @@ tcaphash_begin_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
|
||||
if (p_tcaphash_begincall) {
|
||||
/* Walk through list of transaction with identical keys */
|
||||
do {
|
||||
do {
|
||||
/* Check if the request with this reqSeqNum has been seen, with the same Message Type */
|
||||
if (pinfo->fd->num == p_tcaphash_begincall->context->first_frame) {
|
||||
/* We have seen this request before -> do nothing */
|
||||
|
@ -856,18 +856,18 @@ tcaphash_begin_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
/* if last request has been responded (response number in known)
|
||||
and this request appears after last response (has bigger frame number)
|
||||
and last request occured after the timeout for repetition,
|
||||
or
|
||||
or
|
||||
if last request hasn't been responded (so number unknown)
|
||||
and this request appears after last request (has bigger frame number)
|
||||
and this request occured after the timeout for message lost */
|
||||
if ( ( p_tcaphash_begincall->context->last_frame != 0
|
||||
&& pinfo->fd->num > p_tcaphash_begincall->context->first_frame
|
||||
&& pinfo->fd->num > p_tcaphash_begincall->context->first_frame
|
||||
&& (guint) pinfo->fd->abs_ts.secs > (guint)(p_tcaphash_begincall->context->begin_time.secs + gtcap_RepetitionTimeout)
|
||||
) ||
|
||||
( p_tcaphash_begincall->context->last_frame == 0
|
||||
&& pinfo->fd->num > p_tcaphash_begincall->context->first_frame
|
||||
&& (guint)pinfo->fd->abs_ts.secs > (guint)(p_tcaphash_begincall->context->begin_time.secs + gtcap_LostTimeout)
|
||||
)
|
||||
&& (guint)pinfo->fd->abs_ts.secs > (guint)(p_tcaphash_begincall->context->begin_time.secs + gtcap_LostTimeout)
|
||||
)
|
||||
)
|
||||
{
|
||||
/* we decide that we have a new request */
|
||||
|
@ -875,46 +875,48 @@ tcaphash_begin_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"(timeout) Append key %lx ",tcaphash_begin_key.hashKey);
|
||||
dbg(12,"Frame %u rsp %u ",pinfo->fd->num,p_tcaphash_begincall->context->last_frame );
|
||||
#endif
|
||||
#endif
|
||||
tcaphash_context_key.session_id = tcapsrt_global_SessionId++;
|
||||
p_tcaphash_context = new_tcaphash_context(&tcaphash_context_key, pinfo);
|
||||
p_tcaphash_context = new_tcaphash_context(&tcaphash_context_key, pinfo);
|
||||
p_new_tcaphash_begincall = append_tcaphash_begincall(p_tcaphash_begincall,
|
||||
p_tcaphash_context,
|
||||
pinfo);
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"Update key %lx ",tcaphash_begin_key.hashKey);
|
||||
#endif
|
||||
update_tcaphash_begincall(p_new_tcaphash_begincall, pinfo);
|
||||
p_tcaphash_begincall=p_new_tcaphash_begincall;
|
||||
} else {
|
||||
|
||||
|
||||
/* If the Tid is reused for a closed Transaction */
|
||||
/* Or if we received an InitialDP for a non closed Transaction */
|
||||
if ( p_tcaphash_begincall->context->closed) {
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"(closed) Append key %lu ",tcaphash_begin_key.hashKey);
|
||||
dbg(12,"Frame %u rsp %u ",pinfo->fd->num,p_tcaphash_begincall->context->last_frame );
|
||||
#endif
|
||||
#endif
|
||||
tcaphash_context_key.session_id = tcapsrt_global_SessionId++;
|
||||
p_tcaphash_context = new_tcaphash_context(&tcaphash_context_key, pinfo);
|
||||
p_tcaphash_context = new_tcaphash_context(&tcaphash_context_key, pinfo);
|
||||
p_new_tcaphash_begincall = append_tcaphash_begincall(p_tcaphash_begincall,
|
||||
p_tcaphash_context,
|
||||
pinfo);
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"Update key %lu ",tcaphash_begin_key.hashKey);
|
||||
#endif
|
||||
update_tcaphash_begincall(p_new_tcaphash_begincall, pinfo);
|
||||
p_tcaphash_begincall=p_new_tcaphash_begincall;
|
||||
|
||||
|
||||
} else {
|
||||
/* No, so it's a duplicate request.Mark it as such. */
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(21,"Display_duplicate ");
|
||||
#endif
|
||||
if (gtcap_DisplaySRT)
|
||||
proto_tree_add_uint_hidden(tree, hf_tcapsrt_Duplicate, tvb, 0,0, p_tcapsrt_info->src_tid);
|
||||
if (gtcap_DisplaySRT) {
|
||||
pi = proto_tree_add_uint_hidden(tree, hf_tcapsrt_Duplicate, tvb, 0,0, p_tcapsrt_info->src_tid);
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
}
|
||||
p_tcaphash_context=p_tcaphash_begincall->context;
|
||||
} /* test with Timeout */
|
||||
} /* closed */
|
||||
|
@ -928,37 +930,40 @@ tcaphash_begin_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
} else { /* p_tcaphash_begincall has not been found */
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(10,"New key %lx ",tcaphash_begin_key.hashKey);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
tcaphash_context_key.session_id = tcapsrt_global_SessionId++;
|
||||
p_tcaphash_context = new_tcaphash_context(&tcaphash_context_key, pinfo);
|
||||
p_tcaphash_context = new_tcaphash_context(&tcaphash_context_key, pinfo);
|
||||
p_tcaphash_begincall = new_tcaphash_begin(&tcaphash_begin_key, p_tcaphash_context);
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(11,"Update key %lx ",tcaphash_begin_key.hashKey);
|
||||
dbg(11,"Frame reqlink #%u ", pinfo->fd->num);
|
||||
#endif
|
||||
update_tcaphash_begincall(p_tcaphash_begincall, pinfo);
|
||||
}
|
||||
|
||||
|
||||
/* display tcap session, if available */
|
||||
if ( gtcap_DisplaySRT &&
|
||||
p_tcaphash_context &&
|
||||
p_tcaphash_context->session_id)
|
||||
proto_tree_add_uint(tree, hf_tcapsrt_SessionId, tvb, 0,0, p_tcaphash_context->session_id);
|
||||
|
||||
p_tcaphash_context->session_id) {
|
||||
pi = proto_tree_add_uint(tree, hf_tcapsrt_SessionId, tvb, 0,0, p_tcaphash_context->session_id);
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
}
|
||||
|
||||
|
||||
/* add link to response frame, if available */
|
||||
if( gtcap_DisplaySRT &&
|
||||
p_tcaphash_begincall->context->last_frame != 0){
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(20,"Display_frameRsplink %d ",p_tcaphash_begincall->context->last_frame);
|
||||
#endif
|
||||
ti = proto_tree_add_uint_format(tree, hf_tcapsrt_BeginSession, tvb, 0, 0,
|
||||
pi = proto_tree_add_uint_format(tree, hf_tcapsrt_BeginSession, tvb, 0, 0,
|
||||
p_tcaphash_begincall->context->last_frame,
|
||||
"End of session in frame %u",
|
||||
p_tcaphash_begincall->context->last_frame);
|
||||
PROTO_ITEM_SET_GENERATED(ti);
|
||||
}
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
}
|
||||
return p_tcaphash_context;
|
||||
}
|
||||
|
||||
|
@ -974,10 +979,11 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
struct tcaphash_context_t *p_tcaphash_context=NULL;
|
||||
struct tcaphash_contcall_t *p_tcaphash_contcall;
|
||||
struct tcaphash_cont_info_key_t tcaphash_cont_key;
|
||||
proto_item *pi;
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(10,"\n Hcont #%u ", pinfo->fd->num);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* look only for matching request, if matching conversation is available. */
|
||||
tcaphash_cont_key.src_tid = p_tcapsrt_info->src_tid;
|
||||
|
@ -988,7 +994,7 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(11,"Ckey %lx ", tcaphash_cont_key.hashKey);
|
||||
dbg(51,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(51,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(51,"Tid %lx %lx ",tcaphash_cont_key.src_tid, tcaphash_cont_key.dst_tid);
|
||||
#endif
|
||||
p_tcaphash_contcall = find_tcaphash_cont(&tcaphash_cont_key, pinfo);
|
||||
|
@ -1014,7 +1020,7 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(11,"Bkey %lx ", tcaphash_begin_key.hashKey);
|
||||
dbg(51,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(51,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(51,"Tid %lx ",tcaphash_begin_key.tid);
|
||||
#endif
|
||||
p_tcaphash_begincall = find_tcaphash_begin(&tcaphash_begin_key, pinfo,FALSE);
|
||||
|
@ -1022,7 +1028,7 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
!p_tcaphash_begincall->context->contcall ) {
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"BFound ");
|
||||
#endif
|
||||
#endif
|
||||
p_tcaphash_context=p_tcaphash_begincall->context;
|
||||
p_tcaphash_context->responded=TRUE;
|
||||
|
||||
|
@ -1031,7 +1037,7 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
#endif
|
||||
p_tcaphash_contcall = create_tcaphash_cont(&tcaphash_cont_key,
|
||||
p_tcaphash_begincall->context);
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(11,"Update Ckey %lx ",tcaphash_begin_key.hashKey);
|
||||
dbg(11,"Frame reqlink #%u ", pinfo->fd->num);
|
||||
|
@ -1046,7 +1052,7 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
#endif
|
||||
p_tcaphash_endcall = create_tcaphash_end(&tcaphash_end_key,
|
||||
p_tcaphash_begincall->context);
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(11,"Update Ekey %lx ",tcaphash_end_key.hashKey);
|
||||
dbg(11,"Frame reqlink #%u ", pinfo->fd->num);
|
||||
|
@ -1054,15 +1060,17 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
} else { /* Begin not found */
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"BnotFound ");
|
||||
#endif
|
||||
#endif
|
||||
} /* begin found */
|
||||
} /* cont found */
|
||||
/* display tcap session, if available */
|
||||
if (gtcap_DisplaySRT &&
|
||||
p_tcaphash_context &&
|
||||
p_tcaphash_context->session_id)
|
||||
proto_tree_add_uint(tree, hf_tcapsrt_SessionId, tvb, 0,0, p_tcaphash_context->session_id);
|
||||
|
||||
p_tcaphash_context->session_id) {
|
||||
pi = proto_tree_add_uint(tree, hf_tcapsrt_SessionId, tvb, 0,0, p_tcaphash_context->session_id);
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
}
|
||||
|
||||
return p_tcaphash_context;
|
||||
}
|
||||
|
||||
|
@ -1075,15 +1083,15 @@ tcaphash_cont_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
static struct tcaphash_context_t *
|
||||
tcaphash_end_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
||||
struct tcapsrt_info_t *p_tcapsrt_info)
|
||||
{
|
||||
{
|
||||
struct tcaphash_context_t *p_tcaphash_context=NULL;
|
||||
|
||||
struct tcaphash_end_info_key_t tcaphash_end_key;
|
||||
struct tcaphash_endcall_t *p_tcaphash_endcall=NULL;
|
||||
|
||||
struct tcaphash_begin_info_key_t tcaphash_begin_key;
|
||||
struct tcaphash_begincall_t *p_tcaphash_begincall=NULL;
|
||||
proto_item *ti;
|
||||
struct tcaphash_begincall_t *p_tcaphash_begincall=NULL;
|
||||
proto_item *pi;
|
||||
nstime_t delta;
|
||||
|
||||
|
||||
|
@ -1098,71 +1106,73 @@ tcaphash_end_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(11,"Ekey %lx ",tcaphash_end_key.hashKey);
|
||||
dbg(11,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(11,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(51,"Tid %lx ",tcaphash_end_key.tid);
|
||||
#endif
|
||||
p_tcaphash_endcall = find_tcaphash_end(&tcaphash_end_key, pinfo,TRUE);
|
||||
|
||||
|
||||
if(!p_tcaphash_endcall) {
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"EnotFound ");
|
||||
#endif
|
||||
dbg(12,"EnotFound ");
|
||||
#endif
|
||||
tcaphash_begin_key.tid = p_tcapsrt_info->dst_tid;
|
||||
tcaphash_begin_key.opc_hash=mtp3_pc_hash( ((address*)(&pinfo->src))->data);
|
||||
tcaphash_begin_key.dpc_hash=mtp3_pc_hash( ((address*)(&pinfo->dst))->data);
|
||||
tcaphash_begin_key.hashKey=tcaphash_begin_calchash(&tcaphash_begin_key);
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(11,"Bkey %lx ", tcaphash_begin_key.hashKey);
|
||||
dbg(51,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(51,"PC %s %s ",address_to_str(&pinfo->src), address_to_str(&pinfo->dst));
|
||||
dbg(51,"Tid %lx ",tcaphash_begin_key.tid);
|
||||
#endif
|
||||
p_tcaphash_begincall = find_tcaphash_begin(&tcaphash_begin_key, pinfo,FALSE);
|
||||
}
|
||||
|
||||
|
||||
if (p_tcaphash_endcall) {
|
||||
/* Use the TC_BEGIN Destination reference */
|
||||
p_tcaphash_context=p_tcaphash_endcall->context;
|
||||
} else if (p_tcaphash_begincall) {
|
||||
/* Use the TC_BEGIN Source reference */
|
||||
/* Use the TC_BEGIN Source reference */
|
||||
p_tcaphash_context=p_tcaphash_begincall->context;
|
||||
}
|
||||
|
||||
if (p_tcaphash_context) {
|
||||
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(12,"Found, req=%d ",p_tcaphash_context->first_frame);
|
||||
#endif
|
||||
if (gtcap_DisplaySRT)
|
||||
proto_tree_add_uint(tree, hf_tcapsrt_SessionId, tvb, 0,0, p_tcaphash_context->session_id);
|
||||
if (gtcap_DisplaySRT) {
|
||||
pi = proto_tree_add_uint(tree, hf_tcapsrt_SessionId, tvb, 0,0, p_tcaphash_context->session_id);
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
}
|
||||
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
dbg(20,"Display framereqlink %d ",p_tcaphash_context->first_frame);
|
||||
#endif
|
||||
/* Indicate the frame to which this is a reply. */
|
||||
if (gtcap_DisplaySRT) {
|
||||
ti = proto_tree_add_uint_format(tree, hf_tcapsrt_EndSession, tvb, 0, 0,
|
||||
pi = proto_tree_add_uint_format(tree, hf_tcapsrt_EndSession, tvb, 0, 0,
|
||||
p_tcaphash_context->first_frame,
|
||||
"Begin of session in frame %u",
|
||||
p_tcaphash_context->first_frame);
|
||||
PROTO_ITEM_SET_GENERATED(ti);
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
/* Calculate Service Response Time */
|
||||
nstime_delta(&delta, &pinfo->fd->abs_ts, &p_tcaphash_context->begin_time);
|
||||
|
||||
|
||||
/* display Service Response Time and make it filterable */
|
||||
ti = proto_tree_add_time(tree, hf_tcapsrt_SessionTime, tvb, 0, 0, &delta);
|
||||
PROTO_ITEM_SET_GENERATED(ti);
|
||||
pi = proto_tree_add_time(tree, hf_tcapsrt_SessionTime, tvb, 0, 0, &delta);
|
||||
PROTO_ITEM_SET_GENERATED(pi);
|
||||
}
|
||||
/* Close the context and remove it */
|
||||
tcapsrt_close(p_tcaphash_context,pinfo);
|
||||
|
||||
} /* context present */
|
||||
} /* context present */
|
||||
return p_tcaphash_context;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the Message Info used by the main dissector
|
||||
* Data are linked to a TCAP transaction
|
||||
* Data are linked to a TCAP transaction
|
||||
*/
|
||||
struct tcapsrt_info_t *
|
||||
tcapsrt_razinfo(void)
|
||||
|
@ -1174,9 +1184,9 @@ tcapsrt_razinfo(void)
|
|||
if(tcapsrt_global_current==MAX_TCAP_INSTANCE){
|
||||
tcapsrt_global_current=0;
|
||||
}
|
||||
|
||||
|
||||
p_tcapsrt_info=&tcapsrt_global_info[tcapsrt_global_current];
|
||||
memset(p_tcapsrt_info,0,sizeof(struct tcapsrt_info_t));
|
||||
memset(p_tcapsrt_info,0,sizeof(struct tcapsrt_info_t));
|
||||
|
||||
return p_tcapsrt_info;
|
||||
}
|
||||
|
@ -1202,7 +1212,7 @@ tcapsrt_close(struct tcaphash_context_t *p_tcaphash_context,
|
|||
#endif
|
||||
g_hash_table_remove(tcaphash_end, p_tcaphash_context->endcall->endkey);
|
||||
}
|
||||
|
||||
|
||||
/* If the contkey is present */
|
||||
if ( p_tcaphash_context->contcall
|
||||
&& !gtcap_PersistentSRT) {
|
||||
|
@ -1211,7 +1221,7 @@ tcapsrt_close(struct tcaphash_context_t *p_tcaphash_context,
|
|||
#endif
|
||||
g_hash_table_remove(tcaphash_cont, p_tcaphash_context->contcall->contkey);
|
||||
}
|
||||
|
||||
|
||||
/* If the beginkey is present */
|
||||
if (p_tcaphash_context->begincall->next_begincall) {
|
||||
if (p_tcaphash_context->begincall->previous_begincall ) {
|
||||
|
@ -1237,7 +1247,7 @@ tcapsrt_close(struct tcaphash_context_t *p_tcaphash_context,
|
|||
dbg(20,"remove context ");
|
||||
#endif
|
||||
g_hash_table_remove(tcaphash_context, p_tcaphash_context->key);
|
||||
|
||||
|
||||
} /* begincall without chained string */
|
||||
} else { /* no context */
|
||||
#ifdef DEBUG_TCAPSRT
|
||||
|
|
Loading…
Reference in New Issue