trisulrp 1.5.7 → 1.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.7
1
+ 1.5.8
@@ -9,8 +9,8 @@ module TrisulRP::Guids
9
9
  CG_EXTERNAL_HOST = "{00AA77BB-0063-11A5-8380-FEBDBABBDBEA}" # Hosts outside HOME NETWORK
10
10
  CG_INTERNAL_HOST = "{889900CC-0063-11A5-8380-FEBDBABBDBEA}" # Hosts in HOME NETWORK
11
11
  CG_WEB_HOST = "{EEF95297-0C8D-4673-AD6B-F4BD2345FD69}" # Hosts talking HTTP/HTTPS
12
- CG_EMAIL_HOST = "{22D4082E-B8BA-40D0-A287-1F524DF8DA7B}" # Hosts with Email traffic
13
- CG_SSH_HOST = "{439002E4-3758-4E88-9438-8034FE1616AF}" # Hosts with SSH traffic
12
+ CG_EMAIL_HOST = "{22D4082E-B8BA-40D0-A287-1F524DF8DA7B}" # Hosts with Email traffic
13
+ CG_SSH_HOST = "{439002E4-3758-4E88-9438-8034FE1616AF}" # Hosts with SSH traffic
14
14
  CG_UNUSUAL_TRAFFIC_HOSTS = "{AE3A1449-5663-41A5-A028-FDE61DBB7EFA}" # Hosts with Unusual traffic
15
15
  CG_SUBNET = "{429B65AD-CDA4-452E-A852-24D8A3D0FBB3}" # Stats for configured IP Subnets
16
16
  CG_INTERFACE = "{8AC478BC-8891-0009-5F31-80774B010086}" # Per interface statistics
@@ -20,18 +20,18 @@ module TrisulRP::Guids
20
20
  CG_META_COUNTER_GROUP = "{4D88CC23-2883-4DEA-A313-A23B60FE8BDA}" # Second order stats for counters
21
21
  CG_META_SESSION_GROUP = "{594606BD-EEB2-4E0B-BAC4-84B7057088C8}" # Second order stats for flow activity
22
22
  CG_FLOWGENS = "{2314BB8E-2BCC-4B86-8AA2-677E5554C0FE}" # Flow generator traffic
23
- CG_FLOWINTFS = "{C0B04CA7-95FA-44EF-8475-3835F3314761}" # Flow interface traffic
24
- CG_HTTP_HOSTS = "{D2AAD7C6-E129-4366-A2AD-A8CB9AA4C2F4}" # Traffic by HTTP Host Headers
23
+ CG_FLOWINTFS = "{C0B04CA7-95FA-44EF-8475-3835F3314761}" # Flow interface traffic
24
+ CG_HTTP_HOSTS = "{D2AAD7C6-E129-4366-A2AD-A8CB9AA4C2F4}" # Traffic by HTTP Host Headers
25
25
  CG_HTTP_CONTENT_TYPES = "{C0C9757F-2005-4CC5-BB96-D72F607E6188}" # Traffic by HTTP Content Types
26
- CG_MAC = "{4B09BD22-3B99-40FC-8215-94A430EA0A35}" # Traffic per Ethernet MAC
26
+ CG_MAC = "{4B09BD22-3B99-40FC-8215-94A430EA0A35}" # Traffic per Ethernet MAC
27
27
  CG_LINKLAYERSTATS = "{9F5AD3A9-C74D-46D8-A8A8-DCDD773730BA}" # Breakdown of activity at link layer
28
28
  CG_NETWORKLAYERSTATS = "{E89BCD56-30AD-40F5-B1C8-8B7683F440BD}" # Breakdown of activity at network layer
