aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/pres
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2012-12-12 15:17:36 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2012-12-12 15:17:36 +0000
commitf6f46de2ca806a7293bbc1a82191f5dffc84de7c (patch)
tree25149877950915fcbba8cddd1bfcccfe2f24ff07 /asn1/pres
parent349e61ce9e1c90609a9fb0eefa31c8ee943aa80f (diff)
Moved users table lookup to find_oid_by_pres_ctx_id() so other
dissectors (acse, ros, rtse) can benefit from the configured settings. svn path=/trunk/; revision=46520
Diffstat (limited to 'asn1/pres')
-rw-r--r--asn1/pres/packet-pres-template.c44
-rw-r--r--asn1/pres/packet-pres-template.h2
-rw-r--r--asn1/pres/pres.cnf13
3 files changed, 27 insertions, 32 deletions
diff --git a/asn1/pres/packet-pres-template.c b/asn1/pres/packet-pres-template.c
index 059c75dc36..2a3fb99a68 100644
--- a/asn1/pres/packet-pres-template.c
+++ b/asn1/pres/packet-pres-template.c
@@ -159,8 +159,26 @@ register_ctx_id_and_oid(packet_info *pinfo _U_, guint32 idx, const char *oid)
g_hash_table_insert(pres_ctx_oid_table, pco, pco);
}
+static char *
+find_oid_in_users_table(packet_info *pinfo, guint32 ctx_id)
+{
+ guint i;
+
+ for (i = 0; i < num_pres_users; i++) {
+ pres_user_t *u = &(pres_users[i]);
+
+ if (u->ctx_id == ctx_id) {
+ /* Register oid so other dissectors can find this connection */
+ register_ctx_id_and_oid(pinfo, u->ctx_id, u->oid);
+ return u->oid;
+ }
+ }
+
+ return NULL;
+}
+
char *
-find_oid_by_pres_ctx_id(packet_info *pinfo _U_, guint32 idx)
+find_oid_by_pres_ctx_id(packet_info *pinfo, guint32 idx)
{
pres_ctx_oid_t pco, *tmppco;
conversation_t *conversation;
@@ -178,7 +196,8 @@ find_oid_by_pres_ctx_id(packet_info *pinfo _U_, guint32 idx)
if(tmppco){
return tmppco->oid;
}
- return NULL;
+
+ return find_oid_in_users_table(pinfo, idx);
}
static void *
@@ -201,27 +220,6 @@ pres_free_cb(void *r)
g_free(u->oid);
}
-static gboolean
-pres_try_users_table(guint32 ctx_id, tvbuff_t *tvb, int offset, packet_info *pinfo)
-{
- tvbuff_t *next_tvb;
- guint i;
-
- for (i = 0; i < num_pres_users; i++) {
- pres_user_t *u = &(pres_users[i]);
-
- if (u->ctx_id == ctx_id) {
- /* Register oid so other dissectors can find this connection */
- register_ctx_id_and_oid(pinfo, u->ctx_id, u->oid);
- next_tvb = tvb_new_subset_remaining(tvb, offset);
- call_ber_oid_callback(u->oid, next_tvb, offset, pinfo, global_tree);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
#include "packet-pres-fn.c"
diff --git a/asn1/pres/packet-pres-template.h b/asn1/pres/packet-pres-template.h
index 372d692b7b..aad083d868 100644
--- a/asn1/pres/packet-pres-template.h
+++ b/asn1/pres/packet-pres-template.h
@@ -27,6 +27,6 @@
/*#include "packet-pres-exp.h"*/
-extern char *find_oid_by_pres_ctx_id(packet_info *pinfo _U_, guint32 idx);
+extern char *find_oid_by_pres_ctx_id(packet_info *pinfo, guint32 idx);
#endif /* PACKET_PRES_H */
diff --git a/asn1/pres/pres.cnf b/asn1/pres/pres.cnf
index cf6c6a6171..01d56074e5 100644
--- a/asn1/pres/pres.cnf
+++ b/asn1/pres/pres.cnf
@@ -43,11 +43,10 @@ CPR-PPDU/normal-mode-parameters/provider-reason cPR_PPDU__provider-reason
next_tvb = tvb_new_subset_remaining(tvb, offset);
call_ber_oid_callback(oid, next_tvb, offset, actx->pinfo, global_tree);
} else {
- if (!pres_try_users_table(presentation_context_identifier, tvb, offset, actx->pinfo)) {
- proto_item *ti = proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available");
- expert_add_info_format(actx->pinfo, ti, PI_UNDECODED, PI_WARN, "Dissector is not available");
- }
+ proto_item *ti = proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available");
+ expert_add_info_format(actx->pinfo, ti, PI_UNDECODED, PI_WARN, "Dissector is not available");
}
+
#.FN_BODY PDV-list/presentation-data-values/octet-aligned
tvbuff_t *next_tvb;
@@ -58,10 +57,8 @@ CPR-PPDU/normal-mode-parameters/provider-reason cPR_PPDU__provider-reason
dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &next_tvb);
call_ber_oid_callback(oid, next_tvb, offset, actx->pinfo, global_tree);
} else {
- if (!pres_try_users_table(presentation_context_identifier, tvb, offset, actx->pinfo)) {
- proto_item *ti = proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available");
- expert_add_info_format(actx->pinfo, ti, PI_UNDECODED, PI_WARN, "Dissector is not available");
- }
+ proto_item *ti = proto_tree_add_text(tree, tvb, offset, -1,"dissector is not available");
+ expert_add_info_format(actx->pinfo, ti, PI_UNDECODED, PI_WARN, "Dissector is not available");
%(DEFAULT_BODY)s
}