aboutsummaryrefslogtreecommitdiffstats
path: root/asn1
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2005-09-04 09:00:01 +0000
committerAnders Broman <anders.broman@ericsson.com>2005-09-04 09:00:01 +0000
commitbc4b6481b473f64f20cb5d1c013b79eced4ddef5 (patch)
tree152a1b64148ecf3fcafc4ba2c62b3d2995bb278e /asn1
parent60eb171f7a761439d460096853dcb0a9d91b535a (diff)
From Graeme Lunt:
Basically the changes are: a) [pres] make the find_oid_by_[pres_]ctx_id (I changed the name to make it more specific) non-static so it can be called from other dissectors (see acse.cnf changes). I also call it from RTSE and ROS dissectors b) [acse] remove (#ifdef NOT_NEEDED) the oid lookup table and any reference to acse_handle - as these are no longer needed c) [acse] register the acse dissector on 2.2.1.0.1 with some modifications: -#ifdef:ed code removed - renamed aco -> pco svn path=/trunk/; revision=15678
Diffstat (limited to 'asn1')
-rw-r--r--asn1/acse/acse.cnf9
-rw-r--r--asn1/acse/packet-acse-template.c33
-rw-r--r--asn1/pres/packet-pres-template.c45
-rw-r--r--asn1/pres/packet-pres-template.h2
-rw-r--r--asn1/pres/pres.cnf2
5 files changed, 48 insertions, 43 deletions
diff --git a/asn1/acse/acse.cnf b/asn1/acse/acse.cnf
index 92d038e7d7..34b5c79526 100644
--- a/asn1/acse/acse.cnf
+++ b/asn1/acse/acse.cnf
@@ -76,10 +76,19 @@ ACRQ-apdu/aSO-context-name aCRQ_aSO_context_name
hf_index, object_identifier_id);
#.FN_BODY EXTERNAL/indirect-reference
+ char *oid;
offset = dissect_ber_integer(FALSE, pinfo, tree, tvb, offset,
hf_acse_indirect_reference,
&indir_ref);
+ /* look up the indirect reference */
+ if(oid = find_oid_by_pres_ctx_id(pinfo, indir_ref)) {
+ strcpy(object_identifier_id, oid);
+ }
+
+ if(session)
+ session->pres_ctx_id = indir_ref;
+
#.FN_BODY EXTERNAL/encoding/single-ASN1-type
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, top_tree);
diff --git a/asn1/acse/packet-acse-template.c b/asn1/acse/packet-acse-template.c
index ad51c59bd9..abda0486de 100644
--- a/asn1/acse/packet-acse-template.c
+++ b/asn1/acse/packet-acse-template.c
@@ -49,6 +49,7 @@
#include "packet-ber.h"
#include "packet-acse.h"
#include "packet-ses.h"
+#include "packet-pres.h"
#include "packet-x509if.h"
#define PNAME "ACSE"
@@ -72,6 +73,7 @@ static guint32 indir_ref=0;
static proto_tree *top_tree=NULL;
+#if NOT_NEEDED
/* to keep track of presentation context identifiers and protocol-oids */
typedef struct _acse_ctx_oid_t {
/* XXX here we should keep track of ADDRESS/PORT as well */
@@ -134,6 +136,7 @@ find_oid_by_ctx_id(packet_info *pinfo _U_, guint32 idx)
return NULL;
}
+# endif /* NOT_NEEDED */
#include "packet-acse-fn.c"
@@ -182,14 +185,14 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
/* data pdu is not ACSE pdu and has to go directly to app dissector */
switch(session->spdu_type){
case SES_CONNECTION_REQUEST: /* AARQ */
- case SES_CONNECTION_ACCEPT: /* AARE */
- case SES_REFUSE: /* RLRE */
- case SES_DISCONNECT: /* RLRQ */
- case SES_FINISH: /* RLRE */
- case SES_ABORT: /* ABRT */
+ case SES_CONNECTION_ACCEPT: /* AARE */
+ case SES_REFUSE: /* RLRE */
+ case SES_DISCONNECT: /* RLRQ */
+ case SES_FINISH: /* RLRE */
+ case SES_ABORT: /* ABRT */
break;
case SES_DATA_TRANSFER:
- oid=find_oid_by_ctx_id(pinfo, indir_ref);
+ oid=find_oid_by_pres_ctx_id(pinfo, indir_ref);
if(oid){
call_ber_oid_callback(oid, tvb, offset, pinfo, parent_tree);
} else {
@@ -223,18 +226,6 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
}
}
- switch(session->spdu_type){
- case SES_CONNECTION_REQUEST: /* AARQ */
- case SES_CONNECTION_ACCEPT: /* AARE */
- /* these two functions are used to set up the association
- between a presentation identifier (indir_ref) and
- a protocol identified by a oid.
- it is ugly to handle it with global variables but
- better than nothing.
- */
- register_ctx_id_and_oid(pinfo, indir_ref, object_identifier_id);
- break;
- }
}
/*--- proto_register_acse ----------------------------------------------*/
@@ -259,14 +250,16 @@ void proto_register_acse(void) {
proto_register_field_array(proto_acse, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
- register_init_routine(acse_init);
}
/*--- proto_reg_handoff_acse -------------------------------------------*/
void proto_reg_handoff_acse(void) {
/*#include "packet-acse-dis-tab.c"*/
- register_ber_oid_dissector("2.2.3.1.1", dissect_acse, proto_acse, "acse");
+
+ register_ber_oid_name("2.2.3.1.1","aCSE-id");
register_ber_oid_dissector("2.2.1.0.1", dissect_acse, proto_acse, "acse-as-id");
+
+
}
diff --git a/asn1/pres/packet-pres-template.c b/asn1/pres/packet-pres-template.c
index 82b5e4aae2..bddc97f1a0 100644
--- a/asn1/pres/packet-pres-template.c
+++ b/asn1/pres/packet-pres-template.c
@@ -53,9 +53,9 @@ static struct SESSION_DATA_STRUCTURE* session = NULL;
/* pointers for acse dissector */
proto_tree *global_tree = NULL;
packet_info *global_pinfo = NULL;
+
/* dissector for data */
static dissector_handle_t data_handle;
-static dissector_handle_t acse_handle;
static char abstract_syntax_name_oid[BER_MAX_OID_STR_LEN];
static guint32 presentation_context_identifier;
@@ -79,16 +79,16 @@ static gint ett_pres = -1;
static guint
pres_ctx_oid_hash(gconstpointer k)
{
- pres_ctx_oid_t *aco=(pres_ctx_oid_t *)k;
- return aco->ctx_id;
+ pres_ctx_oid_t *pco=(pres_ctx_oid_t *)k;
+ return pco->ctx_id;
}
/* XXX this one should be made ADDRESS/PORT aware */
static gint
pres_ctx_oid_equal(gconstpointer k1, gconstpointer k2)
{
- pres_ctx_oid_t *aco1=(pres_ctx_oid_t *)k1;
- pres_ctx_oid_t *aco2=(pres_ctx_oid_t *)k2;
- return aco1->ctx_id==aco2->ctx_id;
+ pres_ctx_oid_t *pco1=(pres_ctx_oid_t *)k1;
+ pres_ctx_oid_t *pco2=(pres_ctx_oid_t *)k2;
+ return pco1->ctx_id==pco2->ctx_id;
}
static void
@@ -106,26 +106,27 @@ pres_init(void)
static void
register_ctx_id_and_oid(packet_info *pinfo _U_, guint32 idx, char *oid)
{
- pres_ctx_oid_t *aco, *tmpaco;
- aco=se_alloc(sizeof(pres_ctx_oid_t));
- aco->ctx_id=idx;
- aco->oid=se_strdup(oid);
+ pres_ctx_oid_t *pco, *tmppco;
+ pco=se_alloc(sizeof(pres_ctx_oid_t));
+ pco->ctx_id=idx;
+ pco->oid=se_strdup(oid);
/* if this ctx already exists, remove the old one first */
- tmpaco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, aco);
- if(tmpaco){
- g_hash_table_remove(pres_ctx_oid_table, tmpaco);
+ tmppco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, pco);
+ if(tmppco){
+ g_hash_table_remove(pres_ctx_oid_table, tmppco);
+
}
- g_hash_table_insert(pres_ctx_oid_table, aco, aco);
+ g_hash_table_insert(pres_ctx_oid_table, pco, pco);
}
-static char *
-find_oid_by_ctx_id(packet_info *pinfo _U_, guint32 idx)
+char *
+find_oid_by_pres_ctx_id(packet_info *pinfo _U_, guint32 idx)
{
- pres_ctx_oid_t aco, *tmpaco;
- aco.ctx_id=idx;
- tmpaco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, &aco);
- if(tmpaco){
- return tmpaco->oid;
+ pres_ctx_oid_t pco, *tmppco;
+ pco.ctx_id=idx;
+ tmppco=(pres_ctx_oid_t *)g_hash_table_lookup(pres_ctx_oid_table, &pco);
+ if(tmppco){
+ return tmppco->oid;
}
return NULL;
}
@@ -261,5 +262,5 @@ void proto_reg_handoff_pres(void) {
"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) abstractSyntax(1) pres(1) version1(1)"); */
data_handle = find_dissector("data");
- acse_handle = find_dissector("acse");
+
}
diff --git a/asn1/pres/packet-pres-template.h b/asn1/pres/packet-pres-template.h
index 0f65aa1b03..00590f3a03 100644
--- a/asn1/pres/packet-pres-template.h
+++ b/asn1/pres/packet-pres-template.h
@@ -27,4 +27,6 @@
/*#include "packet-pres-exp.h"*/
+extern char *find_oid_by_pres_ctx_id(packet_info *pinfo _U_, guint32 idx);
+
#endif /* PACKET_PRES_H */
diff --git a/asn1/pres/pres.cnf b/asn1/pres/pres.cnf
index 6daf4a42d2..120e85362f 100644
--- a/asn1/pres/pres.cnf
+++ b/asn1/pres/pres.cnf
@@ -36,7 +36,7 @@ CPR-PPDU/normal-mode-parameters/provider-reason cPR_PPDU__provider-reason
tvbuff_t *next_tvb;
char *oid;
- oid=find_oid_by_ctx_id(pinfo, presentation_context_identifier);
+ oid=find_oid_by_pres_ctx_id(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);