MSWSP: fix dissect_mswsp_smb()
[wireshark-wip.git] / epan / dissectors / packet-ndps.c
blob349a41b95299d5f47061a31d2b60e24c2fb73183
1 /* packet-ndps.c
2 * Routines for NetWare's NDPS
3 * Greg Morris <gmorris@novell.com>
4 * Copyright (c) Novell, Inc. 2002-2003
6 * $Id$
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.
27 #include "config.h"
29 #include <glib.h>
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;
55 /* Show ID's value */
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" },
370 { 0, NULL }
373 static const value_string ndps_limit_enc_enum[] = {
374 { 0x00000000, "Time" },
375 { 0x00000001, "Count" },
376 { 0x00000002, "Error" },
377 { 0, NULL }
380 static const value_string problem_type_enum[] = {
381 { 0x00000000, "Standard" },
382 { 0x00000001, "Extended" },
383 { 0, NULL }
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" },
393 { 0, NULL }
396 static const value_string reject_stat[] = {
397 { 0x00000000, "RPC Mismatch" },
398 { 0x00000001, "Authentication Error" },
399 { 0, NULL }
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" },
411 { 0, NULL }
414 static const value_string security_problem_enum[] = {
415 { 0x00000000, "Authentication" },
416 { 0x00000001, "Credentials" },
417 { 0x00000002, "Rights" },
418 { 0x00000003, "Invalid PAC" },
419 { 0, NULL }
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" },
440 { 0, NULL }
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" },
452 { 0, NULL }
455 static const value_string printer_problem_enum[] = {
456 { 0x00000000, "Printer Error" },
457 { 0x00000001, "Printer Needs Attention" },
458 { 0x00000002, "Printer Needs Key Operator" },
459 { 0, NULL }
462 static const value_string selection_problem_enum[] = {
463 { 0x00000000, "Invalid ID" },
464 { 0x00000001, "Unknown ID" },
465 { 0x00000002, "Object Exists" },
466 { 0x00000003, "ID Changed" },
467 { 0, NULL }
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" },
476 { 0, NULL }
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" },
494 { 0, NULL }
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" },
502 { 0, NULL }
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" },
515 { 0, NULL }
518 static const value_string nameorid_enum[] = {
519 { 0x00000000, "None" },
520 { 0x00000001, "Global" },
521 { 0x00000002, "Local" },
522 { 0, NULL }
525 static const value_string qualified_name_enum[] = {
526 { 0x00000000, "None" },
527 { 0x00000001, "Simple" },
528 { 0x00000002, "NDS" },
529 { 0, NULL }
532 #if 0
533 static const value_string qualified_name_enum2[] = {
534 { 0x00000000, "NDS" },
535 { 0, NULL }
537 #endif
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" },
546 { 0, NULL }
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" },
587 { 0, NULL }
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" },
609 { 0, NULL }
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" },
618 { 0, NULL }
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" },
635 { 0, NULL }
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" },
650 { 0, NULL }
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" },
663 { 0, NULL }
666 static const value_string ndps_packet_types[] = {
667 { 0x00000000, "Request" },
668 { 0x00000001, "Reply" },
669 { 0, NULL }
672 static const value_string ndps_realization_enum[] = {
673 { 0x00000000, "Logical" },
674 { 0x00000001, "Physical" },
675 { 0x00000002, "Logical & Physical" },
676 { 0, NULL }
679 static const value_string ndps_dim_value_enum[] = {
680 { 0x00000000, "Numeric" },
681 { 0x00000001, "Named" },
682 { 0, NULL }
685 static const value_string ndps_xydim_value_enum[] = {
686 { 0x00000000, "Real" },
687 { 0x00000001, "Named" },
688 { 0x00000002, "Cardinal" },
689 { 0, NULL }
692 static const value_string ndps_location_value_enum[] = {
693 { 0x00000000, "Numeric" },
694 { 0x00000001, "Named" },
695 { 0, NULL }
698 static const value_string ndps_edge_value_enum[] = {
699 { 0x00000000, "Bottom" },
700 { 0x00000001, "Right" },
701 { 0x00000002, "Top" },
702 { 0x00000003, "Left" },
703 { 0, NULL }
706 static const value_string ndps_card_or_oid_enum[] = {
707 { 0x00000000, "Number" },
708 { 0x00000001, "ID" },
709 { 0, NULL }
712 static const value_string ndps_card_name_or_oid_enum[] = {
713 { 0x00000000, "Number" },
714 { 0x00000001, "ID" },
715 { 0, NULL }
718 static const value_string ndps_integer_or_oid_enum[] = {
719 { 0x00000000, "ID" },
720 { 0x00000001, "Number" },
721 { 0, NULL }
724 static const value_string ndps_persistence_enum[] = {
725 { 0x00000000, "Permanent" },
726 { 0x00000001, "Volatile" },
727 { 0, NULL }
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" },
749 { 0, NULL }
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" },
760 { 0, NULL }
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" },
770 { 0, NULL }
773 static const value_string ndps_event_object_enum[] = {
774 { 0x00000000, "Object" },
775 { 0x00000001, "Filter" },
776 { 0x00000002, "Detail" },
777 { 0, NULL }
780 static const value_string ndps_service_type_enum[] = {
781 { 0x00000000, "SRS" },
782 { 0x00000001, "ENS" },
783 { 0x00000002, "RMS" },
784 { 0, NULL }
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" },
795 { 0, NULL }
798 static const value_string ndps_resource_enum[] = {
799 { 0x00000000, "Name or ID" },
800 { 0x00000001, "Text" },
801 { 0, NULL }
805 static const value_string ndps_identifier_enum[] = {
806 { 0x00000000, "ID Nominal Number" },
807 { 0x00000001, "ID Alpha-numeric" },
808 { 0x00000002, "ID Tag" },
809 { 0, NULL }
812 static const value_string ndps_media_enum[] = {
813 { 0x00000000, "Select All Pages" },
814 { 0x00000001, "Selected Pages" },
815 { 0, NULL }
818 static const value_string ndps_page_size_enum[] = {
819 { 0x00000000, "ID" },
820 { 0x00000001, "Dimensions" },
821 { 0, NULL }
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" },
835 { 0, NULL }
838 static const value_string ndps_page_order_enum[] = {
839 { 0x00000000, "Unknown" },
840 { 0x00000001, "First to Last" },
841 { 0x00000002, "Last to First" },
842 { 0, NULL }
845 static const value_string ndps_medium_size_enum[] = {
846 { 0x00000000, "Discrete" },
847 { 0x00000001, "Continuous" },
848 { 0, NULL }
851 static const value_string ndps_page_orientation_enum[] = {
852 { 0x00000000, "Unknown" },
853 { 0x00000001, "Face Up" },
854 { 0x00000002, "Face Down" },
855 { 0, NULL }
858 static const value_string ndps_print_security[] = {
859 { 0x00000001, "Low" },
860 { 0x00000002, "Medium" },
861 { 0x00000003, "High" },
862 { 0, NULL }
865 static const value_string ndps_numbers_up_enum[] = {
866 { 0x00000000, "Cardinal" },
867 { 0x00000001, "Name or Object ID" },
868 { 0x00000002, "Cardinal Range" },
869 { 0, NULL }
873 static const value_string ndps_state_severity_enum[] = {
874 { 0x00000001, "Other" },
875 { 0x00000002, "Warning" },
876 { 0x00000003, "Critical" },
877 { 0, NULL }
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" },
888 { 0, NULL }
891 static const value_string ndps_colorant_set_enum[] = {
892 { 0x00000000, "Name" },
893 { 0x00000001, "Description" },
894 { 0, NULL }
897 static const value_string ndps_card_enum_time_enum[] = {
898 { 0x00000000, "Cardinal" },
899 { 0x00000001, "Enumeration" },
900 { 0x00000002, "Time" },
901 { 0, NULL }
904 static const value_string ndps_attrs_arg_enum[] = {
905 { 0x00000000, "Continuation" },
906 { 0x00000001, "Specification" },
907 { 0, NULL }
911 static const value_string ndps_filter_enum[] = {
912 { 0x00000000, "Item" },
913 { 0x00000001, "And" },
914 { 0x00000002, "Or" },
915 { 0x00000003, "Not" },
916 { 0, NULL }
920 #if 0
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" },
930 { 0, NULL }
933 static const value_string ndps_match_criteria_enum[] = {
934 { 0x00000000, "Exact" },
935 { 0x00000001, "Case Insensitive" },
936 { 0x00000002, "Same Letter" },
937 { 0x00000003, "Approximate" },
938 { 0, NULL }
940 #endif
942 static const value_string ndps_operator_enum[] = {
943 { 0x00000000, "Attributes" },
944 { 0x00000002, "Ordered Jobs" },
945 { 0, NULL }
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" },
964 { 0, NULL }
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" },
979 { 0, NULL }
982 static const value_string ndps_banner_type_enum[] = {
983 { 0x00000000, "All" },
984 { 0x00000001, "PCL" },
985 { 0x00000002, "PostScript" },
986 { 0x00000003, "ASCII Text" },
987 { 0, NULL }
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" },
996 { 0, NULL }
999 static const value_string ndps_archive_enum[] = {
1000 { 0x00000000, "ZIP" },
1001 { 0x00000001, "JAR" },
1002 { 0, NULL }
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" },
1013 { 0, NULL }
1016 static const value_string ndps_print_arg_enum[] = {
1017 { 0x00000000, "Create Job" },
1018 { 0x00000001, "Add Document" },
1019 { 0x00000002, "Close Job" },
1020 { 0, NULL }
1023 static const value_string ndps_doc_content_enum[] = {
1024 { 0x00000000, "Content Included" },
1025 { 0x00000001, "Content Referenced" },
1026 { 0, NULL }
1029 static const value_string ndps_interrupt_job_enum[] = {
1030 { 0x00000000, "Job ID" },
1031 { 0x00000001, "Name" },
1032 { 0, NULL }
1035 static const value_string ndps_pause_job_enum[] = {
1036 { 0x00000000, "Job ID" },
1037 { 0x00000001, "Name" },
1038 { 0, NULL }
1041 static const value_string ndps_resubmit_op_enum[] = {
1042 { 0x00000000, "Copy" },
1043 { 0x00000001, "Move" },
1044 { 0, NULL }
1047 static const value_string ndps_shutdown_enum[] = {
1048 { 0x00000000, "Do Current Jobs" },
1049 { 0x00000001, "Immediate" },
1050 { 0x00000002, "Do Pending Jobs" },
1051 { 0, NULL }
1054 static const value_string ndps_list_profiles_choice_enum[] = {
1055 { 0x00000000, "ID" },
1056 { 0x00000001, "Filter" },
1057 { 0, NULL }
1060 static const value_string ndps_list_profiles_result_enum[] = {
1061 { 0x00000000, "Complete" },
1062 { 0x00000001, "No Event Objects" },
1063 { 0x00000002, "Profile ID's" },
1064 { 0, NULL }
1067 static const value_string ndps_ds_info_enum[] = {
1068 { 0x00000000, "Add" },
1069 { 0x00000001, "Remove" },
1070 { 0x00000002, "Update" },
1071 { 0, NULL }
1074 static const value_string ndps_list_services_enum[] = {
1075 { 0x00000000, "Supported" },
1076 { 0x00000001, "Enabled" },
1077 { 0, NULL }
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" },
1087 { 0, NULL }
1090 static const value_string ndps_list_local_servers_enum[] = {
1091 { 0x00000000, "Specification" },
1092 { 0x00000001, "Continuation" },
1093 { 0, NULL }
1096 static const value_string ndps_delivery_method_enum[] = {
1097 { 0x00000000, "Specification" },
1098 { 0x00000001, "Continuation" },
1099 { 0, NULL }
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" },
1213 { 0, NULL }
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" },
1946 { 0, NULL }
1949 static const value_string ndps_credential_enum[] = {
1950 { 0, "SIMPLE" },
1951 { 1, "CERTIFIED" },
1952 { 2, "NDPS 0" },
1953 { 3, "NDPS 1" },
1954 { 4, "NDPS 2" },
1955 { 0, NULL }
1958 static const value_string ndps_object_op_enum[] = {
1959 { 0, "None" },
1960 { 1, "Add" },
1961 { 2, "Delete" },
1962 { 3, "Delete Object" },
1963 { 0, NULL }
1966 static const value_string ndps_client_server_enum[] = {
1967 { 0, "Client" },
1968 { 1, "Server" },
1969 { 2, "Client and Server" },
1970 { 0, NULL }
1973 static const value_string ndps_session_type_enum[] = {
1974 { 0, "Unknown" },
1975 { 1, "User" },
1976 { 2, "Admin" },
1977 { 3, "Server" },
1978 { 4, "Registry" },
1979 { 0, NULL }
1982 static const value_string ndps_get_session_type_enum[] = {
1983 { 0, "Unknown" },
1984 { 1, "User" },
1985 { 2, "Admin" },
1986 { 3, "Supplier" },
1987 { 0, NULL }
1990 static const value_string ndps_get_resman_session_type_enum[] = {
1991 { 0, "Unknown" },
1992 { 1, "User" },
1993 { 2, "Admin" },
1994 { 0, NULL }
1997 static int
1998 align_4(tvbuff_t *tvb, int aoffset)
2000 if(tvb_length_remaining(tvb, aoffset) > 4 )
2002 return (aoffset%4);
2004 return 0;
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).
2018 static int
2019 ndps_string(tvbuff_t* tvb, int hfinfo, proto_tree *ndps_tree, int offset, char **stringval)
2021 int foffset = offset;
2022 guint32 str_length;
2023 char *string;
2025 str_length = tvb_get_ntohl(tvb, foffset);
2026 foffset += 4;
2027 if(str_length == 0)
2029 proto_tree_add_string(ndps_tree, hfinfo, tvb, offset, 4, "<Not Specified>");
2030 if (stringval != NULL)
2031 *stringval = wmem_strdup(wmem_packet_scope(), "");
2032 return foffset;
2034 if (str_length <= 2 || (str_length & 0x01) || tvb_get_guint8(tvb, foffset + 1) != 0) {
2036 * ASCII.
2038 string = tvb_get_string(wmem_packet_scope(), tvb, foffset, str_length);
2039 } else {
2041 * Unicode.
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;
2050 return foffset;
2053 static int
2054 objectidentifier(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2056 guint32 length;
2057 const char *label=NULL;
2058 guint32 label_value=0;
2059 proto_tree *atree;
2060 proto_item *aitem;
2061 gboolean found=TRUE;
2063 length = tvb_get_ntohl(tvb, foffset);
2064 if (length==0)
2066 return foffset;
2068 if (ndps_show_oids)
2070 proto_tree_add_uint(ndps_tree, hf_oid_struct_size, tvb, foffset, 4, length);
2072 foffset += 4;
2073 switch (length)
2075 case 9:
2076 label_value = tvb_get_ntohl(tvb, foffset+5);
2077 label = try_val_to_str(label_value, object_ids_7);
2078 if (label==NULL)
2080 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2081 found=FALSE;
2082 break;
2084 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_7, tvb, foffset, length, "%s", label);
2085 break;
2086 case 10:
2087 label_value = tvb_get_ntohl(tvb, foffset+6);
2088 label = try_val_to_str(label_value, object_ids_8);
2089 if (label==NULL)
2091 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2092 found=FALSE;
2093 break;
2095 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_8, tvb, foffset, length, "%s", label);
2096 break;
2097 case 11:
2098 label_value = tvb_get_ntohl(tvb, foffset+7);
2099 label = try_val_to_str(label_value, object_ids_9);
2100 if (label==NULL)
2102 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2103 found=FALSE;
2104 break;
2106 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_9, tvb, foffset, length, "%s", label);
2107 break;
2108 case 12:
2109 label_value = tvb_get_ntohl(tvb, foffset+8);
2110 label = try_val_to_str(label_value, object_ids_10);
2111 if (label==NULL)
2113 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2114 found=FALSE;
2115 break;
2117 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_10, tvb, foffset, length, "%s", label);
2118 break;
2119 case 13:
2120 label_value = tvb_get_ntohl(tvb, foffset+9);
2121 label = try_val_to_str(label_value, object_ids_11);
2122 if (label==NULL)
2124 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2125 found=FALSE;
2126 break;
2128 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_11, tvb, foffset, length, "%s", label);
2129 break;
2130 case 14:
2131 label_value = tvb_get_ntohl(tvb, foffset+10);
2132 label = try_val_to_str(label_value, object_ids_12);
2133 if (label==NULL)
2135 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2136 found=FALSE;
2137 break;
2139 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_12, tvb, foffset, length, "%s", label);
2140 break;
2141 case 15:
2142 label_value = tvb_get_ntohl(tvb, foffset+11);
2143 label = try_val_to_str(label_value, object_ids_13);
2144 if (label==NULL)
2146 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2147 found=FALSE;
2148 break;
2150 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_13, tvb, foffset, length, "%s", label);
2151 break;
2152 case 16:
2153 label_value = tvb_get_ntohl(tvb, foffset+12);
2154 label = try_val_to_str(label_value, object_ids_14);
2155 if (label==NULL)
2157 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2158 found=FALSE;
2159 break;
2161 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_14, tvb, foffset, length, "%s", label);
2162 break;
2163 case 17:
2164 label_value = tvb_get_ntohl(tvb, foffset+13);
2165 label = try_val_to_str(label_value, object_ids_15);
2166 if (label==NULL)
2168 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2169 found=FALSE;
2170 break;
2172 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_15, tvb, foffset, length, "%s", label);
2173 break;
2174 case 18:
2175 label_value = tvb_get_ntohl(tvb, foffset+14);
2176 label = try_val_to_str(label_value, object_ids_16);
2177 if (label==NULL)
2179 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2180 found=FALSE;
2181 break;
2183 aitem = proto_tree_add_none_format(ndps_tree, hf_ndps_object_ids_16, tvb, foffset, length, "%s", label);
2184 break;
2185 default:
2186 aitem = proto_tree_add_text(ndps_tree, tvb, foffset, length, "Unknown ID");
2187 found=FALSE;
2188 break;
2190 if (!found)
2192 label_value = 1;
2193 label = try_val_to_str(label_value, object_ids_7);
2195 if (ndps_show_oids)
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);
2199 foffset += 1;
2200 length = tvb_get_guint8(tvb, foffset);
2201 foffset += 1;
2202 tvb_ensure_bytes_exist(tvb, foffset, length);
2203 proto_tree_add_item(atree, hf_ndps_oid, tvb, foffset, length, ENC_NA);
2204 foffset += length;
2206 else
2208 if (!found)
2210 tvb_ensure_bytes_exist(tvb, foffset, length);
2211 foffset += length;
2213 else
2215 foffset += 1;
2216 length = tvb_get_guint8(tvb, foffset);
2217 foffset += 1;
2218 tvb_ensure_bytes_exist(tvb, foffset, length);
2219 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);
2230 static int
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);
2237 foffset += 4;
2238 switch (name_or_id_val)
2240 case 1: /* Global */
2241 foffset = objectidentifier(tvb, ndps_tree, foffset);
2242 break;
2244 case 2: /* Local */
2245 foffset = ndps_string(tvb, hf_ndps_local_object_name, ndps_tree, foffset, NULL);
2246 break;
2248 foffset += align_4(tvb, foffset);
2249 return foffset;
2252 static int
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);
2259 foffset += 4;
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);
2264 else
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);
2270 return foffset;
2273 static int
2274 objectidentification(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2276 guint32 object_type=0;
2277 proto_tree *atree;
2278 proto_item *aitem;
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);
2283 foffset += 4;
2284 switch(object_type)
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,
2289 4, ENC_BIG_ENDIAN);
2290 foffset += 4;
2291 break;
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,
2295 4, ENC_BIG_ENDIAN);
2296 foffset += 4;
2297 break;
2298 case 2: /* Object Identifier */
2299 foffset = objectidentifier(tvb, atree, foffset);
2300 break;
2301 case 3: /* Object Name */
2302 foffset = ndps_string(tvb, hf_object_name, atree, foffset, NULL);
2303 if (foffset > tvb_length_remaining(tvb, foffset)) {
2304 return foffset;
2306 foffset = name_or_id(tvb, atree, foffset);
2307 break;
2308 case 4: /* Name or Object ID */
2309 foffset = name_or_id(tvb, atree, foffset);
2310 break;
2311 case 5: /* Simple Name */
2312 foffset = ndps_string(tvb, hf_object_name, atree, foffset, NULL);
2313 break;
2314 case 6: /* Printer Configuration Object ID */
2315 foffset = ndps_string(tvb, hf_ndps_printer_name, atree, foffset, NULL);
2316 break;
2317 case 7: /* Qualified Name */
2318 foffset = qualifiedname(tvb, ndps_tree, foffset);
2319 break;
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,
2324 4, ENC_BIG_ENDIAN);
2325 foffset += 4;
2326 default:
2327 break;
2329 return foffset;
2332 static int
2333 print_address(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2335 guint32 addr_type=0;
2336 guint32 addr_len=0;
2338 addr_type = tvb_get_ntohl(tvb, foffset);
2339 proto_tree_add_uint(ndps_tree, hf_ndps_address, tvb, foffset, 4, addr_type);
2340 foffset += 4;
2341 addr_len = tvb_get_ntohl(tvb, foffset);
2342 proto_tree_add_item(ndps_tree, hf_address_len, tvb, foffset, 4, ENC_BIG_ENDIAN);
2343 foffset += 4;
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?
2351 switch(addr_type)
2353 case 0x00000000:
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);
2357 break;
2358 case 0x00000001:
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);
2361 break;
2362 default:
2363 break;
2365 tvb_ensure_bytes_exist(tvb, foffset, addr_len);
2366 foffset += addr_len;
2367 return foffset+(addr_len%4);
2370 static int
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);
2377 foffset += 4;
2378 switch(addr_type)
2380 case 0:
2381 case 1:
2382 case 2:
2383 case 3:
2384 case 4:
2385 case 5:
2386 case 6:
2387 case 7:
2388 foffset = qualifiedname(tvb, ndps_tree, foffset);
2389 break;
2390 case 8:
2391 case 9:
2392 case 10:
2393 case 11:
2394 case 12:
2395 foffset = ndps_string(tvb, hf_object_name, ndps_tree, foffset, NULL);
2396 break;
2397 case 13:
2398 proto_tree_add_item(ndps_tree, hf_ndps_attrib_boolean, tvb, foffset, 4, ENC_BIG_ENDIAN);
2399 foffset += 4;
2400 break;
2401 case 14:
2402 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
2403 foffset += 4;
2404 break;
2405 case 15:
2406 foffset = print_address(tvb, ndps_tree, foffset);
2407 break;
2408 case 16:
2409 case 17:
2410 default:
2411 foffset = ndps_string(tvb, hf_object_name, ndps_tree, foffset, NULL);
2412 break;
2414 return foffset;
2417 static int
2418 credentials(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2420 guint32 cred_type=0;
2421 guint32 length=0;
2422 guint32 number_of_items;
2423 guint32 ii;
2424 proto_tree *atree;
2425 proto_item *aitem;
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);
2429 foffset += 4;
2430 switch (cred_type)
2432 case 0:
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);
2436 foffset += 4;
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]");
2441 break;
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);
2446 foffset += 4;
2447 if (length!=0)
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);
2453 foffset += length;
2455 break;
2456 case 1:
2457 length = tvb_get_ntohl(tvb, foffset);
2458 foffset += 4;
2459 if (length!=0)
2461 tvb_ensure_bytes_exist(tvb, foffset, length);
2462 proto_tree_add_item(ndps_tree, hf_ndps_certified, tvb, foffset, length, ENC_NA);
2464 foffset += length;
2465 break;
2466 case 2:
2467 foffset = ndps_string(tvb, hf_ndps_server_name, ndps_tree, foffset, NULL);
2468 foffset += 2;
2469 proto_tree_add_item(ndps_tree, hf_ndps_connection, tvb, foffset, 2, ENC_BIG_ENDIAN);
2470 foffset += 2;
2471 break;
2472 case 3:
2473 length=tvb_get_ntohl(tvb, foffset);
2474 foffset = ndps_string(tvb, hf_ndps_server_name, ndps_tree, foffset, NULL);
2475 if (length == 0)
2477 foffset += 2;
2479 if (tvb_get_ntohs(tvb, foffset)==0) /* NDPS 1.0 */
2481 foffset+=2;
2482 if (tvb_get_ntohs(tvb, foffset)==0) /* NDPS 1.1 */
2484 foffset += 2;
2487 proto_tree_add_item(ndps_tree, hf_ndps_connection, tvb, foffset, 2, ENC_BIG_ENDIAN);
2488 foffset += 2;
2489 foffset = ndps_string(tvb, hf_ndps_user_name, ndps_tree, foffset, NULL);
2490 break;
2491 case 4:
2492 foffset = ndps_string(tvb, hf_ndps_server_name, ndps_tree, foffset, NULL);
2493 foffset += 2;
2494 proto_tree_add_item(ndps_tree, hf_ndps_connection, tvb, foffset, 2, ENC_BIG_ENDIAN);
2495 foffset += 2;
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);
2502 break;
2503 default:
2504 break;
2506 return foffset;
2510 static int
2511 event_object_set(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2513 guint32 number_of_items;
2514 guint32 number_of_items2;
2515 guint32 ii;
2516 guint32 jj;
2517 guint32 object_identifier;
2518 proto_tree *atree;
2519 proto_item *aitem;
2520 proto_tree *btree;
2521 proto_item *bitem;
2522 proto_tree *ctree;
2523 proto_item *citem;
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);
2529 foffset += 4;
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]");
2534 break;
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);
2539 foffset += 4;
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);
2545 foffset += 4;
2546 object_identifier = tvb_get_ntohl(tvb, foffset);
2547 proto_tree_add_uint(btree, hf_ndps_event_object_identifier, tvb, foffset, 4, object_identifier);
2548 foffset += 4;
2549 switch (object_identifier)
2551 case 1:
2552 foffset = objectidentifier(tvb, btree, foffset);
2553 foffset += align_4(tvb, foffset);
2554 break;
2556 case 2:
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);
2559 foffset += 4;
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]");
2564 break;
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);
2572 break;
2574 proto_item_set_end(bitem, tvb, foffset);
2576 proto_item_set_end(aitem, tvb, foffset);
2577 return foffset;
2581 static int
2582 cardinal_seq(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2584 guint32 number_of_items;
2585 guint32 length;
2586 guint32 ii;
2587 proto_tree *atree;
2588 proto_item *aitem;
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);
2592 foffset += 4;
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]");
2597 break;
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);
2602 foffset += 4;
2603 if (length==4)
2605 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
2607 tvb_ensure_bytes_exist(tvb, foffset, length);
2608 foffset += length;
2609 foffset += (length%2);
2610 if ((int) foffset <= 0)
2611 THROW(ReportedBoundsError);
2612 proto_item_set_end(aitem, tvb, foffset);
2614 return foffset;
2618 static int
2619 server_entry(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2621 char *server_name;
2622 guint32 number_of_items;
2623 guint32 ii;
2624 guint32 data_type;
2625 proto_tree *atree;
2626 proto_item *aitem;
2627 proto_tree *btree;
2628 proto_item *bitem;
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);
2635 foffset += 4;
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);
2639 foffset += 4;
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]");
2644 break;
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);
2650 foffset += 4;
2651 switch (data_type)
2653 case 0: /* Int8 */
2654 proto_tree_add_item(btree, hf_info_int, tvb, foffset, 1, ENC_BIG_ENDIAN);
2655 foffset++;
2656 break;
2657 case 1: /* Int16 */
2658 proto_tree_add_item(btree, hf_info_int16, tvb, foffset, 2, ENC_BIG_ENDIAN);
2659 foffset += 2;
2660 break;
2661 case 2: /* Int32 */
2662 proto_tree_add_item(btree, hf_info_int32, tvb, foffset, 4, ENC_BIG_ENDIAN);
2663 foffset += 4;
2664 break;
2665 case 3: /* Boolean */
2666 proto_tree_add_item(btree, hf_info_boolean, tvb, foffset, 4, ENC_BIG_ENDIAN);
2667 foffset += 4;
2668 break;
2669 case 4: /* String */
2670 case 5: /* Bytes */
2671 foffset = ndps_string(tvb, hf_info_string, btree, foffset, NULL);
2672 break;
2673 default:
2674 break;
2676 proto_item_set_end(bitem, tvb, foffset);
2678 proto_item_set_end(aitem, tvb, foffset);
2679 return foffset;
2683 static int
2684 attribute_value(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
2686 guint32 ii;
2687 guint32 jj;
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;
2698 guint32 media_type;
2699 guint32 doc_content;
2700 guint32 page_size;
2701 guint32 medium_size;
2702 guint32 numbers_up;
2703 guint32 colorant_set;
2704 guint32 length;
2705 guint32 dimension;
2706 guint32 location;
2707 guint32 cardinal;
2708 const char *label;
2709 guint32 label_value;
2710 proto_tree *atree;
2711 proto_item *aitem;
2712 proto_tree *btree;
2713 proto_item *bitem;
2715 if (global_attribute_name==NULL)
2717 label_value = 1;
2718 label = try_val_to_str(label_value, object_ids_7);
2719 global_attribute_name = label;
2721 attribute_type = tvb_get_ntohl(tvb, foffset);
2722 if (ndps_show_oids)
2724 proto_tree_add_item(ndps_tree, hf_ndps_obj_attribute_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
2726 foffset += 4;
2727 switch(attribute_type)
2729 case 0: /* Null */
2730 proto_tree_add_item(ndps_tree, hf_ndps_data, tvb, foffset+4, tvb_get_ntohl(tvb, foffset), ENC_NA);
2731 break;
2732 case 1: /* Text */
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);
2743 break;
2744 case 4: /* Message */
2745 case 5: /* Error Message */
2746 case 38: /* Name or OID */
2747 foffset = name_or_id(tvb, ndps_tree, foffset);
2748 break;
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);
2752 foffset += 4;
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]");
2757 break;
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);
2764 break;
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);
2769 break;
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);
2773 foffset += 4;
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]");
2778 break;
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);
2786 break;
2787 case 9: /* Delta Time */
2788 case 10: /* 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);
2802 foffset += 4;
2804 else
2806 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
2807 foffset += 4;
2809 break;
2810 case 12: /* Integer Seq */
2811 case 14: /* Cardinal Seq */
2812 length = tvb_get_ntohl(tvb, foffset);
2813 foffset += 4;
2814 if (length==4)
2816 proto_tree_add_item(ndps_tree, hf_info_int32, tvb, foffset, length, ENC_BIG_ENDIAN);
2818 tvb_ensure_bytes_exist(tvb, foffset, length);
2819 foffset += length;
2820 break;
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);
2824 foffset += 4;
2825 proto_tree_add_item(ndps_tree, hf_ndps_upper_range, tvb, foffset, 4, ENC_BIG_ENDIAN);
2826 foffset += 4;
2827 break;
2828 case 20: /* Integer 64 */
2829 case 22: /* Cardinal 64 */
2830 case 24: /* Positive Integer 64 */
2831 case 31: /* Non-Negative Real */
2832 case 29: /* Real */
2833 proto_tree_add_item(ndps_tree, hf_ndps_n64, tvb, foffset, 8, ENC_NA);
2834 foffset += 8;
2835 break;
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);
2841 foffset += 4;
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]");
2846 break;
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);
2851 foffset += 8;
2852 proto_item_set_end(aitem, tvb, foffset);
2854 break;
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);
2860 foffset += 8;
2861 proto_tree_add_item(ndps_tree, hf_ndps_upper_range_n64, tvb, foffset, 8, ENC_NA);
2862 foffset += 8;
2863 break;
2864 case 27: /* Maximum Integer 64 */
2865 proto_tree_add_item(ndps_tree, hf_ndps_lower_range_n64, tvb, foffset, 8, ENC_NA);
2866 foffset += 8;
2867 break;
2868 case 28: /* Minimum Integer 64 */
2869 proto_tree_add_item(ndps_tree, hf_ndps_upper_range_n64, tvb, foffset, 8, ENC_NA);
2870 foffset += 8;
2871 break;
2872 case 34: /* Boolean */
2873 proto_tree_add_item(ndps_tree, hf_ndps_attrib_boolean, tvb, foffset, 4, ENC_BIG_ENDIAN);
2874 foffset += 4;
2875 break;
2876 case 36: /* Object Identifier */
2877 foffset = objectidentifier(tvb, ndps_tree, foffset);
2878 break;
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);
2882 foffset += 4;
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]");
2887 break;
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);
2894 break;
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);
2898 foffset += 4;
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]");
2903 break;
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);
2910 break;
2911 case 42: /* Realization */
2912 proto_tree_add_item(ndps_tree, hf_ndps_realization, tvb, foffset, 4, ENC_BIG_ENDIAN);
2913 foffset += 4;
2914 break;
2915 case 43: /* Medium Dimensions */
2916 proto_tree_add_item(ndps_tree, hf_ndps_xdimension_n64, tvb, foffset, 8, ENC_NA);
2917 foffset += 8;
2918 proto_tree_add_item(ndps_tree, hf_ndps_ydimension_n64, tvb, foffset, 8, ENC_NA);
2919 foffset += 8;
2920 break;
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);
2924 foffset += 4;
2925 if (dimension == 0) {
2926 proto_tree_add_item(ndps_tree, hf_ndps_n64, tvb, foffset, 8, ENC_NA);
2927 foffset += 8;
2929 else
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);
2934 foffset += 4;
2935 proto_tree_add_item(ndps_tree, hf_ndps_n64, tvb, foffset, 8, ENC_NA);
2936 foffset += 8;
2937 break;
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);
2941 foffset += 4;
2942 if (dimension == 1) {
2943 foffset = name_or_id(tvb, ndps_tree, foffset);
2945 else
2947 proto_tree_add_item(ndps_tree, hf_ndps_xdimension_n64, tvb, foffset, 8, ENC_NA);
2948 foffset += 8;
2949 proto_tree_add_item(ndps_tree, hf_ndps_ydimension_n64, tvb, foffset, 8, ENC_NA);
2950 foffset += 8;
2952 proto_tree_add_item(ndps_tree, hf_ndps_dim_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
2953 foffset += 4;
2954 proto_tree_add_item(ndps_tree, hf_ndps_n64, tvb, foffset, 8, ENC_NA);
2955 foffset += 8;
2956 break;
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);
2960 foffset += 4;
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);
2964 foffset += 4;
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]");
2969 break;
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);
2974 foffset += 8;
2975 proto_item_set_end(aitem, tvb, foffset);
2978 else
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);
2983 foffset += 4;
2984 proto_tree_add_item(ndps_tree, hf_ndps_n64, tvb, foffset, 8, ENC_NA);
2985 foffset += 8;
2986 break;
2987 case 47: /* Area */
2988 proto_tree_add_item(ndps_tree, hf_ndps_xmin_n64, tvb, foffset, 8, ENC_NA);
2989 foffset += 8;
2990 proto_tree_add_item(ndps_tree, hf_ndps_xmax_n64, tvb, foffset, 8, ENC_NA);
2991 foffset += 8;
2992 proto_tree_add_item(ndps_tree, hf_ndps_ymin_n64, tvb, foffset, 8, ENC_NA);
2993 foffset += 8;
2994 proto_tree_add_item(ndps_tree, hf_ndps_ymax_n64, tvb, foffset, 8, ENC_NA);
2995 foffset += 8;
2996 break;
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);
3000 foffset += 4;
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]");
3005 break;
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);
3010 foffset += 8;
3011 proto_tree_add_item(atree, hf_ndps_xmax_n64, tvb, foffset, 8, ENC_NA);
3012 foffset += 8;
3013 proto_tree_add_item(atree, hf_ndps_ymin_n64, tvb, foffset, 8, ENC_NA);
3014 foffset += 8;
3015 proto_tree_add_item(atree, hf_ndps_ymax_n64, tvb, foffset, 8, ENC_NA);
3016 foffset += 8;
3017 proto_item_set_end(aitem, tvb, foffset);
3019 break;
3020 case 49: /* Edge */
3021 proto_tree_add_item(ndps_tree, hf_ndps_edge_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3022 foffset += 4;
3023 break;
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);
3027 foffset += 4;
3028 if (cardinal==0) {
3029 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3030 foffset += 4;
3032 else
3034 foffset = objectidentifier(tvb, ndps_tree, foffset);
3036 break;
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);
3040 foffset += 4;
3041 break;
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);
3045 foffset += 4;
3046 if (cardinal==0) {
3047 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3048 foffset += 4;
3050 else
3052 foffset = name_or_id(tvb, ndps_tree, foffset);
3054 break;
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);
3058 foffset += 4;
3059 if (integer_or_oid==0) {
3060 foffset = objectidentifier(tvb, ndps_tree, foffset);
3062 else
3064 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3065 foffset += 4;
3067 break;
3068 case 55: /* Event Handling Profile */
3069 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
3070 foffset += 4;
3071 proto_tree_add_item(ndps_tree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
3072 foffset += 4;
3073 foffset = qualifiedname(tvb, ndps_tree, foffset);
3074 length = tvb_get_ntohl(tvb, foffset);
3075 foffset += 4;
3076 if (length==4)
3078 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
3080 foffset += length;
3081 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
3082 foffset += 4;
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);
3087 foffset += 4;
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]");
3092 break;
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);
3101 foffset += 4;
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]");
3106 break;
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);
3111 foffset += 4;
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);
3116 foffset += 4;
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);
3119 foffset += 4;
3120 switch (event_object_type)
3122 case 2:
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);
3126 foffset += 4;
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]");
3131 break;
3133 foffset = objectidentifier(tvb, atree, foffset);
3135 foffset += 4;
3136 break;
3138 case 1:
3139 foffset = objectidentifier(tvb, atree, foffset);
3140 break;
3142 case 0:
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);
3145 foffset += 4;
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]");
3150 break;
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);
3157 break;
3159 proto_item_set_end(aitem, tvb, foffset);
3161 break;
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);
3169 break;
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);
3173 foffset += 4;
3174 switch(event_object_type)
3176 case 0: /*MHS ADDR*/
3177 case 1: /*DISTINGUISHED_NAME*/
3178 case 2: /*TEXT*/
3179 case 3: /*OCTET_STRING*/
3180 foffset = ndps_string(tvb, hf_info_string, ndps_tree, foffset, NULL);
3181 break;
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);
3185 break;
3186 case 5: /*RPC_ADDRESS*/
3187 case 6: /*QUALIFIED_NAME*/
3188 foffset = objectidentifier(tvb, ndps_tree, foffset);
3189 foffset = qualifiedname(tvb, ndps_tree, foffset);
3190 break;
3191 default:
3192 break;
3194 break;
3195 case 60: /* Object Identification */
3196 foffset = objectidentification(tvb, ndps_tree, foffset);
3197 break;
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);
3203 foffset += 4;
3204 foffset = name_or_id(tvb, ndps_tree, foffset);
3205 break;
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);
3210 foffset += 4;
3211 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3212 foffset += 4;
3213 break;
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);
3217 foffset += 4;
3218 break;
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);
3223 foffset += 4;
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]");
3228 break;
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);
3233 foffset += 4;
3234 if (length==4)
3236 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
3238 foffset += length;
3239 foffset += (length%2);
3240 if ((int) foffset <= 0)
3241 THROW(ReportedBoundsError);
3242 proto_item_set_end(aitem, tvb, foffset);
3244 break;
3245 case 67: /* Ignored Attribute */
3246 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3247 foffset += 4;
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);
3251 foffset += 4;
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]");
3256 break;
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);
3262 foffset += 4;
3263 if (ignored_type == 38)
3265 foffset = name_or_id(tvb, atree, foffset);
3267 else
3269 foffset = objectidentifier(tvb, atree, foffset);
3271 proto_item_set_end(aitem, tvb, foffset);
3273 break;
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);
3277 foffset += 4;
3278 if (resource_type == 0)
3280 foffset = name_or_id(tvb, ndps_tree, foffset);
3282 else
3284 foffset = ndps_string(tvb, hf_ndps_tree, ndps_tree, foffset, NULL);
3286 break;
3287 case 69: /* Medium Substitution */
3288 foffset = name_or_id(tvb, ndps_tree, foffset);
3289 foffset = name_or_id(tvb, ndps_tree, foffset);
3290 break;
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);
3294 break;
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);
3298 foffset += 4;
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]");
3303 break;
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);
3309 foffset += 4;
3310 if (resource_type == 0)
3312 foffset = name_or_id(tvb, atree, foffset);
3314 else
3316 foffset = ndps_string(tvb, hf_ndps_tree, atree, foffset, NULL);
3318 proto_item_set_end(aitem, tvb, foffset);
3320 break;
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);
3324 foffset += 4;
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]");
3329 break;
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);
3334 foffset += 4;
3335 identifier_type = tvb_get_ntohl(tvb, foffset);
3336 proto_tree_add_uint(atree, hf_ndps_identifier_type, tvb, foffset, 4, identifier_type);
3337 foffset += 4;
3338 if (identifier_type == 0)
3340 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3341 foffset += 4;
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);
3352 foffset += 4;
3353 identifier_type = tvb_get_ntohl(tvb, foffset);
3354 proto_tree_add_uint(atree, hf_ndps_identifier_type, tvb, foffset, 4, identifier_type);
3355 foffset += 4;
3356 if (identifier_type == 0)
3358 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3359 foffset += 4;
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);
3371 break;
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);
3375 foffset += 4;
3376 if (media_type == 0)
3378 foffset = name_or_id(tvb, ndps_tree, foffset);
3380 else
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);
3385 foffset += 4;
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]");
3390 break;
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);
3395 foffset += 4;
3396 identifier_type = tvb_get_ntohl(tvb, foffset);
3397 proto_tree_add_uint(atree, hf_ndps_identifier_type, tvb, foffset, 4, identifier_type);
3398 foffset += 4;
3399 if (identifier_type == 0)
3401 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3402 foffset += 4;
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);
3415 break;
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);
3419 foffset += 4;
3420 if (doc_content == 0)
3422 length = tvb_get_ntohl(tvb, foffset);
3423 foffset += 4;
3424 if (length!=0)
3426 proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, ENC_NA);
3428 foffset += length;
3429 foffset += (length%2);
3430 if ((int) foffset <= 0)
3431 THROW(ReportedBoundsError);
3433 else
3435 foffset = ndps_string(tvb, hf_object_name, ndps_tree, foffset, NULL);
3436 foffset = name_or_id(tvb, ndps_tree, foffset);
3438 break;
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);
3442 foffset += 4;
3443 if (page_size == 0)
3445 foffset = objectidentifier(tvb, ndps_tree, foffset);
3447 else
3449 proto_tree_add_item(ndps_tree, hf_ndps_xdimension_n64, tvb, foffset, 8, ENC_NA);
3450 foffset += 8;
3451 proto_tree_add_item(ndps_tree, hf_ndps_ydimension_n64, tvb, foffset, 8, ENC_NA);
3452 foffset += 8;
3454 break;
3455 case 77: /* Presentation Direction */
3456 proto_tree_add_item(ndps_tree, hf_ndps_direction, tvb, foffset, 4, ENC_BIG_ENDIAN);
3457 foffset += 4;
3458 break;
3459 case 78: /* Page Order */
3460 proto_tree_add_item(ndps_tree, hf_ndps_page_order, tvb, foffset, 4, ENC_BIG_ENDIAN);
3461 foffset += 4;
3462 break;
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);
3467 foffset += 4;
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);
3472 foffset += 4;
3473 if (page_size == 0)
3475 foffset = objectidentifier(tvb, ndps_tree, foffset);
3477 else
3479 proto_tree_add_item(ndps_tree, hf_ndps_xdimension_n64, tvb, foffset, 8, ENC_NA);
3480 foffset += 8;
3481 proto_tree_add_item(ndps_tree, hf_ndps_ydimension_n64, tvb, foffset, 8, ENC_NA);
3482 foffset += 8;
3484 proto_tree_add_item(ndps_tree, hf_ndps_long_edge_feeds, tvb, foffset, 4, ENC_BIG_ENDIAN);
3485 foffset += 4;
3486 proto_tree_add_item(ndps_tree, hf_ndps_xmin_n64, tvb, foffset, 8, ENC_NA);
3487 foffset += 8;
3488 proto_tree_add_item(ndps_tree, hf_ndps_xmax_n64, tvb, foffset, 8, ENC_NA);
3489 foffset += 8;
3490 proto_tree_add_item(ndps_tree, hf_ndps_ymin_n64, tvb, foffset, 8, ENC_NA);
3491 foffset += 8;
3492 proto_tree_add_item(ndps_tree, hf_ndps_ymax_n64, tvb, foffset, 8, ENC_NA);
3493 foffset += 8;
3495 else
3497 proto_tree_add_item(ndps_tree, hf_ndps_lower_range_n64, tvb, foffset, 8, ENC_NA);
3498 foffset += 8;
3499 proto_tree_add_item(ndps_tree, hf_ndps_upper_range_n64, tvb, foffset, 8, ENC_NA);
3500 foffset += 8;
3501 proto_tree_add_item(ndps_tree, hf_ndps_inc_across_feed, tvb, foffset, 8, ENC_NA);
3502 foffset += 8;
3503 proto_tree_add_item(ndps_tree, hf_ndps_lower_range_n64, tvb, foffset, 8, ENC_NA);
3504 foffset += 8;
3505 proto_tree_add_item(ndps_tree, hf_ndps_upper_range_n64, tvb, foffset, 8, ENC_NA);
3506 foffset += 8;
3507 proto_tree_add_item(ndps_tree, hf_ndps_size_inc_in_feed, tvb, foffset, 8, ENC_NA);
3508 foffset += 8;
3509 proto_tree_add_item(ndps_tree, hf_ndps_long_edge_feeds, tvb, foffset, 4, ENC_BIG_ENDIAN);
3510 foffset += 4;
3511 proto_tree_add_item(ndps_tree, hf_ndps_xmin_n64, tvb, foffset, 8, ENC_NA);
3512 foffset += 8;
3513 proto_tree_add_item(ndps_tree, hf_ndps_xmax_n64, tvb, foffset, 8, ENC_NA);
3514 foffset += 8;
3515 proto_tree_add_item(ndps_tree, hf_ndps_ymin_n64, tvb, foffset, 8, ENC_NA);
3516 foffset += 8;
3517 proto_tree_add_item(ndps_tree, hf_ndps_ymax_n64, tvb, foffset, 8, ENC_NA);
3518 foffset += 8;
3520 break;
3521 case 81: /* Input Tray Medium */
3522 foffset = name_or_id(tvb, ndps_tree, foffset);
3523 foffset = name_or_id(tvb, ndps_tree, foffset);
3524 break;
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);
3528 foffset += 4;
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]");
3533 break;
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);
3538 foffset += 4;
3539 proto_tree_add_item(atree, hf_ndps_page_orientation, tvb, foffset, 4, ENC_BIG_ENDIAN);
3540 foffset += 4;
3541 proto_item_set_end(aitem, tvb, foffset);
3543 break;
3544 case 83: /* Page ID Type */
3545 proto_tree_add_item(ndps_tree, hf_ndps_identifier_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
3546 foffset += 4;
3547 break;
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);
3551 foffset += 4;
3552 proto_tree_add_item(ndps_tree, hf_ndps_upper_range, tvb, foffset, 4, ENC_BIG_ENDIAN);
3553 foffset += 4;
3554 break;
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);
3559 foffset += 4;
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]");
3564 break;
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);
3569 foffset += 4;
3570 if (length==4)
3572 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
3574 foffset += length;
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);
3581 foffset += 4;
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]");
3586 break;
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);
3591 foffset += 4;
3592 if (length==4)
3594 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
3596 foffset += length;
3597 foffset += (length%2);
3598 if ((int) foffset <= 0)
3599 THROW(ReportedBoundsError);
3600 proto_item_set_end(aitem, tvb, foffset);
3602 break;
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);
3606 foffset += 4;
3607 switch(numbers_up)
3609 case 0: /*Cardinal*/
3610 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3611 foffset += 4;
3612 break;
3613 case 1: /*Name or OID*/
3614 foffset = name_or_id(tvb, ndps_tree, foffset);
3615 break;
3616 case 2: /*Cardinal Range*/
3617 proto_tree_add_item(ndps_tree, hf_ndps_lower_range, tvb, foffset, 4, ENC_BIG_ENDIAN);
3618 foffset += 4;
3619 proto_tree_add_item(ndps_tree, hf_ndps_upper_range, tvb, foffset, 4, ENC_BIG_ENDIAN);
3620 foffset += 4;
3621 break;
3622 default:
3623 break;
3625 break;
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);
3630 foffset += 4;
3631 break;
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);
3635 break;
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);
3639 foffset += 4;
3640 proto_tree_add_item(ndps_tree, hf_interval, tvb, foffset, 4, ENC_BIG_ENDIAN);
3641 foffset += 4;
3642 break;
3643 case 91: /* Network Address */
3644 proto_tree_add_item(ndps_tree, hf_ndps_address, tvb, foffset, 4, ENC_BIG_ENDIAN);
3645 foffset += 4;
3646 length = tvb_get_ntohl(tvb, foffset);
3647 foffset += 4;
3648 if (length!=0)
3650 proto_tree_add_item(ndps_tree, hf_ndps_add_bytes, tvb, foffset, 4, ENC_NA);
3652 foffset += length;
3653 break;
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);
3657 foffset += 4;
3658 switch (dimension)
3660 case 1:
3661 foffset = name_or_id(tvb, ndps_tree, foffset);
3662 break;
3664 case 0:
3665 proto_tree_add_item(ndps_tree, hf_ndps_xdimension_n64, tvb, foffset, 8, ENC_NA);
3666 foffset += 8;
3667 proto_tree_add_item(ndps_tree, hf_ndps_ydimension_n64, tvb, foffset, 8, ENC_NA);
3668 foffset += 8;
3669 break;
3671 default:
3672 proto_tree_add_item(ndps_tree, hf_ndps_xdimension, tvb, foffset, 4, ENC_BIG_ENDIAN);
3673 foffset += 4;
3674 proto_tree_add_item(ndps_tree, hf_ndps_ydimension, tvb, foffset, 4, ENC_BIG_ENDIAN);
3675 foffset += 4;
3676 break;
3678 break;
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);
3682 foffset += 4;
3683 proto_tree_add_item(ndps_tree, hf_ndps_ydimension, tvb, foffset, 4, ENC_BIG_ENDIAN);
3684 foffset += 4;
3685 break;
3686 case 94: /* Printer State Reason */
3687 foffset += 4;
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);
3690 foffset += 4;
3691 proto_tree_add_item(ndps_tree, hf_ndps_training, tvb, foffset, 4, ENC_BIG_ENDIAN);
3692 foffset += 4;
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);
3697 foffset += 4;
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);
3703 break;
3704 case 96: /* Qualified Name */
3705 foffset = qualifiedname(tvb, ndps_tree, foffset);
3706 break;
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);
3710 foffset += 4;
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]");
3715 break;
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);
3722 break;
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);
3726 foffset += 4;
3727 if (colorant_set==0)
3729 foffset = name_or_id(tvb, ndps_tree, foffset);
3731 else
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);
3737 foffset += 4;
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]");
3742 break;
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);
3750 break;
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);
3754 foffset += 4;
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]");
3759 break;
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);
3769 foffset += 4;
3770 break;
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);
3775 foffset += 4;
3776 break;
3777 case 101: /* Qualified Name Map */
3778 foffset = qualifiedname(tvb, ndps_tree, foffset);
3779 foffset = qualifiedname(tvb, ndps_tree, foffset);
3780 break;
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);
3784 foffset += 4;
3785 switch (card_enum_time)
3787 case 0:
3788 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3789 foffset += 4;
3790 break;
3792 case 1:
3793 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3794 foffset += 4;
3795 break;
3797 default:
3798 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3799 foffset += 4;
3800 break;
3802 break;
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);
3806 foffset += 4;
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]");
3811 break;
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);
3817 foffset += 4;
3818 proto_item_set_end(aitem, tvb, foffset);
3820 break;
3821 case 106: /* Octet String Pair */
3822 length = tvb_get_ntohl(tvb, foffset);
3823 foffset += 4;
3824 if (length!=0)
3826 tvb_ensure_bytes_exist(tvb, foffset, length);
3827 proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, ENC_NA);
3829 foffset += length;
3830 foffset += (length%2);
3831 length = tvb_get_ntohl(tvb, foffset);
3832 foffset += 4;
3833 if (length!=0)
3835 tvb_ensure_bytes_exist(tvb, foffset, length);
3836 proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, ENC_NA);
3838 foffset += length;
3839 foffset += (length%2);
3840 if ((int) foffset <= 0)
3841 THROW(ReportedBoundsError);
3842 break;
3843 case 107: /* Octet String Integer Pair */
3844 length = tvb_get_ntohl(tvb, foffset);
3845 foffset += 4;
3846 if (length!=0)
3848 tvb_ensure_bytes_exist(tvb, foffset, length);
3849 proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, ENC_NA);
3851 foffset += length;
3852 foffset += (length%2);
3853 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3854 foffset += 4;
3855 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3856 foffset += 4;
3857 break;
3858 case 109: /* Event Handling Profile 2 */
3859 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3860 foffset += 4;
3861 proto_tree_add_item(ndps_tree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
3862 foffset += 4;
3863 foffset = qualifiedname(tvb, ndps_tree, foffset);
3864 length = tvb_get_ntohl(tvb, foffset);
3865 foffset += 4;
3866 if (length!=0)
3868 tvb_ensure_bytes_exist(tvb, foffset, length);
3869 proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, ENC_NA);
3871 foffset += length;
3872 foffset += (length%2);
3873 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3874 foffset += 4;
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);
3878 foffset += 4;
3879 switch(event_object_type)
3881 case 0: /*MHS ADDR*/
3882 case 1: /*DISTINGUISHED_NAME*/
3883 case 2: /*TEXT*/
3884 foffset = ndps_string(tvb, hf_ndps_tree, ndps_tree, foffset, NULL);
3885 break;
3886 case 3: /*OCTET_STRING*/
3887 length = tvb_get_ntohl(tvb, foffset);
3888 foffset += 4;
3889 if (length!=0)
3891 tvb_ensure_bytes_exist(tvb, foffset, length);
3892 proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, ENC_NA);
3894 foffset += length;
3895 foffset += (length%2);
3896 if ((int) foffset <= 0)
3897 THROW(ReportedBoundsError);
3898 break;
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);
3902 break;
3903 case 5: /*RPC_ADDRESS*/
3904 case 6: /*QUALIFIED_NAME*/
3905 foffset = objectidentifier(tvb, ndps_tree, foffset);
3906 foffset = qualifiedname(tvb, ndps_tree, foffset);
3907 break;
3908 default:
3909 break;
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);
3913 foffset += 4;
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]");
3918 break;
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);
3925 foffset += 4;
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);
3932 foffset += 4;
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]");
3937 break;
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);
3945 foffset += 4;
3946 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3947 foffset += 4;
3948 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
3949 foffset += 4;
3950 foffset = ndps_string(tvb, hf_ndps_pa_name, ndps_tree, foffset, NULL);
3951 break;
3952 default:
3953 break;
3955 return foffset;
3959 static int
3960 commonarguments(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
3962 guint32 number_of_items;
3963 guint32 ii;
3964 proto_tree *atree;
3965 proto_item *aitem;
3966 proto_tree *btree;
3967 proto_item *bitem;
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);
3973 foffset += 4;
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]");
3978 break;
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);
3986 return foffset;
3989 static int
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);
3996 foffset += 4;
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);
4001 foffset += 4;
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);
4004 break;
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);
4008 break;
4009 case 2: /* Banner Page Files */
4010 foffset = ndps_string(tvb, hf_ndps_banner_name, ndps_tree, foffset, NULL);
4011 break;
4012 case 3: /* Font Types */
4013 proto_tree_add_item(ndps_tree, hf_os_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
4014 foffset += 4;
4015 proto_tree_add_item(ndps_tree, hf_font_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
4016 foffset += 4;
4017 foffset = ndps_string(tvb, hf_ndps_prn_file_name, ndps_tree, foffset, NULL);
4018 break;
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);
4022 foffset += 4;
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);
4025 foffset += 4;
4026 break;
4027 default:
4028 break;
4030 return foffset;
4034 static const fragment_items ndps_frag_items = {
4035 &ett_ndps_segment,
4036 &ett_ndps_segments,
4037 &hf_ndps_segments,
4038 &hf_ndps_segment,
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,
4045 NULL,
4046 &hf_ndps_reassembled_length,
4047 /* Reassembled data field */
4048 NULL,
4049 "segments"
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.
4073 typedef struct {
4074 conversation_t *conversation;
4075 guint32 ndps_xport;
4076 } ndps_req_hash_key;
4078 typedef struct {
4079 guint32 ndps_prog;
4080 guint32 ndps_func;
4081 guint32 ndps_frame_num;
4082 gboolean ndps_frag;
4083 guint32 ndps_end_frag;
4084 } ndps_req_hash_value;
4086 static GHashTable *ndps_req_hash = NULL;
4088 /* Hash Functions */
4089 static gint
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 ) {
4097 return 1;
4099 return 0;
4102 static guint
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 */
4111 static void
4112 ndps_init_protocol(void)
4114 /* fragment */
4115 reassembly_table_init(&ndps_reassembly_table,
4116 &addresses_reassembly_table_functions);
4118 if (ndps_req_hash)
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. */
4127 static void
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
4146 a reply to it. */
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 /* ================================================================= */
4176 /* NDPS */
4177 /* ================================================================= */
4179 static void
4180 dissect_ndps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ndps_tree)
4182 guint32 ndps_xid;
4183 guint32 ndps_prog;
4184 guint32 ndps_packet_type;
4185 int foffset;
4186 guint32 ndps_hfname;
4187 guint32 ndps_func;
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));
4196 return;
4198 foffset = 0;
4199 proto_tree_add_item(ndps_tree, hf_ndps_record_mark, tvb,
4200 foffset, 2, ENC_BIG_ENDIAN);
4201 foffset += 2;
4202 proto_tree_add_item(ndps_tree, hf_ndps_length, tvb,
4203 foffset, 2, ENC_BIG_ENDIAN);
4204 foffset += 2;
4206 ndps_xid = tvb_get_ntohl(tvb, foffset);
4207 proto_tree_add_uint(ndps_tree, hf_ndps_xid, tvb, foffset, 4, ndps_xid);
4208 foffset += 4;
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);
4211 foffset += 4;
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) {
4217 foffset += 4;
4218 proto_tree_add_item(ndps_tree, hf_ndps_auth_null, tvb, foffset, 8, ENC_NA);
4219 foffset += 8;
4221 else
4223 foffset += 4;
4224 proto_tree_add_item(ndps_tree, hf_ndps_rpc_rej_stat, tvb, foffset+4, 4, ENC_BIG_ENDIAN);
4225 foffset += 4;
4227 dissect_ndps_reply(tvb, pinfo, ndps_tree, foffset);
4229 else
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);
4233 foffset += 4;
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);
4239 foffset += 4;
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);
4244 foffset += 4;
4245 ndps_func = tvb_get_ntohl(tvb, foffset);
4246 switch(ndps_prog)
4248 case 0x060976:
4249 ndps_hfname = hf_spx_ndps_func_print;
4250 ndps_func_string = try_val_to_str(ndps_func, spx_ndps_print_func_vals);
4251 break;
4252 case 0x060977:
4253 ndps_hfname = hf_spx_ndps_func_broker;
4254 ndps_func_string = try_val_to_str(ndps_func, spx_ndps_broker_func_vals);
4255 break;
4256 case 0x060978:
4257 ndps_hfname = hf_spx_ndps_func_registry;
4258 ndps_func_string = try_val_to_str(ndps_func, spx_ndps_registry_func_vals);
4259 break;
4260 case 0x060979:
4261 ndps_hfname = hf_spx_ndps_func_notify;
4262 ndps_func_string = try_val_to_str(ndps_func, spx_ndps_notify_func_vals);
4263 break;
4264 case 0x06097a:
4265 ndps_hfname = hf_spx_ndps_func_resman;
4266 ndps_func_string = try_val_to_str(ndps_func, spx_ndps_resman_func_vals);
4267 break;
4268 case 0x06097b:
4269 ndps_hfname = hf_spx_ndps_func_delivery;
4270 ndps_func_string = try_val_to_str(ndps_func, spx_ndps_deliver_func_vals);
4271 break;
4272 default:
4273 ndps_hfname = 0;
4274 ndps_func_string = NULL;
4275 break;
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);
4284 foffset += 4;
4285 proto_tree_add_item(ndps_tree, hf_ndps_auth_null, tvb, foffset, 16, ENC_NA);
4286 foffset+=16;
4287 dissect_ndps_request(tvb, pinfo, ndps_tree, ndps_prog, ndps_func, foffset);
4294 static guint
4295 get_ndps_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
4297 return tvb_get_ntohs(tvb, offset +2) + 4;
4300 static int
4301 dissect_ndps_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
4303 proto_tree *ndps_tree;
4304 proto_item *ti;
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);
4318 * Defrag logic
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.
4336 static void
4337 ndps_defrag(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, spx_info *spx_info_p)
4339 guint len=0;
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);
4348 return;
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);
4374 else
4376 /* Get request value data */
4377 request_value = (ndps_req_hash_value *)p_get_proto_data(pinfo->fd, proto_ndps, 0);
4379 if (!request_value)
4381 /* Can't find the original request packet so this is not any fragment packet */
4382 dissect_ndps(tvb, pinfo, tree);
4383 return;
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))
4393 * Fragment
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,
4409 next_tvb,
4410 "Reassembled NDPS");
4411 /* Show all fragments. */
4412 if (tree)
4414 show_fragment_seq_tree(fd_head,
4415 &ndps_frag_items,
4416 tree, pinfo,
4417 next_tvb, &frag_tree_item);
4418 tid++;
4420 /* Remember this fragment number so we can dissect again */
4421 request_value->ndps_end_frag = pinfo->fd->num;
4424 else
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]");
4434 else
4436 /* Fragment from first pass of dissection */
4437 if (!spx_info_p->eom)
4439 col_append_str(pinfo->cinfo, COL_INFO, "[NDPS Fragment]");
4442 next_tvb = NULL;
4445 else
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);
4458 else
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);
4467 else
4469 /* This is not any fragment packet */
4470 request_value->ndps_frag = FALSE;
4471 dissect_ndps(tvb, pinfo, tree);
4475 static int
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);
4483 static int
4484 dissect_ndps_ipx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
4486 proto_tree *ndps_tree;
4487 proto_item *ti;
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);
4500 static int
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;
4505 guint32 ii;
4506 guint32 jj;
4507 guint32 field_len;
4508 guint32 cred_type;
4509 guint32 resource_type;
4510 guint32 filter_type;
4511 guint32 print_type;
4512 guint32 length;
4513 guint32 number_of_items;
4514 guint32 number_of_items2;
4515 guint32 doc_content;
4516 guint32 list_attr_op;
4517 guint32 scope;
4518 guint32 job_type;
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;
4528 proto_tree *atree;
4529 proto_item *aitem;
4530 proto_tree *btree;
4531 proto_item *bitem;
4532 proto_tree *ctree;
4533 proto_item *citem;
4534 proto_tree *dtree;
4535 proto_item *ditem;
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;
4563 switch(ndps_prog)
4565 case 0x060976: /* Print */
4566 switch(ndps_func)
4568 case 0x00000001: /* Bind PSM */
4569 foffset = credentials(tvb, ndps_tree, foffset);
4570 break;
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);
4574 foffset += 4;
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);
4577 foffset += 4;
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]");
4582 break;
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);
4587 if (length==4)
4589 proto_tree_add_uint(atree, hf_bind_security, tvb, foffset, 4, length);
4591 foffset += 4;
4592 proto_item_set_end(aitem, tvb, foffset);
4594 foffset = qualifiedname(tvb, ndps_tree, foffset);
4595 break;
4596 case 0x00000003: /* Unbind */
4597 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset,
4598 4, ENC_BIG_ENDIAN);
4599 break;
4600 case 0x00000004: /* Print */
4601 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
4602 foffset += 4;
4603 print_type = tvb_get_ntohl(tvb, foffset);
4604 proto_tree_add_uint(ndps_tree, hf_print_arg, tvb, foffset, 4, print_type);
4605 foffset += 4;
4606 switch (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);
4611 foffset += 4;
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);
4616 foffset += 4;
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]");
4621 break;
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);
4628 foffset += 4;
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]");
4633 break;
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);
4641 foffset += 4;
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);
4649 foffset += 4;
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]");
4654 break;
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);
4664 foffset += 4;
4665 doc_content = tvb_get_ntohl(tvb, foffset);
4666 proto_tree_add_uint(atree, hf_doc_content, tvb, foffset, 4, doc_content);
4667 foffset += 4;
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]");
4672 break;
4674 bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Value %u", ii+1);
4675 btree = proto_item_add_subtree(bitem, ett_ndps);
4676 if (doc_content==0)
4678 length = tvb_get_ntohl(tvb, foffset);
4679 proto_tree_add_uint(btree, hf_ndps_included_doc_len, tvb, foffset, 4, length);
4680 foffset += 4;
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);
4685 return foffset;
4687 if (length==4)
4689 proto_tree_add_item(btree, hf_ndps_included_doc, tvb, foffset, length, ENC_NA);
4691 foffset += length;
4692 foffset += (length%2);
4693 if ((int) foffset <= 0)
4694 THROW(ReportedBoundsError);
4696 else
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);
4704 foffset += 4;
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);
4712 foffset += 4;
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]");
4717 break;
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);
4724 foffset += 4;
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]");
4729 break;
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);
4737 foffset += 4;
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);
4745 foffset += 4;
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]");
4750 break;
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);
4757 break;
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);
4761 foffset += 4;
4762 proto_tree_add_item(ndps_tree, hf_sub_complete, tvb, foffset, 4, ENC_BIG_ENDIAN);
4763 foffset += 4;
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);
4768 foffset += 4;
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]");
4773 break;
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);
4781 foffset += 4;
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);
4787 foffset += 4;
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]");
4792 break;
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);
4805 foffset += 4;
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]");
4810 break;
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);
4818 break;
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);
4822 foffset += 4;
4823 break;
4824 default:
4825 break;
4827 break;
4828 case 0x00000005: /* Modify Job */
4829 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
4830 foffset += 4;
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);
4833 foffset += 4;
4834 proto_tree_add_item(ndps_tree, hf_ndps_document_number, tvb, foffset, 4, ENC_BIG_ENDIAN);
4835 foffset += 4;
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);
4840 foffset += 4;
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]");
4845 break;
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);
4857 foffset += 4;
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]");
4862 break;
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);
4870 break;
4871 case 0x00000006: /* Cancel Job */
4872 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
4873 foffset += 4;
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);
4876 foffset += 4;
4877 proto_tree_add_item(ndps_tree, hf_ndps_document_number, tvb, foffset, 4, ENC_BIG_ENDIAN);
4878 foffset += 4;
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);
4882 foffset += 4;
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);
4892 foffset += 4;
4893 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
4894 foffset += 4;
4895 proto_item_set_end(aitem, tvb, foffset);
4896 break;
4897 case 0x00000007: /* List Object Attributes */
4898 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
4899 foffset += 4;
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);
4902 foffset += 4;
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);
4907 foffset += 4;
4908 if (length!=0)
4910 tvb_ensure_bytes_exist(tvb, foffset, length);
4911 proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, ENC_NA);
4913 foffset += length;
4914 foffset += (length%2);
4915 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
4916 foffset += 4;
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);
4919 foffset += 4;
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]");
4924 break;
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);
4938 foffset += 4;
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);
4942 foffset += 4;
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);
4949 foffset += 4;
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]");
4954 break;
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);
4965 foffset += 4;
4966 #if 0
4967 if (filter_type == 0 || filter_type == 3 )
4969 foffset = filteritem(tvb, ndps_tree, foffset);
4971 else
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);
4977 foffset += 4;
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]");
4982 break;
4984 foffset = filteritem(tvb, ndps_tree, foffset);
4986 proto_item_set_end(aitem, tvb, foffset);
4988 #endif
4989 proto_tree_add_item(ndps_tree, hf_ndps_time_limit, tvb, foffset, 4, ENC_BIG_ENDIAN);
4990 foffset += 4;
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);
4999 foffset += 4;
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]");
5004 break;
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)
5014 break;
5016 proto_tree_add_item(ndps_tree, hf_ndps_operator, tvb, foffset, 4, ENC_BIG_ENDIAN);
5017 foffset += 4;
5018 foffset = commonarguments(tvb, ndps_tree, foffset);
5020 break;
5021 case 0x00000008: /* Promote Job */
5022 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5023 foffset += 4;
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);
5029 foffset += 4;
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);
5039 break;
5040 case 0x00000009: /* Interrupt */
5041 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5042 foffset += 4;
5043 job_type = tvb_get_ntohl(tvb, foffset);
5044 proto_tree_add_uint(ndps_tree, hf_interrupt_job_type, tvb, foffset, 4, job_type);
5045 foffset += 4;
5046 if (job_type==0)
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);
5053 foffset += 4;
5054 proto_item_set_end(aitem, tvb, foffset);
5055 /* End of NWDPPrtContainedObjectId */
5057 else
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);
5072 foffset += 4;
5073 proto_item_set_end(aitem, tvb, foffset);
5074 /* End of NWDPPrtContainedObjectId */
5075 foffset = commonarguments(tvb, ndps_tree, foffset);
5076 break;
5077 case 0x0000000a: /* Pause */
5078 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5079 foffset += 4;
5080 job_type = tvb_get_ntohl(tvb, foffset);
5081 proto_tree_add_uint(ndps_tree, hf_pause_job_type, tvb, foffset, 4, job_type);
5082 foffset += 4;
5083 if (job_type==0)
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);
5090 foffset += 4;
5091 proto_item_set_end(aitem, tvb, foffset);
5092 /* End of NWDPPrtContainedObjectId */
5094 else
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);
5105 break;
5106 case 0x0000000b: /* Resume */
5107 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5108 foffset += 4;
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);
5114 foffset += 4;
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);
5124 break;
5125 case 0x0000000c: /* Clean */
5126 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5127 foffset += 4;
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);
5135 break;
5136 case 0x0000000d: /* Create */
5137 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5138 foffset += 4;
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);
5148 foffset += 4;
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);
5158 foffset += 4;
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]");
5163 break;
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);
5173 break;
5174 case 0x0000000e: /* Delete */
5175 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5176 foffset += 4;
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);
5186 break;
5187 case 0x0000000f: /* Disable PA */
5188 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5189 foffset += 4;
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);
5197 break;
5198 case 0x00000010: /* Enable PA */
5199 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5200 foffset += 4;
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);
5208 break;
5209 case 0x00000011: /* Resubmit Jobs */
5210 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5211 foffset += 4;
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);
5215 foffset += 4;
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);
5220 foffset += 4;
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]");
5225 break;
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);
5232 foffset += 4;
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);
5236 foffset += 4;
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);
5242 foffset += 4;
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]");
5247 break;
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);
5261 foffset += 4;
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]");
5266 break;
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);
5284 break;
5285 case 0x00000012: /* Set */
5286 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5287 foffset += 4;
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);
5300 foffset += 4;
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]");
5305 break;
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);
5315 break;
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);
5319 foffset += 4;
5320 proto_tree_add_item(ndps_tree, hf_shutdown_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
5321 foffset += 4;
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);
5332 foffset += 4;
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);
5341 break;
5342 case 0x00000015: /* Reorder Job */
5343 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5344 foffset += 4;
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);
5350 foffset += 4;
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);
5358 foffset += 4;
5359 proto_item_set_end(aitem, tvb, foffset);
5360 /* End of NWDPPrtContainedObjectId */
5361 foffset = commonarguments(tvb, ndps_tree, foffset);
5362 break;
5363 case 0x00000016: /* Pause PA */
5364 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5365 foffset += 4;
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);
5373 break;
5374 case 0x00000017: /* Resume PA */
5375 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5376 foffset += 4;
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);
5384 break;
5385 case 0x00000018: /* Transfer Data */
5386 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5387 foffset += 4;
5388 proto_tree_add_item(ndps_tree, hf_get_status_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
5389 foffset += 4;
5390 proto_tree_add_item(ndps_tree, hf_ndps_data, tvb, foffset+4, tvb_get_ntohl(tvb, foffset), ENC_NA);
5391 break;
5392 case 0x00000019: /* Device Control */
5393 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5394 foffset += 4;
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);
5402 break;
5403 case 0x0000001a: /* Add Event Profile */
5404 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5405 foffset += 4;
5406 /* Start of Eventhandling2 */
5407 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
5408 foffset += 4;
5409 proto_tree_add_item(ndps_tree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
5410 foffset += 4;
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);
5414 foffset += 4;
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);
5426 foffset += 4;
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]");
5431 break;
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);
5441 break;
5442 case 0x0000001b: /* Remove Event Profile */
5443 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5444 foffset += 4;
5445 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
5446 foffset += 4;
5447 break;
5448 case 0x0000001c: /* Modify Event Profile */
5449 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5450 foffset += 4;
5451 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
5452 foffset += 4;
5453 supplier_flag = tvb_get_ntohl(tvb, foffset);
5454 proto_tree_add_boolean(ndps_tree, hf_ndps_supplier_flag, tvb, foffset, 4, supplier_flag);
5455 foffset += 4;
5456 if (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);
5461 foffset += 4;
5462 if (length==4)
5464 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
5466 tvb_ensure_bytes_exist(tvb, foffset, length);
5467 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);
5472 foffset += 4;
5473 if (language_flag)
5475 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
5476 foffset += 4;
5478 method_flag = tvb_get_ntohl(tvb, foffset);
5479 proto_tree_add_boolean(ndps_tree, hf_ndps_method_flag, tvb, foffset, 4, method_flag);
5480 foffset += 4;
5481 if (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);
5492 foffset += 4;
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);
5501 break;
5502 case 0x0000001d: /* List Event Profiles */
5503 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5504 foffset += 4;
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);
5507 foffset += 4;
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);
5513 foffset += 4;
5514 if (profiles_choice_type==0) /* Choice */
5516 foffset = cardinal_seq(tvb, ndps_tree, foffset);
5518 else
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);
5530 foffset += 4;
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);
5534 foffset += 4;
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);
5538 foffset += 4;
5539 if (integer_type_flag!=0)
5541 proto_tree_add_item(ndps_tree, hf_ndps_integer_type_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
5542 foffset += 4;
5544 /* End of integeroption */
5546 else /* Cont */
5548 length = tvb_get_ntohl(tvb, foffset);
5549 proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
5550 foffset += 4;
5551 if (length!=0)
5553 tvb_ensure_bytes_exist(tvb, foffset, length);
5554 proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, ENC_NA);
5556 foffset += length;
5557 foffset += (length%2);
5558 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
5559 foffset += 4;
5561 break;
5562 case 0x0000001f: /* Cancel PSM Shutdown */
5563 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5564 foffset += 4;
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);
5572 break;
5573 case 0x00000020: /* Set Printer DS Information */
5574 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5575 foffset += 4;
5576 proto_tree_add_item(ndps_tree, hf_ndps_ds_info_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
5577 foffset += 4;
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);
5583 break;
5584 case 0x00000021: /* Clean User Jobs */
5585 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5586 foffset += 4;
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);
5594 break;
5595 case 0x00000022: /* Map GUID to NDS Name */
5596 length = tvb_get_ntohl(tvb, foffset);
5597 foffset += 4;
5598 if (length!=0)
5600 tvb_ensure_bytes_exist(tvb, foffset, length);
5601 proto_tree_add_item(ndps_tree, hf_ndps_guid, tvb, foffset, length, ENC_NA);
5603 foffset += length;
5604 break;
5605 case 0x00000023: /* AddEventProfile2 */
5606 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5607 foffset += 4;
5608 /* Start of Eventhandling2 */
5609 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
5610 foffset += 4;
5611 proto_tree_add_item(ndps_tree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
5612 foffset += 4;
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);
5619 foffset += 4;
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);
5631 foffset += 4;
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]");
5636 break;
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);
5654 foffset += 4;
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]");
5659 break;
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);
5669 foffset += 4;
5670 proto_tree_add_item(ndps_tree, hf_notify_sequence_number, tvb, foffset, 4, ENC_BIG_ENDIAN);
5671 foffset += 4;
5672 proto_tree_add_item(ndps_tree, hf_notify_lease_exp_time, tvb, foffset, 4, ENC_BIG_ENDIAN);
5673 foffset += 4;
5674 foffset = ndps_string(tvb, hf_notify_printer_uri, ndps_tree, foffset, NULL);
5675 /* End of Eventhandling2 */
5676 break;
5677 case 0x00000024: /* ListEventProfiles2 */
5678 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5679 foffset += 4;
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);
5682 foffset += 4;
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);
5691 foffset += 4;
5692 if (profiles_choice_type==0) /* Choice */
5694 foffset = cardinal_seq(tvb, ndps_tree, foffset);
5696 else
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);
5709 foffset += 4;
5711 proto_tree_add_item(ndps_tree, hf_ndps_list_profiles_result_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
5712 foffset += 4;
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);
5716 foffset += 4;
5717 if (integer_type_flag!=0)
5719 proto_tree_add_item(ndps_tree, hf_ndps_integer_type_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
5720 foffset += 4;
5722 /* End of integeroption */
5724 else /* Cont */
5726 length = tvb_get_ntohl(tvb, foffset);
5727 proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
5728 foffset += 4;
5729 if (length!=0)
5731 tvb_ensure_bytes_exist(tvb, foffset, length);
5732 proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, ENC_NA);
5734 foffset += length;
5735 foffset += (length%2);
5736 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
5737 foffset += 4;
5739 break;
5740 default:
5741 break;
5743 break;
5744 case 0x060977: /* Broker */
5745 switch(ndps_func)
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);
5750 foffset += 4;
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);
5753 foffset += 4;
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]");
5758 break;
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);
5763 foffset += 4;
5764 if (length==4)
5766 proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, ENC_BIG_ENDIAN);
5768 proto_item_set_end(aitem, tvb, foffset);
5770 break;
5771 case 0x00000002: /* Unbind */
5772 break;
5773 case 0x00000003: /* List Services */
5774 proto_tree_add_item(ndps_tree, hf_ndps_list_services_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
5775 foffset += 4;
5776 break;
5777 case 0x00000004: /* Enable Service */
5778 proto_tree_add_item(ndps_tree, hf_ndps_service_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
5779 foffset += 4;
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);
5784 foffset += 4;
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]");
5789 break;
5791 length = tvb_get_ntohl(tvb, foffset);
5792 foffset += 4;
5793 if (length!=0)
5795 tvb_ensure_bytes_exist(tvb, foffset, length);
5796 proto_tree_add_item(atree, hf_ndps_item_bytes, tvb, foffset, length, ENC_NA);
5798 foffset += length;
5800 proto_item_set_end(aitem, tvb, foffset);
5801 break;
5802 case 0x00000005: /* Disable Service */
5803 proto_tree_add_item(ndps_tree, hf_ndps_list_services_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
5804 foffset += 4;
5805 break;
5806 case 0x00000006: /* Down Broker */
5807 case 0x00000007: /* Get Broker NDS Object Name */
5808 case 0x00000008: /* Get Broker Session Information */
5809 default:
5810 break;
5812 break;
5813 case 0x060978: /* Registry */
5814 switch(ndps_func)
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);
5819 foffset += 4;
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);
5822 foffset += 4;
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]");
5827 break;
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);
5832 foffset += 4;
5833 if (length==4)
5835 proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, ENC_BIG_ENDIAN);
5837 proto_item_set_end(aitem, tvb, foffset);
5839 break;
5840 case 0x00000002: /* Unbind */
5841 break;
5842 case 0x00000003: /* Register Server */
5843 foffset = server_entry(tvb, ndps_tree, foffset);
5844 break;
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 */
5849 /* NoOp */
5850 break;
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);
5854 break;
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);
5860 foffset += 4;
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]");
5865 break;
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);
5877 foffset += 4;
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]");
5882 break;
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);
5890 break;
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);
5896 foffset += 4;
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);
5902 foffset += 4;
5903 if (integer_type_flag!=0)
5905 proto_tree_add_item(ndps_tree, hf_ndps_integer_type_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
5906 foffset += 4;
5908 /* End of integeroption */
5910 else
5912 length = tvb_get_ntohl(tvb, foffset);
5913 proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
5914 foffset += 4;
5915 if (length!=0)
5917 tvb_ensure_bytes_exist(tvb, foffset, length);
5918 proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, ENC_NA);
5920 foffset += length;
5921 foffset += (length%2);
5922 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
5923 foffset += 4;
5925 break;
5926 default:
5927 break;
5929 break;
5930 case 0x060979: /* Notify */
5931 switch(ndps_func)
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);
5936 foffset += 4;
5937 number_of_items=tvb_get_ntohl(tvb, foffset);
5938 foffset += 4;
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]");
5943 break;
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);
5948 foffset += 4;
5949 if (length==4)
5951 proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, ENC_BIG_ENDIAN);
5953 proto_item_set_end(aitem, tvb, foffset);
5955 break;
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 */
5960 /* NoOp */
5961 break;
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);
5967 foffset += 4;
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]");
5972 break;
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*/
5980 break;
5981 case 0x00000004: /* Deregister Supplier */
5982 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5983 foffset += 4;
5984 break;
5985 case 0x00000005: /* Add Profile */
5986 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
5987 foffset += 4;
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);
5994 foffset += 4;
5995 proto_tree_add_item(ndps_tree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
5996 foffset += 4;
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);
6002 foffset += 4;
6003 if (length==4)
6005 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
6007 foffset += length;
6008 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
6009 foffset += 4;
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);
6018 foffset += 4;
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]");
6025 break;
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 */
6035 break;
6036 case 0x00000006: /* Remove Profile */
6037 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
6038 foffset += 4;
6039 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
6040 foffset += 4;
6041 break;
6042 case 0x00000007: /* Modify Profile */
6043 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
6044 foffset += 4;
6045 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
6046 foffset += 4;
6047 supplier_flag = tvb_get_ntohl(tvb, foffset);
6048 proto_tree_add_boolean(ndps_tree, hf_ndps_supplier_flag, tvb, foffset, 4, supplier_flag);
6049 foffset += 4;
6050 if (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);
6055 foffset += 4;
6056 if (length==4)
6058 proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
6060 tvb_ensure_bytes_exist(tvb, foffset, length);
6061 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);
6066 foffset += 4;
6067 if (language_flag)
6069 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
6070 foffset += 4;
6072 method_flag = tvb_get_ntohl(tvb, foffset);
6073 proto_tree_add_boolean(ndps_tree, hf_ndps_method_flag, tvb, foffset, 4, method_flag);
6074 foffset += 4;
6075 if (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);
6086 foffset += 4;
6087 if (delivery_address_flag)
6089 foffset = print_address(tvb, ndps_tree, foffset);
6091 foffset = event_object_set(tvb, ndps_tree, foffset);
6092 break;
6093 case 0x00000008: /* List Profiles */
6094 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
6095 foffset += 4;
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);
6098 foffset += 4;
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);
6106 foffset += 4;
6107 proto_item_set_end(aitem, tvb, foffset);
6108 if (profiles_choice_type==0) /* Choice */
6110 foffset = cardinal_seq(tvb, ndps_tree, foffset);
6112 else
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);
6124 foffset += 4;
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);
6128 foffset += 4;
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);
6132 foffset += 4;
6133 if (integer_type_flag!=0)
6135 proto_tree_add_item(ndps_tree, hf_ndps_integer_type_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
6136 foffset += 4;
6138 /* End of integeroption */
6140 else /* Cont */
6142 length = tvb_get_ntohl(tvb, foffset);
6143 proto_tree_add_uint(ndps_tree, hf_ndps_context_len, tvb, foffset, 4, length);
6144 foffset += 4;
6145 if (length!=0)
6147 tvb_ensure_bytes_exist(tvb, foffset, length);
6148 proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, ENC_NA);
6150 foffset += length;
6151 foffset += (length%2);
6152 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
6153 foffset += 4;
6155 break;
6156 case 0x00000009: /* Report Event */
6157 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
6158 foffset += 4;
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);
6162 foffset += 4;
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]");
6169 break;
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);
6175 foffset += 4;
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);
6202 foffset += 4;
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]");
6209 break;
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);
6220 foffset += 4;
6221 proto_item_set_end(bitem, tvb, foffset);
6222 /* End of ReportEventItem */
6224 proto_item_set_end(aitem, tvb, foffset);
6225 /* End of ReportEventItemSet */
6226 break;
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);
6231 foffset += 4;
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]");
6236 break;
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);
6249 foffset += 4;
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);
6258 foffset += 4;
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);
6286 foffset += 4;
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]");
6293 break;
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);
6304 foffset += 4;
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);
6309 break;
6310 case 0x0000000c: /* Add Delivery Method */
6311 foffset = ndps_string(tvb, hf_ndps_file_name, ndps_tree, foffset, NULL);
6312 break;
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 */
6320 break;
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);
6324 foffset += 4;
6325 switch (cred_type)
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);
6331 foffset += 4;
6332 if (integer_type_flag!=0)
6334 proto_tree_add_item(ndps_tree, hf_ndps_integer_type_value, tvb, foffset, 4, ENC_BIG_ENDIAN);
6335 foffset += 4;
6337 /* End of integeroption */
6338 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
6339 foffset += 4;
6340 break;
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);
6344 foffset += 4;
6345 if (length!=0)
6347 tvb_ensure_bytes_exist(tvb, foffset, length);
6348 proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, ENC_NA);
6350 foffset += length;
6351 foffset += (length%2);
6352 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
6353 foffset += 4;
6354 break;
6355 default:
6356 break;
6358 break;
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);
6367 foffset += 4;
6368 break;
6369 default:
6370 break;
6372 break;
6373 case 0x06097a: /* Resman */
6374 switch(ndps_func)
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);
6379 foffset += 4;
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);
6382 foffset += 4;
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]");
6387 break;
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);
6392 foffset += 4;
6393 if (length==4)
6395 proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, ENC_BIG_ENDIAN);
6397 proto_item_set_end(aitem, tvb, foffset);
6399 break;
6400 case 0x00000002: /* Unbind */
6401 case 0x00000008: /* Get Resource Manager NDS Object Name */
6402 case 0x00000009: /* Get Resource Manager Session Information */
6403 /* NoOp */
6404 break;
6405 case 0x00000003: /* Add Resource File */
6406 proto_tree_add_item(ndps_tree, hf_packet_count, tvb, foffset, 4, ENC_BIG_ENDIAN);
6407 foffset += 4;
6408 proto_tree_add_item(ndps_tree, hf_last_packet_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
6409 foffset += 4;
6410 proto_tree_add_item(ndps_tree, hf_file_timestamp, tvb, foffset, 4, ENC_BIG_ENDIAN);
6411 foffset += 4;
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);
6415 foffset += 4;
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]");
6420 break;
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)
6428 return foffset;
6430 proto_tree_add_item(atree, hf_ndps_item_ptr, tvb, foffset, length, ENC_NA);
6431 foffset += length;
6432 proto_item_set_end(aitem, tvb, foffset);
6434 break;
6435 case 0x00000004: /* Delete Resource File */
6436 foffset = res_add_input_data(tvb, ndps_tree, foffset);
6437 break;
6438 case 0x00000005: /* List Resources */
6439 proto_tree_add_item(ndps_tree, hf_ndps_max_items, tvb, foffset, 4, ENC_BIG_ENDIAN);
6440 foffset += 4;
6441 proto_tree_add_item(ndps_tree, hf_ndps_status_flags, tvb, foffset, 4, ENC_BIG_ENDIAN);
6442 foffset += 4;
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);
6445 foffset += 4;
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);
6450 foffset += 4;
6451 break;
6452 case 1: /* Printer Definitions */
6453 case 2: /* Printer Definitions Short */
6454 foffset = ndps_string(tvb, hf_ndps_vendor_dir, ndps_tree, foffset, NULL);
6455 break;
6456 case 3: /* Banner Page Files */
6457 proto_tree_add_item(ndps_tree, hf_banner_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6458 foffset += 4;
6459 break;
6460 case 4: /* Font Types */
6461 proto_tree_add_item(ndps_tree, hf_font_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6462 foffset += 4;
6463 proto_tree_add_item(ndps_tree, hf_os_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6464 foffset += 4;
6465 break;
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);
6470 foffset += 4;
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);
6475 foffset += 4;
6476 proto_tree_add_item(ndps_tree, hf_printer_id, tvb, foffset, field_len, ENC_NA);
6477 break;
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);
6481 foffset += 4;
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);
6486 foffset += 4;
6487 proto_tree_add_item(ndps_tree, hf_printer_id, tvb, foffset, field_len, ENC_NA);
6488 break;
6489 case 7: /* Font Files */
6490 proto_tree_add_item(ndps_tree, hf_os_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6491 foffset += 4;
6492 proto_tree_add_item(ndps_tree, hf_font_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6493 foffset += 4;
6494 foffset = ndps_string(tvb, hf_ndps_font_name, ndps_tree, foffset, NULL);
6495 break;
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);
6502 break;
6503 case 14: /* Languages Available */
6504 break;
6505 default:
6506 break;
6508 break;
6509 case 0x00000006: /* Get Resource File */
6510 proto_tree_add_item(ndps_tree, hf_get_status_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
6511 foffset += 4;
6512 proto_tree_add_item(ndps_tree, hf_res_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6513 resource_type = tvb_get_ntohl(tvb, foffset);
6514 foffset += 4;
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);
6519 foffset += 4;
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);
6522 break;
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);
6526 break;
6527 case 2: /* Banner Page Files */
6528 foffset = ndps_string(tvb, hf_ndps_banner_name, ndps_tree, foffset, NULL);
6529 break;
6530 case 3: /* Font Types */
6531 proto_tree_add_item(ndps_tree, hf_os_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6532 foffset += 4;
6533 proto_tree_add_item(ndps_tree, hf_font_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6534 foffset += 4;
6535 foffset = ndps_string(tvb, hf_ndps_prn_file_name, ndps_tree, foffset, NULL);
6536 break;
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);
6540 foffset += 4;
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);
6543 foffset += 4;
6544 break;
6545 default:
6546 break;
6548 break;
6549 case 0x00000007: /* Get Resource File Date */
6550 proto_tree_add_item(ndps_tree, hf_ndps_status_flags, tvb, foffset, 4, ENC_BIG_ENDIAN);
6551 foffset += 4;
6552 foffset = res_add_input_data(tvb, ndps_tree, foffset);
6553 break;
6554 case 0x0000000a: /* Set Resource Language Context */
6555 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
6556 foffset += 4;
6557 break;
6558 default:
6559 break;
6561 break;
6562 case 0x06097b: /* Delivery */
6563 switch(ndps_func)
6565 case 0x00000001: /* Delivery Bind */
6566 foffset = credentials(tvb, ndps_tree, foffset);
6567 break;
6568 case 0x00000002: /* Delivery Unbind */
6569 /* NoOp */
6570 break;
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);
6574 foffset += 4;
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]");
6579 break;
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);
6584 foffset += 4;
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);
6588 foffset += 4;
6589 if (length==4)
6591 proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
6593 foffset += length;
6594 proto_tree_add_item(btree, hf_ndps_event_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6595 foffset += 4;
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);
6623 foffset += 4;
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);
6631 break;
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);
6635 foffset += 4;
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]");
6640 break;
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);
6645 foffset += 4;
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);
6649 foffset += 4;
6650 if (length==4)
6652 proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
6654 foffset += length;
6655 proto_tree_add_item(atree, hf_ndps_event_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6656 foffset += 4;
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);
6685 foffset += 4;
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]");
6692 break;
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);
6700 foffset += 4;
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);
6707 break;
6708 default:
6709 break;
6711 break;
6712 default:
6713 break;
6715 return foffset;
6718 static int
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;
6724 guint32 ii;
6725 proto_tree *atree;
6726 proto_item *aitem;
6727 proto_tree *btree;
6728 proto_item *bitem;
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)"));
6735 foffset += 4;
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);
6741 foffset += 4;
6742 if (problem_type==0) /* Standard Error */
6744 proto_tree_add_item(ndps_tree, hf_security_problem_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6745 foffset += 4;
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 */
6762 break;
6763 case 1: /* Service Error */
6764 proto_tree_add_item(ndps_tree, hf_problem_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6765 foffset += 4;
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);
6769 foffset += 4;
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);
6783 foffset += 4;
6784 proto_tree_add_item(ndps_tree, hf_ndps_other_error, tvb, foffset, 4, ENC_BIG_ENDIAN);
6785 foffset += 4;
6786 proto_tree_add_item(ndps_tree, hf_ndps_other_error_2, tvb, foffset, 4, ENC_BIG_ENDIAN);
6787 foffset += 4;
6788 if (tvb_length_remaining(tvb, foffset) >= 4) {
6789 foffset = ndps_string(tvb, hf_ndps_other_error_string, ndps_tree, foffset, NULL);
6791 break;
6792 case 2: /* Access Error */
6793 proto_tree_add_item(ndps_tree, hf_problem_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6794 foffset += 4;
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);
6798 foffset += 4;
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);
6810 break;
6811 case 3: /* Printer Error */
6812 proto_tree_add_item(ndps_tree, hf_problem_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6813 foffset += 4;
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);
6817 foffset += 4;
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);
6829 break;
6830 case 4: /* Selection Error */
6831 proto_tree_add_item(ndps_tree, hf_problem_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6832 foffset += 4;
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);
6836 foffset += 4;
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 */
6849 break;
6850 case 5: /* Document Access Error */
6851 proto_tree_add_item(ndps_tree, hf_problem_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6852 foffset += 4;
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);
6868 break;
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);
6872 foffset += 4;
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]");
6877 break;
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);
6882 foffset += 4;
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);
6886 foffset += 4;
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);
6900 break;
6901 case 7: /* Update Error */
6902 proto_tree_add_item(ndps_tree, hf_problem_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
6903 foffset += 4;
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);
6907 foffset += 4;
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);
6919 break;
6920 default:
6921 break;
6923 return foffset;
6926 static int
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)"));
6937 foffset += 4;
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)
6942 return foffset;
6944 proto_tree_add_item(ndps_tree, hf_ndps_ext_error, tvb, foffset, 4, ENC_BIG_ENDIAN);
6945 foffset += 4;
6946 return foffset;
6949 static int
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;
6954 proto_tree *atree;
6955 proto_item *aitem;
6956 proto_tree *btree;
6957 proto_item *bitem;
6958 proto_tree *ctree;
6959 proto_item *citem;
6960 proto_tree *dtree;
6961 proto_item *ditem;
6962 guint32 ii;
6963 guint32 jj;
6964 guint32 kk;
6965 guint32 number_of_items=0;
6966 guint32 number_of_items2=0;
6967 guint32 number_of_items3=0;
6968 guint32 length=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
6983 this reply */
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. */
6989 else {
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");
7005 return foffset;
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)"));
7014 foffset += 4;
7015 if (tvb_length_remaining(tvb,foffset) < 4 ) {
7016 col_append_str(pinfo->cinfo, COL_INFO, "- Error");
7017 return foffset;
7019 proto_tree_add_item(ndps_tree, hf_ndps_rpc_acc_results, tvb, foffset, 4, ENC_BIG_ENDIAN);
7020 foffset += 4;
7021 if (tvb_length_remaining(tvb,foffset) < 4) {
7022 col_append_str(pinfo->cinfo, COL_INFO, "- Error");
7023 return foffset;
7026 error_val = tvb_get_ntohl(tvb, foffset);
7027 proto_tree_add_uint(ndps_tree, hf_ndps_error_val, tvb, foffset, 4, error_val);
7028 foffset += 4;
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");
7036 return foffset;
7038 col_append_str(pinfo->cinfo, COL_INFO, "- Ok");
7039 switch(ndps_prog)
7041 case 0x060976: /* Print */
7042 switch(ndps_func)
7044 case 0x00000001: /* Bind PSM */
7045 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
7046 foffset += 4;
7047 if(error_val != 0)
7049 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7050 if(tvb_length_remaining(tvb, foffset) < 4)
7052 break;
7054 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
7055 foffset += 4;
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);
7061 break;
7062 case 0x00000002: /* Bind PA */
7063 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
7064 foffset += 4;
7065 if(error_val != 0)
7067 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7068 if(tvb_length_remaining(tvb, foffset) < 4)
7070 break;
7072 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
7073 foffset += 4;
7075 foffset = ndps_string(tvb, hf_ndps_pa_name, ndps_tree, foffset, NULL);
7076 break;
7077 case 0x00000003: /* Unbind */
7078 break;
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);
7082 foffset += 4;
7083 if(error_val != 0)
7085 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7087 break;
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);
7096 foffset += 4;
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]");
7103 break;
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 */
7112 if(error_val != 0)
7114 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7116 break;
7117 case 0x00000007: /* List Object Attributes */
7118 proto_tree_add_item(ndps_tree, hf_answer_time, tvb, foffset, 4, ENC_BIG_ENDIAN);
7119 foffset += 4;
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);
7125 foffset += 4;
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]");
7130 break;
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)
7138 return foffset;
7140 proto_tree_add_item(btree, hf_ndps_item_ptr, tvb, foffset, length, ENC_NA);
7141 foffset += length;
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);
7149 foffset += 4;
7150 proto_tree_add_item(atree, hf_ndps_limit_enc, tvb, foffset, 4, ENC_BIG_ENDIAN);
7151 foffset += 4;
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);
7158 foffset += 4;
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]");
7163 break;
7165 bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Results: (%d)", ii+1);
7166 btree = proto_item_add_subtree(bitem, ett_ndps);
7167 if (ii>0) {
7168 foffset += 2;
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);
7173 foffset += 4;
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]");
7178 break;
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);
7186 foffset += 4;
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]");
7191 break;
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);
7199 foffset += 4;
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);
7210 if(error_val != 0)
7212 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7214 break;
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);
7222 foffset += 4;
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);
7228 foffset += 4;
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]");
7235 break;
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 */
7244 if(error_val != 0)
7246 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7248 break;
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 */
7264 if(error_val != 0)
7266 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7268 break;
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);
7272 foffset += 4;
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]");
7279 break;
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);
7288 foffset += 4;
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);
7296 foffset += 4;
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);
7302 foffset += 4;
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]");
7309 break;
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 */
7322 if(error_val != 0)
7324 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7326 break;
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);
7333 foffset += 4;
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]");
7338 break;
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 */
7347 if(error_val != 0)
7349 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7351 break;
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);
7359 foffset += 4;
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]");
7364 break;
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 */
7373 if(error_val != 0)
7375 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7377 break;
7378 case 0x0000001a: /* Add Event Profile */
7379 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
7380 foffset += 4;
7381 if(error_val != 0)
7383 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7385 break;
7386 case 0x0000001d: /* List Event Profiles */
7387 length = tvb_get_ntohl(tvb, foffset);
7388 foffset += 4;
7389 if (length==4)
7391 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
7393 foffset += length;
7394 /* Start of Eventhandling */
7395 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
7396 foffset += 4;
7397 proto_tree_add_item(ndps_tree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
7398 foffset += 4;
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);
7403 foffset += 4;
7404 if (length==4)
7406 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
7408 foffset += length;
7409 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
7410 foffset += 4;
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);
7422 foffset += 4;
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]");
7427 break;
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);
7438 foffset += 4;
7439 if (length!=0)
7441 tvb_ensure_bytes_exist(tvb, foffset, length);
7442 proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, ENC_NA);
7444 foffset += length;
7445 if(error_val != 0)
7447 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7449 break;
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);
7455 if(error_val != 0)
7457 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7459 break;
7460 case 0x00000023: /* AddEventProfile2 */
7461 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
7462 foffset += 4;
7463 proto_tree_add_item(ndps_tree, hf_notify_lease_exp_time, tvb, foffset, 4, ENC_BIG_ENDIAN);
7464 foffset += 4;
7465 if(error_val != 0)
7467 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7469 break;
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);
7473 foffset += 4;
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]");
7478 break;
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);
7484 foffset += 4;
7485 proto_tree_add_item(atree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
7486 foffset += 4;
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);
7492 foffset += 4;
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);
7503 foffset += 4;
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]");
7510 break;
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);
7528 foffset += 4;
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]");
7533 break;
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);
7543 foffset += 4;
7544 proto_tree_add_item(atree, hf_notify_sequence_number, tvb, foffset, 4, ENC_BIG_ENDIAN);
7545 foffset += 4;
7546 proto_tree_add_item(atree, hf_notify_lease_exp_time, tvb, foffset, 4, ENC_BIG_ENDIAN);
7547 foffset += 4;
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 */
7552 foffset += 4;
7553 if (length!=0)
7555 tvb_ensure_bytes_exist(tvb, foffset, length);
7556 proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, ENC_NA);
7558 foffset += length;
7559 if(error_val != 0)
7561 foffset = ndps_error(tvb, pinfo, ndps_tree, foffset);
7564 break;
7565 default:
7566 break;
7568 break;
7569 case 0x060977: /* Broker */
7570 switch(ndps_func)
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);
7578 break;
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);
7582 foffset += 4;
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]");
7587 break;
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);
7592 foffset += 4;
7593 proto_tree_add_item(atree, hf_ndps_service_enabled, tvb, foffset, 4, ENC_BIG_ENDIAN);
7594 foffset += 4;
7595 proto_item_set_end(aitem, tvb, foffset);
7597 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7598 break;
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? */
7602 foffset += 4;
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);
7606 break;
7607 case 0x00000008: /* Get Broker Session Information */
7608 default:
7609 break;
7611 break;
7612 case 0x060978: /* Registry */
7613 switch(ndps_func)
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);
7618 foffset += 4;
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]");
7623 break;
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);
7628 foffset += 4;
7629 if (length!=0)
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);
7636 break;
7637 case 0x00000002: /* Unbind */
7638 /* NoOp */
7639 break;
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);
7646 break;
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);
7651 foffset += 4;
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]");
7656 break;
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);
7664 foffset += 4;
7665 if (length!=0)
7667 tvb_ensure_bytes_exist(tvb, foffset, length);
7668 proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, ENC_NA);
7670 foffset += length;
7671 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7672 break;
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);
7676 foffset += 4;
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]");
7681 break;
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);
7685 foffset += 4;
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);
7690 foffset += 4;
7691 if (length!=0)
7693 tvb_ensure_bytes_exist(tvb, foffset, length);
7694 proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, ENC_NA);
7696 foffset += length;
7697 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7698 break;
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);
7705 break;
7706 case 0x0000000c: /* Get Registry Session Information */
7707 proto_tree_add_item(ndps_tree, hf_ndps_session_type, tvb, foffset, 4, ENC_BIG_ENDIAN);
7708 foffset += 4;
7709 proto_tree_add_item(ndps_tree, hf_time, tvb, foffset, 4, ENC_BIG_ENDIAN);
7710 foffset += 4;
7711 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7712 break;
7713 default:
7714 break;
7716 break;
7717 case 0x060979: /* Notify */
7718 switch(ndps_func)
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);
7723 foffset += 4;
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]");
7728 break;
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);
7733 foffset += 4;
7734 if (length!=0)
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);
7741 break;
7742 case 0x00000002: /* Notify Unbind */
7743 /* NoOp */
7744 break;
7745 case 0x00000003: /* Register Supplier */
7746 proto_tree_add_item(ndps_tree, hf_ndps_session, tvb, foffset, 4, ENC_BIG_ENDIAN);
7747 foffset += 4;
7748 foffset = event_object_set(tvb, ndps_tree, foffset);
7749 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7750 break;
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);
7755 break;
7756 case 0x00000005: /* Add Profile */
7757 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
7758 foffset += 4;
7759 foffset = event_object_set(tvb, ndps_tree, foffset);
7760 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7761 break;
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);
7767 break;
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);
7771 foffset += 4;
7772 /* Start of Eventhandling */
7773 proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
7774 foffset += 4;
7775 proto_tree_add_item(ndps_tree, hf_ndps_persistence, tvb, foffset, 4, ENC_BIG_ENDIAN);
7776 foffset += 4;
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);
7782 foffset += 4;
7783 if (length==4)
7785 proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, ENC_BIG_ENDIAN);
7787 foffset += length;
7788 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
7789 foffset += 4;
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);
7800 foffset += 4;
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]");
7805 break;
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);
7817 foffset += 4;
7818 if (length!=0)
7820 tvb_ensure_bytes_exist(tvb, foffset, length);
7821 proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, ENC_NA);
7823 foffset += length;
7824 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7825 break;
7826 case 0x0000000a: /* List Supported Languages */
7827 /* Start of IntegerSeq */
7828 length = tvb_get_ntohl(tvb, foffset);
7829 foffset += 4;
7830 if (length==4)
7832 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, length, ENC_BIG_ENDIAN);
7834 foffset += length;
7835 /* End of IntegerSeq */
7836 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7837 break;
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);
7846 break;
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);
7851 foffset += 4;
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]");
7856 break;
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);
7872 foffset += 4;
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);
7878 break;
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);
7890 foffset += 4;
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);
7895 foffset += 4;
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]");
7902 break;
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);
7911 break;
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? */
7915 foffset += 4;
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);
7919 break;
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);
7922 foffset += 4;
7923 proto_tree_add_item(ndps_tree, hf_time, tvb, foffset, 4, ENC_BIG_ENDIAN);
7924 foffset += 4;
7925 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7926 break;
7927 default:
7928 break;
7930 break;
7931 case 0x06097a: /* Resman */
7932 switch(ndps_func)
7934 case 0x00000001: /* Bind */
7935 length = tvb_get_ntohl(tvb, foffset);
7936 foffset += 4;
7937 if (length!=0)
7939 tvb_ensure_bytes_exist(tvb, foffset, length);
7940 proto_tree_add_item(ndps_tree, hf_ndps_attribute_set, tvb, foffset, length, ENC_NA);
7942 break;
7943 case 0x00000002: /* Unbind */
7944 /* NoOp */
7945 break;
7946 case 0x00000003: /* Add Resource File */
7947 case 0x00000004: /* Delete Resource File */
7948 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
7949 break;
7950 case 0x00000005: /* List Resources */
7951 proto_tree_add_item(ndps_tree, hf_ndps_return_code, tvb, foffset, 4, ENC_BIG_ENDIAN);
7952 foffset += 4;
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)
7957 break;
7959 proto_tree_add_item(ndps_tree, hf_ndps_status_flags, tvb, foffset, 4, ENC_BIG_ENDIAN);
7960 foffset += 4;
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);
7963 foffset += 4;
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);
7971 foffset += 4;
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]");
7976 break;
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 */
7981 foffset += 2;
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) {
7986 foffset += 2;
7988 foffset += 4;
7989 foffset = ndps_string(tvb, hf_ndps_printer_type, atree, foffset, NULL);
7990 if (tvb_get_ntohl(tvb, foffset)==0) {
7991 foffset += 2;
7993 foffset += 4;
7994 foffset = ndps_string(tvb, hf_ndps_inf_file_name, atree, foffset, NULL);
7995 proto_item_set_end(aitem, tvb, foffset);
7997 break;
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);
8001 foffset += 4;
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]");
8006 break;
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);
8013 break;
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);
8017 foffset += 4;
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]");
8022 break;
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);
8029 break;
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);
8033 foffset += 4;
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]");
8038 break;
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);
8045 break;
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);
8051 foffset += 4;
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]");
8056 break;
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);
8065 break;
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);
8069 foffset += 4;
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]");
8074 break;
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);
8085 foffset += 4;
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]");
8090 break;
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);
8099 foffset += 4;
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]");
8104 break;
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);
8113 foffset += 4;
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]");
8118 break;
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);
8125 break;
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);
8130 foffset += 4;
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]");
8135 break;
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);
8140 foffset += 4;
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);
8143 foffset += 4;
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]");
8148 break;
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);
8157 break;
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);
8163 foffset += 4;
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]");
8168 break;
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);
8177 foffset += 4;
8178 proto_tree_add_item(atree, hf_archive_file_size, tvb, foffset, 4, ENC_BIG_ENDIAN);
8179 foffset += 4;
8180 proto_item_set_end(aitem, tvb, foffset);
8182 break;
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);
8186 foffset += 4;
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]");
8191 break;
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);
8196 foffset += 4;
8197 proto_item_set_end(aitem, tvb, foffset);
8199 break;
8200 default:
8201 break;
8203 break;
8204 case 0x00000006: /* Get Resource File */
8205 proto_tree_add_item(ndps_tree, hf_ndps_return_code, tvb, foffset, 4, ENC_BIG_ENDIAN);
8206 foffset += 4;
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)
8211 break;
8213 proto_tree_add_item(ndps_tree, hf_get_status_flag, tvb, foffset, 4, ENC_BIG_ENDIAN);
8214 foffset += 4;
8215 proto_tree_add_item(ndps_tree, hf_file_timestamp, tvb, foffset, 4, ENC_BIG_ENDIAN);
8216 foffset += 4;
8217 proto_tree_add_item(ndps_tree, hf_ndps_data, tvb, foffset, -1, ENC_NA);
8218 break;
8219 case 0x00000007: /* Get Resource File Date */
8220 proto_tree_add_item(ndps_tree, hf_ndps_return_code, tvb, foffset, 4, ENC_BIG_ENDIAN);
8221 foffset += 4;
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)
8226 break;
8228 proto_tree_add_item(ndps_tree, hf_file_timestamp, tvb, foffset, 4, ENC_BIG_ENDIAN);
8229 foffset += 4;
8230 break;
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);
8234 foffset += 4;
8235 break;
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);
8238 foffset += 4;
8239 proto_tree_add_item(ndps_tree, hf_time, tvb, foffset, 4, ENC_BIG_ENDIAN);
8240 foffset += 4;
8241 foffset = return_code(tvb, pinfo, ndps_tree, foffset);
8242 break;
8243 case 0x0000000a: /* Set Resource Language Context */
8244 proto_tree_add_item(ndps_tree, hf_ndps_return_code, tvb, foffset, 4, ENC_BIG_ENDIAN);
8245 foffset += 4;
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)
8250 break;
8252 proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, ENC_BIG_ENDIAN);
8253 foffset += 4;
8254 break;
8255 default:
8256 break;
8258 break;
8259 case 0x06097b: /* Delivery */
8260 switch(ndps_func)
8262 case 0x00000001: /* Delivery Bind */
8263 proto_tree_add_item(ndps_tree, hf_ndps_return_code, tvb, foffset, 4, ENC_BIG_ENDIAN);
8264 foffset += 4;
8265 if (tvb_get_ntohl(tvb, foffset-4) != 0)
8266 col_set_str(pinfo->cinfo, COL_INFO, "R NDPS - Error");
8267 break;
8268 case 0x00000002: /* Delivery Unbind */
8269 /* NoOp */
8270 break;
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);
8274 foffset += 4;
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)
8279 break;
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);
8283 foffset += 4;
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]");
8290 break;
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)
8298 return foffset;
8300 proto_tree_add_item(btree, hf_ndps_item_ptr, tvb, foffset, length, ENC_NA);
8301 foffset += length;
8302 proto_item_set_end(bitem, tvb, foffset);
8304 proto_item_set_end(aitem, tvb, foffset);
8305 break;
8306 default:
8307 break;
8309 break;
8310 default:
8311 break;
8313 return foffset;
8316 void
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,
8322 NULL, HFILL }},
8324 { &hf_ndps_packet_type,
8325 { "Packet Type", "ndps.packet_type",
8326 FT_UINT32, BASE_HEX, VALS(ndps_packet_types), 0x0,
8327 NULL, HFILL }},
8329 { &hf_ndps_length,
8330 { "Record Length", "ndps.record_length",
8331 FT_UINT16, BASE_DEC, NULL, 0x0,
8332 NULL, HFILL }},
8334 { &hf_ndps_xid,
8335 { "Exchange ID", "ndps.xid",
8336 FT_UINT32, BASE_HEX, NULL, 0x0,
8337 NULL, HFILL }},
8339 { &hf_ndps_rpc_version,
8340 { "RPC Version", "ndps.rpc_version",
8341 FT_UINT32, BASE_HEX, NULL, 0x0,
8342 NULL, HFILL }},
8344 { &hf_spx_ndps_program,
8345 { "NDPS Program Number", "spx.ndps_program",
8346 FT_UINT32, BASE_HEX, VALS(spx_ndps_program_vals), 0x0,
8347 NULL, HFILL }},
8349 { &hf_spx_ndps_version,
8350 { "Program Version", "spx.ndps_version",
8351 FT_UINT32, BASE_DEC, NULL, 0x0,
8352 NULL, HFILL }},
8354 #if 0
8355 { &hf_ndps_error,
8356 { "NDPS Error", "spx.ndps_error",
8357 FT_UINT32, BASE_HEX, NULL, 0x0,
8358 NULL, HFILL }},
8359 #endif
8361 { &hf_ndps_other_error_string,
8362 { "Extended Error String", "ndps.ext_err_string",
8363 FT_STRING, BASE_NONE, NULL, 0x0,
8364 NULL, HFILL }},
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,
8369 NULL, HFILL }},
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,
8374 NULL, HFILL }},
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,
8379 NULL, HFILL }},
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,
8384 NULL, HFILL }},
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,
8389 NULL, HFILL }},
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,
8394 NULL, HFILL }},
8396 { &hf_ndps_num_objects,
8397 { "Number of Objects", "ndps.num_objects",
8398 FT_UINT32, BASE_DEC, NULL, 0x0,
8399 NULL, HFILL }},
8401 { &hf_ndps_num_attributes,
8402 { "Number of Attributes", "ndps.num_attributes",
8403 FT_UINT32, BASE_DEC, NULL, 0x0,
8404 NULL, HFILL }},
8406 #if 0
8407 { &hf_ndps_sbuffer,
8408 { "Server", "ndps.sbuffer",
8409 FT_UINT32, BASE_DEC, NULL, 0x0,
8410 NULL, HFILL }},
8411 #endif
8413 #if 0
8414 { &hf_ndps_rbuffer,
8415 { "Connection", "ndps.rbuffer",
8416 FT_UINT32, BASE_DEC, NULL, 0x0,
8417 NULL, HFILL }},
8418 #endif
8420 { &hf_ndps_user_name,
8421 { "Trustee Name", "ndps.user_name",
8422 FT_STRING, BASE_NONE, NULL, 0x0,
8423 NULL, HFILL }},
8425 { &hf_ndps_broker_name,
8426 { "Broker Name", "ndps.broker_name",
8427 FT_STRING, BASE_NONE, NULL, 0x0,
8428 NULL, HFILL }},
8430 { &hf_ndps_num_results,
8431 { "Number of Results", "ndps.num_results",
8432 FT_UINT32, BASE_DEC, NULL, 0x0,
8433 NULL, HFILL }},
8435 { &hf_ndps_num_options,
8436 { "Number of Options", "ndps.num_options",
8437 FT_UINT32, BASE_DEC, NULL, 0x0,
8438 NULL, HFILL }},
8440 { &hf_ndps_num_jobs,
8441 { "Number of Jobs", "ndps.num_jobs",
8442 FT_UINT32, BASE_DEC, NULL, 0x0,
8443 NULL, HFILL }},
8445 { &hf_ndps_pa_name,
8446 { "Printer Name", "ndps.pa_name",
8447 FT_STRING, BASE_NONE, NULL, 0x0,
8448 NULL, HFILL }},
8450 { &hf_ndps_tree,
8451 { "Tree", "ndps.tree",
8452 FT_STRING, BASE_NONE, NULL, 0x0,
8453 NULL, HFILL }},
8455 { &hf_ndps_reqframe,
8456 { "Request Frame", "ndps.reqframe",
8457 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8458 NULL, HFILL }},
8460 { &hf_ndps_error_val,
8461 { "Return Status", "ndps.error_val",
8462 FT_UINT32, BASE_HEX, VALS(ndps_error_types), 0x0,
8463 NULL, HFILL }},
8465 { &hf_ndps_object,
8466 { "Object ID", "ndps.object",
8467 FT_UINT32, BASE_HEX, NULL, 0x0,
8468 NULL, HFILL }},
8470 { &hf_ndps_cred_type,
8471 { "Credential Type", "ndps.cred_type",
8472 FT_UINT32, BASE_HEX, VALS(ndps_credential_enum), 0x0,
8473 NULL, HFILL }},
8475 { &hf_ndps_server_name,
8476 { "Server Name", "ndps.server_name",
8477 FT_STRING, BASE_NONE, NULL, 0x0,
8478 NULL, HFILL }},
8480 { &hf_ndps_connection,
8481 { "Connection", "ndps.connection",
8482 FT_UINT16, BASE_DEC, NULL, 0x0,
8483 NULL, HFILL }},
8485 { &hf_ndps_ext_error,
8486 { "Extended Error Code", "ndps.ext_error",
8487 FT_UINT32, BASE_HEX, NULL, 0x0,
8488 NULL, HFILL }},
8490 { &hf_ndps_auth_null,
8491 { "Auth Null", "ndps.auth_null",
8492 FT_BYTES, BASE_NONE, NULL, 0x0,
8493 NULL, HFILL }},
8495 { &hf_ndps_rpc_accept,
8496 { "RPC Accept or Deny", "ndps.rpc_acc",
8497 FT_UINT32, BASE_HEX, VALS(true_false), 0x0,
8498 NULL, HFILL }},
8500 { &hf_ndps_rpc_acc_stat,
8501 { "RPC Accept Status", "ndps.rpc_acc_stat",
8502 FT_UINT32, BASE_HEX, VALS(accept_stat), 0x0,
8503 NULL, HFILL }},
8505 { &hf_ndps_rpc_rej_stat,
8506 { "RPC Reject Status", "ndps.rpc_rej_stat",
8507 FT_UINT32, BASE_HEX, VALS(reject_stat), 0x0,
8508 NULL, HFILL }},
8510 { &hf_ndps_rpc_acc_results,
8511 { "RPC Accept Results", "ndps.rpc_acc_res",
8512 FT_UINT32, BASE_HEX, NULL, 0x0,
8513 NULL, HFILL }},
8515 { &hf_ndps_problem_type,
8516 { "Problem Type", "ndps.rpc_prob_type",
8517 FT_UINT32, BASE_HEX, VALS(error_type_enum), 0x0,
8518 NULL, HFILL }},
8520 { &hf_security_problem_type,
8521 { "Security Problem", "ndps.rpc_sec_prob",
8522 FT_UINT32, BASE_HEX, VALS(security_problem_enum), 0x0,
8523 NULL, HFILL }},
8525 { &hf_service_problem_type,
8526 { "Service Problem", "ndps.rpc_serv_prob",
8527 FT_UINT32, BASE_HEX, VALS(service_problem_enum), 0x0,
8528 NULL, HFILL }},
8530 { &hf_access_problem_type,
8531 { "Access Problem", "ndps.rpc_acc_prob",
8532 FT_UINT32, BASE_HEX, VALS(access_problem_enum), 0x0,
8533 NULL, HFILL }},
8535 { &hf_printer_problem_type,
8536 { "Printer Problem", "ndps.rpc_print_prob",
8537 FT_UINT32, BASE_HEX, VALS(printer_problem_enum), 0x0,
8538 NULL, HFILL }},
8540 { &hf_selection_problem_type,
8541 { "Selection Problem", "ndps.rpc_sel_prob",
8542 FT_UINT32, BASE_HEX, VALS(selection_problem_enum), 0x0,
8543 NULL, HFILL }},
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,
8548 NULL, HFILL }},
8550 { &hf_attribute_problem_type,
8551 { "Attribute Problem", "ndps.rpc_attr_prob",
8552 FT_UINT32, BASE_HEX, VALS(attribute_problem_enum), 0x0,
8553 NULL, HFILL }},
8555 { &hf_update_problem_type,
8556 { "Update Problem", "ndps.rpc_update_prob",
8557 FT_UINT32, BASE_HEX, VALS(update_problem_enum), 0x0,
8558 NULL, HFILL }},
8560 { &hf_obj_id_type,
8561 { "Object ID Type", "ndps.rpc_obj_id_type",
8562 FT_UINT32, BASE_HEX, VALS(obj_identification_enum), 0x0,
8563 NULL, HFILL }},
8565 { &hf_oid_struct_size,
8566 { "OID Struct Size", "ndps.rpc_oid_struct_size",
8567 FT_UINT16, BASE_DEC, NULL, 0x0,
8568 NULL, HFILL }},
8570 { &hf_object_name,
8571 { "Object Name", "ndps.object_name",
8572 FT_STRING, BASE_NONE, NULL, 0x0,
8573 NULL, HFILL }},
8575 { &hf_ndps_document_number,
8576 { "Document Number", "ndps.doc_num",
8577 FT_UINT32, BASE_HEX, NULL, 0x0,
8578 NULL, HFILL }},
8580 { &hf_ndps_doc_content,
8581 { "Document Content", "ndps.doc_content",
8582 FT_UINT32, BASE_HEX, NULL, 0x0,
8583 NULL, HFILL }},
8585 { &hf_ndps_nameorid,
8586 { "Name or ID Type", "ndps.nameorid",
8587 FT_UINT32, BASE_HEX, VALS(nameorid_enum), 0x0,
8588 NULL, HFILL }},
8590 { &hf_ndps_local_object_name,
8591 { "Local Object Name", "ndps.loc_object_name",
8592 FT_STRING, BASE_NONE, NULL, 0x0,
8593 NULL, HFILL }},
8595 { &hf_ndps_printer_name,
8596 { "Printer Name", "ndps.printer_name",
8597 FT_STRING, BASE_NONE, NULL, 0x0,
8598 NULL, HFILL }},
8600 { &hf_ndps_qualified_name,
8601 { "Qualified Name Type", "ndps.qual_name_type",
8602 FT_UINT32, BASE_HEX, VALS(qualified_name_enum), 0x0,
8603 NULL, HFILL }},
8605 #if 0
8606 { &hf_ndps_qualified_name2,
8607 { "Qualified Name Type", "ndps.qual_name_type2",
8608 FT_UINT32, BASE_HEX, VALS(qualified_name_enum2), 0x0,
8609 NULL, HFILL }},
8610 #endif
8612 { &hf_ndps_item_count,
8613 { "Number of Items", "ndps.item_count",
8614 FT_UINT32, BASE_DEC, NULL, 0x0,
8615 NULL, HFILL }},
8617 { &hf_ndps_num_passwords,
8618 { "Number of Passwords", "ndps.num_passwords",
8619 FT_UINT32, BASE_DEC, NULL, 0x0,
8620 NULL, HFILL }},
8622 { &hf_ndps_num_servers,
8623 { "Number of Servers", "ndps.num_servers",
8624 FT_UINT32, BASE_DEC, NULL, 0x0,
8625 NULL, HFILL }},
8627 { &hf_ndps_num_locations,
8628 { "Number of Locations", "ndps.num_locations",
8629 FT_UINT32, BASE_DEC, NULL, 0x0,
8630 NULL, HFILL }},
8632 { &hf_ndps_num_areas,
8633 { "Number of Areas", "ndps.num_areas",
8634 FT_UINT32, BASE_DEC, NULL, 0x0,
8635 NULL, HFILL }},
8637 { &hf_ndps_num_address_items,
8638 { "Number of Address Items", "ndps.num_address_items",
8639 FT_UINT32, BASE_DEC, NULL, 0x0,
8640 NULL, HFILL }},
8642 { &hf_ndps_num_job_categories,
8643 { "Number of Job Categories", "ndps.num_job_categories",
8644 FT_UINT32, BASE_DEC, NULL, 0x0,
8645 NULL, HFILL }},
8647 { &hf_ndps_num_page_selects,
8648 { "Number of Page Select Items", "ndps.num_page_selects",
8649 FT_UINT32, BASE_DEC, NULL, 0x0,
8650 NULL, HFILL }},
8652 { &hf_ndps_num_page_informations,
8653 { "Number of Page Information Items", "ndps.num_page_informations",
8654 FT_UINT32, BASE_DEC, NULL, 0x0,
8655 NULL, HFILL }},
8657 { &hf_ndps_num_names,
8658 { "Number of Names", "ndps.num_names",
8659 FT_UINT32, BASE_DEC, NULL, 0x0,
8660 NULL, HFILL }},
8662 { &hf_ndps_num_categories,
8663 { "Number of Categories", "ndps.num_categories",
8664 FT_UINT32, BASE_DEC, NULL, 0x0,
8665 NULL, HFILL }},
8667 { &hf_ndps_num_colorants,
8668 { "Number of Colorants", "ndps.num_colorants",
8669 FT_UINT32, BASE_DEC, NULL, 0x0,
8670 NULL, HFILL }},
8672 { &hf_ndps_num_events,
8673 { "Number of Events", "ndps.num_events",
8674 FT_UINT32, BASE_DEC, NULL, 0x0,
8675 NULL, HFILL }},
8677 { &hf_ndps_num_args,
8678 { "Number of Arguments", "ndps.num_argss",
8679 FT_UINT32, BASE_DEC, NULL, 0x0,
8680 NULL, HFILL }},
8682 { &hf_ndps_num_transfer_methods,
8683 { "Number of Transfer Methods", "ndps.num_transfer_methods",
8684 FT_UINT32, BASE_DEC, NULL, 0x0,
8685 NULL, HFILL }},
8687 { &hf_ndps_num_doc_types,
8688 { "Number of Document Types", "ndps.num_doc_types",
8689 FT_UINT32, BASE_DEC, NULL, 0x0,
8690 NULL, HFILL }},
8692 { &hf_ndps_num_destinations,
8693 { "Number of Destinations", "ndps.num_destinations",
8694 FT_UINT32, BASE_DEC, NULL, 0x0,
8695 NULL, HFILL }},
8697 { &hf_ndps_qualifier,
8698 { "Qualifier", "ndps.qual",
8699 FT_UINT32, BASE_HEX, NULL, 0x0,
8700 NULL, HFILL }},
8702 { &hf_ndps_lib_error,
8703 { "Library Error", "ndps.lib_error",
8704 FT_UINT32, BASE_HEX, VALS(ndps_error_types), 0x0,
8705 NULL, HFILL }},
8707 { &hf_ndps_other_error,
8708 { "Other Error", "ndps.other_error",
8709 FT_UINT32, BASE_HEX, VALS(ndps_error_types), 0x0,
8710 NULL, HFILL }},
8712 { &hf_ndps_other_error_2,
8713 { "Other Error 2", "ndps.other_error_2",
8714 FT_UINT32, BASE_HEX, VALS(ndps_error_types), 0x0,
8715 NULL, HFILL }},
8717 { &hf_ndps_session,
8718 { "Session Handle", "ndps.session",
8719 FT_UINT32, BASE_HEX, NULL, 0x0,
8720 NULL, HFILL }},
8722 { &hf_ndps_abort_flag,
8723 { "Abort?", "ndps.abort",
8724 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8725 NULL, HFILL }},
8727 { &hf_ndps_obj_attribute_type,
8728 { "Value Syntax", "ndps.attrib_type",
8729 FT_UINT32, BASE_HEX, VALS(ndps_attribute_enum), 0x0,
8730 NULL, HFILL }},
8732 { &hf_ndps_attribute_value,
8733 { "Value", "ndps.attribue_value",
8734 FT_UINT32, BASE_HEX, NULL, 0x0,
8735 NULL, HFILL }},
8737 { &hf_ndps_lower_range,
8738 { "Lower Range", "ndps.lower_range",
8739 FT_UINT32, BASE_HEX, NULL, 0x0,
8740 NULL, HFILL }},
8742 { &hf_ndps_upper_range,
8743 { "Upper Range", "ndps.upper_range",
8744 FT_UINT32, BASE_HEX, NULL, 0x0,
8745 NULL, HFILL }},
8747 { &hf_ndps_n64,
8748 { "Value", "ndps.n64",
8749 FT_BYTES, BASE_NONE, NULL, 0x0,
8750 NULL, HFILL }},
8752 { &hf_ndps_lower_range_n64,
8753 { "Lower Range", "ndps.lower_range_n64",
8754 FT_BYTES, BASE_NONE, NULL, 0x0,
8755 NULL, HFILL }},
8757 { &hf_ndps_upper_range_n64,
8758 { "Upper Range", "ndps.upper_range_n64",
8759 FT_BYTES, BASE_NONE, NULL, 0x0,
8760 NULL, HFILL }},
8762 { &hf_ndps_attrib_boolean,
8763 { "Value?", "ndps.attrib_boolean",
8764 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8765 NULL, HFILL }},
8767 { &hf_ndps_realization,
8768 { "Realization Type", "ndps.realization",
8769 FT_UINT32, BASE_HEX, VALS(ndps_realization_enum), 0x0,
8770 NULL, HFILL }},
8772 { &hf_ndps_xdimension_n64,
8773 { "X Dimension", "ndps.xdimension_n64",
8774 FT_BYTES, BASE_NONE, NULL, 0x0,
8775 NULL, HFILL }},
8777 { &hf_ndps_ydimension_n64,
8778 { "Y Dimension", "ndps.ydimension_n64",
8779 FT_BYTES, BASE_NONE, NULL, 0x0,
8780 NULL, HFILL }},
8782 { &hf_ndps_dim_value,
8783 { "Dimension Value Type", "ndps.dim_value",
8784 FT_UINT32, BASE_HEX, VALS(ndps_dim_value_enum), 0x0,
8785 NULL, HFILL }},
8787 { &hf_ndps_dim_flag,
8788 { "Dimension Flag", "ndps.dim_falg",
8789 FT_UINT32, BASE_HEX, NULL, 0x0,
8790 NULL, HFILL }},
8792 { &hf_ndps_xydim_value,
8793 { "XY Dimension Value Type", "ndps.xydim_value",
8794 FT_UINT32, BASE_HEX, VALS(ndps_xydim_value_enum), 0x0,
8795 NULL, HFILL }},
8797 { &hf_ndps_location_value,
8798 { "Location Value Type", "ndps.location_value",
8799 FT_UINT32, BASE_HEX, VALS(ndps_location_value_enum), 0x0,
8800 NULL, HFILL }},
8802 { &hf_ndps_xmin_n64,
8803 { "Minimum X Dimension", "ndps.xmin_n64",
8804 FT_BYTES, BASE_NONE, NULL, 0x0,
8805 NULL, HFILL }},
8807 { &hf_ndps_xmax_n64,
8808 { "Maximum X Dimension", "ndps.xmax_n64",
8809 FT_BYTES, BASE_NONE, NULL, 0x0,
8810 NULL, HFILL }},
8812 { &hf_ndps_ymin_n64,
8813 { "Minimum Y Dimension", "ndps.ymin_n64",
8814 FT_BYTES, BASE_NONE, NULL, 0x0,
8815 NULL, HFILL }},
8817 { &hf_ndps_ymax_n64,
8818 { "Maximum Y Dimension", "ndps.ymax_n64",
8819 FT_BYTES, BASE_NONE, NULL, 0x0,
8820 NULL, HFILL }},
8822 { &hf_ndps_edge_value,
8823 { "Edge Value", "ndps.edge_value",
8824 FT_UINT32, BASE_HEX, VALS(ndps_edge_value_enum), 0x0,
8825 NULL, HFILL }},
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,
8830 NULL, HFILL }},
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,
8835 NULL, HFILL }},
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,
8840 NULL, HFILL }},
8842 { &hf_ndps_profile_id,
8843 { "Profile ID", "ndps.profile_id",
8844 FT_UINT32, BASE_HEX, NULL, 0x0,
8845 NULL, HFILL }},
8847 { &hf_ndps_persistence,
8848 { "Persistence", "ndps.persistence",
8849 FT_UINT32, BASE_HEX, VALS(ndps_persistence_enum), 0x0,
8850 NULL, HFILL }},
8852 { &hf_ndps_language_count,
8853 { "Number of Languages", "ndps.language_count",
8854 FT_UINT32, BASE_DEC, NULL, 0x0,
8855 NULL, HFILL }},
8857 { &hf_ndps_language_id,
8858 { "Language ID", "ndps.lang_id",
8859 FT_UINT32, BASE_HEX, NULL, 0x0,
8860 NULL, HFILL }},
8862 { &hf_address_type,
8863 { "Address Type", "ndps.address_type",
8864 FT_UINT32, BASE_HEX, VALS(ndps_address_type_enum), 0x0,
8865 NULL, HFILL }},
8867 { &hf_ndps_address,
8868 { "Address", "ndps.address",
8869 FT_UINT32, BASE_HEX, VALS(ndps_address_enum), 0x0,
8870 NULL, HFILL }},
8872 { &hf_ndps_add_bytes,
8873 { "Address Bytes", "ndps.add_bytes",
8874 FT_BYTES, BASE_NONE, NULL, 0x0,
8875 NULL, HFILL }},
8877 { &hf_ndps_event_type,
8878 { "Event Type", "ndps.event_type",
8879 FT_UINT32, BASE_HEX, NULL, 0x0,
8880 NULL, HFILL }},
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,
8885 NULL, HFILL }},
8887 { &hf_ndps_octet_string,
8888 { "Octet String", "ndps.octet_string",
8889 FT_BYTES, BASE_NONE, NULL, 0x0,
8890 NULL, HFILL }},
8892 { &hf_ndps_scope,
8893 { "Scope", "ndps.scope",
8894 FT_UINT32, BASE_HEX, NULL, 0x0,
8895 NULL, HFILL }},
8897 { &hf_address_len,
8898 { "Address Length", "ndps.addr_len",
8899 FT_UINT32, BASE_DEC, NULL, 0x0,
8900 NULL, HFILL }},
8902 { &hf_ndps_net,
8903 { "IPX Network", "ndps.net",
8904 FT_IPXNET, BASE_NONE, NULL, 0x0,
8905 "Scope", HFILL }},
8907 { &hf_ndps_node,
8908 { "Node", "ndps.node",
8909 FT_ETHER, BASE_NONE, NULL, 0x0,
8910 NULL, HFILL }},
8912 { &hf_ndps_socket,
8913 { "IPX Socket", "ndps.socket",
8914 FT_UINT16, BASE_HEX, NULL, 0x0,
8915 NULL, HFILL }},
8917 { &hf_ndps_port,
8918 { "IP Port", "ndps.port",
8919 FT_UINT16, BASE_DEC, NULL, 0x0,
8920 NULL, HFILL }},
8922 { &hf_ndps_ip,
8923 { "IP Address", "ndps.ip",
8924 FT_IPv4, BASE_NONE, NULL, 0x0,
8925 NULL, HFILL }},
8927 { &hf_ndps_server_type,
8928 { "NDPS Server Type", "ndps.server_type",
8929 FT_UINT32, BASE_HEX, VALS(ndps_server_type_enum), 0x0,
8930 NULL, HFILL }},
8932 { &hf_ndps_num_services,
8933 { "Number of Services", "ndps.num_services",
8934 FT_UINT32, BASE_DEC, NULL, 0x0,
8935 NULL, HFILL }},
8937 { &hf_ndps_service_type,
8938 { "NDPS Service Type", "ndps.service_type",
8939 FT_UINT32, BASE_HEX, VALS(ndps_service_type_enum), 0x0,
8940 NULL, HFILL }},
8942 { &hf_ndps_service_enabled,
8943 { "Service Enabled?", "ndps.service_enabled",
8944 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8945 NULL, HFILL }},
8947 { &hf_ndps_method_name,
8948 { "Method Name", "ndps.method_name",
8949 FT_STRING, BASE_NONE, NULL, 0x0,
8950 NULL, HFILL }},
8952 { &hf_ndps_method_ver,
8953 { "Method Version", "ndps.method_ver",
8954 FT_STRING, BASE_NONE, NULL, 0x0,
8955 NULL, HFILL }},
8957 { &hf_ndps_file_name,
8958 { "File Name", "ndps.file_name",
8959 FT_STRING, BASE_NONE, NULL, 0x0,
8960 NULL, HFILL }},
8962 { &hf_ndps_admin_submit,
8963 { "Admin Submit Flag?", "ndps.admin_submit_flag",
8964 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8965 NULL, HFILL }},
8967 { &hf_ndps_oid,
8968 { "Object ID", "ndps.oid",
8969 FT_BYTES, BASE_NONE, NULL, 0x0,
8970 NULL, HFILL }},
8972 { &hf_ndps_object_op,
8973 { "Operation", "ndps.object_op",
8974 FT_UINT32, BASE_HEX, VALS(ndps_object_op_enum), 0x0,
8975 NULL, HFILL }},
8977 { &hf_answer_time,
8978 { "Answer Time", "ndps.answer_time",
8979 FT_UINT32, BASE_DEC, NULL, 0x0,
8980 NULL, HFILL }},
8982 { &hf_oid_asn1_type,
8983 { "ASN.1 Type", "ndps.asn1_type",
8984 FT_UINT16, BASE_DEC, NULL, 0x0,
8985 NULL, HFILL }},
8987 { &hf_ndps_item_ptr,
8988 { "Item Pointer", "ndps.item_ptr",
8989 FT_BYTES, BASE_NONE, NULL, 0x0,
8990 NULL, HFILL }},
8992 { &hf_ndps_len,
8993 { "Length", "ndps.len",
8994 FT_UINT16, BASE_DEC, NULL, 0x0,
8995 NULL, HFILL }},
8997 { &hf_ndps_limit_enc,
8998 { "Limit Encountered", "ndps.limit_enc",
8999 FT_UINT32, BASE_HEX, VALS(ndps_limit_enc_enum), 0x0,
9000 NULL, HFILL }},
9002 { &hf_ndps_delivery_add_count,
9003 { "Number of Delivery Addresses", "ndps.delivery_add_count",
9004 FT_UINT32, BASE_DEC, NULL, 0x0,
9005 NULL, HFILL }},
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,
9010 NULL, HFILL }},
9012 { &hf_ndps_criterion_type,
9013 { "Criterion Type", "ndps.criterion_type",
9014 FT_UINT32, BASE_HEX, VALS(ndps_attribute_enum), 0x0,
9015 NULL, HFILL }},
9017 { &hf_ndps_num_ignored_attributes,
9018 { "Number of Ignored Attributes", "ndps.num_ignored_attributes",
9019 FT_UINT32, BASE_DEC, NULL, 0x0,
9020 NULL, HFILL }},
9022 { &hf_ndps_ignored_type,
9023 { "Ignored Type", "ndps.ignored_type",
9024 FT_UINT32, BASE_HEX, VALS(ndps_attribute_enum), 0x0,
9025 NULL, HFILL }},
9027 { &hf_ndps_num_resources,
9028 { "Number of Resources", "ndps.num_resources",
9029 FT_UINT32, BASE_DEC, NULL, 0x0,
9030 NULL, HFILL }},
9032 { &hf_ndps_resource_type,
9033 { "Resource Type", "ndps.resource_type",
9034 FT_UINT32, BASE_HEX, VALS(ndps_resource_enum), 0x0,
9035 NULL, HFILL }},
9037 { &hf_ndps_identifier_type,
9038 { "Identifier Type", "ndps.identifier_type",
9039 FT_UINT32, BASE_HEX, VALS(ndps_identifier_enum), 0x0,
9040 NULL, HFILL }},
9042 { &hf_ndps_page_flag,
9043 { "Page Flag", "ndps.page_flag",
9044 FT_UINT32, BASE_HEX, NULL, 0x0,
9045 NULL, HFILL }},
9047 { &hf_ndps_media_type,
9048 { "Media Type", "ndps.media_type",
9049 FT_UINT32, BASE_HEX, VALS(ndps_media_enum), 0x0,
9050 NULL, HFILL }},
9052 { &hf_ndps_page_size,
9053 { "Page Size", "ndps.page_size",
9054 FT_UINT32, BASE_HEX, VALS(ndps_page_size_enum), 0x0,
9055 NULL, HFILL }},
9057 { &hf_ndps_direction,
9058 { "Direction", "ndps.direction",
9059 FT_UINT32, BASE_HEX, VALS(ndps_pres_direction_enum), 0x0,
9060 NULL, HFILL }},
9062 { &hf_ndps_page_order,
9063 { "Page Order", "ndps.page_order",
9064 FT_UINT32, BASE_HEX, VALS(ndps_page_order_enum), 0x0,
9065 NULL, HFILL }},
9067 { &hf_ndps_medium_size,
9068 { "Medium Size", "ndps.medium_size",
9069 FT_UINT32, BASE_HEX, VALS(ndps_medium_size_enum), 0x0,
9070 NULL, HFILL }},
9072 { &hf_ndps_long_edge_feeds,
9073 { "Long Edge Feeds?", "ndps.long_edge_feeds",
9074 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9075 NULL, HFILL }},
9077 { &hf_ndps_inc_across_feed,
9078 { "Increment Across Feed", "ndps.inc_across_feed",
9079 FT_BYTES, BASE_NONE, NULL, 0x0,
9080 NULL, HFILL }},
9082 { &hf_ndps_size_inc_in_feed,
9083 { "Size Increment in Feed", "ndps.size_inc_in_feed",
9084 FT_BYTES, BASE_NONE, NULL, 0x0,
9085 NULL, HFILL }},
9087 { &hf_ndps_page_orientation,
9088 { "Page Orientation", "ndps.page_orientation",
9089 FT_UINT32, BASE_HEX, VALS(ndps_page_orientation_enum), 0x0,
9090 NULL, HFILL }},
9092 { &hf_ndps_numbers_up,
9093 { "Numbers Up", "ndps.numbers_up",
9094 FT_UINT32, BASE_HEX, VALS(ndps_numbers_up_enum), 0x0,
9095 NULL, HFILL }},
9097 { &hf_ndps_xdimension,
9098 { "X Dimension", "ndps.xdimension",
9099 FT_UINT32, BASE_HEX, NULL, 0x0,
9100 NULL, HFILL }},
9102 { &hf_ndps_ydimension,
9103 { "Y Dimension", "ndps.ydimension",
9104 FT_UINT32, BASE_HEX, NULL, 0x0,
9105 NULL, HFILL }},
9107 { &hf_ndps_state_severity,
9108 { "State Severity", "ndps.state_severity",
9109 FT_UINT32, BASE_HEX, VALS(ndps_state_severity_enum), 0x0,
9110 NULL, HFILL }},
9112 { &hf_ndps_training,
9113 { "Training", "ndps.training",
9114 FT_UINT32, BASE_HEX, VALS(ndps_training_enum), 0x0,
9115 NULL, HFILL }},
9117 { &hf_ndps_colorant_set,
9118 { "Colorant Set", "ndps.colorant_set",
9119 FT_UINT32, BASE_HEX, VALS(ndps_colorant_set_enum), 0x0,
9120 NULL, HFILL }},
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,
9125 NULL, HFILL }},
9127 { &hf_ndps_attrs_arg,
9128 { "List Attribute Operation", "ndps.attrs_arg",
9129 FT_UINT32, BASE_HEX, VALS(ndps_attrs_arg_enum), 0x0,
9130 NULL, HFILL }},
9132 { &hf_ndps_context_len,
9133 { "Context Length", "ndps.context_len",
9134 FT_UINT32, BASE_DEC, NULL, 0x0,
9135 NULL, HFILL }},
9137 { &hf_ndps_context,
9138 { "Context", "ndps.context",
9139 FT_BYTES, BASE_NONE, NULL, 0x0,
9140 NULL, HFILL }},
9142 { &hf_ndps_filter,
9143 { "Filter Type", "ndps.filter",
9144 FT_UINT32, BASE_HEX, VALS(ndps_filter_enum), 0x0,
9145 NULL, HFILL }},
9147 #if 0
9148 { &hf_ndps_item_filter,
9149 { "Filter Item Operation", "ndps.filter_item",
9150 FT_UINT32, BASE_HEX, VALS(ndps_filter_item_enum), 0x0,
9151 NULL, HFILL }},
9152 #endif
9154 #if 0
9155 { &hf_ndps_substring_match,
9156 { "Substring Match", "ndps.substring_match",
9157 FT_UINT32, BASE_HEX, VALS(ndps_match_criteria_enum), 0x0,
9158 NULL, HFILL }},
9159 #endif
9161 { &hf_ndps_time_limit,
9162 { "Time Limit", "ndps.time_limit",
9163 FT_UINT32, BASE_DEC, NULL, 0x0,
9164 NULL, HFILL }},
9166 { &hf_ndps_count_limit,
9167 { "Count Limit", "ndps.count_limit",
9168 FT_UINT32, BASE_DEC, NULL, 0x0,
9169 NULL, HFILL }},
9171 { &hf_ndps_operator,
9172 { "Operator Type", "ndps.operator",
9173 FT_UINT32, BASE_DEC, VALS(ndps_operator_enum), 0x0,
9174 NULL, HFILL }},
9176 { &hf_ndps_password,
9177 { "Password", "ndps.password",
9178 FT_BYTES, BASE_NONE, NULL, 0x0,
9179 NULL, HFILL }},
9181 { &hf_ndps_retrieve_restrictions,
9182 { "Retrieve Restrictions", "ndps.ret_restrict",
9183 FT_UINT32, BASE_DEC, NULL, 0x0,
9184 NULL, HFILL }},
9186 { &hf_ndps_bind_security_option_count,
9187 { "Number of Bind Security Options", "ndps.bind_security_count",
9188 FT_UINT32, BASE_DEC, NULL, 0x0,
9189 NULL, HFILL }},
9191 { &hf_bind_security,
9192 { "Bind Security Options", "ndps.bind_security",
9193 FT_UINT32, BASE_DEC, NULL, 0x0,
9194 NULL, HFILL }},
9196 { &hf_ndps_max_items,
9197 { "Maximum Items in List", "ndps.max_items",
9198 FT_UINT32, BASE_DEC, NULL, 0x0,
9199 NULL, HFILL }},
9201 { &hf_ndps_status_flags,
9202 { "Status Flag", "ndps.status_flags",
9203 FT_UINT32, BASE_DEC, NULL, 0x0,
9204 NULL, HFILL }},
9206 { &hf_ndps_resource_list_type,
9207 { "Resource Type", "ndps.resource_type",
9208 FT_UINT32, BASE_DEC, VALS(ndps_resource_type_enum), 0x0,
9209 NULL, HFILL }},
9211 { &hf_os_count,
9212 { "Number of OSes", "ndps.os_count",
9213 FT_UINT32, BASE_DEC, NULL, 0x0,
9214 NULL, HFILL }},
9216 { &hf_os_type,
9217 { "OS Type", "ndps.os_type",
9218 FT_UINT32, BASE_DEC, VALS(ndps_os_type_enum), 0x0,
9219 NULL, HFILL }},
9221 { &hf_ndps_printer_type_count,
9222 { "Number of Printer Types", "ndps.printer_type_count",
9223 FT_UINT32, BASE_DEC, NULL, 0x0,
9224 NULL, HFILL }},
9226 { &hf_ndps_printer_type,
9227 { "Printer Type", "ndps.prn_type",
9228 FT_STRING, BASE_NONE, NULL, 0x0,
9229 NULL, HFILL }},
9231 { &hf_ndps_printer_manuf,
9232 { "Printer Manufacturer", "ndps.prn_manuf",
9233 FT_STRING, BASE_NONE, NULL, 0x0,
9234 NULL, HFILL }},
9236 { &hf_ndps_inf_file_name,
9237 { "INF File Name", "ndps.inf_file_name",
9238 FT_STRING, BASE_NONE, NULL, 0x0,
9239 NULL, HFILL }},
9241 { &hf_ndps_vendor_dir,
9242 { "Vendor Directory", "ndps.vendor_dir",
9243 FT_STRING, BASE_NONE, NULL, 0x0,
9244 NULL, HFILL }},
9246 { &hf_banner_type,
9247 { "Banner Type", "ndps.banner_type",
9248 FT_UINT32, BASE_DEC, VALS(ndps_banner_type_enum), 0x0,
9249 NULL, HFILL }},
9251 { &hf_font_type,
9252 { "Font Type", "ndps.font_type",
9253 FT_UINT32, BASE_DEC, VALS(ndps_font_type_enum), 0x0,
9254 NULL, HFILL }},
9256 { &hf_printer_id,
9257 { "Printer ID", "ndps.printer_id",
9258 FT_BYTES, BASE_NONE, NULL, 0x0,
9259 NULL, HFILL }},
9261 { &hf_ndps_font_name,
9262 { "Font Name", "ndps.font_name",
9263 FT_STRING, BASE_NONE, NULL, 0x0,
9264 NULL, HFILL }},
9266 { &hf_ndps_return_code,
9267 { "Return Code", "ndps.ret_code",
9268 FT_UINT32, BASE_HEX, VALS(ndps_error_types), 0x0,
9269 NULL, HFILL }},
9271 #if 0
9272 { &hf_ndps_banner_count,
9273 { "Number of Banners", "ndps.banner_count",
9274 FT_UINT32, BASE_DEC, NULL, 0x0,
9275 NULL, HFILL }},
9276 #endif
9278 { &hf_ndps_banner_name,
9279 { "Banner Name", "ndps.banner_name",
9280 FT_STRING, BASE_NONE, NULL, 0x0,
9281 NULL, HFILL }},
9283 { &hf_ndps_font_type_count,
9284 { "Number of Font Types", "ndps.font_type_count",
9285 FT_UINT32, BASE_DEC, NULL, 0x0,
9286 NULL, HFILL }},
9288 { &hf_font_type_name,
9289 { "Font Type Name", "ndps.font_type_name",
9290 FT_STRING, BASE_NONE, NULL, 0x0,
9291 NULL, HFILL }},
9293 { &hf_ndps_font_file_count,
9294 { "Number of Font Files", "ndps.font_file_count",
9295 FT_UINT32, BASE_DEC, NULL, 0x0,
9296 NULL, HFILL }},
9298 { &hf_font_file_name,
9299 { "Font File Name", "ndps.font_file_name",
9300 FT_STRING, BASE_NONE, NULL, 0x0,
9301 NULL, HFILL }},
9303 { &hf_ndps_printer_def_count,
9304 { "Number of Printer Definitions", "ndps.printer_def_count",
9305 FT_UINT32, BASE_DEC, NULL, 0x0,
9306 NULL, HFILL }},
9308 { &hf_ndps_prn_file_name,
9309 { "Printer File Name", "ndps.print_file_name",
9310 FT_STRING, BASE_NONE, NULL, 0x0,
9311 NULL, HFILL }},
9313 { &hf_ndps_prn_dir_name,
9314 { "Printer Directory Name", "ndps.print_dir_name",
9315 FT_STRING, BASE_NONE, NULL, 0x0,
9316 NULL, HFILL }},
9318 { &hf_ndps_def_file_name,
9319 { "Printer Definition Name", "ndps.print_def_name",
9320 FT_STRING, BASE_NONE, NULL, 0x0,
9321 NULL, HFILL }},
9323 { &hf_ndps_num_win31_keys,
9324 { "Number of Windows 3.1 Keys", "ndps.num_win31_keys",
9325 FT_UINT32, BASE_DEC, NULL, 0x0,
9326 NULL, HFILL }},
9328 { &hf_ndps_num_win95_keys,
9329 { "Number of Windows 95 Keys", "ndps.num_win95_keys",
9330 FT_UINT32, BASE_DEC, NULL, 0x0,
9331 NULL, HFILL }},
9333 { &hf_ndps_num_windows_keys,
9334 { "Number of Windows Keys", "ndps.num_windows_keys",
9335 FT_UINT32, BASE_DEC, NULL, 0x0,
9336 NULL, HFILL }},
9338 { &hf_ndps_windows_key,
9339 { "Windows Key", "ndps.windows_key",
9340 FT_STRING, BASE_NONE, NULL, 0x0,
9341 NULL, HFILL }},
9343 { &hf_archive_type,
9344 { "Archive Type", "ndps.archive_type",
9345 FT_UINT32, BASE_DEC, VALS(ndps_archive_enum), 0x0,
9346 NULL, HFILL }},
9348 { &hf_archive_file_size,
9349 { "Archive File Size", "ndps.archive_size",
9350 FT_UINT32, BASE_DEC, NULL, 0x0,
9351 NULL, HFILL }},
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 }},
9383 { &hf_ndps_segment,
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 }},
9391 { &hf_ndps_data,
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,
9398 NULL, HFILL }},
9400 { &hf_res_type,
9401 { "Resource Type", "ndps.res_type",
9402 FT_UINT32, BASE_DEC, VALS(ndps_res_type_enum), 0x0,
9403 NULL, HFILL }},
9405 { &hf_file_timestamp,
9406 { "File Time Stamp", "ndps.file_time_stamp",
9407 FT_UINT32, BASE_DEC, NULL, 0x0,
9408 NULL, HFILL }},
9410 { &hf_print_arg,
9411 { "Print Type", "ndps.print_arg",
9412 FT_UINT32, BASE_DEC, VALS(ndps_print_arg_enum), 0x0,
9413 NULL, HFILL }},
9415 { &hf_sub_complete,
9416 { "Submission Complete?", "ndps.sub_complete", FT_BOOLEAN, BASE_NONE,
9417 NULL, 0x0, NULL, HFILL }},
9419 { &hf_doc_content,
9420 { "Document Content", "ndps.doc_content",
9421 FT_UINT32, BASE_DEC, VALS(ndps_doc_content_enum), 0x0,
9422 NULL, HFILL }},
9424 #if 0
9425 { &hf_ndps_doc_name,
9426 { "Document Name", "ndps.doc_name",
9427 FT_STRING, BASE_NONE, NULL, 0x0,
9428 NULL, HFILL }},
9429 #endif
9431 { &hf_local_id,
9432 { "Local ID", "ndps.local_id",
9433 FT_UINT32, BASE_DEC, NULL, 0x0,
9434 NULL, HFILL }},
9436 { &hf_ndps_included_doc_len,
9437 { "Included Document Length", "ndps.included_doc_len",
9438 FT_UINT32, BASE_DEC, NULL, 0x0,
9439 NULL, HFILL }},
9441 { &hf_ndps_included_doc,
9442 { "Included Document", "ndps.included_doc",
9443 FT_BYTES, BASE_NONE, NULL, 0x0,
9444 NULL, HFILL }},
9446 { &hf_ndps_ref_name,
9447 { "Referenced Document Name", "ndps.ref_doc_name",
9448 FT_STRING, BASE_NONE, NULL, 0x0,
9449 NULL, HFILL }},
9451 { &hf_interrupt_job_type,
9452 { "Interrupt Job Identifier", "ndps.interrupt_job_type",
9453 FT_UINT32, BASE_DEC, VALS(ndps_interrupt_job_enum), 0x0,
9454 NULL, HFILL }},
9456 { &hf_pause_job_type,
9457 { "Pause Job Identifier", "ndps.pause_job_type",
9458 FT_UINT32, BASE_DEC, VALS(ndps_pause_job_enum), 0x0,
9459 NULL, HFILL }},
9461 { &hf_ndps_force,
9462 { "Force?", "ndps.force",
9463 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9464 NULL, HFILL }},
9466 { &hf_resubmit_op_type,
9467 { "Resubmit Operation Type", "ndps.resubmit_op_type",
9468 FT_UINT32, BASE_DEC, VALS(ndps_resubmit_op_enum), 0x0,
9469 NULL, HFILL }},
9471 { &hf_shutdown_type,
9472 { "Shutdown Type", "ndps.shutdown_type",
9473 FT_UINT32, BASE_DEC, VALS(ndps_shutdown_enum), 0x0,
9474 NULL, HFILL }},
9476 { &hf_ndps_supplier_flag,
9477 { "Supplier Data?", "ndps.supplier_flag",
9478 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9479 NULL, HFILL }},
9481 { &hf_ndps_language_flag,
9482 { "Language Data?", "ndps.language_flag",
9483 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9484 NULL, HFILL }},
9486 { &hf_ndps_method_flag,
9487 { "Method Data?", "ndps.method_flag",
9488 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9489 NULL, HFILL }},
9491 { &hf_ndps_delivery_address_flag,
9492 { "Delivery Address Data?", "ndps.delivery_flag",
9493 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9494 NULL, HFILL }},
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,
9499 NULL, HFILL }},
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,
9504 NULL, HFILL }},
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,
9509 NULL, HFILL }},
9511 { &hf_ndps_integer_type_flag,
9512 { "Integer Type Flag", "ndps.integer_type_flag",
9513 FT_UINT32, BASE_HEX, NULL, 0x0,
9514 NULL, HFILL }},
9516 { &hf_ndps_integer_type_value,
9517 { "Integer Type Value", "ndps.integer_type_value",
9518 FT_UINT32, BASE_HEX, NULL, 0x0,
9519 NULL, HFILL }},
9521 { &hf_ndps_continuation_option,
9522 { "Continuation Option", "ndps.continuation_option",
9523 FT_BYTES, BASE_NONE, NULL, 0x0,
9524 NULL, HFILL }},
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,
9529 NULL, HFILL }},
9531 { &hf_ndps_guid,
9532 { "GUID", "ndps.guid",
9533 FT_BYTES, BASE_NONE, NULL, 0x0,
9534 NULL, HFILL }},
9536 { &hf_ndps_list_services_type,
9537 { "Services Type", "ndps.list_services_type",
9538 FT_UINT32, BASE_HEX, VALS(ndps_list_services_enum), 0x0,
9539 NULL, HFILL }},
9541 { &hf_ndps_item_bytes,
9542 { "Item Ptr", "ndps.item_bytes",
9543 FT_BYTES, BASE_NONE, NULL, 0x0,
9544 NULL, HFILL }},
9546 { &hf_ndps_certified,
9547 { "Certified", "ndps.certified",
9548 FT_BYTES, BASE_NONE, NULL, 0x0,
9549 NULL, HFILL }},
9551 { &hf_ndps_attribute_set,
9552 { "Attribute Set", "ndps.attribute_set",
9553 FT_BYTES, BASE_NONE, NULL, 0x0,
9554 NULL, HFILL }},
9556 { &hf_ndps_data_item_type,
9557 { "Item Type", "ndps.data_item_type",
9558 FT_UINT32, BASE_HEX, VALS(ndps_data_item_enum), 0x0,
9559 NULL, HFILL }},
9561 { &hf_info_int,
9562 { "Integer Value", "ndps.info_int",
9563 FT_UINT8, BASE_HEX, NULL, 0x0,
9564 NULL, HFILL }},
9566 { &hf_info_int16,
9567 { "16 Bit Integer Value", "ndps.info_int16",
9568 FT_UINT16, BASE_HEX, NULL, 0x0,
9569 NULL, HFILL }},
9571 { &hf_info_int32,
9572 { "32 Bit Integer Value", "ndps.info_int32",
9573 FT_UINT32, BASE_HEX, NULL, 0x0,
9574 NULL, HFILL }},
9576 { &hf_info_boolean,
9577 { "Boolean Value", "ndps.info_boolean",
9578 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
9579 NULL, HFILL }},
9581 { &hf_info_string,
9582 { "String Value", "ndps.info_string",
9583 FT_STRING, BASE_NONE, NULL, 0x0,
9584 NULL, HFILL }},
9586 #if 0
9587 { &hf_info_bytes,
9588 { "Byte Value", "ndps.info_bytes",
9589 FT_BYTES, BASE_NONE, NULL, 0x0,
9590 NULL, HFILL }},
9591 #endif
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,
9596 NULL, HFILL }},
9598 { &hf_ndps_registry_name,
9599 { "Registry Name", "ndps.registry_name",
9600 FT_STRING, BASE_NONE, NULL, 0x0,
9601 NULL, HFILL }},
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,
9606 NULL, HFILL }},
9608 { &hf_ndps_session_type,
9609 { "Session Type", "ndps.session_type",
9610 FT_UINT32, BASE_HEX, VALS(ndps_session_type_enum), 0x0,
9611 NULL, HFILL }},
9613 { &hf_time,
9614 { "Time", "ndps.time",
9615 FT_UINT32, BASE_DEC, NULL, 0x0,
9616 NULL, HFILL }},
9618 { &hf_ndps_supplier_name,
9619 { "Supplier Name", "ndps.supplier_name",
9620 FT_STRING, BASE_NONE, NULL, 0x0,
9621 NULL, HFILL }},
9623 { &hf_ndps_message,
9624 { "Message", "ndps.message",
9625 FT_STRING, BASE_NONE, NULL, 0x0,
9626 NULL, HFILL }},
9628 { &hf_ndps_delivery_method_count,
9629 { "Number of Delivery Methods", "ndps.delivery_method_count",
9630 FT_UINT32, BASE_DEC, NULL, 0x0,
9631 NULL, HFILL }},
9633 { &hf_delivery_method_type,
9634 { "Delivery Method Type", "ndps.delivery_method_type",
9635 FT_UINT32, BASE_HEX, VALS(ndps_delivery_method_enum), 0x0,
9636 NULL, HFILL }},
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,
9641 NULL, HFILL }},
9643 { &hf_packet_count,
9644 { "Packet Count", "ndps.packet_count",
9645 FT_UINT32, BASE_DEC, NULL, 0x0,
9646 NULL, HFILL }},
9648 { &hf_last_packet_flag,
9649 { "Last Packet Flag", "ndps.last_packet_flag",
9650 FT_UINT32, BASE_DEC, NULL, 0x0,
9651 NULL, HFILL }},
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,
9656 NULL, HFILL }},
9658 { &hf_problem_type,
9659 { "Problem Type", "ndps.problem_type",
9660 FT_UINT32, BASE_HEX, VALS(problem_type_enum), 0x0,
9661 NULL, HFILL }},
9663 { &hf_ndps_num_values,
9664 { "Number of Values", "ndps.num_values",
9665 FT_UINT32, BASE_DEC, NULL, 0x0,
9666 NULL, HFILL }},
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 }},
9718 #if 0
9719 { &hf_ndps_attribute_time,
9720 { "Time", "ndps.attribute_time",
9721 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0,
9722 NULL, HFILL }},
9723 #endif
9725 { &hf_print_security,
9726 { "Printer Security", "ndps.print_security",
9727 FT_UINT32, BASE_HEX, VALS(ndps_print_security), 0x0,
9728 NULL, HFILL }},
9730 { &hf_notify_time_interval,
9731 { "Notify Time Interval", "ndps.notify_time_interval",
9732 FT_UINT32, BASE_HEX, NULL, 0x0,
9733 NULL, HFILL }},
9735 { &hf_notify_sequence_number,
9736 { "Notify Sequence Number", "ndps.notify_seq_number",
9737 FT_UINT32, BASE_HEX, NULL, 0x0,
9738 NULL, HFILL }},
9740 { &hf_notify_lease_exp_time,
9741 { "Notify Lease Expiration Time", "ndps.notify_lease_exp_time",
9742 FT_UINT32, BASE_HEX, NULL, 0x0,
9743 NULL, HFILL }},
9745 { &hf_notify_printer_uri,
9746 { "Notify Printer URI", "ndps.notify_printer_uri",
9747 FT_STRING, BASE_NONE, NULL, 0x0,
9748 NULL, HFILL }},
9750 { &hf_level,
9751 { "Level", "ndps.level",
9752 FT_UINT32, BASE_HEX, NULL, 0x0,
9753 NULL, HFILL }},
9755 { &hf_interval,
9756 { "Interval", "ndps.interval",
9757 FT_UINT32, BASE_HEX, NULL, 0x0,
9758 NULL, HFILL }},
9761 static gint *ett[] = {
9762 &ett_ndps,
9763 &ett_ndps_segments,
9764 &ett_ndps_segment,
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.",
9787 &ndps_desegment);
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",
9791 &ndps_defragment);
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",
9795 &ndps_show_oids);
9797 register_init_routine(&ndps_init_protocol);
9798 register_postseq_cleanup_routine(&ndps_postseq_cleanup);
9801 void
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");