29
- CG_VSAT = "{A8776788-B8E3-4108-AD24-0E3927D9364B}" # Traffic per VSAT
30
- CG_VLANSTATS = "{0EC72E9E-3AD2-43FD-8173-74693EEA08D0}" # Per VLAN Activity Monitor
31
- CG_HOSTSIPV6 = "{6CD742B1-C1CA-4708-BE78-0FCA2EB01A86}" # Stats for each IPv6 Host
32
- CG_TLSORG = "{432D7552-0363-4640-9CC5-23E4CA8410EA}" # TLS Organization
33
- CG_TLSCIPHER = "{5B64A573-623F-4F5B-8865-78C62BF466A7}" # TLS Ciphersuite
34
- CG_TLSCA = "{15856A98-7F87-46D7-84D2-18DD549F8A6F}" # TLS Cert Authority
29
+ CG_VSAT = "{A8776788-B8E3-4108-AD24-0E3927D9364B}" # Traffic per VSAT
30
+ CG_VLANSTATS = "{0EC72E9E-3AD2-43FD-8173-74693EEA08D0}" # Per VLAN Activity Monitor
31
+ CG_HOSTSIPV6 = "{6CD742B1-C1CA-4708-BE78-0FCA2EB01A86}" # Stats for each IPv6 Host
32
+ CG_TLSORG = "{432D7552-0363-4640-9CC5-23E4CA8410EA}" # TLS Organization
33
+ CG_TLSCIPHER = "{5B64A573-623F-4F5B-8865-78C62BF466A7}" # TLS Ciphersuite
34
+ CG_TLSCA = "{15856A98-7F87-46D7-84D2-18DD549F8A6F}" # TLS Cert Authority
35
35
 
36
36
 
37
37
  AG_IDS = "{9AFD8C08-07EB-47E0-BF05-28B4A7AE8DC9}" # Track IDS Alerts
data/lib/trisulrp/keys.rb CHANGED
@@ -3,305 +3,307 @@
3
3
  module TrisulRP::Keys
4
4
 
5
5
  class Null
6
- def self.xform(kstring)
7
- yield kstring if block_given?
8
- kstring
9
- end
6
+ def self.xform(kstring)
7
+ yield kstring if block_given?
8
+ kstring
9
+ end
10
10
  end
11
11
 
12
12
  class HNumber
13
- # key to human string
14
- # => width unused
15
- # => kstring = hex number like A011
16
- # output is a decimal number
17
- def self.xform(kstring)
18
- ret = kstring.hex.to_s
19
- yield ret if block_given?
20
- ret
21
- end
22
-
23
- # human string to key
24
- # => width padding eg to output 000B when input = 11 and field is a 2 byte
25
- # => dstring input decimal
26
- def self.invert_xform(width,dstring)
27
- ret = dstring.to_i.to_s(16).rjust(width,"0").upcase
28
- yield ret if block_given?
29
- ret
30
- end
31
-
32
- # is_key_pattern?
33
- def self.is_key_form? patt
34
- return false if patt.nil?
35
- [2,4,8].member? patt.length and patt =~ /(\d|[a-f]|[A-F])+/
36
- end
37
-
38
- # is_human_pattern?
39
- def self.is_human_form? patt
40
- patt.to_i > 0 or patt.squeeze("0") == "0"
41
- end
13
+ # key to human string
14
+ # => width unused
15
+ # => kstring = hex number like A011
16
+ # output is a decimal number
17
+ def self.xform(kstring)
18
+ ret = kstring.hex.to_s
19
+ yield ret if block_given?
20
+ ret
21
+ end
22
+
23
+ # human string to key
24
+ # => width padding eg to output 000B when input = 11 and field is a 2 byte
25
+ # => dstring input decimal
26
+ def self.invert_xform(width,dstring)
27
+ ret = dstring.to_i.to_s(16).rjust(width,"0").upcase
28
+ yield ret if block_given?
29
+ ret
30
+ end
31
+
32
+ # is_key_pattern?
33
+ def self.is_key_form? patt
34
+ return false if patt.nil?
35
+ [2,4,8].member? patt.length and patt =~ /(\d|[a-f]|[A-F])+/
36
+ end
37
+
38
+ # is_human_pattern?
39
+ def self.is_human_form? patt
40
+ patt.to_i > 0 or patt.squeeze("0") == "0"
41
+ end
42
42
  end
43
43
 
44
44
 
45
45
  class Host
