diff options
Diffstat (limited to 'asn1/atn-ulcs/atn-ulcs.cnf')
-rw-r--r-- | asn1/atn-ulcs/atn-ulcs.cnf | 912 |
1 files changed, 454 insertions, 458 deletions
diff --git a/asn1/atn-ulcs/atn-ulcs.cnf b/asn1/atn-ulcs/atn-ulcs.cnf index fce5459851..e24abe7a7b 100644 --- a/asn1/atn-ulcs/atn-ulcs.cnf +++ b/asn1/atn-ulcs/atn-ulcs.cnf @@ -1,24 +1,20 @@ -# c-basic-offset: 2; tab-width: 2; indent-tabs-mode: t -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: - #.MODULE_IMPORT #.FIELD_RENAME -AARQ-apdu/protocol-version aarq-apdu_protocol-version -AARE-apdu/protocol-version aare-apdu_protocol-version -RLRE-apdu/reason rlre-apdu_response_reason -RLRQ-apdu/reason rlrq-apdu_request_reason -EXTERNALt/encoding/single-ASN1-type externalt_encoding_single-asn1-type -EXTERNALt/encoding/arbitrary externalt_encoding_arbitrary -EXTERNALt/encoding/octet-aligned externalt_encoding_octet-aligned -PDV-list/presentation-data-values/single-ASN1-type pdv-list_presentation-data-values_single-asn1-type +AARQ-apdu/protocol-version aarq-apdu_protocol-version +AARE-apdu/protocol-version aare-apdu_protocol-version +RLRE-apdu/reason rlre-apdu_response_reason +RLRQ-apdu/reason rlrq-apdu_request_reason +EXTERNALt/encoding/single-ASN1-type externalt_encoding_single-asn1-type +EXTERNALt/encoding/arbitrary externalt_encoding_arbitrary +EXTERNALt/encoding/octet-aligned externalt_encoding_octet-aligned +PDV-list/presentation-data-values/single-ASN1-type pdv-list_presentation-data-values_single-asn1-type PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_arbitrary #.END #.PDU_NEW - Fully-encoded-data - ACSE-apdu + Fully-encoded-data + ACSE-apdu #.END @@ -27,358 +23,358 @@ PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_ar #.END -#.FN_BODY Presentation-context-identifier +#.FN_BODY Presentation-context-identifier - offset = dissect_per_constrained_integer( - tvb, - offset, - actx, - tree, - hf_index, - 1U, - 127U, - &ulcs_context_value, - TRUE); + offset = dissect_per_constrained_integer( + tvb, + offset, + actx, + tree, + hf_index, + 1U, + 127U, + &ulcs_context_value, + TRUE); #.END -#.FN_BODY PDV-list/presentation-data-values/arbitrary - - packet_info * pinfo = actx->pinfo; - tvbuff_t *tvb_usr = NULL; - proto_tree *atn_ulcs_tree = NULL; - atn_conversation_t *atn_cv = NULL; - heur_dtbl_entry_t *hdtbl_entry; - - /* extract bitstring into new tvb buffer */ - offset = dissect_per_bit_string( - tvb, - offset, - actx, - tree, - hf_index, - NO_BOUND, - NO_BOUND, - FALSE, - &tvb_usr, - NULL); - - if (tvb_usr) { - /* call appropiate dissector for bitstring data */ - switch(ulcs_context_value){ - case 1: /* ACSE PDU*/ - atn_ulcs_tree = proto_tree_add_subtree( - root_tree, tvb, offset, 0, - ett_atn_acse, NULL, ATN_ACSE_PROTO ); - - dissect_ACSE_apdu_PDU( - tvb_new_subset_remaining(tvb_usr, 0), - pinfo, - atn_ulcs_tree, NULL); - break; - case 3: /* USER data; call subdissector for CM, CPDLC ... */ - - /* using dstref for PDV-list only occurrs in DT */ - atn_cv = find_atn_conversation( - &pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src); - - if(atn_cv) { - switch(atn_cv->ae_qualifier){ - case cma: /* contact management */ - call_dissector_with_data( - atn_cm_handle, - tvb_new_subset_remaining(tvb_usr, 0), - pinfo, - root_tree, - NULL); - break; - case cpdlc: /* plain old cpdlc */ - case pmcpdlc: /* protected mode cpdlc */ - call_dissector_with_data( - atn_cpdlc_handle, - tvb_new_subset_remaining(tvb_usr, 0), - pinfo, - root_tree, - NULL); - break; - default: /* unknown or unhandled datalink application */ - dissector_try_heuristic( - atn_ulcs_heur_subdissector_list, - tvb_new_subset_remaining(tvb_usr,0), - actx->pinfo, - root_tree, - &hdtbl_entry, - NULL); - break; - } - } - else{ - dissector_try_heuristic( - atn_ulcs_heur_subdissector_list, - tvb_new_subset_remaining(tvb_usr,0), - actx->pinfo, - root_tree, - &hdtbl_entry, - NULL); - } - break; - default: - break; - } /* switch(ulcs_context_value) */ - } +#.FN_BODY PDV-list/presentation-data-values/arbitrary + + packet_info * pinfo = actx->pinfo; + tvbuff_t *tvb_usr = NULL; + proto_tree *atn_ulcs_tree = NULL; + atn_conversation_t *atn_cv = NULL; + heur_dtbl_entry_t *hdtbl_entry; + + /* extract bitstring into new tvb buffer */ + offset = dissect_per_bit_string( + tvb, + offset, + actx, + tree, + hf_index, + NO_BOUND, + NO_BOUND, + FALSE, + &tvb_usr, + NULL); + + if (tvb_usr) { + /* call appropiate dissector for bitstring data */ + switch(ulcs_context_value){ + case 1: /* ACSE PDU*/ + atn_ulcs_tree = proto_tree_add_subtree( + root_tree, tvb, offset, 0, + ett_atn_acse, NULL, ATN_ACSE_PROTO ); + + dissect_ACSE_apdu_PDU( + tvb_new_subset_remaining(tvb_usr, 0), + pinfo, + atn_ulcs_tree, NULL); + break; + case 3: /* USER data; call subdissector for CM, CPDLC ... */ + + /* using dstref for PDV-list only occurrs in DT */ + atn_cv = find_atn_conversation( + &pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src); + + if(atn_cv) { + switch(atn_cv->ae_qualifier){ + case cma: /* contact management */ + call_dissector_with_data( + atn_cm_handle, + tvb_new_subset_remaining(tvb_usr, 0), + pinfo, + root_tree, + NULL); + break; + case cpdlc: /* plain old cpdlc */ + case pmcpdlc: /* protected mode cpdlc */ + call_dissector_with_data( + atn_cpdlc_handle, + tvb_new_subset_remaining(tvb_usr, 0), + pinfo, + root_tree, + NULL); + break; + default: /* unknown or unhandled datalink application */ + dissector_try_heuristic( + atn_ulcs_heur_subdissector_list, + tvb_new_subset_remaining(tvb_usr,0), + actx->pinfo, + root_tree, + &hdtbl_entry, + NULL); + break; + } + } + else{ + dissector_try_heuristic( + atn_ulcs_heur_subdissector_list, + tvb_new_subset_remaining(tvb_usr,0), + actx->pinfo, + root_tree, + &hdtbl_entry, + NULL); + } + break; + default: + break; + } /* switch(ulcs_context_value) */ + } #.END #.FN_BODY Authentication-value/other/other-mechanism-value - offset=call_ber_oid_callback( - object_identifier_id, - tvb, - offset, - actx->pinfo, - tree, NULL); + offset=call_ber_oid_callback( + object_identifier_id, + tvb, + offset, + actx->pinfo, + tree, NULL); #.END #.FN_BODY Mechanism-name - offset = dissect_per_object_identifier( - tvb, - offset, - actx, - tree, - hf_index, - NULL); + offset = dissect_per_object_identifier( + tvb, + offset, + actx, + tree, + hf_index, + NULL); #.END #.FN_BODY Authentication-value/other/other-mechanism-value - offset=call_ber_oid_callback( - object_identifier_id, - tvb, - offset, - actx->pinfo, - tree, NULL); + offset=call_ber_oid_callback( + object_identifier_id, + tvb, + offset, + actx->pinfo, + tree, NULL); #.END -#.FN_BODY AE-qualifier-form2 - packet_info * pinfo = actx->pinfo; - atn_conversation_t *atn_cv = NULL; - guint32 ae_qualifier = 0; - - /* dissect ae-qualifier */ - offset = dissect_per_integer( - tvb, - offset, - actx, - tree, - hf_index, - &ae_qualifier); - - - /*note: */ - /* the field "calling-AE-qualifier" is optional, */ - /* which means that we can exploit it only if it is present. */ - /* We still depend on heuristical decoding of CM, CPDLC PDU's otherwise. */ - - /* AARQ/DT: dstref present, srcref is always zero */ - if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ - atn_cv = find_atn_conversation(&pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src ); - } - - /* AARQ/CR: srcref present, dstref is always zero */ - if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){ - atn_cv = find_atn_conversation(&pinfo->src, - pinfo->clnp_srcref, - &pinfo->dst ); - } - - if(atn_cv){ - atn_cv->ae_qualifier = ae_qualifier; - } +#.FN_BODY AE-qualifier-form2 + packet_info * pinfo = actx->pinfo; + atn_conversation_t *atn_cv = NULL; + guint32 ae_qualifier = 0; + + /* dissect ae-qualifier */ + offset = dissect_per_integer( + tvb, + offset, + actx, + tree, + hf_index, + &ae_qualifier); + + + /*note: */ + /* the field "calling-AE-qualifier" is optional, */ + /* which means that we can exploit it only if it is present. */ + /* We still depend on heuristical decoding of CM, CPDLC PDU's otherwise. */ + + /* AARQ/DT: dstref present, srcref is always zero */ + if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ + atn_cv = find_atn_conversation(&pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src ); + } + + /* AARQ/CR: srcref present, dstref is always zero */ + if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){ + atn_cv = find_atn_conversation(&pinfo->src, + pinfo->clnp_srcref, + &pinfo->dst ); + } + + if(atn_cv){ + atn_cv->ae_qualifier = ae_qualifier; + } #.END -#.FN_BODY AARQ-apdu - packet_info * pinfo = actx->pinfo; - aarq_data_t *aarq_data = NULL; - atn_conversation_t *atn_cv = NULL; - guint32 aircraft_24_bit_address = 0; - - /* AARQ/DT: dstref present, srcref is always zero */ - if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ - - atn_cv = find_atn_conversation( - &pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src ); - if(!atn_cv){ - atn_cv = wmem_new(wmem_file_scope(), atn_conversation_t); - atn_cv->ae_qualifier = unknown; - create_atn_conversation(&pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src , - atn_cv); - } - } - - /* AARQ/CR: srcref present, dstref is always zero */ - if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){ - atn_cv = find_atn_conversation(&pinfo->src, - pinfo->clnp_srcref, - &pinfo->dst ); - if(!atn_cv){ - atn_cv = wmem_new(wmem_file_scope(), atn_conversation_t); - atn_cv->ae_qualifier = unknown; - create_atn_conversation(&pinfo->src, - pinfo->clnp_srcref, - &pinfo->dst , - atn_cv); - } - } - - /* conversation is to be created prior to decoding */ - /* of "AE-qualifier-form2" which takes place here: */ - %(DEFAULT_BODY)s - - - /* save AARQ packet data to create a conversation */ - /* when decoding the following AARE PDU */ - /* ATN applications CM and CPDLC are air/ground applications */ - /* so there is always an aircraft (with its 24-bit address) */ - /* and a ground facility. */ - /* the assumption is that there is only one open AARQ/AARE */ - /* dialog per aircraft at a time. */ - /* the aircraft's 24-bit address is used as a key to each AARQ */ - /* data. AARQ data is used to create a conversation with */ - /* air and ground endpoints (based on NSAP's and transport references) */ - /* when decoding AARE.*/ - /* note: */ - /* it may be more robust to create the conversation */ - /* in the "ositp" dissector an to merely use the conversation here */ - aircraft_24_bit_address = - get_aircraft_24_bit_address_from_nsap(pinfo); - - /* search for aarq entry */ - aarq_data = (aarq_data_t *) wmem_tree_lookup32( - aarq_data_tree, - aircraft_24_bit_address); - - if(!aarq_data){ /* aarq data not found, create new record */ - - /* alloc aarq data */ - aarq_data = wmem_new(wmem_file_scope(), aarq_data_t); - aarq_data-> aarq_pending = FALSE; - - /* insert aarq data */ - wmem_tree_insert32(aarq_data_tree ,aircraft_24_bit_address,(void*)aarq_data); - } - - /* check for pending AARQ/AARE sequences */ - /* if "aarq_data-> aarq_pending" is set this means that there is already one */ - /* AARQ/AARE sequence pending (is unwise to overwrite AARE/AARQ) */ - if (aarq_data-> aarq_pending == FALSE ) { - - /* init aarq data */ - memset(aarq_data,0,sizeof(aarq_data_t)); - - aarq_data->cv = atn_cv; - aarq_data-> aarq_pending = TRUE; - } +#.FN_BODY AARQ-apdu + packet_info * pinfo = actx->pinfo; + aarq_data_t *aarq_data = NULL; + atn_conversation_t *atn_cv = NULL; + guint32 aircraft_24_bit_address = 0; + + /* AARQ/DT: dstref present, srcref is always zero */ + if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ + + atn_cv = find_atn_conversation( + &pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src ); + if(!atn_cv){ + atn_cv = wmem_new(wmem_file_scope(), atn_conversation_t); + atn_cv->ae_qualifier = unknown; + create_atn_conversation(&pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src , + atn_cv); + } + } + + /* AARQ/CR: srcref present, dstref is always zero */ + if((!pinfo->clnp_dstref) && (pinfo->clnp_srcref)){ + atn_cv = find_atn_conversation(&pinfo->src, + pinfo->clnp_srcref, + &pinfo->dst ); + if(!atn_cv){ + atn_cv = wmem_new(wmem_file_scope(), atn_conversation_t); + atn_cv->ae_qualifier = unknown; + create_atn_conversation(&pinfo->src, + pinfo->clnp_srcref, + &pinfo->dst , + atn_cv); + } + } + + /* conversation is to be created prior to decoding */ + /* of "AE-qualifier-form2" which takes place here: */ + %(DEFAULT_BODY)s + + + /* save AARQ packet data to create a conversation */ + /* when decoding the following AARE PDU */ + /* ATN applications CM and CPDLC are air/ground applications */ + /* so there is always an aircraft (with its 24-bit address) */ + /* and a ground facility. */ + /* the assumption is that there is only one open AARQ/AARE */ + /* dialog per aircraft at a time. */ + /* the aircraft's 24-bit address is used as a key to each AARQ */ + /* data. AARQ data is used to create a conversation with */ + /* air and ground endpoints (based on NSAP's and transport references) */ + /* when decoding AARE.*/ + /* note: */ + /* it may be more robust to create the conversation */ + /* in the "ositp" dissector an to merely use the conversation here */ + aircraft_24_bit_address = + get_aircraft_24_bit_address_from_nsap(pinfo); + + /* search for aarq entry */ + aarq_data = (aarq_data_t *) wmem_tree_lookup32( + aarq_data_tree, + aircraft_24_bit_address); + + if(!aarq_data){ /* aarq data not found, create new record */ + + /* alloc aarq data */ + aarq_data = wmem_new(wmem_file_scope(), aarq_data_t); + aarq_data-> aarq_pending = FALSE; + + /* insert aarq data */ + wmem_tree_insert32(aarq_data_tree ,aircraft_24_bit_address,(void*)aarq_data); + } + + /* check for pending AARQ/AARE sequences */ + /* if "aarq_data-> aarq_pending" is set this means that there is already one */ + /* AARQ/AARE sequence pending (is unwise to overwrite AARE/AARQ) */ + if (aarq_data-> aarq_pending == FALSE ) { + + /* init aarq data */ + memset(aarq_data,0,sizeof(aarq_data_t)); + + aarq_data->cv = atn_cv; + aarq_data-> aarq_pending = TRUE; + } #.END -#.FN_BODY AARE-apdu - packet_info * pinfo = actx->pinfo; - guint32 aircraft_24_bit_address = 0 ; - atn_conversation_t *atn_cv = NULL; - aarq_data_t *aarq_data = NULL; - - /* get AARQ data and use it to create a new conversation, */ - /* the conversation is used along with */ - /* AARQ's "calling ae qualifier" to determine the */ - /* type of air/ground application of each subsequent frame.*/ - /* we use this information to invoke the correct application dissector. */ - /* note: */ - /* heuristical decoding of ASN1 will not work for all cases, */ - /* for there may be CM PDU's which will exactly look like CPDLC PDU'S */ - - /* get 24-bit icao address */ - aircraft_24_bit_address = get_aircraft_24_bit_address_from_nsap(pinfo); - - /* search for aarq entry */ - aarq_data = (aarq_data_t *) wmem_tree_lookup32( - aarq_data_tree, - aircraft_24_bit_address); - - /* no aarq data present, do nothing */ - /* without both ends of the conversation and without */ - /* the "calling ae-qualifier there is no point in setting up "*/ - /* a conversation */ - if(!aarq_data) { - - return offset; - } - - /* AARE/DT: dstref present, srcref is always zero */ - if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ - - atn_cv = find_atn_conversation(&pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src ); - - if(!atn_cv){ /* conversation not fond */ - - /* DT has only dstref - create new conversation */ - create_atn_conversation(&pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src , - aarq_data->cv); - } - } - - /* AARE/CC: srcref and dstref present */ - if((pinfo->clnp_dstref) && (pinfo->clnp_srcref)){ - - atn_cv = find_atn_conversation( - &pinfo->src, - pinfo->clnp_srcref, +#.FN_BODY AARE-apdu + packet_info * pinfo = actx->pinfo; + guint32 aircraft_24_bit_address = 0 ; + atn_conversation_t *atn_cv = NULL; + aarq_data_t *aarq_data = NULL; + + /* get AARQ data and use it to create a new conversation, */ + /* the conversation is used along with */ + /* AARQ's "calling ae qualifier" to determine the */ + /* type of air/ground application of each subsequent frame.*/ + /* we use this information to invoke the correct application dissector. */ + /* note: */ + /* heuristical decoding of ASN1 will not work for all cases, */ + /* for there may be CM PDU's which will exactly look like CPDLC PDU'S */ + + /* get 24-bit icao address */ + aircraft_24_bit_address = get_aircraft_24_bit_address_from_nsap(pinfo); + + /* search for aarq entry */ + aarq_data = (aarq_data_t *) wmem_tree_lookup32( + aarq_data_tree, + aircraft_24_bit_address); + + /* no aarq data present, do nothing */ + /* without both ends of the conversation and without */ + /* the "calling ae-qualifier there is no point in setting up "*/ + /* a conversation */ + if(!aarq_data) { + + return offset; + } + + /* AARE/DT: dstref present, srcref is always zero */ + if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ + + atn_cv = find_atn_conversation(&pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src ); + + if(!atn_cv){ /* conversation not fond */ + + /* DT has only dstref - create new conversation */ + create_atn_conversation(&pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src , + aarq_data->cv); + } + } + + /* AARE/CC: srcref and dstref present */ + if((pinfo->clnp_dstref) && (pinfo->clnp_srcref)){ + + atn_cv = find_atn_conversation( + &pinfo->src, + pinfo->clnp_srcref, &pinfo->dst); - if(atn_cv){ /* conversation found. */ + if(atn_cv){ /* conversation found. */ - /* create new conversation for dstref */ - create_atn_conversation(&pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src , - aarq_data->cv); + /* create new conversation for dstref */ + create_atn_conversation(&pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src , + aarq_data->cv); - }else { /* no conversation found */ - /* as CC contains srcref *and* dstref we use both to create new records */ - create_atn_conversation(&pinfo->src, - pinfo->clnp_srcref, - &pinfo->dst , - aarq_data->cv); - create_atn_conversation(&pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src , - aarq_data->cv); - } - } + }else { /* no conversation found */ + /* as CC contains srcref *and* dstref we use both to create new records */ + create_atn_conversation(&pinfo->src, + pinfo->clnp_srcref, + &pinfo->dst , + aarq_data->cv); + create_atn_conversation(&pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src , + aarq_data->cv); + } + } - /* clear aarq data */ - memset(aarq_data,0,sizeof(aarq_data_t)); - aarq_data-> aarq_pending = FALSE; + /* clear aarq data */ + memset(aarq_data,0,sizeof(aarq_data_t)); + aarq_data-> aarq_pending = FALSE; - %(DEFAULT_BODY)s + %(DEFAULT_BODY)s #.END @@ -390,157 +386,157 @@ PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_ar 0U, 2U, NULL, TRUE); #.END -#.FN_BODY Release-request-reason +#.FN_BODY Release-request-reason /* extension present: last param set to true. asn2wrs didn't take notice of that */ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index, 0U, 30U, NULL, TRUE); #.END -#.FN_BODY Release-response-reason +#.FN_BODY Release-response-reason /* extension present: last param set to true. asn2wrs didn't take notice of that */ offset = dissect_per_constrained_integer( - tvb, - offset, - actx, - tree, - hf_index, - 0U, - 30U, - NULL, - TRUE); + tvb, + offset, + actx, + tree, + hf_index, + 0U, + 30U, + NULL, + TRUE); #.END -#.FN_BODY Mechanism-name +#.FN_BODY Mechanism-name offset = dissect_per_object_identifier( - tvb, - offset, - actx, - tree, - hf_index, - NULL); + tvb, + offset, + actx, + tree, + hf_index, + NULL); #.END -#.FN_BODY EXTERNALt/data-value-descriptor - - offset = dissect_per_octet_string( - tvb, - offset, - actx, - tree, - hf_index, - -1, - -1, - FALSE, - &actx->external.data_value_descriptor); +#.FN_BODY EXTERNALt/data-value-descriptor + + offset = dissect_per_octet_string( + tvb, + offset, + actx, + tree, + hf_index, + -1, + -1, + FALSE, + &actx->external.data_value_descriptor); actx->external.data_value_descr_present = TRUE; #.END -#.FN_BODY EXTERNALt/encoding/single-ASN1-type +#.FN_BODY EXTERNALt/encoding/single-ASN1-type - %(DEFAULT_BODY)s + %(DEFAULT_BODY)s #.END -#.FN_BODY EXTERNALt/encoding/octet-aligned +#.FN_BODY EXTERNALt/encoding/octet-aligned - %(DEFAULT_BODY)s + %(DEFAULT_BODY)s #.END -#.FN_BODY EXTERNALt/encoding/arbitrary - tvbuff_t *tvb_usr = NULL; - packet_info * pinfo = actx->pinfo; - atn_conversation_t *atn_cv = NULL; - heur_dtbl_entry_t *hdtbl_entry; - - /* decode bit-string user data within ACSE */ - offset = dissect_per_bit_string( - tvb, - offset, - actx, - tree, hf_index, - NO_BOUND, - NO_BOUND, - FALSE, - &tvb_usr, - NULL); - - if (tvb_usr) { - /* DT: dstref present, srcref is always zero */ - if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ - - atn_cv = find_atn_conversation( - &pinfo->dst, - pinfo->clnp_dstref, - &pinfo->src); - } - /* CR: srcref present, dstref always zero */ - if((pinfo->clnp_srcref) && (!pinfo->clnp_dstref)){ - - atn_cv = find_atn_conversation( - &pinfo->src, - pinfo->clnp_srcref, - &pinfo->dst); - } - /* CC: srcref and dstref present */ - if((pinfo->clnp_srcref) && (pinfo->clnp_dstref)){ - - atn_cv = find_atn_conversation( - &pinfo->src, - pinfo->clnp_srcref, - &pinfo->dst); - } - - if(atn_cv) { - switch(atn_cv->ae_qualifier){ - case cma: /* contact management */ - - call_dissector_with_data( - atn_cm_handle, - tvb_new_subset_remaining(tvb_usr, 0), - pinfo, - root_tree, - NULL); - break; - case cpdlc: /* plain old cpdlc */ - case pmcpdlc: /* protected mode cpdlc */ - - call_dissector_with_data( - atn_cpdlc_handle, - tvb_new_subset_remaining(tvb_usr, 0), - pinfo, - root_tree, - NULL); - break; - default: /* unknown or unhandled datalink application */ - - dissector_try_heuristic( - atn_ulcs_heur_subdissector_list, - tvb_new_subset_remaining(tvb_usr,0), - actx->pinfo, - root_tree, - &hdtbl_entry, - NULL); - break; - } - }else { - - dissector_try_heuristic( - atn_ulcs_heur_subdissector_list, - tvb_new_subset_remaining(tvb_usr,0), - actx->pinfo, - root_tree, - &hdtbl_entry, - NULL); - } - } - - offset += tvb_reported_length_remaining(tvb, offset); +#.FN_BODY EXTERNALt/encoding/arbitrary + tvbuff_t *tvb_usr = NULL; + packet_info * pinfo = actx->pinfo; + atn_conversation_t *atn_cv = NULL; + heur_dtbl_entry_t *hdtbl_entry; + + /* decode bit-string user data within ACSE */ + offset = dissect_per_bit_string( + tvb, + offset, + actx, + tree, hf_index, + NO_BOUND, + NO_BOUND, + FALSE, + &tvb_usr, + NULL); + + if (tvb_usr) { + /* DT: dstref present, srcref is always zero */ + if((pinfo->clnp_dstref) && (!pinfo->clnp_srcref)){ + + atn_cv = find_atn_conversation( + &pinfo->dst, + pinfo->clnp_dstref, + &pinfo->src); + } + /* CR: srcref present, dstref always zero */ + if((pinfo->clnp_srcref) && (!pinfo->clnp_dstref)){ + + atn_cv = find_atn_conversation( + &pinfo->src, + pinfo->clnp_srcref, + &pinfo->dst); + } + /* CC: srcref and dstref present */ + if((pinfo->clnp_srcref) && (pinfo->clnp_dstref)){ + + atn_cv = find_atn_conversation( + &pinfo->src, + pinfo->clnp_srcref, + &pinfo->dst); + } + + if(atn_cv) { + switch(atn_cv->ae_qualifier){ + case cma: /* contact management */ + + call_dissector_with_data( + atn_cm_handle, + tvb_new_subset_remaining(tvb_usr, 0), + pinfo, + root_tree, + NULL); + break; + case cpdlc: /* plain old cpdlc */ + case pmcpdlc: /* protected mode cpdlc */ + + call_dissector_with_data( + atn_cpdlc_handle, + tvb_new_subset_remaining(tvb_usr, 0), + pinfo, + root_tree, + NULL); + break; + default: /* unknown or unhandled datalink application */ + + dissector_try_heuristic( + atn_ulcs_heur_subdissector_list, + tvb_new_subset_remaining(tvb_usr,0), + actx->pinfo, + root_tree, + &hdtbl_entry, + NULL); + break; + } + }else { + + dissector_try_heuristic( + atn_ulcs_heur_subdissector_list, + tvb_new_subset_remaining(tvb_usr,0), + actx->pinfo, + root_tree, + &hdtbl_entry, + NULL); + } + } + + offset += tvb_reported_length_remaining(tvb, offset); #.END @@ -548,11 +544,11 @@ PDV-list/presentation-data-values/arbitrary pdv-list_presentation-data-values_ar # Editor modelines - http://www.wireshark.org/tools/modelines.html # # Local variables: -# c-basic-offset: 2 -# tab-width: 2 -# indent-tabs-mode: t +# c-basic-offset: 4 +# tab-width: 8 +# indent-tabs-mode: nil # End: # -# vi: set shiftwidth=2 tabstop=2 noexpandtab: -# :indentSize=2:tabSize=2:noTabs=false: +# vi: set shiftwidth=4 tabstop=8 expandtab: +# :indentSize=4:tabSize=8:noTabs=true: # |