diff options
author | Anders Broman <anders.broman@ericsson.com> | 2007-05-13 20:58:29 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2007-05-13 20:58:29 +0000 |
commit | c01f3829742dacd6d94dc50be54537661bad0581 (patch) | |
tree | eb3da0d69d5bc62ca587ebd999b6beacd693f168 /asn1/pres | |
parent | b80cb43018aa49bac3e24cabca009ca0471cd579 (diff) |
Second step in introducing asn context to BER dissectors just like in PER.
svn path=/trunk/; revision=21753
Diffstat (limited to 'asn1/pres')
-rw-r--r-- | asn1/pres/packet-pres-template.c | 24 | ||||
-rw-r--r-- | asn1/pres/pres.cnf | 10 |
2 files changed, 19 insertions, 15 deletions
diff --git a/asn1/pres/packet-pres-template.c b/asn1/pres/packet-pres-template.c index 2afed32f14..aede2abbba 100644 --- a/asn1/pres/packet-pres-template.c +++ b/asn1/pres/packet-pres-template.c @@ -36,6 +36,7 @@ #include <stdio.h> #include <string.h> +#include <epan/asn1.h> #include "packet-ber.h" #include "packet-ses.h" #include "packet-pres.h" @@ -158,7 +159,10 @@ dissect_ppdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) proto_item *ti; proto_tree *pres_tree = NULL; guint s_type; -/* do we have spdu type from the session dissector? */ + asn1_ctx_t asn1_ctx; + asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo); + + /* do we have spdu type from the session dissector? */ if( !pinfo->private_data ){ if(tree){ proto_tree_add_text(tree, tvb, offset, -1, @@ -189,32 +193,32 @@ dissect_ppdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) switch(session->spdu_type){ case SES_CONNECTION_REQUEST: - offset = dissect_pres_CP_type(FALSE, tvb, offset, pinfo, pres_tree, hf_pres_CP_type); + offset = dissect_pres_CP_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CP_type); break; case SES_CONNECTION_ACCEPT: - offset = dissect_pres_CPA_PPDU(FALSE, tvb, offset, pinfo, pres_tree, hf_pres_CPA_PPDU); + offset = dissect_pres_CPA_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CPA_PPDU); break; case SES_ABORT: case SES_ABORT_ACCEPT: - offset = dissect_pres_Abort_type(FALSE, tvb, offset, pinfo, pres_tree, hf_pres_Abort_type); + offset = dissect_pres_Abort_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_Abort_type); break; case SES_DATA_TRANSFER: - offset = dissect_pres_CPC_type(FALSE, tvb, offset, pinfo, pres_tree, hf_pres_user_data); + offset = dissect_pres_CPC_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_user_data); break; case SES_TYPED_DATA: - offset = dissect_pres_Typed_data_type(FALSE, tvb, offset, pinfo, pres_tree, hf_pres_Typed_data_type); + offset = dissect_pres_Typed_data_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_Typed_data_type); break; case SES_RESYNCHRONIZE: - offset = dissect_pres_RS_PPDU(FALSE, tvb, offset, pinfo, pres_tree, -1); + offset = dissect_pres_RS_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, -1); break; case SES_RESYNCHRONIZE_ACK: - offset = dissect_pres_RSA_PPDU(FALSE, tvb, offset, pinfo, pres_tree, -1); + offset = dissect_pres_RSA_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, -1); break; case SES_REFUSE: - offset = dissect_pres_CPR_PPDU(FALSE, tvb, offset, pinfo, pres_tree, hf_pres_CPR_PPDU); + offset = dissect_pres_CPR_PPDU(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_CPR_PPDU); break; default: - offset = dissect_pres_CPC_type(FALSE, tvb, offset, pinfo, pres_tree, hf_pres_user_data); + offset = dissect_pres_CPC_type(FALSE, tvb, offset, &asn1_ctx, pres_tree, hf_pres_user_data); break; } diff --git a/asn1/pres/pres.cnf b/asn1/pres/pres.cnf index 303d5e49c2..96180d59ce 100644 --- a/asn1/pres/pres.cnf +++ b/asn1/pres/pres.cnf @@ -36,10 +36,10 @@ CPR-PPDU/normal-mode-parameters/provider-reason cPR_PPDU__provider-reason tvbuff_t *next_tvb; char *oid; - oid=find_oid_by_pres_ctx_id(pinfo, presentation_context_identifier); + oid=find_oid_by_pres_ctx_id(actx->pinfo, presentation_context_identifier); if(oid){ next_tvb = tvb_new_subset(tvb, offset, -1, -1); - call_ber_oid_callback(oid, next_tvb, offset, pinfo, global_tree); + call_ber_oid_callback(oid, next_tvb, offset, actx->pinfo, global_tree); } else { proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available"); %(DEFAULT_BODY)s @@ -49,10 +49,10 @@ CPR-PPDU/normal-mode-parameters/provider-reason cPR_PPDU__provider-reason tvbuff_t *next_tvb; char *oid; - oid=find_oid_by_pres_ctx_id(pinfo, presentation_context_identifier); + oid=find_oid_by_pres_ctx_id(actx->pinfo, presentation_context_identifier); if(oid){ next_tvb = tvb_new_subset(tvb, offset, -1, -1); - call_ber_oid_callback(oid, next_tvb, offset, pinfo, global_tree); + call_ber_oid_callback(oid, next_tvb, offset, actx->pinfo, global_tree); } else { proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available"); %(DEFAULT_BODY)s @@ -76,5 +76,5 @@ CPR-PPDU/normal-mode-parameters/provider-reason cPR_PPDU__provider-reason abstract_syntax_name_oid=NULL; #.END #.FN_FTR Context-list/_item - register_ctx_id_and_oid(pinfo, presentation_context_identifier, abstract_syntax_name_oid); + register_ctx_id_and_oid(actx->pinfo, presentation_context_identifier, abstract_syntax_name_oid); #.END |