46
- # key to human string
47
- def self.xform(kstring)
48
- ret = kstring.split('.').collect { |hexbyte| hexbyte.hex.to_s }.join('.')
49
- yield ret if block_given?
50
- ret
51
- end
52
-
53
- # human string to key
54
- def self.invert_xform(dstring)
55
- ret = dstring.split('.').collect { |decbyte| decbyte.to_i.to_s(16).rjust(2,"00").upcase}.join('.')
56
- yield ret if block_given?
57
- ret
58
- end
59
-
60
- # is_key_pattern?
61
- def self.is_key_form? patt
62
- return false if patt.nil?
63
- patt.length == 11 and (patt[2] == "." || patt[5] == "." || patt[8] == ".")
64
- end
65
-
66
- # is_human_pattern?
67
- def self.is_human_form? patt
68
- patt.split('.').select { |szbyte| (1..255).cover?(szbyte.to_i) or szbyte.squeeze("0") == "0" }.size == 4
69
- end
46
+ # key to human string
47
+ def self.xform(kstring)
48
+ ret = kstring.split('.').collect { |hexbyte| hexbyte.hex.to_s }.join('.')
49
+ yield ret if block_given?
50
+ ret
51
+ end
52
+
53
+ # human string to key
54
+ def self.invert_xform(dstring)
55
+ ret = dstring.split('.').collect { |decbyte| decbyte.to_i.to_s(16).rjust(2,"00").upcase}.join('.')
56
+ yield ret if block_given?
57
+ ret
58
+ end
59
+
60
+ # is_key_pattern?
61
+ def self.is_key_form? patt
62
+ return false if patt.nil?
63
+ patt.length == 11 and (patt[2] == "." || patt[5] == "." || patt[8] == ".")
64
+ end
65
+
66
+ # is_human_pattern?
67
+ def self.is_human_form? patt
68
+ patt.split('.').select { |szbyte| (1..255).cover?(szbyte.to_i) or szbyte.squeeze("0") == "0" }.size == 4
69
+ end
70
70
  end
71
71
 
72
72
  # UDP/TCP port a 2 byte number
73
73
  class Port
74
74
 
75
- # key to human string
76
- def self.xform(kstring)
77
- s = "Port-" + kstring[2..-1].hex.to_s
78
- yield s if block_given?
79
- return s
80
- end
81
-
82
- # human string to key
83
- # handles formats
84
- # => Port-80
85
- # => port-80
86
- # => 80
87
- def self.invert_xform(dstring)
88
- if dstring.size > 5 and dstring[0..4].upcase == "PORT-"
89
- return "p-"+dstring.slice(5..-1).to_i.to_s(16).rjust(4,"0000").upcase
90
- else
91
- return "p-"+dstring.to_i.to_s(16).rjust(4,"0000").upcase
92
- end
93
- end
94
-
95
- # is_key_form?
96
- def self.is_key_form? patt
97
- return false if patt.nil?
98
- patt.length == 6 and patt[0] == 'p' and patt[1] == '-'
99
- end
100
-
101
- # is_human_form?
102
- def self.is_human_form? patt
103
- patt[0..4].upcase == "PORT-" and ((1..65535).include? patt[5..-1].to_i)
75
+ # key to human string
76
+ def self.xform(kstring)
77
+ s = "Port-" + kstring[2..-1].hex.to_s
78
+ yield s if block_given?
79
+ return s
80
+ end
81
+
82
+ # human string to key
83
+ # handles formats
84
+ # => Port-80
85
+ # => port-80
86
+ # => 80
87
+ def self.invert_xform(dstring)
88
+ if dstring.size > 5 and dstring[0..4].upcase == "PORT-"
89
+ return "p-"+dstring.slice(5..-1).to_i.to_s(16).rjust(4,"0000").upcase
90
+ else
91
+ return "p-"+dstring.to_i.to_s(16).rjust(4,"0000").upcase
104
92
  end
93
+ end
94
+
95
+ # is_key_form?
96
+ def self.is_key_form? patt
97
+ return false if patt.nil?
98
+ patt.length == 6 and patt[0] == 'p' and patt[1] == '-'
99
+ end
100
+
101
+ # is_human_form?
102
+ def self.is_human_form? patt
103
+ patt[0..4].upcase == "PORT-" and ((1..65535).include? patt[5..-1].to_i)
104
+ end
105
105
  end
106
106
 
107
107
  class Subnet
