aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-zvt.c
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2015-06-01 13:17:24 +0200
committerMartin Kaiser <wireshark@kaiser.cx>2015-06-10 20:23:40 +0000
commite66e37bc0dbcdc9ee007980f1326fd002d7910fc (patch)
tree35820414fbd9456a8bb2194dac0052ffb60df3f8 /epan/dissectors/packet-zvt.c
parent1e58cf44a251e76761c9b2ad7c8def3257e025a7 (diff)
ZVT: use the transaction info to set source and destination address
Change-Id: Ieef2747ce7cc42f0f1b56dd48268d65b1875a5d6 Reviewed-on: https://code.wireshark.org/review/8879 Reviewed-by: Martin Kaiser <wireshark@kaiser.cx>
Diffstat (limited to 'epan/dissectors/packet-zvt.c')
-rw-r--r--epan/dissectors/packet-zvt.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/epan/dissectors/packet-zvt.c b/epan/dissectors/packet-zvt.c
index ecf10acad9..3495d0953b 100644
--- a/epan/dissectors/packet-zvt.c
+++ b/epan/dissectors/packet-zvt.c
@@ -413,15 +413,40 @@ dissect_zvt_bitmap_apdu(tvbuff_t *tvb, gint offset, guint16 len,
static void
-zvt_set_addresses(packet_info *pinfo, zvt_direction_t dir)
+zvt_set_addresses(packet_info *pinfo, zvt_transaction_t *zvt_trans)
{
- if (dir == DIRECTION_ECR_TO_PT) {
- SET_ADDRESS(&pinfo->src, AT_STRINGZ, (int)strlen(ADDR_ECR)+1, ADDR_ECR);
- SET_ADDRESS(&pinfo->dst, AT_STRINGZ, (int)strlen(ADDR_PT)+1, ADDR_PT);
+ apdu_info_t *ai;
+ zvt_direction_t dir = DIRECTION_UNKNOWN;
+
+ if (!zvt_trans)
+ return;
+
+ ai = (apdu_info_t *)g_hash_table_lookup(
+ apdu_table, GUINT_TO_POINTER((guint)zvt_trans->ctrl));
+ if (!ai)
+ return;
+
+ if (zvt_trans->rqst_frame == PINFO_FD_NUM(pinfo)) {
+ dir = ai->direction;
+ }
+ else if (zvt_trans->resp_frame == PINFO_FD_NUM(pinfo)) {
+ if (ai->direction == DIRECTION_ECR_TO_PT)
+ dir = DIRECTION_PT_TO_ECR;
+ else
+ dir = DIRECTION_ECR_TO_PT;
+ }
+
+ if (dir == DIRECTION_ECR_TO_PT) {
+ SET_ADDRESS(&pinfo->src, AT_STRINGZ,
+ (int)strlen(ADDR_ECR)+1, ADDR_ECR);
+ SET_ADDRESS(&pinfo->dst, AT_STRINGZ,
+ (int)strlen(ADDR_PT)+1, ADDR_PT);
}
- else if (dir == DIRECTION_PT_TO_ECR) {
- SET_ADDRESS(&pinfo->src, AT_STRINGZ, (int)strlen(ADDR_PT)+1, ADDR_PT);
- SET_ADDRESS(&pinfo->dst, AT_STRINGZ, (int)strlen(ADDR_ECR)+1, ADDR_ECR);
+ else if (dir == DIRECTION_PT_TO_ECR) {
+ SET_ADDRESS(&pinfo->src, AT_STRINGZ,
+ (int)strlen(ADDR_PT)+1, ADDR_PT);
+ SET_ADDRESS(&pinfo->dst, AT_STRINGZ,
+ (int)strlen(ADDR_ECR)+1, ADDR_ECR);
}
}
@@ -440,7 +465,7 @@ dissect_zvt_apdu(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tre
proto_item *apdu_it;
proto_tree *apdu_tree;
apdu_info_t *ai;
- zvt_transaction_t *zvt_trans;
+ zvt_transaction_t *zvt_trans = NULL;
proto_item *it;
offset_start = offset;
@@ -525,7 +550,7 @@ dissect_zvt_apdu(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tre
ai = (apdu_info_t *)g_hash_table_lookup(
apdu_table, GUINT_TO_POINTER((guint)ctrl));
- zvt_set_addresses(pinfo, ai ? ai->direction : DIRECTION_UNKNOWN);
+ zvt_set_addresses(pinfo, zvt_trans);
/* XXX - check the minimum length */
if (len > 0) {