1 /*
2 * Copyright (c) 2008, 2009, 2012, 2013 by Farsight Security, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /* Import. */
18
19 #include "private.h"
20
21 /* Export. */
22
23 nmsg_msgmod_t
nmsg_msgmod_lookup(unsigned vid,unsigned msgtype)24 nmsg_msgmod_lookup(unsigned vid, unsigned msgtype) {
25 struct nmsg_msgmodset *ms = _nmsg_global_msgmodset;
26 struct nmsg_msgmod *mod;
27 struct nmsg_msgvendor *msgv;
28
29 assert(ms != NULL);
30
31 if (vid <= ms->nv) {
32 msgv = ms->vendors[vid];
33 if (msgv != NULL && msgtype <= msgv->nm) {
34 mod = msgv->msgtypes[msgtype];
35 return (mod);
36 }
37 }
38
39 return (NULL);
40 }
41
42 nmsg_msgmod_t
nmsg_msgmod_lookup_byname(const char * vname,const char * mname)43 nmsg_msgmod_lookup_byname(const char *vname, const char *mname) {
44 unsigned vid = 0;
45 unsigned msgtype = 0;
46
47 vid = nmsg_msgmod_vname_to_vid(vname);
48 msgtype = nmsg_msgmod_mname_to_msgtype(vid, mname);
49
50 if (vid == 0 || msgtype == 0)
51 return (NULL);
52
53 return (nmsg_msgmod_lookup(vid, msgtype));
54 }
55
56 unsigned
nmsg_msgmod_vname_to_vid(const char * vname)57 nmsg_msgmod_vname_to_vid(const char *vname) {
58 struct nmsg_msgmodset *ms = _nmsg_global_msgmodset;
59 unsigned i, j;
60
61 assert(ms != NULL);
62
63 if (strcasecmp(vname, "ISC") == 0)
64 vname = "base";
65
66 for (i = 0; i <= ms->nv; i++) {
67 struct nmsg_msgvendor *msgv;
68 msgv = ms->vendors[i];
69
70 if (msgv != NULL) {
71 for (j = 0; j <= msgv->nm; j++) {
72 struct nmsg_msgmod *mod;
73 mod = msgv->msgtypes[j];
74
75 if (mod != NULL &&
76 strcasecmp(mod->plugin->vendor.name, vname) == 0)
77 return (mod->plugin->vendor.id);
78 }
79 }
80 }
81 return (0);
82 }
83
84 unsigned
nmsg_msgmod_mname_to_msgtype(unsigned vid,const char * mname)85 nmsg_msgmod_mname_to_msgtype(unsigned vid, const char *mname) {
86 struct nmsg_msgmodset *ms = _nmsg_global_msgmodset;
87 unsigned i;
88
89 assert(ms != NULL);
90
91 if (vid <= ms->nv) {
92 struct nmsg_msgvendor *msgv;
93
94 msgv = ms->vendors[vid];
95 if (msgv == NULL)
96 return (0);
97 for (i = 0; i <= msgv->nm; i++) {
98 struct nmsg_msgmod *mod;
99
100 mod = msgv->msgtypes[i];
101 if (mod != NULL) {
102 if (strcasecmp(mod->plugin->msgtype.name, mname) == 0)
103 return (mod->plugin->msgtype.id);
104 }
105 }
106 }
107
108 return (0);
109 }
110
111 const char *
nmsg_msgmod_vid_to_vname(unsigned vid)112 nmsg_msgmod_vid_to_vname(unsigned vid) {
113 struct nmsg_msgmodset *ms = _nmsg_global_msgmodset;
114 struct nmsg_msgvendor *msgv;
115 unsigned i;
116
117 assert(ms != NULL);
118
119 if (vid > ms->nv)
120 return (NULL);
121 msgv = ms->vendors[vid];
122 if (msgv == NULL)
123 return (NULL);
124 for (i = 0; i <= msgv->nm; i++) {
125 struct nmsg_msgmod *mod;
126
127 mod = msgv->msgtypes[i];
128 if (mod != NULL && mod->plugin->vendor.id == vid)
129 return (mod->plugin->vendor.name);
130 }
131 return (NULL);
132 }
133
134 const char *
nmsg_msgmod_msgtype_to_mname(unsigned vid,unsigned msgtype)135 nmsg_msgmod_msgtype_to_mname(unsigned vid, unsigned msgtype) {
136 struct nmsg_msgmodset *ms = _nmsg_global_msgmodset;
137 struct nmsg_msgvendor *msgv;
138 unsigned i;
139
140 assert(ms != NULL);
141
142 if (vid > ms->nv)
143 return (NULL);
144 msgv = ms->vendors[vid];
145 if (msgv == NULL)
146 return (NULL);
147 for (i = 0; i <= msgv->nm; i++) {
148 struct nmsg_msgmod *mod;
149
150 mod = msgv->msgtypes[i];
151 if (mod != NULL && mod->plugin->vendor.id == vid) {
152 if (mod->plugin->msgtype.id == msgtype)
153 return (mod->plugin->msgtype.name);
154 }
155 }
156 return (NULL);
157 }
158
159 unsigned
nmsg_msgmod_get_max_vid(void)160 nmsg_msgmod_get_max_vid(void) {
161 struct nmsg_msgmodset *ms = _nmsg_global_msgmodset;
162 assert(ms != NULL);
163 return (ms->nv);
164 }
165
166 unsigned
nmsg_msgmod_get_max_msgtype(unsigned vid)167 nmsg_msgmod_get_max_msgtype(unsigned vid) {
168 struct nmsg_msgmodset *ms = _nmsg_global_msgmodset;
169 struct nmsg_msgvendor *msgv;
170
171 assert(ms != NULL);
172 if (vid > ms->nv)
173 return (0);
174 msgv = ms->vendors[vid];
175 if (msgv == NULL)
176 return (0);
177 return (msgv->nm);
178 }
179