108
- # key to human string
109
- # => key - 00.00.00.00_8888
110
- def self.xform(kstring)
111
- parts=kstring.split('/')
112
- ret = Host.xform(parts[0]) + "/" + HNumber.xform(parts[1])
113
- yield ret if block_given?
114
- ret
115
- end
116
-
117
- # human string to key
118
- def self.invert_xform(dstring)
119
- parts=dstring.split('/')
120
- ret = Host.invert_xform(parts[0]) + "/" + HNumber.invert_xform(2,parts[1])
121
- yield ret if block_given?
122
- ret
123
- end
124
-
125
- # is_key_pattern?
126
- def self.is_key_form? patt
127
- return false if patt.nil?
128
- parts = patt.split('/')
129
- parts.size == 2 and Host.is_key_form?(parts[0]) and HNumber.is_key_form?(parts[1])
130
- end
131
-
132
- # is_human_pattern?
133
- def self.is_human_form? patt
134
- parts = patt.split('/')
135
- parts.size == 2 and Host.is_human_form?(parts[0]) and HNumber.is_human_form?(parts[1])
136
- end
108
+ # key to human string
109
+ # => key - 00.00.00.00_8888
110
+ def self.xform(kstring)
111
+ parts=kstring.split('/')
112
+ ret = Host.xform(parts[0]) + "/" + HNumber.xform(parts[1])
113
+ yield ret if block_given?
114
+ ret
115
+ end
116
+
117
+ # human string to key
118
+ def self.invert_xform(dstring)
119
+ parts=dstring.split('/')
120
+ ret = Host.invert_xform(parts[0]) + "/" + HNumber.invert_xform(2,parts[1])
121
+ yield ret if block_given?
122
+ ret
123
+ end
124
+
125
+ # is_key_pattern?
126
+ def self.is_key_form? patt
127
+ return false if patt.nil?
128
+ parts = patt.split('/')
129
+ parts.size == 2 and Host.is_key_form?(parts[0]) and HNumber.is_key_form?(parts[1])
130
+ end
131
+
132
+ # is_human_pattern?
133
+ def self.is_human_form? patt
134
+ parts = patt.split('/')
135
+ parts.size == 2 and Host.is_human_form?(parts[0]) and HNumber.is_human_form?(parts[1])
136
+ end
137
137
  end
138
138
 
139
139
 
140
140
  class HostInterface
141
- # key to human string
142
- # => key - 00.00.00.00/10
143
- def self.xform(kstring)
144
- parts=kstring.split('_')
145
- ret = Host.xform(parts[0]) + "_" + HNumber.xform(parts[1])
146
- yield ret if block_given?
147
- ret
148
- end
149
-
150
- # human string to key
151
- def self.invert_xform(dstring)
152
- parts=dstring.split('_')
153
- ret = Host.invert_xform(parts[0]) + "_" + HNumber.invert_xform(4,parts[1])
154
- yield ret if block_given?
155
- ret
156
- end
157
-
158
- # is_key_pattern?
159
- def self.is_key_form? patt
160
- return false if patt.nil?
161
- parts = patt.split('_')
162
- parts.size == 2 and Host.is_key_form?(parts[0]) and HNumber.is_key_form?(parts[1])
163
- end
164
-
165
- # is_human_pattern?
166
- def self.is_human_form? patt
167
- parts = patt.split('_')
168
- parts.size == 2 and Host.is_human_form?(parts[0]) and HNumber.is_human_form?(parts[1])
169
- end
141
+ # key to human string
142
+ # => key - 00.00.00.00/10
143
+ def self.xform(kstring)
144
+ parts=kstring.split('_')
145
+ ret = Host.xform(parts[0]) + "_" + HNumber.xform(parts[1])
146
+ yield ret if block_given?
147
+ ret
148
+ end
149
+
150
+ # human string to key
151
+ def self.invert_xform(dstring)
152
+ parts=dstring.split('_')
153
+ ret = Host.invert_xform(parts[0]) + "_" + HNumber.invert_xform(4,parts[1])
154
+ yield ret if block_given?
155
+ ret
156
+ end
157
+
158
+ # is_key_pattern?
159
+ def self.is_key_form? patt
160
+ return false if patt.nil?
161
+ parts = patt.split('_')
162
+ parts.size == 2 and Host.is_key_form?(parts[0]) and HNumber.is_key_form?(parts[1])
163
+ end
164
+
165
+ # is_human_pattern?
166
+ def self.is_human_form? patt
167
+ parts = patt.split('_')
168
+ parts.size == 2 and Host.is_human_form?(parts[0]) and HNumber.is_human_form?(parts[1])
169
+ end
170
170
  end
171
171
 
172
172
  # key and human form are same
173
173
  class ASNumber
174
- # key to human string
175
- # => key - ASnnn
176
- def self.xform(kstring)
177
- yield kstring if block_given?
178
- kstring
179
- end
180
-
181
- # human string to key
182
- def self.invert_xform(dstring)
183
- yield dstring if block_given?
184
- dstring
185
- end
174
+ # key to human string
175
+ # => key - ASnnn
176
+ def self.xform(kstring)
177
+ yield kstring if block_given?
178
+ kstring
179
+ end
180
+
181
+ # human string to key
182
+ def self.invert_xform(dstring)
183
+ yield dstring if block_given?
184
+ dstring
185
+ end
186
+
187
+ # is_key_pattern?
188
+ def self.is_key_form? patt
189
+ return false if patt.nil?
190
+ patt[0..1]=="AS"
191
+ end
192
+
193
+ # is_human_pattern?
194
+ def self.is_human_form? patt
195
+ return false if patt.nil?
196
+ patt[0..1]=="AS"
197
+ end
198
+ end
186
199
 
