2 * Routines for NetWare's NDPS
3 * Greg Morris <gmorris@novell.com>
4 * Copyright (c) Novell, Inc. 2002-2003
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.
31 #include <epan/packet.h>
32 #include <epan/exceptions.h>
33 #include <epan/prefs.h>
34 #include <epan/reassemble.h>
35 #include <epan/conversation.h>
36 #include <epan/expert.h>
37 #include <epan/wmem/wmem.h>
38 #include <epan/strutil.h>
40 #include "packet-ipx.h"
41 #include "packet-tcp.h"
42 #include "packet-ndps.h"
44 /* Limit the number of items we can add to the tree. */
45 #define NDPS_MAX_ITEMS 100
47 /* Table for reassembly of fragments. */
48 static reassembly_table ndps_reassembly_table
;
50 /* desegmentation of ndps */
51 static gboolean ndps_defragment
= TRUE
;
53 static guint32 tid
= 1;
56 static gboolean ndps_show_oids
=FALSE
;
58 /* Global Attribute for evaluation of Values */
59 static const char *global_attribute_name
=NULL
;
61 static int dissect_ndps_request(tvbuff_t
*, packet_info
*, proto_tree
*, guint32
, guint32
, int);
63 static int dissect_ndps_reply(tvbuff_t
*, packet_info
*, proto_tree
*, int);
65 static int hf_ndps_segments
= -1;
66 static int hf_ndps_segment
= -1;
67 static int hf_ndps_segment_overlap
= -1;
68 static int hf_ndps_segment_overlap_conflict
= -1;
69 static int hf_ndps_segment_multiple_tails
= -1;
70 static int hf_ndps_segment_too_long_segment
= -1;
71 static int hf_ndps_segment_error
= -1;
72 static int hf_ndps_segment_count
= -1;
73 static int hf_ndps_reassembled_length
= -1;
75 static gint ett_ndps_segments
= -1;
76 static gint ett_ndps_segment
= -1;
78 static int proto_ndps
= -1;
79 static int hf_ndps_record_mark
= -1;
80 static int hf_ndps_length
= -1;
81 static int hf_ndps_xid
= -1;
82 static int hf_ndps_packet_type
= -1;
83 static int hf_ndps_rpc_version
= -1;
84 /* static int hf_ndps_error = -1; */
85 static int hf_ndps_num_objects
= -1;
86 static int hf_ndps_num_attributes
= -1;
87 /* static int hf_ndps_sbuffer = -1; */
88 /* static int hf_ndps_rbuffer = -1; */
89 static int hf_ndps_user_name
= -1;
90 static int hf_ndps_broker_name
= -1;
91 static int hf_ndps_num_results
= -1;
92 static int hf_ndps_num_options
= -1;
93 static int hf_ndps_num_jobs
= -1;
94 static int hf_ndps_pa_name
= -1;
95 static int hf_ndps_tree
= -1;
96 static int hf_ndps_reqframe
= -1;
97 static int hf_ndps_error_val
= -1;
98 static int hf_ndps_ext_error
= -1;
99 static int hf_ndps_object
= -1;
100 static int hf_ndps_cred_type
= -1;
101 static int hf_ndps_server_name
= -1;
102 static int hf_ndps_connection
= -1;
103 static int hf_ndps_auth_null
= -1;
104 static int hf_ndps_rpc_accept
= -1;
105 static int hf_ndps_rpc_acc_stat
= -1;
106 static int hf_ndps_rpc_rej_stat
= -1;
107 static int hf_ndps_rpc_acc_results
= -1;
108 static int hf_ndps_problem_type
= -1;
109 static int hf_security_problem_type
= -1;
110 static int hf_service_problem_type
= -1;
111 static int hf_access_problem_type
= -1;
112 static int hf_printer_problem_type
= -1;
113 static int hf_selection_problem_type
= -1;
114 static int hf_doc_access_problem_type
= -1;
115 static int hf_attribute_problem_type
= -1;
116 static int hf_update_problem_type
= -1;
117 static int hf_obj_id_type
= -1;
118 static int hf_oid_struct_size
= -1;
119 static int hf_object_name
= -1;
120 static int hf_ndps_document_number
= -1;
121 static int hf_ndps_nameorid
= -1;
122 static int hf_ndps_local_object_name
= -1;
123 static int hf_ndps_printer_name
= -1;
124 static int hf_ndps_qualified_name
= -1;
125 static int hf_ndps_item_count
= -1;
126 static int hf_ndps_num_passwords
= -1;
127 static int hf_ndps_num_servers
= -1;
128 static int hf_ndps_num_locations
= -1;
129 static int hf_ndps_num_areas
= -1;
130 static int hf_ndps_num_address_items
= -1;
131 static int hf_ndps_num_job_categories
= -1;
132 static int hf_ndps_num_page_selects
= -1;
133 static int hf_ndps_num_page_informations
= -1;
134 static int hf_ndps_num_names
= -1;
135 static int hf_ndps_num_categories
= -1;
136 static int hf_ndps_num_colorants
= -1;
137 static int hf_ndps_num_events
= -1;
138 static int hf_ndps_num_args
= -1;
139 static int hf_ndps_num_transfer_methods
= -1;
140 static int hf_ndps_num_doc_types
= -1;
141 static int hf_ndps_num_destinations
= -1;
142 static int hf_ndps_qualifier
= -1;
143 static int hf_ndps_lib_error
= -1;
144 static int hf_ndps_other_error
= -1;
145 static int hf_ndps_other_error_2
= -1;
146 static int hf_ndps_session
= -1;
147 static int hf_ndps_abort_flag
= -1;
148 static int hf_ndps_obj_attribute_type
= -1;
149 static int hf_ndps_attribute_value
= -1;
150 static int hf_ndps_lower_range
= -1;
151 static int hf_ndps_upper_range
= -1;
152 static int hf_ndps_n64
= -1;
153 static int hf_ndps_lower_range_n64
= -1;
154 static int hf_ndps_upper_range_n64
= -1;
155 static int hf_ndps_attrib_boolean
= -1;
156 static int hf_ndps_realization
= -1;
157 static int hf_ndps_xdimension_n64
= -1;
158 static int hf_ndps_ydimension_n64
= -1;
159 static int hf_ndps_dim_value
= -1;
160 static int hf_ndps_dim_flag
= -1;
161 static int hf_ndps_xydim_value
= -1;
162 static int hf_ndps_location_value
= -1;
163 static int hf_ndps_xmin_n64
= -1;
164 static int hf_ndps_xmax_n64
= -1;
165 static int hf_ndps_ymin_n64
= -1;
166 static int hf_ndps_ymax_n64
= -1;
167 static int hf_ndps_edge_value
= -1;
168 static int hf_ndps_cardinal_or_oid
= -1;
169 static int hf_ndps_cardinal_name_or_oid
= -1;
170 static int hf_ndps_integer_or_oid
= -1;
171 static int hf_ndps_profile_id
= -1;
172 static int hf_ndps_persistence
= -1;
173 static int hf_ndps_language_count
= -1;
174 static int hf_ndps_language_id
= -1;
175 static int hf_address_type
= -1;
176 static int hf_ndps_address
= -1;
177 static int hf_ndps_add_bytes
= -1;
178 static int hf_ndps_event_type
= -1;
179 static int hf_ndps_event_object_identifier
= -1;
180 static int hf_ndps_octet_string
= -1;
181 static int hf_ndps_scope
= -1;
182 static int hf_address_len
= -1;
183 static int hf_ndps_net
= -1;
184 static int hf_ndps_node
= -1;
185 static int hf_ndps_socket
= -1;
186 static int hf_ndps_port
= -1;
187 static int hf_ndps_ip
= -1;
188 static int hf_ndps_server_type
= -1;
189 static int hf_ndps_num_services
= -1;
190 static int hf_ndps_service_type
= -1;
191 static int hf_ndps_service_enabled
= -1;
192 static int hf_ndps_method_name
= -1;
193 static int hf_ndps_method_ver
= -1;
194 static int hf_ndps_file_name
= -1;
195 static int hf_ndps_admin_submit
= -1;
196 static int hf_ndps_oid
= -1;
197 static int hf_ndps_object_op
= -1;
198 static int hf_answer_time
= -1;
199 static int hf_oid_asn1_type
= -1;
200 static int hf_ndps_item_ptr
= -1;
201 static int hf_ndps_len
= -1;
202 static int hf_ndps_limit_enc
= -1;
203 static int hf_ndps_delivery_add_count
= -1;
204 /* static int hf_ndps_qualified_name2 = -1; */
205 static int hf_ndps_delivery_add_type
= -1;
206 static int hf_ndps_criterion_type
= -1;
207 static int hf_ndps_num_ignored_attributes
= -1;
208 static int hf_ndps_ignored_type
= -1;
209 static int hf_ndps_num_resources
= -1;
210 static int hf_ndps_resource_type
= -1;
211 static int hf_ndps_identifier_type
= -1;
212 static int hf_ndps_page_flag
= -1;
213 static int hf_ndps_media_type
= -1;
214 static int hf_ndps_doc_content
= -1;
215 static int hf_ndps_page_size
= -1;
216 static int hf_ndps_direction
= -1;
217 static int hf_ndps_page_order
= -1;
218 static int hf_ndps_medium_size
= -1;
219 static int hf_ndps_long_edge_feeds
= -1;
220 static int hf_ndps_inc_across_feed
= -1;
221 static int hf_ndps_size_inc_in_feed
= -1;
222 static int hf_ndps_page_orientation
= -1;
223 static int hf_ndps_numbers_up
= -1;
224 static int hf_ndps_xdimension
= -1;
225 static int hf_ndps_ydimension
= -1;
226 static int hf_ndps_state_severity
= -1;
227 static int hf_ndps_training
= -1;
228 static int hf_ndps_colorant_set
= -1;
229 static int hf_ndps_card_enum_time
= -1;
230 static int hf_ndps_attrs_arg
= -1;
231 static int hf_ndps_context_len
= -1;
232 static int hf_ndps_context
= -1;
233 static int hf_ndps_filter
= -1;
234 /* static int hf_ndps_item_filter = -1; */
235 /* static int hf_ndps_substring_match = -1; */
236 static int hf_ndps_time_limit
= -1;
237 static int hf_ndps_count_limit
= -1;
238 static int hf_ndps_operator
= -1;
239 static int hf_ndps_password
= -1;
240 static int hf_ndps_retrieve_restrictions
= -1;
241 static int hf_ndps_bind_security_option_count
= -1;
242 static int hf_bind_security
= -1;
243 static int hf_ndps_max_items
= -1;
244 static int hf_ndps_status_flags
= -1;
245 static int hf_ndps_resource_list_type
= -1;
246 static int hf_os_count
= -1;
247 static int hf_os_type
= -1;
248 static int hf_ndps_printer_type_count
= -1;
249 static int hf_ndps_printer_type
= -1;
250 static int hf_ndps_printer_manuf
= -1;
251 static int hf_ndps_inf_file_name
= -1;
252 static int hf_ndps_vendor_dir
= -1;
253 static int hf_banner_type
= -1;
254 static int hf_font_type
= -1;
255 static int hf_printer_id
= -1;
256 static int hf_ndps_font_name
= -1;
257 static int hf_ndps_return_code
= -1;
258 /* static int hf_ndps_banner_count = -1; */
259 static int hf_ndps_banner_name
= -1;
260 static int hf_ndps_font_type_count
= -1;
261 static int hf_font_type_name
= -1;
262 static int hf_ndps_font_file_count
= -1;
263 static int hf_font_file_name
= -1;
264 static int hf_ndps_printer_def_count
= -1;
265 static int hf_ndps_prn_file_name
= -1;
266 static int hf_ndps_prn_dir_name
= -1;
267 static int hf_ndps_def_file_name
= -1;
268 static int hf_ndps_num_win31_keys
= -1;
269 static int hf_ndps_num_win95_keys
= -1;
270 static int hf_ndps_num_windows_keys
= -1;
271 static int hf_ndps_windows_key
= -1;
272 static int hf_archive_type
= -1;
273 static int hf_archive_file_size
= -1;
274 static int hf_ndps_data
= -1;
275 static int hf_get_status_flag
= -1;
276 static int hf_res_type
= -1;
277 static int hf_file_timestamp
= -1;
278 static int hf_sub_complete
= -1;
279 static int hf_doc_content
= -1;
280 /* static int hf_ndps_doc_name = -1; */
281 static int hf_print_arg
= -1;
282 static int hf_local_id
= -1;
283 static int hf_ndps_included_doc_len
= -1;
284 static int hf_ndps_included_doc
= -1;
285 static int hf_ndps_ref_name
= -1;
286 static int hf_interrupt_job_type
= -1;
287 static int hf_pause_job_type
= -1;
288 static int hf_ndps_force
= -1;
289 static int hf_resubmit_op_type
= -1;
290 static int hf_shutdown_type
= -1;
291 static int hf_ndps_supplier_flag
= -1;
292 static int hf_ndps_language_flag
= -1;
293 static int hf_ndps_method_flag
= -1;
294 static int hf_ndps_delivery_address_flag
= -1;
295 static int hf_ndps_list_profiles_type
= -1;
296 static int hf_ndps_list_profiles_choice_type
= -1;
297 static int hf_ndps_list_profiles_result_type
= -1;
298 static int hf_ndps_integer_type_flag
= -1;
299 static int hf_ndps_integer_type_value
= -1;
300 static int hf_ndps_continuation_option
= -1;
301 static int hf_ndps_ds_info_type
= -1;
302 static int hf_ndps_guid
= -1;
303 static int hf_ndps_list_services_type
= -1;
304 static int hf_ndps_item_bytes
= -1;
305 static int hf_ndps_certified
= -1;
306 static int hf_ndps_attribute_set
= -1;
307 static int hf_ndps_data_item_type
= -1;
308 static int hf_info_int
= -1;
309 static int hf_info_int16
= -1;
310 static int hf_info_int32
= -1;
311 static int hf_info_boolean
= -1;
312 static int hf_info_string
= -1;
313 /* static int hf_info_bytes = -1; */
314 static int hf_ndps_list_local_servers_type
= -1;
315 static int hf_ndps_registry_name
= -1;
316 static int hf_ndps_client_server_type
= -1;
317 static int hf_ndps_session_type
= -1;
318 static int hf_time
= -1;
319 static int hf_ndps_supplier_name
= -1;
320 static int hf_ndps_message
= -1;
321 static int hf_ndps_delivery_method_count
= -1;
322 static int hf_delivery_method_type
= -1;
323 static int hf_ndps_get_session_type
= -1;
324 static int hf_packet_count
= -1;
325 static int hf_last_packet_flag
= -1;
326 static int hf_ndps_get_resman_session_type
= -1;
327 static int hf_problem_type
= -1;
328 static int hf_ndps_num_values
= -1;
329 static int hf_ndps_object_ids_7
= -1;
330 static int hf_ndps_object_ids_8
= -1;
331 static int hf_ndps_object_ids_9
= -1;
332 static int hf_ndps_object_ids_10
= -1;
333 static int hf_ndps_object_ids_11
= -1;
334 static int hf_ndps_object_ids_12
= -1;
335 static int hf_ndps_object_ids_13
= -1;
336 static int hf_ndps_object_ids_14
= -1;
337 static int hf_ndps_object_ids_15
= -1;
338 static int hf_ndps_object_ids_16
= -1;
339 /* static int hf_ndps_attribute_time = -1; */
340 static int hf_print_security
= -1;
341 static int hf_notify_time_interval
= -1;
342 static int hf_notify_sequence_number
= -1;
343 static int hf_notify_lease_exp_time
= -1;
344 static int hf_notify_printer_uri
= -1;
345 static int hf_level
= -1;
346 static int hf_interval
= -1;
347 static int hf_ndps_other_error_string
= -1;
349 static int hf_spx_ndps_program
= -1;
350 static int hf_spx_ndps_version
= -1;
351 static int hf_spx_ndps_func_print
= -1;
352 static int hf_spx_ndps_func_registry
= -1;
353 static int hf_spx_ndps_func_notify
= -1;
354 static int hf_spx_ndps_func_resman
= -1;
355 static int hf_spx_ndps_func_delivery
= -1;
356 static int hf_spx_ndps_func_broker
= -1;
358 static gint ett_ndps
= -1;
360 static expert_field ei_ndps_problem_type
= EI_INIT
;
361 static expert_field ei_ndps_return_code
= EI_INIT
;
362 static expert_field ei_ndps_rpc_acc_stat
= EI_INIT
;
364 /* desegmentation of NDPS over TCP */
365 static gboolean ndps_desegment
= TRUE
;
367 static const value_string true_false
[] = {
368 { 0x00000000, "Accept" },
369 { 0x00000001, "Deny" },
373 static const value_string ndps_limit_enc_enum
[] = {
374 { 0x00000000, "Time" },
375 { 0x00000001, "Count" },
376 { 0x00000002, "Error" },
380 static const value_string problem_type_enum
[] = {
381 { 0x00000000, "Standard" },
382 { 0x00000001, "Extended" },
386 static const value_string accept_stat
[] = {
387 { 0x00000000, "Success" },
388 { 0x00000001, "Program Unavailable" },
389 { 0x00000002, "Program Mismatch" },
390 { 0x00000003, "Procedure Unavailable" },
391 { 0x00000004, "Garbage Arguments" },
392 { 0x00000005, "System Error" },
396 static const value_string reject_stat
[] = {
397 { 0x00000000, "RPC Mismatch" },
398 { 0x00000001, "Authentication Error" },
402 static const value_string error_type_enum
[] = {
403 { 0x00000000, "Security Error" },
404 { 0x00000001, "Service Error" },
405 { 0x00000002, "Access Error" },
406 { 0x00000003, "Printer Error" },
407 { 0x00000004, "Selection Error" },
408 { 0x00000005, "Document Access Error" },
409 { 0x00000006, "Attribute Error" },
410 { 0x00000007, "Update Error" },
414 static const value_string security_problem_enum
[] = {
415 { 0x00000000, "Authentication" },
416 { 0x00000001, "Credentials" },
417 { 0x00000002, "Rights" },
418 { 0x00000003, "Invalid PAC" },
422 static const value_string service_problem_enum
[] = {
423 { 0x00000000, "Sever Busy" },
424 { 0x00000001, "Server Unavailable" },
425 { 0x00000002, "Complex Operation" },
426 { 0x00000003, "Resource Limit" },
427 { 0x00000004, "Unclassified Server Error" },
428 { 0x00000005, "Too Many Items in List" },
429 { 0x00000006, "Resource not Available" },
430 { 0x00000007, "Cancel Document Support" },
431 { 0x00000008, "Modify Document Support" },
432 { 0x00000009, "Multiple Document Support" },
433 { 0x0000000a, "Parameter Valid Support" },
434 { 0x0000000b, "Invalid Checkpoint" },
435 { 0x0000000c, "Continuation Context" },
436 { 0x0000000d, "Pause Limit Exceeded" },
437 { 0x0000000e, "Unsupported Operation" },
438 { 0x0000000f, "Notify Service Error" },
439 { 0x00000010, "Accounting Service Error" },
443 static const value_string access_problem_enum
[] = {
444 { 0x00000000, "Wrong Object Class" },
445 { 0x00000001, "Lack of Access Rights" },
446 { 0x00000002, "Can't Interrupt Job" },
447 { 0x00000003, "Wrong Object State" },
448 { 0x00000004, "Client Not Bound" },
449 { 0x00000005, "Not Available" },
450 { 0x00000006, "Notify Service Not Connected" },
451 { 0x00000007, "PDS Not Connected" },
455 static const value_string printer_problem_enum
[] = {
456 { 0x00000000, "Printer Error" },
457 { 0x00000001, "Printer Needs Attention" },
458 { 0x00000002, "Printer Needs Key Operator" },
462 static const value_string selection_problem_enum
[] = {
463 { 0x00000000, "Invalid ID" },
464 { 0x00000001, "Unknown ID" },
465 { 0x00000002, "Object Exists" },
466 { 0x00000003, "ID Changed" },
470 static const value_string doc_access_problem_enum
[] = {
471 { 0x00000000, "Access Not Available" },
472 { 0x00000001, "Time Expired" },
473 { 0x00000002, "Access Denied" },
474 { 0x00000003, "Unknown Document" },
475 { 0x00000004, "No Documents in Job" },
479 static const value_string attribute_problem_enum
[] = {
480 { 0x00000000, "Invalid Syntax" },
481 { 0x00000001, "Undefined Type" },
482 { 0x00000002, "Wrong Matching" },
483 { 0x00000003, "Constraint Violated" },
484 { 0x00000004, "Unsupported Type" },
485 { 0x00000005, "Illegal Modification" },
486 { 0x00000006, "Consists With Other Attribute" },
487 { 0x00000007, "Undefined Attribute Value" },
488 { 0x00000008, "Unsupported Value" },
489 { 0x00000009, "Invalid Noncompulsed Modification" },
490 { 0x0000000a, "Per Job Inadmissible" },
491 { 0x0000000b, "Not Multivalued" },
492 { 0x0000000c, "Mandatory Omitted" },
493 { 0x0000000d, "Illegal For Class" },
497 static const value_string update_problem_enum
[] = {
498 { 0x00000000, "No Modifications Allowed" },
499 { 0x00000001, "Insufficient Rights" },
500 { 0x00000002, "Previous Operation Incomplete" },
501 { 0x00000003, "Cancel Not Possible" },
505 static const value_string obj_identification_enum
[] = {
506 { 0x00000000, "Printer Contained Object ID" },
507 { 0x00000001, "Document Identifier" },
508 { 0x00000002, "Object Identifier" },
509 { 0x00000003, "Object Name" },
510 { 0x00000004, "Name or Object ID" },
511 { 0x00000005, "Simple Name" },
512 { 0x00000006, "Printer Configuration Object ID" },
513 { 0x00000007, "Qualified Name" },
514 { 0x00000008, "Event Object ID" },
518 static const value_string nameorid_enum
[] = {
519 { 0x00000000, "None" },
520 { 0x00000001, "Global" },
521 { 0x00000002, "Local" },
525 static const value_string qualified_name_enum
[] = {
526 { 0x00000000, "None" },
527 { 0x00000001, "Simple" },
528 { 0x00000002, "NDS" },
533 static const value_string qualified_name_enum2
[] = {
534 { 0x00000000, "NDS" },
539 static const value_string spx_ndps_program_vals
[] = {
540 { 0x00060976, "Print Program" },
541 { 0x00060977, "Broker Program" },
542 { 0x00060978, "Registry Program" },
543 { 0x00060979, "Notify Program" },
544 { 0x0006097a, "Resource Manager Program" },
545 { 0x0006097b, "Programmatic Delivery Program" },
549 static const value_string spx_ndps_print_func_vals
[] = {
550 { 0x00000000, "None" },
551 { 0x00000001, "Bind PSM" },
552 { 0x00000002, "Bind PA" },
553 { 0x00000003, "Unbind" },
554 { 0x00000004, "Print" },
555 { 0x00000005, "Modify Job" },
556 { 0x00000006, "Cancel Job" },
557 { 0x00000007, "List Object Attributes" },
558 { 0x00000008, "Promote Job" },
559 { 0x00000009, "Interrupt" },
560 { 0x0000000a, "Pause" },
561 { 0x0000000b, "Resume" },
562 { 0x0000000c, "Clean" },
563 { 0x0000000d, "Create" },
564 { 0x0000000e, "Delete" },
565 { 0x0000000f, "Disable PA" },
566 { 0x00000010, "Enable PA" },
567 { 0x00000011, "Resubmit Jobs" },
568 { 0x00000012, "Set" },
569 { 0x00000013, "Shutdown PA" },
570 { 0x00000014, "Startup PA" },
571 { 0x00000015, "Reorder Job" },
572 { 0x00000016, "Pause PA" },
573 { 0x00000017, "Resume PA" },
574 { 0x00000018, "Transfer Data" },
575 { 0x00000019, "Device Control" },
576 { 0x0000001a, "Add Event Profile" },
577 { 0x0000001b, "Remove Event Profile" },
578 { 0x0000001c, "Modify Event Profile" },
579 { 0x0000001d, "List Event Profiles" },
580 { 0x0000001e, "Shutdown PSM" },
581 { 0x0000001f, "Cancel PSM Shutdown" },
582 { 0x00000020, "Set Printer DS Information" },
583 { 0x00000021, "Clean User Jobs" },
584 { 0x00000022, "Map GUID to NDS Name" },
585 { 0x00000023, "Add Event Profile 2" },
586 { 0x00000024, "List Event Profile 2" },
590 static const value_string spx_ndps_notify_func_vals
[] = {
591 { 0x00000000, "None" },
592 { 0x00000001, "Notify Bind" },
593 { 0x00000002, "Notify Unbind" },
594 { 0x00000003, "Register Supplier" },
595 { 0x00000004, "Deregister Supplier" },
596 { 0x00000005, "Add Profile" },
597 { 0x00000006, "Remove Profile" },
598 { 0x00000007, "Modify Profile" },
599 { 0x00000008, "List Profiles" },
600 { 0x00000009, "Report Event" },
601 { 0x0000000a, "List Supported Languages" },
602 { 0x0000000b, "Report Notification" },
603 { 0x0000000c, "Add Delivery Method" },
604 { 0x0000000d, "Remove Delivery Method" },
605 { 0x0000000e, "List Delivery Methods" },
606 { 0x0000000f, "Get Delivery Method Information" },
607 { 0x00000010, "Get Notify NDS Object Name" },
608 { 0x00000011, "Get Notify Session Information" },
612 static const value_string spx_ndps_deliver_func_vals
[] = {
613 { 0x00000000, "None" },
614 { 0x00000001, "Delivery Bind" },
615 { 0x00000002, "Delivery Unbind" },
616 { 0x00000003, "Delivery Send" },
617 { 0x00000004, "Delivery Send2" },
621 static const value_string spx_ndps_registry_func_vals
[] = {
622 { 0x00000000, "None" },
623 { 0x00000001, "Bind" },
624 { 0x00000002, "Unbind" },
625 { 0x00000003, "Register Server" },
626 { 0x00000004, "Deregister Server" },
627 { 0x00000005, "Register Registry" },
628 { 0x00000006, "Deregister Registry" },
629 { 0x00000007, "Registry Update" },
630 { 0x00000008, "List Local Servers" },
631 { 0x00000009, "List Servers" },
632 { 0x0000000a, "List Known Registries" },
633 { 0x0000000b, "Get Registry NDS Object Name" },
634 { 0x0000000c, "Get Registry Session Information" },
638 static const value_string spx_ndps_resman_func_vals
[] = {
639 { 0x00000000, "None" },
640 { 0x00000001, "Bind" },
641 { 0x00000002, "Unbind" },
642 { 0x00000003, "Add Resource File" },
643 { 0x00000004, "Delete Resource File" },
644 { 0x00000005, "List Resources" },
645 { 0x00000006, "Get Resource File" },
646 { 0x00000007, "Get Resource File Date" },
647 { 0x00000008, "Get Resource Manager NDS Object Name" },
648 { 0x00000009, "Get Resource Manager Session Information" },
649 { 0x0000000a, "Set Resource Language Context" },
653 static const value_string spx_ndps_broker_func_vals
[] = {
654 { 0x00000000, "None" },
655 { 0x00000001, "Bind" },
656 { 0x00000002, "Unbind" },
657 { 0x00000003, "List Services" },
658 { 0x00000004, "Enable Service" },
659 { 0x00000005, "Disable Service" },
660 { 0x00000006, "Down Broker" },
661 { 0x00000007, "Get Broker NDS Object Name" },
662 { 0x00000008, "Get Broker Session Information" },
666 static const value_string ndps_packet_types
[] = {
667 { 0x00000000, "Request" },
668 { 0x00000001, "Reply" },
672 static const value_string ndps_realization_enum
[] = {
673 { 0x00000000, "Logical" },
674 { 0x00000001, "Physical" },
675 { 0x00000002, "Logical & Physical" },
679 static const value_string ndps_dim_value_enum
[] = {
680 { 0x00000000, "Numeric" },
681 { 0x00000001, "Named" },
685 static const value_string ndps_xydim_value_enum
[] = {
686 { 0x00000000, "Real" },
687 { 0x00000001, "Named" },
688 { 0x00000002, "Cardinal" },
692 static const value_string ndps_location_value_enum
[] = {
693 { 0x00000000, "Numeric" },
694 { 0x00000001, "Named" },
698 static const value_string ndps_edge_value_enum
[] = {
699 { 0x00000000, "Bottom" },
700 { 0x00000001, "Right" },
701 { 0x00000002, "Top" },
702 { 0x00000003, "Left" },
706 static const value_string ndps_card_or_oid_enum
[] = {
707 { 0x00000000, "Number" },
708 { 0x00000001, "ID" },
712 static const value_string ndps_card_name_or_oid_enum
[] = {
713 { 0x00000000, "Number" },
714 { 0x00000001, "ID" },
718 static const value_string ndps_integer_or_oid_enum
[] = {
719 { 0x00000000, "ID" },
720 { 0x00000001, "Number" },
724 static const value_string ndps_persistence_enum
[] = {
725 { 0x00000000, "Permanent" },
726 { 0x00000001, "Volatile" },
730 static const value_string ndps_address_type_enum
[] = {
731 { 0x00000000, "User" },
732 { 0x00000001, "Server" },
733 { 0x00000002, "Volume" },
734 { 0x00000003, "Organization Unit" },
735 { 0x00000004, "Organization" },
736 { 0x00000005, "Group" },
737 { 0x00000006, "Distinguished Name" },
738 { 0x00000007, "User or Container" },
739 { 0x00000008, "Case Exact String" },
740 { 0x00000009, "Case Ignore String" },
741 { 0x0000000a, "Numeric String" },
742 { 0x0000000b, "DOS File Name" },
743 { 0x0000000c, "Phone Number" },
744 { 0x0000000d, "Boolean" },
745 { 0x0000000e, "Integer" },
746 { 0x0000000f, "Network Address" },
747 { 0x00000010, "Choice" },
748 { 0x00000011, "GroupWise User" },
752 static const value_string ndps_address_enum
[] = {
753 { 0x00000000, "IPX" },
754 { 0x00000001, "IP" },
755 { 0x00000002, "SDLC" },
756 { 0x00000003, "Token Ring to Ethernet" },
757 { 0x00000004, "OSI" },
758 { 0x00000005, "AppleTalk" },
759 { 0x00000006, "Count" },
764 static const value_string ndps_server_type_enum
[] = {
765 { 0x00000000, "All" },
766 { 0x00000001, "Public Access Printer Agent" },
767 { 0x00000002, "Notification Server" },
768 { 0x00000003, "Resource Manager" },
769 { 0x00000004, "Network Port Handler" },
773 static const value_string ndps_event_object_enum
[] = {
774 { 0x00000000, "Object" },
775 { 0x00000001, "Filter" },
776 { 0x00000002, "Detail" },
780 static const value_string ndps_service_type_enum
[] = {
781 { 0x00000000, "SRS" },
782 { 0x00000001, "ENS" },
783 { 0x00000002, "RMS" },
787 static const value_string ndps_delivery_add_enum
[] = {
788 { 0x00000000, "MHS Address" },
789 { 0x00000001, "Distinguished Name" },
790 { 0x00000002, "Text" },
791 { 0x00000003, "Octet String" },
792 { 0x00000004, "Distinguished Name String" },
793 { 0x00000005, "RPC Address" },
794 { 0x00000006, "Qualified Name" },
798 static const value_string ndps_resource_enum
[] = {
799 { 0x00000000, "Name or ID" },
800 { 0x00000001, "Text" },
805 static const value_string ndps_identifier_enum
[] = {
806 { 0x00000000, "ID Nominal Number" },
807 { 0x00000001, "ID Alpha-numeric" },
808 { 0x00000002, "ID Tag" },
812 static const value_string ndps_media_enum
[] = {
813 { 0x00000000, "Select All Pages" },
814 { 0x00000001, "Selected Pages" },
818 static const value_string ndps_page_size_enum
[] = {
819 { 0x00000000, "ID" },
820 { 0x00000001, "Dimensions" },
824 static const value_string ndps_pres_direction_enum
[] = {
825 { 0x00000000, "Right to Bottom" },
826 { 0x00000001, "Left to Bottom" },
827 { 0x00000002, "Bidirectional to Bottom" },
828 { 0x00000003, "Right to Top" },
829 { 0x00000004, "Left to Top" },
830 { 0x00000005, "Bidirectional to Top" },
831 { 0x00000006, "Bottom to Right" },
832 { 0x00000007, "Bottom to Left" },
833 { 0x00000008, "Top to Left" },
834 { 0x00000009, "Top to Right" },
838 static const value_string ndps_page_order_enum
[] = {
839 { 0x00000000, "Unknown" },
840 { 0x00000001, "First to Last" },
841 { 0x00000002, "Last to First" },
845 static const value_string ndps_medium_size_enum
[] = {
846 { 0x00000000, "Discrete" },
847 { 0x00000001, "Continuous" },
851 static const value_string ndps_page_orientation_enum
[] = {
852 { 0x00000000, "Unknown" },
853 { 0x00000001, "Face Up" },
854 { 0x00000002, "Face Down" },
858 static const value_string ndps_print_security
[] = {
859 { 0x00000001, "Low" },
860 { 0x00000002, "Medium" },
861 { 0x00000003, "High" },
865 static const value_string ndps_numbers_up_enum
[] = {
866 { 0x00000000, "Cardinal" },
867 { 0x00000001, "Name or Object ID" },
868 { 0x00000002, "Cardinal Range" },
873 static const value_string ndps_state_severity_enum
[] = {
874 { 0x00000001, "Other" },
875 { 0x00000002, "Warning" },
876 { 0x00000003, "Critical" },
881 static const value_string ndps_training_enum
[] = {
882 { 0x00000001, "Other" },
883 { 0x00000002, "Unknown" },
884 { 0x00000003, "Untrained" },
885 { 0x00000004, "Trained" },
886 { 0x00000005, "Field Service" },
887 { 0x00000006, "Management" },
891 static const value_string ndps_colorant_set_enum
[] = {
892 { 0x00000000, "Name" },
893 { 0x00000001, "Description" },
897 static const value_string ndps_card_enum_time_enum
[] = {
898 { 0x00000000, "Cardinal" },
899 { 0x00000001, "Enumeration" },
900 { 0x00000002, "Time" },
904 static const value_string ndps_attrs_arg_enum
[] = {
905 { 0x00000000, "Continuation" },
906 { 0x00000001, "Specification" },
911 static const value_string ndps_filter_enum
[] = {
912 { 0x00000000, "Item" },
913 { 0x00000001, "And" },
914 { 0x00000002, "Or" },
915 { 0x00000003, "Not" },
921 static const value_string ndps_filter_item_enum
[] = {
922 { 0x00000000, "Equality" },
923 { 0x00000001, "Substrings" },
924 { 0x00000002, "Greater then or Equal to" },
925 { 0x00000003, "Less then or Equal to" },
926 { 0x00000004, "Present" },
927 { 0x00000005, "Subset of" },
928 { 0x00000006, "Superset of" },
929 { 0x00000007, "Non NULL Set Intersect" },
933 static const value_string ndps_match_criteria_enum
[] = {
934 { 0x00000000, "Exact" },
935 { 0x00000001, "Case Insensitive" },
936 { 0x00000002, "Same Letter" },
937 { 0x00000003, "Approximate" },
942 static const value_string ndps_operator_enum
[] = {
943 { 0x00000000, "Attributes" },
944 { 0x00000002, "Ordered Jobs" },
948 static const value_string ndps_resource_type_enum
[] = {
949 { 0x00000000, "Printer Drivers" },
950 { 0x00000001, "Printer Definitions" },
951 { 0x00000002, "Printer Definitions Short" },
952 { 0x00000003, "Banner Page Files" },
953 { 0x00000004, "Font Types" },
954 { 0x00000005, "Printer Driver Files" },
955 { 0x00000006, "Printer Definition File" },
956 { 0x00000007, "Font Files" },
957 { 0x00000008, "Generic Type" },
958 { 0x00000009, "Generic Files" },
959 { 0x0000000a, "Printer Definition File 2" },
960 { 0x0000000b, "Printer Driver Types 2" },
961 { 0x0000000c, "Printer Driver Files 2" },
962 { 0x0000000d, "Printer Driver Types Archive" },
963 { 0x0000000e, "Languages Available" },
967 static const value_string ndps_os_type_enum
[] = {
968 { 0x00000000, "DOS" },
969 { 0x00000001, "Windows 3.1" },
970 { 0x00000002, "Windows 95" },
971 { 0x00000003, "Windows NT" },
972 { 0x00000004, "OS2" },
973 { 0x00000005, "MAC" },
974 { 0x00000006, "UNIX" },
975 { 0x00000007, "Windows NT 4.0" },
976 { 0x00000008, "Windows 2000/XP" },
977 { 0x00000009, "Windows 98" },
978 { 0xffffffff, "None" },
982 static const value_string ndps_banner_type_enum
[] = {
983 { 0x00000000, "All" },
984 { 0x00000001, "PCL" },
985 { 0x00000002, "PostScript" },
986 { 0x00000003, "ASCII Text" },
990 static const value_string ndps_font_type_enum
[] = {
991 { 0x00000000, "TrueType" },
992 { 0x00000001, "PostScript" },
993 { 0x00000002, "System" },
994 { 0x00000003, "SPD" },
995 { 0x00000004, "True Doc" },
999 static const value_string ndps_archive_enum
[] = {
1000 { 0x00000000, "ZIP" },
1001 { 0x00000001, "JAR" },
1006 static const value_string ndps_res_type_enum
[] = {
1007 { 0x00000000, "Printer Driver" },
1008 { 0x00000001, "Printer Definition" },
1009 { 0x00000002, "Banner Page" },
1010 { 0x00000003, "Font" },
1011 { 0x00000004, "Generic Resource" },
1012 { 0x00000005, "Print Driver Archive" },
1016 static const value_string ndps_print_arg_enum
[] = {
1017 { 0x00000000, "Create Job" },
1018 { 0x00000001, "Add Document" },
1019 { 0x00000002, "Close Job" },
1023 static const value_string ndps_doc_content_enum
[] = {
1024 { 0x00000000, "Content Included" },
1025 { 0x00000001, "Content Referenced" },
1029 static const value_string ndps_interrupt_job_enum
[] = {
1030 { 0x00000000, "Job ID" },
1031 { 0x00000001, "Name" },
1035 static const value_string ndps_pause_job_enum
[] = {
1036 { 0x00000000, "Job ID" },
1037 { 0x00000001, "Name" },
1041 static const value_string ndps_resubmit_op_enum
[] = {
1042 { 0x00000000, "Copy" },
1043 { 0x00000001, "Move" },
1047 static const value_string ndps_shutdown_enum
[] = {
1048 { 0x00000000, "Do Current Jobs" },
1049 { 0x00000001, "Immediate" },
1050 { 0x00000002, "Do Pending Jobs" },
1054 static const value_string ndps_list_profiles_choice_enum
[] = {
1055 { 0x00000000, "ID" },
1056 { 0x00000001, "Filter" },
1060 static const value_string ndps_list_profiles_result_enum
[] = {
1061 { 0x00000000, "Complete" },
1062 { 0x00000001, "No Event Objects" },
1063 { 0x00000002, "Profile ID's" },
1067 static const value_string ndps_ds_info_enum
[] = {
1068 { 0x00000000, "Add" },
1069 { 0x00000001, "Remove" },
1070 { 0x00000002, "Update" },
1074 static const value_string ndps_list_services_enum
[] = {
1075 { 0x00000000, "Supported" },
1076 { 0x00000001, "Enabled" },
1080 static const value_string ndps_data_item_enum
[] = {
1081 { 0x00000000, "Int8" },
1082 { 0x00000001, "Int16" },
1083 { 0x00000002, "Int32" },
1084 { 0x00000003, "Boolean" },
1085 { 0x00000004, "Character String" },
1086 { 0x00000005, "Byte String" },
1090 static const value_string ndps_list_local_servers_enum
[] = {
1091 { 0x00000000, "Specification" },
1092 { 0x00000001, "Continuation" },
1096 static const value_string ndps_delivery_method_enum
[] = {
1097 { 0x00000000, "Specification" },
1098 { 0x00000001, "Continuation" },
1102 static const value_string ndps_attribute_enum
[] = {
1103 { 0x00000000, "Null" },
1104 { 0x00000001, "Text" },
1105 { 0x00000002, "Descriptive Name" },
1106 { 0x00000003, "Descriptor" },
1107 { 0x00000004, "Message" },
1108 { 0x00000005, "Error Message" },
1109 { 0x00000006, "Simple Name" },
1110 { 0x00000007, "Distinguished Name String" },
1111 { 0x00000008, "Distinguished Name Seq" },
1112 { 0x00000009, "Delta Time" },
1113 { 0x0000000a, "Time" },
1114 { 0x0000000b, "Integer" },
1115 { 0x0000000c, "Integer Seq" },
1116 { 0x0000000d, "Cardinal" },
1117 { 0x0000000e, "Cardinal Seq" },
1118 { 0x0000000f, "Positive Integer" },
1119 { 0x00000010, "Integer Range" },
1120 { 0x00000011, "Cardinal Range" },
1121 { 0x00000012, "Maximum Integer" },
1122 { 0x00000013, "Minimum Integer" },
1123 { 0x00000014, "Integer 64" },
1124 { 0x00000015, "Integer 64 Seq" },
1125 { 0x00000016, "Cardinal 64" },
1126 { 0x00000017, "Cardinal 64 Seq" },
1127 { 0x00000018, "Positive Integer 64" },
1128 { 0x00000019, "Integer 64 Range" },
1129 { 0x0000001a, "Cardinal 64 Range" },
1130 { 0x0000001b, "Maximum Integer 64" },
1131 { 0x0000001c, "Minimum Integer 64" },
1132 { 0x0000001d, "Real" },
1133 { 0x0000001e, "Real Seq" },
1134 { 0x0000001f, "Non-Negative Real" },
1135 { 0x00000020, "Real Range" },
1136 { 0x00000021, "Non-Negative Real Range" },
1137 { 0x00000022, "Boolean" },
1138 { 0x00000023, "Percent" },
1139 { 0x00000024, "Object Identifier" },
1140 { 0x00000025, "Object Identifier Seq" },
1141 { 0x00000026, "Name or OID" },
1142 { 0x00000027, "Name or OID Seq" },
1143 { 0x00000028, "Distinguished Name" },
1144 { 0x00000029, "Relative Distinguished Name Seq" },
1145 { 0x0000002a, "Realization" },
1146 { 0x0000002b, "Medium Dimensions" },
1147 { 0x0000002c, "Dimension" },
1148 { 0x0000002d, "XY Dimensions" },
1149 { 0x0000002e, "Locations" },
1150 { 0x0000002f, "Area" },
1151 { 0x00000030, "Area Seq" },
1152 { 0x00000031, "Edge" },
1153 { 0x00000032, "Font Reference" },
1154 { 0x00000033, "Cardinal or OID" },
1155 { 0x00000034, "OID Cardinal Map" },
1156 { 0x00000035, "Cardinal or Name or OID" },
1157 { 0x00000036, "Positive Integer or OID" },
1158 { 0x00000037, "Event Handling Profile" },
1159 { 0x00000038, "Octet String" },
1160 { 0x00000039, "Priority" },
1161 { 0x0000003a, "Locale" },
1162 { 0x0000003b, "Method Delivery Address" },
1163 { 0x0000003c, "Object Identification" },
1164 { 0x0000003d, "Results Profile" },
1165 { 0x0000003e, "Criteria" },
1166 { 0x0000003f, "Job Password" },
1167 { 0x00000040, "Job Level" },
1168 { 0x00000041, "Job Categories" },
1169 { 0x00000042, "Print Checkpoint" },
1170 { 0x00000043, "Ignored Attribute" },
1171 { 0x00000044, "Resource" },
1172 { 0x00000045, "Medium Substitution" },
1173 { 0x00000046, "Font Substitution" },
1174 { 0x00000047, "Resource Context Seq" },
1175 { 0x00000048, "Sides" },
1176 { 0x00000049, "Page Select Seq" },
1177 { 0x0000004a, "Page Media Select" },
1178 { 0x0000004b, "Document Content" },
1179 { 0x0000004c, "Page Size" },
1180 { 0x0000004d, "Presentation Direction" },
1181 { 0x0000004e, "Page Order" },
1182 { 0x0000004f, "File Reference" },
1183 { 0x00000050, "Medium Source Size" },
1184 { 0x00000051, "Input Tray Medium" },
1185 { 0x00000052, "Output Bins Chars" },
1186 { 0x00000053, "Page ID Type" },
1187 { 0x00000054, "Level Range" },
1188 { 0x00000055, "Category Set" },
1189 { 0x00000056, "Numbers Up Supported" },
1190 { 0x00000057, "Finishing" },
1191 { 0x00000058, "Print Contained Object ID" },
1192 { 0x00000059, "Print Config Object ID" },
1193 { 0x0000005a, "Typed Name" },
1194 { 0x0000005b, "Network Address" },
1195 { 0x0000005c, "XY Dimensions Value" },
1196 { 0x0000005d, "Name or OID Dimensions Map" },
1197 { 0x0000005e, "Printer State Reason" },
1198 { 0x0000005f, "Enumeration" },
1199 { 0x00000060, "Qualified Name" },
1200 { 0x00000061, "Qualified Name Set" },
1201 { 0x00000062, "Colorant Set" },
1202 { 0x00000063, "Resource Printer ID" },
1203 { 0x00000064, "Event Object ID" },
1204 { 0x00000065, "Qualified Name Map" },
1205 { 0x00000066, "File Path" },
1206 { 0x00000067, "Uniform Resource Identifier" },
1207 { 0x00000068, "Cardinal or Enum or Time" },
1208 { 0x00000069, "Print Contained Object ID Set" },
1209 { 0x0000006a, "Octet String Pair" },
1210 { 0x0000006b, "Octet String Integer Pair" },
1211 { 0x0000006c, "Extended Resource Identifier" },
1212 { 0x0000006d, "Event Handling Profile 2" },
1216 static const value_string ndps_error_types
[] = {
1217 { 0x00000000, "Ok" },
1218 { 0x00000001, "Error" },
1219 { 0x01000001, "Invalid Parameter" },
1220 { 0x01000002, "Parameter Value Unrecognized" },
1221 { 0x01000003, "Call Back Error" },
1222 { 0x01000004, "Standard IO Error" },
1223 { 0x01000005, "NDS Error" },
1224 { 0x01000006, "Unicode Error" },
1225 { 0x01000007, "Invalid Operator" },
1226 { 0x01000009, "Parameter Value Unsupported" },
1227 { 0x0100000a, "Windows Error" },
1228 { 0x0100000b, "WSA Last Error" },
1229 { 0x0100000c, "SLP Error" },
1230 { 0x0100000d, "NetWare Client Error" },
1231 { 0x03000005, "NDS Error with Position" },
1232 { 0x030a0001, "No Memory" },
1233 { 0x030a0009, "Artificial Memory Limit" },
1234 { 0x030a000c, "Memory Allocated with Wrong NLM ID" },
1235 { 0xFFFFFC18, "Broker Out of Memory" }, /* Broker Errors */
1236 { 0xFFFFFC17, "Broker Bad NetWare Version" },
1237 { 0xFFFFFC16, "Broker Wrong Command Line Arguments" },
1238 { 0xFFFFFC15, "Broker Name Not Given" },
1239 { 0xFFFFFC14, "Not Broker Class" },
1240 { 0xFFFFFC13, "Invalid Broker Password" },
1241 { 0xFFFFFC12, "Invalid Broker Name" },
1242 { 0xFFFFFC11, "Broker Failed to Create Thread" },
1243 { 0xFFFFFC10, "Broker Failed to Initialize NUT" },
1244 { 0xFFFFFC0F, "Broker Failed to Get Messages" },
1245 { 0xFFFFFC0E, "Broker Failed to Allocate Resources" },
1246 { 0xFFFFFC0D, "Broker Service Name Must be Fully Distinguished" },
1247 { 0xFFFFFC0C, "Broker Uninitialized Module" },
1248 { 0xFFFFFC0B, "Broker DS Value Size Too Large" },
1249 { 0xFFFFFC0A, "Broker No Attribute Values" },
1250 { 0xFFFFFC09, "Broker Unknown Session" },
1251 { 0xFFFFFC08, "Broker Service Disabled" },
1252 { 0xFFFFFC07, "Broker Unknown Modify Operation" },
1253 { 0xFFFFFC06, "Broker Invalid Arguments" },
1254 { 0xFFFFFC05, "Broker Duplicate Session ID" },
1255 { 0xFFFFFC04, "Broker Unknown Service" },
1256 { 0xFFFFFC03, "Broker Service Already Enabled" },
1257 { 0xFFFFFC02, "Broker Service Already Disabled" },
1258 { 0xFFFFFC01, "Broker Invalid Credential" },
1259 { 0xFFFFFC00, "Broker Unknown Designator" },
1260 { 0xFFFFFBFF, "Broker Failed to Make Change Permanent" },
1261 { 0xFFFFFBFE, "Broker Not Admin Type Session" },
1262 { 0xFFFFFBFD, "Broker Option Not Supported" },
1263 { 0xFFFFFBFC, "Broker No Effective Rights" },
1264 { 0xFFFFFBFB, "Broker Could Not Find File" },
1265 { 0xFFFFFBFA, "Broker Error Reading File" },
1266 { 0xFFFFFBF9, "Broker Not NLM File Format" },
1267 { 0xFFFFFBF8, "Broker Wrong NLM File Version" },
1268 { 0xFFFFFBF7, "Broker Reentrant Initialization Failure" },
1269 { 0xFFFFFBF6, "Broker Already in Progress" },
1270 { 0xFFFFFBF5, "Broker Initialize Failure" },
1271 { 0xFFFFFBF4, "Broker Inconsistent File Format" },
1272 { 0xFFFFFBF3, "Broker Can't Load at Startup" },
1273 { 0xFFFFFBF2, "Broker Autoload Modules Not Loaded" },
1274 { 0xFFFFFBF1, "Broker Unresolved External" },
1275 { 0xFFFFFBF0, "Broker Public Already Defined" },
1276 { 0xFFFFFBEF, "Broker Other Broker Using Object" },
1277 { 0xFFFFFBEE, "Broker Service Failed to Initialize" },
1278 { 0xFFFFFBB4, "Registry Out of Memory" }, /* SRS Errors */
1279 { 0xFFFFFBB3, "Registry Bad NetWare Version" },
1280 { 0xFFFFFBB2, "Registry Failed to Create Context" },
1281 { 0xFFFFFBB1, "Registry Failed Login" },
1282 { 0xFFFFFBB0, "Registry Failed to Create Thread" },
1283 { 0xFFFFFBAF, "Registry Failed to Get Messages" },
1284 { 0xFFFFFBAE, "Registry Service Name Must Be Fully Distinguished" },
1285 { 0xFFFFFBAD, "Registry DS Value Size Too Large" },
1286 { 0xFFFFFBAC, "Registry No Attribute Values" },
1287 { 0xFFFFFBAB, "Registry Unknown Session" },
1288 { 0xFFFFFBAA, "Registry Service Disabled" },
1289 { 0xFFFFFBA9, "Registry Unknown Modify Operation" },
1290 { 0xFFFFFBA8, "Registry Can't Start Advertise" },
1291 { 0xFFFFFBA7, "Registry Duplicate Server Entry" },
1292 { 0xFFFFFBA6, "Registry Can't Bind to Registry" },
1293 { 0xFFFFFBA5, "Registry Can't Create Client" },
1294 { 0xFFFFFBA4, "Registry Invalid Arguments" },
1295 { 0xFFFFFBA3, "Registry Duplicate Session ID" },
1296 { 0xFFFFFBA2, "Registry Unknown Server Entry" },
1297 { 0xFFFFFBA1, "Registry Invalid Credential" },
1298 { 0xFFFFFBA0, "Registry Type Session" },
1299 { 0xFFFFFB9F, "Registry Server Type Session" },
1300 { 0xFFFFFB9E, "Registry Not Server Type Session" },
1301 { 0xFFFFFB9D, "Not Registry Type Session" },
1302 { 0xFFFFFB9C, "Registry Unknown Designator" },
1303 { 0xFFFFFB9B, "Registry Option Not Supported" },
1304 { 0xFFFFFB9A, "Registry Not in List Iteration" },
1305 { 0xFFFFFB99, "Registry Invalid Continuation Handle" },
1306 { 0xFFFFFB50, "Notify Out of Memory" }, /* Notification Service Errors */
1307 { 0xFFFFFB4F, "Notify Bad NetWare Version" },
1308 { 0xFFFFFB4E, "Notify Failed to Create Thread" },
1309 { 0xFFFFFB4D, "Notify Failed to Get Messages" },
1310 { 0xFFFFFB4C, "Notify Failed to Create Context" },
1311 { 0xFFFFFB4B, "Notify Failed Login" },
1312 { 0xFFFFFB4A, "Notify Service Name Must be Fully Distiguished" },
1313 { 0xFFFFFB49, "Notify DS Value Size Too Large" },
1314 { 0xFFFFFB48, "Notify No Attribute Values" },
1315 { 0xFFFFFB47, "Notify Unknown Session" },
1316 { 0xFFFFFB46, "Notify Unknown Notify Profile" },
1317 { 0xFFFFFB45, "Notify Error Reading File" },
1318 { 0xFFFFFB44, "Notify Error Writing File" },
1319 { 0xFFFFFB43, "Wrong Notify Database Version" },
1320 { 0xFFFFFB42, "Corrupted Notify Database" },
1321 { 0xFFFFFB41, "Notify Unknown Event Object ID" },
1322 { 0xFFFFFB40, "Notify Method Already Installed" },
1323 { 0xFFFFFB3F, "Notify Unknown Method" },
1324 { 0xFFFFFB3E, "Notify Service Disabled" },
1325 { 0xFFFFFB3D, "Notify Unknown Modify Operation" },
1326 { 0xFFFFFB3C, "Out of Notify Entries" },
1327 { 0xFFFFFB3B, "Notify Unknown Language ID" },
1328 { 0xFFFFFB3A, "Notify Queue Empty" },
1329 { 0xFFFFFB39, "Notify Can't Load Delivery Method" },
1330 { 0xFFFFFB38, "Notify Invalid Arguments" },
1331 { 0xFFFFFB37, "Notify Duplicate Session ID" },
1332 { 0xFFFFFB36, "Notify Invalid Credentials" },
1333 { 0xFFFFFB35, "Notify Unknown Choice" },
1334 { 0xFFFFFB34, "Notify Unknown Attribute Value" },
1335 { 0xFFFFFB33, "Notify Error Writing Database" },
1336 { 0xFFFFFB32, "Notify Unknown Object ID" },
1337 { 0xFFFFFB31, "Notify Unknown Designator" },
1338 { 0xFFFFFB30, "Notify Failed to Make Change Permanent" },
1339 { 0xFFFFFB2F, "Notify User Interface Not Supported" },
1340 { 0xFFFFFB2E, "Notify Not Supplied Type of Session" },
1341 { 0xFFFFFB2D, "Notify Not Admin Type Session" },
1342 { 0xFFFFFB2C, "Notify No Service Registry Available" },
1343 { 0xFFFFFB2B, "Notify Failed to Register With Any Server" },
1344 { 0xFFFFFB2A, "Notify Empty Event Object Set" },
1345 { 0xFFFFFB29, "Notify Unknown Notify Handle" },
1346 { 0xFFFFFB28, "Notify Option Not Supported" },
1347 { 0xFFFFFB27, "Notify Unknown RPC Session" },
1348 { 0xFFFFFB26, "Notify Initialization Error" },
1349 { 0xFFFFFB25, "Notify No Effective Rights" },
1350 { 0xFFFFFB24, "Notify No Persistent Storage" },
1351 { 0xFFFFFB23, "Notify Bad Method Filename" },
1352 { 0xFFFFFB22, "Notify Unknown Continuation Handle" },
1353 { 0xFFFFFB21, "Notify Invalid Continuation Handle" },
1354 { 0xFFFFFB20, "Notify Could Not Find File" },
1355 { 0xFFFFFB1F, "Notify Error Reading File" },
1356 { 0xFFFFFB1E, "Notify Not NLM File Format" },
1357 { 0xFFFFFB1D, "Notify Wrong NLM File Version" },
1358 { 0xFFFFFB1C, "Notify Reentrant Initialization Failure" },
1359 { 0xFFFFFB1B, "Notify Already in Progress" },
1360 { 0xFFFFFB1A, "Notify Initialization Failure" },
1361 { 0xFFFFFB19, "Notify Inconsistent File Format" },
1362 { 0xFFFFFB18, "Notify Can't Load at Startup" },
1363 { 0xFFFFFB17, "Notify Autoload Modules Not Loaded" },
1364 { 0xFFFFFB16, "Notify Unresolved External" },
1365 { 0xFFFFFB15, "Notify Public Already Defined" },
1366 { 0xFFFFFB14, "Notify Using Unknown Methods" },
1367 { 0xFFFFFB13, "Notify Service Not Fully Enabled" },
1368 { 0xFFFFFB12, "Notify Foreign NDS Tree Name" },
1369 { 0xFFFFFB11, "Notify Delivery Method Rejected Address" },
1370 { 0xFFFFFB10, "Notify Unsupported Delivery Address Type" },
1371 { 0xFFFFFB0F, "Notify User Object No Default Server" },
1372 { 0xFFFFFB0E, "Notify Failed to Send Notification" },
1373 { 0xFFFFFB0D, "Notify Bad Volume in Address" },
1374 { 0xFFFFFB0C, "Notify Broker Has No File Rights" },
1375 { 0xFFFFFB0B, "Notify Maximum Methods Supported" },
1376 { 0xFFFFFB0A, "Notify No Filter Provided" },
1377 { 0xFFFFFB09, "Notify IPX Not Supported By Method" },
1378 { 0xFFFFFB08, "Notify IP Not Supported By Method" },
1379 { 0xFFFFFB07, "Notify Failed to Startup Winsock" },
1380 { 0xFFFFFB06, "Notify No Protocols Available" },
1381 { 0xFFFFFB05, "Notify Failed to Launch RPC Server" },
1382 { 0xFFFFFB04, "Notify Invalid SLP Attribute Format" },
1383 { 0xFFFFFB03, "Notify Invalid SLP URL Format" },
1384 { 0xFFFFFB02, "Notify Unknown Attribute Object ID" },
1385 { 0xFFFFFB01, "Notify Duplicate Session ID" },
1386 { 0xFFFFFB00, "Notify Failed to Authenticate" },
1387 { 0xFFFFFAFF, "Notify Failed to Authenticate Protocol Mismatch" },
1388 { 0xFFFFFAFE, "Notify Failed to Authenticate Internal Error" },
1389 { 0xFFFFFAFD, "Notify Failed to Authenticate Connection Error" },
1390 { 0xFFFFFC7C, "Resource Manager Out of Memory" }, /* ResMan Errors */
1391 { 0xFFFFFC7B, "Resource Manager Bad NetWare Version" },
1392 { 0xFFFFFC7A, "Resource Manager Wrong Command Line Arguments" },
1393 { 0xFFFFFC79, "Resource Manager Broker Name Not Given" },
1394 { 0xFFFFFC78, "Resource Manager Invalid Broker Password" },
1395 { 0xFFFFFC77, "Resource Manager Invalid Broker Name" },
1396 { 0xFFFFFC76, "Resource Manager Failed to Create Thread" },
1397 { 0xFFFFFC75, "Resource Manager Service Name Must be Fully Distinguished" },
1398 { 0xFFFFFC74, "Resource Manager DS Value Size Too Large" },
1399 { 0xFFFFFC73, "Resource Manager No Attribute Values" },
1400 { 0xFFFFFC72, "Resource Manager Unknown Session" },
1401 { 0xFFFFFC71, "Resource Manager Error Reading File" },
1402 { 0xFFFFFC70, "Resource Manager Error Writing File" },
1403 { 0xFFFFFC6F, "Resource Manager Service Disabled" },
1404 { 0xFFFFFC6E, "Resource Manager Unknown Modify Operation" },
1405 { 0xFFFFFC6D, "Resource Manager Duplicate Session ID" },
1406 { 0xFFFFFC6C, "Resource Manager Invalid Credentials" },
1407 { 0xFFFFFC6B, "Resource Manager No Service Registry Available" },
1408 { 0xFFFFFC6A, "Resource Manager Failed to Register With any Server" },
1409 { 0xFFFFFC69, "Resource Manager Failed to Get Messages" },
1410 { 0xFFFFFC68, "Resource Manager Failed to Create Context" },
1411 { 0xFFFFFC67, "Resource Manager Failed to Login" },
1412 { 0xFFFFFC66, "Resource Manager NPD Files Generation Error" },
1413 { 0xFFFFFC65, "Resource Manager INF File Format Error" },
1414 { 0xFFFFFC64, "Resource Manager No Printer Type in INF File" },
1415 { 0xFFFFFC63, "Resource Manager No INF Files Present" },
1416 { 0xFFFFFC62, "Resource Manager File Open Error" },
1417 { 0xFFFFFC61, "Resource Manager Read File Error" },
1418 { 0xFFFFFC60, "Resource Manager Write File Error" },
1419 { 0xFFFFFC5F, "Resource Manager Resource Type Invalid" },
1420 { 0xFFFFFC5E, "Resource Manager No Such Filename" },
1421 { 0xFFFFFC5D, "Resource Manager Banner Type Invalid" },
1422 { 0xFFFFFC5C, "Resource Manager List Type Unknown" },
1423 { 0xFFFFFC5B, "Resource Manager OS Not Supported" },
1424 { 0xFFFFFC5A, "Resource Manager No Banner Files Present" },
1425 { 0xFFFFFC59, "Resource Manager Printer Definition Type Unknown" },
1426 { 0xFFFFFC58, "Resource Manager No Printer Types in List" },
1427 { 0xFFFFFC57, "Resource Manager Option Not Supported" },
1428 { 0xFFFFFC56, "Resource Manager Unicode Convention Error" },
1429 { 0xFFFFFC55, "Resource Manager Invalid Arguments" },
1430 { 0xFFFFFC54, "Resource Manager Initialization Error" },
1431 { 0xFFFFFC53, "Resource Manager No Service Registry Available" },
1432 { 0xFFFFFC52, "Resource Manager Failed to Register to Any Server" },
1433 { 0xFFFFFC51, "Resource Manager Unknown Designator" },
1434 { 0xFFFFFC50, "Resource Manager Not Admin Session" },
1435 { 0xFFFFFC4F, "Resource Manager No Effective Rights" },
1436 { 0xFFFFFC4E, "Resource Manager Bad File Attribute" },
1437 { 0xFFFFFC4D, "Resource Manager Document ID Format Error" },
1438 { 0xFFFFFC4C, "Resource Manager Unknown RPC Session" },
1439 { 0xFFFFFC4B, "Resource Manager Session Being Removed" },
1440 { 0xFFFFFC49, "Resource Manager Font Manager IO Error" },
1441 { 0xFFFFFC48, "Resource Manager Font Manager Reentrancy" },
1442 { 0xFFFFFC47, "Resource Manager Font Manager Sequence Error" },
1443 { 0xFFFFFC46, "Resource Manager Font Manager Corrupt Index File" },
1444 { 0xFFFFFC45, "Resource Manager Font Manager No Such Font" },
1445 { 0xFFFFFC44, "Resource Manager Font Manager Not Initialized" },
1446 { 0xFFFFFC43, "Resource Manager Font Manager System Error" },
1447 { 0xFFFFFC42, "Resource Manager Font Manager Bad Parameter" },
1448 { 0xFFFFFC41, "Resource Manager Font Manager Path Too Long" },
1449 { 0xFFFFFC40, "Resource Manager Font Manager Failure" },
1450 { 0xFFFFFC3F, "Resource Manager Duplicate TIRPC Session" },
1451 { 0xFFFFFC3E, "Resource Manager Connection Lost RMS Data" },
1452 { 0xFFFFFC3D, "Resource Manager Failed to Start Winsock" },
1453 { 0xFFFFFC3C, "Resource Manager No Protocols Available" },
1454 { 0xFFFFFC3B, "Resource Manager Failed to Launch RPC Server" },
1455 { 0xFFFFFC3A, "Resource Manager Invalid SLP Attribute Format" },
1456 { 0xFFFFFC39, "Resource Manager Invalid SLP URL Format" },
1457 { 0xFFFFFC38, "Resource Manager Unresolved External" },
1458 { 0xFFFFFC37, "Resource Manager Failed to Authenticate" },
1459 { 0xFFFFFC36, "Resource Manager Failed to Authenticate Protocol Mismatch" },
1460 { 0xFFFFFC35, "Resource Manager Failed to Authenticate Internal Error" },
1461 { 0xFFFFFC34, "Resource Manager Failed to Authenticate Connection Error" },
1462 { 0xFFFFFC33, "Resource Manager No Rights to Remote Resdir" },
1463 { 0xFFFFFC32, "Resource Manager Can't Initialize NDPS Library" },
1464 { 0xFFFFFC31, "Resource Manager Can't Create Resource Reference" },
1465 { 0xFFFFFC30, "Resource Manager File is Zero Length" },
1466 { 0xFFFFFC2F, "Resource Manager Failed to Write INF in Address" },
1467 { 0xFFFFFCDF, "NDPSM No Memory" }, /* NDPSM Errors */
1468 { 0xFFFFFCDE, "NDPSM Memory Not Found" },
1469 { 0xFFFFFCDD, "NDPSM Job Storage Limit" },
1470 { 0xFFFFFCDC, "NDPSM Job Retention Limit" },
1471 { 0xFFFFFCDB, "NDPSM Unsupported Type" },
1472 { 0xFFFFFCDA, "NDPSM Undefined Type" },
1473 { 0xFFFFFCD9, "NDPSM Unsupported Operation" },
1474 { 0xFFFFFCD8, "NDPSM Error Accessing Database" },
1475 { 0xFFFFFCD7, "NDPSM No PDS" },
1476 { 0xFFFFFCD6, "NDPSM Invalid Class" },
1477 { 0xFFFFFCD5, "NDPSM Bad Parameter" },
1478 { 0xFFFFFCD4, "NDPSM Object Not Found" },
1479 { 0xFFFFFCD3, "NDPSM Attribute Not Found" },
1480 { 0xFFFFFCD2, "NDPSM Value Not Found" },
1481 { 0xFFFFFCD1, "NDPSM Values Not Comparable" },
1482 { 0xFFFFFCD0, "NDPSM Invalid Value Syntax" },
1483 { 0xFFFFFCCF, "NDPSM Job Not Found" },
1484 { 0xFFFFFCCE, "NDPSM Communications Error" },
1485 { 0xFFFFFCCD, "NDPSM Printer Agent Initializing" },
1486 { 0xFFFFFCCC, "NDPSM Printer Agent Going Down" },
1487 { 0xFFFFFCCB, "NDPSM Printer Agent Disabled" },
1488 { 0xFFFFFCCA, "NDPSM Printer Agent Paused" },
1489 { 0xFFFFFCC9, "NDPSM Bad Printer Agent Handle" },
1490 { 0xFFFFFCC8, "NDPSM Object Not Locked" },
1491 { 0xFFFFFCC7, "NDPSM Version Incompatible" },
1492 { 0xFFFFFCC6, "NDPSM PSM Initializing" },
1493 { 0xFFFFFCC5, "NDPSM PSM Going Down" },
1494 { 0xFFFFFCC4, "NDPSM Notification Service Error" },
1495 { 0xFFFFFCC3, "NDPSM Medium Needs Mounted" },
1496 { 0xFFFFFCC2, "NDPSM PDS Not Responding" },
1497 { 0xFFFFFCC1, "NDPSM Session Not Found" },
1498 { 0xFFFFFCC0, "NDPSM RPC Failure" },
1499 { 0xFFFFFCBF, "NDPSM Duplicate Value" },
1500 { 0xFFFFFCBE, "NDPSM PDS Refuses Rename" },
1501 { 0xFFFFFCBD, "NDPSM No Mandatory Attribute" },
1502 { 0xFFFFFCBC, "NDPSM Already Attached" },
1503 { 0xFFFFFCBB, "NDPSM Can't Attach" },
1504 { 0xFFFFFCBA, "NDPSM Too Many NetWare Servers" },
1505 { 0xFFFFFCB9, "NDPSM Can't Create Document File" },
1506 { 0xFFFFFCB8, "NDPSM Can't Delete Document File" },
1507 { 0xFFFFFCB7, "NDPSM Can't Open Document File" },
1508 { 0xFFFFFCB6, "NDPSM Can't Write Document File" },
1509 { 0xFFFFFCB5, "NDPSM Job is Active" },
1510 { 0xFFFFFCB4, "NDPSM No Scheduler" },
1511 { 0xFFFFFCB3, "NDPSM Changing Connection" },
1512 { 0xFFFFFCB2, "NDPSM Could not Create Account Reference" },
1513 { 0xFFFFFCB1, "NDPSM Accounting Service Error" },
1514 { 0xFFFFFCB0, "NDPSM RMS Service Error" },
1515 { 0xFFFFFCAF, "NDPSM Failed Validation" },
1516 { 0xFFFFFCAE, "NDPSM Broker Server Connecting" },
1517 { 0xFFFFFCAD, "NDPSM SRS Service Error" },
1518 { 0xFFFFFD44, "JPM Execute Request Later" },
1519 { 0xFFFFFD43, "JPM Failed to Open Document" },
1520 { 0xFFFFFD42, "JPM Failed to Read Document File" },
1521 { 0xFFFFFD41, "JPM Bad Printer Agent Handle" },
1522 { 0xFFFFFD40, "JPM Bad Job Handle" },
1523 { 0xFFFFFD3F, "JPM Bad Document Handle" },
1524 { 0xFFFFFD3E, "JPM Unsupported Operation" },
1525 { 0xFFFFFD3D, "JPM Request Queue Full" },
1526 { 0xFFFFFD3C, "JPM Printer Agent Not Found" },
1527 { 0xFFFFFD3B, "JPM Invalid Request" },
1528 { 0xFFFFFD3A, "JPM Not Accepting Requests" },
1529 { 0xFFFFFD39, "JPM Printer Agent Already Serviced By PDS" },
1530 { 0xFFFFFD38, "JPM No Job" },
1531 { 0xFFFFFD37, "JPM Job Not Found" },
1532 { 0xFFFFFD36, "JPM Could not Access Database" },
1533 { 0xFFFFFD35, "JPM Bad Object Type" },
1534 { 0xFFFFFD34, "JPM Job Already Closed" },
1535 { 0xFFFFFD33, "JPM Document Already Closed" },
1536 { 0xFFFFFD32, "JPM Print Handler Not Registered" },
1537 { 0xFFFFFD31, "JPM Version Incompatible" },
1538 { 0xFFFFFD30, "JPM Printer Agent Paused" },
1539 { 0xFFFFFD2F, "JPM Printer Agent Shutdown" },
1540 { 0xFFFFFD2E, "JPM No CLIB Context" },
1541 { 0xFFFFFD2D, "JPM Accounting Already Serviced" },
1542 { 0xFFFFFC7B, "Database Can't Create File" },
1543 { 0xFFFFFC7A, "Database Can't Find Data File" },
1544 { 0xFFFFFC79, "Database Can't Open Data File" },
1545 { 0xFFFFFC78, "Database Can't Open Index File" },
1546 { 0xFFFFFC77, "Database Index File Not Open" },
1547 { 0xFFFFFC76, "Database Can't Rename File" },
1548 { 0xFFFFFC75, "Database Can't Read Data File" },
1549 { 0xFFFFFC74, "Database Can't Read Index File" },
1550 { 0xFFFFFC73, "Database Can't Write Data File" },
1551 { 0xFFFFFC72, "Database Can't Write Index File" },
1552 { 0xFFFFFC71, "Database Can't Delete Printer Agent Directory" },
1553 { 0xFFFFFC70, "Database Already Deleted" },
1554 { 0xFFFFFC6F, "Database Object Exists" },
1555 { 0xFFFFFC6E, "Database Descriptor In Use" },
1556 { 0xFFFFFC6D, "Database Descriptor Being Deleted" },
1557 { 0xffffffff, "(-1) Insufficient Space" },
1558 { 0xffffff89, "(-119) Buffer too Small" },
1559 { 0xffffff88, "(-120) RR Volume Flag Not Set" },
1560 { 0xffffff87, "(-121) No Items Found" },
1561 { 0xffffff86, "(-122) Connection Already Temporary" },
1562 { 0xffffff85, "(-123) Connection Already Logged In" },
1563 { 0xffffff84, "(-124) Connection Not Authenticated" },
1564 { 0xffffff83, "(-125) Connection Not Logged In" },
1565 { 0xffffff82, "(-126) NCP Boundary Check Failed" },
1566 { 0xffffff81, "(-127) Lock Waiting" },
1567 { 0xffffff80, "(-128) Lock Fail" },
1568 { 0xffffff7f, "(-129) Out of Handles" },
1569 { 0xffffff7e, "(-130) No Open Privilege" },
1570 { 0xffffff7d, "(-131) Hard IO Error" },
1571 { 0xffffff7c, "(-132) No Create Privilege" },
1572 { 0xffffff7b, "(-133) No Create Delete Privilege" },
1573 { 0xffffff7a, "(-134) Create Duplicate When Read Only" },
1574 { 0xffffff79, "(-135) Create File with Invalid Name" },
1575 { 0xffffff78, "(-136) Invalid File Handle" },
1576 { 0xffffff77, "(-137) No Search Privilege" },
1577 { 0xffffff76, "(-138) No Delete Privilege" },
1578 { 0xffffff75, "(-139) No Rename Privilege" },
1579 { 0xffffff74, "(-140) No Set Privilege" },
1580 { 0xffffff73, "(-141) Some File in Use" },
1581 { 0xffffff72, "(-142) All File in Use" },
1582 { 0xffffff71, "(-143) Some Read Only" },
1583 { 0xffffff70, "(-144) All Read Only" },
1584 { 0xffffff6f, "(-145) Some names Exist" },
1585 { 0xffffff6e, "(-146) All Names Exist" },
1586 { 0xffffff6d, "(-147) No Read Privilege" },
1587 { 0xffffff6c, "(-148) No Write Privilege" },
1588 { 0xffffff6b, "(-149) File Detached" },
1589 { 0xffffff6a, "(-150) No Alloc Space/Target Not a Subdirectory/Insuffficient Memory" },
1590 { 0xffffff69, "(-151) No Spool Space" },
1591 { 0xffffff68, "(-152) Invalid Volume" },
1592 { 0xffffff67, "(-153) Directory Full" },
1593 { 0xffffff66, "(-154) Rename Across Volume" },
1594 { 0xffffff65, "(-155) Bad Directory Handle" },
1595 { 0xffffff64, "(-156) Invalid Path/No Such Extension" },
1596 { 0xffffff63, "(-157) No Directory Handles" },
1597 { 0xffffff62, "(-158) Bad File Name" },
1598 { 0xffffff61, "(-159) Directory Active" },
1599 { 0xffffff60, "(-160) Directory Not Empty" },
1600 { 0xffffff5f, "(-161) Directory IO Error" },
1601 { 0xffffff5e, "(-162) IO Locked" },
1602 { 0xffffff5d, "(-163) Transaction Restarted" },
1603 { 0xffffff5c, "(-164) Rename Directory Invalid" },
1604 { 0xffffff5b, "(-165) Invalid Open/Create Mode" },
1605 { 0xffffff5a, "(-166) Already in Use" },
1606 { 0xffffff59, "(-167) Invalid Resource Tag" },
1607 { 0xffffff58, "(-168) Access Denied" },
1608 { 0xffffff44, "(-188) Login Signing Required" },
1609 { 0xffffff43, "(-189) Login Encryption Required" },
1610 { 0xffffff42, "(-190) Invalid Data Stream" },
1611 { 0xffffff41, "(-191) Invalid Name Space" },
1612 { 0xffffff40, "(-192) No Accounting Privileges" },
1613 { 0xffffff3f, "(-193) No Account Balance" },
1614 { 0xffffff3e, "(-194) Credit Limit Exceeded" },
1615 { 0xffffff3d, "(-195) Too Many Holds" },
1616 { 0xffffff3c, "(-196) Accounting Disabled" },
1617 { 0xffffff3b, "(-197) Intruder Login Lockout" },
1618 { 0xffffff3a, "(-198) No Console Rights" },
1619 { 0xffffff30, "(-208) Queue IO Failure" },
1620 { 0xffffff2f, "(-209) No Queue" },
1621 { 0xffffff2e, "(-210) No Queue Server" },
1622 { 0xffffff2d, "(-211) No Queue Rights" },
1623 { 0xffffff2c, "(-212) Queue Full" },
1624 { 0xffffff2b, "(-213) No Queue Job" },
1625 { 0xffffff2a, "(-214) No Queue Job Rights/Unencrypted Not Allowed" },
1626 { 0xffffff29, "(-215) Queue In Service/Duplicate Password" },
1627 { 0xffffff28, "(-216) Queue Not Active/Password Too Short" },
1628 { 0xffffff27, "(-217) Queue Station Not Server/Maximum Logins Exceeded" },
1629 { 0xffffff26, "(-218) Queue Halted/Bad Login Time" },
1630 { 0xffffff25, "(-219) Queue Maximum Servers/Node Address Violation" },
1631 { 0xffffff24, "(-220) Login Account Expired" },
1632 { 0xffffff22, "(-222) Bad Password" },
1633 { 0xffffff21, "(-223) Password Expired" },
1634 { 0xffffff20, "(-224) No Login Connection Available" },
1635 { 0xffffff18, "(-232) Write to Group Property" },
1636 { 0xffffff17, "(-233) Member Already Exists" },
1637 { 0xffffff16, "(-234) No Such Member" },
1638 { 0xffffff15, "(-235) Property Not Group" },
1639 { 0xffffff14, "(-236) No Such Value Set" },
1640 { 0xffffff13, "(-237) Property Already Exists" },
1641 { 0xffffff12, "(-238) Object Already Exists" },
1642 { 0xffffff11, "(-239) Illegal Name" },
1643 { 0xffffff10, "(-240) Illegal Wildcard" },
1644 { 0xffffff0f, "(-241) Bindery Security" },
1645 { 0xffffff0e, "(-242) No Object Read Rights" },
1646 { 0xffffff0d, "(-243) No Object Rename Rights" },
1647 { 0xffffff0c, "(-244) No Object Delete Rights" },
1648 { 0xffffff0b, "(-245) No Object Create Rights" },
1649 { 0xffffff0a, "(-246) No Property Delete Rights" },
1650 { 0xffffff09, "(-247) No Property Create Rights" },
1651 { 0xffffff08, "(-248) No Property Write Rights" },
1652 { 0xffffff07, "(-249) No Property Read Rights" },
1653 { 0xffffff06, "(-250) Temp Remap" },
1654 { 0xffffff05, "(-251) Unknown Request/No Such Property" },
1655 { 0xffffff04, "(-252) Message Queue Full/Target Already Has Message/No Such Object" },
1656 { 0xffffff03, "(-253) Bad Station Number" },
1657 { 0xffffff02, "(-254) Bindery Locked/Directory Locked/Spool Delete/Trustee not Found/Timeout" },
1658 { 0xffffff01, "(-255) Hard Failure" },
1659 { 0xfffffed3, "(-301) Not Enough Memory" },
1660 { 0xfffffed2, "(-302) Bad Key" },
1661 { 0xfffffed1, "(-303) Bad Context" },
1662 { 0xfffffed0, "(-304) Buffer Full" },
1663 { 0xfffffecf, "(-305) List Empty" },
1664 { 0xfffffece, "(-306) Bad Syntax" },
1665 { 0xfffffecd, "(-307) Buffer Empty" },
1666 { 0xfffffecc, "(-308) Bad Verb" },
1667 { 0xfffffecb, "(-309) Expected Identifier" },
1668 { 0xfffffeca, "(-310) Expected Equals" },
1669 { 0xfffffec9, "(-311) Attribute Type Expected" },
1670 { 0xfffffec8, "(-312) Attribute Type Not Expected" },
1671 { 0xfffffec7, "(-313) Filter Tree Empty" },
1672 { 0xfffffec6, "(-314) Invalid Object Name" },
1673 { 0xfffffec5, "(-315) Expected RDN Delimiter" },
1674 { 0xfffffec4, "(-316) Too Many Tokens" },
1675 { 0xfffffec3, "(-317) Inconsistent MultiAVA" },
1676 { 0xfffffec2, "(-318) Country Name Too Long" },
1677 { 0xfffffec1, "(-319) Internal Error" },
1678 { 0xfffffec0, "(-320) Can't Add Root" },
1679 { 0xfffffebf, "(-321) Unable to Attach" },
1680 { 0xfffffebe, "(-322) Invalid Iteration Handle" },
1681 { 0xfffffebd, "(-323) Buffer Zero Length" },
1682 { 0xfffffebc, "(-324) Invalid Replica Type" },
1683 { 0xfffffebb, "(-325) Invalid Attribute Syntax" },
1684 { 0xfffffeba, "(-326) Invalid Filter Syntax" },
1685 { 0xfffffeb8, "(-328) Unicode Error during Context Creation" },
1686 { 0xfffffeb7, "(-329) Invalid Union Tag" },
1687 { 0xfffffeb6, "(-330) Invalid Server Response" },
1688 { 0xfffffeb5, "(-331) Null Pointer" },
1689 { 0xfffffeb4, "(-332) No Server Found" },
1690 { 0xfffffeb3, "(-333) No Connection" },
1691 { 0xfffffeb2, "(-334) RDN Too Long" },
1692 { 0xfffffeb1, "(-335) Duplicate Type" },
1693 { 0xfffffeb0, "(-336) Data Store Failure" },
1694 { 0xfffffeaf, "(-337) Not Logged In" },
1695 { 0xfffffeae, "(-338) Invalid Password Characters" },
1696 { 0xfffffead, "(-339) Failed Server Authentication" },
1697 { 0xfffffeac, "(-340) Transport Failed" },
1698 { 0xfffffeab, "(-341) No Such Syntax" },
1699 { 0xfffffeaa, "(-342) Invalid DS Name" },
1700 { 0xfffffea9, "(-343) Attribute Name Too Long" },
1701 { 0xfffffea8, "(-344) Invalid TDS" },
1702 { 0xfffffea7, "(-345) Invalid DS Version" },
1703 { 0xfffffea6, "(-346) Unicode Translation" },
1704 { 0xfffffea5, "(-347) Schema Name Too Long" },
1705 { 0xfffffea4, "(-348) Unicode File Not Found" },
1706 { 0xfffffea3, "(-349) Unicode Already Loaded" },
1707 { 0xfffffea2, "(-350) Not Context Owner" },
1708 { 0xfffffea1, "(-351) Attempt to Authenticate" },
1709 { 0xfffffea0, "(-352) No Writable Replicas" },
1710 { 0xfffffe9f, "(-353) DN Too Long" },
1711 { 0xfffffe9e, "(-354) Rename Not Allowed" },
1712 { 0xfffffe9d, "(-355) Not NDS for NT" },
1713 { 0xfffffe9c, "(-356) NDS for NT - No Domain" },
1714 { 0xfffffe9b, "(-357) NDS for NT - Sync Disabled" },
1715 { 0xfffffe9a, "(-358) Iterator Invalid Handle" },
1716 { 0xfffffe99, "(-359) Iterator Invalid Position" },
1717 { 0xfffffe98, "(-360) Iterator Invalid Search Data" },
1718 { 0xfffffe97, "(-361) Iterator Invalid Scope" },
1719 { 0xfffffda7, "(-601) No Such Entry" },
1720 { 0xfffffda6, "(-602) No Such Value" },
1721 { 0xfffffda5, "(-603) No Such Attribute" },
1722 { 0xfffffda4, "(-604) No Such Class" },
1723 { 0xfffffda3, "(-605) No Such Partition" },
1724 { 0xfffffda2, "(-606) Entry Already Exists" },
1725 { 0xfffffda1, "(-607) Not Effective Class" },
1726 { 0xfffffda0, "(-608) Illegal Attribute" },
1727 { 0xfffffd9f, "(-609) Missing Mandatory" },
1728 { 0xfffffd9e, "(-610) Illegal DS Name" },
1729 { 0xfffffd9d, "(-611) Illegal Containment" },
1730 { 0xfffffd9c, "(-612) Can't Have Multiple Values" },
1731 { 0xfffffd9b, "(-613) Syntax Violation" },
1732 { 0xfffffd9a, "(-614) Duplicate Value" },
1733 { 0xfffffd99, "(-615) Attribute Already Exists" },
1734 { 0xfffffd98, "(-616) Maximum Entries Exist" },
1735 { 0xfffffd97, "(-617) Database Format" },
1736 { 0xfffffd96, "(-618) Inconsistent Database" },
1737 { 0xfffffd95, "(-619) Invalid Comparison" },
1738 { 0xfffffd94, "(-620) Comparison Failed" },
1739 { 0xfffffd93, "(-621) Transaction Tracking Disabled" },
1740 { 0xfffffd92, "(-622) Invalid Transport" },
1741 { 0xfffffd91, "(-623) Syntax Invalid in Name" },
1742 { 0xfffffd90, "(-624) Replica Already Exists" },
1743 { 0xfffffd8f, "(-625) Transport Failure" },
1744 { 0xfffffd8e, "(-626) All Referrals Failed" },
1745 { 0xfffffd8d, "(-627) Can't Remove Naming Value" },
1746 { 0xfffffd8c, "(-628) Object Class Violation" },
1747 { 0xfffffd8b, "(-629) Entry is Not Leaf" },
1748 { 0xfffffd8a, "(-630) Different Tree" },
1749 { 0xfffffd89, "(-631) Illegal Replica Type" },
1750 { 0xfffffd88, "(-632) System Failure" },
1751 { 0xfffffd87, "(-633) Invalid Entry for Root" },
1752 { 0xfffffd86, "(-634) No Referrals" },
1753 { 0xfffffd85, "(-635) Remote Failure" },
1754 { 0xfffffd84, "(-636) Unreachable Server" },
1755 { 0xfffffd83, "(-637) Previous Move in Progress" },
1756 { 0xfffffd82, "(-638) No Character Mapping" },
1757 { 0xfffffd81, "(-639) Incomplete Authentication" },
1758 { 0xfffffd80, "(-640) Invalid Certificate" },
1759 { 0xfffffd7f, "(-641) Invalid Request" },
1760 { 0xfffffd7e, "(-642) Invalid Iteration" },
1761 { 0xfffffd7d, "(-643) Schema is Non-removable" },
1762 { 0xfffffd7c, "(-644) Schema is in Use" },
1763 { 0xfffffd7b, "(-645) Class Already Exists" },
1764 { 0xfffffd7a, "(-646) Bad Naming Attributes" },
1765 { 0xfffffd79, "(-647) Not Root Partition" },
1766 { 0xfffffd78, "(-648) Insufficient Stack" },
1767 { 0xfffffd77, "(-649) Insufficient Buffer" },
1768 { 0xfffffd76, "(-650) Ambiguous Containment" },
1769 { 0xfffffd75, "(-651) Ambiguous Naming" },
1770 { 0xfffffd74, "(-652) Duplicate Mandatory" },
1771 { 0xfffffd73, "(-653) Duplicate Optional" },
1772 { 0xfffffd72, "(-654) Partition Busy" },
1773 { 0xfffffd71, "(-655) Multiple Replicas" },
1774 { 0xfffffd70, "(-656) Crucial Replica" },
1775 { 0xfffffd6f, "(-657) Schema Sync in Progress" },
1776 { 0xfffffd6e, "(-658) Skulk in Progress" },
1777 { 0xfffffd6d, "(-659) Time Not Synchronized" },
1778 { 0xfffffd6c, "(-660) Record in Use" },
1779 { 0xfffffd6b, "(-661) DS Volume Not Mounted" },
1780 { 0xfffffd6a, "(-662) DS Volume IO Failure" },
1781 { 0xfffffd69, "(-663) DS Locked" },
1782 { 0xfffffd68, "(-664) Old Epoch" },
1783 { 0xfffffd67, "(-665) New Epoch" },
1784 { 0xfffffd66, "(-666) Incompatible DS Version" },
1785 { 0xfffffd65, "(-667) Partition Root" },
1786 { 0xfffffd64, "(-668) Entry Not Container" },
1787 { 0xfffffd63, "(-669) Failed Authentication" },
1788 { 0xfffffd62, "(-670) Invalid Context" },
1789 { 0xfffffd61, "(-671) No Such Parent" },
1790 { 0xfffffd60, "(-672) No Access" },
1791 { 0xfffffd5f, "(-673) Replica Not On" },
1792 { 0xfffffd5e, "(-674) Invalid Name Service" },
1793 { 0xfffffd5d, "(-675) Invalid Task" },
1794 { 0xfffffd5c, "(-676) Invalid Connection Handle" },
1795 { 0xfffffd5b, "(-677) Invalid Identity" },
1796 { 0xfffffd5a, "(-678) Duplicate ACL" },
1797 { 0xfffffd59, "(-679) Partition Already Exists" },
1798 { 0xfffffd58, "(-680) Transport Modified" },
1799 { 0xfffffd57, "(-681) Alias of an Alias" },
1800 { 0xfffffd56, "(-682) Auditing Failed" },
1801 { 0xfffffd55, "(-683) Invalid API Version" },
1802 { 0xfffffd54, "(-684) Secure NCP Violation" },
1803 { 0xfffffd53, "(-685) Move in Progress" },
1804 { 0xfffffd52, "(-686) Not a Leaf Partition" },
1805 { 0xfffffd51, "(-687) Cannot Abort" },
1806 { 0xfffffd50, "(-688) Cache Overflow" },
1807 { 0xfffffd4f, "(-689) Invalid Subordinate Count" },
1808 { 0xfffffd4e, "(-690) Invalid RDN" },
1809 { 0xfffffd4d, "(-691) Modification Time Not Current" },
1810 { 0xfffffd4c, "(-692) Incorrect Base Class" },
1811 { 0xfffffd4b, "(-693) Missing Reference" },
1812 { 0xfffffd4a, "(-694) Lost Entry" },
1813 { 0xfffffd49, "(-695) Agent Already Registered" },
1814 { 0xfffffd48, "(-696) DS Loader Busy" },
1815 { 0xfffffd47, "(-697) DS Cannot Reload" },
1816 { 0xfffffd46, "(-698) Replica in Skulk" },
1817 { 0xfffffd45, "(-699) Fatal" },
1818 { 0xfffffd44, "(-700) Obsolete API" },
1819 { 0xfffffd43, "(-701) Synchronization Disabled" },
1820 { 0xfffffd42, "(-702) Invalid Parameter" },
1821 { 0xfffffd41, "(-703) Duplicate Template" },
1822 { 0xfffffd40, "(-704) No Master Replica" },
1823 { 0xfffffd3f, "(-705) Duplicate Containment" },
1824 { 0xfffffd3e, "(-706) Not a Sibling" },
1825 { 0xfffffd3d, "(-707) Invalid Signature" },
1826 { 0xfffffd3c, "(-708) Invalid Response" },
1827 { 0xfffffd3b, "(-709) Insufficient Sockets" },
1828 { 0xfffffd3a, "(-710) Database Read Fail" },
1829 { 0xfffffd39, "(-711) Invalid Code Page" },
1830 { 0xfffffd38, "(-712) Invalid Escape Character" },
1831 { 0xfffffd37, "(-713) Invalid Delimiters" },
1832 { 0xfffffd36, "(-714) Not Implemented" },
1833 { 0xfffffd35, "(-715) Checksum Failure" },
1834 { 0xfffffd34, "(-716) Checksumming Not Supported" },
1835 { 0xfffffd33, "(-717) CRC Failure" },
1836 { 0xfffffd32, "(-718) Invalid Entry Handle" },
1837 { 0xfffffd31, "(-719) Invalid Value Handle" },
1838 { 0xfffffd30, "(-720) Connection Denied" },
1839 { 0xfffffd2f, "(-721) No Such Federation Link" },
1840 { 0xfffffd2e, "(-722) Operational Schema Mismatch" },
1841 { 0xfffffd2d, "(-723) Stream Not Found" },
1842 { 0xfffffd2c, "(-724) DClient Unavailable" },
1843 { 0xfffffd2b, "(-725) MASV No Access" },
1844 { 0xfffffd2a, "(-726) MASV Invalid Request" },
1845 { 0xfffffd29, "(-727) MASV Failure" },
1846 { 0xfffffd28, "(-728) MASV Already Exists" },
1847 { 0xfffffd27, "(-729) MASV Not Found" },
1848 { 0xfffffd26, "(-730) MASV Bad Range" },
1849 { 0xfffffd25, "(-731) Value Data" },
1850 { 0xfffffd24, "(-732) Database Locked" },
1851 { 0xfffffd21, "(-735) Nothing to Abort" },
1852 { 0xfffffd20, "(-736) End of Stream" },
1853 { 0xfffffd1f, "(-737) No Such Template" },
1854 { 0xfffffd1e, "(-738) SAS Locked" },
1855 { 0xfffffd1d, "(-739) Invalid SAS Version" },
1856 { 0xfffffd1c, "(-740) SAS Already Registered" },
1857 { 0xfffffd1b, "(-741) Name Type Not Supported" },
1858 { 0xfffffd1a, "(-742) Wrong DS Version" },
1859 { 0xfffffd19, "(-743) Invalid Control Function" },
1860 { 0xfffffd18, "(-744) Invalid Control State" },
1861 { 0xfffffd17, "(-745) Cache in Use" },
1862 { 0xfffffd16, "(-746) Zero Creation Time" },
1863 { 0xfffffd15, "(-747) Would Block" },
1864 { 0xfffffd14, "(-748) Connection Timeout" },
1865 { 0xfffffd13, "(-749) Too Many Referrals" },
1866 { 0xfffffd12, "(-750) Operation Cancelled" },
1867 { 0xfffffd11, "(-751) Unknown Target" },
1868 { 0xfffffd10, "(-752) GUID Failure" },
1869 { 0xfffffd0f, "(-753) Incompatible OS" },
1870 { 0xfffffd0e, "(-754) Callback Cancel" },
1871 { 0xfffffd0d, "(-755) Invalid Synchronization Data" },
1872 { 0xfffffd0c, "(-756) Stream Exists" },
1873 { 0xfffffd0b, "(-757) Auxiliary Has Containment" },
1874 { 0xfffffd0a, "(-758) Auxiliary Not Container" },
1875 { 0xfffffd09, "(-759) Auxiliary Not Effective" },
1876 { 0xfffffd08, "(-760) Auxiliary On Alias" },
1877 { 0xfffffd07, "(-761) Have Seen State" },
1878 { 0xfffffd06, "(-762) Verb Locked" },
1879 { 0xfffffd05, "(-763) Verb Exceeds Table Length" },
1880 { 0xfffffd04, "(-764) BOF Hit" },
1881 { 0xfffffd03, "(-765) EOF Hit" },
1882 { 0xfffffd02, "(-766) Incompatible Replica Version" },
1883 { 0xfffffd01, "(-767) Query Timeout" },
1884 { 0xfffffd00, "(-768) Query Maximum Count" },
1885 { 0xfffffcff, "(-769) Duplicate Naming" },
1886 { 0xfffffcfe, "(-770) No Transaction Active" },
1887 { 0xfffffcfd, "(-771) Transaction Active" },
1888 { 0xfffffcfc, "(-772) Illegal Transaction Operation" },
1889 { 0xfffffcfb, "(-773) Iterator Syntax" },
1890 { 0xfffffcfa, "(-774) Repairing DIB" },
1891 { 0xfffffcf9, "(-775) Invalid OID Format" },
1892 { 0xfffffcf8, "(-776) Attempted to perform an NDS operation, and the DS agent on this server is closing" },
1893 { 0xfffffcf7, "(-777) Attempted to modify an object's attribute that is not stored on the sparse replica" },
1894 { 0xfffffcf6, "(-778) VpVector and VpvUser which must be correlated, are out of sync" },
1895 { 0xfffffcf5, "(-779) Error Cannot Go Remote" },
1896 { 0xfffffcf4, "(-780) Request not Supported" },
1897 { 0xfffffcf3, "(-781) Entry Not Local" },
1898 { 0xfffffcf2, "(-782) Root Unreachable" },
1899 { 0xfffffcf1, "(-783) VRDIM Not Initialized" },
1900 { 0xfffffcf0, "(-784) Wait Timeout" },
1901 { 0xfffffcef, "(-785) DIB Error" },
1902 { 0xfffffcee, "(-786) DIB IO Failure" },
1903 { 0xfffffced, "(-787) Illegal Schema Attribute" },
1904 { 0xfffffcec, "(-788) Error Schema Partition" },
1905 { 0xfffffceb, "(-789) Invalid Template" },
1906 { 0xfffffcea, "(-790) Error Opening File" },
1907 { 0xfffffce9, "(-791) Error Direct Opening File" },
1908 { 0xfffffce8, "(-792) Error Creating File" },
1909 { 0xfffffce7, "(-793) Error Direct Creating File" },
1910 { 0xfffffce6, "(-794) Error Reading File" },
1911 { 0xfffffce5, "(-795) Error Direct Reading File" },
1912 { 0xfffffce4, "(-796) Error Writing File" },
1913 { 0xfffffce3, "(-797) Error Direct Writing File" },
1914 { 0xfffffce2, "(-798) Error Positioning in File" },
1915 { 0xfffffce1, "(-799) Error Getting File Size" },
1916 { 0xffffe88f, "(-6001) Error Truncating File" },
1917 { 0xffffe88e, "(-6002) Error Parsing File Name" },
1918 { 0xffffe88d, "(-6003) Error Closing File" },
1919 { 0xffffe88c, "(-6004) Error Getting File Info" },
1920 { 0xffffe88b, "(-6005) Error Expanding File" },
1921 { 0xffffe88a, "(-6006) Error Getting Free Blocks" },
1922 { 0xffffe889, "(-6007) Error Checking File Existence" },
1923 { 0xffffe888, "(-6008) Error Deleting File" },
1924 { 0xffffe887, "(-6009) Error Renaming File" },
1925 { 0xffffe886, "(-6010) Error Initializing IO System" },
1926 { 0xffffe885, "(-6011) Error Flushing File" },
1927 { 0xffffe884, "(-6012) Error Setting Up for Read" },
1928 { 0xffffe883, "(-6013) Error Setting up for Write" },
1929 { 0xffffe882, "(-6014) Error Old View" },
1930 { 0xffffe881, "(-6015) Server in Skulk" },
1931 { 0xffffe880, "(-6016) Error Returning Partial Results" },
1932 { 0xffffe87f, "(-6017) No Such Schema" },
1933 { 0xffffe87e, "(-6018) Serial Number Mismatch" },
1934 { 0xffffe87d, "(-6019) Bad Referral Database Serial Number" },
1935 { 0xffffe87c, "(-6020) Bad Referral Serial Number" },
1936 { 0xffffe87b, "(-6021) Invalid File Sequence" },
1937 { 0xffffe87a, "(-6022) Error Referral Trans Gap" },
1938 { 0xffffe879, "(-6023) Bad Referral File Number" },
1939 { 0xffffe878, "(-6024) Referral File Not Found" },
1940 { 0xffffe877, "(-6025) Error Backup Active" },
1941 { 0xffffe876, "(-6026) Referral Device Full" },
1942 { 0xffffe875, "(-6027) Unsupported Version" },
1943 { 0xffffe874, "(-6028) Error Must Wait Checkpoint" },
1944 { 0xffffe873, "(-6029) Attribute Maintenance in Progress" },
1945 { 0xffffe872, "(-6030) Error Abort Transaction" },
1949 static const value_string ndps_credential_enum
[] = {
1958 static const value_string ndps_object_op_enum
[] = {
1962 { 3, "Delete Object" },
1966 static const value_string ndps_client_server_enum
[] = {
1969 { 2, "Client and Server" },
1973 static const value_string ndps_session_type_enum
[] = {
1982 static const value_string ndps_get_session_type_enum
[] = {
1990 static const value_string ndps_get_resman_session_type_enum
[] = {
1998 align_4(tvbuff_t
*tvb
, int aoffset
)
2000 if(tvb_length_remaining(tvb
, aoffset
) > 4 )
2008 * XXX - is there something in the packet to indicate whether a string
2009 * is ASCII or Unicode, or is it a characteristic of the attribute?
2010 * Currently, we use a heuristic - if the length is odd, we assume
2011 * it's ASCII (as it's a length in bytes, not characters), otherwise if
2012 * if the length is 2, we assume it's ASCII (as strings are null-
2013 * terminated, so a Unicode string would have to be at least 4 bytes),
2014 * otherwise if the second byte of the string is 0, we assume it's
2015 * Unicode (as an ASCII string would, in that case, have at least two
2016 * characters before the terminating NUL).
2019 ndps_string(tvbuff_t
* tvb
, int hfinfo
, proto_tree
*ndps_tree
, int offset
, char **stringval
)
2021 int foffset
= offset
;
2025 str_length
= tvb_get_ntohl(tvb
, foffset
);
2029 proto_tree_add_string(ndps_tree
, hfinfo
, tvb
, offset
, 4, "<Not Specified>");
2030 if (stringval
!= NULL
)
2031 *stringval
= wmem_strdup(wmem_packet_scope(), "");
2034 if (str_length
<= 2 || (str_length
& 0x01) || tvb_get_guint8(tvb
, foffset
+ 1) != 0) {
2038 string
= tvb_get_string(wmem_packet_scope(), tvb
, foffset
, str_length
);
2043 string
= tvb_get_unicode_string(wmem_packet_scope(), tvb
, foffset
, str_length
, ENC_LITTLE_ENDIAN
);
2045 foffset
+= str_length
;
2046 proto_tree_add_string(ndps_tree
, hfinfo
, tvb
, offset
, str_length
+ 4, string
);
2047 foffset
+= align_4(tvb
, foffset
);
2048 if (stringval
!= NULL
)
2049 *stringval
= string
;
2054 objectidentifier(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2057 const char *label
=NULL
;
2058 guint32 label_value
=0;
2061 gboolean found
=TRUE
;
2063 length
= tvb_get_ntohl(tvb
, foffset
);
2070 proto_tree_add_uint(ndps_tree
, hf_oid_struct_size
, tvb
, foffset
, 4, length
);
2076 label_value
= tvb_get_ntohl(tvb
, foffset
+5);
2077 label
= try_val_to_str(label_value
, object_ids_7
);
2080 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2084 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_7
, tvb
, foffset
, length
, "%s", label
);
2087 label_value
= tvb_get_ntohl(tvb
, foffset
+6);
2088 label
= try_val_to_str(label_value
, object_ids_8
);
2091 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2095 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_8
, tvb
, foffset
, length
, "%s", label
);
2098 label_value
= tvb_get_ntohl(tvb
, foffset
+7);
2099 label
= try_val_to_str(label_value
, object_ids_9
);
2102 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2106 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_9
, tvb
, foffset
, length
, "%s", label
);
2109 label_value
= tvb_get_ntohl(tvb
, foffset
+8);
2110 label
= try_val_to_str(label_value
, object_ids_10
);
2113 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2117 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_10
, tvb
, foffset
, length
, "%s", label
);
2120 label_value
= tvb_get_ntohl(tvb
, foffset
+9);
2121 label
= try_val_to_str(label_value
, object_ids_11
);
2124 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2128 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_11
, tvb
, foffset
, length
, "%s", label
);
2131 label_value
= tvb_get_ntohl(tvb
, foffset
+10);
2132 label
= try_val_to_str(label_value
, object_ids_12
);
2135 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2139 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_12
, tvb
, foffset
, length
, "%s", label
);
2142 label_value
= tvb_get_ntohl(tvb
, foffset
+11);
2143 label
= try_val_to_str(label_value
, object_ids_13
);
2146 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2150 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_13
, tvb
, foffset
, length
, "%s", label
);
2153 label_value
= tvb_get_ntohl(tvb
, foffset
+12);
2154 label
= try_val_to_str(label_value
, object_ids_14
);
2157 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2161 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_14
, tvb
, foffset
, length
, "%s", label
);
2164 label_value
= tvb_get_ntohl(tvb
, foffset
+13);
2165 label
= try_val_to_str(label_value
, object_ids_15
);
2168 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2172 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_15
, tvb
, foffset
, length
, "%s", label
);
2175 label_value
= tvb_get_ntohl(tvb
, foffset
+14);
2176 label
= try_val_to_str(label_value
, object_ids_16
);
2179 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2183 aitem
= proto_tree_add_none_format(ndps_tree
, hf_ndps_object_ids_16
, tvb
, foffset
, length
, "%s", label
);
2186 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, length
, "Unknown ID");
2193 label
= try_val_to_str(label_value
, object_ids_7
);
2197 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2198 proto_tree_add_item(atree
, hf_oid_asn1_type
, tvb
, foffset
, 1, ENC_BIG_ENDIAN
);
2200 length
= tvb_get_guint8(tvb
, foffset
);
2202 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
2203 proto_tree_add_item(atree
, hf_ndps_oid
, tvb
, foffset
, length
, ENC_NA
);
2210 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
2216 length
= tvb_get_guint8(tvb
, foffset
);
2218 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
2222 global_attribute_name
= label
;
2223 /* XXX - There's probably a better way to handle this */
2224 if ((int) (foffset
+(length
%2)) < 0) {
2225 THROW(ReportedBoundsError
);
2227 return foffset
+(length
%2);
2231 name_or_id(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2233 guint32 name_or_id_val
;
2235 name_or_id_val
= tvb_get_ntohl(tvb
, foffset
);
2236 proto_tree_add_uint(ndps_tree
, hf_ndps_nameorid
, tvb
, foffset
, 4, name_or_id_val
);
2238 switch (name_or_id_val
)
2240 case 1: /* Global */
2241 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
2245 foffset
= ndps_string(tvb
, hf_ndps_local_object_name
, ndps_tree
, foffset
, NULL
);
2248 foffset
+= align_4(tvb
, foffset
);
2253 qualifiedname(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2255 guint32 qualified_name_type
=0;
2257 qualified_name_type
= tvb_get_ntohl(tvb
, foffset
);
2258 proto_tree_add_uint(ndps_tree
, hf_ndps_qualified_name
, tvb
, foffset
, 4, qualified_name_type
);
2260 if (qualified_name_type
!= 0) {
2261 if (qualified_name_type
== 1) {
2262 foffset
= ndps_string(tvb
, hf_ndps_printer_name
, ndps_tree
, foffset
, NULL
);
2266 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
2267 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
2274 objectidentification(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2276 guint32 object_type
=0;
2280 object_type
= tvb_get_ntohl(tvb
, foffset
);
2281 aitem
= proto_tree_add_item(ndps_tree
, hf_obj_id_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2282 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2286 case 0: /* Printer Contained Object ID */
2287 foffset
= ndps_string(tvb
, hf_ndps_printer_name
, atree
, foffset
, NULL
);
2288 proto_tree_add_item(atree
, hf_ndps_object
, tvb
, foffset
,
2292 case 1: /* Document Identifier */
2293 foffset
= ndps_string(tvb
, hf_ndps_printer_name
, atree
, foffset
, NULL
);
2294 proto_tree_add_item(atree
, hf_ndps_document_number
, tvb
, foffset
,
2298 case 2: /* Object Identifier */
2299 foffset
= objectidentifier(tvb
, atree
, foffset
);
2301 case 3: /* Object Name */
2302 foffset
= ndps_string(tvb
, hf_object_name
, atree
, foffset
, NULL
);
2303 if (foffset
> tvb_length_remaining(tvb
, foffset
)) {
2306 foffset
= name_or_id(tvb
, atree
, foffset
);
2308 case 4: /* Name or Object ID */
2309 foffset
= name_or_id(tvb
, atree
, foffset
);
2311 case 5: /* Simple Name */
2312 foffset
= ndps_string(tvb
, hf_object_name
, atree
, foffset
, NULL
);
2314 case 6: /* Printer Configuration Object ID */
2315 foffset
= ndps_string(tvb
, hf_ndps_printer_name
, atree
, foffset
, NULL
);
2317 case 7: /* Qualified Name */
2318 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
2320 case 8: /* Event Object ID */
2321 foffset
= ndps_string(tvb
, hf_object_name
, atree
, foffset
, NULL
);
2322 foffset
= objectidentifier(tvb
, atree
, foffset
);
2323 proto_tree_add_item(atree
, hf_ndps_event_type
, tvb
, foffset
,
2333 print_address(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2335 guint32 addr_type
=0;
2338 addr_type
= tvb_get_ntohl(tvb
, foffset
);
2339 proto_tree_add_uint(ndps_tree
, hf_ndps_address
, tvb
, foffset
, 4, addr_type
);
2341 addr_len
= tvb_get_ntohl(tvb
, foffset
);
2342 proto_tree_add_item(ndps_tree
, hf_address_len
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2345 * XXX - are these address types the same as the NDS_PTYPE_ #defines
2346 * in packet-ncp2222.inc?
2348 * XXX - should this code - and the code in packet-ncp2222.inc to
2349 * dissect addresses - check the length for the types it supports?
2354 proto_tree_add_item(ndps_tree
, hf_ndps_net
, tvb
, foffset
, 4, ENC_NA
);
2355 proto_tree_add_item(ndps_tree
, hf_ndps_node
, tvb
, foffset
+4, 6, ENC_NA
);
2356 proto_tree_add_item(ndps_tree
, hf_ndps_socket
, tvb
, foffset
+10, 2, ENC_BIG_ENDIAN
);
2359 proto_tree_add_item(ndps_tree
, hf_ndps_port
, tvb
, foffset
, 2, ENC_BIG_ENDIAN
);
2360 proto_tree_add_item(ndps_tree
, hf_ndps_ip
, tvb
, foffset
+2, 4, ENC_BIG_ENDIAN
);
2365 tvb_ensure_bytes_exist(tvb
, foffset
, addr_len
);
2366 foffset
+= addr_len
;
2367 return foffset
+(addr_len
%4);
2371 address_item(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2373 guint32 addr_type
=0;
2375 addr_type
= tvb_get_ntohl(tvb
, foffset
);
2376 proto_tree_add_uint(ndps_tree
, hf_address_type
, tvb
, foffset
, 4, addr_type
);
2388 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
2395 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
2398 proto_tree_add_item(ndps_tree
, hf_ndps_attrib_boolean
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2402 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2406 foffset
= print_address(tvb
, ndps_tree
, foffset
);
2411 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
2418 credentials(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2420 guint32 cred_type
=0;
2422 guint32 number_of_items
;
2427 cred_type
= tvb_get_ntohl(tvb
, foffset
);
2428 proto_tree_add_item(ndps_tree
, hf_ndps_cred_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2433 foffset
= ndps_string(tvb
, hf_ndps_user_name
, ndps_tree
, foffset
, NULL
);
2434 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
2435 proto_tree_add_uint(ndps_tree
, hf_ndps_num_passwords
, tvb
, foffset
, 4, number_of_items
);
2437 for (ii
= 0; ii
< number_of_items
; ii
++ )
2439 if (ii
>= NDPS_MAX_ITEMS
) {
2440 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2443 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Password %d", ii
+1);
2444 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2445 length
= tvb_get_ntohl(tvb
, foffset
);
2449 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
2450 proto_tree_add_item(atree
, hf_ndps_password
, tvb
, foffset
, length
, ENC_NA
);
2452 proto_item_set_end(aitem
, tvb
, foffset
);
2457 length
= tvb_get_ntohl(tvb
, foffset
);
2461 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
2462 proto_tree_add_item(ndps_tree
, hf_ndps_certified
, tvb
, foffset
, length
, ENC_NA
);
2467 foffset
= ndps_string(tvb
, hf_ndps_server_name
, ndps_tree
, foffset
, NULL
);
2469 proto_tree_add_item(ndps_tree
, hf_ndps_connection
, tvb
, foffset
, 2, ENC_BIG_ENDIAN
);
2473 length
=tvb_get_ntohl(tvb
, foffset
);
2474 foffset
= ndps_string(tvb
, hf_ndps_server_name
, ndps_tree
, foffset
, NULL
);
2479 if (tvb_get_ntohs(tvb
, foffset
)==0) /* NDPS 1.0 */
2482 if (tvb_get_ntohs(tvb
, foffset
)==0) /* NDPS 1.1 */
2487 proto_tree_add_item(ndps_tree
, hf_ndps_connection
, tvb
, foffset
, 2, ENC_BIG_ENDIAN
);
2489 foffset
= ndps_string(tvb
, hf_ndps_user_name
, ndps_tree
, foffset
, NULL
);
2492 foffset
= ndps_string(tvb
, hf_ndps_server_name
, ndps_tree
, foffset
, NULL
);
2494 proto_tree_add_item(ndps_tree
, hf_ndps_connection
, tvb
, foffset
, 2, ENC_BIG_ENDIAN
);
2496 foffset
= ndps_string(tvb
, hf_ndps_user_name
, ndps_tree
, foffset
, NULL
);
2497 foffset
+= 8; /* Don't know what these 8 bytes signify */
2498 proto_tree_add_item(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2499 foffset
+= 4; /* XXX - what does this count? */
2500 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
2501 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
2511 event_object_set(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2513 guint32 number_of_items
;
2514 guint32 number_of_items2
;
2517 guint32 object_identifier
;
2525 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Event");
2526 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2527 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2528 proto_tree_add_uint(atree
, hf_ndps_num_events
, tvb
, foffset
, 4, number_of_items
);
2530 for (ii
= 0; ii
< number_of_items
; ii
++ )
2532 if (ii
>= NDPS_MAX_ITEMS
) {
2533 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2536 bitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Event %u", ii
+1);
2537 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
2538 proto_tree_add_item(btree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2540 foffset
= objectidentifier(tvb
, btree
, foffset
);
2541 foffset
+= align_4(tvb
, foffset
);
2542 foffset
= objectidentification(tvb
, btree
, foffset
);
2543 foffset
+= align_4(tvb
, foffset
);
2544 proto_tree_add_item(btree
, hf_ndps_object_op
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2546 object_identifier
= tvb_get_ntohl(tvb
, foffset
);
2547 proto_tree_add_uint(btree
, hf_ndps_event_object_identifier
, tvb
, foffset
, 4, object_identifier
);
2549 switch (object_identifier
)
2552 foffset
= objectidentifier(tvb
, btree
, foffset
);
2553 foffset
+= align_4(tvb
, foffset
);
2557 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
2558 proto_tree_add_uint(btree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items2
);
2560 for (jj
= 0; jj
< number_of_items2
; jj
++ )
2562 if (jj
>= NDPS_MAX_ITEMS
) {
2563 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
2566 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Item %u", jj
+1);
2567 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
2568 foffset
= objectidentifier(tvb
, ctree
, foffset
);
2569 foffset
+= align_4(tvb
, foffset
);
2570 proto_item_set_end(citem
, tvb
, foffset
);
2574 proto_item_set_end(bitem
, tvb
, foffset
);
2576 proto_item_set_end(aitem
, tvb
, foffset
);
2582 cardinal_seq(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2584 guint32 number_of_items
;
2590 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2591 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
2593 for (ii
= 0; ii
< number_of_items
; ii
++ )
2595 if (ii
>= NDPS_MAX_ITEMS
) {
2596 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2599 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Cardinal %u", ii
+1);
2600 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2601 length
= tvb_get_ntohl(tvb
, foffset
);
2605 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
2607 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
2609 foffset
+= (length
%2);
2610 if ((int) foffset
<= 0)
2611 THROW(ReportedBoundsError
);
2612 proto_item_set_end(aitem
, tvb
, foffset
);
2619 server_entry(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2622 guint32 number_of_items
;
2630 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Server Info");
2631 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2632 foffset
= ndps_string(tvb
, hf_ndps_server_name
, ndps_tree
, foffset
, &server_name
);
2633 proto_item_append_text(aitem
, ": %s", format_text(server_name
, strlen(server_name
)));
2634 proto_tree_add_item(atree
, hf_ndps_server_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2636 foffset
= print_address(tvb
, atree
, foffset
);
2637 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2638 proto_tree_add_uint(atree
, hf_ndps_num_servers
, tvb
, foffset
, 4, number_of_items
);
2640 for (ii
= 0; ii
< number_of_items
; ii
++ )
2642 if (ii
>= NDPS_MAX_ITEMS
) {
2643 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
2646 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Info %u", ii
+1);
2647 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
2648 data_type
= tvb_get_ntohl(tvb
, foffset
);
2649 proto_tree_add_item(btree
, hf_ndps_data_item_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2654 proto_tree_add_item(btree
, hf_info_int
, tvb
, foffset
, 1, ENC_BIG_ENDIAN
);
2658 proto_tree_add_item(btree
, hf_info_int16
, tvb
, foffset
, 2, ENC_BIG_ENDIAN
);
2662 proto_tree_add_item(btree
, hf_info_int32
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2665 case 3: /* Boolean */
2666 proto_tree_add_item(btree
, hf_info_boolean
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2669 case 4: /* String */
2671 foffset
= ndps_string(tvb
, hf_info_string
, btree
, foffset
, NULL
);
2676 proto_item_set_end(bitem
, tvb
, foffset
);
2678 proto_item_set_end(aitem
, tvb
, foffset
);
2684 attribute_value(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
2688 guint32 number_of_items
;
2689 guint32 number_of_items2
;
2690 guint32 attribute_type
;
2691 guint32 integer_or_oid
;
2692 guint32 event_object_type
;
2693 guint32 ignored_type
;
2694 guint32 resource_type
;
2695 guint32 identifier_type
;
2696 guint32 criterion_type
;
2697 guint32 card_enum_time
;
2699 guint32 doc_content
;
2701 guint32 medium_size
;
2703 guint32 colorant_set
;
2709 guint32 label_value
;
2715 if (global_attribute_name
==NULL
)
2718 label
= try_val_to_str(label_value
, object_ids_7
);
2719 global_attribute_name
= label
;
2721 attribute_type
= tvb_get_ntohl(tvb
, foffset
);
2724 proto_tree_add_item(ndps_tree
, hf_ndps_obj_attribute_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2727 switch(attribute_type
)
2730 proto_tree_add_item(ndps_tree
, hf_ndps_data
, tvb
, foffset
+4, tvb_get_ntohl(tvb
, foffset
), ENC_NA
);
2733 case 2: /* Descriptive Name */
2734 case 3: /* Descriptor */
2735 case 6: /* Simple Name */
2736 case 40: /* Distinguished Name*/
2737 case 50: /* Font Reference */
2738 case 58: /* Locale */
2739 case 102: /* File Path */
2740 case 103: /* Uniform Resource Identifier */
2741 case 108: /* Extended Resource Identifier */
2742 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
2744 case 4: /* Message */
2745 case 5: /* Error Message */
2746 case 38: /* Name or OID */
2747 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
2749 case 39: /* Name or OID Seq */
2750 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2751 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
2753 for (ii
= 0; ii
< number_of_items
; ii
++ )
2755 if (ii
>= NDPS_MAX_ITEMS
) {
2756 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2759 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %d", ii
+1);
2760 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2761 foffset
= name_or_id(tvb
, atree
, foffset
);
2762 proto_item_set_end(aitem
, tvb
, foffset
);
2765 case 7: /* Distinguished Name String*/
2766 case 79: /* File Reference */
2767 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
2768 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
2770 case 8: /* Distinguished Name String Seq */
2771 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2772 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
2774 for (ii
= 0; ii
< number_of_items
; ii
++ )
2776 if (ii
>= NDPS_MAX_ITEMS
) {
2777 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2780 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Name %u", ii
+1);
2781 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2782 foffset
= ndps_string(tvb
, hf_object_name
, atree
, foffset
, NULL
);
2783 foffset
= name_or_id(tvb
, atree
, foffset
);
2784 proto_item_set_end(aitem
, tvb
, foffset
);
2787 case 9: /* Delta Time */
2789 case 11: /* Integer */
2790 case 13: /* Cardinal */
2791 case 15: /* Positive Integer */
2792 case 18: /* Maximum Integer */
2793 case 19: /* Minimum Integer */
2794 case 35: /* Percent */
2795 case 57: /* Job Priority */
2796 case 72: /* Sides */
2797 case 95: /* Enumeration */
2798 if (global_attribute_name
!= NULL
&&
2799 strcmp(global_attribute_name
,"(Novell) Attribute PRINTER SECURITY LEVEL")==0)
2801 proto_tree_add_item(ndps_tree
, hf_print_security
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2806 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2810 case 12: /* Integer Seq */
2811 case 14: /* Cardinal Seq */
2812 length
= tvb_get_ntohl(tvb
, foffset
);
2816 proto_tree_add_item(ndps_tree
, hf_info_int32
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
2818 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
2821 case 16: /* Integer Range */
2822 case 17: /* Cardinal Range */
2823 proto_tree_add_item(ndps_tree
, hf_ndps_lower_range
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2825 proto_tree_add_item(ndps_tree
, hf_ndps_upper_range
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2828 case 20: /* Integer 64 */
2829 case 22: /* Cardinal 64 */
2830 case 24: /* Positive Integer 64 */
2831 case 31: /* Non-Negative Real */
2833 proto_tree_add_item(ndps_tree
, hf_ndps_n64
, tvb
, foffset
, 8, ENC_NA
);
2836 case 21: /* Integer 64 Seq */
2837 case 23: /* Cardinal 64 Seq */
2838 case 30: /* Real Seq */
2839 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2840 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
2842 for (ii
= 0; ii
< number_of_items
; ii
++ )
2844 if (ii
>= NDPS_MAX_ITEMS
) {
2845 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2848 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %u", ii
+1);
2849 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2850 proto_tree_add_item(atree
, hf_ndps_n64
, tvb
, foffset
, 8, ENC_NA
);
2852 proto_item_set_end(aitem
, tvb
, foffset
);
2855 case 25: /* Integer 64 Range */
2856 case 26: /* Cardinal 64 Range */
2857 case 32: /* Real Range */
2858 case 33: /* Non-Negative Real Range */
2859 proto_tree_add_item(ndps_tree
, hf_ndps_lower_range_n64
, tvb
, foffset
, 8, ENC_NA
);
2861 proto_tree_add_item(ndps_tree
, hf_ndps_upper_range_n64
, tvb
, foffset
, 8, ENC_NA
);
2864 case 27: /* Maximum Integer 64 */
2865 proto_tree_add_item(ndps_tree
, hf_ndps_lower_range_n64
, tvb
, foffset
, 8, ENC_NA
);
2868 case 28: /* Minimum Integer 64 */
2869 proto_tree_add_item(ndps_tree
, hf_ndps_upper_range_n64
, tvb
, foffset
, 8, ENC_NA
);
2872 case 34: /* Boolean */
2873 proto_tree_add_item(ndps_tree
, hf_ndps_attrib_boolean
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2876 case 36: /* Object Identifier */
2877 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
2879 case 37: /* Object Identifier Seq */
2880 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2881 proto_tree_add_uint(ndps_tree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
2883 for (ii
= 0; ii
< number_of_items
; ii
++ )
2885 if (ii
>= NDPS_MAX_ITEMS
) {
2886 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2889 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object %d", ii
+1);
2890 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2891 foffset
= objectidentifier(tvb
, atree
, foffset
);
2892 proto_item_set_end(aitem
, tvb
, foffset
);
2895 case 41: /* Relative Distinguished Name Seq */
2896 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2897 proto_tree_add_uint(ndps_tree
, hf_ndps_num_names
, tvb
, foffset
, 4, number_of_items
);
2899 for (ii
= 0; ii
< number_of_items
; ii
++ )
2901 if (ii
>= NDPS_MAX_ITEMS
) {
2902 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2905 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Name %u", ii
+1);
2906 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2907 foffset
= ndps_string(tvb
, hf_object_name
, atree
, foffset
, NULL
);
2908 proto_item_set_end(aitem
, tvb
, foffset
);
2911 case 42: /* Realization */
2912 proto_tree_add_item(ndps_tree
, hf_ndps_realization
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2915 case 43: /* Medium Dimensions */
2916 proto_tree_add_item(ndps_tree
, hf_ndps_xdimension_n64
, tvb
, foffset
, 8, ENC_NA
);
2918 proto_tree_add_item(ndps_tree
, hf_ndps_ydimension_n64
, tvb
, foffset
, 8, ENC_NA
);
2921 case 44: /* Dimension */
2922 dimension
= tvb_get_ntohl(tvb
, foffset
);
2923 proto_tree_add_uint(ndps_tree
, hf_ndps_dim_value
, tvb
, foffset
, 4, dimension
);
2925 if (dimension
== 0) {
2926 proto_tree_add_item(ndps_tree
, hf_ndps_n64
, tvb
, foffset
, 8, ENC_NA
);
2931 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
2933 proto_tree_add_item(ndps_tree
, hf_ndps_dim_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2935 proto_tree_add_item(ndps_tree
, hf_ndps_n64
, tvb
, foffset
, 8, ENC_NA
);
2938 case 45: /* XY Dimensions */
2939 dimension
= tvb_get_ntohl(tvb
, foffset
);
2940 proto_tree_add_uint(ndps_tree
, hf_ndps_xydim_value
, tvb
, foffset
, 4, dimension
);
2942 if (dimension
== 1) {
2943 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
2947 proto_tree_add_item(ndps_tree
, hf_ndps_xdimension_n64
, tvb
, foffset
, 8, ENC_NA
);
2949 proto_tree_add_item(ndps_tree
, hf_ndps_ydimension_n64
, tvb
, foffset
, 8, ENC_NA
);
2952 proto_tree_add_item(ndps_tree
, hf_ndps_dim_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2954 proto_tree_add_item(ndps_tree
, hf_ndps_n64
, tvb
, foffset
, 8, ENC_NA
);
2957 case 46: /* Locations */
2958 location
= tvb_get_ntohl(tvb
, foffset
);
2959 proto_tree_add_uint(ndps_tree
, hf_ndps_location_value
, tvb
, foffset
, 4, location
);
2961 if (location
== 0) {
2962 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2963 proto_tree_add_uint(ndps_tree
, hf_ndps_num_locations
, tvb
, foffset
, 4, number_of_items
);
2965 for (ii
= 0; ii
< number_of_items
; ii
++ )
2967 if (ii
>= NDPS_MAX_ITEMS
) {
2968 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
2971 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Location %u", ii
+1);
2972 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
2973 proto_tree_add_item(atree
, hf_ndps_n64
, tvb
, foffset
, 8, ENC_NA
);
2975 proto_item_set_end(aitem
, tvb
, foffset
);
2980 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
2982 proto_tree_add_item(ndps_tree
, hf_ndps_dim_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
2984 proto_tree_add_item(ndps_tree
, hf_ndps_n64
, tvb
, foffset
, 8, ENC_NA
);
2988 proto_tree_add_item(ndps_tree
, hf_ndps_xmin_n64
, tvb
, foffset
, 8, ENC_NA
);
2990 proto_tree_add_item(ndps_tree
, hf_ndps_xmax_n64
, tvb
, foffset
, 8, ENC_NA
);
2992 proto_tree_add_item(ndps_tree
, hf_ndps_ymin_n64
, tvb
, foffset
, 8, ENC_NA
);
2994 proto_tree_add_item(ndps_tree
, hf_ndps_ymax_n64
, tvb
, foffset
, 8, ENC_NA
);
2997 case 48: /* Area Seq */
2998 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
2999 proto_tree_add_uint(ndps_tree
, hf_ndps_num_areas
, tvb
, foffset
, 4, number_of_items
);
3001 for (ii
= 0; ii
< number_of_items
; ii
++ )
3003 if (ii
>= NDPS_MAX_ITEMS
) {
3004 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3007 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Area %u", ii
+1);
3008 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3009 proto_tree_add_item(atree
, hf_ndps_xmin_n64
, tvb
, foffset
, 8, ENC_NA
);
3011 proto_tree_add_item(atree
, hf_ndps_xmax_n64
, tvb
, foffset
, 8, ENC_NA
);
3013 proto_tree_add_item(atree
, hf_ndps_ymin_n64
, tvb
, foffset
, 8, ENC_NA
);
3015 proto_tree_add_item(atree
, hf_ndps_ymax_n64
, tvb
, foffset
, 8, ENC_NA
);
3017 proto_item_set_end(aitem
, tvb
, foffset
);
3021 proto_tree_add_item(ndps_tree
, hf_ndps_edge_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3024 case 51: /* Cardinal or OID */
3025 cardinal
= tvb_get_ntohl(tvb
, foffset
);
3026 proto_tree_add_uint(ndps_tree
, hf_ndps_cardinal_or_oid
, tvb
, foffset
, 4, cardinal
);
3029 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3034 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3037 case 52: /* OID Cardinal Map */
3038 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3039 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3042 case 53: /* Cardinal or Name or OID */
3043 cardinal
= tvb_get_ntohl(tvb
, foffset
);
3044 proto_tree_add_uint(ndps_tree
, hf_ndps_cardinal_name_or_oid
, tvb
, foffset
, 4, cardinal
);
3047 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3052 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3055 case 54: /* Positive Integer or OID */
3056 integer_or_oid
= tvb_get_ntohl(tvb
, foffset
);
3057 proto_tree_add_uint(ndps_tree
, hf_ndps_integer_or_oid
, tvb
, foffset
, 4, integer_or_oid
);
3059 if (integer_or_oid
==0) {
3060 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3064 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3068 case 55: /* Event Handling Profile */
3069 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3071 proto_tree_add_item(ndps_tree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3073 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3074 length
= tvb_get_ntohl(tvb
, foffset
);
3078 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
3081 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3083 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3085 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3086 proto_tree_add_uint(ndps_tree
, hf_ndps_num_address_items
, tvb
, foffset
, 4, number_of_items
);
3088 for (ii
= 0; ii
< number_of_items
; ii
++ )
3090 if (ii
>= NDPS_MAX_ITEMS
) {
3091 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3094 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Address Item %u", ii
+1);
3095 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3096 foffset
= address_item(tvb
, atree
, foffset
);
3097 proto_item_set_end(aitem
, tvb
, foffset
);
3099 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3100 proto_tree_add_uint(ndps_tree
, hf_ndps_num_events
, tvb
, foffset
, 4, number_of_items
);
3102 for (ii
= 0; ii
< number_of_items
; ii
++ )
3104 if (ii
>= NDPS_MAX_ITEMS
) {
3105 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3108 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Event %u", ii
+1);
3109 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3110 proto_tree_add_item(atree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3112 foffset
= objectidentifier(tvb
, atree
, foffset
);
3113 foffset
+= align_4(tvb
, foffset
);
3114 foffset
= objectidentification(tvb
, atree
, foffset
);
3115 proto_tree_add_item(atree
, hf_ndps_object_op
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3117 event_object_type
= tvb_get_ntohl(tvb
, foffset
);
3118 proto_tree_add_uint(atree
, hf_ndps_event_object_identifier
, tvb
, foffset
, 4, event_object_type
);
3120 switch (event_object_type
)
3123 /* Number of Objects */
3124 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
3125 proto_tree_add_uint(atree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items2
);
3127 for (jj
= 0; jj
< number_of_items2
; jj
++ )
3129 if (jj
>= NDPS_MAX_ITEMS
) {
3130 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
3133 foffset
= objectidentifier(tvb
, atree
, foffset
);
3139 foffset
= objectidentifier(tvb
, atree
, foffset
);
3143 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
3144 proto_tree_add_uint(atree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items2
);
3146 for (jj
= 0; jj
< number_of_items2
; jj
++ )
3148 if (jj
>= NDPS_MAX_ITEMS
) {
3149 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
3152 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Object %u", jj
+1);
3153 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
3154 foffset
= objectidentifier(tvb
, btree
, foffset
);
3155 proto_item_set_end(bitem
, tvb
, foffset
);
3159 proto_item_set_end(aitem
, tvb
, foffset
);
3162 case 56: /* Octet String */
3163 case 63: /* Job Password */
3164 case 66: /* Print Checkpoint */
3165 length
= tvb_get_ntohl(tvb
, foffset
);
3166 ndps_string(tvb
, hf_info_string
, ndps_tree
, foffset
, NULL
);
3167 foffset
+= length
+2;
3168 foffset
+= align_4(tvb
, foffset
);
3170 case 59: /* Method Delivery Address */
3171 proto_tree_add_item(ndps_tree
, hf_ndps_delivery_add_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3172 event_object_type
= tvb_get_ntohl(tvb
, foffset
);
3174 switch(event_object_type
)
3176 case 0: /*MHS ADDR*/
3177 case 1: /*DISTINGUISHED_NAME*/
3179 case 3: /*OCTET_STRING*/
3180 foffset
= ndps_string(tvb
, hf_info_string
, ndps_tree
, foffset
, NULL
);
3182 case 4: /*DIST_NAME_STRING*/
3183 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
3184 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3186 case 5: /*RPC_ADDRESS*/
3187 case 6: /*QUALIFIED_NAME*/
3188 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3189 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3195 case 60: /* Object Identification */
3196 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
3198 case 61: /* Results Profile */
3199 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3200 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3201 foffset
= address_item(tvb
, ndps_tree
, foffset
);
3202 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3204 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3206 case 62: /* Criteria */
3207 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3208 criterion_type
= tvb_get_ntohl(tvb
, foffset
);
3209 proto_tree_add_uint(ndps_tree
, hf_ndps_criterion_type
, tvb
, foffset
, 4, criterion_type
);
3211 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3214 case 64: /* Job Level */
3215 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3216 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3219 case 65: /* Job Categories */
3220 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3221 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3222 proto_tree_add_uint(ndps_tree
, hf_ndps_num_job_categories
, tvb
, foffset
, 4, number_of_items
);
3224 for (ii
= 0; ii
< number_of_items
; ii
++ )
3226 if (ii
>= NDPS_MAX_ITEMS
) {
3227 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3230 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job %u", ii
+1);
3231 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3232 length
= tvb_get_ntohl(tvb
, foffset
);
3236 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
3239 foffset
+= (length
%2);
3240 if ((int) foffset
<= 0)
3241 THROW(ReportedBoundsError
);
3242 proto_item_set_end(aitem
, tvb
, foffset
);
3245 case 67: /* Ignored Attribute */
3246 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3248 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3249 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3250 proto_tree_add_uint(ndps_tree
, hf_ndps_num_ignored_attributes
, tvb
, foffset
, 4, number_of_items
);
3252 for (ii
= 0; ii
< number_of_items
; ii
++ )
3254 if (ii
>= NDPS_MAX_ITEMS
) {
3255 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3258 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Ignored Attribute %u", ii
+1);
3259 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3260 ignored_type
= tvb_get_ntohl(tvb
, foffset
);
3261 proto_tree_add_uint(atree
, hf_ndps_ignored_type
, tvb
, foffset
, 4, ignored_type
);
3263 if (ignored_type
== 38)
3265 foffset
= name_or_id(tvb
, atree
, foffset
);
3269 foffset
= objectidentifier(tvb
, atree
, foffset
);
3271 proto_item_set_end(aitem
, tvb
, foffset
);
3274 case 68: /* Resource */
3275 resource_type
= tvb_get_ntohl(tvb
, foffset
);
3276 proto_tree_add_uint(ndps_tree
, hf_ndps_resource_type
, tvb
, foffset
, 4, resource_type
);
3278 if (resource_type
== 0)
3280 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3284 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
3287 case 69: /* Medium Substitution */
3288 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3289 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3291 case 70: /* Font Substitution */
3292 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
3293 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
3295 case 71: /* Resource Context Seq */
3296 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3297 proto_tree_add_uint(ndps_tree
, hf_ndps_num_resources
, tvb
, foffset
, 4, number_of_items
);
3299 for (ii
= 0; ii
< number_of_items
; ii
++ )
3301 if (ii
>= NDPS_MAX_ITEMS
) {
3302 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3305 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Resource %u", ii
+1);
3306 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3307 resource_type
= tvb_get_ntohl(tvb
, foffset
);
3308 proto_tree_add_uint(atree
, hf_ndps_resource_type
, tvb
, foffset
, 4, resource_type
);
3310 if (resource_type
== 0)
3312 foffset
= name_or_id(tvb
, atree
, foffset
);
3316 foffset
= ndps_string(tvb
, hf_ndps_tree
, atree
, foffset
, NULL
);
3318 proto_item_set_end(aitem
, tvb
, foffset
);
3321 case 73: /* Page Select Seq */
3322 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3323 proto_tree_add_uint(ndps_tree
, hf_ndps_num_page_selects
, tvb
, foffset
, 4, number_of_items
);
3325 for (ii
= 0; ii
< number_of_items
; ii
++ )
3327 if (ii
>= NDPS_MAX_ITEMS
) {
3328 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3331 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Page Select %u", ii
+1);
3332 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3333 proto_tree_add_item(atree
, hf_ndps_page_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3335 identifier_type
= tvb_get_ntohl(tvb
, foffset
);
3336 proto_tree_add_uint(atree
, hf_ndps_identifier_type
, tvb
, foffset
, 4, identifier_type
);
3338 if (identifier_type
== 0)
3340 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3343 if (identifier_type
== 1)
3345 foffset
= ndps_string(tvb
, hf_ndps_tree
, atree
, foffset
, NULL
);
3347 if (identifier_type
== 2)
3349 foffset
= name_or_id(tvb
, atree
, foffset
);
3351 proto_tree_add_item(atree
, hf_ndps_page_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3353 identifier_type
= tvb_get_ntohl(tvb
, foffset
);
3354 proto_tree_add_uint(atree
, hf_ndps_identifier_type
, tvb
, foffset
, 4, identifier_type
);
3356 if (identifier_type
== 0)
3358 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3361 if (identifier_type
== 1)
3363 foffset
= ndps_string(tvb
, hf_ndps_tree
, atree
, foffset
, NULL
);
3365 if (identifier_type
== 2)
3367 foffset
= name_or_id(tvb
, atree
, foffset
);
3369 proto_item_set_end(aitem
, tvb
, foffset
);
3372 case 74: /* Page Media Select */
3373 media_type
= tvb_get_ntohl(tvb
, foffset
);
3374 proto_tree_add_uint(ndps_tree
, hf_ndps_media_type
, tvb
, foffset
, 4, media_type
);
3376 if (media_type
== 0)
3378 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3382 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
3383 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3384 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
3386 for (ii
= 0; ii
< number_of_items
; ii
++ )
3388 if (ii
>= NDPS_MAX_ITEMS
) {
3389 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3392 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %u", ii
+1);
3393 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3394 proto_tree_add_item(atree
, hf_ndps_page_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3396 identifier_type
= tvb_get_ntohl(tvb
, foffset
);
3397 proto_tree_add_uint(atree
, hf_ndps_identifier_type
, tvb
, foffset
, 4, identifier_type
);
3399 if (identifier_type
== 0)
3401 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3404 if (identifier_type
== 1)
3406 foffset
= ndps_string(tvb
, hf_ndps_tree
, atree
, foffset
, NULL
);
3408 if (identifier_type
== 2)
3410 foffset
= name_or_id(tvb
, atree
, foffset
);
3412 proto_item_set_end(aitem
, tvb
, foffset
);
3416 case 75: /* Document Content */
3417 doc_content
= tvb_get_ntohl(tvb
, foffset
);
3418 proto_tree_add_uint(ndps_tree
, hf_ndps_doc_content
, tvb
, foffset
, 4, doc_content
);
3420 if (doc_content
== 0)
3422 length
= tvb_get_ntohl(tvb
, foffset
);
3426 proto_tree_add_item(ndps_tree
, hf_ndps_octet_string
, tvb
, foffset
, length
, ENC_NA
);
3429 foffset
+= (length
%2);
3430 if ((int) foffset
<= 0)
3431 THROW(ReportedBoundsError
);
3435 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
3436 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3439 case 76: /* Page Size */
3440 page_size
= tvb_get_ntohl(tvb
, foffset
);
3441 proto_tree_add_uint(ndps_tree
, hf_ndps_page_size
, tvb
, foffset
, 4, page_size
);
3445 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3449 proto_tree_add_item(ndps_tree
, hf_ndps_xdimension_n64
, tvb
, foffset
, 8, ENC_NA
);
3451 proto_tree_add_item(ndps_tree
, hf_ndps_ydimension_n64
, tvb
, foffset
, 8, ENC_NA
);
3455 case 77: /* Presentation Direction */
3456 proto_tree_add_item(ndps_tree
, hf_ndps_direction
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3459 case 78: /* Page Order */
3460 proto_tree_add_item(ndps_tree
, hf_ndps_page_order
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3463 case 80: /* Medium Source Size */
3464 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3465 medium_size
= tvb_get_ntohl(tvb
, foffset
);
3466 proto_tree_add_uint(ndps_tree
, hf_ndps_medium_size
, tvb
, foffset
, 4, medium_size
);
3468 if (medium_size
== 0)
3470 page_size
= tvb_get_ntohl(tvb
, foffset
);
3471 proto_tree_add_uint(ndps_tree
, hf_ndps_page_size
, tvb
, foffset
, 4, page_size
);
3475 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3479 proto_tree_add_item(ndps_tree
, hf_ndps_xdimension_n64
, tvb
, foffset
, 8, ENC_NA
);
3481 proto_tree_add_item(ndps_tree
, hf_ndps_ydimension_n64
, tvb
, foffset
, 8, ENC_NA
);
3484 proto_tree_add_item(ndps_tree
, hf_ndps_long_edge_feeds
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3486 proto_tree_add_item(ndps_tree
, hf_ndps_xmin_n64
, tvb
, foffset
, 8, ENC_NA
);
3488 proto_tree_add_item(ndps_tree
, hf_ndps_xmax_n64
, tvb
, foffset
, 8, ENC_NA
);
3490 proto_tree_add_item(ndps_tree
, hf_ndps_ymin_n64
, tvb
, foffset
, 8, ENC_NA
);
3492 proto_tree_add_item(ndps_tree
, hf_ndps_ymax_n64
, tvb
, foffset
, 8, ENC_NA
);
3497 proto_tree_add_item(ndps_tree
, hf_ndps_lower_range_n64
, tvb
, foffset
, 8, ENC_NA
);
3499 proto_tree_add_item(ndps_tree
, hf_ndps_upper_range_n64
, tvb
, foffset
, 8, ENC_NA
);
3501 proto_tree_add_item(ndps_tree
, hf_ndps_inc_across_feed
, tvb
, foffset
, 8, ENC_NA
);
3503 proto_tree_add_item(ndps_tree
, hf_ndps_lower_range_n64
, tvb
, foffset
, 8, ENC_NA
);
3505 proto_tree_add_item(ndps_tree
, hf_ndps_upper_range_n64
, tvb
, foffset
, 8, ENC_NA
);
3507 proto_tree_add_item(ndps_tree
, hf_ndps_size_inc_in_feed
, tvb
, foffset
, 8, ENC_NA
);
3509 proto_tree_add_item(ndps_tree
, hf_ndps_long_edge_feeds
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3511 proto_tree_add_item(ndps_tree
, hf_ndps_xmin_n64
, tvb
, foffset
, 8, ENC_NA
);
3513 proto_tree_add_item(ndps_tree
, hf_ndps_xmax_n64
, tvb
, foffset
, 8, ENC_NA
);
3515 proto_tree_add_item(ndps_tree
, hf_ndps_ymin_n64
, tvb
, foffset
, 8, ENC_NA
);
3517 proto_tree_add_item(ndps_tree
, hf_ndps_ymax_n64
, tvb
, foffset
, 8, ENC_NA
);
3521 case 81: /* Input Tray Medium */
3522 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3523 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3525 case 82: /* Output Bins Characteristics */
3526 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3527 proto_tree_add_uint(ndps_tree
, hf_ndps_num_page_informations
, tvb
, foffset
, 4, number_of_items
);
3529 for (ii
= 0; ii
< number_of_items
; ii
++ )
3531 if (ii
>= NDPS_MAX_ITEMS
) {
3532 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3535 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Page Information %u", ii
+1);
3536 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3537 proto_tree_add_item(atree
, hf_ndps_page_order
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3539 proto_tree_add_item(atree
, hf_ndps_page_orientation
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3541 proto_item_set_end(aitem
, tvb
, foffset
);
3544 case 83: /* Page ID Type */
3545 proto_tree_add_item(ndps_tree
, hf_ndps_identifier_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3548 case 84: /* Level Range */
3549 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3550 proto_tree_add_item(ndps_tree
, hf_ndps_lower_range
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3552 proto_tree_add_item(ndps_tree
, hf_ndps_upper_range
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3555 case 85: /* Category Set */
3556 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3557 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3558 proto_tree_add_uint(ndps_tree
, hf_ndps_num_categories
, tvb
, foffset
, 4, number_of_items
);
3560 for (ii
= 0; ii
< number_of_items
; ii
++ )
3562 if (ii
>= NDPS_MAX_ITEMS
) {
3563 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3566 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Category %u", ii
+1);
3567 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3568 length
= tvb_get_ntohl(tvb
, foffset
);
3572 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
3575 foffset
+= (length
%2);
3576 if ((int) foffset
<= 0)
3577 THROW(ReportedBoundsError
);
3579 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3580 proto_tree_add_uint(ndps_tree
, hf_ndps_num_values
, tvb
, foffset
, 4, number_of_items
);
3582 for (ii
= 0; ii
< number_of_items
; ii
++ )
3584 if (ii
>= NDPS_MAX_ITEMS
) {
3585 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3588 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Value %d", ii
+1);
3589 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3590 length
= tvb_get_ntohl(tvb
, foffset
);
3594 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
3597 foffset
+= (length
%2);
3598 if ((int) foffset
<= 0)
3599 THROW(ReportedBoundsError
);
3600 proto_item_set_end(aitem
, tvb
, foffset
);
3603 case 86: /* Numbers Up Supported */
3604 numbers_up
=tvb_get_ntohl(tvb
, foffset
);
3605 proto_tree_add_uint(ndps_tree
, hf_ndps_numbers_up
, tvb
, foffset
, 4, numbers_up
);
3609 case 0: /*Cardinal*/
3610 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3613 case 1: /*Name or OID*/
3614 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3616 case 2: /*Cardinal Range*/
3617 proto_tree_add_item(ndps_tree
, hf_ndps_lower_range
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3619 proto_tree_add_item(ndps_tree
, hf_ndps_upper_range
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3626 case 87: /* Finishing */
3627 case 88: /* Print Contained Object ID */
3628 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
3629 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3632 case 89: /* Print Config Object ID */
3633 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
3634 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3636 case 90: /* Typed Name */
3637 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
3638 proto_tree_add_item(ndps_tree
, hf_level
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3640 proto_tree_add_item(ndps_tree
, hf_interval
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3643 case 91: /* Network Address */
3644 proto_tree_add_item(ndps_tree
, hf_ndps_address
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3646 length
= tvb_get_ntohl(tvb
, foffset
);
3650 proto_tree_add_item(ndps_tree
, hf_ndps_add_bytes
, tvb
, foffset
, 4, ENC_NA
);
3654 case 92: /* XY Dimensions Value */
3655 dimension
= tvb_get_ntohl(tvb
, foffset
);
3656 proto_tree_add_uint(ndps_tree
, hf_ndps_xydim_value
, tvb
, foffset
, 4, dimension
);
3661 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3665 proto_tree_add_item(ndps_tree
, hf_ndps_xdimension_n64
, tvb
, foffset
, 8, ENC_NA
);
3667 proto_tree_add_item(ndps_tree
, hf_ndps_ydimension_n64
, tvb
, foffset
, 8, ENC_NA
);
3672 proto_tree_add_item(ndps_tree
, hf_ndps_xdimension
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3674 proto_tree_add_item(ndps_tree
, hf_ndps_ydimension
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3679 case 93: /* Name or OID Dimensions Map */
3680 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3681 proto_tree_add_item(ndps_tree
, hf_ndps_xdimension
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3683 proto_tree_add_item(ndps_tree
, hf_ndps_ydimension
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3686 case 94: /* Printer State Reason */
3688 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3689 proto_tree_add_item(ndps_tree
, hf_ndps_state_severity
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3691 proto_tree_add_item(ndps_tree
, hf_ndps_training
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3693 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3694 foffset
+= align_4(tvb
, foffset
);
3695 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
3696 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3698 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3699 foffset
+= 4*number_of_items
;
3700 /*foffset += align_4(tvb, foffset);*/
3701 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3704 case 96: /* Qualified Name */
3705 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3707 case 97: /* Qualified Name Set */
3708 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3709 proto_tree_add_uint(ndps_tree
, hf_ndps_num_names
, tvb
, foffset
, 4, number_of_items
);
3711 for (ii
= 0; ii
< number_of_items
; ii
++ )
3713 if (ii
>= NDPS_MAX_ITEMS
) {
3714 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3717 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Name %u", ii
+1);
3718 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3719 foffset
= qualifiedname(tvb
, atree
, foffset
);
3720 proto_item_set_end(aitem
, tvb
, foffset
);
3723 case 98: /* Colorant Set */
3724 colorant_set
= tvb_get_ntohl(tvb
, foffset
);
3725 proto_tree_add_item(ndps_tree
, hf_ndps_colorant_set
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3727 if (colorant_set
==0)
3729 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3734 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3735 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3736 proto_tree_add_uint(ndps_tree
, hf_ndps_num_colorants
, tvb
, foffset
, 4, number_of_items
);
3738 for (ii
= 0; ii
< number_of_items
; ii
++ )
3740 if (ii
>= NDPS_MAX_ITEMS
) {
3741 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3744 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Colorant %u", ii
+1);
3745 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3746 foffset
= name_or_id(tvb
, atree
, foffset
);
3747 proto_item_set_end(aitem
, tvb
, foffset
);
3751 case 99: /* Resource Printer ID */
3752 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3753 proto_tree_add_uint(ndps_tree
, hf_ndps_printer_def_count
, tvb
, foffset
, 4, number_of_items
);
3755 for (ii
= 0; ii
< number_of_items
; ii
++ )
3757 if (ii
>= NDPS_MAX_ITEMS
) {
3758 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3761 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Printer %u", ii
+1);
3762 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3763 foffset
= ndps_string(tvb
, hf_ndps_printer_type
, atree
, foffset
, NULL
);
3764 foffset
= ndps_string(tvb
, hf_ndps_printer_manuf
, atree
, foffset
, NULL
);
3765 foffset
= ndps_string(tvb
, hf_ndps_inf_file_name
, atree
, foffset
, NULL
);
3766 proto_item_set_end(aitem
, tvb
, foffset
);
3768 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3771 case 100: /* Event Object ID */
3772 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
3773 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3774 proto_tree_add_item(ndps_tree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3777 case 101: /* Qualified Name Map */
3778 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3779 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3781 case 104: /* Cardinal or Enum or Time */
3782 card_enum_time
= tvb_get_ntohl(tvb
, foffset
);
3783 proto_tree_add_item(ndps_tree
, hf_ndps_card_enum_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3785 switch (card_enum_time
)
3788 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3793 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3798 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3803 case 105: /* Print Contained Object ID Set */
3804 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3805 proto_tree_add_uint(ndps_tree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
3807 for (ii
= 0; ii
< number_of_items
; ii
++ )
3809 if (ii
>= NDPS_MAX_ITEMS
) {
3810 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3813 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object %u", ii
+1);
3814 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3815 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
3816 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3818 proto_item_set_end(aitem
, tvb
, foffset
);
3821 case 106: /* Octet String Pair */
3822 length
= tvb_get_ntohl(tvb
, foffset
);
3826 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
3827 proto_tree_add_item(ndps_tree
, hf_ndps_octet_string
, tvb
, foffset
, length
, ENC_NA
);
3830 foffset
+= (length
%2);
3831 length
= tvb_get_ntohl(tvb
, foffset
);
3835 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
3836 proto_tree_add_item(ndps_tree
, hf_ndps_octet_string
, tvb
, foffset
, length
, ENC_NA
);
3839 foffset
+= (length
%2);
3840 if ((int) foffset
<= 0)
3841 THROW(ReportedBoundsError
);
3843 case 107: /* Octet String Integer Pair */
3844 length
= tvb_get_ntohl(tvb
, foffset
);
3848 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
3849 proto_tree_add_item(ndps_tree
, hf_ndps_octet_string
, tvb
, foffset
, length
, ENC_NA
);
3852 foffset
+= (length
%2);
3853 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3855 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3858 case 109: /* Event Handling Profile 2 */
3859 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3861 proto_tree_add_item(ndps_tree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3863 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3864 length
= tvb_get_ntohl(tvb
, foffset
);
3868 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
3869 proto_tree_add_item(ndps_tree
, hf_ndps_octet_string
, tvb
, foffset
, length
, ENC_NA
);
3872 foffset
+= (length
%2);
3873 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3875 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3876 proto_tree_add_item(ndps_tree
, hf_ndps_delivery_add_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3877 event_object_type
= tvb_get_ntohl(tvb
, foffset
);
3879 switch(event_object_type
)
3881 case 0: /*MHS ADDR*/
3882 case 1: /*DISTINGUISHED_NAME*/
3884 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
3886 case 3: /*OCTET_STRING*/
3887 length
= tvb_get_ntohl(tvb
, foffset
);
3891 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
3892 proto_tree_add_item(ndps_tree
, hf_ndps_octet_string
, tvb
, foffset
, length
, ENC_NA
);
3895 foffset
+= (length
%2);
3896 if ((int) foffset
<= 0)
3897 THROW(ReportedBoundsError
);
3899 case 4: /*DIST_NAME_STRING*/
3900 foffset
= ndps_string(tvb
, hf_object_name
, ndps_tree
, foffset
, NULL
);
3901 foffset
= name_or_id(tvb
, ndps_tree
, foffset
);
3903 case 5: /*RPC_ADDRESS*/
3904 case 6: /*QUALIFIED_NAME*/
3905 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3906 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3911 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3912 proto_tree_add_uint(ndps_tree
, hf_ndps_num_events
, tvb
, foffset
, 4, number_of_items
);
3914 for (ii
= 0; ii
< number_of_items
; ii
++ )
3916 if (ii
>= NDPS_MAX_ITEMS
) {
3917 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3920 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Event %u", ii
+1);
3921 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3922 foffset
= ndps_string(tvb
, hf_object_name
, atree
, foffset
, NULL
);
3923 foffset
= objectidentifier(tvb
, atree
, foffset
);
3924 proto_tree_add_item(atree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3926 proto_item_set_end(aitem
, tvb
, foffset
);
3928 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
3929 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
3930 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3931 proto_tree_add_uint(ndps_tree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
3933 for (ii
= 0; ii
< number_of_items
; ii
++ )
3935 if (ii
>= NDPS_MAX_ITEMS
) {
3936 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
3939 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object %u", ii
+1);
3940 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3941 foffset
= objectidentifier(tvb
, atree
, foffset
);
3942 proto_item_set_end(aitem
, tvb
, foffset
);
3944 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3946 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3948 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
3950 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
3960 commonarguments(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
3962 guint32 number_of_items
;
3969 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Common Arguments");
3970 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
3971 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
3972 proto_tree_add_uint(atree
, hf_ndps_num_args
, tvb
, foffset
, 4, number_of_items
);
3974 for (ii
= 0; ii
< number_of_items
; ii
++ )
3976 if (ii
>= NDPS_MAX_ITEMS
) {
3977 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
3980 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Argument %u", ii
+1);
3981 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
3982 foffset
= attribute_value(tvb
, btree
, foffset
);
3983 proto_item_set_end(bitem
, tvb
, foffset
);
3985 proto_item_set_end(aitem
, tvb
, foffset
);
3990 res_add_input_data(tvbuff_t
* tvb
, proto_tree
*ndps_tree
, int foffset
)
3992 guint32 resource_type
=0;
3994 resource_type
= tvb_get_ntohl(tvb
, foffset
);
3995 proto_tree_add_uint(ndps_tree
, hf_res_type
, tvb
, foffset
, 4, resource_type
);
3997 switch (resource_type
)
3999 case 0: /* Print Drivers */
4000 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4002 foffset
= ndps_string(tvb
, hf_ndps_prn_dir_name
, ndps_tree
, foffset
, NULL
);
4003 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, ndps_tree
, foffset
, NULL
);
4005 case 1: /* Printer Definitions */
4006 foffset
= ndps_string(tvb
, hf_ndps_vendor_dir
, ndps_tree
, foffset
, NULL
);
4007 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, ndps_tree
, foffset
, NULL
);
4009 case 2: /* Banner Page Files */
4010 foffset
= ndps_string(tvb
, hf_ndps_banner_name
, ndps_tree
, foffset
, NULL
);
4012 case 3: /* Font Types */
4013 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4015 proto_tree_add_item(ndps_tree
, hf_font_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4017 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, ndps_tree
, foffset
, NULL
);
4019 case 4: /* Generic Files/ Archive */
4020 case 5: /* Printer Driver Archive */
4021 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4023 foffset
= ndps_string(tvb
, hf_ndps_prn_dir_name
, ndps_tree
, foffset
, NULL
);
4024 proto_tree_add_item(ndps_tree
, hf_archive_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4034 static const fragment_items ndps_frag_items
= {
4039 &hf_ndps_segment_overlap
,
4040 &hf_ndps_segment_overlap_conflict
,
4041 &hf_ndps_segment_multiple_tails
,
4042 &hf_ndps_segment_too_long_segment
,
4043 &hf_ndps_segment_error
,
4044 &hf_ndps_segment_count
,
4046 &hf_ndps_reassembled_length
,
4047 /* Reassembled data field */
4052 static dissector_handle_t ndps_data_handle
;
4054 /* NDPS packets come in request/reply pairs. The request packets tell the
4055 * Function and Program numbers. The response, unfortunately, only
4056 * identifies itself via the Exchange ID; you have to know what type of NDPS
4057 * request the request packet contained in order to successfully parse the
4058 * response. A global method for doing this does not exist in wireshark yet
4059 * (NFS also requires it), so for now the NDPS section will keep its own hash
4060 * table keeping track of NDPS packets.
4062 * We construct a conversation specified by the client and server
4063 * addresses and the connection number; the key representing the unique
4064 * NDPS request then is composed of the pointer to the conversation
4065 * structure, cast to a "guint" (which may throw away the upper 32
4066 * bits of the pointer on a P64 platform, but the low-order 32 bits
4067 * are more likely to differ between conversations than the upper 32 bits),
4068 * and the sequence number.
4070 * The value stored in the hash table is the ncp_req_hash_value pointer. This
4071 * struct tells us the NDPS Program and Function and gives the NDPS_record pointer.
4074 conversation_t
*conversation
;
4076 } ndps_req_hash_key
;
4081 guint32 ndps_frame_num
;
4083 guint32 ndps_end_frag
;
4084 } ndps_req_hash_value
;
4086 static GHashTable
*ndps_req_hash
= NULL
;
4088 /* Hash Functions */
4090 ndps_equal(gconstpointer v
, gconstpointer v2
)
4092 const ndps_req_hash_key
*val1
= (const ndps_req_hash_key
*)v
;
4093 const ndps_req_hash_key
*val2
= (const ndps_req_hash_key
*)v2
;
4095 if (val1
->conversation
== val2
->conversation
&&
4096 val1
->ndps_xport
== val2
->ndps_xport
) {
4103 ndps_hash(gconstpointer v
)
4105 const ndps_req_hash_key
*ndps_key
= (const ndps_req_hash_key
*)v
;
4106 return GPOINTER_TO_UINT(ndps_key
->conversation
) + ndps_key
->ndps_xport
;
4109 /* Initializes the hash table each time a new
4110 * file is loaded or re-loaded in wireshark */
4112 ndps_init_protocol(void)
4115 reassembly_table_init(&ndps_reassembly_table
,
4116 &addresses_reassembly_table_functions
);
4119 g_hash_table_destroy(ndps_req_hash
);
4121 ndps_req_hash
= g_hash_table_new(ndps_hash
, ndps_equal
);
4124 /* After the sequential run, we don't need the ncp_request hash and keys
4125 * anymore; the lookups have already been done and the vital info
4126 * saved in the reply-packets' private_data in the frame_data struct. */
4128 ndps_postseq_cleanup(void)
4130 if (ndps_req_hash
) {
4131 /* Destroy the hash, but don't clean up request_condition data. */
4132 g_hash_table_destroy(ndps_req_hash
);
4133 ndps_req_hash
= NULL
;
4135 /* Don't free the ncp_req_hash_values, as they're
4136 * needed during random-access processing of the proto_tree.*/
4139 static ndps_req_hash_value
*
4140 ndps_hash_insert(conversation_t
*conversation
, guint32 ndps_xport
)
4142 ndps_req_hash_key
*request_key
;
4143 ndps_req_hash_value
*request_value
;
4145 /* Now remember the request, so we can find it if we later
4147 request_key
= wmem_new(wmem_file_scope(), ndps_req_hash_key
);
4148 request_key
->conversation
= conversation
;
4149 request_key
->ndps_xport
= ndps_xport
;
4151 request_value
= wmem_new(wmem_file_scope(), ndps_req_hash_value
);
4152 request_value
->ndps_prog
= 0;
4153 request_value
->ndps_func
= 0;
4154 request_value
->ndps_frame_num
= 0;
4155 request_value
->ndps_frag
= FALSE
;
4156 request_value
->ndps_end_frag
= 0;
4158 g_hash_table_insert(ndps_req_hash
, request_key
, request_value
);
4160 return request_value
;
4163 /* Returns the ncp_rec*, or NULL if not found. */
4164 static ndps_req_hash_value
*
4165 ndps_hash_lookup(conversation_t
*conversation
, guint32 ndps_xport
)
4167 ndps_req_hash_key request_key
;
4169 request_key
.conversation
= conversation
;
4170 request_key
.ndps_xport
= ndps_xport
;
4172 return (ndps_req_hash_value
*)g_hash_table_lookup(ndps_req_hash
, &request_key
);
4175 /* ================================================================= */
4177 /* ================================================================= */
4180 dissect_ndps(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*ndps_tree
)
4184 guint32 ndps_packet_type
;
4186 guint32 ndps_hfname
;
4188 const char *ndps_program_string
;
4189 const char *ndps_func_string
;
4192 ndps_packet_type
= tvb_get_ntohl(tvb
, 8);
4193 if (ndps_packet_type
!= 0 && ndps_packet_type
!= 1) { /* Packet Type */
4194 col_set_str(pinfo
->cinfo
, COL_INFO
, "(Continuation Data)");
4195 proto_tree_add_text(ndps_tree
, tvb
, 0, tvb_length(tvb
), "Data - (%d Bytes)", tvb_length(tvb
));
4199 proto_tree_add_item(ndps_tree
, hf_ndps_record_mark
, tvb
,
4200 foffset
, 2, ENC_BIG_ENDIAN
);
4202 proto_tree_add_item(ndps_tree
, hf_ndps_length
, tvb
,
4203 foffset
, 2, ENC_BIG_ENDIAN
);
4206 ndps_xid
= tvb_get_ntohl(tvb
, foffset
);
4207 proto_tree_add_uint(ndps_tree
, hf_ndps_xid
, tvb
, foffset
, 4, ndps_xid
);
4209 ndps_packet_type
= tvb_get_ntohl(tvb
, foffset
);
4210 proto_tree_add_uint(ndps_tree
, hf_ndps_packet_type
, tvb
, foffset
, 4, ndps_packet_type
);
4212 if(ndps_packet_type
== 0x00000001) /* Reply packet */
4214 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS ");
4215 proto_tree_add_item(ndps_tree
, hf_ndps_rpc_accept
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4216 if (tvb_get_ntohl(tvb
, foffset
)==0) {
4218 proto_tree_add_item(ndps_tree
, hf_ndps_auth_null
, tvb
, foffset
, 8, ENC_NA
);
4224 proto_tree_add_item(ndps_tree
, hf_ndps_rpc_rej_stat
, tvb
, foffset
+4, 4, ENC_BIG_ENDIAN
);
4227 dissect_ndps_reply(tvb
, pinfo
, ndps_tree
, foffset
);
4231 col_set_str(pinfo
->cinfo
, COL_INFO
, "C NDPS ");
4232 proto_tree_add_item(ndps_tree
, hf_ndps_rpc_version
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4234 ndps_prog
= tvb_get_ntohl(tvb
, foffset
);
4235 ndps_program_string
= try_val_to_str(ndps_prog
, spx_ndps_program_vals
);
4236 if( ndps_program_string
!= NULL
)
4238 proto_tree_add_item(ndps_tree
, hf_spx_ndps_program
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4240 col_append_str(pinfo
->cinfo
, COL_INFO
, (const gchar
*) ndps_program_string
);
4241 col_append_str(pinfo
->cinfo
, COL_INFO
, ", ");
4243 proto_tree_add_item(ndps_tree
, hf_spx_ndps_version
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4245 ndps_func
= tvb_get_ntohl(tvb
, foffset
);
4249 ndps_hfname
= hf_spx_ndps_func_print
;
4250 ndps_func_string
= try_val_to_str(ndps_func
, spx_ndps_print_func_vals
);
4253 ndps_hfname
= hf_spx_ndps_func_broker
;
4254 ndps_func_string
= try_val_to_str(ndps_func
, spx_ndps_broker_func_vals
);
4257 ndps_hfname
= hf_spx_ndps_func_registry
;
4258 ndps_func_string
= try_val_to_str(ndps_func
, spx_ndps_registry_func_vals
);
4261 ndps_hfname
= hf_spx_ndps_func_notify
;
4262 ndps_func_string
= try_val_to_str(ndps_func
, spx_ndps_notify_func_vals
);
4265 ndps_hfname
= hf_spx_ndps_func_resman
;
4266 ndps_func_string
= try_val_to_str(ndps_func
, spx_ndps_resman_func_vals
);
4269 ndps_hfname
= hf_spx_ndps_func_delivery
;
4270 ndps_func_string
= try_val_to_str(ndps_func
, spx_ndps_deliver_func_vals
);
4274 ndps_func_string
= NULL
;
4277 if(ndps_hfname
!= 0)
4279 proto_tree_add_item(ndps_tree
, ndps_hfname
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4280 if (ndps_func_string
!= NULL
)
4282 col_append_str(pinfo
->cinfo
, COL_INFO
, (const gchar
*) ndps_func_string
);
4285 proto_tree_add_item(ndps_tree
, hf_ndps_auth_null
, tvb
, foffset
, 16, ENC_NA
);
4287 dissect_ndps_request(tvb
, pinfo
, ndps_tree
, ndps_prog
, ndps_func
, foffset
);
4295 get_ndps_pdu_len(packet_info
*pinfo _U_
, tvbuff_t
*tvb
, int offset
)
4297 return tvb_get_ntohs(tvb
, offset
+2) + 4;
4301 dissect_ndps_pdu(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
4303 proto_tree
*ndps_tree
;
4306 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "NDPS");
4308 col_clear(pinfo
->cinfo
, COL_INFO
);
4310 ti
= proto_tree_add_item(tree
, proto_ndps
, tvb
, 0, -1, ENC_NA
);
4311 ndps_tree
= proto_item_add_subtree(ti
, ett_ndps
);
4313 dissect_ndps(tvb
, pinfo
, ndps_tree
);
4314 return tvb_length(tvb
);
4320 * SPX EOM not being set indicates we are inside or at the
4321 * beginning of a fragment. But when the end of the fragment
4322 * is encounterd the flag is set. So we must mark what the
4323 * frame number is of the end fragment so that we will be
4324 * able to redissect if the user clicks on the packet
4325 * or resorts/filters the trace.
4327 * Once we are certain that we are in a fragment sequence
4328 * then we can just process each fragment in this conversation
4329 * until we reach the eom message packet. We can tell we are at
4330 * the final fragment because it is flagged as SPX EOM.
4332 * We will be able to easily determine if a conversation is a fragment
4333 * with the exception of the last packet in the fragment. So remember
4334 * the last fragment packet number.
4337 ndps_defrag(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, spx_info
*spx_info_p
)
4340 tvbuff_t
*next_tvb
= NULL
;
4341 fragment_head
*fd_head
;
4342 ndps_req_hash_value
*request_value
= NULL
;
4343 conversation_t
*conversation
;
4345 /* Check to see if defragmentation is enabled in the dissector */
4346 if (!ndps_defragment
) {
4347 dissect_ndps(tvb
, pinfo
, tree
);
4350 /* Has this already been dissected? */
4351 if (!pinfo
->fd
->flags
.visited
)
4353 /* Lets see if this is a new conversation */
4354 conversation
= find_conversation(pinfo
->fd
->num
, &pinfo
->src
, &pinfo
->dst
,
4355 PT_NCP
, (guint32
) pinfo
->srcport
, (guint32
) pinfo
->srcport
, 0);
4357 if (conversation
== NULL
)
4359 /* It's not part of any conversation - create a new one. */
4360 conversation
= conversation_new(pinfo
->fd
->num
, &pinfo
->src
, &pinfo
->dst
,
4361 PT_NCP
, (guint32
) pinfo
->srcport
, (guint32
) pinfo
->srcport
, 0);
4364 /* So now we need to get the request info for this conversation */
4365 request_value
= ndps_hash_lookup(conversation
, (guint32
) pinfo
->srcport
);
4366 if (request_value
== NULL
)
4368 /* We haven't seen a packet with this conversation yet so create one. */
4369 request_value
= ndps_hash_insert(conversation
, (guint32
) pinfo
->srcport
);
4371 /* Add it to pinfo so we can get it on further dissection requests */
4372 p_add_proto_data(pinfo
->fd
, proto_ndps
, 0, (void*) request_value
);
4376 /* Get request value data */
4377 request_value
= (ndps_req_hash_value
*)p_get_proto_data(pinfo
->fd
, proto_ndps
, 0);
4381 /* Can't find the original request packet so this is not any fragment packet */
4382 dissect_ndps(tvb
, pinfo
, tree
);
4385 /* Check to see of this is a fragment. If so then mark as a fragment. */
4386 if (!spx_info_p
->eom
) {
4387 request_value
->ndps_frag
= TRUE
;
4389 /* Now we process the fragments */
4390 if (request_value
->ndps_frag
|| (request_value
->ndps_end_frag
== pinfo
->fd
->num
))
4395 tid
= (pinfo
->srcport
+pinfo
->destport
);
4396 len
= tvb_reported_length(tvb
);
4397 if (tvb_length(tvb
) >= len
)
4399 fd_head
= fragment_add_seq_next(&ndps_reassembly_table
, tvb
, 0, pinfo
, tid
, NULL
, len
, !spx_info_p
->eom
);
4400 if (fd_head
!= NULL
)
4402 /* Is this the last fragment? EOM will indicate */
4403 if (fd_head
->next
!= NULL
&& spx_info_p
->eom
)
4405 proto_item
*frag_tree_item
;
4407 next_tvb
= tvb_new_chain(tvb
, fd_head
->tvb_data
);
4408 add_new_data_source(pinfo
,
4410 "Reassembled NDPS");
4411 /* Show all fragments. */
4414 show_fragment_seq_tree(fd_head
,
4417 next_tvb
, &frag_tree_item
);
4420 /* Remember this fragment number so we can dissect again */
4421 request_value
->ndps_end_frag
= pinfo
->fd
->num
;
4426 /* This is either a beggining or middle fragment on second dissection */
4427 next_tvb
= tvb_new_subset_remaining(tvb
, 0);
4428 if (!spx_info_p
->eom
)
4430 col_append_str(pinfo
->cinfo
, COL_INFO
, "[NDPS Fragment]");
4436 /* Fragment from first pass of dissection */
4437 if (!spx_info_p
->eom
)
4439 col_append_str(pinfo
->cinfo
, COL_INFO
, "[NDPS Fragment]");
4448 * There are no bytes so Dissect this
4450 next_tvb
= tvb_new_subset_remaining(tvb
, 0);
4452 if (next_tvb
== NULL
)
4454 /* This is a fragment packet */
4455 next_tvb
= tvb_new_subset_remaining (tvb
, 0);
4456 call_dissector(ndps_data_handle
, next_tvb
, pinfo
, tree
);
4460 /* This is the end fragment so dissect and mark end */
4461 if (spx_info_p
->eom
) {
4462 request_value
->ndps_frag
= FALSE
;
4463 dissect_ndps(next_tvb
, pinfo
, tree
);
4469 /* This is not any fragment packet */
4470 request_value
->ndps_frag
= FALSE
;
4471 dissect_ndps(tvb
, pinfo
, tree
);
4476 dissect_ndps_tcp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
4478 tcp_dissect_pdus(tvb
, pinfo
, tree
, ndps_desegment
, 4, get_ndps_pdu_len
, dissect_ndps_pdu
, data
);
4479 return tvb_length(tvb
);
4484 dissect_ndps_ipx(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
4486 proto_tree
*ndps_tree
;
4489 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "NDPS");
4491 col_clear(pinfo
->cinfo
, COL_INFO
);
4493 ti
= proto_tree_add_item(tree
, proto_ndps
, tvb
, 0, -1, ENC_NA
);
4494 ndps_tree
= proto_item_add_subtree(ti
, ett_ndps
);
4496 ndps_defrag(tvb
, pinfo
, ndps_tree
, (spx_info
*)data
);
4497 return tvb_length(tvb
);
4501 dissect_ndps_request(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*ndps_tree
, guint32 ndps_prog
, guint32 ndps_func
, int foffset
)
4503 ndps_req_hash_value
*request_value
= NULL
;
4504 conversation_t
*conversation
;
4509 guint32 resource_type
;
4510 guint32 filter_type
;
4513 guint32 number_of_items
;
4514 guint32 number_of_items2
;
4515 guint32 doc_content
;
4516 guint32 list_attr_op
;
4519 gboolean supplier_flag
;
4520 gboolean language_flag
;
4521 gboolean method_flag
;
4522 gboolean delivery_address_flag
;
4523 guint32 profiles_type
;
4524 guint32 profiles_choice_type
;
4525 guint32 integer_type_flag
;
4526 guint32 local_servers_type
;
4527 gint length_remaining
;
4537 if (!pinfo
->fd
->flags
.visited
)
4539 /* This is the first time we've looked at this packet.
4540 Keep track of the Program and connection whence the request
4541 came, and the address and connection to which the request
4542 is being sent, so that we can match up calls with replies.
4543 (We don't include the sequence number, as we may want
4544 to have all packets over the same connection treated
4545 as being part of a single conversation so that we can
4546 let the user select that conversation to be displayed.) */
4548 conversation
= find_conversation(pinfo
->fd
->num
, &pinfo
->src
, &pinfo
->dst
,
4549 PT_NCP
, (guint32
) pinfo
->srcport
, (guint32
) pinfo
->srcport
, 0);
4551 if (conversation
== NULL
)
4553 /* It's not part of any conversation - create a new one. */
4554 conversation
= conversation_new(pinfo
->fd
->num
, &pinfo
->src
, &pinfo
->dst
,
4555 PT_NCP
, (guint32
) pinfo
->srcport
, (guint32
) pinfo
->srcport
, 0);
4558 request_value
= ndps_hash_insert(conversation
, (guint32
) pinfo
->srcport
);
4559 request_value
->ndps_prog
= ndps_prog
;
4560 request_value
->ndps_func
= ndps_func
;
4561 request_value
->ndps_frame_num
= pinfo
->fd
->num
;
4565 case 0x060976: /* Print */
4568 case 0x00000001: /* Bind PSM */
4569 foffset
= credentials(tvb
, ndps_tree
, foffset
);
4571 case 0x00000002: /* Bind PA */
4572 foffset
= credentials(tvb
, ndps_tree
, foffset
);
4573 proto_tree_add_item(ndps_tree
, hf_ndps_retrieve_restrictions
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4575 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
4576 proto_tree_add_uint(ndps_tree
, hf_ndps_bind_security_option_count
, tvb
, foffset
, 4, number_of_items
);
4578 for (ii
= 0; ii
< number_of_items
; ii
++ )
4580 if (ii
>= NDPS_MAX_ITEMS
) {
4581 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
4584 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Security %u", ii
+1);
4585 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4586 length
= tvb_get_ntohl(tvb
, foffset
);
4589 proto_tree_add_uint(atree
, hf_bind_security
, tvb
, foffset
, 4, length
);
4592 proto_item_set_end(aitem
, tvb
, foffset
);
4594 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
4596 case 0x00000003: /* Unbind */
4597 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
,
4600 case 0x00000004: /* Print */
4601 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4603 print_type
= tvb_get_ntohl(tvb
, foffset
);
4604 proto_tree_add_uint(ndps_tree
, hf_print_arg
, tvb
, foffset
, 4, print_type
);
4608 case 0: /* Create Job */
4609 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
4610 proto_tree_add_item(ndps_tree
, hf_sub_complete
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4612 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Transfer Method");
4613 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4614 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4615 proto_tree_add_uint(atree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
4617 for (ii
= 0; ii
< number_of_items
; ii
++ )
4619 if (ii
>= NDPS_MAX_ITEMS
) {
4620 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4623 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
4624 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4625 foffset
= objectidentifier(tvb
, btree
, foffset
);
4626 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
4627 proto_tree_add_uint(btree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items2
);
4629 for (jj
= 0; jj
< number_of_items2
; jj
++ )
4631 if (jj
>= NDPS_MAX_ITEMS
) {
4632 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
4635 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Value %u", jj
+1);
4636 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
4637 foffset
= attribute_value(tvb
, ctree
, foffset
);
4638 proto_item_set_end(citem
, tvb
, foffset
);
4640 proto_tree_add_item(btree
, hf_ndps_qualifier
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4642 proto_item_set_end(bitem
, tvb
, foffset
);
4644 proto_item_set_end(aitem
, tvb
, foffset
);
4645 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Document Content");
4646 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4647 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4648 proto_tree_add_uint(atree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
4650 for (ii
= 0; ii
< number_of_items
; ii
++ )
4652 if (ii
>= NDPS_MAX_ITEMS
) {
4653 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4656 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Type %u", ii
+1);
4657 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4658 foffset
= objectidentifier(tvb
, btree
, foffset
);
4659 proto_item_set_end(bitem
, tvb
, foffset
);
4661 foffset
+= align_4(tvb
, foffset
);
4662 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4663 proto_tree_add_uint(atree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
4665 doc_content
= tvb_get_ntohl(tvb
, foffset
);
4666 proto_tree_add_uint(atree
, hf_doc_content
, tvb
, foffset
, 4, doc_content
);
4668 for (ii
= 0; ii
< number_of_items
; ii
++ )
4670 if (ii
>= NDPS_MAX_ITEMS
) {
4671 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4674 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Value %u", ii
+1);
4675 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4678 length
= tvb_get_ntohl(tvb
, foffset
);
4679 proto_tree_add_uint(btree
, hf_ndps_included_doc_len
, tvb
, foffset
, 4, length
);
4681 length_remaining
= tvb_length_remaining(tvb
, foffset
);
4682 if (length_remaining
== -1 || length
> (guint32
) length_remaining
) /* Segmented Data */
4684 proto_tree_add_item(btree
, hf_ndps_data
, tvb
, foffset
, -1, ENC_NA
);
4689 proto_tree_add_item(btree
, hf_ndps_included_doc
, tvb
, foffset
, length
, ENC_NA
);
4692 foffset
+= (length
%2);
4693 if ((int) foffset
<= 0)
4694 THROW(ReportedBoundsError
);
4698 foffset
= ndps_string(tvb
, hf_ndps_ref_name
, btree
, foffset
, NULL
);
4699 foffset
= name_or_id(tvb
, btree
, foffset
);
4701 proto_item_set_end(bitem
, tvb
, foffset
);
4703 proto_item_set_end(aitem
, tvb
, foffset
);
4705 if (align_4(tvb
, foffset
)>0) {
4706 foffset
+= align_4(tvb
, foffset
);
4708 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Document Type");
4709 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4710 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4711 proto_tree_add_uint(atree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
4713 for (ii
= 0; ii
< number_of_items
; ii
++ )
4715 if (ii
>= NDPS_MAX_ITEMS
) {
4716 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4719 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
4720 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4721 foffset
= objectidentifier(tvb
, btree
, foffset
);
4722 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
4723 proto_tree_add_uint(btree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items2
);
4725 for (jj
= 0; jj
< number_of_items2
; jj
++ )
4727 if (jj
>= NDPS_MAX_ITEMS
) {
4728 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
4731 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Value %u", jj
+1);
4732 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
4733 foffset
= attribute_value(tvb
, ctree
, foffset
);
4734 proto_item_set_end(citem
, tvb
, foffset
);
4736 proto_tree_add_item(btree
, hf_ndps_qualifier
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4738 proto_item_set_end(bitem
, tvb
, foffset
);
4740 proto_item_set_end(aitem
, tvb
, foffset
);
4741 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Document Attributes");
4742 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4743 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4744 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
4746 for (ii
= 0; ii
< number_of_items
; ii
++ )
4748 if (ii
>= NDPS_MAX_ITEMS
) {
4749 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4752 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
4753 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4754 foffset
= attribute_value(tvb
, btree
, foffset
); /* Document Attributes */
4755 proto_item_set_end(bitem
, tvb
, foffset
);
4758 case 1: /* Add Job */
4759 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
4760 proto_tree_add_item(ndps_tree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4762 proto_tree_add_item(ndps_tree
, hf_sub_complete
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4764 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Transfer Method");
4765 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4766 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4767 proto_tree_add_uint(atree
, hf_ndps_num_transfer_methods
, tvb
, foffset
, 4, number_of_items
);
4769 for (ii
= 0; ii
< number_of_items
; ii
++ )
4771 if (ii
>= NDPS_MAX_ITEMS
) {
4772 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4775 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Method %u", ii
+1);
4776 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4777 foffset
= objectidentifier(tvb
, btree
, foffset
); /* Transfer Method */
4778 proto_item_set_end(bitem
, tvb
, foffset
);
4780 proto_tree_add_item(ndps_tree
, hf_doc_content
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4782 proto_item_set_end(aitem
, tvb
, foffset
);
4783 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Document Type");
4784 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4785 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4786 proto_tree_add_uint(atree
, hf_ndps_num_doc_types
, tvb
, foffset
, 4, number_of_items
);
4788 for (ii
= 0; ii
< number_of_items
; ii
++ )
4790 if (ii
>= NDPS_MAX_ITEMS
) {
4791 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4794 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Type %u", ii
+1);
4795 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4796 foffset
= objectidentifier(tvb
, btree
, foffset
); /* Document Type */
4797 proto_item_set_end(bitem
, tvb
, foffset
);
4799 foffset
+= align_4(tvb
, foffset
);
4800 proto_item_set_end(aitem
, tvb
, foffset
);
4801 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Document Attributes");
4802 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4803 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4804 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
4806 for (ii
= 0; ii
< number_of_items
; ii
++ )
4808 if (ii
>= NDPS_MAX_ITEMS
) {
4809 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4812 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
4813 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4814 foffset
= attribute_value(tvb
, btree
, foffset
); /* Document Attributes */
4815 proto_item_set_end(bitem
, tvb
, foffset
);
4817 proto_item_set_end(aitem
, tvb
, foffset
);
4819 case 2: /* Close Job */
4820 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
4821 proto_tree_add_item(ndps_tree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4828 case 0x00000005: /* Modify Job */
4829 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4831 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
4832 proto_tree_add_item(ndps_tree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4834 proto_tree_add_item(ndps_tree
, hf_ndps_document_number
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4836 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job Modifications");
4837 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4838 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4839 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
4841 for (ii
= 0; ii
< number_of_items
; ii
++ )
4843 if (ii
>= NDPS_MAX_ITEMS
) {
4844 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4847 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Modification %u", ii
+1);
4848 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4849 foffset
= attribute_value(tvb
, btree
, foffset
); /* Job Modifications */
4850 proto_item_set_end(bitem
, tvb
, foffset
);
4852 proto_item_set_end(aitem
, tvb
, foffset
);
4853 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Document Modifications");
4854 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4855 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4856 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
4858 for (ii
= 0; ii
< number_of_items
; ii
++ )
4860 if (ii
>= NDPS_MAX_ITEMS
) {
4861 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4864 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Modification %u", ii
+1);
4865 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4866 foffset
= attribute_value(tvb
, btree
, foffset
); /* Document Modifications */
4867 proto_item_set_end(bitem
, tvb
, foffset
);
4869 proto_item_set_end(aitem
, tvb
, foffset
);
4871 case 0x00000006: /* Cancel Job */
4872 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4874 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
4875 proto_tree_add_item(ndps_tree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4877 proto_tree_add_item(ndps_tree
, hf_ndps_document_number
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4879 /* XXX - what does this count? */
4880 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4881 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
4883 /* Start of nameorid */
4884 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Cancel Message");
4885 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4886 foffset
= name_or_id(tvb
, atree
, foffset
);
4887 proto_item_set_end(aitem
, tvb
, foffset
);
4888 /* End of nameorid */
4889 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Retention Period");
4890 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4891 proto_tree_add_item(atree
, hf_ndps_status_flags
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4893 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4895 proto_item_set_end(aitem
, tvb
, foffset
);
4897 case 0x00000007: /* List Object Attributes */
4898 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4900 list_attr_op
= tvb_get_ntohl(tvb
, foffset
);
4901 proto_tree_add_uint(ndps_tree
, hf_ndps_attrs_arg
, tvb
, foffset
, 4, list_attr_op
);
4903 if (list_attr_op
==0) /* Continuation */
4905 length
= tvb_get_ntohl(tvb
, foffset
);
4906 proto_tree_add_uint(ndps_tree
, hf_ndps_context_len
, tvb
, foffset
, 4, length
);
4910 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
4911 proto_tree_add_item(ndps_tree
, hf_ndps_context
, tvb
, foffset
, length
, ENC_NA
);
4914 foffset
+= (length
%2);
4915 proto_tree_add_item(ndps_tree
, hf_ndps_abort_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4917 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4918 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
4920 for (ii
= 0; ii
< number_of_items
; ii
++ )
4922 if (ii
>= NDPS_MAX_ITEMS
) {
4923 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
4926 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
4927 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4928 foffset
= attribute_value(tvb
, atree
, foffset
);
4929 proto_item_set_end(aitem
, tvb
, foffset
);
4932 else /* Specification */
4934 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Class");
4935 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4936 foffset
= objectidentifier(tvb
, atree
, foffset
);
4937 proto_item_set_end(aitem
, tvb
, foffset
);
4939 foffset
+= align_4(tvb
, foffset
);
4940 scope
= tvb_get_ntohl(tvb
, foffset
);
4941 proto_tree_add_uint(ndps_tree
, hf_ndps_scope
, tvb
, foffset
, 4, scope
);
4943 if (scope
!=0) /* Scope Does not equal 0 */
4945 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Selector Option");
4946 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4947 number_of_items
= tvb_get_ntohl(tvb
, foffset
); /* Start of NWDPSelector */
4948 proto_tree_add_uint(atree
, hf_ndps_num_options
, tvb
, foffset
, 4, number_of_items
);
4950 for (ii
= 0; ii
< number_of_items
; ii
++ )
4952 if (ii
>= NDPS_MAX_ITEMS
) {
4953 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
4956 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Option %u", ii
+1);
4957 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
4958 foffset
= objectidentification(tvb
, btree
, foffset
);
4959 proto_item_set_end(bitem
, tvb
, foffset
);
4961 proto_item_set_end(aitem
, tvb
, foffset
);
4962 foffset
+= align_4(tvb
, foffset
);
4963 filter_type
= tvb_get_ntohl(tvb
, foffset
);
4964 proto_tree_add_uint(ndps_tree
, hf_ndps_filter
, tvb
, foffset
, 4, filter_type
);
4967 if (filter_type
== 0 || filter_type
== 3 )
4969 foffset
= filteritem(tvb
, ndps_tree
, foffset
);
4973 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Filter Items");
4974 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4975 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
4976 proto_tree_add_uint(atree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
4978 for (ii
= 0; ii
< number_of_items
; ii
++ )
4980 if (ii
>= NDPS_MAX_ITEMS
) {
4981 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
4984 foffset
= filteritem(tvb
, ndps_tree
, foffset
);
4986 proto_item_set_end(aitem
, tvb
, foffset
);
4989 proto_tree_add_item(ndps_tree
, hf_ndps_time_limit
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4991 proto_tree_add_item(ndps_tree
, hf_ndps_count_limit
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
4992 foffset
+= 4; /* End of NWDPSelector */
4994 foffset
+= 4; /* Don't know what this is */
4995 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Requested Attributes");
4996 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
4997 number_of_items
= tvb_get_ntohl(tvb
, foffset
); /* Start of NWDPObjectIdentifierSet */
4998 proto_tree_add_uint(atree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
5000 for (ii
= 0; ii
< number_of_items
; ii
++ )
5002 if (ii
>= NDPS_MAX_ITEMS
) {
5003 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5006 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
5007 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5008 foffset
= objectidentifier(tvb
, btree
, foffset
);
5009 proto_item_set_end(bitem
, tvb
, foffset
);
5011 proto_item_set_end(aitem
, tvb
, foffset
); /* End of NWDPObjectIdentifierSet */
5012 if (number_of_items
== 0)
5016 proto_tree_add_item(ndps_tree
, hf_ndps_operator
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5018 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5021 case 0x00000008: /* Promote Job */
5022 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5024 /* Start of NWDPPrtContainedObjectId */
5025 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job ID");
5026 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5027 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
5028 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5030 proto_item_set_end(aitem
, tvb
, foffset
);
5031 /* End of NWDPPrtContainedObjectId */
5032 /* Start of nameorid */
5033 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Message Option");
5034 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5035 foffset
= name_or_id(tvb
, atree
, foffset
);
5036 proto_item_set_end(aitem
, tvb
, foffset
);
5037 /* End of nameorid */
5038 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5040 case 0x00000009: /* Interrupt */
5041 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5043 job_type
= tvb_get_ntohl(tvb
, foffset
);
5044 proto_tree_add_uint(ndps_tree
, hf_interrupt_job_type
, tvb
, foffset
, 4, job_type
);
5048 /* Start of NWDPPrtContainedObjectId */
5049 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job ID");
5050 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5051 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
5052 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5054 proto_item_set_end(aitem
, tvb
, foffset
);
5055 /* End of NWDPPrtContainedObjectId */
5059 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
5061 /* Start of nameorid */
5062 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Interrupt Message Option");
5063 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5064 foffset
= name_or_id(tvb
, atree
, foffset
);
5065 proto_item_set_end(aitem
, tvb
, foffset
);
5066 /* End of nameorid */
5067 /* Start of NWDPPrtContainedObjectId */
5068 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Interrupting Job");
5069 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5070 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
5071 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5073 proto_item_set_end(aitem
, tvb
, foffset
);
5074 /* End of NWDPPrtContainedObjectId */
5075 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5077 case 0x0000000a: /* Pause */
5078 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5080 job_type
= tvb_get_ntohl(tvb
, foffset
);
5081 proto_tree_add_uint(ndps_tree
, hf_pause_job_type
, tvb
, foffset
, 4, job_type
);
5085 /* Start of NWDPPrtContainedObjectId */
5086 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job ID");
5087 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5088 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
5089 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5091 proto_item_set_end(aitem
, tvb
, foffset
);
5092 /* End of NWDPPrtContainedObjectId */
5096 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
5098 /* Start of nameorid */
5099 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Pause Message Option");
5100 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5101 foffset
= name_or_id(tvb
, atree
, foffset
);
5102 proto_item_set_end(aitem
, tvb
, foffset
);
5103 /* End of nameorid */
5104 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5106 case 0x0000000b: /* Resume */
5107 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5109 /* Start of NWDPPrtContainedObjectId */
5110 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job ID");
5111 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5112 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
5113 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5115 proto_item_set_end(aitem
, tvb
, foffset
);
5116 /* End of NWDPPrtContainedObjectId */
5117 /* Start of nameorid */
5118 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Resume Message Option");
5119 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5120 foffset
= name_or_id(tvb
, atree
, foffset
);
5121 proto_item_set_end(aitem
, tvb
, foffset
);
5122 /* End of nameorid */
5123 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5125 case 0x0000000c: /* Clean */
5126 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5128 /* Start of nameorid */
5129 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Clean Message Option");
5130 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5131 foffset
= name_or_id(tvb
, atree
, foffset
);
5132 proto_item_set_end(aitem
, tvb
, foffset
);
5133 /* End of nameorid */
5134 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5136 case 0x0000000d: /* Create */
5137 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5139 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Class");
5140 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5141 foffset
= objectidentifier(tvb
, atree
, foffset
);
5142 proto_item_set_end(aitem
, tvb
, foffset
);
5143 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object ID");
5144 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5145 foffset
= objectidentification(tvb
, atree
, foffset
);
5146 proto_item_set_end(aitem
, tvb
, foffset
);
5147 proto_tree_add_item(ndps_tree
, hf_ndps_force
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5149 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Reference Object Option");
5150 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5151 foffset
= objectidentification(tvb
, atree
, foffset
);
5152 proto_item_set_end(aitem
, tvb
, foffset
);
5153 /* Start of AttributeSet */
5154 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Attribute");
5155 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5156 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5157 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
5159 for (ii
= 0; ii
< number_of_items
; ii
++ )
5161 if (ii
>= NDPS_MAX_ITEMS
) {
5162 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5165 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
5166 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5167 foffset
= attribute_value(tvb
, btree
, foffset
); /* Object Attribute Set */
5168 proto_item_set_end(bitem
, tvb
, foffset
);
5170 proto_item_set_end(aitem
, tvb
, foffset
);
5171 /* End of AttributeSet */
5172 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5174 case 0x0000000e: /* Delete */
5175 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5177 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Class");
5178 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5179 foffset
= objectidentifier(tvb
, atree
, foffset
);
5180 proto_item_set_end(aitem
, tvb
, foffset
);
5181 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object ID");
5182 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5183 foffset
= objectidentification(tvb
, atree
, foffset
);
5184 proto_item_set_end(aitem
, tvb
, foffset
);
5185 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5187 case 0x0000000f: /* Disable PA */
5188 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5190 /* Start of NameorID */
5191 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Disable PA Message Option");
5192 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5193 foffset
= name_or_id(tvb
, atree
, foffset
);
5194 proto_item_set_end(aitem
, tvb
, foffset
);
5195 /* End of NameorID */
5196 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5198 case 0x00000010: /* Enable PA */
5199 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5201 /* Start of NameorID */
5202 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Enable PA Message Option");
5203 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5204 foffset
= name_or_id(tvb
, atree
, foffset
);
5205 proto_item_set_end(aitem
, tvb
, foffset
);
5206 /* End of NameorID */
5207 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5209 case 0x00000011: /* Resubmit Jobs */
5210 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5212 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
5213 foffset
= address_item(tvb
, ndps_tree
, foffset
);
5214 proto_tree_add_item(ndps_tree
, hf_resubmit_op_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5216 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Resubmit Job");
5217 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5218 number_of_items
= tvb_get_ntohl(tvb
, foffset
); /* Start of ResubmitJob Set */
5219 proto_tree_add_uint(atree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
5221 for (ii
= 0; ii
< number_of_items
; ii
++ )
5223 if (ii
>= NDPS_MAX_ITEMS
) {
5224 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5227 /* Start of NWDPPrtContainedObjectId */
5228 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Job ID");
5229 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5230 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, btree
, foffset
, NULL
);
5231 proto_tree_add_item(btree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5233 proto_item_set_end(bitem
, tvb
, foffset
);
5234 /* End of NWDPPrtContainedObjectId */
5235 proto_tree_add_item(atree
, hf_ndps_document_number
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5237 /* Start of AttributeSet */
5238 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Job Attributes");
5239 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5240 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
5241 proto_tree_add_uint(btree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items2
);
5243 for (jj
= 0; jj
< number_of_items2
; jj
++ )
5245 if (jj
>= NDPS_MAX_ITEMS
) {
5246 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
5249 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Attribute %u", jj
+1);
5250 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
5251 foffset
= attribute_value(tvb
, ctree
, foffset
); /* Object Attribute Set */
5252 proto_item_set_end(citem
, tvb
, foffset
);
5254 proto_item_set_end(bitem
, tvb
, foffset
);
5255 /* End of AttributeSet */
5256 /* Start of AttributeSet */
5257 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Document Attributes");
5258 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5259 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
5260 proto_tree_add_uint(btree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items2
);
5262 for (jj
= 0; jj
< number_of_items2
; jj
++ )
5264 if (jj
>= NDPS_MAX_ITEMS
) {
5265 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
5268 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Attribute %u", jj
+1);
5269 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
5270 foffset
= attribute_value(tvb
, ctree
, foffset
); /* Object Attribute Set */
5271 proto_item_set_end(citem
, tvb
, foffset
);
5273 proto_item_set_end(bitem
, tvb
, foffset
);
5274 /* End of AttributeSet */
5276 proto_item_set_end(aitem
, tvb
, foffset
); /* End of ResubmitJob Set */
5277 /* Start of NameorID */
5278 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Resubmit Message Option");
5279 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5280 foffset
= name_or_id(tvb
, atree
, foffset
);
5281 proto_item_set_end(aitem
, tvb
, foffset
);
5282 /* End of NameorID */
5283 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5285 case 0x00000012: /* Set */
5286 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5288 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Class");
5289 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5290 foffset
= objectidentifier(tvb
, atree
, foffset
);
5291 proto_item_set_end(aitem
, tvb
, foffset
);
5292 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object ID");
5293 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5294 foffset
= objectidentification(tvb
, atree
, foffset
);
5295 /* Start of AttributeSet */
5296 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Attribute Modifications");
5297 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5298 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5299 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
5301 for (ii
= 0; ii
< number_of_items
; ii
++ )
5303 if (ii
>= NDPS_MAX_ITEMS
) {
5304 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5307 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Modification %d", ii
+1);
5308 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5309 foffset
= attribute_value(tvb
, btree
, foffset
); /* Object Attribute Set */
5310 proto_item_set_end(bitem
, tvb
, foffset
);
5312 proto_item_set_end(aitem
, tvb
, foffset
);
5313 /* End of AttributeSet */
5314 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5316 case 0x00000013: /* Shutdown PA */
5317 case 0x0000001e: /* Shutdown PSM */
5318 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5320 proto_tree_add_item(ndps_tree
, hf_shutdown_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5322 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
5323 /* Start of NameorID */
5324 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Shutdown Message Option");
5325 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5326 foffset
= name_or_id(tvb
, atree
, foffset
);
5327 proto_item_set_end(aitem
, tvb
, foffset
);
5328 /* End of NameorID */
5329 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5330 case 0x00000014: /* Startup PA */
5331 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5333 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
5334 /* Start of NameorID */
5335 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Startup Message Option");
5336 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5337 foffset
= name_or_id(tvb
, atree
, foffset
);
5338 proto_item_set_end(aitem
, tvb
, foffset
);
5339 /* End of NameorID */
5340 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5342 case 0x00000015: /* Reorder Job */
5343 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5345 /* Start of NWDPPrtContainedObjectId */
5346 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job Identification");
5347 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5348 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
5349 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5351 proto_item_set_end(aitem
, tvb
, foffset
);
5352 /* End of NWDPPrtContainedObjectId */
5353 /* Start of NWDPPrtContainedObjectId */
5354 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Reference Job ID");
5355 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5356 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
5357 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5359 proto_item_set_end(aitem
, tvb
, foffset
);
5360 /* End of NWDPPrtContainedObjectId */
5361 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5363 case 0x00000016: /* Pause PA */
5364 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5366 /* Start of NameorID */
5367 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Pause Message Option");
5368 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5369 foffset
= name_or_id(tvb
, atree
, foffset
);
5370 proto_item_set_end(aitem
, tvb
, foffset
);
5371 /* End of NameorID */
5372 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5374 case 0x00000017: /* Resume PA */
5375 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5377 /* Start of NameorID */
5378 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Resume Message Option");
5379 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5380 foffset
= name_or_id(tvb
, atree
, foffset
);
5381 proto_item_set_end(aitem
, tvb
, foffset
);
5382 /* End of NameorID */
5383 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5385 case 0x00000018: /* Transfer Data */
5386 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5388 proto_tree_add_item(ndps_tree
, hf_get_status_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5390 proto_tree_add_item(ndps_tree
, hf_ndps_data
, tvb
, foffset
+4, tvb_get_ntohl(tvb
, foffset
), ENC_NA
);
5392 case 0x00000019: /* Device Control */
5393 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5395 /* Start of Object Identifier */
5396 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Operation ID");
5397 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5398 foffset
= objectidentifier(tvb
, atree
, foffset
);
5399 proto_item_set_end(aitem
, tvb
, foffset
);
5400 /* End of Object Identifier */
5401 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5403 case 0x0000001a: /* Add Event Profile */
5404 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5406 /* Start of Eventhandling2 */
5407 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5409 proto_tree_add_item(ndps_tree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5411 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
5412 foffset
= ndps_string(tvb
, hf_ndps_supplier_name
, ndps_tree
, foffset
, NULL
);
5413 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5415 /* Start of NameorID */
5416 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
5417 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5418 foffset
= name_or_id(tvb
, atree
, foffset
);
5419 foffset
+= align_4(tvb
, foffset
);
5420 proto_item_set_end(aitem
, tvb
, foffset
);
5421 /* End of NameorID */
5422 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Delivery Address");
5423 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5424 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5425 proto_tree_add_uint(atree
, hf_ndps_delivery_add_count
, tvb
, foffset
, 4, number_of_items
);
5427 for (ii
= 0; ii
< number_of_items
; ii
++ )
5429 if (ii
>= NDPS_MAX_ITEMS
) {
5430 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5433 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Address %u", ii
+1);
5434 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5435 foffset
= address_item(tvb
, btree
, foffset
);
5436 proto_item_set_end(bitem
, tvb
, foffset
);
5438 proto_item_set_end(aitem
, tvb
, foffset
);
5439 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
5440 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
5442 case 0x0000001b: /* Remove Event Profile */
5443 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5445 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5448 case 0x0000001c: /* Modify Event Profile */
5449 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5451 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5453 supplier_flag
= tvb_get_ntohl(tvb
, foffset
);
5454 proto_tree_add_boolean(ndps_tree
, hf_ndps_supplier_flag
, tvb
, foffset
, 4, supplier_flag
);
5458 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Supplier ID");
5459 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5460 length
= tvb_get_ntohl(tvb
, foffset
);
5464 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
5466 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
5468 proto_item_set_end(aitem
, tvb
, foffset
);
5470 language_flag
= tvb_get_ntohl(tvb
, foffset
);
5471 proto_tree_add_boolean(ndps_tree
, hf_ndps_language_flag
, tvb
, foffset
, 4, language_flag
);
5475 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5478 method_flag
= tvb_get_ntohl(tvb
, foffset
);
5479 proto_tree_add_boolean(ndps_tree
, hf_ndps_method_flag
, tvb
, foffset
, 4, method_flag
);
5483 /* Start of NameorID */
5484 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
5485 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5486 foffset
= name_or_id(tvb
, atree
, foffset
);
5487 proto_item_set_end(aitem
, tvb
, foffset
);
5488 /* End of NameorID */
5490 delivery_address_flag
= tvb_get_ntohl(tvb
, foffset
);
5491 proto_tree_add_boolean(ndps_tree
, hf_ndps_delivery_address_flag
, tvb
, foffset
, 4, delivery_address_flag
);
5493 if (delivery_address_flag
)
5495 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Delivery Address");
5496 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5497 foffset
= print_address(tvb
, atree
, foffset
);
5498 proto_item_set_end(aitem
, tvb
, foffset
);
5500 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
5502 case 0x0000001d: /* List Event Profiles */
5503 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5505 profiles_type
= tvb_get_ntohl(tvb
, foffset
);
5506 proto_tree_add_uint(ndps_tree
, hf_ndps_list_profiles_type
, tvb
, foffset
, 4, profiles_type
);
5508 if (profiles_type
==0) /* Spec */
5510 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
5511 profiles_choice_type
= tvb_get_ntohl(tvb
, foffset
);
5512 proto_tree_add_uint(ndps_tree
, hf_ndps_list_profiles_choice_type
, tvb
, foffset
, 4, profiles_choice_type
);
5514 if (profiles_choice_type
==0) /* Choice */
5516 foffset
= cardinal_seq(tvb
, ndps_tree
, foffset
);
5520 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Consumer");
5521 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5522 foffset
= qualifiedname(tvb
, atree
, foffset
);
5523 proto_item_set_end(aitem
, tvb
, foffset
);
5524 /* Start of NameorID */
5525 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
5526 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5527 foffset
= name_or_id(tvb
, atree
, foffset
);
5528 /* End of NameorID */
5529 proto_tree_add_item(atree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5531 proto_item_set_end(aitem
, tvb
, foffset
);
5533 proto_tree_add_item(ndps_tree
, hf_ndps_list_profiles_result_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5535 /* Start of integeroption */
5536 integer_type_flag
= tvb_get_ntohl(tvb
, foffset
);
5537 proto_tree_add_uint(ndps_tree
, hf_ndps_integer_type_flag
, tvb
, foffset
, 4, integer_type_flag
);
5539 if (integer_type_flag
!=0)
5541 proto_tree_add_item(ndps_tree
, hf_ndps_integer_type_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5544 /* End of integeroption */
5548 length
= tvb_get_ntohl(tvb
, foffset
);
5549 proto_tree_add_uint(ndps_tree
, hf_ndps_context_len
, tvb
, foffset
, 4, length
);
5553 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
5554 proto_tree_add_item(ndps_tree
, hf_ndps_context
, tvb
, foffset
, length
, ENC_NA
);
5557 foffset
+= (length
%2);
5558 proto_tree_add_item(ndps_tree
, hf_ndps_abort_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5562 case 0x0000001f: /* Cancel PSM Shutdown */
5563 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5565 /* Start of NameorID */
5566 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Cancel Shutdown Message Option");
5567 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5568 foffset
= name_or_id(tvb
, atree
, foffset
);
5569 proto_item_set_end(aitem
, tvb
, foffset
);
5570 /* End of NameorID */
5571 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5573 case 0x00000020: /* Set Printer DS Information */
5574 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5576 proto_tree_add_item(ndps_tree
, hf_ndps_ds_info_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5578 foffset
= ndps_string(tvb
, hf_ndps_printer_name
, ndps_tree
, foffset
, NULL
);
5579 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "DS Object Name");
5580 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5581 foffset
= qualifiedname(tvb
, atree
, foffset
);
5582 proto_item_set_end(aitem
, tvb
, foffset
);
5584 case 0x00000021: /* Clean User Jobs */
5585 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5587 /* Start of NameorID */
5588 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Clean Message Option");
5589 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5590 foffset
= name_or_id(tvb
, atree
, foffset
);
5591 proto_item_set_end(aitem
, tvb
, foffset
);
5592 /* End of NameorID */
5593 foffset
= commonarguments(tvb
, ndps_tree
, foffset
);
5595 case 0x00000022: /* Map GUID to NDS Name */
5596 length
= tvb_get_ntohl(tvb
, foffset
);
5600 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
5601 proto_tree_add_item(ndps_tree
, hf_ndps_guid
, tvb
, foffset
, length
, ENC_NA
);
5605 case 0x00000023: /* AddEventProfile2 */
5606 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5608 /* Start of Eventhandling2 */
5609 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5611 proto_tree_add_item(ndps_tree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5613 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Consumer Name");
5614 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5615 foffset
= qualifiedname(tvb
, atree
, foffset
);
5616 proto_item_set_end(aitem
, tvb
, foffset
);
5617 foffset
= ndps_string(tvb
, hf_ndps_supplier_name
, ndps_tree
, foffset
, NULL
);
5618 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5620 /* Start of NameorID */
5621 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
5622 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5623 foffset
= name_or_id(tvb
, atree
, foffset
);
5624 foffset
+= align_4(tvb
, foffset
);
5625 proto_item_set_end(aitem
, tvb
, foffset
);
5626 /* End of NameorID */
5627 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Delivery Address");
5628 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5629 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5630 proto_tree_add_uint(atree
, hf_ndps_delivery_add_count
, tvb
, foffset
, 4, number_of_items
);
5632 for (ii
= 0; ii
< number_of_items
; ii
++ )
5634 if (ii
>= NDPS_MAX_ITEMS
) {
5635 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5638 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Address %u", ii
+1);
5639 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5640 foffset
= address_item(tvb
, btree
, foffset
);
5641 proto_item_set_end(bitem
, tvb
, foffset
);
5643 proto_item_set_end(aitem
, tvb
, foffset
);
5644 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
5645 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Account");
5646 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5647 foffset
= qualifiedname(tvb
, atree
, foffset
);
5648 proto_item_set_end(aitem
, tvb
, foffset
);
5649 /* Start of object identifier set */
5650 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Notify Attributes");
5651 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5652 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5653 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
5655 for (ii
= 0; ii
< number_of_items
; ii
++ )
5657 if (ii
>= NDPS_MAX_ITEMS
) {
5658 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5661 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %u", ii
+1);
5662 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5663 foffset
= objectidentifier(tvb
, btree
, foffset
);
5664 proto_item_set_end(bitem
, tvb
, foffset
);
5666 proto_item_set_end(aitem
, tvb
, foffset
);
5667 /* End of object identifier set */
5668 proto_tree_add_item(ndps_tree
, hf_notify_time_interval
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5670 proto_tree_add_item(ndps_tree
, hf_notify_sequence_number
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5672 proto_tree_add_item(ndps_tree
, hf_notify_lease_exp_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5674 foffset
= ndps_string(tvb
, hf_notify_printer_uri
, ndps_tree
, foffset
, NULL
);
5675 /* End of Eventhandling2 */
5677 case 0x00000024: /* ListEventProfiles2 */
5678 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5680 profiles_type
= tvb_get_ntohl(tvb
, foffset
);
5681 proto_tree_add_uint(ndps_tree
, hf_ndps_list_profiles_type
, tvb
, foffset
, 4, profiles_type
);
5683 if (profiles_type
==0) /* Spec */
5685 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Supplier Alias");
5686 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5687 foffset
= qualifiedname(tvb
, atree
, foffset
);
5688 proto_item_set_end(aitem
, tvb
, foffset
);
5689 profiles_choice_type
= tvb_get_ntohl(tvb
, foffset
);
5690 proto_tree_add_uint(ndps_tree
, hf_ndps_list_profiles_choice_type
, tvb
, foffset
, 4, profiles_choice_type
);
5692 if (profiles_choice_type
==0) /* Choice */
5694 foffset
= cardinal_seq(tvb
, ndps_tree
, foffset
);
5698 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Consumer");
5699 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5700 foffset
= qualifiedname(tvb
, atree
, foffset
);
5701 proto_item_set_end(aitem
, tvb
, foffset
);
5702 /* Start of NameorID */
5703 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
5704 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5705 foffset
= name_or_id(tvb
, atree
, foffset
);
5706 proto_item_set_end(aitem
, tvb
, foffset
);
5707 /* End of NameorID */
5708 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5711 proto_tree_add_item(ndps_tree
, hf_ndps_list_profiles_result_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5713 /* Start of integeroption */
5714 integer_type_flag
= tvb_get_ntohl(tvb
, foffset
);
5715 proto_tree_add_uint(ndps_tree
, hf_ndps_integer_type_flag
, tvb
, foffset
, 4, integer_type_flag
);
5717 if (integer_type_flag
!=0)
5719 proto_tree_add_item(ndps_tree
, hf_ndps_integer_type_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5722 /* End of integeroption */
5726 length
= tvb_get_ntohl(tvb
, foffset
);
5727 proto_tree_add_uint(ndps_tree
, hf_ndps_context_len
, tvb
, foffset
, 4, length
);
5731 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
5732 proto_tree_add_item(ndps_tree
, hf_ndps_context
, tvb
, foffset
, length
, ENC_NA
);
5735 foffset
+= (length
%2);
5736 proto_tree_add_item(ndps_tree
, hf_ndps_abort_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5744 case 0x060977: /* Broker */
5747 case 0x00000001: /* Bind */
5748 foffset
= credentials(tvb
, ndps_tree
, foffset
);
5749 proto_tree_add_item(ndps_tree
, hf_ndps_retrieve_restrictions
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5751 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
5752 proto_tree_add_uint(ndps_tree
, hf_ndps_bind_security_option_count
, tvb
, foffset
, 4, number_of_items
);
5754 for (ii
= 0; ii
< number_of_items
; ii
++ )
5756 if (ii
>= NDPS_MAX_ITEMS
) {
5757 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
5760 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Security %u", ii
+1);
5761 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5762 length
= tvb_get_ntohl(tvb
, foffset
);
5766 proto_tree_add_item(atree
, hf_bind_security
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
5768 proto_item_set_end(aitem
, tvb
, foffset
);
5771 case 0x00000002: /* Unbind */
5773 case 0x00000003: /* List Services */
5774 proto_tree_add_item(ndps_tree
, hf_ndps_list_services_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5777 case 0x00000004: /* Enable Service */
5778 proto_tree_add_item(ndps_tree
, hf_ndps_service_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5780 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Parameters");
5781 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5782 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
5783 proto_tree_add_uint(atree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
5785 for (ii
= 0; ii
< number_of_items
; ii
++ )
5787 if (ii
>= NDPS_MAX_ITEMS
) {
5788 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5791 length
= tvb_get_ntohl(tvb
, foffset
);
5795 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
5796 proto_tree_add_item(atree
, hf_ndps_item_bytes
, tvb
, foffset
, length
, ENC_NA
);
5800 proto_item_set_end(aitem
, tvb
, foffset
);
5802 case 0x00000005: /* Disable Service */
5803 proto_tree_add_item(ndps_tree
, hf_ndps_list_services_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5806 case 0x00000006: /* Down Broker */
5807 case 0x00000007: /* Get Broker NDS Object Name */
5808 case 0x00000008: /* Get Broker Session Information */
5813 case 0x060978: /* Registry */
5816 case 0x00000001: /* Bind */
5817 foffset
= credentials(tvb
, ndps_tree
, foffset
);
5818 proto_tree_add_item(ndps_tree
, hf_ndps_retrieve_restrictions
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5820 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
5821 proto_tree_add_uint(ndps_tree
, hf_ndps_bind_security_option_count
, tvb
, foffset
, 4, number_of_items
);
5823 for (ii
= 0; ii
< number_of_items
; ii
++ )
5825 if (ii
>= NDPS_MAX_ITEMS
) {
5826 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
5829 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Security %d", ii
+1);
5830 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5831 length
= tvb_get_ntohl(tvb
, foffset
);
5835 proto_tree_add_item(atree
, hf_bind_security
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
5837 proto_item_set_end(aitem
, tvb
, foffset
);
5840 case 0x00000002: /* Unbind */
5842 case 0x00000003: /* Register Server */
5843 foffset
= server_entry(tvb
, ndps_tree
, foffset
);
5845 case 0x00000004: /* Deregister Server */
5846 case 0x00000006: /* Deregister Registry */
5847 case 0x0000000b: /* Get Registry NDS Object Name */
5848 case 0x0000000c: /* Get Registry Session Information */
5851 case 0x00000005: /* Register Registry */
5852 foffset
= ndps_string(tvb
, hf_ndps_registry_name
, ndps_tree
, foffset
, NULL
);
5853 foffset
= print_address(tvb
, ndps_tree
, foffset
);
5855 case 0x00000007: /* Registry Update */
5856 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Add");
5857 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5858 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5859 proto_tree_add_uint(atree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
5861 for (ii
= 0; ii
< number_of_items
; ii
++ )
5863 if (ii
>= NDPS_MAX_ITEMS
) {
5864 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5867 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Entry %u", ii
+1);
5868 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5869 foffset
= server_entry(tvb
, btree
, foffset
);
5870 proto_item_set_end(bitem
, tvb
, foffset
);
5872 proto_item_set_end(aitem
, tvb
, foffset
);
5873 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Remove");
5874 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5875 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5876 proto_tree_add_uint(atree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
5878 for (ii
= 0; ii
< number_of_items
; ii
++ )
5880 if (ii
>= NDPS_MAX_ITEMS
) {
5881 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
5884 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Entry %u", ii
+1);
5885 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
5886 foffset
= server_entry(tvb
, btree
, foffset
);
5887 proto_item_set_end(bitem
, tvb
, foffset
);
5889 proto_item_set_end(aitem
, tvb
, foffset
);
5891 case 0x00000008: /* List Local Servers */
5892 case 0x00000009: /* List Servers */
5893 case 0x0000000a: /* List Known Registries */
5894 local_servers_type
= tvb_get_ntohl(tvb
, foffset
);
5895 proto_tree_add_uint(ndps_tree
, hf_ndps_list_local_servers_type
, tvb
, foffset
, 4, local_servers_type
);
5897 if (local_servers_type
==0)
5899 /* Start of integeroption */
5900 integer_type_flag
= tvb_get_ntohl(tvb
, foffset
);
5901 proto_tree_add_uint(ndps_tree
, hf_ndps_integer_type_flag
, tvb
, foffset
, 4, integer_type_flag
);
5903 if (integer_type_flag
!=0)
5905 proto_tree_add_item(ndps_tree
, hf_ndps_integer_type_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5908 /* End of integeroption */
5912 length
= tvb_get_ntohl(tvb
, foffset
);
5913 proto_tree_add_uint(ndps_tree
, hf_ndps_context_len
, tvb
, foffset
, 4, length
);
5917 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
5918 proto_tree_add_item(ndps_tree
, hf_ndps_context
, tvb
, foffset
, length
, ENC_NA
);
5921 foffset
+= (length
%2);
5922 proto_tree_add_item(ndps_tree
, hf_ndps_abort_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5930 case 0x060979: /* Notify */
5933 case 0x00000001: /* Notify Bind */
5934 foffset
= credentials(tvb
, ndps_tree
, foffset
);
5935 proto_tree_add_item(ndps_tree
, hf_ndps_retrieve_restrictions
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5937 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
5939 for (ii
= 0; ii
< number_of_items
; ii
++ )
5941 if (ii
>= NDPS_MAX_ITEMS
) {
5942 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
5945 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Security %d", ii
+1);
5946 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5947 length
= tvb_get_ntohl(tvb
, foffset
);
5951 proto_tree_add_item(atree
, hf_bind_security
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
5953 proto_item_set_end(aitem
, tvb
, foffset
);
5956 case 0x00000002: /* Notify Unbind */
5957 case 0x0000000a: /* List Supported Languages */
5958 case 0x00000010: /* Get Notify NDS Object Name */
5959 case 0x00000011: /* Get Notify Session Information */
5962 case 0x00000003: /* Register Supplier */
5963 foffset
= ndps_string(tvb
, hf_ndps_supplier_name
, ndps_tree
, foffset
, NULL
);
5964 /* Start of QualifiedName Set*/
5965 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
5966 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
5968 for (ii
= 0; ii
< number_of_items
; ii
++ )
5970 if (ii
>= NDPS_MAX_ITEMS
) {
5971 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
5974 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Supplier Alias %u", ii
+1);
5975 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5976 foffset
= qualifiedname(tvb
, atree
, foffset
);
5977 proto_item_set_end(aitem
, tvb
, foffset
);
5979 /* End of QualifiedName Set*/
5981 case 0x00000004: /* Deregister Supplier */
5982 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5985 case 0x00000005: /* Add Profile */
5986 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5988 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Supplier Alias");
5989 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5990 foffset
= qualifiedname(tvb
, atree
, foffset
);
5991 proto_item_set_end(aitem
, tvb
, foffset
);
5992 /* Start of Eventhandling */
5993 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5995 proto_tree_add_item(ndps_tree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
5997 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Consumer Name");
5998 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
5999 foffset
= qualifiedname(tvb
, atree
, foffset
);
6000 proto_item_set_end(aitem
, tvb
, foffset
);
6001 length
= tvb_get_ntohl(tvb
, foffset
);
6005 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
6008 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6010 /* Start of NameorID */
6011 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
6012 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6013 foffset
= name_or_id(tvb
, atree
, foffset
);
6014 proto_item_set_end(aitem
, tvb
, foffset
);
6015 /* End of NameorID */
6016 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6017 proto_tree_add_uint(ndps_tree
, hf_ndps_delivery_add_count
, tvb
, foffset
, 4, number_of_items
);
6019 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Delivery Addresses");
6020 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6021 for (ii
= 0; ii
< number_of_items
; ii
++ )
6023 if (ii
>= NDPS_MAX_ITEMS
) {
6024 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
6027 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Address %d", ii
+1);
6028 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6029 foffset
= address_item(tvb
, btree
, foffset
);
6030 proto_item_set_end(bitem
, tvb
, foffset
);
6032 proto_item_set_end(aitem
, tvb
, foffset
);
6033 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
6034 /* End of Eventhandling */
6036 case 0x00000006: /* Remove Profile */
6037 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6039 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6042 case 0x00000007: /* Modify Profile */
6043 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6045 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6047 supplier_flag
= tvb_get_ntohl(tvb
, foffset
);
6048 proto_tree_add_boolean(ndps_tree
, hf_ndps_supplier_flag
, tvb
, foffset
, 4, supplier_flag
);
6052 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Supplier ID");
6053 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6054 length
= tvb_get_ntohl(tvb
, foffset
);
6058 proto_tree_add_item(atree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
6060 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
6062 proto_item_set_end(aitem
, tvb
, foffset
);
6064 language_flag
= tvb_get_ntohl(tvb
, foffset
);
6065 proto_tree_add_boolean(ndps_tree
, hf_ndps_language_flag
, tvb
, foffset
, 4, language_flag
);
6069 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6072 method_flag
= tvb_get_ntohl(tvb
, foffset
);
6073 proto_tree_add_boolean(ndps_tree
, hf_ndps_method_flag
, tvb
, foffset
, 4, method_flag
);
6077 /* Start of NameorID */
6078 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
6079 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6080 foffset
= name_or_id(tvb
, atree
, foffset
);
6081 proto_item_set_end(aitem
, tvb
, foffset
);
6082 /* End of NameorID */
6084 delivery_address_flag
= tvb_get_ntohl(tvb
, foffset
);
6085 proto_tree_add_boolean(ndps_tree
, hf_ndps_delivery_address_flag
, tvb
, foffset
, 4, delivery_address_flag
);
6087 if (delivery_address_flag
)
6089 foffset
= print_address(tvb
, ndps_tree
, foffset
);
6091 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
6093 case 0x00000008: /* List Profiles */
6094 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6096 profiles_type
= tvb_get_ntohl(tvb
, foffset
);
6097 proto_tree_add_uint(ndps_tree
, hf_ndps_list_profiles_type
, tvb
, foffset
, 4, profiles_type
);
6099 if (profiles_type
==0) /* Spec */
6101 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Supplier Alias");
6102 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6103 foffset
= qualifiedname(tvb
, atree
, foffset
);
6104 profiles_choice_type
= tvb_get_ntohl(tvb
, foffset
);
6105 proto_tree_add_uint(atree
, hf_ndps_list_profiles_choice_type
, tvb
, foffset
, 4, profiles_choice_type
);
6107 proto_item_set_end(aitem
, tvb
, foffset
);
6108 if (profiles_choice_type
==0) /* Choice */
6110 foffset
= cardinal_seq(tvb
, ndps_tree
, foffset
);
6114 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Consumer");
6115 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6116 foffset
= qualifiedname(tvb
, atree
, foffset
);
6117 proto_item_set_end(aitem
, tvb
, foffset
);
6118 /* Start of NameorID */
6119 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
6120 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6121 foffset
= name_or_id(tvb
, atree
, foffset
);
6122 /* End of NameorID */
6123 proto_tree_add_item(atree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6125 proto_item_set_end(aitem
, tvb
, foffset
);
6127 proto_tree_add_item(ndps_tree
, hf_ndps_list_profiles_result_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6129 /* Start of integeroption */
6130 integer_type_flag
= tvb_get_ntohl(tvb
, foffset
);
6131 proto_tree_add_uint(ndps_tree
, hf_ndps_integer_type_flag
, tvb
, foffset
, 4, integer_type_flag
);
6133 if (integer_type_flag
!=0)
6135 proto_tree_add_item(ndps_tree
, hf_ndps_integer_type_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6138 /* End of integeroption */
6142 length
= tvb_get_ntohl(tvb
, foffset
);
6143 proto_tree_add_uint(ndps_tree
, hf_ndps_context_len
, tvb
, foffset
, 4, length
);
6147 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
6148 proto_tree_add_item(ndps_tree
, hf_ndps_context
, tvb
, foffset
, length
, ENC_NA
);
6151 foffset
+= (length
%2);
6152 proto_tree_add_item(ndps_tree
, hf_ndps_abort_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6156 case 0x00000009: /* Report Event */
6157 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6159 /* Start of ReportEventItemSet */
6160 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6161 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
6163 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Event Items");
6164 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6165 for (ii
= 0; ii
< number_of_items
; ii
++ )
6167 if (ii
>= NDPS_MAX_ITEMS
) {
6168 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
6171 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Item %d", ii
+1);
6172 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6173 /* Start of ReportEventItem */
6174 proto_tree_add_item(btree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6176 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Containing Class");
6177 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
6178 foffset
= objectidentifier(tvb
, ctree
, foffset
);
6179 proto_item_set_end(citem
, tvb
, foffset
);
6180 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Containing Object");
6181 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
6182 foffset
= objectidentification(tvb
, ctree
, foffset
);
6183 proto_item_set_end(citem
, tvb
, foffset
);
6184 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Filter Class");
6185 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
6186 foffset
= objectidentifier(tvb
, ctree
, foffset
);
6187 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Object Class");
6188 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
6189 foffset
= objectidentifier(tvb
, ctree
, foffset
);
6190 proto_item_set_end(citem
, tvb
, foffset
);
6191 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Object ID");
6192 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
6193 foffset
= objectidentification(tvb
, ctree
, foffset
);
6194 proto_item_set_end(citem
, tvb
, foffset
);
6195 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Event Object ID");
6196 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
6197 foffset
= objectidentifier(tvb
, ctree
, foffset
);
6198 proto_item_set_end(citem
, tvb
, foffset
);
6199 /* Start of AttributeSet */
6200 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6201 proto_tree_add_uint(btree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
6203 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Attribute Modifications");
6204 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
6205 for (jj
= 0; jj
< number_of_items
; jj
++ )
6207 if (jj
>= NDPS_MAX_ITEMS
) {
6208 proto_tree_add_text(ctree
, tvb
, foffset
, -1, "[Truncated]");
6211 ditem
= proto_tree_add_text(ctree
, tvb
, foffset
, -1, "Modification %d", jj
+1);
6212 dtree
= proto_item_add_subtree(ditem
, ett_ndps
);
6213 foffset
= attribute_value(tvb
, dtree
, foffset
); /* Object Attribute Set */
6214 proto_item_set_end(ditem
, tvb
, foffset
);
6216 proto_item_set_end(citem
, tvb
, foffset
);
6217 /* End of AttributeSet */
6218 foffset
= ndps_string(tvb
, hf_ndps_message
, btree
, foffset
, NULL
);
6219 proto_tree_add_item(btree
, hf_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6221 proto_item_set_end(bitem
, tvb
, foffset
);
6222 /* End of ReportEventItem */
6224 proto_item_set_end(aitem
, tvb
, foffset
);
6225 /* End of ReportEventItemSet */
6227 case 0x0000000b: /* Report Notification */
6228 /* Start of DestinationSet */
6229 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6230 proto_tree_add_uint(ndps_tree
, hf_ndps_num_destinations
, tvb
, foffset
, 4, number_of_items
);
6232 for (ii
= 0; ii
< number_of_items
; ii
++ )
6234 if (ii
>= NDPS_MAX_ITEMS
) {
6235 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
6238 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Destination %d", ii
+1);
6239 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6240 /* Start of Destination */
6241 /* Start of NameorID */
6242 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Method ID");
6243 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6244 foffset
= name_or_id(tvb
, btree
, foffset
);
6245 proto_item_set_end(bitem
, tvb
, foffset
);
6246 /* End of NameorID */
6247 /* Start of NotifyDeliveryAddr */
6248 proto_tree_add_item(atree
, hf_address_len
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6250 foffset
= print_address(tvb
, atree
, foffset
);
6251 /* End of NotifyDeliveryAddr */
6252 proto_item_set_end(aitem
, tvb
, foffset
);
6253 /* End of Destination */
6255 /* End of DestinationSet */
6256 foffset
= ndps_string(tvb
, hf_ndps_supplier_name
, ndps_tree
, foffset
, NULL
);
6257 proto_tree_add_item(ndps_tree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6259 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Containing Class");
6260 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6261 foffset
= objectidentifier(tvb
, atree
, foffset
);
6262 proto_item_set_end(aitem
, tvb
, foffset
);
6263 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Containing Object");
6264 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6265 foffset
= objectidentification(tvb
, atree
, foffset
);
6266 proto_item_set_end(aitem
, tvb
, foffset
);
6267 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Filter Class");
6268 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6269 foffset
= objectidentifier(tvb
, atree
, foffset
);
6270 proto_item_set_end(aitem
, tvb
, foffset
);
6271 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Class");
6272 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6273 foffset
= objectidentifier(tvb
, atree
, foffset
);
6274 proto_item_set_end(aitem
, tvb
, foffset
);
6275 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object ID");
6276 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6277 foffset
= objectidentification(tvb
, atree
, foffset
);
6278 proto_item_set_end(aitem
, tvb
, foffset
);
6279 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Event Object ID");
6280 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6281 foffset
= objectidentifier(tvb
, atree
, foffset
);
6282 proto_item_set_end(aitem
, tvb
, foffset
);
6283 /* Start of AttributeSet */
6284 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6285 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
6287 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Attributes");
6288 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6289 for (ii
= 0; ii
< number_of_items
; ii
++ )
6291 if (ii
>= NDPS_MAX_ITEMS
) {
6292 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
6295 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %d", ii
+1);
6296 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6297 foffset
= attribute_value(tvb
, btree
, foffset
);
6298 proto_item_set_end(bitem
, tvb
, foffset
);
6300 proto_item_set_end(aitem
, tvb
, foffset
);
6301 /* End of AttributeSet */
6302 foffset
= ndps_string(tvb
, hf_ndps_message
, ndps_tree
, foffset
, NULL
);
6303 proto_tree_add_item(ndps_tree
, hf_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6305 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Account");
6306 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6307 foffset
= qualifiedname(tvb
, atree
, foffset
);
6308 proto_item_set_end(aitem
, tvb
, foffset
);
6310 case 0x0000000c: /* Add Delivery Method */
6311 foffset
= ndps_string(tvb
, hf_ndps_file_name
, ndps_tree
, foffset
, NULL
);
6313 case 0x0000000d: /* Remove Delivery Method */
6314 /* Start of NameorID */
6315 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
6316 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6317 foffset
= name_or_id(tvb
, atree
, foffset
);
6318 proto_item_set_end(aitem
, tvb
, foffset
);
6319 /* End of NameorID */
6321 case 0x0000000e: /* List Delivery Methods */
6322 cred_type
= tvb_get_ntohl(tvb
, foffset
);
6323 proto_tree_add_item(ndps_tree
, hf_delivery_method_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6327 case 0: /* Specification */
6328 /* Start of integeroption */
6329 integer_type_flag
= tvb_get_ntohl(tvb
, foffset
);
6330 proto_tree_add_uint(ndps_tree
, hf_ndps_integer_type_flag
, tvb
, foffset
, 4, integer_type_flag
);
6332 if (integer_type_flag
!=0)
6334 proto_tree_add_item(ndps_tree
, hf_ndps_integer_type_value
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6337 /* End of integeroption */
6338 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6341 case 1: /* Continuation */
6342 length
= tvb_get_ntohl(tvb
, foffset
);
6343 proto_tree_add_uint(ndps_tree
, hf_ndps_context_len
, tvb
, foffset
, 4, length
);
6347 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
6348 proto_tree_add_item(ndps_tree
, hf_ndps_context
, tvb
, foffset
, length
, ENC_NA
);
6351 foffset
+= (length
%2);
6352 proto_tree_add_item(ndps_tree
, hf_ndps_abort_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6359 case 0x0000000f: /* Get Delivery Method Information */
6360 /* Start of NameorID */
6361 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
6362 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6363 foffset
= name_or_id(tvb
, atree
, foffset
);
6364 proto_item_set_end(aitem
, tvb
, foffset
);
6365 /* End of NameorID */
6366 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6373 case 0x06097a: /* Resman */
6376 case 0x00000001: /* Bind */
6377 foffset
= credentials(tvb
, ndps_tree
, foffset
);
6378 proto_tree_add_item(ndps_tree
, hf_ndps_retrieve_restrictions
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6380 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
6381 proto_tree_add_uint(ndps_tree
, hf_ndps_bind_security_option_count
, tvb
, foffset
, 4, number_of_items
);
6383 for (ii
= 0; ii
< number_of_items
; ii
++ )
6385 if (ii
>= NDPS_MAX_ITEMS
) {
6386 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
6389 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Security %d", ii
+1);
6390 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6391 length
= tvb_get_ntohl(tvb
, foffset
);
6395 proto_tree_add_item(atree
, hf_bind_security
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
6397 proto_item_set_end(aitem
, tvb
, foffset
);
6400 case 0x00000002: /* Unbind */
6401 case 0x00000008: /* Get Resource Manager NDS Object Name */
6402 case 0x00000009: /* Get Resource Manager Session Information */
6405 case 0x00000003: /* Add Resource File */
6406 proto_tree_add_item(ndps_tree
, hf_packet_count
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6408 proto_tree_add_item(ndps_tree
, hf_last_packet_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6410 proto_tree_add_item(ndps_tree
, hf_file_timestamp
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6412 foffset
= res_add_input_data(tvb
, ndps_tree
, foffset
);
6413 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
6414 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
6416 for (ii
= 0; ii
< number_of_items
; ii
++ )
6418 if (ii
>= NDPS_MAX_ITEMS
) {
6419 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
6422 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %d", ii
+1);
6423 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6424 length
=tvb_get_ntohl(tvb
, foffset
);
6425 length_remaining
= tvb_length_remaining(tvb
, foffset
);
6426 if(length_remaining
== -1 || (guint32
) length_remaining
< length
)
6430 proto_tree_add_item(atree
, hf_ndps_item_ptr
, tvb
, foffset
, length
, ENC_NA
);
6432 proto_item_set_end(aitem
, tvb
, foffset
);
6435 case 0x00000004: /* Delete Resource File */
6436 foffset
= res_add_input_data(tvb
, ndps_tree
, foffset
);
6438 case 0x00000005: /* List Resources */
6439 proto_tree_add_item(ndps_tree
, hf_ndps_max_items
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6441 proto_tree_add_item(ndps_tree
, hf_ndps_status_flags
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6443 proto_tree_add_item(ndps_tree
, hf_ndps_resource_list_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6444 resource_type
= tvb_get_ntohl(tvb
, foffset
);
6446 switch (resource_type
)
6448 case 0: /* Print Drivers */
6449 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6452 case 1: /* Printer Definitions */
6453 case 2: /* Printer Definitions Short */
6454 foffset
= ndps_string(tvb
, hf_ndps_vendor_dir
, ndps_tree
, foffset
, NULL
);
6456 case 3: /* Banner Page Files */
6457 proto_tree_add_item(ndps_tree
, hf_banner_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6460 case 4: /* Font Types */
6461 proto_tree_add_item(ndps_tree
, hf_font_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6463 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6466 case 5: /* Printer Driver Files */
6467 case 12: /* Printer Driver Files 2 */
6468 case 9: /* Generic Files */
6469 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6471 foffset
= ndps_string(tvb
, hf_ndps_printer_type
, ndps_tree
, foffset
, NULL
);
6472 foffset
= ndps_string(tvb
, hf_ndps_printer_manuf
, ndps_tree
, foffset
, NULL
);
6473 foffset
= ndps_string(tvb
, hf_ndps_inf_file_name
, ndps_tree
, foffset
, NULL
);
6474 field_len
= tvb_get_ntohl(tvb
, foffset
);
6476 proto_tree_add_item(ndps_tree
, hf_printer_id
, tvb
, foffset
, field_len
, ENC_NA
);
6478 case 6: /* Printer Definition File */
6479 case 10: /* Printer Definition File 2 */
6480 foffset
= ndps_string(tvb
, hf_ndps_vendor_dir
, ndps_tree
, foffset
, NULL
);
6482 foffset
= ndps_string(tvb
, hf_ndps_printer_type
, ndps_tree
, foffset
, NULL
);
6483 foffset
= ndps_string(tvb
, hf_ndps_printer_manuf
, ndps_tree
, foffset
, NULL
);
6484 foffset
= ndps_string(tvb
, hf_ndps_inf_file_name
, ndps_tree
, foffset
, NULL
);
6485 field_len
= tvb_get_ntohl(tvb
, foffset
);
6487 proto_tree_add_item(ndps_tree
, hf_printer_id
, tvb
, foffset
, field_len
, ENC_NA
);
6489 case 7: /* Font Files */
6490 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6492 proto_tree_add_item(ndps_tree
, hf_font_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6494 foffset
= ndps_string(tvb
, hf_ndps_font_name
, ndps_tree
, foffset
, NULL
);
6496 case 8: /* Generic Type */
6497 case 11: /* Printer Driver Types 2 */
6498 case 13: /* Printer Driver Types Archive */
6499 foffset
= ndps_string(tvb
, hf_ndps_printer_manuf
, ndps_tree
, foffset
, NULL
);
6500 foffset
= ndps_string(tvb
, hf_ndps_printer_type
, ndps_tree
, foffset
, NULL
);
6501 foffset
= ndps_string(tvb
, hf_ndps_inf_file_name
, ndps_tree
, foffset
, NULL
);
6503 case 14: /* Languages Available */
6509 case 0x00000006: /* Get Resource File */
6510 proto_tree_add_item(ndps_tree
, hf_get_status_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6512 proto_tree_add_item(ndps_tree
, hf_res_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6513 resource_type
= tvb_get_ntohl(tvb
, foffset
);
6515 switch (resource_type
)
6517 case 0: /* Print Drivers */
6518 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6520 foffset
= ndps_string(tvb
, hf_ndps_prn_dir_name
, ndps_tree
, foffset
, NULL
);
6521 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, ndps_tree
, foffset
, NULL
);
6523 case 1: /* Printer Definitions */
6524 foffset
= ndps_string(tvb
, hf_ndps_vendor_dir
, ndps_tree
, foffset
, NULL
);
6525 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, ndps_tree
, foffset
, NULL
);
6527 case 2: /* Banner Page Files */
6528 foffset
= ndps_string(tvb
, hf_ndps_banner_name
, ndps_tree
, foffset
, NULL
);
6530 case 3: /* Font Types */
6531 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6533 proto_tree_add_item(ndps_tree
, hf_font_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6535 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, ndps_tree
, foffset
, NULL
);
6537 case 4: /* Generic Files/ Archive */
6538 case 5: /* Printer Driver Archive */
6539 proto_tree_add_item(ndps_tree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6541 foffset
= ndps_string(tvb
, hf_ndps_prn_dir_name
, ndps_tree
, foffset
, NULL
);
6542 proto_tree_add_item(ndps_tree
, hf_archive_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6549 case 0x00000007: /* Get Resource File Date */
6550 proto_tree_add_item(ndps_tree
, hf_ndps_status_flags
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6552 foffset
= res_add_input_data(tvb
, ndps_tree
, foffset
);
6554 case 0x0000000a: /* Set Resource Language Context */
6555 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6562 case 0x06097b: /* Delivery */
6565 case 0x00000001: /* Delivery Bind */
6566 foffset
= credentials(tvb
, ndps_tree
, foffset
);
6568 case 0x00000002: /* Delivery Unbind */
6571 case 0x00000003: /* Delivery Send */
6572 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6573 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
6575 for (ii
= 0; ii
< number_of_items
; ii
++ )
6577 if (ii
>= NDPS_MAX_ITEMS
) {
6578 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
6581 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %d", ii
+1);
6582 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6583 proto_tree_add_item(atree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6585 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Supplier ID");
6586 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6587 length
= tvb_get_ntohl(tvb
, foffset
);
6591 proto_tree_add_item(btree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
6594 proto_tree_add_item(btree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6596 proto_item_set_end(bitem
, tvb
, foffset
);
6597 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Containing Class");
6598 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6599 foffset
= objectidentifier(tvb
, btree
, foffset
);
6600 proto_item_set_end(bitem
, tvb
, foffset
);
6601 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Containing Object");
6602 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6603 foffset
= objectidentification(tvb
, btree
, foffset
);
6604 proto_item_set_end(bitem
, tvb
, foffset
);
6605 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Filter Class");
6606 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6607 foffset
= objectidentifier(tvb
, btree
, foffset
);
6608 proto_item_set_end(bitem
, tvb
, foffset
);
6609 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Object Class");
6610 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6611 foffset
= objectidentifier(tvb
, btree
, foffset
);
6612 proto_item_set_end(bitem
, tvb
, foffset
);
6613 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Object ID");
6614 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6615 foffset
= objectidentification(tvb
, btree
, foffset
);
6616 proto_item_set_end(bitem
, tvb
, foffset
);
6617 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Event Object ID");
6618 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6619 foffset
= objectidentifier(tvb
, btree
, foffset
);
6620 foffset
= attribute_value(tvb
, atree
, foffset
);
6621 foffset
= ndps_string(tvb
, hf_ndps_message
, atree
, foffset
, NULL
);
6622 proto_tree_add_item(atree
, hf_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6624 proto_item_set_end(bitem
, tvb
, foffset
);
6625 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Account");
6626 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6627 foffset
= qualifiedname(tvb
, btree
, foffset
);
6628 proto_item_set_end(bitem
, tvb
, foffset
);
6629 proto_item_set_end(aitem
, tvb
, foffset
);
6632 case 0x00000004: /* Delivery Send2 */
6633 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6634 proto_tree_add_uint(ndps_tree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items
);
6636 for (ii
= 0; ii
< number_of_items
; ii
++ )
6638 if (ii
>= NDPS_MAX_ITEMS
) {
6639 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
6642 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object %d", ii
+1);
6643 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6644 proto_tree_add_item(atree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6646 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Supplier ID");
6647 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6648 length
= tvb_get_ntohl(tvb
, foffset
);
6652 proto_tree_add_item(btree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
6655 proto_tree_add_item(atree
, hf_ndps_event_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6657 proto_item_set_end(bitem
, tvb
, foffset
);
6658 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Containing Class");
6659 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6660 foffset
= objectidentifier(tvb
, btree
, foffset
);
6661 proto_item_set_end(bitem
, tvb
, foffset
);
6662 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Containing Object");
6663 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6664 foffset
= objectidentification(tvb
, btree
, foffset
);
6665 proto_item_set_end(bitem
, tvb
, foffset
);
6666 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Filter Class");
6667 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6668 foffset
= objectidentifier(tvb
, btree
, foffset
);
6669 proto_item_set_end(bitem
, tvb
, foffset
);
6670 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Object Class");
6671 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6672 foffset
= objectidentifier(tvb
, btree
, foffset
);
6673 proto_item_set_end(bitem
, tvb
, foffset
);
6674 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Object ID");
6675 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6676 foffset
= objectidentification(tvb
, btree
, foffset
);
6677 proto_item_set_end(bitem
, tvb
, foffset
);
6678 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Event Object ID");
6679 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6680 foffset
= objectidentifier(tvb
, btree
, foffset
);
6681 proto_item_set_end(bitem
, tvb
, foffset
);
6682 /* Start of AttributeSet */
6683 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6684 proto_tree_add_uint(atree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
6686 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute");
6687 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6688 for (ii
= 0; ii
< number_of_items
; ii
++ )
6690 if (ii
>= NDPS_MAX_ITEMS
) {
6691 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
6694 foffset
= attribute_value(tvb
, btree
, foffset
);
6696 proto_item_set_end(bitem
, tvb
, foffset
);
6697 /* End of AttributeSet */
6698 foffset
= ndps_string(tvb
, hf_ndps_message
, atree
, foffset
, NULL
);
6699 proto_tree_add_item(atree
, hf_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6701 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Account");
6702 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6703 foffset
= qualifiedname(tvb
, btree
, foffset
);
6704 proto_item_set_end(bitem
, tvb
, foffset
);
6705 proto_item_set_end(aitem
, tvb
, foffset
);
6719 ndps_error(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*ndps_tree
, int foffset
)
6721 guint32 number_of_items
;
6722 guint32 ndps_problem_type
;
6723 guint32 problem_type
;
6729 proto_item
*expert_item
;
6731 ndps_problem_type
= tvb_get_ntohl(tvb
, foffset
);
6732 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
6733 expert_item
= proto_tree_add_uint(ndps_tree
, hf_ndps_problem_type
, tvb
, foffset
, 4, ndps_problem_type
);
6734 expert_add_info_format(pinfo
, expert_item
, &ei_ndps_problem_type
, "Fault: %s", val_to_str(ndps_problem_type
, error_type_enum
, "Unknown NDPS Error (0x%08x)"));
6736 switch(ndps_problem_type
)
6738 case 0: /* Security Error */
6739 problem_type
= tvb_get_ntohl(tvb
, foffset
);
6740 proto_tree_add_uint(ndps_tree
, hf_problem_type
, tvb
, foffset
, 4, problem_type
);
6742 if (problem_type
==0) /* Standard Error */
6744 proto_tree_add_item(ndps_tree
, hf_security_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6747 else /* Extended Error */
6749 /* Start of objectidentifier */
6750 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Extended Error");
6751 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6752 foffset
= objectidentifier(tvb
, atree
, foffset
);
6753 proto_item_set_end(aitem
, tvb
, foffset
);
6754 /* End of objectidentifier */
6756 /* Start of NameorID */
6757 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Message");
6758 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6759 foffset
= name_or_id(tvb
, atree
, foffset
);
6760 proto_item_set_end(aitem
, tvb
, foffset
);
6761 /* End of NameorID */
6763 case 1: /* Service Error */
6764 proto_tree_add_item(ndps_tree
, hf_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6766 if (tvb_get_ntohl(tvb
, foffset
-4)==0) /* Standard Error */
6768 proto_tree_add_item(ndps_tree
, hf_service_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6771 else /* Extended Error */
6773 /* Start of objectidentifier */
6774 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Extended Error");
6775 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6776 foffset
= objectidentifier(tvb
, atree
, foffset
);
6777 proto_item_set_end(aitem
, tvb
, foffset
);
6778 /* End of objectidentifier */
6780 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
6781 foffset
= attribute_value(tvb
, ndps_tree
, foffset
); /* Object Attribute Set */
6782 proto_tree_add_item(ndps_tree
, hf_ndps_lib_error
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6784 proto_tree_add_item(ndps_tree
, hf_ndps_other_error
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6786 proto_tree_add_item(ndps_tree
, hf_ndps_other_error_2
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6788 if (tvb_length_remaining(tvb
, foffset
) >= 4) {
6789 foffset
= ndps_string(tvb
, hf_ndps_other_error_string
, ndps_tree
, foffset
, NULL
);
6792 case 2: /* Access Error */
6793 proto_tree_add_item(ndps_tree
, hf_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6795 if (tvb_get_ntohl(tvb
, foffset
-4)==0) /* Standard Error */
6797 proto_tree_add_item(ndps_tree
, hf_access_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6800 else /* Extended Error */
6802 /* Start of objectidentifier */
6803 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Extended Error");
6804 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6805 foffset
= objectidentifier(tvb
, atree
, foffset
);
6806 proto_item_set_end(aitem
, tvb
, foffset
);
6807 /* End of objectidentifier */
6809 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
6811 case 3: /* Printer Error */
6812 proto_tree_add_item(ndps_tree
, hf_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6814 if (tvb_get_ntohl(tvb
, foffset
-4)==0) /* Standard Error */
6816 proto_tree_add_item(ndps_tree
, hf_printer_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6819 else /* Extended Error */
6821 /* Start of objectidentifier */
6822 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Extended Error");
6823 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6824 foffset
= objectidentifier(tvb
, atree
, foffset
);
6825 proto_item_set_end(aitem
, tvb
, foffset
);
6826 /* End of objectidentifier */
6828 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
6830 case 4: /* Selection Error */
6831 proto_tree_add_item(ndps_tree
, hf_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6833 if (tvb_get_ntohl(tvb
, foffset
-4)==0) /* Standard Error */
6835 proto_tree_add_item(ndps_tree
, hf_selection_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6838 else /* Extended Error */
6840 /* Start of objectidentifier */
6841 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Extended Error");
6842 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6843 foffset
= objectidentifier(tvb
, atree
, foffset
);
6844 proto_item_set_end(aitem
, tvb
, foffset
);
6845 /* End of objectidentifier */
6847 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
6848 foffset
= attribute_value(tvb
, ndps_tree
, foffset
); /* Object Attribute Set */
6850 case 5: /* Document Access Error */
6851 proto_tree_add_item(ndps_tree
, hf_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6853 if (tvb_get_ntohl(tvb
, foffset
-4)==0) /* Standard Error */
6855 proto_tree_add_item(ndps_tree
, hf_doc_access_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6856 foffset
= objectidentifier(tvb
, ndps_tree
, foffset
);
6858 else /* Extended Error */
6860 /* Start of objectidentifier */
6861 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Extended Error");
6862 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6863 foffset
= objectidentifier(tvb
, atree
, foffset
);
6864 proto_item_set_end(aitem
, tvb
, foffset
);
6865 /* End of objectidentifier */
6867 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
6869 case 6: /* Attribute Error */
6870 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
6871 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
6873 for (ii
= 0; ii
< number_of_items
; ii
++ )
6875 if (ii
>= NDPS_MAX_ITEMS
) {
6876 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
6879 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %d", ii
+1);
6880 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6881 proto_tree_add_item(atree
, hf_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6883 if (tvb_get_ntohl(tvb
, foffset
-4)==0) /* Standard Error */
6885 proto_tree_add_item(atree
, hf_attribute_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6888 else /* Extended Error */
6890 /* Start of objectidentifier */
6891 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Extended Error");
6892 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
6893 foffset
= objectidentifier(tvb
, btree
, foffset
);
6894 proto_item_set_end(bitem
, tvb
, foffset
);
6895 /* End of objectidentifier */
6897 foffset
= attribute_value(tvb
, atree
, foffset
); /* Object Attribute Set */
6898 proto_item_set_end(aitem
, tvb
, foffset
);
6901 case 7: /* Update Error */
6902 proto_tree_add_item(ndps_tree
, hf_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6904 if (tvb_get_ntohl(tvb
, foffset
-4)==0) /* Standard Error */
6906 proto_tree_add_item(ndps_tree
, hf_update_problem_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6909 else /* Extended Error */
6911 /* Start of objectidentifier */
6912 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Extended Error");
6913 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
6914 foffset
= objectidentifier(tvb
, atree
, foffset
);
6915 proto_item_set_end(aitem
, tvb
, foffset
);
6916 /* End of objectidentifier */
6918 foffset
= objectidentification(tvb
, ndps_tree
, foffset
);
6927 return_code(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*ndps_tree
, int foffset
)
6929 guint32 expert_status
;
6930 proto_item
*expert_item
;
6932 expert_status
= tvb_get_ntohl(tvb
, foffset
);
6933 expert_item
= proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6934 if (expert_status
!= 0) {
6935 expert_add_info_format(pinfo
, expert_item
, &ei_ndps_return_code
, "Fault: %s", val_to_str(expert_status
, ndps_error_types
, "Unknown NDPS Error (0x%08x)"));
6938 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
6939 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
6940 if (tvb_get_ntohl(tvb
, foffset
-4) == 0)
6944 proto_tree_add_item(ndps_tree
, hf_ndps_ext_error
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
6950 dissect_ndps_reply(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*ndps_tree
, int foffset
)
6952 conversation_t
*conversation
= NULL
;
6953 ndps_req_hash_value
*request_value
= NULL
;
6965 guint32 number_of_items
=0;
6966 guint32 number_of_items2
=0;
6967 guint32 number_of_items3
=0;
6969 guint32 ndps_func
=0;
6970 guint32 ndps_prog
=0;
6971 guint32 error_val
=0;
6972 guint32 resource_type
=0;
6973 gint length_remaining
;
6974 proto_item
*expert_item
;
6975 guint32 expert_status
;
6977 if (!pinfo
->fd
->flags
.visited
) {
6978 /* Find the conversation whence the request would have come. */
6979 conversation
= find_conversation(pinfo
->fd
->num
, &pinfo
->src
, &pinfo
->dst
,
6980 PT_NCP
, (guint32
) pinfo
->destport
, (guint32
) pinfo
->destport
, 0);
6981 if (conversation
!= NULL
) {
6982 /* find the record telling us the request made that caused
6984 request_value
= ndps_hash_lookup(conversation
, (guint32
) pinfo
->destport
);
6985 p_add_proto_data(pinfo
->fd
, proto_ndps
, 0, (void*) request_value
);
6987 /* else... we haven't seen an NDPS Request for that conversation. */
6990 request_value
= (ndps_req_hash_value
*)p_get_proto_data(pinfo
->fd
, proto_ndps
, 0);
6992 if (request_value
) {
6993 ndps_prog
= request_value
->ndps_prog
;
6994 ndps_func
= request_value
->ndps_func
;
6995 proto_tree_add_uint_format(ndps_tree
, hf_ndps_reqframe
, tvb
, 0,
6996 0, request_value
->ndps_frame_num
,
6997 "Response to Request in Frame Number: %u",
6998 request_value
->ndps_frame_num
);
7001 if (tvb_length_remaining(tvb
, foffset
) < 12 && tvb_get_ntohl(tvb
, foffset
) == 0) /* No error and no return data */
7003 proto_tree_add_uint(ndps_tree
, hf_ndps_error_val
, tvb
, foffset
, 4, error_val
);
7004 col_append_str(pinfo
->cinfo
, COL_INFO
, "- Ok");
7007 if(ndps_func
== 1 || ndps_func
== 2)
7009 expert_item
= proto_tree_add_item(ndps_tree
, hf_ndps_rpc_acc_stat
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7010 expert_status
= tvb_get_ntohl(tvb
, foffset
);
7011 if (expert_status
!= 0) {
7012 expert_add_info_format(pinfo
, expert_item
, &ei_ndps_rpc_acc_stat
, "Fault: %s", val_to_str(expert_status
, accept_stat
, "Unknown NDPS Error (0x%08x)"));
7015 if (tvb_length_remaining(tvb
,foffset
) < 4 ) {
7016 col_append_str(pinfo
->cinfo
, COL_INFO
, "- Error");
7019 proto_tree_add_item(ndps_tree
, hf_ndps_rpc_acc_results
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7021 if (tvb_length_remaining(tvb
,foffset
) < 4) {
7022 col_append_str(pinfo
->cinfo
, COL_INFO
, "- Error");
7026 error_val
= tvb_get_ntohl(tvb
, foffset
);
7027 proto_tree_add_uint(ndps_tree
, hf_ndps_error_val
, tvb
, foffset
, 4, error_val
);
7029 /* Some functions return an error with no data, 0 is ok */
7030 if (try_val_to_str(tvb_get_ntohl(tvb
, foffset
), ndps_error_types
) && tvb_length_remaining(tvb
,foffset
) < 8 && (tvb_get_ntohl(tvb
, foffset
)!=0))
7032 expert_status
= tvb_get_ntohl(tvb
, foffset
);
7033 expert_item
= proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7034 expert_add_info_format(pinfo
, expert_item
, &ei_ndps_return_code
, "Fault: %s", val_to_str(expert_status
, ndps_error_types
, "Unknown NDPS Error (0x%08x)"));
7035 col_append_str(pinfo
->cinfo
, COL_INFO
, "- Error");
7038 col_append_str(pinfo
->cinfo
, COL_INFO
, "- Ok");
7041 case 0x060976: /* Print */
7044 case 0x00000001: /* Bind PSM */
7045 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7049 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7050 if(tvb_length_remaining(tvb
, foffset
) < 4)
7054 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7057 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "PSM Name");
7058 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7059 foffset
= qualifiedname(tvb
, atree
, foffset
);
7060 proto_item_set_end(aitem
, tvb
, foffset
);
7062 case 0x00000002: /* Bind PA */
7063 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7067 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7068 if(tvb_length_remaining(tvb
, foffset
) < 4)
7072 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7075 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
7077 case 0x00000003: /* Unbind */
7079 case 0x00000004: /* Print */
7080 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ndps_tree
, foffset
, NULL
);
7081 proto_tree_add_item(ndps_tree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7085 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7088 case 0x00000005: /* Modify Job */
7089 case 0x00000006: /* Cancel Job */
7090 case 0x00000008: /* Promote Job */
7091 case 0x0000000b: /* Resume */
7092 case 0x0000000d: /* Create */
7093 /* Start of AttributeSet */
7094 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7095 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
7097 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Attribute Set");
7098 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7099 for (ii
= 0; ii
< number_of_items
; ii
++ )
7101 if (ii
>= NDPS_MAX_ITEMS
) {
7102 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7105 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %d", ii
+1);
7106 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7107 foffset
= attribute_value(tvb
, btree
, foffset
); /* Object Attribute Set */
7108 proto_item_set_end(bitem
, tvb
, foffset
);
7110 proto_item_set_end(aitem
, tvb
, foffset
);
7111 /* End of AttributeSet */
7114 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7117 case 0x00000007: /* List Object Attributes */
7118 proto_tree_add_item(ndps_tree
, hf_answer_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7120 /* Continuation Option */
7121 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Continuation Option");
7122 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7123 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
7124 proto_tree_add_uint(atree
, hf_ndps_num_options
, tvb
, foffset
, 4, number_of_items
);
7126 for (ii
= 0; ii
< number_of_items
; ii
++ )
7128 if (ii
>= NDPS_MAX_ITEMS
) {
7129 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7132 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Option %d", ii
+1);
7133 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7134 length
=tvb_get_ntohl(tvb
, foffset
);
7135 length_remaining
= tvb_length_remaining(tvb
, foffset
);
7136 if(length_remaining
== -1 || (guint32
) length_remaining
< length
)
7140 proto_tree_add_item(btree
, hf_ndps_item_ptr
, tvb
, foffset
, length
, ENC_NA
);
7142 proto_item_set_end(bitem
, tvb
, foffset
);
7144 proto_item_set_end(aitem
, tvb
, foffset
);
7145 /* Limit Encountered Option */
7146 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Limit Encountered Option");
7147 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7148 proto_tree_add_item(atree
, hf_ndps_len
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7150 proto_tree_add_item(atree
, hf_ndps_limit_enc
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7152 proto_item_set_end(aitem
, tvb
, foffset
);
7153 /* Object Results Set */
7154 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Results Set");
7155 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7156 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
7157 proto_tree_add_uint(atree
, hf_ndps_num_results
, tvb
, foffset
, 4, number_of_items
);
7159 for (ii
= 0; ii
< number_of_items
; ii
++ )
7161 if (ii
>= NDPS_MAX_ITEMS
) {
7162 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated Result]");
7165 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Results: (%d)", ii
+1);
7166 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7170 foffset
= objectidentification(tvb
, btree
, foffset
);
7171 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
7172 proto_tree_add_uint(btree
, hf_ndps_num_objects
, tvb
, foffset
, 4, number_of_items2
);
7174 for (jj
= 0; jj
< number_of_items2
; jj
++ )
7176 if (jj
>= NDPS_MAX_ITEMS
) {
7177 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated Object]");
7180 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Object: (%d)", jj
+1);
7181 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
7182 foffset
= objectidentifier(tvb
, ctree
, foffset
);
7183 foffset
+= align_4(tvb
, foffset
);
7184 number_of_items3
= tvb_get_ntohl(tvb
, foffset
);
7185 proto_tree_add_uint(ctree
, hf_ndps_num_values
, tvb
, foffset
, 4, number_of_items3
);
7187 for (kk
= 0; kk
< number_of_items3
; kk
++ )
7189 if (kk
>= NDPS_MAX_ITEMS
) {
7190 proto_tree_add_text(ctree
, tvb
, foffset
, -1, "[Truncated Value]");
7193 ditem
= proto_tree_add_text(ctree
, tvb
, foffset
, -1, "Value: (%d)", kk
+1);
7194 dtree
= proto_item_add_subtree(ditem
, ett_ndps
);
7195 foffset
= attribute_value(tvb
, dtree
, foffset
);
7196 proto_item_set_end(ditem
, tvb
, foffset
);
7198 proto_tree_add_item(ctree
, hf_ndps_qualifier
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7200 foffset
+= align_4(tvb
, foffset
);
7201 proto_item_set_end(citem
, tvb
, foffset
);
7204 /*foffset += align_4(tvb, foffset);*/
7205 foffset
= objectidentifier(tvb
, btree
, foffset
);
7206 /*foffset += align_4(tvb, foffset);*/
7207 proto_item_set_end(bitem
, tvb
, foffset
);
7209 proto_item_set_end(aitem
, tvb
, foffset
);
7212 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7215 case 0x00000009: /* Interrupt */
7216 case 0x0000000a: /* Pause */
7217 /* Start of NWDPPrtContainedObjectId */
7218 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job ID");
7219 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7220 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, atree
, foffset
, NULL
);
7221 proto_tree_add_item(atree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7223 proto_item_set_end(aitem
, tvb
, foffset
);
7224 /* End of NWDPPrtContainedObjectId */
7225 /* Start of AttributeSet */
7226 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7227 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
7229 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Object Attribute Set");
7230 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7231 for (ii
= 0; ii
< number_of_items
; ii
++ )
7233 if (ii
>= NDPS_MAX_ITEMS
) {
7234 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7237 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Attribute %d", ii
+1);
7238 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7239 foffset
= attribute_value(tvb
, btree
, foffset
); /* Object Attribute Set */
7240 proto_item_set_end(bitem
, tvb
, foffset
);
7242 proto_item_set_end(aitem
, tvb
, foffset
);
7243 /* End of AttributeSet */
7246 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7249 case 0x0000000c: /* Clean */
7250 case 0x0000000e: /* Delete */
7251 case 0x0000000f: /* Disable PA */
7252 case 0x00000010: /* Enable PA */
7253 case 0x00000012: /* Set */
7254 case 0x00000013: /* Shutdown PA */
7255 case 0x00000014: /* Startup PA */
7256 case 0x00000018: /* Transfer Data */
7257 case 0x00000019: /* Device Control */
7258 case 0x0000001b: /* Remove Event Profile */
7259 case 0x0000001c: /* Modify Event Profile */
7260 case 0x0000001e: /* Shutdown PSM */
7261 case 0x0000001f: /* Cancel PSM Shutdown */
7262 case 0x00000020: /* Set Printer DS Information */
7263 case 0x00000021: /* Clean User Jobs */
7266 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7269 case 0x00000011: /* Resubmit Jobs */
7270 number_of_items
= tvb_get_ntohl(tvb
, foffset
); /* Start of ResubmitJob Set */
7271 proto_tree_add_uint(ndps_tree
, hf_ndps_num_jobs
, tvb
, foffset
, 4, number_of_items
);
7273 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Resubmit Job");
7274 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7275 for (ii
= 0; ii
< number_of_items
; ii
++ )
7277 if (ii
>= NDPS_MAX_ITEMS
) {
7278 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7281 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Job %d", ii
+1);
7282 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7283 /* Start of NWDPPrtContainedObjectId */
7284 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Old Job");
7285 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
7286 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ctree
, foffset
, NULL
);
7287 proto_tree_add_item(ctree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7289 proto_item_set_end(citem
, tvb
, foffset
);
7290 /* End of NWDPPrtContainedObjectId */
7291 /* Start of NWDPPrtContainedObjectId */
7292 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "New Job");
7293 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
7294 foffset
= ndps_string(tvb
, hf_ndps_pa_name
, ctree
, foffset
, NULL
);
7295 proto_tree_add_item(ctree
, hf_local_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7297 proto_item_set_end(citem
, tvb
, foffset
);
7298 /* End of NWDPPrtContainedObjectId */
7299 /* Start of AttributeSet */
7300 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
7301 proto_tree_add_uint(ctree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items2
);
7303 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Job Status");
7304 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
7305 for (jj
= 0; jj
< number_of_items2
; jj
++ )
7307 if (jj
>= NDPS_MAX_ITEMS
) {
7308 proto_tree_add_text(ctree
, tvb
, foffset
, -1, "[Truncated]");
7311 ditem
= proto_tree_add_text(ctree
, tvb
, foffset
, -1, "Object %d", jj
+1);
7312 dtree
= proto_item_add_subtree(ditem
, ett_ndps
);
7313 foffset
= attribute_value(tvb
, dtree
, foffset
); /* Object Attribute Set */
7314 proto_item_set_end(ditem
, tvb
, foffset
);
7316 proto_item_set_end(citem
, tvb
, foffset
);
7317 proto_item_set_end(bitem
, tvb
, foffset
);
7318 /* End of AttributeSet */
7320 proto_item_set_end(aitem
, tvb
, foffset
);
7321 /* End of ResubmitJob Set */
7324 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7327 case 0x00000015: /* Reorder Job */
7328 /* Start of AttributeSet */
7329 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Job Status");
7330 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7331 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7332 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
7334 for (ii
= 0; ii
< number_of_items
; ii
++ )
7336 if (ii
>= NDPS_MAX_ITEMS
) {
7337 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7340 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Object %d", ii
+1);
7341 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7342 foffset
= attribute_value(tvb
, btree
, foffset
); /* Object Attribute Set */
7343 proto_item_set_end(bitem
, tvb
, foffset
);
7345 proto_item_set_end(aitem
, tvb
, foffset
);
7346 /* End of AttributeSet */
7349 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7352 case 0x00000016: /* Pause PA */
7353 case 0x00000017: /* Resume PA */
7354 /* Start of AttributeSet */
7355 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Printer Status");
7356 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7357 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7358 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
7360 for (ii
= 0; ii
< number_of_items
; ii
++ )
7362 if (ii
>= NDPS_MAX_ITEMS
) {
7363 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7366 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Object %d", ii
+1);
7367 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7368 foffset
= attribute_value(tvb
, btree
, foffset
); /* Object Attribute Set */
7369 proto_item_set_end(bitem
, tvb
, foffset
);
7371 proto_item_set_end(aitem
, tvb
, foffset
);
7372 /* End of AttributeSet */
7375 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7378 case 0x0000001a: /* Add Event Profile */
7379 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7383 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7386 case 0x0000001d: /* List Event Profiles */
7387 length
= tvb_get_ntohl(tvb
, foffset
);
7391 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
7394 /* Start of Eventhandling */
7395 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7397 proto_tree_add_item(ndps_tree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7399 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Consumer Name");
7400 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7401 foffset
= qualifiedname(tvb
, atree
, foffset
);
7402 length
= tvb_get_ntohl(tvb
, foffset
);
7406 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
7409 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7411 proto_item_set_end(aitem
, tvb
, foffset
);
7412 /* Start of NameorID */
7413 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
7414 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7415 foffset
= name_or_id(tvb
, atree
, foffset
);
7416 proto_item_set_end(aitem
, tvb
, foffset
);
7417 /* End of NameorID */
7418 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Delivery Addresses");
7419 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7420 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7421 proto_tree_add_uint(ndps_tree
, hf_ndps_delivery_add_count
, tvb
, foffset
, 4, number_of_items
);
7423 for (ii
= 0; ii
< number_of_items
; ii
++ )
7425 if (ii
>= NDPS_MAX_ITEMS
) {
7426 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7429 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Address %d", ii
+1);
7430 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7431 foffset
= address_item(tvb
, btree
, foffset
);
7432 proto_item_set_end(bitem
, tvb
, foffset
);
7434 proto_item_set_end(aitem
, tvb
, foffset
);
7435 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
7436 /* End of Eventhandling */
7437 length
= tvb_get_ntohl(tvb
, foffset
);
7441 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7442 proto_tree_add_item(ndps_tree
, hf_ndps_continuation_option
, tvb
, foffset
, length
, ENC_NA
);
7447 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7450 case 0x00000022: /* Map GUID to NDS Name */
7451 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "NDS Printer Name");
7452 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7453 foffset
= qualifiedname(tvb
, atree
, foffset
);
7454 proto_item_set_end(aitem
, tvb
, foffset
);
7457 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7460 case 0x00000023: /* AddEventProfile2 */
7461 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7463 proto_tree_add_item(ndps_tree
, hf_notify_lease_exp_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7467 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7470 case 0x00000024: /* ListEventProfiles2 */
7471 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7472 proto_tree_add_uint(ndps_tree
, hf_ndps_num_events
, tvb
, foffset
, 4, number_of_items
);
7474 for (ii
= 0; ii
< number_of_items
; ii
++ )
7476 if (ii
>= NDPS_MAX_ITEMS
) {
7477 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7480 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Event %d", ii
+1);
7481 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7482 /* Start of Eventhandling2 */
7483 proto_tree_add_item(atree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7485 proto_tree_add_item(atree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7487 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Consumer Name");
7488 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7489 foffset
= qualifiedname(tvb
, btree
, foffset
);
7490 foffset
= ndps_string(tvb
, hf_ndps_supplier_name
, atree
, foffset
, NULL
);
7491 proto_tree_add_item(atree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7493 proto_item_set_end(bitem
, tvb
, foffset
);
7494 /* Start of NameorID */
7495 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Method ID");
7496 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7497 foffset
= name_or_id(tvb
, btree
, foffset
);
7498 foffset
+= align_4(tvb
, foffset
);
7499 proto_item_set_end(bitem
, tvb
, foffset
);
7500 /* End of NameorID */
7501 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7502 proto_tree_add_uint(atree
, hf_ndps_delivery_add_count
, tvb
, foffset
, 4, number_of_items
);
7504 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Delivery Addresses");
7505 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7506 for (ii
= 0; ii
< number_of_items
; ii
++ )
7508 if (ii
>= NDPS_MAX_ITEMS
) {
7509 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
7512 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Address %d", ii
+1);
7513 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
7514 foffset
= address_item(tvb
, ctree
, foffset
);
7515 proto_item_set_end(citem
, tvb
, foffset
);
7517 proto_item_set_end(bitem
, tvb
, foffset
);
7518 foffset
= event_object_set(tvb
, atree
, foffset
);
7519 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Account");
7520 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7521 foffset
= qualifiedname(tvb
, btree
, foffset
);
7522 proto_item_set_end(bitem
, tvb
, foffset
);
7523 /* Start of object identifier set */
7524 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Notify Attributes");
7525 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7526 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7527 proto_tree_add_uint(btree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
7529 for (ii
= 0; ii
< number_of_items
; ii
++ )
7531 if (ii
>= NDPS_MAX_ITEMS
) {
7532 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
7535 citem
= proto_tree_add_text(btree
, tvb
, foffset
, -1, "Attribute %d", ii
+1);
7536 ctree
= proto_item_add_subtree(citem
, ett_ndps
);
7537 foffset
= objectidentifier(tvb
, ctree
, foffset
);
7538 proto_item_set_end(citem
, tvb
, foffset
);
7540 proto_item_set_end(bitem
, tvb
, foffset
);
7541 /* End of object identifier set */
7542 proto_tree_add_item(atree
, hf_notify_time_interval
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7544 proto_tree_add_item(atree
, hf_notify_sequence_number
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7546 proto_tree_add_item(atree
, hf_notify_lease_exp_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7548 foffset
= ndps_string(tvb
, hf_notify_printer_uri
, atree
, foffset
, NULL
);
7549 proto_item_set_end(aitem
, tvb
, foffset
);
7550 /* End of Eventhandling2 */
7551 length
= tvb_get_ntohl(tvb
, foffset
); /* Added on 10-17-03 */
7555 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7556 proto_tree_add_item(ndps_tree
, hf_ndps_continuation_option
, tvb
, foffset
, length
, ENC_NA
);
7561 foffset
= ndps_error(tvb
, pinfo
, ndps_tree
, foffset
);
7569 case 0x060977: /* Broker */
7572 case 0x00000001: /* Bind */
7573 case 0x00000002: /* Unbind */
7574 case 0x00000004: /* Enable Service */
7575 case 0x00000005: /* Disable Service */
7576 case 0x00000006: /* Down Broker */
7577 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7579 case 0x00000003: /* List Services */
7580 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7581 proto_tree_add_uint(ndps_tree
, hf_ndps_num_services
, tvb
, foffset
, 4, number_of_items
);
7583 for (ii
= 0; ii
< number_of_items
; ii
++ )
7585 if (ii
>= NDPS_MAX_ITEMS
) {
7586 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7589 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Service %d", ii
+1);
7590 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7591 proto_tree_add_item(atree
, hf_ndps_service_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7593 proto_tree_add_item(atree
, hf_ndps_service_enabled
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7595 proto_item_set_end(aitem
, tvb
, foffset
);
7597 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7599 case 0x00000007: /* Get Broker NDS Object Name */
7600 proto_tree_add_item(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
,
7601 4, ENC_BIG_ENDIAN
); /* XXX - what does this count? */
7603 foffset
= ndps_string(tvb
, hf_ndps_broker_name
, ndps_tree
, foffset
, NULL
);
7604 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
7605 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7607 case 0x00000008: /* Get Broker Session Information */
7612 case 0x060978: /* Registry */
7615 case 0x00000001: /* Bind */
7616 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7617 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
7619 for (ii
= 0; ii
< number_of_items
; ii
++ )
7621 if (ii
>= NDPS_MAX_ITEMS
) {
7622 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7625 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Attribute %d", ii
+1);
7626 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7627 length
= tvb_get_ntohl(tvb
, foffset
);
7631 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7632 proto_tree_add_item(atree
, hf_ndps_attribute_set
, tvb
, foffset
, length
, ENC_NA
);
7634 proto_item_set_end(aitem
, tvb
, foffset
);
7637 case 0x00000002: /* Unbind */
7640 case 0x00000003: /* Register Server */
7641 case 0x00000004: /* Deregister Server */
7642 case 0x00000005: /* Register Registry */
7643 case 0x00000006: /* Deregister Registry */
7644 case 0x00000007: /* Registry Update */
7645 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7647 case 0x00000008: /* List Local Servers */
7648 case 0x00000009: /* List Servers */
7649 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7650 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
7652 for (ii
= 0; ii
< number_of_items
; ii
++ )
7654 if (ii
>= NDPS_MAX_ITEMS
) {
7655 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7658 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %d", ii
+1);
7659 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7660 foffset
= server_entry(tvb
, atree
, foffset
);
7661 proto_item_set_end(aitem
, tvb
, foffset
);
7663 length
= tvb_get_ntohl(tvb
, foffset
);
7667 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7668 proto_tree_add_item(ndps_tree
, hf_ndps_continuation_option
, tvb
, foffset
, length
, ENC_NA
);
7671 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7673 case 0x0000000a: /* List Known Registries */
7674 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7675 proto_tree_add_item(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7677 for (ii
= 0; ii
< number_of_items
; ii
++ )
7679 if (ii
>= NDPS_MAX_ITEMS
) {
7680 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7683 aitem
= proto_tree_add_item(ndps_tree
, hf_ndps_client_server_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7684 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7686 foffset
= ndps_string(tvb
, hf_ndps_registry_name
, atree
, foffset
, NULL
);
7687 foffset
= print_address(tvb
, atree
, foffset
);
7689 length
= tvb_get_ntohl(tvb
, foffset
);
7693 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7694 proto_tree_add_item(ndps_tree
, hf_ndps_continuation_option
, tvb
, foffset
, length
, ENC_NA
);
7697 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7699 case 0x0000000b: /* Get Registry NDS Object Name */
7700 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "NDS Printer Name");
7701 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7702 foffset
= qualifiedname(tvb
, atree
, foffset
);
7703 proto_item_set_end(aitem
, tvb
, foffset
);
7704 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7706 case 0x0000000c: /* Get Registry Session Information */
7707 proto_tree_add_item(ndps_tree
, hf_ndps_session_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7709 proto_tree_add_item(ndps_tree
, hf_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7711 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7717 case 0x060979: /* Notify */
7720 case 0x00000001: /* Notify Bind */
7721 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7722 proto_tree_add_uint(ndps_tree
, hf_ndps_num_attributes
, tvb
, foffset
, 4, number_of_items
);
7724 for (ii
= 0; ii
< number_of_items
; ii
++ )
7726 if (ii
>= NDPS_MAX_ITEMS
) {
7727 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7730 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Attribute %d", ii
+1);
7731 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7732 length
= tvb_get_ntohl(tvb
, foffset
);
7736 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7737 proto_tree_add_item(atree
, hf_ndps_attribute_set
, tvb
, foffset
, length
, ENC_NA
);
7739 proto_item_set_end(aitem
, tvb
, foffset
);
7742 case 0x00000002: /* Notify Unbind */
7745 case 0x00000003: /* Register Supplier */
7746 proto_tree_add_item(ndps_tree
, hf_ndps_session
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7748 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
7749 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7751 case 0x00000004: /* Deregister Supplier */
7752 case 0x0000000b: /* Report Notification */
7753 case 0x0000000d: /* Remove Delivery Method */
7754 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7756 case 0x00000005: /* Add Profile */
7757 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7759 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
7760 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7762 case 0x00000006: /* Remove Profile */
7763 case 0x00000007: /* Modify Profile */
7764 case 0x00000009: /* Report Event */
7765 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
7766 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7768 case 0x00000008: /* List Profiles */
7769 /* Start of ProfileResultSet */
7770 proto_tree_add_item(ndps_tree
, hf_ndps_len
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7772 /* Start of Eventhandling */
7773 proto_tree_add_item(ndps_tree
, hf_ndps_profile_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7775 proto_tree_add_item(ndps_tree
, hf_ndps_persistence
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7777 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Consumer Name");
7778 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7779 foffset
= qualifiedname(tvb
, atree
, foffset
);
7780 proto_item_set_end(aitem
, tvb
, foffset
);
7781 length
= tvb_get_ntohl(tvb
, foffset
);
7785 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_value
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
7788 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7790 /* Start of NameorID */
7791 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
7792 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7793 foffset
= name_or_id(tvb
, atree
, foffset
);
7794 proto_item_set_end(aitem
, tvb
, foffset
);
7795 /* End of NameorID */
7796 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Delivery Addresses");
7797 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7798 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7799 proto_tree_add_uint(ndps_tree
, hf_ndps_delivery_add_count
, tvb
, foffset
, 4, number_of_items
);
7801 for (ii
= 0; ii
< number_of_items
; ii
++ )
7803 if (ii
>= NDPS_MAX_ITEMS
) {
7804 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7807 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Address %d", ii
+1);
7808 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7809 foffset
= address_item(tvb
, btree
, foffset
);
7810 proto_item_set_end(bitem
, tvb
, foffset
);
7812 proto_item_set_end(aitem
, tvb
, foffset
);
7813 foffset
= event_object_set(tvb
, ndps_tree
, foffset
);
7814 /* End of Eventhandling */
7815 /* End of ProfileResultSet */
7816 length
= tvb_get_ntohl(tvb
, foffset
);
7820 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7821 proto_tree_add_item(ndps_tree
, hf_ndps_continuation_option
, tvb
, foffset
, length
, ENC_NA
);
7824 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7826 case 0x0000000a: /* List Supported Languages */
7827 /* Start of IntegerSeq */
7828 length
= tvb_get_ntohl(tvb
, foffset
);
7832 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, length
, ENC_BIG_ENDIAN
);
7835 /* End of IntegerSeq */
7836 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7838 case 0x0000000c: /* Add Delivery Method */
7839 /* Start of NameorID */
7840 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
7841 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7842 foffset
= name_or_id(tvb
, atree
, foffset
);
7843 proto_item_set_end(aitem
, tvb
, foffset
);
7844 /* End of NameorID */
7845 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7847 case 0x0000000e: /* List Delivery Methods */
7848 /* Start of DeliveryMethodSet */
7849 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7850 proto_tree_add_uint(ndps_tree
, hf_ndps_delivery_method_count
, tvb
, foffset
, 4, number_of_items
);
7852 for (ii
= 0; ii
< number_of_items
; ii
++ )
7854 if (ii
>= NDPS_MAX_ITEMS
) {
7855 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7858 /* Start of DeliveryMethod */
7859 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method %d", ii
+1);
7860 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7861 /* Start of NameorID */
7862 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Method ID");
7863 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7864 foffset
= name_or_id(tvb
, btree
, foffset
);
7865 foffset
+= align_4(tvb
, foffset
);
7866 proto_item_set_end(bitem
, tvb
, foffset
);
7867 /* End of NameorID */
7868 foffset
= ndps_string(tvb
, hf_ndps_method_name
, atree
, foffset
, NULL
);
7869 foffset
= ndps_string(tvb
, hf_ndps_method_ver
, atree
, foffset
, NULL
);
7870 foffset
= ndps_string(tvb
, hf_ndps_file_name
, atree
, foffset
, NULL
);
7871 proto_tree_add_item(atree
, hf_ndps_admin_submit
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7873 proto_item_set_end(aitem
, tvb
, foffset
);
7874 /* End of DeliveryMethod */
7876 /* End of DeliveryMethodSet */
7877 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7879 case 0x0000000f: /* Get Delivery Method Information */
7880 /* Start of DeliveryMethod */
7881 /* Start of NameorID */
7882 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Method ID");
7883 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7884 foffset
= name_or_id(tvb
, atree
, foffset
);
7885 /* End of NameorID */
7886 foffset
= ndps_string(tvb
, hf_ndps_method_name
, atree
, foffset
, NULL
);
7887 foffset
= ndps_string(tvb
, hf_ndps_method_ver
, atree
, foffset
, NULL
);
7888 foffset
= ndps_string(tvb
, hf_ndps_file_name
, atree
, foffset
, NULL
);
7889 proto_tree_add_item(atree
, hf_ndps_admin_submit
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7891 proto_item_set_end(aitem
, tvb
, foffset
);
7892 /* End of DeliveryMethod */
7893 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7894 proto_tree_add_uint(ndps_tree
, hf_ndps_delivery_add_count
, tvb
, foffset
, 4, number_of_items
);
7896 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Delivery Addresses");
7897 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7898 for (ii
= 0; ii
< number_of_items
; ii
++ )
7900 if (ii
>= NDPS_MAX_ITEMS
) {
7901 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
7904 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Address %d", ii
+1);
7905 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
7906 foffset
= address_item(tvb
, btree
, foffset
);
7907 proto_item_set_end(bitem
, tvb
, foffset
);
7909 proto_item_set_end(aitem
, tvb
, foffset
);
7910 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7912 case 0x00000010: /* Get Notify NDS Object Name */
7913 proto_tree_add_item(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
,
7914 4, ENC_BIG_ENDIAN
); /* XXX - what does this count? */
7916 foffset
= ndps_string(tvb
, hf_ndps_broker_name
, ndps_tree
, foffset
, NULL
);
7917 foffset
= ndps_string(tvb
, hf_ndps_tree
, ndps_tree
, foffset
, NULL
);
7918 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7920 case 0x00000011: /* Get Notify Session Information */
7921 proto_tree_add_item(ndps_tree
, hf_ndps_get_session_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7923 proto_tree_add_item(ndps_tree
, hf_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7925 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7931 case 0x06097a: /* Resman */
7934 case 0x00000001: /* Bind */
7935 length
= tvb_get_ntohl(tvb
, foffset
);
7939 tvb_ensure_bytes_exist(tvb
, foffset
, length
);
7940 proto_tree_add_item(ndps_tree
, hf_ndps_attribute_set
, tvb
, foffset
, length
, ENC_NA
);
7943 case 0x00000002: /* Unbind */
7946 case 0x00000003: /* Add Resource File */
7947 case 0x00000004: /* Delete Resource File */
7948 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
7950 case 0x00000005: /* List Resources */
7951 proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7953 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
7954 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
7955 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
7959 proto_tree_add_item(ndps_tree
, hf_ndps_status_flags
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7961 proto_tree_add_item(ndps_tree
, hf_ndps_resource_list_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
7962 resource_type
= tvb_get_ntohl(tvb
, foffset
);
7964 switch (resource_type
)
7966 case 0: /* Print Drivers */
7967 case 1: /* Printer Definitions */
7968 case 2: /* Printer Definitions Short */
7969 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
7970 proto_tree_add_uint(ndps_tree
, hf_ndps_printer_def_count
, tvb
, foffset
, 4, number_of_items
);
7972 for (ii
= 0; ii
< number_of_items
; ii
++ )
7974 if (ii
>= NDPS_MAX_ITEMS
) {
7975 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
7978 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Definition %d", ii
+1);
7979 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
7980 if (tvb_get_ntohl(tvb
, foffset
)==0) { /* Offset for old type support */
7983 foffset
+= 4; /* Item always == 1 */
7984 foffset
= ndps_string(tvb
, hf_ndps_printer_manuf
, atree
, foffset
, NULL
);
7985 if (tvb_get_ntohl(tvb
, foffset
)==0) {
7989 foffset
= ndps_string(tvb
, hf_ndps_printer_type
, atree
, foffset
, NULL
);
7990 if (tvb_get_ntohl(tvb
, foffset
)==0) {
7994 foffset
= ndps_string(tvb
, hf_ndps_inf_file_name
, atree
, foffset
, NULL
);
7995 proto_item_set_end(aitem
, tvb
, foffset
);
7998 case 3: /* Banner Page Files */
7999 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8000 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
8002 for (ii
= 0; ii
< number_of_items
; ii
++ )
8004 if (ii
>= NDPS_MAX_ITEMS
) {
8005 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8008 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Banner %d", ii
+1);
8009 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8010 foffset
= ndps_string(tvb
, hf_ndps_banner_name
, atree
, foffset
, NULL
);
8011 proto_item_set_end(aitem
, tvb
, foffset
);
8014 case 4: /* Font Types */
8015 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8016 proto_tree_add_uint(ndps_tree
, hf_ndps_font_type_count
, tvb
, foffset
, 4, number_of_items
);
8018 for (ii
= 0; ii
< number_of_items
; ii
++ )
8020 if (ii
>= NDPS_MAX_ITEMS
) {
8021 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8024 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Font %d", ii
+1);
8025 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8026 foffset
= ndps_string(tvb
, hf_font_type_name
, atree
, foffset
, NULL
);
8027 proto_item_set_end(aitem
, tvb
, foffset
);
8030 case 7: /* Font Files */
8031 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8032 proto_tree_add_uint(ndps_tree
, hf_ndps_font_file_count
, tvb
, foffset
, 4, number_of_items
);
8034 for (ii
= 0; ii
< number_of_items
; ii
++ )
8036 if (ii
>= NDPS_MAX_ITEMS
) {
8037 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8040 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Font File %d", ii
+1);
8041 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8042 foffset
= ndps_string(tvb
, hf_font_file_name
, atree
, foffset
, NULL
);
8043 proto_item_set_end(aitem
, tvb
, foffset
);
8046 case 5: /* Printer Driver Files */
8047 case 12: /* Printer Driver Files 2 */
8048 case 9: /* Generic Files */
8049 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8050 proto_tree_add_uint(ndps_tree
, hf_ndps_printer_def_count
, tvb
, foffset
, 4, number_of_items
);
8052 for (ii
= 0; ii
< number_of_items
; ii
++ )
8054 if (ii
>= NDPS_MAX_ITEMS
) {
8055 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8058 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "File %d", ii
+1);
8059 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8060 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, atree
, foffset
, NULL
);
8061 foffset
= ndps_string(tvb
, hf_ndps_prn_dir_name
, atree
, foffset
, NULL
);
8062 foffset
= ndps_string(tvb
, hf_ndps_inf_file_name
, atree
, foffset
, NULL
);
8063 proto_item_set_end(aitem
, tvb
, foffset
);
8066 case 6: /* Printer Definition File */
8067 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8068 proto_tree_add_uint(ndps_tree
, hf_ndps_printer_def_count
, tvb
, foffset
, 4, number_of_items
);
8070 for (ii
= 0; ii
< number_of_items
; ii
++ )
8072 if (ii
>= NDPS_MAX_ITEMS
) {
8073 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8076 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Definition %d", ii
+1);
8077 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8078 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, atree
, foffset
, NULL
);
8079 foffset
= ndps_string(tvb
, hf_ndps_prn_dir_name
, atree
, foffset
, NULL
);
8080 foffset
= ndps_string(tvb
, hf_ndps_inf_file_name
, atree
, foffset
, NULL
);
8081 proto_item_set_end(aitem
, tvb
, foffset
);
8083 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8084 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
8086 for (ii
= 0; ii
< number_of_items
; ii
++ )
8088 if (ii
>= NDPS_MAX_ITEMS
) {
8089 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8092 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Item %d", ii
+1);
8093 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8094 foffset
= ndps_string(tvb
, hf_ndps_def_file_name
, atree
, foffset
, NULL
);
8095 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
8096 proto_tree_add_uint(atree
, hf_ndps_num_win31_keys
, tvb
, foffset
, 4, number_of_items2
);
8097 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, 4, "Windows 3.1 Keys");
8098 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
8100 for (jj
= 0; jj
< number_of_items2
; jj
++ )
8102 if (jj
>= NDPS_MAX_ITEMS
) {
8103 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
8106 foffset
= ndps_string(tvb
, hf_ndps_windows_key
, btree
, foffset
, NULL
);
8108 proto_item_set_end(bitem
, tvb
, foffset
);
8109 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
8110 proto_tree_add_uint(atree
, hf_ndps_num_win95_keys
, tvb
, foffset
, 4, number_of_items2
);
8111 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, 4, "Windows 95 Keys");
8112 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
8114 for (jj
= 0; jj
< number_of_items2
; jj
++ )
8116 if (jj
>= NDPS_MAX_ITEMS
) {
8117 proto_tree_add_text(btree
, tvb
, foffset
, -1, "[Truncated]");
8120 foffset
= ndps_string(tvb
, hf_ndps_windows_key
, btree
, foffset
, NULL
);
8122 proto_item_set_end(bitem
, tvb
, foffset
);
8123 proto_item_set_end(aitem
, tvb
, foffset
);
8126 case 10: /* Printer Definition File 2 */
8127 foffset
= ndps_string(tvb
, hf_ndps_def_file_name
, ndps_tree
, foffset
, NULL
);
8128 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8129 proto_tree_add_uint(ndps_tree
, hf_os_count
, tvb
, foffset
, 4, number_of_items
);
8131 for (ii
= 0; ii
< number_of_items
; ii
++ )
8133 if (ii
>= NDPS_MAX_ITEMS
) {
8134 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8137 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "OS %d", ii
+1);
8138 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8139 proto_tree_add_item(atree
, hf_os_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8141 number_of_items2
= tvb_get_ntohl(tvb
, foffset
);
8142 proto_tree_add_uint(atree
, hf_ndps_num_windows_keys
, tvb
, foffset
, 4, number_of_items2
);
8144 for (jj
= 0; jj
< number_of_items2
; jj
++ )
8146 if (jj
>= NDPS_MAX_ITEMS
) {
8147 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
8150 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Key %d", jj
+1);
8151 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
8152 foffset
= ndps_string(tvb
, hf_ndps_windows_key
, btree
, foffset
, NULL
);
8153 proto_item_set_end(bitem
, tvb
, foffset
);
8155 proto_item_set_end(aitem
, tvb
, foffset
);
8158 case 8: /* Generic Type */
8159 case 11: /* Printer Driver Types 2 */
8160 case 13: /* Printer Driver Types Archive */
8161 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8162 proto_tree_add_uint(ndps_tree
, hf_ndps_printer_type_count
, tvb
, foffset
, 4, number_of_items
);
8164 for (ii
= 0; ii
< number_of_items
; ii
++ )
8166 if (ii
>= NDPS_MAX_ITEMS
) {
8167 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8170 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Type %d", ii
+1);
8171 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8172 foffset
= ndps_string(tvb
, hf_ndps_printer_manuf
, atree
, foffset
, NULL
);
8173 foffset
= ndps_string(tvb
, hf_ndps_printer_type
, atree
, foffset
, NULL
);
8174 foffset
= ndps_string(tvb
, hf_ndps_prn_file_name
, atree
, foffset
, NULL
);
8175 foffset
= ndps_string(tvb
, hf_ndps_prn_dir_name
, atree
, foffset
, NULL
);
8176 proto_tree_add_item(atree
, hf_archive_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8178 proto_tree_add_item(atree
, hf_archive_file_size
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8180 proto_item_set_end(aitem
, tvb
, foffset
);
8183 case 14: /* Languages Available */
8184 number_of_items
= tvb_get_ntohl(tvb
, foffset
);
8185 proto_tree_add_uint(ndps_tree
, hf_ndps_language_count
, tvb
, foffset
, 4, number_of_items
);
8187 for (ii
= 0; ii
< number_of_items
; ii
++ )
8189 if (ii
>= NDPS_MAX_ITEMS
) {
8190 proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "[Truncated]");
8193 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Language %d", ii
+1);
8194 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8195 proto_tree_add_item(atree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8197 proto_item_set_end(aitem
, tvb
, foffset
);
8204 case 0x00000006: /* Get Resource File */
8205 proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8207 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8208 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
8209 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8213 proto_tree_add_item(ndps_tree
, hf_get_status_flag
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8215 proto_tree_add_item(ndps_tree
, hf_file_timestamp
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8217 proto_tree_add_item(ndps_tree
, hf_ndps_data
, tvb
, foffset
, -1, ENC_NA
);
8219 case 0x00000007: /* Get Resource File Date */
8220 proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8222 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8223 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
8224 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8228 proto_tree_add_item(ndps_tree
, hf_file_timestamp
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8231 case 0x00000008: /* Get Resource Manager NDS Object Name */
8232 foffset
= qualifiedname(tvb
, ndps_tree
, foffset
);
8233 proto_tree_add_uint(ndps_tree
, hf_ndps_error_val
, tvb
, foffset
, 4, error_val
);
8236 case 0x00000009: /* Get Resource Manager Session Information */
8237 proto_tree_add_item(ndps_tree
, hf_ndps_get_resman_session_type
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8239 proto_tree_add_item(ndps_tree
, hf_time
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8241 foffset
= return_code(tvb
, pinfo
, ndps_tree
, foffset
);
8243 case 0x0000000a: /* Set Resource Language Context */
8244 proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8246 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8247 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
8248 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8252 proto_tree_add_item(ndps_tree
, hf_ndps_language_id
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8259 case 0x06097b: /* Delivery */
8262 case 0x00000001: /* Delivery Bind */
8263 proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8265 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8266 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
8268 case 0x00000002: /* Delivery Unbind */
8271 case 0x00000003: /* Delivery Send */
8272 case 0x00000004: /* Delivery Send2 */
8273 proto_tree_add_item(ndps_tree
, hf_ndps_return_code
, tvb
, foffset
, 4, ENC_BIG_ENDIAN
);
8275 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8276 col_set_str(pinfo
->cinfo
, COL_INFO
, "R NDPS - Error");
8277 if (tvb_get_ntohl(tvb
, foffset
-4) != 0)
8281 number_of_items
=tvb_get_ntohl(tvb
, foffset
);
8282 proto_tree_add_uint(ndps_tree
, hf_ndps_item_count
, tvb
, foffset
, 4, number_of_items
);
8284 aitem
= proto_tree_add_text(ndps_tree
, tvb
, foffset
, -1, "Failed Items");
8285 atree
= proto_item_add_subtree(aitem
, ett_ndps
);
8286 for (ii
= 0; ii
< number_of_items
; ii
++ )
8288 if (ii
>= NDPS_MAX_ITEMS
) {
8289 proto_tree_add_text(atree
, tvb
, foffset
, -1, "[Truncated]");
8292 bitem
= proto_tree_add_text(atree
, tvb
, foffset
, -1, "Item %d", ii
+1);
8293 btree
= proto_item_add_subtree(bitem
, ett_ndps
);
8294 length
=tvb_get_ntohl(tvb
, foffset
);
8295 length_remaining
= tvb_length_remaining(tvb
, foffset
);
8296 if(length_remaining
== -1 || (guint32
) length_remaining
< length
)
8300 proto_tree_add_item(btree
, hf_ndps_item_ptr
, tvb
, foffset
, length
, ENC_NA
);
8302 proto_item_set_end(bitem
, tvb
, foffset
);
8304 proto_item_set_end(aitem
, tvb
, foffset
);
8317 proto_register_ndps(void)
8319 static hf_register_info hf_ndps
[] = {
8320 { &hf_ndps_record_mark
,
8321 { "Record Mark", "ndps.record_mark", FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8324 { &hf_ndps_packet_type
,
8325 { "Packet Type", "ndps.packet_type",
8326 FT_UINT32
, BASE_HEX
, VALS(ndps_packet_types
), 0x0,
8330 { "Record Length", "ndps.record_length",
8331 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8335 { "Exchange ID", "ndps.xid",
8336 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8339 { &hf_ndps_rpc_version
,
8340 { "RPC Version", "ndps.rpc_version",
8341 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8344 { &hf_spx_ndps_program
,
8345 { "NDPS Program Number", "spx.ndps_program",
8346 FT_UINT32
, BASE_HEX
, VALS(spx_ndps_program_vals
), 0x0,
8349 { &hf_spx_ndps_version
,
8350 { "Program Version", "spx.ndps_version",
8351 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8356 { "NDPS Error", "spx.ndps_error",
8357 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8361 { &hf_ndps_other_error_string
,
8362 { "Extended Error String", "ndps.ext_err_string",
8363 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8366 { &hf_spx_ndps_func_print
,
8367 { "Print Program", "spx.ndps_func_print",
8368 FT_UINT32
, BASE_HEX
, VALS(spx_ndps_print_func_vals
), 0x0,
8371 { &hf_spx_ndps_func_notify
,
8372 { "Notify Program", "spx.ndps_func_notify",
8373 FT_UINT32
, BASE_HEX
, VALS(spx_ndps_notify_func_vals
), 0x0,
8376 { &hf_spx_ndps_func_delivery
,
8377 { "Delivery Program", "spx.ndps_func_delivery",
8378 FT_UINT32
, BASE_HEX
, VALS(spx_ndps_deliver_func_vals
), 0x0,
8381 { &hf_spx_ndps_func_registry
,
8382 { "Registry Program", "spx.ndps_func_registry",
8383 FT_UINT32
, BASE_HEX
, VALS(spx_ndps_registry_func_vals
), 0x0,
8386 { &hf_spx_ndps_func_resman
,
8387 { "ResMan Program", "spx.ndps_func_resman",
8388 FT_UINT32
, BASE_HEX
, VALS(spx_ndps_resman_func_vals
), 0x0,
8391 { &hf_spx_ndps_func_broker
,
8392 { "Broker Program", "spx.ndps_func_broker",
8393 FT_UINT32
, BASE_HEX
, VALS(spx_ndps_broker_func_vals
), 0x0,
8396 { &hf_ndps_num_objects
,
8397 { "Number of Objects", "ndps.num_objects",
8398 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8401 { &hf_ndps_num_attributes
,
8402 { "Number of Attributes", "ndps.num_attributes",
8403 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8408 { "Server", "ndps.sbuffer",
8409 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8415 { "Connection", "ndps.rbuffer",
8416 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8420 { &hf_ndps_user_name
,
8421 { "Trustee Name", "ndps.user_name",
8422 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8425 { &hf_ndps_broker_name
,
8426 { "Broker Name", "ndps.broker_name",
8427 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8430 { &hf_ndps_num_results
,
8431 { "Number of Results", "ndps.num_results",
8432 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8435 { &hf_ndps_num_options
,
8436 { "Number of Options", "ndps.num_options",
8437 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8440 { &hf_ndps_num_jobs
,
8441 { "Number of Jobs", "ndps.num_jobs",
8442 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8446 { "Printer Name", "ndps.pa_name",
8447 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8451 { "Tree", "ndps.tree",
8452 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8455 { &hf_ndps_reqframe
,
8456 { "Request Frame", "ndps.reqframe",
8457 FT_FRAMENUM
, BASE_NONE
, NULL
, 0x0,
8460 { &hf_ndps_error_val
,
8461 { "Return Status", "ndps.error_val",
8462 FT_UINT32
, BASE_HEX
, VALS(ndps_error_types
), 0x0,
8466 { "Object ID", "ndps.object",
8467 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8470 { &hf_ndps_cred_type
,
8471 { "Credential Type", "ndps.cred_type",
8472 FT_UINT32
, BASE_HEX
, VALS(ndps_credential_enum
), 0x0,
8475 { &hf_ndps_server_name
,
8476 { "Server Name", "ndps.server_name",
8477 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8480 { &hf_ndps_connection
,
8481 { "Connection", "ndps.connection",
8482 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8485 { &hf_ndps_ext_error
,
8486 { "Extended Error Code", "ndps.ext_error",
8487 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8490 { &hf_ndps_auth_null
,
8491 { "Auth Null", "ndps.auth_null",
8492 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8495 { &hf_ndps_rpc_accept
,
8496 { "RPC Accept or Deny", "ndps.rpc_acc",
8497 FT_UINT32
, BASE_HEX
, VALS(true_false
), 0x0,
8500 { &hf_ndps_rpc_acc_stat
,
8501 { "RPC Accept Status", "ndps.rpc_acc_stat",
8502 FT_UINT32
, BASE_HEX
, VALS(accept_stat
), 0x0,
8505 { &hf_ndps_rpc_rej_stat
,
8506 { "RPC Reject Status", "ndps.rpc_rej_stat",
8507 FT_UINT32
, BASE_HEX
, VALS(reject_stat
), 0x0,
8510 { &hf_ndps_rpc_acc_results
,
8511 { "RPC Accept Results", "ndps.rpc_acc_res",
8512 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8515 { &hf_ndps_problem_type
,
8516 { "Problem Type", "ndps.rpc_prob_type",
8517 FT_UINT32
, BASE_HEX
, VALS(error_type_enum
), 0x0,
8520 { &hf_security_problem_type
,
8521 { "Security Problem", "ndps.rpc_sec_prob",
8522 FT_UINT32
, BASE_HEX
, VALS(security_problem_enum
), 0x0,
8525 { &hf_service_problem_type
,
8526 { "Service Problem", "ndps.rpc_serv_prob",
8527 FT_UINT32
, BASE_HEX
, VALS(service_problem_enum
), 0x0,
8530 { &hf_access_problem_type
,
8531 { "Access Problem", "ndps.rpc_acc_prob",
8532 FT_UINT32
, BASE_HEX
, VALS(access_problem_enum
), 0x0,
8535 { &hf_printer_problem_type
,
8536 { "Printer Problem", "ndps.rpc_print_prob",
8537 FT_UINT32
, BASE_HEX
, VALS(printer_problem_enum
), 0x0,
8540 { &hf_selection_problem_type
,
8541 { "Selection Problem", "ndps.rpc_sel_prob",
8542 FT_UINT32
, BASE_HEX
, VALS(selection_problem_enum
), 0x0,
8545 { &hf_doc_access_problem_type
,
8546 { "Document Access Problem", "ndps.rpc_doc_acc_prob",
8547 FT_UINT32
, BASE_HEX
, VALS(doc_access_problem_enum
), 0x0,
8550 { &hf_attribute_problem_type
,
8551 { "Attribute Problem", "ndps.rpc_attr_prob",
8552 FT_UINT32
, BASE_HEX
, VALS(attribute_problem_enum
), 0x0,
8555 { &hf_update_problem_type
,
8556 { "Update Problem", "ndps.rpc_update_prob",
8557 FT_UINT32
, BASE_HEX
, VALS(update_problem_enum
), 0x0,
8561 { "Object ID Type", "ndps.rpc_obj_id_type",
8562 FT_UINT32
, BASE_HEX
, VALS(obj_identification_enum
), 0x0,
8565 { &hf_oid_struct_size
,
8566 { "OID Struct Size", "ndps.rpc_oid_struct_size",
8567 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8571 { "Object Name", "ndps.object_name",
8572 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8575 { &hf_ndps_document_number
,
8576 { "Document Number", "ndps.doc_num",
8577 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8580 { &hf_ndps_doc_content
,
8581 { "Document Content", "ndps.doc_content",
8582 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8585 { &hf_ndps_nameorid
,
8586 { "Name or ID Type", "ndps.nameorid",
8587 FT_UINT32
, BASE_HEX
, VALS(nameorid_enum
), 0x0,
8590 { &hf_ndps_local_object_name
,
8591 { "Local Object Name", "ndps.loc_object_name",
8592 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8595 { &hf_ndps_printer_name
,
8596 { "Printer Name", "ndps.printer_name",
8597 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8600 { &hf_ndps_qualified_name
,
8601 { "Qualified Name Type", "ndps.qual_name_type",
8602 FT_UINT32
, BASE_HEX
, VALS(qualified_name_enum
), 0x0,
8606 { &hf_ndps_qualified_name2
,
8607 { "Qualified Name Type", "ndps.qual_name_type2",
8608 FT_UINT32
, BASE_HEX
, VALS(qualified_name_enum2
), 0x0,
8612 { &hf_ndps_item_count
,
8613 { "Number of Items", "ndps.item_count",
8614 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8617 { &hf_ndps_num_passwords
,
8618 { "Number of Passwords", "ndps.num_passwords",
8619 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8622 { &hf_ndps_num_servers
,
8623 { "Number of Servers", "ndps.num_servers",
8624 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8627 { &hf_ndps_num_locations
,
8628 { "Number of Locations", "ndps.num_locations",
8629 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8632 { &hf_ndps_num_areas
,
8633 { "Number of Areas", "ndps.num_areas",
8634 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8637 { &hf_ndps_num_address_items
,
8638 { "Number of Address Items", "ndps.num_address_items",
8639 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8642 { &hf_ndps_num_job_categories
,
8643 { "Number of Job Categories", "ndps.num_job_categories",
8644 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8647 { &hf_ndps_num_page_selects
,
8648 { "Number of Page Select Items", "ndps.num_page_selects",
8649 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8652 { &hf_ndps_num_page_informations
,
8653 { "Number of Page Information Items", "ndps.num_page_informations",
8654 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8657 { &hf_ndps_num_names
,
8658 { "Number of Names", "ndps.num_names",
8659 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8662 { &hf_ndps_num_categories
,
8663 { "Number of Categories", "ndps.num_categories",
8664 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8667 { &hf_ndps_num_colorants
,
8668 { "Number of Colorants", "ndps.num_colorants",
8669 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8672 { &hf_ndps_num_events
,
8673 { "Number of Events", "ndps.num_events",
8674 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8677 { &hf_ndps_num_args
,
8678 { "Number of Arguments", "ndps.num_argss",
8679 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8682 { &hf_ndps_num_transfer_methods
,
8683 { "Number of Transfer Methods", "ndps.num_transfer_methods",
8684 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8687 { &hf_ndps_num_doc_types
,
8688 { "Number of Document Types", "ndps.num_doc_types",
8689 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8692 { &hf_ndps_num_destinations
,
8693 { "Number of Destinations", "ndps.num_destinations",
8694 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8697 { &hf_ndps_qualifier
,
8698 { "Qualifier", "ndps.qual",
8699 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8702 { &hf_ndps_lib_error
,
8703 { "Library Error", "ndps.lib_error",
8704 FT_UINT32
, BASE_HEX
, VALS(ndps_error_types
), 0x0,
8707 { &hf_ndps_other_error
,
8708 { "Other Error", "ndps.other_error",
8709 FT_UINT32
, BASE_HEX
, VALS(ndps_error_types
), 0x0,
8712 { &hf_ndps_other_error_2
,
8713 { "Other Error 2", "ndps.other_error_2",
8714 FT_UINT32
, BASE_HEX
, VALS(ndps_error_types
), 0x0,
8718 { "Session Handle", "ndps.session",
8719 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8722 { &hf_ndps_abort_flag
,
8723 { "Abort?", "ndps.abort",
8724 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
8727 { &hf_ndps_obj_attribute_type
,
8728 { "Value Syntax", "ndps.attrib_type",
8729 FT_UINT32
, BASE_HEX
, VALS(ndps_attribute_enum
), 0x0,
8732 { &hf_ndps_attribute_value
,
8733 { "Value", "ndps.attribue_value",
8734 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8737 { &hf_ndps_lower_range
,
8738 { "Lower Range", "ndps.lower_range",
8739 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8742 { &hf_ndps_upper_range
,
8743 { "Upper Range", "ndps.upper_range",
8744 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8748 { "Value", "ndps.n64",
8749 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8752 { &hf_ndps_lower_range_n64
,
8753 { "Lower Range", "ndps.lower_range_n64",
8754 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8757 { &hf_ndps_upper_range_n64
,
8758 { "Upper Range", "ndps.upper_range_n64",
8759 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8762 { &hf_ndps_attrib_boolean
,
8763 { "Value?", "ndps.attrib_boolean",
8764 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
8767 { &hf_ndps_realization
,
8768 { "Realization Type", "ndps.realization",
8769 FT_UINT32
, BASE_HEX
, VALS(ndps_realization_enum
), 0x0,
8772 { &hf_ndps_xdimension_n64
,
8773 { "X Dimension", "ndps.xdimension_n64",
8774 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8777 { &hf_ndps_ydimension_n64
,
8778 { "Y Dimension", "ndps.ydimension_n64",
8779 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8782 { &hf_ndps_dim_value
,
8783 { "Dimension Value Type", "ndps.dim_value",
8784 FT_UINT32
, BASE_HEX
, VALS(ndps_dim_value_enum
), 0x0,
8787 { &hf_ndps_dim_flag
,
8788 { "Dimension Flag", "ndps.dim_falg",
8789 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8792 { &hf_ndps_xydim_value
,
8793 { "XY Dimension Value Type", "ndps.xydim_value",
8794 FT_UINT32
, BASE_HEX
, VALS(ndps_xydim_value_enum
), 0x0,
8797 { &hf_ndps_location_value
,
8798 { "Location Value Type", "ndps.location_value",
8799 FT_UINT32
, BASE_HEX
, VALS(ndps_location_value_enum
), 0x0,
8802 { &hf_ndps_xmin_n64
,
8803 { "Minimum X Dimension", "ndps.xmin_n64",
8804 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8807 { &hf_ndps_xmax_n64
,
8808 { "Maximum X Dimension", "ndps.xmax_n64",
8809 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8812 { &hf_ndps_ymin_n64
,
8813 { "Minimum Y Dimension", "ndps.ymin_n64",
8814 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8817 { &hf_ndps_ymax_n64
,
8818 { "Maximum Y Dimension", "ndps.ymax_n64",
8819 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8822 { &hf_ndps_edge_value
,
8823 { "Edge Value", "ndps.edge_value",
8824 FT_UINT32
, BASE_HEX
, VALS(ndps_edge_value_enum
), 0x0,
8827 { &hf_ndps_cardinal_or_oid
,
8828 { "Cardinal or OID", "ndps.car_or_oid",
8829 FT_UINT32
, BASE_HEX
, VALS(ndps_card_or_oid_enum
), 0x0,
8832 { &hf_ndps_cardinal_name_or_oid
,
8833 { "Cardinal Name or OID", "ndps.car_name_or_oid",
8834 FT_UINT32
, BASE_HEX
, VALS(ndps_card_name_or_oid_enum
), 0x0,
8837 { &hf_ndps_integer_or_oid
,
8838 { "Integer or OID", "ndps.integer_or_oid",
8839 FT_UINT32
, BASE_HEX
, VALS(ndps_integer_or_oid_enum
), 0x0,
8842 { &hf_ndps_profile_id
,
8843 { "Profile ID", "ndps.profile_id",
8844 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8847 { &hf_ndps_persistence
,
8848 { "Persistence", "ndps.persistence",
8849 FT_UINT32
, BASE_HEX
, VALS(ndps_persistence_enum
), 0x0,
8852 { &hf_ndps_language_count
,
8853 { "Number of Languages", "ndps.language_count",
8854 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8857 { &hf_ndps_language_id
,
8858 { "Language ID", "ndps.lang_id",
8859 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8863 { "Address Type", "ndps.address_type",
8864 FT_UINT32
, BASE_HEX
, VALS(ndps_address_type_enum
), 0x0,
8868 { "Address", "ndps.address",
8869 FT_UINT32
, BASE_HEX
, VALS(ndps_address_enum
), 0x0,
8872 { &hf_ndps_add_bytes
,
8873 { "Address Bytes", "ndps.add_bytes",
8874 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8877 { &hf_ndps_event_type
,
8878 { "Event Type", "ndps.event_type",
8879 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8882 { &hf_ndps_event_object_identifier
,
8883 { "Event Object Type", "ndps.event_object_identifier",
8884 FT_UINT32
, BASE_HEX
, VALS(ndps_event_object_enum
), 0x0,
8887 { &hf_ndps_octet_string
,
8888 { "Octet String", "ndps.octet_string",
8889 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8893 { "Scope", "ndps.scope",
8894 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8898 { "Address Length", "ndps.addr_len",
8899 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8903 { "IPX Network", "ndps.net",
8904 FT_IPXNET
, BASE_NONE
, NULL
, 0x0,
8908 { "Node", "ndps.node",
8909 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
8913 { "IPX Socket", "ndps.socket",
8914 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8918 { "IP Port", "ndps.port",
8919 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8923 { "IP Address", "ndps.ip",
8924 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
8927 { &hf_ndps_server_type
,
8928 { "NDPS Server Type", "ndps.server_type",
8929 FT_UINT32
, BASE_HEX
, VALS(ndps_server_type_enum
), 0x0,
8932 { &hf_ndps_num_services
,
8933 { "Number of Services", "ndps.num_services",
8934 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8937 { &hf_ndps_service_type
,
8938 { "NDPS Service Type", "ndps.service_type",
8939 FT_UINT32
, BASE_HEX
, VALS(ndps_service_type_enum
), 0x0,
8942 { &hf_ndps_service_enabled
,
8943 { "Service Enabled?", "ndps.service_enabled",
8944 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
8947 { &hf_ndps_method_name
,
8948 { "Method Name", "ndps.method_name",
8949 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8952 { &hf_ndps_method_ver
,
8953 { "Method Version", "ndps.method_ver",
8954 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8957 { &hf_ndps_file_name
,
8958 { "File Name", "ndps.file_name",
8959 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8962 { &hf_ndps_admin_submit
,
8963 { "Admin Submit Flag?", "ndps.admin_submit_flag",
8964 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
8968 { "Object ID", "ndps.oid",
8969 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8972 { &hf_ndps_object_op
,
8973 { "Operation", "ndps.object_op",
8974 FT_UINT32
, BASE_HEX
, VALS(ndps_object_op_enum
), 0x0,
8978 { "Answer Time", "ndps.answer_time",
8979 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8982 { &hf_oid_asn1_type
,
8983 { "ASN.1 Type", "ndps.asn1_type",
8984 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8987 { &hf_ndps_item_ptr
,
8988 { "Item Pointer", "ndps.item_ptr",
8989 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8993 { "Length", "ndps.len",
8994 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8997 { &hf_ndps_limit_enc
,
8998 { "Limit Encountered", "ndps.limit_enc",
8999 FT_UINT32
, BASE_HEX
, VALS(ndps_limit_enc_enum
), 0x0,
9002 { &hf_ndps_delivery_add_count
,
9003 { "Number of Delivery Addresses", "ndps.delivery_add_count",
9004 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9007 { &hf_ndps_delivery_add_type
,
9008 { "Delivery Address Type", "ndps.delivery_add_type",
9009 FT_UINT32
, BASE_HEX
, VALS(ndps_delivery_add_enum
), 0x0,
9012 { &hf_ndps_criterion_type
,
9013 { "Criterion Type", "ndps.criterion_type",
9014 FT_UINT32
, BASE_HEX
, VALS(ndps_attribute_enum
), 0x0,
9017 { &hf_ndps_num_ignored_attributes
,
9018 { "Number of Ignored Attributes", "ndps.num_ignored_attributes",
9019 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9022 { &hf_ndps_ignored_type
,
9023 { "Ignored Type", "ndps.ignored_type",
9024 FT_UINT32
, BASE_HEX
, VALS(ndps_attribute_enum
), 0x0,
9027 { &hf_ndps_num_resources
,
9028 { "Number of Resources", "ndps.num_resources",
9029 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9032 { &hf_ndps_resource_type
,
9033 { "Resource Type", "ndps.resource_type",
9034 FT_UINT32
, BASE_HEX
, VALS(ndps_resource_enum
), 0x0,
9037 { &hf_ndps_identifier_type
,
9038 { "Identifier Type", "ndps.identifier_type",
9039 FT_UINT32
, BASE_HEX
, VALS(ndps_identifier_enum
), 0x0,
9042 { &hf_ndps_page_flag
,
9043 { "Page Flag", "ndps.page_flag",
9044 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9047 { &hf_ndps_media_type
,
9048 { "Media Type", "ndps.media_type",
9049 FT_UINT32
, BASE_HEX
, VALS(ndps_media_enum
), 0x0,
9052 { &hf_ndps_page_size
,
9053 { "Page Size", "ndps.page_size",
9054 FT_UINT32
, BASE_HEX
, VALS(ndps_page_size_enum
), 0x0,
9057 { &hf_ndps_direction
,
9058 { "Direction", "ndps.direction",
9059 FT_UINT32
, BASE_HEX
, VALS(ndps_pres_direction_enum
), 0x0,
9062 { &hf_ndps_page_order
,
9063 { "Page Order", "ndps.page_order",
9064 FT_UINT32
, BASE_HEX
, VALS(ndps_page_order_enum
), 0x0,
9067 { &hf_ndps_medium_size
,
9068 { "Medium Size", "ndps.medium_size",
9069 FT_UINT32
, BASE_HEX
, VALS(ndps_medium_size_enum
), 0x0,
9072 { &hf_ndps_long_edge_feeds
,
9073 { "Long Edge Feeds?", "ndps.long_edge_feeds",
9074 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
9077 { &hf_ndps_inc_across_feed
,
9078 { "Increment Across Feed", "ndps.inc_across_feed",
9079 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9082 { &hf_ndps_size_inc_in_feed
,
9083 { "Size Increment in Feed", "ndps.size_inc_in_feed",
9084 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9087 { &hf_ndps_page_orientation
,
9088 { "Page Orientation", "ndps.page_orientation",
9089 FT_UINT32
, BASE_HEX
, VALS(ndps_page_orientation_enum
), 0x0,
9092 { &hf_ndps_numbers_up
,
9093 { "Numbers Up", "ndps.numbers_up",
9094 FT_UINT32
, BASE_HEX
, VALS(ndps_numbers_up_enum
), 0x0,
9097 { &hf_ndps_xdimension
,
9098 { "X Dimension", "ndps.xdimension",
9099 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9102 { &hf_ndps_ydimension
,
9103 { "Y Dimension", "ndps.ydimension",
9104 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9107 { &hf_ndps_state_severity
,
9108 { "State Severity", "ndps.state_severity",
9109 FT_UINT32
, BASE_HEX
, VALS(ndps_state_severity_enum
), 0x0,
9112 { &hf_ndps_training
,
9113 { "Training", "ndps.training",
9114 FT_UINT32
, BASE_HEX
, VALS(ndps_training_enum
), 0x0,
9117 { &hf_ndps_colorant_set
,
9118 { "Colorant Set", "ndps.colorant_set",
9119 FT_UINT32
, BASE_HEX
, VALS(ndps_colorant_set_enum
), 0x0,
9122 { &hf_ndps_card_enum_time
,
9123 { "Cardinal, Enum, or Time", "ndps.card_enum_time",
9124 FT_UINT32
, BASE_HEX
, VALS(ndps_card_enum_time_enum
), 0x0,
9127 { &hf_ndps_attrs_arg
,
9128 { "List Attribute Operation", "ndps.attrs_arg",
9129 FT_UINT32
, BASE_HEX
, VALS(ndps_attrs_arg_enum
), 0x0,
9132 { &hf_ndps_context_len
,
9133 { "Context Length", "ndps.context_len",
9134 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9138 { "Context", "ndps.context",
9139 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9143 { "Filter Type", "ndps.filter",
9144 FT_UINT32
, BASE_HEX
, VALS(ndps_filter_enum
), 0x0,
9148 { &hf_ndps_item_filter
,
9149 { "Filter Item Operation", "ndps.filter_item",
9150 FT_UINT32
, BASE_HEX
, VALS(ndps_filter_item_enum
), 0x0,
9155 { &hf_ndps_substring_match
,
9156 { "Substring Match", "ndps.substring_match",
9157 FT_UINT32
, BASE_HEX
, VALS(ndps_match_criteria_enum
), 0x0,
9161 { &hf_ndps_time_limit
,
9162 { "Time Limit", "ndps.time_limit",
9163 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9166 { &hf_ndps_count_limit
,
9167 { "Count Limit", "ndps.count_limit",
9168 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9171 { &hf_ndps_operator
,
9172 { "Operator Type", "ndps.operator",
9173 FT_UINT32
, BASE_DEC
, VALS(ndps_operator_enum
), 0x0,
9176 { &hf_ndps_password
,
9177 { "Password", "ndps.password",
9178 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9181 { &hf_ndps_retrieve_restrictions
,
9182 { "Retrieve Restrictions", "ndps.ret_restrict",
9183 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9186 { &hf_ndps_bind_security_option_count
,
9187 { "Number of Bind Security Options", "ndps.bind_security_count",
9188 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9191 { &hf_bind_security
,
9192 { "Bind Security Options", "ndps.bind_security",
9193 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9196 { &hf_ndps_max_items
,
9197 { "Maximum Items in List", "ndps.max_items",
9198 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9201 { &hf_ndps_status_flags
,
9202 { "Status Flag", "ndps.status_flags",
9203 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9206 { &hf_ndps_resource_list_type
,
9207 { "Resource Type", "ndps.resource_type",
9208 FT_UINT32
, BASE_DEC
, VALS(ndps_resource_type_enum
), 0x0,
9212 { "Number of OSes", "ndps.os_count",
9213 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9217 { "OS Type", "ndps.os_type",
9218 FT_UINT32
, BASE_DEC
, VALS(ndps_os_type_enum
), 0x0,
9221 { &hf_ndps_printer_type_count
,
9222 { "Number of Printer Types", "ndps.printer_type_count",
9223 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9226 { &hf_ndps_printer_type
,
9227 { "Printer Type", "ndps.prn_type",
9228 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9231 { &hf_ndps_printer_manuf
,
9232 { "Printer Manufacturer", "ndps.prn_manuf",
9233 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9236 { &hf_ndps_inf_file_name
,
9237 { "INF File Name", "ndps.inf_file_name",
9238 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9241 { &hf_ndps_vendor_dir
,
9242 { "Vendor Directory", "ndps.vendor_dir",
9243 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9247 { "Banner Type", "ndps.banner_type",
9248 FT_UINT32
, BASE_DEC
, VALS(ndps_banner_type_enum
), 0x0,
9252 { "Font Type", "ndps.font_type",
9253 FT_UINT32
, BASE_DEC
, VALS(ndps_font_type_enum
), 0x0,
9257 { "Printer ID", "ndps.printer_id",
9258 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9261 { &hf_ndps_font_name
,
9262 { "Font Name", "ndps.font_name",
9263 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9266 { &hf_ndps_return_code
,
9267 { "Return Code", "ndps.ret_code",
9268 FT_UINT32
, BASE_HEX
, VALS(ndps_error_types
), 0x0,
9272 { &hf_ndps_banner_count
,
9273 { "Number of Banners", "ndps.banner_count",
9274 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9278 { &hf_ndps_banner_name
,
9279 { "Banner Name", "ndps.banner_name",
9280 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9283 { &hf_ndps_font_type_count
,
9284 { "Number of Font Types", "ndps.font_type_count",
9285 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9288 { &hf_font_type_name
,
9289 { "Font Type Name", "ndps.font_type_name",
9290 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9293 { &hf_ndps_font_file_count
,
9294 { "Number of Font Files", "ndps.font_file_count",
9295 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9298 { &hf_font_file_name
,
9299 { "Font File Name", "ndps.font_file_name",
9300 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9303 { &hf_ndps_printer_def_count
,
9304 { "Number of Printer Definitions", "ndps.printer_def_count",
9305 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9308 { &hf_ndps_prn_file_name
,
9309 { "Printer File Name", "ndps.print_file_name",
9310 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9313 { &hf_ndps_prn_dir_name
,
9314 { "Printer Directory Name", "ndps.print_dir_name",
9315 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9318 { &hf_ndps_def_file_name
,
9319 { "Printer Definition Name", "ndps.print_def_name",
9320 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9323 { &hf_ndps_num_win31_keys
,
9324 { "Number of Windows 3.1 Keys", "ndps.num_win31_keys",
9325 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9328 { &hf_ndps_num_win95_keys
,
9329 { "Number of Windows 95 Keys", "ndps.num_win95_keys",
9330 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9333 { &hf_ndps_num_windows_keys
,
9334 { "Number of Windows Keys", "ndps.num_windows_keys",
9335 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9338 { &hf_ndps_windows_key
,
9339 { "Windows Key", "ndps.windows_key",
9340 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9344 { "Archive Type", "ndps.archive_type",
9345 FT_UINT32
, BASE_DEC
, VALS(ndps_archive_enum
), 0x0,
9348 { &hf_archive_file_size
,
9349 { "Archive File Size", "ndps.archive_size",
9350 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9353 { &hf_ndps_segment_overlap
,
9354 { "Segment overlap", "ndps.segment.overlap", FT_BOOLEAN
, BASE_NONE
,
9355 NULL
, 0x0, "Segment overlaps with other segments", HFILL
}},
9357 { &hf_ndps_segment_overlap_conflict
,
9358 { "Conflicting data in segment overlap", "ndps.segment.overlap.conflict",
9359 FT_BOOLEAN
, BASE_NONE
,
9360 NULL
, 0x0, "Overlapping segments contained conflicting data", HFILL
}},
9362 { &hf_ndps_segment_multiple_tails
,
9363 { "Multiple tail segments found", "ndps.segment.multipletails",
9364 FT_BOOLEAN
, BASE_NONE
,
9365 NULL
, 0x0, "Several tails were found when desegmenting the packet", HFILL
}},
9367 { &hf_ndps_segment_too_long_segment
,
9368 { "Segment too long", "ndps.segment.toolongsegment", FT_BOOLEAN
, BASE_NONE
,
9369 NULL
, 0x0, "Segment contained data past end of packet", HFILL
}},
9371 { &hf_ndps_segment_error
,
9372 {"Desegmentation error", "ndps.segment.error", FT_FRAMENUM
, BASE_NONE
,
9373 NULL
, 0x0, "Desegmentation error due to illegal segments", HFILL
}},
9375 { &hf_ndps_segment_count
,
9376 {"Segment count", "ndps.segment.count", FT_UINT32
, BASE_DEC
,
9377 NULL
, 0x0, NULL
, HFILL
}},
9379 { &hf_ndps_reassembled_length
,
9380 {"Reassembled NDPS length", "ndps.reassembled.length", FT_UINT32
, BASE_DEC
,
9381 NULL
, 0x0, "The total length of the reassembled payload", HFILL
}},
9384 { "NDPS Fragment", "ndps.fragment", FT_FRAMENUM
, BASE_NONE
,
9385 NULL
, 0x0, NULL
, HFILL
}},
9387 { &hf_ndps_segments
,
9388 { "NDPS Fragments", "ndps.fragments", FT_NONE
, BASE_NONE
,
9389 NULL
, 0x0, NULL
, HFILL
}},
9392 { "[Data]", "ndps.data", FT_NONE
, BASE_NONE
,
9393 NULL
, 0x0, NULL
, HFILL
}},
9395 { &hf_get_status_flag
,
9396 { "Get Status Flag", "ndps.get_status_flags",
9397 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9401 { "Resource Type", "ndps.res_type",
9402 FT_UINT32
, BASE_DEC
, VALS(ndps_res_type_enum
), 0x0,
9405 { &hf_file_timestamp
,
9406 { "File Time Stamp", "ndps.file_time_stamp",
9407 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9411 { "Print Type", "ndps.print_arg",
9412 FT_UINT32
, BASE_DEC
, VALS(ndps_print_arg_enum
), 0x0,
9416 { "Submission Complete?", "ndps.sub_complete", FT_BOOLEAN
, BASE_NONE
,
9417 NULL
, 0x0, NULL
, HFILL
}},
9420 { "Document Content", "ndps.doc_content",
9421 FT_UINT32
, BASE_DEC
, VALS(ndps_doc_content_enum
), 0x0,
9425 { &hf_ndps_doc_name
,
9426 { "Document Name", "ndps.doc_name",
9427 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9432 { "Local ID", "ndps.local_id",
9433 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9436 { &hf_ndps_included_doc_len
,
9437 { "Included Document Length", "ndps.included_doc_len",
9438 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9441 { &hf_ndps_included_doc
,
9442 { "Included Document", "ndps.included_doc",
9443 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9446 { &hf_ndps_ref_name
,
9447 { "Referenced Document Name", "ndps.ref_doc_name",
9448 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9451 { &hf_interrupt_job_type
,
9452 { "Interrupt Job Identifier", "ndps.interrupt_job_type",
9453 FT_UINT32
, BASE_DEC
, VALS(ndps_interrupt_job_enum
), 0x0,
9456 { &hf_pause_job_type
,
9457 { "Pause Job Identifier", "ndps.pause_job_type",
9458 FT_UINT32
, BASE_DEC
, VALS(ndps_pause_job_enum
), 0x0,
9462 { "Force?", "ndps.force",
9463 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
9466 { &hf_resubmit_op_type
,
9467 { "Resubmit Operation Type", "ndps.resubmit_op_type",
9468 FT_UINT32
, BASE_DEC
, VALS(ndps_resubmit_op_enum
), 0x0,
9471 { &hf_shutdown_type
,
9472 { "Shutdown Type", "ndps.shutdown_type",
9473 FT_UINT32
, BASE_DEC
, VALS(ndps_shutdown_enum
), 0x0,
9476 { &hf_ndps_supplier_flag
,
9477 { "Supplier Data?", "ndps.supplier_flag",
9478 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
9481 { &hf_ndps_language_flag
,
9482 { "Language Data?", "ndps.language_flag",
9483 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
9486 { &hf_ndps_method_flag
,
9487 { "Method Data?", "ndps.method_flag",
9488 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
9491 { &hf_ndps_delivery_address_flag
,
9492 { "Delivery Address Data?", "ndps.delivery_flag",
9493 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
9496 { &hf_ndps_list_profiles_type
,
9497 { "List Profiles Type", "ndps.list_profiles_type",
9498 FT_UINT32
, BASE_HEX
, VALS(ndps_attrs_arg_enum
), 0x0,
9501 { &hf_ndps_list_profiles_choice_type
,
9502 { "List Profiles Choice Type", "ndps.list_profiles_choice_type",
9503 FT_UINT32
, BASE_HEX
, VALS(ndps_list_profiles_choice_enum
), 0x0,
9506 { &hf_ndps_list_profiles_result_type
,
9507 { "List Profiles Result Type", "ndps.list_profiles_result_type",
9508 FT_UINT32
, BASE_HEX
, VALS(ndps_list_profiles_result_enum
), 0x0,
9511 { &hf_ndps_integer_type_flag
,
9512 { "Integer Type Flag", "ndps.integer_type_flag",
9513 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9516 { &hf_ndps_integer_type_value
,
9517 { "Integer Type Value", "ndps.integer_type_value",
9518 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9521 { &hf_ndps_continuation_option
,
9522 { "Continuation Option", "ndps.continuation_option",
9523 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9526 { &hf_ndps_ds_info_type
,
9527 { "DS Info Type", "ndps.ds_info_type",
9528 FT_UINT32
, BASE_HEX
, VALS(ndps_ds_info_enum
), 0x0,
9532 { "GUID", "ndps.guid",
9533 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9536 { &hf_ndps_list_services_type
,
9537 { "Services Type", "ndps.list_services_type",
9538 FT_UINT32
, BASE_HEX
, VALS(ndps_list_services_enum
), 0x0,
9541 { &hf_ndps_item_bytes
,
9542 { "Item Ptr", "ndps.item_bytes",
9543 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9546 { &hf_ndps_certified
,
9547 { "Certified", "ndps.certified",
9548 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9551 { &hf_ndps_attribute_set
,
9552 { "Attribute Set", "ndps.attribute_set",
9553 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9556 { &hf_ndps_data_item_type
,
9557 { "Item Type", "ndps.data_item_type",
9558 FT_UINT32
, BASE_HEX
, VALS(ndps_data_item_enum
), 0x0,
9562 { "Integer Value", "ndps.info_int",
9563 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
9567 { "16 Bit Integer Value", "ndps.info_int16",
9568 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
9572 { "32 Bit Integer Value", "ndps.info_int32",
9573 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9577 { "Boolean Value", "ndps.info_boolean",
9578 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
9582 { "String Value", "ndps.info_string",
9583 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9588 { "Byte Value", "ndps.info_bytes",
9589 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9593 { &hf_ndps_list_local_servers_type
,
9594 { "Server Type", "ndps.list_local_server_type",
9595 FT_UINT32
, BASE_HEX
, VALS(ndps_list_local_servers_enum
), 0x0,
9598 { &hf_ndps_registry_name
,
9599 { "Registry Name", "ndps.registry_name",
9600 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9603 { &hf_ndps_client_server_type
,
9604 { "Client/Server Type", "ndps.client_server_type",
9605 FT_UINT32
, BASE_HEX
, VALS(ndps_client_server_enum
), 0x0,
9608 { &hf_ndps_session_type
,
9609 { "Session Type", "ndps.session_type",
9610 FT_UINT32
, BASE_HEX
, VALS(ndps_session_type_enum
), 0x0,
9614 { "Time", "ndps.time",
9615 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9618 { &hf_ndps_supplier_name
,
9619 { "Supplier Name", "ndps.supplier_name",
9620 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9624 { "Message", "ndps.message",
9625 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9628 { &hf_ndps_delivery_method_count
,
9629 { "Number of Delivery Methods", "ndps.delivery_method_count",
9630 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9633 { &hf_delivery_method_type
,
9634 { "Delivery Method Type", "ndps.delivery_method_type",
9635 FT_UINT32
, BASE_HEX
, VALS(ndps_delivery_method_enum
), 0x0,
9638 { &hf_ndps_get_session_type
,
9639 { "Session Type", "ndps.get_session_type",
9640 FT_UINT32
, BASE_HEX
, VALS(ndps_get_session_type_enum
), 0x0,
9644 { "Packet Count", "ndps.packet_count",
9645 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9648 { &hf_last_packet_flag
,
9649 { "Last Packet Flag", "ndps.last_packet_flag",
9650 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9653 { &hf_ndps_get_resman_session_type
,
9654 { "Session Type", "ndps.get_resman_session_type",
9655 FT_UINT32
, BASE_HEX
, VALS(ndps_get_resman_session_type_enum
), 0x0,
9659 { "Problem Type", "ndps.problem_type",
9660 FT_UINT32
, BASE_HEX
, VALS(problem_type_enum
), 0x0,
9663 { &hf_ndps_num_values
,
9664 { "Number of Values", "ndps.num_values",
9665 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9668 { &hf_ndps_object_ids_7
,
9669 { "Object ID Definition", "ndps.objectid_def7",
9670 FT_NONE
, BASE_NONE
, NULL
,
9671 0x0, NULL
, HFILL
}},
9673 { &hf_ndps_object_ids_8
,
9674 { "Object ID Definition", "ndps.objectid_def8",
9675 FT_NONE
, BASE_NONE
, NULL
,
9676 0x0, NULL
, HFILL
}},
9678 { &hf_ndps_object_ids_9
,
9679 { "Object ID Definition", "ndps.objectid_def9",
9680 FT_NONE
, BASE_NONE
, NULL
,
9681 0x0, NULL
, HFILL
}},
9683 { &hf_ndps_object_ids_10
,
9684 { "Object ID Definition", "ndps.objectid_def10",
9685 FT_NONE
, BASE_NONE
, NULL
,
9686 0x0, NULL
, HFILL
}},
9688 { &hf_ndps_object_ids_11
,
9689 { "Object ID Definition", "ndps.objectid_def11",
9690 FT_NONE
, BASE_NONE
, NULL
,
9691 0x0, NULL
, HFILL
}},
9693 { &hf_ndps_object_ids_12
,
9694 { "Object ID Definition", "ndps.objectid_def12",
9695 FT_NONE
, BASE_NONE
, NULL
,
9696 0x0, NULL
, HFILL
}},
9698 { &hf_ndps_object_ids_13
,
9699 { "Object ID Definition", "ndps.objectid_def13",
9700 FT_NONE
, BASE_NONE
, NULL
,
9701 0x0, NULL
, HFILL
}},
9703 { &hf_ndps_object_ids_14
,
9704 { "Object ID Definition", "ndps.objectid_def14",
9705 FT_NONE
, BASE_NONE
, NULL
,
9706 0x0, NULL
, HFILL
}},
9708 { &hf_ndps_object_ids_15
,
9709 { "Object ID Definition", "ndps.objectid_def15",
9710 FT_NONE
, BASE_NONE
, NULL
,
9711 0x0, NULL
, HFILL
}},
9713 { &hf_ndps_object_ids_16
,
9714 { "Object ID Definition", "ndps.objectid_def16",
9715 FT_NONE
, BASE_NONE
, NULL
,
9716 0x0, NULL
, HFILL
}},
9719 { &hf_ndps_attribute_time
,
9720 { "Time", "ndps.attribute_time",
9721 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_LOCAL
, NULL
, 0x0,
9725 { &hf_print_security
,
9726 { "Printer Security", "ndps.print_security",
9727 FT_UINT32
, BASE_HEX
, VALS(ndps_print_security
), 0x0,
9730 { &hf_notify_time_interval
,
9731 { "Notify Time Interval", "ndps.notify_time_interval",
9732 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9735 { &hf_notify_sequence_number
,
9736 { "Notify Sequence Number", "ndps.notify_seq_number",
9737 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9740 { &hf_notify_lease_exp_time
,
9741 { "Notify Lease Expiration Time", "ndps.notify_lease_exp_time",
9742 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9745 { &hf_notify_printer_uri
,
9746 { "Notify Printer URI", "ndps.notify_printer_uri",
9747 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9751 { "Level", "ndps.level",
9752 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9756 { "Interval", "ndps.interval",
9757 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9761 static gint
*ett
[] = {
9767 static ei_register_info ei
[] = {
9768 { &ei_ndps_problem_type
, { "ndps.problem_type.expert", PI_RESPONSE_CODE
, PI_NOTE
, "Fault", EXPFILL
}},
9769 { &ei_ndps_return_code
, { "ndps.return_code.expert", PI_RESPONSE_CODE
, PI_NOTE
, "Fault", EXPFILL
}},
9770 { &ei_ndps_rpc_acc_stat
, { "ndps.rpc_acc_stat.expert", PI_RESPONSE_CODE
, PI_NOTE
, "Fault", EXPFILL
}},
9773 module_t
*ndps_module
;
9774 expert_module_t
* expert_ndps
;
9776 proto_ndps
= proto_register_protocol("Novell Distributed Print System", "NDPS", "ndps");
9777 proto_register_field_array(proto_ndps
, hf_ndps
, array_length(hf_ndps
));
9778 proto_register_subtree_array(ett
, array_length(ett
));
9779 expert_ndps
= expert_register_protocol(proto_ndps
);
9780 expert_register_field_array(expert_ndps
, ei
, array_length(ei
));
9782 ndps_module
= prefs_register_protocol(proto_ndps
, NULL
);
9783 prefs_register_bool_preference(ndps_module
, "desegment_tcp",
9784 "Reassemble NDPS messages spanning multiple TCP segments",
9785 "Whether the NDPS dissector should reassemble messages spanning multiple TCP segments."
9786 " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
9788 prefs_register_bool_preference(ndps_module
, "desegment_spx",
9789 "Reassemble fragmented NDPS messages spanning multiple SPX packets",
9790 "Whether the NDPS dissector should reassemble fragmented NDPS messages spanning multiple SPX packets",
9792 prefs_register_bool_preference(ndps_module
, "show_oid",
9793 "Display NDPS Details",
9794 "Whether or not the NDPS dissector should show object id's and other details",
9797 register_init_routine(&ndps_init_protocol
);
9798 register_postseq_cleanup_routine(&ndps_postseq_cleanup
);
9802 proto_reg_handoff_ndps(void)
9804 dissector_handle_t ndps_handle
, ndps_tcp_handle
;
9806 ndps_handle
= new_create_dissector_handle(dissect_ndps_ipx
, proto_ndps
);
9807 ndps_tcp_handle
= new_create_dissector_handle(dissect_ndps_tcp
, proto_ndps
);
9809 dissector_add_uint("spx.socket", SPX_SOCKET_PA
, ndps_handle
);
9810 dissector_add_uint("spx.socket", SPX_SOCKET_BROKER
, ndps_handle
);
9811 dissector_add_uint("spx.socket", SPX_SOCKET_SRS
, ndps_handle
);
9812 dissector_add_uint("spx.socket", SPX_SOCKET_ENS
, ndps_handle
);
9813 dissector_add_uint("spx.socket", SPX_SOCKET_RMS
, ndps_handle
);
9814 dissector_add_uint("spx.socket", SPX_SOCKET_NOTIFY_LISTENER
, ndps_handle
);
9815 dissector_add_uint("tcp.port", TCP_PORT_PA
, ndps_tcp_handle
);
9816 dissector_add_uint("tcp.port", TCP_PORT_BROKER
, ndps_tcp_handle
);
9817 dissector_add_uint("tcp.port", TCP_PORT_SRS
, ndps_tcp_handle
);
9818 dissector_add_uint("tcp.port", TCP_PORT_ENS
, ndps_tcp_handle
);
9819 dissector_add_uint("tcp.port", TCP_PORT_RMS
, ndps_tcp_handle
);
9820 dissector_add_uint("tcp.port", TCP_PORT_NOTIFY_LISTENER
, ndps_tcp_handle
);
9821 ndps_data_handle
= find_dissector("data");