2 * Object IDentifier Support
6 * (c) 2007, Luis E. Garcia Ontanon <luis@ontanon.org>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 #include <epan/ftypes/ftypes.h>
31 #include <epan/prefs.h>
32 #include <epan/wmem/wmem.h>
33 #include "ws_symbol_export.h"
38 #define BER_TAG_ANY -1
45 typedef struct _oid_bits_info_t
{
48 struct _oid_bit_t
* data
;
51 typedef enum _oid_key_type_t
{
59 OID_KEY_TYPE_IMPLIED_OID
,
60 OID_KEY_TYPE_IMPLIED_STRING
,
61 OID_KEY_TYPE_IMPLIED_BYTES
,
63 OID_KEY_TYPE_DATE_AND_TIME
66 typedef struct _oid_value_type_t
{
73 oid_key_type_t keytype
;
77 typedef enum _oid_kind_t
{
84 OID_KIND_NOTIFICATION
,
90 typedef struct _oid_key_t
{
93 oid_key_type_t key_type
;
97 struct _oid_key_t
* next
;
100 typedef struct _oid_info_t
{
104 wmem_tree_t
* children
;
105 const oid_value_type_t
* value_type
;
108 oid_bits_info_t
* bits
;
109 struct _oid_info_t
* parent
;
112 /** init function called from prefs.c */
113 WS_DLL_PUBLIC
void oids_init(void);
114 extern void oid_pref_init(module_t
*nameres
);
116 /** init function called from epan.h */
117 WS_DLL_PUBLIC
void oids_cleanup(void);
120 * The objects returned by all these functions are all allocated with a
121 * packet lifetime and does not have have to be freed.
122 * However, take into account that when the packet dissection
123 * completes, these buffers will be automatically reclaimed/freed.
124 * If you need the buffer to remain for a longer scope than packet lifetime
125 * you must copy the content to an se_alloc() buffer.
129 * These functions convert through the various formats:
130 * string: is like "0.1.3.4.5.30" (not resolved)
131 * encoded: is BER encoded (as per X.690 section 8.19)
132 * subids: is an array of guint32s
135 /* return length of encoded buffer */
137 guint
oid_subid2encoded(guint len
, guint32
* subids
, guint8
** encoded_p
);
139 guint
oid_string2encoded(const gchar
*oid_str
, guint8
** encoded_p
);
141 /* return length of subid array */
143 guint
oid_encoded2subid(const guint8
*oid
, gint len
, guint32
** subids_p
);
145 guint
oid_encoded2subid_sub(const guint8
*oid_bytes
, gint oid_len
, guint32
** subids_pi
,
148 guint
oid_string2subid(const gchar
*oid_str
, guint32
** subids_p
);
150 WS_DLL_PUBLIC
const gchar
* oid_encoded2string(const guint8
* encoded
, guint len
);
151 WS_DLL_PUBLIC
const gchar
* rel_oid_encoded2string(const guint8
* encoded
, guint len
);
152 WS_DLL_PUBLIC
const gchar
* oid_subid2string(guint32
*subids
, guint len
);
153 WS_DLL_PUBLIC
const gchar
* rel_oid_subid2string(guint32
*subids
, guint len
, gboolean is_absolute
);
155 /* these return a formated string as human readable as posible */
156 WS_DLL_PUBLIC
const gchar
*oid_resolved(guint len
, guint32
*subids
);
157 WS_DLL_PUBLIC
const gchar
*oid_resolved_from_encoded(const guint8
*oid
, gint len
);
158 WS_DLL_PUBLIC
const gchar
*rel_oid_resolved_from_encoded(const guint8
*oid
, gint len
);
159 WS_DLL_PUBLIC
const gchar
*oid_resolved_from_string(const gchar
*oid_str
);
161 /* these yield two formated strings one resolved and one numeric */
162 WS_DLL_PUBLIC
void oid_both(guint oid_len
, guint32
*subids
, char** resolved_p
, char** numeric_p
);
163 WS_DLL_PUBLIC
void oid_both_from_encoded(const guint8
*oid
, gint oid_len
, char** resolved_p
, char** numeric_p
);
164 WS_DLL_PUBLIC
void oid_both_from_string(const gchar
*oid_str
, char** resolved_p
, char** numeric_p
);
167 * These return the info for the best match.
168 * *matched_p will be set to the number of nodes used by the returned oid
169 * *left_p will be set to the number of remaining unresolved subids
171 WS_DLL_PUBLIC oid_info_t
* oid_get(guint oid_len
, guint32
*subids
, guint
* matched_p
, guint
* left_p
);
172 WS_DLL_PUBLIC oid_info_t
* oid_get_from_encoded(const guint8
*oid
, gint oid_len
, guint32
**subids
, guint
* matched
, guint
* left
);
173 WS_DLL_PUBLIC oid_info_t
* oid_get_from_string(const gchar
*oid_str
, guint32
**subids
, guint
* matched
, guint
* left
);
175 /* these are used to add oids to the collection */
176 WS_DLL_PUBLIC
void oid_add(const char* name
, guint oid_len
, guint32
*subids
);
177 WS_DLL_PUBLIC
void oid_add_from_encoded(const char* name
, const guint8
*oid
, gint oid_len
);
178 WS_DLL_PUBLIC
void oid_add_from_string(const char* name
, const gchar
*oid_str
);
181 * Fetch the default MIB/PIB path
183 * @return A string containing the default MIB/PIB path. It must be
184 * g_free()d by the caller.
186 WS_DLL_PUBLIC gchar
*oid_get_default_mib_path(void);
188 /* macros for legacy oid functions */
189 #define subid_t guint32
194 extern char* oid_test_a2b(guint32 num_subids
, guint32
* subids
);
195 extern void add_oid_debug_subtree(oid_info_t
* oid_info
, proto_tree
*tree
);
197 #define add_oid_debug_subtree(a,b) ((void)0)