187
- # is_key_pattern?
188
- def self.is_key_form? patt
189
- return false if patt.nil?
190
- patt[0..1]=="AS"
200
+ # convert a trisul key format into a human readable key
201
+ # [keyform] the key form
202
+ #
203
+ # ==== Typical use
204
+ #
205
+ # Used to convert an IP / Port or any other trisul key into a readable form
206
+ #
207
+ # <code>
208
+ #
209
+ # make_readable("C0.A8.0C.A0") => "192.168.12.160"
210
+ #
211
+ # make_readable("p-0016") => "Port-22"
212
+ #
213
+ # </code>
214
+ #
215
+ #
216
+ #
217
+ # Also see TrisulRP::Protocol::get_labels_for_keys to obtain a text name for the key
218
+ #
219
+ # Also see the inverse of this method make_key which convert a readable string into a key
220
+ # suitable for use in TRP request messages.
221
+ #
222
+ # If key type cannot be accurately guessed it returns the input
223
+ #
224
+ def make_readable(keyform)
225
+ [ TrisulRP::Keys::Port,
226
+ TrisulRP::Keys::Host,
227
+ TrisulRP::Keys::HostInterface,
228
+ TrisulRP::Keys::Subnet,
229
+ TrisulRP::Keys::ASNumber
230
+ ].each do |kls|
231
+ return kls.xform(keyform) if kls.is_key_form?(keyform)
191
232
  end
192
-
193
- # is_human_pattern?
194
- def self.is_human_form? patt
195
- return false if patt.nil?
196
- patt[0..1]=="AS"
233
+ return keyform
234
+ end
235
+
236
+
237
+ # convert a key in human form into trisul key format
238
+ #
239
+ # [humanform] the human form of the key
240
+ #
241
+ # ==== Typical use
242
+ #
243
+ # Used to convert a human form key into a Trisul Key format suitable for use with TRP requests
244
+ #
245
+ #
246
+ # <code>
247
+ #
248
+ # make_key("192.168.1.1") => "C0.A8.01.01"
249
+ #
250
+ # </code>
251
+ #
252
+ #
253
+ # Also see the inverse of this method make_readable
254
+ #
255
+ #
256
+ def make_key(readable)
257
+ [ TrisulRP::Keys::Port,
258
+ TrisulRP::Keys::Host,
259
+ TrisulRP::Keys::HostInterface,
260
+ TrisulRP::Keys::Subnet,
261
+ TrisulRP::Keys::ASNumber
262
+ ].each do |kls|
263
+ return kls.invert_xform(readable) if kls.is_human_form?(readable)
197
264
  end
198
- end
199
-
200
- # convert a trisul key format into a human readable key
201
- # [keyform] the key form
202
- #
203
- # ==== Typical use
204
- #
205
- # Used to convert an IP / Port or any other trisul key into a readable form
206
- #
207
- # <code>
208
- #
209
- # make_readable("C0.A8.0C.A0") => "192.168.12.160"
210
- #
211
- # make_readable("p-0016") => "Port-22"
212
- #
213
- # </code>
214
- #
215
- #
216
- #
217
- # Also see TrisulRP::Protocol::get_labels_for_keys to obtain a text name for the key
218
- #
219
- # Also see the inverse of this method make_key which convert a readable string into a key
220
- # suitable for use in TRP request messages.
221
- #
222
- # If key type cannot be accurately guessed it returns the input
223
- #
224
- def make_readable(keyform)
225
- [ TrisulRP::Keys::Port,
226
- TrisulRP::Keys::Host,
227
- TrisulRP::Keys::HostInterface,
228
- TrisulRP::Keys::Subnet,
229
- TrisulRP::Keys::ASNumber
230
- ].each do |kls|
231
- return kls.xform(keyform) if kls.is_key_form?(keyform)
232
- end
233
- return keyform
234
- end
235
-
236
-
237
- # convert a key in human form into trisul key format
238
- #
239
- # [humanform] the human form of the key
240
- #
241
- # ==== Typical use
242
- #
243
- # Used to convert a human form key into a Trisul Key format suitable for use with TRP requests
244
- #
245
- #
246
- # <code>
247
- #
248
- # make_key("192.168.1.1") => "C0.A8.01.01"
249
- #
250
- # </code>
251
- #
252
- #
253
- # Also see the inverse of this method make_readable
254
- #
255
- #
256
- def make_key(readable)
257
- [ TrisulRP::Keys::Port,
258
- TrisulRP::Keys::Host,
259
- TrisulRP::Keys::HostInterface,
260
- TrisulRP::Keys::Subnet,
261
- TrisulRP::Keys::ASNumber
262
- ].each do |kls|
263
- return kls.invert_xform(readable) if kls.is_human_form?(readable)
264
- end
265
- return readable
266
- end
265
+ return readable
266
+ end
267
267
 
