diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2012-12-12 15:17:36 +0000 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2012-12-12 15:17:36 +0000 |
commit | f6f46de2ca806a7293bbc1a82191f5dffc84de7c (patch) | |
tree | 25149877950915fcbba8cddd1bfcccfe2f24ff07 /asn1/pres | |
parent | 349e61ce9e1c90609a9fb0eefa31c8ee943aa80f (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.c | 44 | ||||
-rw-r--r-- | asn1/pres/packet-pres-template.h | 2 | ||||
-rw-r--r-- | asn1/pres/pres.cnf | 13 |
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 } |