diff options
author | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2005-03-29 12:27:13 +0000 |
---|---|---|
committer | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2005-03-29 12:27:13 +0000 |
commit | 86dcf6dbd231c2ec34ab915babd4905f4b3cf1d7 (patch) | |
tree | 6f48fea9e63cae7be44bb59ff84515f5662255f2 /epan/dissectors/packet-acse.c | |
parent | a5415eb2f52a9a98d27981b506f5cc7b95ad736b (diff) |
from Sid
bugfix for ACSE
svn path=/trunk/; revision=13965
Diffstat (limited to 'epan/dissectors/packet-acse.c')
-rw-r--r-- | epan/dissectors/packet-acse.c | 65 |
1 files changed, 5 insertions, 60 deletions
diff --git a/epan/dissectors/packet-acse.c b/epan/dissectors/packet-acse.c index 5fad1b7a28..483b82f45e 100644 --- a/epan/dissectors/packet-acse.c +++ b/epan/dissectors/packet-acse.c @@ -1099,7 +1099,8 @@ show_disconnect_pdu(ASN1_SCK *asn,proto_tree *acse_tree,tvbuff_t *offset = asn->offset; return; } - if( *offset == RELEASE_REQUEST_OR_RESPONSE_REASON ) /* is it a reason ? */ + + if( tvb_get_guint8(tvb, *offset) == RELEASE_REQUEST_OR_RESPONSE_REASON ) /* is it a reason ? */ { itu = proto_tree_add_text(acse_tree, tvb, *offset,ABORT_REASON_LEN, "Reason"); @@ -1111,6 +1112,8 @@ show_disconnect_pdu(ASN1_SCK *asn,proto_tree *acse_tree,tvbuff_t if (read_length(asn, acse_tree_pc, 0, &new_item_len) != ASN1_ERR_NOERROR) { + proto_tree_add_text(acse_tree, tvb, *offset, item_len, + "Can't decode item length"); *offset = asn->offset; return; } @@ -1132,64 +1135,6 @@ show_disconnect_pdu(ASN1_SCK *asn,proto_tree *acse_tree,tvbuff_t (*offset)=start+save_len; asn->offset = (*offset); } - -static void -show_finish_pdu(ASN1_SCK *asn,proto_tree *acse_tree,tvbuff_t -*tvb,int *offset,int item_len) -{ - gint length; - gint value; - proto_tree *acse_tree_pc = NULL; - proto_item *itu; - guint new_item_len; - guint start = *offset; - int save_len = item_len; -/* do we have enough bytes to dissect this item ? */ - if( ( length =tvb_reported_length_remaining(tvb, *offset)) < item_len ) - { - proto_tree_add_text(acse_tree, tvb, *offset, item_len, - "Wrong Item.Need %u bytes but have %u", item_len,length); - *offset = asn->offset; - return; - } - - if(item_len <= 0) - { - proto_tree_add_text(acse_tree, tvb, *offset, item_len, - "Reason not specified"); - *offset = asn->offset; - return; - } - itu = proto_tree_add_text(acse_tree, tvb, *offset,ABORT_REASON_LEN, - "Reason"); - acse_tree_pc = proto_item_add_subtree(itu, ett_acse_ms); - (*offset)++; /* skip type */ - asn->offset = *offset; - item_len--; - /* get length */ - if (read_length(asn, acse_tree_pc, 0, &new_item_len) != - ASN1_ERR_NOERROR) - { - *offset = asn->offset; - return; - } - /* try to get reason */ - value = get_integer_value(asn,new_item_len,offset); - - proto_tree_add_text(acse_tree_pc, tvb, *offset+1,new_item_len, - val_to_str(value,release_request_reason,"Unknown item (0x%02x)")); - item_len-=(asn->offset-*offset)+new_item_len; - *offset = asn->offset+new_item_len; - asn->offset = *offset; - /* do we have User information field ? */ - if(item_len > 0) - { - show_acse_user_information(asn,acse_tree,tvb,offset,item_len); - } - /* align the pointer */ - (*offset)=start+save_len; - asn->offset = (*offset); -} static void show_user_data(ASN1_SCK *asn,proto_tree *acse_tree,tvbuff_t *tvb,int *offset,int item_len,int tag) @@ -1518,7 +1463,7 @@ dissect_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree } return FALSE; } - show_finish_pdu(&asn,acse_tree,tvb,&offset,rest_len); + show_disconnect_pdu(&asn,acse_tree,tvb,&offset,rest_len); break; case SES_DISCONNECT: proto_tree_add_uint(acse_tree, hf_acse_type, tvb, offset-1, 1, s_type); |