aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorJeff Morriss <jeff.morriss@ulticom.com>2010-06-03 18:57:25 +0000
committerJeff Morriss <jeff.morriss@ulticom.com>2010-06-03 18:57:25 +0000
commit673a9de3310c0d34a7944d3b522e734076d2f84d (patch)
tree4fb13d3f43099dd1c876797a4039128a767cb4d8 /epan
parent6dcdb5fee6e2bfca8b4024672d5787a390be7fa1 (diff)
Set the (pinfo) address if a PC is present (for now: regardless of whether routing is on GT or not).
svn path=/trunk/; revision=33076
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-sua.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/epan/dissectors/packet-sua.c b/epan/dissectors/packet-sua.c
index 9bf6cfb900..48993923ed 100644
--- a/epan/dissectors/packet-sua.c
+++ b/epan/dissectors/packet-sua.c
@@ -348,6 +348,9 @@ static gint ett_sua_assoc = -1;
static int sua_tap = -1;
+static mtp3_addr_pc_t *sua_dpc;
+static mtp3_addr_pc_t *sua_opc;
+
static dissector_handle_t data_handle;
static dissector_table_t sccp_ssn_dissector_table;
static heur_dissector_list_t heur_subdissector_list;
@@ -1239,10 +1242,22 @@ dissect_global_title_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tr
#define POINT_CODE_OFFSET PARAMETER_VALUE_OFFSET
static void
-dissect_point_code_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+dissect_point_code_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item, gboolean source)
{
+ guint32 pc;
+
+ pc = tvb_get_ntohl(parameter_tvb, POINT_CODE_OFFSET);
+
+ if (source) {
+ sua_opc->type = mtp3_standard;
+ sua_opc->pc = pc;
+ } else {
+ sua_dpc->type = mtp3_standard;
+ sua_dpc->pc = pc;
+ }
+
proto_tree_add_item(parameter_tree, hf_point_code_dpc, parameter_tvb, POINT_CODE_OFFSET, POINT_CODE_LENGTH, ENC_BIG_ENDIAN);
- proto_item_append_text(parameter_item, " (%s)", mtp3_pc_to_str(tvb_get_ntohl(parameter_tvb, POINT_CODE_OFFSET)));
+ proto_item_append_text(parameter_item, " (%s)", mtp3_pc_to_str(pc));
}
#define SSN_LENGTH 1
@@ -1544,7 +1559,8 @@ dissect_v8_parameter(tvbuff_t *parameter_tvb, proto_tree *tree, tvbuff_t **data_
dissect_global_title_parameter(parameter_tvb, parameter_tree);
break;
case V8_POINT_CODE_PARAMETER_TAG:
- dissect_point_code_parameter(parameter_tvb, parameter_tree, parameter_item);
+ /* Reuse whether we have source_ssn or not to determine which address we're looking at */
+ dissect_point_code_parameter(parameter_tvb, parameter_tree, parameter_item, (source_ssn != NULL));
break;
case V8_SUBSYSTEM_NUMBER_PARAMETER_TAG:
dissect_ssn_parameter(parameter_tvb, parameter_tree, parameter_item, &ssn);
@@ -1829,7 +1845,8 @@ dissect_parameter(tvbuff_t *parameter_tvb, proto_tree *tree, tvbuff_t **data_tvb
dissect_global_title_parameter(parameter_tvb, parameter_tree);
break;
case POINT_CODE_PARAMETER_TAG:
- dissect_point_code_parameter(parameter_tvb, parameter_tree, parameter_item);
+ /* Reuse whether we have source_ssn or not to determine which address we're looking at */
+ dissect_point_code_parameter(parameter_tvb, parameter_tree, parameter_item, (source_ssn != NULL));
break;
case SUBSYSTEM_NUMBER_PARAMETER_TAG:
dissect_ssn_parameter(parameter_tvb, parameter_tree, parameter_item, &ssn);
@@ -1900,6 +1917,9 @@ dissect_sua_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *sua_t
drn = 0;
srn = 0;
+ sua_opc = ep_alloc0(sizeof(mtp3_addr_pc_t));
+ sua_dpc = ep_alloc0(sizeof(mtp3_addr_pc_t));
+
common_header_tvb = tvb_new_subset(message_tvb, COMMON_HEADER_OFFSET, COMMON_HEADER_LENGTH, COMMON_HEADER_LENGTH);
dissect_common_header(common_header_tvb, pinfo, sua_tree);
@@ -1922,6 +1942,11 @@ dissect_sua_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *sua_t
pinfo->sccp_info = NULL;
}
+ if (sua_opc->type)
+ SET_ADDRESS(&pinfo->src, AT_SS7PC, sizeof(mtp3_addr_pc_t), (guint8 *) sua_opc);
+ if (sua_dpc->type)
+ SET_ADDRESS(&pinfo->dst, AT_SS7PC, sizeof(mtp3_addr_pc_t), (guint8 *) sua_dpc);
+
/* If there was SUA data it could be dissected */
if(data_tvb)
{