268
268
 
269
269
  # convert a set of keys into labels
270
- #
271
- # This method accepts an array of keys (which are references to counter items in Trisul) and sends
272
- # a key lookup request to Trisul. Trisul responds with labels for those keys that had labels. Finally a
273
- # ready to use map is constructed and returned to the caller.
274
- #
275
- # [conn] a TRP connection opened earlier via connect(..)
276
- # [cgguid] a counter group id. See TrisulRP::Guids for a list of common guids
277
- # [key_arr] an array of keys, possibly obtained as a result of an earlier command
278
- #
279
- # ==== Returns
280
- # a hash of Key => Label. All keys in the incoming array will have a hash entry. If Trisul could not
281
- # find a label for a key, it will store the key itself as the hash value.
282
- #
283
- # ==== Typical usage
284
- #
285
- # You use this method as a bulk resolving mechanism.
286
- # <code>
287
- #
288
- # host_keys = ["0A.0A.18.E0", "B1.01.8F.01",...]
270
+ #
271
+ # This method accepts an array of keys (which are references to counter items in Trisul) and sends
272
+ # a key lookup request to Trisul. Trisul responds with labels for those keys that had labels. Finally a
273
+ # ready to use map is constructed and returned to the caller.
274
+ #
275
+ # [conn] a TRP connection opened earlier via connect(..)
276
+ # [cgguid] a counter group id. See TrisulRP::Guids for a list of common guids
277
+ # [key_arr] an array of keys, possibly obtained as a result of an earlier command
278
+ #
279
+ # ==== Returns
280
+ # a hash of Key => Label. All keys in the incoming array will have a hash entry. If Trisul could not
281
+ # find a label for a key, it will store the key itself as the hash value.
282
+ #
283
+ # ==== Typical usage
284
+ #
285
+ # You use this method as a bulk resolving mechanism.
286
+ # <code>
287
+ #
288
+ # host_keys = ["0A.0A.18.E0", "B1.01.8F.01",...]
289
289
  # host_names = TrisulRP::Protocol.get_labels_for_keys(conn,
290
- # TrisulRP::Guids::CG_HOSTS, host_keys)
291
- #
292
- # host_names["0A.0A.18.E0"] = "demo.trisul.org" # ok
293
- # host_names["B1.01.8F.01"] = "B1.01.8F.01" # no label for this key
294
- #
295
- # </code>
296
- #
297
- def get_labels_for_keys(conn, cgguid, key_arr)
298
- req = mk_request(TRP::Message::Command::KEY_LOOKUP_REQUEST,
299
- :counter_group => cgguid, :keys => key_arr.uniq )
300
- h = key_arr.inject({}) { |m,i| m.store(i,make_readable(i)); m }
301
- get_response(conn,req) do |resp|
302
- resp.key_details.each { |d| h.store(d.key,d.label) }
303
- end
304
- return h
305
- end
290
+ # TrisulRP::Guids::CG_HOSTS, host_keys)
291
+ #
292
+ # host_names["0A.0A.18.E0"] = "demo.trisul.org" # ok
293
+ # host_names["B1.01.8F.01"] = "B1.01.8F.01" # no label for this key
294
+ #
295
+ # </code>
296
+ #
297
+ def get_labels_for_keys(conn, cgguid, key_arr)
298
+ req = mk_request(TRP::Message::Command::KEY_LOOKUP_REQUEST,
299
+ :counter_group => cgguid,
300
+ :keys => key_arr.uniq )
301
+
302
+ h = key_arr.inject({}) { |m,i| m.store(i,make_readable(i)); m }
303
+ get_response(conn,req) do |resp|
304
+ resp.key_details.each { |d| h.store(d.key,d.label) }
305
+ end
306
+ return h
307
+ end
306
308
 
307
309
  end