Bug Summary

File:builds/wireshark/wireshark/epan/dissectors/packet-obex.c
Warning:line 1043, column 100
Subtraction of a non-null pointer (from variable 'i_path') and a null pointer (from variable 'current_path') results in undefined behavior

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-obex.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-22/lib/clang/22 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/epan -D CARES_NO_DEPRECATED -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-22/lib/clang/22/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/16/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-nonliteral -std=gnu17 -ferror-limit 19 -fvisibility=hidden -fwrapv -fwrapv-pointer -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -faddrsig -fdwarf2-cfi-asm -o /builds/wireshark/wireshark/sbout/2026-06-07-100346-3530-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-obex.c
1/* packet-obex.c
2 * Routines for OBEX dissection
3 *
4 * Copyright 2010, Allan M. Madsen
5 * Copyright 2013, Michal Labedzki for Tieto Corporation
6 *
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <[email protected]>
9 * Copyright 1998 Gerald Combs
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 */
13
14#include "config.h"
15
16#include <epan/packet.h>
17#include <epan/prefs.h>
18#include <epan/reassemble.h>
19#include <epan/expert.h>
20#include <epan/decode_as.h>
21#include <epan/proto_data.h>
22#include "packet-bluetooth.h"
23#include "packet-btrfcomm.h"
24#include "packet-btl2cap.h"
25#include "packet-btsdp.h"
26#include <wsutil/array.h>
27
28/* Initialize the protocol and registered fields */
29static int proto_obex;
30static int hf_opcode;
31static int hf_response_code;
32static int hf_final_flag;
33static int hf_length;
34static int hf_version;
35static int hf_flags;
36static int hf_constants;
37static int hf_max_pkt_len;
38static int hf_set_path_flags_0;
39static int hf_set_path_flags_1;
40static int hf_headers;
41static int hf_header;
42static int hf_hdr_id;
43static int hf_hdr_id_encoding;
44static int hf_hdr_id_meaning;
45static int hf_hdr_length;
46static int hf_hdr_val_unicode;
47static int hf_hdr_val_byte_seq;
48static int hf_hdr_val_byte;
49static int hf_hdr_val_long;
50static int hf_authentication_parameter;
51static int hf_authentication_parameter_data;
52static int hf_authentication_challenge_tag;
53static int hf_authentication_response_tag;
54static int hf_authentication_key;
55static int hf_authentication_result_key;
56static int hf_authentication_user_id;
57static int hf_authentication_length;
58static int hf_authentication_info_charset;
59static int hf_authentication_info;
60static int hf_authentication_option_reserved;
61static int hf_authentication_option_user_id;
62static int hf_authentication_option_read_only;
63static int hf_application_parameter;
64static int hf_application_parameter_id;
65static int hf_application_parameter_length;
66static int hf_application_parameter_data;
67static int hf_bpp_application_parameter_id;
68static int hf_bpp_application_parameter_data_offset;
69static int hf_bpp_application_parameter_data_count;
70static int hf_bpp_application_parameter_data_job_id;
71static int hf_bpp_application_parameter_data_file_size;
72static int hf_bip_application_parameter_id;
73static int hf_bip_application_parameter_data_number_of_returned_handles;
74static int hf_bip_application_parameter_data_list_start_offset;
75static int hf_bip_application_parameter_data_latest_captured_images;
76static int hf_bip_application_parameter_data_partial_file_length;
77static int hf_bip_application_parameter_data_partial_file_start_offset;
78static int hf_bip_application_parameter_data_total_file_size;
79static int hf_bip_application_parameter_data_end_flag;
80static int hf_bip_application_parameter_data_remote_display;
81static int hf_bip_application_parameter_data_service_id;
82static int hf_bip_application_parameter_data_store_flag;
83static int hf_pbap_application_parameter_id;
84static int hf_pbap_application_parameter_data_order;
85static int hf_pbap_application_parameter_data_search_value;
86static int hf_pbap_application_parameter_data_search_attribute;
87static int hf_pbap_application_parameter_data_max_list_count;
88static int hf_pbap_application_parameter_data_list_start_offset;
89static int hf_pbap_application_parameter_data_filter;
90static int hf_pbap_application_parameter_vcard_selector;
91static int hf_pbap_application_parameter_data_filter_version;
92static int hf_pbap_application_parameter_data_filter_fn;
93static int hf_pbap_application_parameter_data_filter_n;
94static int hf_pbap_application_parameter_data_filter_photo;
95static int hf_pbap_application_parameter_data_filter_birthday;
96static int hf_pbap_application_parameter_data_filter_adr;
97static int hf_pbap_application_parameter_data_filter_label;
98static int hf_pbap_application_parameter_data_filter_tel;
99static int hf_pbap_application_parameter_data_filter_email;
100static int hf_pbap_application_parameter_data_filter_mailer;
101static int hf_pbap_application_parameter_data_filter_time_zone;
102static int hf_pbap_application_parameter_data_filter_geographic_position;
103static int hf_pbap_application_parameter_data_filter_title;
104static int hf_pbap_application_parameter_data_filter_role;
105static int hf_pbap_application_parameter_data_filter_logo;
106static int hf_pbap_application_parameter_data_filter_agent;
107static int hf_pbap_application_parameter_data_filter_name_of_organization;
108static int hf_pbap_application_parameter_data_filter_comments;
109static int hf_pbap_application_parameter_data_filter_revision;
110static int hf_pbap_application_parameter_data_filter_pronunciation_of_name;
111static int hf_pbap_application_parameter_data_filter_url;
112static int hf_pbap_application_parameter_data_filter_uid;
113static int hf_pbap_application_parameter_data_filter_key;
114static int hf_pbap_application_parameter_data_filter_nickname;
115static int hf_pbap_application_parameter_data_filter_categories;
116static int hf_pbap_application_parameter_data_filter_product_id;
117static int hf_pbap_application_parameter_data_filter_class;
118static int hf_pbap_application_parameter_data_filter_sort_string;
119static int hf_pbap_application_parameter_data_filter_timestamp;
120static int hf_pbap_application_parameter_data_filter_reserved_29_31;
121static int hf_pbap_application_parameter_data_filter_reserved_32_38;
122static int hf_pbap_application_parameter_data_filter_proprietary_filter;
123static int hf_pbap_application_parameter_data_filter_reserved_for_proprietary_filter_usage;
124static int hf_pbap_application_parameter_data_format;
125static int hf_pbap_application_parameter_data_phonebook_size;
126static int hf_pbap_application_parameter_data_new_missed_calls;
127static int hf_pbap_application_parameter_data_primary_version_counter;
128static int hf_pbap_application_parameter_data_secondary_version_counter;
129static int hf_pbap_application_parameter_data_database_identifier;
130static int hf_pbap_application_parameter_data_vcard_selector_operator;
131static int hf_pbap_application_parameter_data_reset_new_missed_calls;
132static int hf_pbap_application_parameter_data_supported_features;
133static int hf_pbap_application_parameter_data_supported_features_reserved;
134static int hf_pbap_application_parameter_data_supported_features_download;
135static int hf_pbap_application_parameter_data_supported_features_browsing;
136static int hf_pbap_application_parameter_data_supported_features_database_identifier;
137static int hf_pbap_application_parameter_data_supported_features_folder_version_counters;
138static int hf_pbap_application_parameter_data_supported_features_vcard_selecting;
139static int hf_pbap_application_parameter_data_supported_features_enhanced_missed_calls;
140static int hf_pbap_application_parameter_data_supported_features_x_bt_uci_vcard_property;
141static int hf_pbap_application_parameter_data_supported_features_x_bt_uid_vcard_property;
142static int hf_pbap_application_parameter_data_supported_features_contact_referencing;
143static int hf_pbap_application_parameter_data_supported_features_default_contact_image_format;
144static int hf_map_application_parameter_id;
145static int hf_map_application_parameter_data_max_list_count;
146static int hf_map_application_parameter_data_start_offset;
147static int hf_map_application_parameter_data_filter_message_type_reserved;
148static int hf_map_application_parameter_data_filter_message_type_mms;
149static int hf_map_application_parameter_data_filter_message_type_email;
150static int hf_map_application_parameter_data_filter_message_type_sms_cdma;
151static int hf_map_application_parameter_data_filter_message_type_sms_gsm;
152static int hf_map_application_parameter_data_filter_period_begin;
153static int hf_map_application_parameter_data_filter_period_end;
154static int hf_map_application_parameter_data_filter_read_status_reserved_6;
155static int hf_map_application_parameter_data_filter_read_status_get_read;
156static int hf_map_application_parameter_data_filter_read_status_get_unread;
157static int hf_map_application_parameter_data_filter_recipient;
158static int hf_map_application_parameter_data_filter_originator;
159static int hf_map_application_parameter_data_filter_priority_reserved_6;
160static int hf_map_application_parameter_data_filter_priority_get_high;
161static int hf_map_application_parameter_data_filter_priority_non_high;
162static int hf_map_application_parameter_data_reserved_7;
163static int hf_map_application_parameter_data_attachment;
164static int hf_map_application_parameter_data_transparent;
165static int hf_map_application_parameter_data_retry;
166static int hf_map_application_parameter_data_new_message;
167static int hf_map_application_parameter_data_notification_status;
168static int hf_map_application_parameter_data_mas_instance_id;
169static int hf_map_application_parameter_data_parameter_mask_reserved;
170static int hf_map_application_parameter_data_parameter_mask_reply_to_addressing;
171static int hf_map_application_parameter_data_parameter_mask_protected;
172static int hf_map_application_parameter_data_parameter_mask_sent;
173static int hf_map_application_parameter_data_parameter_mask_read;
174static int hf_map_application_parameter_data_parameter_mask_priority;
175static int hf_map_application_parameter_data_parameter_mask_attachment_size;
176static int hf_map_application_parameter_data_parameter_mask_text;
177static int hf_map_application_parameter_data_parameter_mask_reception_status;
178static int hf_map_application_parameter_data_parameter_mask_size;
179static int hf_map_application_parameter_data_parameter_mask_type;
180static int hf_map_application_parameter_data_parameter_mask_recipient_addressing;
181static int hf_map_application_parameter_data_parameter_mask_recipient_name;
182static int hf_map_application_parameter_data_parameter_mask_sender_addressing;
183static int hf_map_application_parameter_data_parameter_mask_sender_name;
184static int hf_map_application_parameter_data_parameter_mask_datetime;
185static int hf_map_application_parameter_data_parameter_mask_subject;
186static int hf_map_application_parameter_data_folder_listing_size;
187static int hf_map_application_parameter_data_messages_listing_size;
188static int hf_map_application_parameter_data_subject_length;
189static int hf_map_application_parameter_data_charset;
190static int hf_map_application_parameter_data_fraction_request;
191static int hf_map_application_parameter_data_fraction_deliver;
192static int hf_map_application_parameter_data_status_indicator;
193static int hf_map_application_parameter_data_status_value;
194static int hf_map_application_parameter_data_mse_time;
195static int hf_gpp_application_parameter_id;
196static int hf_gpp_application_parameter_data_max_list_count;
197static int hf_gpp_application_parameter_data_list_start_offset;
198static int hf_gpp_application_parameter_data_reserved_7;
199static int hf_gpp_application_parameter_data_notification_status;
200static int hf_gpp_application_parameter_data_instance_id;
201static int hf_gpp_application_parameter_data_listing_size;
202static int hf_ctn_application_parameter_id;
203static int hf_ctn_application_parameter_data_acoustic_alarm_status;
204static int hf_ctn_application_parameter_data_attachment;
205static int hf_ctn_application_parameter_data_send;
206static int hf_ctn_application_parameter_data_filter_period_begin;
207static int hf_ctn_application_parameter_data_filter_period_end;
208static int hf_ctn_application_parameter_data_parameter_mask;
209static int hf_ctn_application_parameter_data_parameter_mask_reserved;
210static int hf_ctn_application_parameter_data_parameter_mask_recurrent;
211static int hf_ctn_application_parameter_data_parameter_mask_send_status;
212static int hf_ctn_application_parameter_data_parameter_mask_alarm_status;
213static int hf_ctn_application_parameter_data_parameter_mask_pstatus;
214static int hf_ctn_application_parameter_data_parameter_mask_priority;
215static int hf_ctn_application_parameter_data_parameter_mask_originator_address;
216static int hf_ctn_application_parameter_data_parameter_mask_originator_name;
217static int hf_ctn_application_parameter_data_parameter_mask_end_time;
218static int hf_ctn_application_parameter_data_parameter_mask_summary;
219static int hf_ctn_application_parameter_data_parameter_mask_attachment;
220static int hf_ctn_application_parameter_data_status_indicator;
221static int hf_ctn_application_parameter_data_status_value;
222static int hf_ctn_application_parameter_data_postpone_val;
223static int hf_ctn_application_parameter_data_email_uri;
224static int hf_ctn_application_parameter_data_cse_time;
225static int hf_ctn_application_parameter_data_recurrent;
226static int hf_ctn_application_parameter_data_attach_id;
227static int hf_ctn_application_parameter_data_last_update;
228static int hf_profile;
229static int hf_type;
230static int hf_object_class;
231static int hf_time_iso8601;
232static int hf_wan_uuid;
233static int hf_hdr_val_action;
234static int hf_hdr_val_single_response_mode;
235static int hf_hdr_val_single_response_mode_parameter;
236static int hf_session_parameter;
237static int hf_session_parameter_tag;
238static int hf_session_parameter_length;
239static int hf_session_parameter_data;
240static int hf_session_parameter_nonce;
241static int hf_session_parameter_session_id;
242static int hf_session_parameter_next_sequence_number;
243static int hf_session_parameter_timeout;
244static int hf_session_parameter_opcode;
245static int hf_sender_bd_addr;
246static int hf_count;
247static int hf_data_length;
248static int hf_connection_id;
249static int hf_name;
250static int hf_current_path;
251static int hf_request_in_frame;
252static int hf_response_in_frame;
253
254static int * const hfx_hdr_id[] = {
255 &hf_hdr_id_encoding,
256 &hf_hdr_id_meaning,
257 NULL((void*)0)
258};
259
260static int * const hfx_pbap_application_parameter_data_filter_1[] = {
261 &hf_pbap_application_parameter_data_filter_reserved_32_38,
262 &hf_pbap_application_parameter_data_filter_proprietary_filter,
263 &hf_pbap_application_parameter_data_filter_reserved_for_proprietary_filter_usage,
264 NULL((void*)0)
265};
266
267static int * const hfx_pbap_application_parameter_data_filter_0[] = {
268 &hf_pbap_application_parameter_data_filter_version,
269 &hf_pbap_application_parameter_data_filter_fn,
270 &hf_pbap_application_parameter_data_filter_n,
271 &hf_pbap_application_parameter_data_filter_photo,
272 &hf_pbap_application_parameter_data_filter_birthday,
273 &hf_pbap_application_parameter_data_filter_adr,
274 &hf_pbap_application_parameter_data_filter_label,
275 &hf_pbap_application_parameter_data_filter_tel,
276 &hf_pbap_application_parameter_data_filter_email,
277 &hf_pbap_application_parameter_data_filter_mailer,
278 &hf_pbap_application_parameter_data_filter_time_zone,
279 &hf_pbap_application_parameter_data_filter_geographic_position,
280 &hf_pbap_application_parameter_data_filter_title,
281 &hf_pbap_application_parameter_data_filter_role,
282 &hf_pbap_application_parameter_data_filter_logo,
283 &hf_pbap_application_parameter_data_filter_agent,
284 &hf_pbap_application_parameter_data_filter_name_of_organization,
285 &hf_pbap_application_parameter_data_filter_comments,
286 &hf_pbap_application_parameter_data_filter_revision,
287 &hf_pbap_application_parameter_data_filter_pronunciation_of_name,
288 &hf_pbap_application_parameter_data_filter_url,
289 &hf_pbap_application_parameter_data_filter_uid,
290 &hf_pbap_application_parameter_data_filter_key,
291 &hf_pbap_application_parameter_data_filter_nickname,
292 &hf_pbap_application_parameter_data_filter_categories,
293 &hf_pbap_application_parameter_data_filter_product_id,
294 &hf_pbap_application_parameter_data_filter_class,
295 &hf_pbap_application_parameter_data_filter_sort_string,
296 &hf_pbap_application_parameter_data_filter_timestamp,
297 &hf_pbap_application_parameter_data_filter_reserved_29_31,
298 NULL((void*)0)
299};
300
301static int * const hfx_pbap_application_parameter_data_supported_features[] = {
302 &hf_pbap_application_parameter_data_supported_features_reserved,
303 &hf_pbap_application_parameter_data_supported_features_default_contact_image_format,
304 &hf_pbap_application_parameter_data_supported_features_contact_referencing,
305 &hf_pbap_application_parameter_data_supported_features_x_bt_uid_vcard_property,
306 &hf_pbap_application_parameter_data_supported_features_x_bt_uci_vcard_property,
307 &hf_pbap_application_parameter_data_supported_features_enhanced_missed_calls,
308 &hf_pbap_application_parameter_data_supported_features_vcard_selecting,
309 &hf_pbap_application_parameter_data_supported_features_folder_version_counters,
310 &hf_pbap_application_parameter_data_supported_features_database_identifier,
311 &hf_pbap_application_parameter_data_supported_features_browsing,
312 &hf_pbap_application_parameter_data_supported_features_download,
313 NULL((void*)0)
314};
315
316static int * const hfx_ctn_application_parameter_data_parameter_mask[] = {
317 &hf_ctn_application_parameter_data_parameter_mask_reserved,
318 &hf_ctn_application_parameter_data_parameter_mask_recurrent,
319 &hf_ctn_application_parameter_data_parameter_mask_send_status,
320 &hf_ctn_application_parameter_data_parameter_mask_alarm_status,
321 &hf_ctn_application_parameter_data_parameter_mask_pstatus,
322 &hf_ctn_application_parameter_data_parameter_mask_priority,
323 &hf_ctn_application_parameter_data_parameter_mask_originator_address,
324 &hf_ctn_application_parameter_data_parameter_mask_originator_name,
325 &hf_ctn_application_parameter_data_parameter_mask_end_time,
326 &hf_ctn_application_parameter_data_parameter_mask_summary,
327 &hf_ctn_application_parameter_data_parameter_mask_attachment,
328 NULL((void*)0)
329};
330
331static expert_field ei_unexpected_data;
332static expert_field ei_application_parameter_length_bad;
333static expert_field ei_decoded_as_profile;
334
335static dissector_table_t obex_profile_table;
336static dissector_table_t media_type_dissector_table;
337
338
339/* ************************************************************************* */
340/* Header values for reassembly */
341/* ************************************************************************* */
342static int hf_obex_fragments;
343static int hf_obex_fragment;
344static int hf_obex_fragment_overlap;
345static int hf_obex_fragment_overlap_conflict;
346static int hf_obex_fragment_multiple_tails;
347static int hf_obex_fragment_too_long_fragment;
348static int hf_obex_fragment_error;
349static int hf_obex_fragment_count;
350static int hf_obex_reassembled_in;
351static int hf_obex_reassembled_length;
352
353static int ett_obex_fragment;
354static int ett_obex_fragments;
355
356static dissector_handle_t obex_handle;
357static dissector_handle_t raw_application_parameters_handle;
358static dissector_handle_t bt_bpp_application_parameters_handle;
359static dissector_handle_t bt_bip_application_parameters_handle;
360static dissector_handle_t bt_gpp_application_parameters_handle;
361static dissector_handle_t bt_ctn_application_parameters_handle;
362static dissector_handle_t bt_map_application_parameters_handle;
363static dissector_handle_t bt_pbap_application_parameters_handle;
364
365static reassembly_table obex_reassembly_table;
366
367static const fragment_items obex_frag_items = {
368 &ett_obex_fragment,
369 &ett_obex_fragments,
370 &hf_obex_fragments,
371 &hf_obex_fragment,
372 &hf_obex_fragment_overlap,
373 &hf_obex_fragment_overlap_conflict,
374 &hf_obex_fragment_multiple_tails,
375 &hf_obex_fragment_too_long_fragment,
376 &hf_obex_fragment_error,
377 &hf_obex_fragment_count,
378 &hf_obex_reassembled_in,
379 &hf_obex_reassembled_length,
380 /* Reassembled data field */
381 NULL((void*)0),
382 "fragments"
383};
384
385/* Initialize the subtree pointers */
386static int ett_obex;
387static int ett_obex_hdrs;
388static int ett_obex_hdr;
389static int ett_obex_hdr_id;
390static int ett_obex_filter;
391static int ett_obex_parameter;
392static int ett_obex_session_parameters;
393static int ett_obex_application_parameters;
394static int ett_obex_authentication_parameters;
395
396static wmem_tree_t *obex_path;
397static wmem_tree_t *obex_profile;
398static wmem_tree_t *obex_last_opcode;
399
400static dissector_handle_t http_handle;
401static dissector_handle_t xml_handle;
402static dissector_handle_t data_handle;
403static dissector_handle_t data_text_lines_handle;
404
405static const char *path_unknown = "?";
406static const char *path_root = "/";
407
408typedef struct _obex_proto_data_t {
409 uint32_t interface_id;
410 uint32_t adapter_id;
411 uint32_t chandle;
412 uint32_t channel;
413} obex_proto_data_t;
414
415typedef struct _ext_value_string {
416 uint8_t value[16];
417 int length;
418 const char *strptr;
419} ext_value_string;
420
421typedef struct _obex_path_data_t {
422 uint32_t interface_id;
423 uint32_t adapter_id;
424 uint32_t chandle;
425 uint32_t channel;
426/* TODO: add OBEX ConnectionId */
427
428 const char *path;
429} obex_path_data_t;
430
431typedef struct _obex_profile_data_t {
432 uint32_t interface_id;
433 uint32_t adapter_id;
434 uint32_t chandle;
435 uint32_t channel;
436/* TODO: add OBEX ConnectionId */
437
438 int profile;
439} obex_profile_data_t;
440
441typedef struct _obex_last_opcode_data_t {
442 uint32_t interface_id;
443 uint32_t adapter_id;
444 uint32_t chandle;
445 uint32_t channel;
446/* TODO: add OBEX ConnectionId */
447 int code;
448
449 bool_Bool final_flag;
450
451 uint32_t request_in_frame;
452 uint32_t response_in_frame;
453
454 union {
455 struct {
456 const char *name;
457 bool_Bool go_up;
458 } set_data;
459 struct {
460 char *type;
461 char *name;
462 } get_put;
463 } data;
464} obex_last_opcode_data_t;
465
466
467#define PROFILE_UNKNOWN0 0
468#define PROFILE_OPP1 1
469#define PROFILE_FTP2 2
470#define PROFILE_SYNCML3 3
471#define PROFILE_PBAP4 4
472#define PROFILE_MAP5 5
473#define PROFILE_BIP6 6
474#define PROFILE_BPP7 7
475#define PROFILE_SYNC8 8
476#define PROFILE_CTN9 9
477#define PROFILE_GPP10 10
478
479#define PROTO_DATA_MEDIA_TYPE0x00 0x00
480#define PROTO_DATA_OBEX_PROFILE0x01 0x01
481
482static const value_string profile_vals[] = {
483 { PROFILE_UNKNOWN0, "Unknown" },
484 { PROFILE_OPP1, "OPP" },
485 { PROFILE_FTP2, "FTP" },
486 { PROFILE_SYNCML3, "SyncML" },
487 { PROFILE_PBAP4, "PBAP" },
488 { PROFILE_MAP5, "MAP" },
489 { PROFILE_BIP6, "BIP" },
490 { PROFILE_BPP7, "BPP" },
491 { PROFILE_SYNC8, "SYNC" },
492 { PROFILE_CTN9, "CTN" },
493 { PROFILE_GPP10, "GPP" },
494 { 0, NULL((void*)0) }
495};
496static value_string_ext(profile_vals_ext) = VALUE_STRING_EXT_INIT(profile_vals){ _try_val_to_str_ext_init, 0, (sizeof (profile_vals) / sizeof
((profile_vals)[0]))-1, profile_vals, "profile_vals", ((void
*)0) }
;
497
498
499static const ext_value_string target_vals[] = {
500 { { 0xF9, 0xEC, 0x7B, 0xC4, 0x95, 0x3C, 0x11, 0xD2, 0x98, 0x4E, 0x52, 0x54, 0x00, 0xDC, 0x9E, 0x09 }, 16, "Folder Browsing" },
501 { { 0x79, 0x61, 0x35, 0xf0, 0xf0, 0xc5, 0x11, 0xd8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 }, 16, "Phone Book Access Profile" },
502 { { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x02, 0xEE, 0x00, 0x00, 0x02 }, 16, "SyncML" },
503 { { 0xE3, 0x3D, 0x95, 0x45, 0x83, 0x74, 0x4A, 0xD7, 0x9E, 0xC5, 0xC1, 0x6B, 0xE3, 0x1E, 0xDE, 0x8E }, 16, "Basic Imaging Profile - Push" },
504 { { 0x8E, 0xE9, 0xB3, 0xD0, 0x46, 0x08, 0x11, 0xD5, 0x84, 0x1A, 0x00, 0x02, 0xA5, 0x32, 0x5B, 0x4E }, 16, "Basic Imaging Profile - Pull" },
505 { { 0x92, 0x35, 0x33, 0x50, 0x46, 0x08, 0x11, 0xD5, 0x84, 0x1A, 0x00, 0x02, 0xA5, 0x32, 0x5B, 0x4E }, 16, "Basic Imaging Profile - Advanced Printing" },
506 { { 0x94, 0x01, 0x26, 0xC0, 0x46, 0x08, 0x11, 0xD5, 0x84, 0x1A, 0x00, 0x02, 0xA5, 0x32, 0x5B, 0x4E }, 16, "Basic Imaging Profile - Automativ Archive" },
507 { { 0x94, 0x7E, 0x74, 0x20, 0x46, 0x08, 0x11, 0xD5, 0x84, 0x1A, 0x00, 0x02, 0xA5, 0x32, 0x5B, 0x4E }, 16, "Basic Imaging Profile - Remote Camera" },
508 { { 0x94, 0xC7, 0xCD, 0x20, 0x46, 0x08, 0x11, 0xD5, 0x84, 0x1A, 0x00, 0x02, 0xA5, 0x32, 0x5B, 0x4E }, 16, "Basic Imaging Profile - Remote Display" },
509 { { 0x8E, 0x61, 0xF9, 0x5D, 0x1A, 0x79, 0x11, 0xD4, 0x8E, 0xA4, 0x00, 0x80, 0x5F, 0x9B, 0x98, 0x34 }, 16, "Basic Imaging Profile- Referenced Objects" },
510 { { 0x8E, 0x61, 0xF9, 0x5D, 0x1A, 0x79, 0x11, 0xD4, 0x8E, 0xA4, 0x00, 0x80, 0x5F, 0x9B, 0x98, 0x34 }, 16, "Basic Imaging Profile - Archived Objects" },
511 { { 0xbb, 0x58, 0x2b, 0x40, 0x42, 0x0c, 0x11, 0xdb, 0xb0, 0xde, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 }, 16, "Message Access Profile - Message Access Service" },
512 { { 0xbb, 0x58, 0x2b, 0x41, 0x42, 0x0c, 0x11, 0xdb, 0xb0, 0xde, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66 }, 16, "Message Access Profile - Message Notification Service" },
513 { { 0x00, 0x00, 0x11, 0x18, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }, 16, "Basic Printing Profile - Direct Printing Service" },
514 { { 0x00, 0x00, 0x11, 0x19, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }, 16, "Basic Printing Profile - Reference Printing Service" },
515 { { 0x00, 0x00, 0x11, 0x20, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }, 16, "Basic Printing Profile - Direct Printing Referenced Objects Service" },
516 { { 0x00, 0x00, 0x11, 0x21, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }, 16, "Basic Printing Profile - Reflected UI" },
517 { { 0x00, 0x00, 0x11, 0x22, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }, 16, "Basic Printing Profile - Basic Printing" },
518 { { 0x00, 0x00, 0x11, 0x23, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB }, 16, "Basic Printing Profile - Printing Status" },
519 { { "IRMC-SYNC" }, 9, "Synchronization Profile" },
520 { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0, NULL((void*)0) },
521};
522
523/* This table must map targets from "target_vals" to profile */
524static const int target_to_profile[] = {
525 PROFILE_FTP2,
526 PROFILE_PBAP4,
527 PROFILE_SYNCML3,
528 PROFILE_BIP6,
529 PROFILE_BIP6,
530 PROFILE_BIP6,
531 PROFILE_BIP6,
532 PROFILE_BIP6,
533 PROFILE_BIP6,
534 PROFILE_BIP6,
535 PROFILE_BIP6,
536 PROFILE_MAP5,
537 PROFILE_MAP5,
538 PROFILE_BPP7,
539 PROFILE_BPP7,
540 PROFILE_BPP7,
541 PROFILE_BPP7,
542 PROFILE_BPP7,
543 PROFILE_BPP7,
544 PROFILE_SYNC8
545};
546
547static const value_string version_vals[] = {
548 { 0x10, "1.0" },
549 { 0x11, "1.1" },
550 { 0x12, "1.2" },
551 { 0x13, "1.3" },
552 { 0x20, "2.0" },
553 { 0x21, "2.1" },
554 { 0, NULL((void*)0) }
555};
556
557static const value_string header_id_encoding_vals[] = {
558 { 0x00, "Null terminated Unicode text, length prefixed with 2 byte Unsigned Integer" },
559 { 0x01, "Byte sequence, length prefixed with 2 byte Unsigned Integer" },
560 { 0x02, "1 byte quantity" },
561 { 0x03, "4 byte quantity (network order)" },
562 { 0, NULL((void*)0) }
563};
564
565#define OBEX_CODE_VALS_CONNECT0x00 0x00
566#define OBEX_CODE_VALS_DISCONNECT0x01 0x01
567#define OBEX_CODE_VALS_PUT0x02 0x02
568#define OBEX_CODE_VALS_GET0x03 0x03
569#define OBEX_CODE_VALS_SET_PATH0x05 0x05
570#define OBEX_CODE_VALS_CONTINUE0x10 0x10
571#define OBEX_CODE_VALS_SUCCESS0x20 0x20
572#define OBEX_CODE_VALS_ABORT0x7F 0x7F
573#define OBEX_CODE_VALS_MASK0x7F 0x7F
574
575static const value_string code_vals[] = {
576 { 0x00, "Connect" },
577 { 0x01, "Disconnect" },
578 { 0x02, "Put" },
579 { 0x03, "Get"},
580 { 0x05, "Set Path" },
581 { 0x06, "Action" },
582 { 0x07, "Session" },
583 { 0x10, "Continue" },
584 { 0x20, "Success" },
585 { 0x21, "Created" },
586 { 0x22, "Accepted" },
587 { 0x23, "Non-Authoritative Information" },
588 { 0x24, "No Content" },
589 { 0x25, "Reset Content" },
590 { 0x26, "Partial Content" },
591 { 0x30, "Multiple Choices" },
592 { 0x31, "Moved Permanently" },
593 { 0x32, "Moved Temporarily" },
594 { 0x33, "See Other" },
595 { 0x34, "Not Modified" },
596 { 0x35, "Use Proxy" },
597 { 0x40, "Bad Request" },
598 { 0x41, "Unauthorised" },
599 { 0x42, "Payment Required" },
600 { 0x43, "Forbidden" },
601 { 0x44, "Not Found" },
602 { 0x45, "Method Not Allowed" },
603 { 0x46, "Not Acceptable" },
604 { 0x47, "Proxy Authentication Required" },
605 { 0x48, "Request Timeout" },
606 { 0x49, "Conflict" },
607 { 0x4a, "Gone" },
608 { 0x4b, "Length Required" },
609 { 0x4c, "Precondition Failed" },
610 { 0x4d, "Requested Entity Too Large" },
611 { 0x4e, "Requested URL Too Large" },
612 { 0x4f, "Unsupported Media Type" },
613 { 0x50, "Internal Server Error" },
614 { 0x51, "Not Implemented" },
615 { 0x52, "Bad Gateway" },
616 { 0x53, "Service Unavailable" },
617 { 0x54, "Gateway Timeout" },
618 { 0x55, "HTTP Version Not Supported" },
619 { 0x60, "Database Full" },
620 { 0x61, "Database Locked" },
621 { OBEX_CODE_VALS_ABORT0x7F, "Abort" },
622 { 0, NULL((void*)0) }
623};
624static value_string_ext(code_vals_ext) = VALUE_STRING_EXT_INIT(code_vals){ _try_val_to_str_ext_init, 0, (sizeof (code_vals) / sizeof (
(code_vals)[0]))-1, code_vals, "code_vals", ((void*)0) }
;
625
626static const value_string header_id_meaning_vals[] = {
627 { 0x00, "Count" },
628 { 0x01, "Name" },
629 { 0x02, "Type" },
630 { 0x03, "Length" },
631 { 0x04, "Time" },
632 { 0x05, "Description" },
633 { 0x06, "Target" },
634 { 0x07, "HTTP" },
635 { 0x08, "Body" },
636 { 0x09, "End Of Body" },
637 { 0x0A, "Who" },
638 { 0x0B, "Connection Id" },
639 { 0x0C, "Application Parameters" },
640 { 0x0D, "Authentication Challenge" },
641 { 0x0E, "Authentication Response" },
642 { 0x0F, "Creator" },
643 { 0x10, "WAN UUID" },
644 { 0x11, "Object Class" },
645 { 0x12, "Session Parameter" },
646 { 0x13, "Session Sequence Number" },
647 { 0x14, "Action" },
648 { 0x15, "Destination Name" },
649 { 0x16, "Permissions" },
650 { 0x17, "Single Response Mode" },
651 { 0x18, "Single Response Mode Parameter" },
652 { 0x30, "User Defined" },
653 { 0x31, "User Defined" },
654 { 0x32, "User Defined" },
655 { 0x33, "User Defined" },
656 { 0x34, "User Defined" },
657 { 0x35, "User Defined" },
658 { 0x36, "User Defined" },
659 { 0x37, "User Defined" },
660 { 0x38, "User Defined" },
661 { 0x39, "User Defined" },
662 { 0x3A, "User Defined" },
663 { 0x3B, "User Defined" },
664 { 0x3C, "User Defined" },
665 { 0x3D, "User Defined" },
666 { 0x3E, "User Defined" },
667 { 0x3F, "User Defined" },
668 { 0, NULL((void*)0) }
669};
670
671static const value_string header_id_vals[] = {
672/* 0x00 - 0x3F - Null terminated Unicode text, length prefixed with 2 byte Unsigned Integer */
673 { 0x01, "Name" },
674 { 0x05, "Description" },
675 { 0x15, "Destination Name" },
676 { 0x30, "User Defined" },
677 { 0x31, "User Defined" },
678 { 0x32, "User Defined" },
679 { 0x33, "User Defined" },
680 { 0x34, "User Defined" },
681 { 0x35, "User Defined" },
682 { 0x36, "User Defined" },
683 { 0x37, "User Defined" },
684 { 0x38, "User Defined" },
685 { 0x39, "User Defined" },
686 { 0x3a, "User Defined" },
687 { 0x3b, "User Defined" },
688 { 0x3c, "User Defined" },
689 { 0x3d, "User Defined" },
690 { 0x3e, "User Defined" },
691 { 0x3f, "User Defined" },
692/* 0x40 - 0x07F - Byte sequence, length prefixed with 2 byte Unsigned Integer */
693 { 0x42, "Type" },
694 { 0x44, "Time (ISO8601)" },
695 { 0x46, "Target" },
696 { 0x47, "HTTP" },
697 { 0x48, "Body" },
698 { 0x49, "End Of Body" },
699 { 0x4a, "Who" },
700 { 0x4c, "Application Parameters" },
701 { 0x4d, "Authentication Challenge" },
702 { 0x4e, "Authentication Response" },
703 { 0x50, "WAN UUID" },
704 { 0x51, "Object Class" },
705 { 0x52, "Session Parameter" },
706/* 0x80 - 0xBF - 1 byte quantity */
707 { 0x93, "Session Sequence Number" },
708 { 0x94, "Action" },
709 { 0x97, "Single Response Mode" },
710 { 0x98, "Single Response Mode Parameter" },
711/* 0xC0 - 0xFF - 4 byte quantity (network order) */
712 { 0xc0, "Count" },
713 { 0xc3, "Length" },
714 { 0xc4, "Time (UNIX)" },
715 { 0xcb, "Connection Id" },
716 { 0xcf, "Creator" },
717 { 0xd6, "Permissions" },
718 { 0, NULL((void*)0) }
719};
720static value_string_ext header_id_vals_ext = VALUE_STRING_EXT_INIT(header_id_vals){ _try_val_to_str_ext_init, 0, (sizeof (header_id_vals) / sizeof
((header_id_vals)[0]))-1, header_id_vals, "header_id_vals", (
(void*)0) }
;
721
722static const value_string map_application_parameters_vals[] = {
723 { 0x01, "Max List Count" },
724 { 0x02, "Start Offset" },
725 { 0x03, "Filter Message Type" },
726 { 0x04, "Filter Period Begin" },
727 { 0x05, "End Filter PeriodEnd" },
728 { 0x06, "Filter Read Status" },
729 { 0x07, "Filter Recipient" },
730 { 0x08, "Filter Originator" },
731 { 0x09, "Filter Priority" },
732 { 0x0A, "Attachment" },
733 { 0x0B, "Transparent" },
734 { 0x0C, "Retry" },
735 { 0x0D, "New Message" },
736 { 0x0E, "Notification Status" },
737 { 0x0F, "MAS Instance ID" },
738 { 0x10, "Parameter Mask" },
739 { 0x11, "Folder Listing Size" },
740 { 0x12, "Messages Listing Size" },
741 { 0x13, "Subject Length" },
742 { 0x14, "Charset" },
743 { 0x15, "Fraction Request" },
744 { 0x16, "Fraction Deliver" },
745 { 0x17, "Status Indicator" },
746 { 0x18, "Status Value" },
747 { 0x19, "MSE Time" },
748 { 0, NULL((void*)0) }
749};
750
751static const value_string pbap_application_parameters_vals[] = {
752 { 0x01, "Order" },
753 { 0x02, "Search Value" },
754 { 0x03, "Search Attribute" },
755 { 0x04, "Max List Count" },
756 { 0x05, "List Start Offset" },
757 { 0x06, "Filter" },
758 { 0x07, "Format" },
759 { 0x08, "Phonebook Size" },
760 { 0x09, "New Missed Calls" },
761 { 0x0A, "Primary Version Counter" },
762 { 0x0B, "Secondary Version Counter" },
763 { 0x0C, "vCard Selector" },
764 { 0x0D, "Database Identifier" },
765 { 0x0E, "vCard Selector Operator" },
766 { 0x0F, "Reset New Missed Calls" },
767 { 0x10, "PBAP Supported Features" },
768 { 0, NULL((void*)0) }
769};
770
771static const value_string bpp_application_parameters_vals[] = {
772 { 0x01, "Offset" },
773 { 0x02, "Count" },
774 { 0x03, "Job ID" },
775 { 0x04, "File Size" },
776 { 0, NULL((void*)0) }
777};
778
779static const value_string bip_application_parameters_vals[] = {
780 { 0x01, "Number of Returned Handles" },
781 { 0x02, "List Start Offset" },
782 { 0x03, "Latest Captures Images" },
783 { 0x04, "Partial File Length" },
784 { 0x05, "Partial File Start Offset" },
785 { 0x06, "Total File Size" },
786 { 0x07, "End Flag" },
787 { 0x08, "Remote Display" },
788 { 0x09, "Service ID" },
789 { 0x0A, "Store Flag" },
790 { 0, NULL((void*)0) }
791};
792
793static const value_string gpp_application_parameters_vals[] = {
794 { 0x41, "Max List Count" },
795 { 0x42, "List Start Offset" },
796 { 0x43, "Notification Status" },
797 { 0x44, "Instance ID" },
798 { 0x46, "Listing Size" },
799 { 0, NULL((void*)0) }
800};
801
802static const value_string ctn_application_parameters_vals[] = {
803 { 0x01, "Acoustic Alarm Status" },
804 { 0x02, "Attachment" },
805 { 0x03, "Send" },
806 { 0x04, "Filter Period Begin" },
807 { 0x05, "Filter Period End" },
808 { 0x06, "Parameter Mask" },
809 { 0x07, "Status Indicator" },
810 { 0x08, "Status Value" },
811 { 0x09, "Postpone Val" },
812 { 0x0A, "Email URI" },
813 { 0x0B, "CSE Time" },
814 { 0x0C, "Recurrent" },
815 { 0x0D, "Attach ID" },
816 { 0x0E, "Last Update" },
817 { 0x41, "Max List Count" },
818 { 0x42, "List Start Offset" },
819 { 0x43, "Notification Status" },
820 { 0x44, "Instance ID" },
821 { 0x46, "Listing Size" },
822 { 0, NULL((void*)0) }
823};
824
825static const value_string bip_remote_display_vals[] = {
826 { 0x01, "Next Image" },
827 { 0x02, "Previous Image" },
828 { 0x03, "Select Image" },
829 { 0x04, "Current Image" },
830 { 0, NULL((void*)0) }
831};
832
833static const value_string pbap_order_vals[] = {
834 { 0x00, "Indexed" },
835 { 0x01, "Alphanumeric" },
836 { 0x02, "Phonetic" },
837 { 0, NULL((void*)0) }
838};
839
840static const value_string pbap_format_vals[] = {
841 { 0x00, "2.1" },
842 { 0x01, "3.0" },
843 { 0, NULL((void*)0) }
844};
845
846static const value_string pbap_search_attribute_vals[] = {
847 { 0x00, "Name" },
848 { 0x01, "Number" },
849 { 0x02, "Sound" },
850 { 0, NULL((void*)0) }
851};
852
853static const value_string map_charset_vals[] = {
854 { 0x00, "Native" },
855 { 0x01, "UTF-8" },
856 { 0, NULL((void*)0) }
857};
858
859static const value_string map_fraction_request_vals[] = {
860 { 0x00, "First" },
861 { 0x01, "Next" },
862 { 0, NULL((void*)0) }
863};
864
865static const value_string map_fraction_deliver_vals[] = {
866 { 0x00, "More" },
867 { 0x01, "Last" },
868 { 0, NULL((void*)0) }
869};
870
871static const value_string map_status_indicator_vals[] = {
872 { 0x00, "Read Status" },
873 { 0x01, "Deleted Status" },
874 { 0, NULL((void*)0) }
875};
876
877static const value_string authentication_challenge_tag_vals[] = {
878 { 0x00, "Key" },
879 { 0x01, "Options" },
880 { 0x02, "Info" },
881 { 0, NULL((void*)0) }
882};
883
884static const value_string authentication_response_tag_vals[] = {
885 { 0x00, "Result Key" },
886 { 0x01, "User ID" },
887 { 0x02, "Key" },
888 { 0, NULL((void*)0) }
889};
890
891static const value_string info_charset_vals[] = {
892 { 0x00, "ASCII" },
893 { 0xFF, "Unicode" },
894 { 0, NULL((void*)0) }
895};
896
897static const value_string action_vals[] = {
898 { 0x00, "Copy" },
899 { 0x01, "Move" },
900 { 0x02, "Set Permission" },
901 { 0, NULL((void*)0) }
902};
903
904static const value_string single_response_mode_vals[] = {
905 { 0x00, "Disable" },
906 { 0x01, "Enable" },
907 { 0x02, "Indicate" },
908 { 0, NULL((void*)0) }
909};
910
911static const value_string single_response_mode_parameter_vals[] = {
912 { 0x00, "Next" },
913 { 0x01, "Wait" },
914 { 0x02, "Next and Wait" },
915 { 0, NULL((void*)0) }
916};
917
918static const value_string session_tag_vals[] = {
919 { 0x00, "Device Address" },
920 { 0x01, "Nonce" },
921 { 0x02, "Session ID" },
922 { 0x03, "Next Sequence Number" },
923 { 0x04, "Timeout" },
924 { 0x05, "Session Opcode" },
925 { 0, NULL((void*)0) }
926};
927
928static const value_string session_opcode_vals[] = {
929 { 0x00, "Create Session" },
930 { 0x01, "Close Session" },
931 { 0x02, "Suspend Session" },
932 { 0x03, "Resume Session" },
933 { 0x04, "Set Timeout" },
934 { 0, NULL((void*)0) }
935};
936
937static const value_string pbap_application_parameter_data_vcard_selector_operator_vals[] = {
938 { 0x00, "Or" },
939 { 0x01, "And" },
940 { 0, NULL((void*)0) }
941};
942
943static const value_string pbap_application_parameter_data_reset_new_missed_calls_vals[] = {
944 { 0x01, "Reset" },
945 { 0, NULL((void*)0) }
946};
947
948static const value_string off_on_vals[] = {
949 { 0x00, "Off" },
950 { 0x01, "On" },
951 { 0, NULL((void*)0) }
952};
953
954static const value_string no_yes_vals[] = {
955 { 0x00, "No" },
956 { 0x01, "Yes" },
957 { 0, NULL((void*)0) }
958};
959
960static const value_string ctn_application_parameter_data_attachment_vals[] = {
961 { 0x00, "On" },
962 { 0x01, "Off" },
963 { 0x02, "Selected" },
964 { 0, NULL((void*)0) }
965};
966
967static const value_string ctn_application_parameter_data_status_indicator_vals[] = {
968 { 0x00, "pStatus" },
969 { 0x01, "Alarm Status" },
970 { 0x02, "Send Status" },
971 { 0x03, "Deleted Status" },
972 { 0, NULL((void*)0) }
973};
974
975static const value_string ctn_application_parameter_data_status_value_vals[] = {
976 { 0x00, "No" },
977 { 0x01, "Yes" },
978 { 0x02, "Postpone" },
979 { 0x03, "Tentative" },
980 { 0x04, "Needs-action" },
981 { 0x05, "Accepted" },
982 { 0x06, "Declined" },
983 { 0x07, "Delegated" },
984 { 0x08, "Completed" },
985 { 0x09, "In-progress" },
986 { 0, NULL((void*)0) }
987};
988
989static value_string_ext map_application_parameters_vals_ext = VALUE_STRING_EXT_INIT(map_application_parameters_vals){ _try_val_to_str_ext_init, 0, (sizeof (map_application_parameters_vals
) / sizeof ((map_application_parameters_vals)[0]))-1, map_application_parameters_vals
, "map_application_parameters_vals", ((void*)0) }
;
990static value_string_ext pbap_application_parameters_vals_ext = VALUE_STRING_EXT_INIT(pbap_application_parameters_vals){ _try_val_to_str_ext_init, 0, (sizeof (pbap_application_parameters_vals
) / sizeof ((pbap_application_parameters_vals)[0]))-1, pbap_application_parameters_vals
, "pbap_application_parameters_vals", ((void*)0) }
;
991static value_string_ext bpp_application_parameters_vals_ext = VALUE_STRING_EXT_INIT(bpp_application_parameters_vals){ _try_val_to_str_ext_init, 0, (sizeof (bpp_application_parameters_vals
) / sizeof ((bpp_application_parameters_vals)[0]))-1, bpp_application_parameters_vals
, "bpp_application_parameters_vals", ((void*)0) }
;
992static value_string_ext bip_application_parameters_vals_ext = VALUE_STRING_EXT_INIT(bip_application_parameters_vals){ _try_val_to_str_ext_init, 0, (sizeof (bip_application_parameters_vals
) / sizeof ((bip_application_parameters_vals)[0]))-1, bip_application_parameters_vals
, "bip_application_parameters_vals", ((void*)0) }
;
993
994void proto_register_obex(void);
995void proto_reg_handoff_obex(void);
996
997static void
998save_path(packet_info *pinfo, const char *current_path, const char *name,
999 bool_Bool go_up, obex_proto_data_t *obex_proto_data)
1000{
1001
1002/* On Connect response sets "/"
1003 On SetPath sets what is needed
1004 */
1005 if (!pinfo->fd->visited
41.1
Field 'visited' is 0
) {
42
Taking true branch
1006 obex_path_data_t *obex_path_data;
1007 wmem_tree_key_t key[6];
1008 uint32_t frame_number;
1009 const char *path = path_unknown;
1010
1011 frame_number = pinfo->num;
1012
1013 key[0].length = 1;
1014 key[0].key = &obex_proto_data->interface_id;
1015 key[1].length = 1;
1016 key[1].key = &obex_proto_data->adapter_id;
1017 key[2].length = 1;
1018 key[2].key = &obex_proto_data->chandle;
1019 key[3].length = 1;
1020 key[3].key = &obex_proto_data->channel;
1021 key[4].length = 1;
1022 key[4].key = &frame_number;
1023 key[5].length = 0;
1024 key[5].key = NULL((void*)0);
1025
1026 obex_path_data = wmem_new(wmem_file_scope(), obex_path_data_t)((obex_path_data_t*)wmem_alloc((wmem_file_scope()), sizeof(obex_path_data_t
)))
;
1027 obex_path_data->interface_id = obex_proto_data->interface_id;
1028 obex_path_data->adapter_id = obex_proto_data->adapter_id;
1029 obex_path_data->chandle = obex_proto_data->chandle;
1030 obex_path_data->channel = obex_proto_data->channel;
1031
1032 if (go_up == true1) {
43
Assuming 'go_up' is equal to true
1033 if (current_path != path_unknown && current_path != path_root) {
44
Assuming 'current_path' is not equal to 'path_unknown'
45
Assuming 'current_path' is not equal to 'path_root'
46
Taking true branch
1034 char *i_path;
1035
1036 i_path = g_strrstr(current_path, "/");
1037 if (!i_path) {
47
Assuming 'i_path' is non-null
48
Taking false branch
1038 current_path = path_unknown;
1039 } else {
1040 if (i_path
48.1
'i_path' is not equal to 'current_path'
== current_path)
49
Taking false branch
1041 path = current_path = path_root;
1042 else
1043 path = current_path = wmem_strndup(wmem_epan_scope(), current_path, i_path - current_path - 1);
50
Subtraction of a non-null pointer (from variable 'i_path') and a null pointer (from variable 'current_path') results in undefined behavior
1044 }
1045 }
1046 }
1047
1048 if (name && *name == '\0')
1049 path = path_root;
1050 else if (name && current_path == path_root)
1051 path = wmem_strdup_printf(wmem_file_scope(), "/%s", name);
1052 else if (name)
1053 path = wmem_strdup_printf(wmem_file_scope(), "%s/%s", current_path, name);
1054
1055 obex_path_data->path = path;
1056
1057 wmem_tree_insert32_array(obex_path, key, obex_path_data);
1058 }
1059}
1060
1061static void media_type_prompt(packet_info *pinfo, char* result)
1062{
1063 char *value_data;
1064
1065 value_data = (char *) p_get_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_MEDIA_TYPE0x00);
1066 if (value_data)
1067 snprintf(result, MAX_DECODE_AS_PROMPT_LEN200, "Media Type %s as", (char *) value_data);
1068 else
1069 snprintf(result, MAX_DECODE_AS_PROMPT_LEN200, "Unknown Media Type");
1070}
1071
1072static void *media_type_value(packet_info *pinfo)
1073{
1074 char *value_data;
1075
1076 value_data = (char *) p_get_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_MEDIA_TYPE0x00);
1077
1078 if (value_data)
1079 return (void *) value_data;
1080
1081 return NULL((void*)0);
1082}
1083
1084static void obex_profile_prompt(packet_info *pinfo, char* result)
1085{
1086 uint8_t *value_data;
1087
1088 value_data = (uint8_t *) p_get_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_OBEX_PROFILE0x01);
1089 if (value_data)
1090 snprintf(result, MAX_DECODE_AS_PROMPT_LEN200, "OBEX Profile 0x%04x as", (unsigned) *value_data);
1091 else
1092 snprintf(result, MAX_DECODE_AS_PROMPT_LEN200, "Unknown OBEX Profile");
1093}
1094
1095static void *obex_profile_value(packet_info *pinfo)
1096{
1097 uint8_t *value_data;
1098
1099 value_data = (uint8_t *) p_get_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_OBEX_PROFILE0x01);
1100
1101 if (value_data)
1102 return GUINT_TO_POINTER((unsigned long)*value_data)((gpointer) (gulong) ((unsigned long)*value_data));
1103
1104 return NULL((void*)0);
1105}
1106
1107static int
1108is_ascii_str(const uint8_t *str, int length)
1109{
1110 int i;
1111
1112 if ((length < 1) || (str[length-1] != '\0'))
1113 return 0;
1114
1115 for(i=0; i<length-1; i++) {
1116 if ((str[i] < 0x20) && (str[i] != 0x0a)) /* not strict ascii */
1117 break;
1118 }
1119
1120 if (i < (length-1))
1121 return 0;
1122
1123 return 1;
1124}
1125
1126static int
1127dissect_obex_application_parameter_raw(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
1128{
1129 proto_item *parameter_item;
1130 proto_tree *parameter_tree;
1131 uint8_t parameter_id;
1132 int offset = 0;
1133 int parameters_length;
1134 int parameter_length;
1135
1136 parameters_length = tvb_reported_length(tvb);
1137
1138 while (parameters_length > 0) {
1139 parameter_id = tvb_get_uint8(tvb, offset);
1140 parameter_item = proto_tree_add_none_format(tree, hf_application_parameter, tvb, offset,
1141 tvb_captured_length_remaining(tvb, offset), "Parameter: 0x%02x", parameter_id);
1142 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_application_parameters);
1143
1144 proto_tree_add_item(parameter_tree, hf_application_parameter_id, tvb, offset,
1145 1, ENC_BIG_ENDIAN0x00000000);
1146 offset += 1;
1147
1148 proto_tree_add_item(parameter_tree, hf_application_parameter_length, tvb, offset,
1149 1, ENC_BIG_ENDIAN0x00000000);
1150 parameter_length = tvb_get_uint8(tvb, offset);
1151 proto_item_set_len(parameter_item, parameter_length + 2);
1152 offset += 1;
1153
1154 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset,
1155 parameter_length, ENC_NA0x00000000);
1156
1157 parameters_length -= 2 + parameter_length;
1158 offset += parameter_length;
1159 }
1160
1161 return offset;
1162}
1163
1164static int
1165dissect_obex_application_parameter_bt_bpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
1166{
1167 proto_item *item;
1168 proto_item *parameter_item;
1169 proto_tree *parameter_tree;
1170 uint8_t parameter_id;
1171 int offset = 0;
1172 int parameters_length;
1173 int parameter_length;
1174
1175 parameters_length = tvb_reported_length(tvb);
1176
1177 while (parameters_length > 0) {
1178 parameter_id = tvb_get_uint8(tvb, offset);
1179 parameter_length = tvb_get_uint8(tvb, offset + 1);
1180
1181 parameter_item = proto_tree_add_none_format(tree, hf_application_parameter, tvb, offset, parameter_length + 2,
1182 "Parameter: %s", val_to_str_const(parameter_id,
1183 bpp_application_parameters_vals, "Unknown"));
1184 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_application_parameters);
1185
1186 proto_tree_add_item(parameter_tree, hf_bpp_application_parameter_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1187 offset += 1;
1188
1189 item = proto_tree_add_item(parameter_tree, hf_application_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1190 offset += 1;
1191
1192 if (parameter_length != 4) {
1193 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1194 expert_add_info_format(pinfo, item, &ei_application_parameter_length_bad,
1195 "According to the specification this parameter length should be 4, but there is %i", parameter_length);
1196 } else switch (parameter_id) {
1197 case 0x01:
1198 proto_tree_add_item(parameter_tree, hf_bpp_application_parameter_data_offset, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
1199 break;
1200 case 0x02:
1201 proto_tree_add_item(parameter_tree, hf_bpp_application_parameter_data_count, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
1202 break;
1203 case 0x03:
1204 proto_tree_add_item(parameter_tree, hf_bpp_application_parameter_data_job_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
1205 break;
1206 case 0x04:
1207 proto_tree_add_item(parameter_tree, hf_bpp_application_parameter_data_file_size, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
1208 break;
1209 default:
1210 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1211 }
1212
1213 parameters_length -= 2 + parameter_length;
1214 offset += parameter_length;
1215 }
1216
1217 return offset;
1218}
1219
1220static int
1221dissect_obex_application_parameter_bt_bip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
1222{
1223 proto_item *item;
1224 proto_item *parameter_item;
1225 proto_tree *parameter_tree;
1226 uint8_t parameter_id;
1227 int offset = 0;
1228 int parameters_length;
1229 int parameter_length;
1230 static const int required_length_map[] = {0, 2, 2, 1, 4, 4, 4, 1, 1, 16, 1};
1231
1232 parameters_length = tvb_reported_length(tvb);
1233
1234 while (parameters_length > 0) {
1235 parameter_id = tvb_get_uint8(tvb, offset);
1236 parameter_length = tvb_get_uint8(tvb, offset + 1);
1237
1238 parameter_item = proto_tree_add_none_format(tree, hf_application_parameter, tvb, offset, parameter_length + 2,
1239 "Parameter: %s", val_to_str_const(parameter_id,
1240 bip_application_parameters_vals, "Unknown"));
1241 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_application_parameters);
1242
1243 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1244 offset += 1;
1245
1246 item = proto_tree_add_item(parameter_tree, hf_application_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1247 offset += 1;
1248
1249 if (parameter_id < array_length(required_length_map)(sizeof (required_length_map) / sizeof (required_length_map)[
0])
&&
1250 required_length_map[parameter_id] != parameter_length) {
1251 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1252 expert_add_info_format(pinfo, item, &ei_application_parameter_length_bad,
1253 "According to the specification this parameter length should be %i, but there is %i",
1254 required_length_map[parameter_id], parameter_length);
1255 } else switch (parameter_id) {
1256 case 0x01:
1257 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_number_of_returned_handles, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1258 break;
1259 case 0x02:
1260 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_list_start_offset, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1261 break;
1262 case 0x03:
1263 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_latest_captured_images, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1264 break;
1265 case 0x04:
1266 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_partial_file_length, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1267 break;
1268 case 0x05:
1269 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_partial_file_start_offset, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1270 break;
1271 case 0x06:
1272 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_total_file_size, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1273 break;
1274 case 0x07:
1275 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_end_flag, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1276 break;
1277 case 0x08:
1278 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_remote_display, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1279 break;
1280 case 0x09:
1281 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_service_id, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1282 break;
1283 case 0x0A:
1284 proto_tree_add_item(parameter_tree, hf_bip_application_parameter_data_store_flag, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1285 break;
1286 default:
1287 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1288 }
1289
1290 parameters_length -= 2 + parameter_length;
1291 offset += parameter_length;
1292 }
1293
1294 return offset;
1295}
1296
1297static int
1298dissect_obex_application_parameter_bt_pbap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
1299{
1300 proto_item *item;
1301 proto_item *parameter_item;
1302 proto_tree *parameter_tree;
1303 uint8_t parameter_id;
1304 int offset = 0;
1305 int parameters_length;
1306 int parameter_length;
1307 static const int required_length_map[] = {0, 1, -1, 1, 2, 2, 8, 1, 2, 1, 16, 16, 8, 16, 1, 1};
1308
1309 parameters_length = tvb_reported_length(tvb);
1310
1311 while (parameters_length > 0) {
1312 parameter_id = tvb_get_uint8(tvb, offset);
1313 parameter_length = tvb_get_uint8(tvb, offset + 1);
1314
1315 parameter_item = proto_tree_add_none_format(tree, hf_application_parameter, tvb, offset, parameter_length + 2,
1316 "Parameter: %s", val_to_str_const(parameter_id,
1317 pbap_application_parameters_vals, "Unknown"));
1318 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_application_parameters);
1319
1320 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1321 offset += 1;
1322
1323 item = proto_tree_add_item(parameter_tree, hf_application_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1324 offset += 1;
1325
1326 if (parameter_id < array_length(required_length_map)(sizeof (required_length_map) / sizeof (required_length_map)[
0])
&&
1327 required_length_map[parameter_id] != -1 &&
1328 required_length_map[parameter_id] != parameter_length) {
1329 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1330 expert_add_info_format(pinfo, item, &ei_application_parameter_length_bad,
1331 "According to the specification this parameter length should be %i, but there is %i",
1332 required_length_map[parameter_id], parameter_length);
1333 } else switch (parameter_id) {
1334 case 0x01: /* Order */
1335 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_order, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1336 break;
1337 case 0x02: /* Search Value */
1338 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_search_value, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1339 break;
1340 case 0x03: /* Search Attribute */
1341 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_search_attribute, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1342 break;
1343 case 0x04: /* Max List Count */
1344 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_max_list_count, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1345 break;
1346 case 0x05: /* List Start Offset */
1347 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_list_start_offset, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1348 break;
1349 case 0x06: /* Filter */
1350 proto_tree_add_bitmask(parameter_tree, tvb, offset + 0, hf_pbap_application_parameter_data_filter, ett_obex_filter, hfx_pbap_application_parameter_data_filter_1, ENC_BIG_ENDIAN0x00000000);
1351 proto_tree_add_bitmask(parameter_tree, tvb, offset + 4, hf_pbap_application_parameter_data_filter, ett_obex_filter, hfx_pbap_application_parameter_data_filter_0, ENC_BIG_ENDIAN0x00000000);
1352 break;
1353 case 0x07: /* Format */
1354 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_format, tvb, offset, 1, ENC_NA0x00000000);
1355 break;
1356 case 0x08: /* Phonebook Size */
1357 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_phonebook_size, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1358 break;
1359 case 0x09: /* New Missed Calls */
1360 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_new_missed_calls, tvb, offset, 1, ENC_NA0x00000000);
1361 break;
1362 case 0x0A: /* Primary Version Counter */
1363 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_primary_version_counter, tvb, offset, 16, ENC_NA0x00000000);
1364 break;
1365 case 0x0B: /* Secondary Version Counter */
1366 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_secondary_version_counter, tvb, offset, 16, ENC_NA0x00000000);
1367 break;
1368 case 0x0C: /* vCard Selector */
1369 proto_tree_add_bitmask(parameter_tree, tvb, offset + 0, hf_pbap_application_parameter_vcard_selector, ett_obex_filter, hfx_pbap_application_parameter_data_filter_1, ENC_BIG_ENDIAN0x00000000);
1370 proto_tree_add_bitmask(parameter_tree, tvb, offset + 4, hf_pbap_application_parameter_vcard_selector, ett_obex_filter, hfx_pbap_application_parameter_data_filter_0, ENC_BIG_ENDIAN0x00000000);
1371 break;
1372 case 0x0D: /* Database Identifier */
1373 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_database_identifier, tvb, offset, 16, ENC_NA0x00000000);
1374 break;
1375 case 0x0E: /* vCard Selector Operator */
1376 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_vcard_selector_operator, tvb, offset, 1, ENC_NA0x00000000);
1377 break;
1378 case 0x0F: /* Reset New Missed Calls */
1379 proto_tree_add_item(parameter_tree, hf_pbap_application_parameter_data_reset_new_missed_calls, tvb, offset, 1, ENC_NA0x00000000);
1380 break;
1381 case 0x10: /* PBAP Supported Features */
1382 proto_tree_add_bitmask(parameter_tree, tvb, offset, hf_pbap_application_parameter_data_supported_features, ett_obex_parameter, hfx_pbap_application_parameter_data_supported_features, ENC_BIG_ENDIAN0x00000000);
1383 break;
1384 default:
1385 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1386 }
1387
1388 parameters_length -= 2 + parameter_length;
1389 offset += parameter_length;
1390 }
1391
1392 return offset;
1393}
1394
1395static int
1396dissect_obex_application_parameter_bt_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
1397{
1398 proto_item *item;
1399 proto_item *parameter_item;
1400 proto_tree *parameter_tree;
1401 uint8_t parameter_id;
1402 int offset = 0;
1403 int parameters_length;
1404 int parameter_length;
1405 static const int required_length_map[] = {0, 2, 2, 1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 1, 1, 1, 1, 1, 1, -1};
1406
1407 parameters_length = tvb_reported_length(tvb);
1408
1409 while (parameters_length > 0) {
1410 parameter_id = tvb_get_uint8(tvb, offset);
1411 parameter_length = tvb_get_uint8(tvb, offset + 1);
1412
1413 parameter_item = proto_tree_add_none_format(tree, hf_application_parameter, tvb, offset, parameter_length + 2,
1414 "Parameter: %s", val_to_str_const(parameter_id,
1415 map_application_parameters_vals, "Unknown"));
1416 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_application_parameters);
1417
1418 proto_tree_add_item(parameter_tree, hf_map_application_parameter_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1419 offset += 1;
1420
1421 item = proto_tree_add_item(parameter_tree, hf_application_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1422 offset += 1;
1423
1424 if (parameter_id < array_length(required_length_map)(sizeof (required_length_map) / sizeof (required_length_map)[
0])
&&
1425 required_length_map[parameter_id] != -1 &&
1426 required_length_map[parameter_id] != parameter_length) {
1427 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1428 expert_add_info_format(pinfo, item, &ei_application_parameter_length_bad,
1429 "According to the specification this parameter length should be %i, but there is %i",
1430 required_length_map[parameter_id], parameter_length);
1431 } else switch (parameter_id) {
1432 case 0x01:
1433 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_max_list_count, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1434 break;
1435 case 0x02:
1436 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_start_offset, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1437 break;
1438 case 0x03:
1439 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_message_type_reserved, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1440 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_message_type_mms, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1441 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_message_type_email, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1442 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_message_type_sms_cdma, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1443 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_message_type_sms_gsm, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1444 break;
1445 case 0x04:
1446 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_period_begin, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1447 break;
1448 case 0x05:
1449 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_period_end, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1450 break;
1451 case 0x06:
1452 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_read_status_reserved_6, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1453 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_read_status_get_read, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1454 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_read_status_get_unread, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1455 break;
1456 case 0x07:
1457 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_recipient, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1458 break;
1459 case 0x08:
1460 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_originator, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1461 break;
1462 case 0x09:
1463 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_priority_reserved_6, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1464 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_priority_get_high, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1465 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_filter_priority_non_high, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1466 break;
1467 case 0x0A:
1468 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1469 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_attachment, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1470 break;
1471 case 0x0B:
1472 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1473 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_transparent, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1474 break;
1475 case 0x0C:
1476 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1477 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_retry, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1478 break;
1479 case 0x0D:
1480 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1481 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_new_message, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1482 break;
1483 case 0x0E:
1484 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1485 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_notification_status, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1486 break;
1487 case 0x0F:
1488 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_mas_instance_id, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1489 break;
1490 case 0x10:
1491 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_reserved, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1492 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_reply_to_addressing, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1493 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_protected, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1494 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_sent, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1495 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_read, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1496 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_priority, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1497 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_attachment_size, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1498 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_text, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1499 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_reception_status, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1500 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_size, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1501 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_type, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1502 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_recipient_addressing, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1503 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_recipient_name, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1504 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_sender_addressing, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1505 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_sender_name, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1506 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_datetime, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1507 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_parameter_mask_subject, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1508
1509 break;
1510 case 0x11:
1511 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_folder_listing_size, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1512 break;
1513 case 0x12:
1514 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_messages_listing_size, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1515 break;
1516 case 0x13:
1517 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_subject_length, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1518 break;
1519 case 0x14:
1520 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1521 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_charset, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1522 break;
1523 case 0x15:
1524 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1525 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_fraction_request, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1526 break;
1527 case 0x16:
1528 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1529 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_fraction_deliver, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1530 break;
1531 case 0x17:
1532 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1533 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_status_indicator, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1534 break;
1535 case 0x18:
1536 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_reserved_7, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1537 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_status_value, tvb, offset, required_length_map[parameter_id], ENC_BIG_ENDIAN0x00000000);
1538 break;
1539 case 0x19:
1540 proto_tree_add_item(parameter_tree, hf_map_application_parameter_data_mse_time, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1541 break;
1542 default:
1543 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1544 }
1545
1546 parameters_length -= 2 + parameter_length;
1547 offset += parameter_length;
1548 }
1549
1550 return offset;
1551}
1552
1553static int
1554dissect_obex_application_parameter_bt_gpp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
1555{
1556 proto_item *item;
1557 proto_item *parameter_item;
1558 proto_tree *parameter_tree;
1559 uint8_t parameter_id;
1560 int offset = 0;
1561 int parameters_length;
1562 int parameter_length;
1563 static const int required_length_map[] = {2, 2, 1, 1, 0, 2};
1564
1565 parameters_length = tvb_reported_length(tvb);
1566
1567 while (parameters_length > 0) {
1568 parameter_id = tvb_get_uint8(tvb, offset);
1569 parameter_length = tvb_get_uint8(tvb, offset + 1);
1570
1571 parameter_item = proto_tree_add_none_format(tree, hf_application_parameter, tvb, offset, parameter_length + 2,
1572 "Parameter: %s", val_to_str_const(parameter_id,
1573 gpp_application_parameters_vals, "Unknown"));
1574 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_application_parameters);
1575
1576 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1577 offset += 1;
1578
1579 item = proto_tree_add_item(parameter_tree, hf_application_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1580 offset += 1;
1581
1582 if (parameter_id >= 0x41 && (uint8_t)(parameter_id - 0x41) < array_length(required_length_map)(sizeof (required_length_map) / sizeof (required_length_map)[
0])
&&
1583 required_length_map[parameter_id - 0x41] != -1 &&
1584 required_length_map[parameter_id - 0x41] != parameter_length) {
1585 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1586 expert_add_info_format(pinfo, item, &ei_application_parameter_length_bad,
1587 "According to the specification this parameter length should be %i, but there is %i",
1588 required_length_map[parameter_id - 0x41], parameter_length);
1589 } else switch (parameter_id) {
1590 case 0x41: /* Max List Count */
1591 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_max_list_count, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1592 break;
1593 case 0x42: /* List Start Offset */
1594 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_list_start_offset, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1595 break;
1596 case 0x43: /* Notification Status */
1597 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_reserved_7, tvb, offset, 1, ENC_NA0x00000000);
1598 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_notification_status, tvb, offset, 1, ENC_NA0x00000000);
1599 break;
1600 case 0x44: /* Instance ID */
1601 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_instance_id, tvb, offset, 1, ENC_NA0x00000000);
1602 break;
1603 case 0x46: /* Listing Size */
1604 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_listing_size, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1605 break;
1606 default:
1607 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1608 }
1609
1610 parameters_length -= 2 + parameter_length;
1611 offset += parameter_length;
1612 }
1613
1614 return offset;
1615}
1616
1617static int
1618dissect_obex_application_parameter_bt_ctn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
1619{
1620 proto_item *item;
1621 proto_item *parameter_item;
1622 proto_tree *parameter_tree;
1623 uint8_t parameter_id;
1624 int offset = 0;
1625 int parameters_length;
1626 int parameter_length;
1627 static const int required_length_map[] = {0, 1, 1, 1, -1, -1, 4, 1, 1, 4, -1, -1, 1, 1, -1};
1628 static const int required_length_map_gpp[] = {2, 2, 1, 1, -1, 2};
1629
1630 parameters_length = tvb_reported_length(tvb);
1631
1632 while (parameters_length > 0) {
1633 parameter_id = tvb_get_uint8(tvb, offset);
1634 parameter_length = tvb_get_uint8(tvb, offset + 1);
1635
1636 parameter_item = proto_tree_add_none_format(tree, hf_application_parameter, tvb, offset, parameter_length + 2,
1637 "Parameter: %s", val_to_str_const(parameter_id,
1638 ctn_application_parameters_vals, "Unknown"));
1639 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_application_parameters);
1640
1641 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1642 offset += 1;
1643
1644 item = proto_tree_add_item(parameter_tree, hf_application_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1645 offset += 1;
1646
1647 if ((parameter_id < 0x41) && (parameter_id < array_length(required_length_map)(sizeof (required_length_map) / sizeof (required_length_map)[
0])
) &&
1648 required_length_map[parameter_id] != -1 &&
1649 required_length_map[parameter_id] != parameter_length) {
1650
1651 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1652 expert_add_info_format(pinfo, item, &ei_application_parameter_length_bad,
1653 "According to the specification this parameter length should be %i, but there is %i",
1654 required_length_map[parameter_id], parameter_length);
1655 } else if ((parameter_id >= 0x41) && ((uint8_t)(parameter_id - 0x41) < array_length(required_length_map_gpp)(sizeof (required_length_map_gpp) / sizeof (required_length_map_gpp
)[0])
) &&
1656 required_length_map[parameter_id - 0x41] != -1 &&
1657 required_length_map[parameter_id - 0x41] != parameter_length) {
1658
1659 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1660 expert_add_info_format(pinfo, item, &ei_application_parameter_length_bad,
1661 "According to the specification this parameter length should be %i, but there is %i",
1662 required_length_map_gpp[parameter_id - 0x41], parameter_length);
1663 } else switch (parameter_id) {
1664 case 0x41: /* Max List Count */
1665 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_max_list_count, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1666 break;
1667 case 0x42: /* List Start Offset */
1668 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_list_start_offset, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1669 break;
1670 case 0x43: /* Notification Status */
1671 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_reserved_7, tvb, offset, 1, ENC_NA0x00000000);
1672 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_notification_status, tvb, offset, 1, ENC_NA0x00000000);
1673 break;
1674 case 0x44: /* Instance ID */
1675 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_instance_id, tvb, offset, 1, ENC_NA0x00000000);
1676 break;
1677 case 0x46: /* Listing Size */
1678 proto_tree_add_item(parameter_tree, hf_gpp_application_parameter_data_listing_size, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1679 break;
1680 case 0x01: /* Acoustic Alarm Status */
1681 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_acoustic_alarm_status, tvb, offset, 1, ENC_NA0x00000000);
1682 break;
1683 case 0x02: /* Attachment */
1684 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_attachment, tvb, offset, 1, ENC_NA0x00000000);
1685 break;
1686 case 0x03: /* Send */
1687 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_send, tvb, offset, 1, ENC_NA0x00000000);
1688 break;
1689 case 0x04: /* Filter Period Begin */
1690 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_filter_period_begin, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1691 break;
1692 case 0x05: /* Filter Period End */
1693 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_filter_period_end, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1694 break;
1695 case 0x06: /* Parameter Mask */
1696 proto_tree_add_bitmask(parameter_tree, tvb, offset, hf_ctn_application_parameter_data_parameter_mask, ett_obex_filter, hfx_ctn_application_parameter_data_parameter_mask, ENC_BIG_ENDIAN0x00000000);
1697 break;
1698 case 0x07: /* Status Indicator */
1699 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_status_indicator, tvb, offset, 1, ENC_NA0x00000000);
1700 break;
1701 case 0x08: /* Status Value */
1702 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_status_value, tvb, offset, 1, ENC_NA0x00000000);
1703 break;
1704 case 0x09: /* Postpone Val */
1705 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_postpone_val, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
1706 break;
1707 case 0x0A: /* Email URI */
1708 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_email_uri, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1709 break;
1710 case 0x0B: /* CSE Time */
1711 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_cse_time, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1712 break;
1713 case 0x0C: /* Recurrent */
1714 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_recurrent, tvb, offset, 1, ENC_NA0x00000000);
1715 break;
1716 case 0x0D: /* Attach ID */
1717 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_attach_id, tvb, offset, 1, ENC_NA0x00000000);
1718 break;
1719 case 0x0E: /* Last Update */
1720 proto_tree_add_item(parameter_tree, hf_ctn_application_parameter_data_last_update, tvb, offset, parameter_length, ENC_ASCII0x00000000);
1721 break;
1722 default:
1723 proto_tree_add_item(parameter_tree, hf_application_parameter_data, tvb, offset, parameter_length, ENC_NA0x00000000);
1724 }
1725
1726 parameters_length -= 2 + parameter_length;
1727 offset += parameter_length;
1728 }
1729
1730 return offset;
1731}
1732
1733static int
1734dissect_headers(proto_tree *tree, tvbuff_t *tvb, int offset, packet_info *pinfo,
1735 int profile, obex_last_opcode_data_t *obex_last_opcode_data,
1736 obex_proto_data_t *obex_proto_data)
1737{
1738 proto_tree *hdrs_tree = NULL((void*)0);
1739 proto_tree *hdr_tree = NULL((void*)0);
1740 proto_item *hdr = NULL((void*)0);
1741 proto_item *handle_item;
1742 tvbuff_t *next_tvb;
1743 int new_offset;
1744 int item_length = 0;
1745 int value_length = 0;
1746 uint8_t hdr_id, i;
1747 uint32_t value;
1748 uint32_t frame_number;
1749 uint8_t tag;
1750 char *str = NULL((void*)0);
1751
1752 if (tvb_reported_length_remaining(tvb, offset) > 0) {
1753 proto_item *hdrs;
1754 hdrs = proto_tree_add_item(tree, hf_headers, tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_NA0x00000000);
1755 hdrs_tree = proto_item_add_subtree(hdrs, ett_obex_hdrs);
1756 }
1757 else {
1758 return offset;
1759 }
1760
1761 while (tvb_reported_length_remaining(tvb, offset) > 0) {
1762 hdr_id = tvb_get_uint8(tvb, offset);
1763
1764 switch(0xC0 & hdr_id)
1765 {
1766 case 0x00: /* null terminated unicode */
1767 item_length = tvb_get_ntohs(tvb, offset + 1);
1768 value_length = item_length - 3;
1769 break;
1770 case 0x40: /* byte sequence */
1771 item_length = tvb_get_ntohs(tvb, offset + 1);
1772 value_length = item_length - 3;
1773 break;
1774 case 0x80: /* 1 byte */
1775 item_length = 1 + 1;
1776 value_length = 1;
1777 break;
1778 case 0xc0: /* 4 bytes */
1779 item_length = 1 + 4;
1780 value_length = 4;
1781 break;
1782 }
1783
1784 hdr = proto_tree_add_none_format(hdrs_tree, hf_header, tvb, offset, item_length, "%s",
1785 val_to_str_ext_const(hdr_id, &header_id_vals_ext, "Unknown"));
1786 hdr_tree = proto_item_add_subtree(hdr, ett_obex_hdr);
1787
1788 proto_tree_add_bitmask_with_flags(hdr_tree, tvb, offset, hf_hdr_id, ett_obex_hdr_id, hfx_hdr_id, ENC_NA0x00000000, BMT_NO_APPEND0x01);
1789
1790 offset++;
1791
1792 switch(0xC0 & hdr_id)
1793 {
1794 case 0x00: /* null terminated unicode */
1795 proto_tree_add_item(hdr_tree, hf_hdr_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1796 offset += 2;
1797
1798 switch (hdr_id) {
1799 case 0x01: /* Name */
1800 proto_tree_add_item(hdr_tree, hf_name, tvb, offset, value_length, ENC_UCS_20x00000006 | ENC_BIG_ENDIAN0x00000000);
1801 if (!pinfo->fd->visited && obex_last_opcode_data) {
1802 if (obex_last_opcode_data->code == OBEX_CODE_VALS_SET_PATH0x05)
1803 obex_last_opcode_data->data.set_data.name = (char*)tvb_get_string_enc(wmem_file_scope(), tvb, offset, value_length, ENC_UCS_20x00000006 | ENC_BIG_ENDIAN0x00000000);
1804 else if (obex_last_opcode_data->code == OBEX_CODE_VALS_GET0x03 || obex_last_opcode_data->code == OBEX_CODE_VALS_PUT0x02)
1805 obex_last_opcode_data->data.get_put.name = (char*)tvb_get_string_enc(wmem_file_scope(), tvb, offset, value_length, ENC_UCS_20x00000006 | ENC_BIG_ENDIAN0x00000000);
1806 }
1807 break;
1808 default:
1809 proto_tree_add_item(hdr_tree, hf_hdr_val_unicode, tvb, offset, value_length, ENC_UCS_20x00000006 | ENC_BIG_ENDIAN0x00000000);
1810 }
1811 str = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, value_length, ENC_UCS_20x00000006 | ENC_BIG_ENDIAN0x00000000);
1812 proto_item_append_text(hdr_tree, ": \"%s\"", str);
1813
1814 col_append_fstr(pinfo->cinfo, COL_INFO, " \"%s\"", str);
1815 offset += value_length;
1816
1817 break;
1818 case 0x40: /* byte sequence */
1819 proto_tree_add_item(hdr_tree, hf_hdr_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1820 offset += 2;
1821
1822 switch (hdr_id) {
1823 case 0x4c: /* Application Parameters */
1824 next_tvb = tvb_new_subset_length(tvb, offset, value_length);
1825 if (!(new_offset = dissector_try_uint_with_data(obex_profile_table, profile, next_tvb, pinfo, hdr_tree, true1, NULL((void*)0)))) {
1826 new_offset = call_dissector(raw_application_parameters_handle, next_tvb, pinfo, hdr_tree);
1827 }
1828 offset += new_offset;
1829
1830 break;
1831 case 0x4d: /* Authentication Challenge */
1832 while (value_length) {
1833 uint8_t parameter_id;
1834 uint8_t sub_parameter_length;
1835 proto_item *parameter_item;
1836 proto_tree *parameter_tree;
1837
1838 parameter_id = tvb_get_uint8(tvb, offset);
1839 sub_parameter_length = tvb_get_uint8(tvb, offset + 1);
1840
1841 parameter_item = proto_tree_add_none_format(hdr_tree, hf_authentication_parameter, tvb, offset,
1842 2 + sub_parameter_length, "Tag: %s", val_to_str_const(parameter_id,
1843 authentication_challenge_tag_vals, "Unknown"));
1844 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_authentication_parameters);
1845
1846 proto_tree_add_item_ret_uint8(parameter_tree, hf_authentication_challenge_tag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &tag);
1847 offset += 1;
1848
1849 proto_tree_add_item(parameter_tree, hf_authentication_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1850 offset += 1;
1851
1852 switch (tag) {
1853 case 0x00:
1854 proto_tree_add_item(parameter_tree, hf_authentication_key, tvb, offset, 16, ENC_NA0x00000000);
1855 offset += 16;
1856 break;
1857 case 0x01:
1858 proto_tree_add_item(parameter_tree, hf_authentication_option_reserved, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1859 proto_tree_add_item(parameter_tree, hf_authentication_option_read_only, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1860 proto_tree_add_item(parameter_tree, hf_authentication_option_user_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1861 offset += 1;
1862 break;
1863 case 0x02:
1864 proto_tree_add_item(parameter_tree, hf_authentication_info_charset, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1865 offset += 1;
1866 proto_tree_add_item(parameter_tree, hf_authentication_info, tvb, offset, sub_parameter_length - 1, ENC_ASCII0x00000000);
1867 offset += sub_parameter_length - 1;
1868 break;
1869 default:
1870 proto_tree_add_item(parameter_tree, hf_authentication_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
1871 offset += sub_parameter_length;
1872 }
1873
1874 value_length -= 2 + sub_parameter_length;
1875 }
1876 break;
1877 case 0x4e: /* Authentication Response */
1878 while (value_length) {
1879 uint8_t parameter_id;
1880 uint8_t sub_parameter_length;
1881 proto_item *parameter_item;
1882 proto_tree *parameter_tree;
1883
1884 parameter_id = tvb_get_uint8(tvb, offset);
1885 sub_parameter_length = tvb_get_uint8(tvb, offset + 1);
1886
1887 parameter_item = proto_tree_add_none_format(hdr_tree, hf_authentication_parameter, tvb, offset,
1888 2 + sub_parameter_length, "Tag: %s", val_to_str_const(parameter_id,
1889 authentication_response_tag_vals, "Unknown"));
1890 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_authentication_parameters);
1891
1892 proto_tree_add_item_ret_uint8(parameter_tree, hf_authentication_response_tag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &tag);
1893 offset += 1;
1894
1895 proto_tree_add_item(parameter_tree, hf_authentication_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
1896 sub_parameter_length = tvb_get_uint8(tvb, offset);
1897 offset += 1;
1898
1899 switch (tag) {
1900 case 0x00:
1901 proto_tree_add_item(parameter_tree, hf_authentication_result_key, tvb, offset, 16, ENC_NA0x00000000);
1902 offset += 16;
1903 break;
1904 case 0x01:
1905 proto_tree_add_item(parameter_tree, hf_authentication_user_id, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
1906 offset += sub_parameter_length;
1907 break;
1908 case 0x02:
1909 proto_tree_add_item(parameter_tree, hf_authentication_key, tvb, offset, 16, ENC_NA0x00000000);
1910 offset += 16;
1911 break;
1912 default:
1913 proto_tree_add_item(parameter_tree, hf_authentication_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
1914 offset += sub_parameter_length;
1915 break;
1916 }
1917
1918
1919 value_length -= 2 + sub_parameter_length;
1920 }
1921 break;
1922 case 0x42: /* Type */
1923 proto_tree_add_item(hdr_tree, hf_type, tvb, offset, value_length, ENC_ASCII0x00000000);
1924 proto_item_append_text(hdr_tree, ": \"%s\"", tvb_get_string_enc(pinfo->pool, tvb, offset, value_length, ENC_ASCII0x00000000));
1925 if (!pinfo->fd->visited && obex_last_opcode_data && (obex_last_opcode_data->code == OBEX_CODE_VALS_GET0x03 || obex_last_opcode_data->code == OBEX_CODE_VALS_PUT0x02)) {
1926 obex_last_opcode_data->data.get_put.type = (char*)tvb_get_string_enc(wmem_file_scope(), tvb, offset, value_length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
1927 }
1928 if (p_get_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_MEDIA_TYPE0x00) == NULL((void*)0)) {
1929 uint8_t *value_data;
1930
1931 value_data = tvb_get_string_enc(wmem_file_scope(), tvb, offset, value_length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
1932
1933 p_add_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_MEDIA_TYPE0x00, value_data);
1934 }
1935 offset += value_length;
1936
1937 break;
1938 case 0x44: /* Time (ISO8601) */
1939 {
1940 const uint8_t* time_str;
1941 proto_tree_add_item_ret_string(hdr_tree, hf_time_iso8601, tvb, offset, value_length, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &time_str);
1942 proto_item_append_text(hdr_tree, ": \"%s\"", time_str);
1943
1944 offset += value_length;
1945 }
1946 break;
1947 case 0x48: /* Body */
1948 case 0x49: /* End Of Body */
1949 proto_tree_add_item(hdr_tree, hf_hdr_val_byte_seq, tvb, offset, value_length, ENC_NA0x00000000);
1950 next_tvb = tvb_new_subset_length(tvb, offset, value_length);
1951
1952 if (value_length > 0 && obex_last_opcode_data &&
1953 (obex_last_opcode_data->code == OBEX_CODE_VALS_GET0x03 || obex_last_opcode_data->code == OBEX_CODE_VALS_PUT0x02) &&
1954 p_get_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_MEDIA_TYPE0x00) == NULL((void*)0)) {
1955 char *value_data;
1956
1957 value_data = obex_last_opcode_data->data.get_put.type;
1958
1959 p_add_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_MEDIA_TYPE0x00, value_data);
1960 }
1961 if (value_length > 0 && obex_last_opcode_data &&
1962 (obex_last_opcode_data->code == OBEX_CODE_VALS_GET0x03 || obex_last_opcode_data->code == OBEX_CODE_VALS_PUT0x02) &&
1963 obex_last_opcode_data->data.get_put.type &&
1964 dissector_try_string_with_data(media_type_dissector_table, obex_last_opcode_data->data.get_put.type, next_tvb, pinfo, tree, true1, NULL((void*)0)) > 0) {
1965 offset += value_length;
1966 } else {
1967 if (!tvb_strneql(tvb, offset, "<?xml", 5))
1968 {
1969 call_dissector(xml_handle, next_tvb, pinfo, tree);
1970 } else if (is_ascii_str(tvb_get_ptr(tvb, offset, value_length), value_length)) {
1971 proto_item_append_text(hdr_tree, ": \"%s\"", tvb_get_string_enc(pinfo->pool, tvb, offset, value_length, ENC_ASCII0x00000000));
1972 col_append_fstr(pinfo->cinfo, COL_INFO, " \"%s\"", tvb_get_string_enc(pinfo->pool, tvb, offset, value_length, ENC_ASCII0x00000000));
1973 }
1974 offset += value_length;
1975 }
1976
1977 break;
1978 case 0x46: /* Target */
1979 case 0x4a: /* Who */
1980 handle_item = proto_tree_add_item(hdr_tree, hf_hdr_val_byte_seq, tvb, offset, value_length, ENC_NA0x00000000);
1981
1982 if (value_length == 16) for (i = 0; target_vals[i].strptr != NULL((void*)0); i++) {
1983 if (tvb_memeql(tvb, offset, target_vals[i].value, target_vals[i].length) == 0) {
1984 proto_item_append_text(handle_item, ": %s", target_vals[i].strptr);
1985 proto_item_append_text(hdr_tree, ": %s", target_vals[i].strptr);
1986
1987 col_append_fstr(pinfo->cinfo, COL_INFO, " - %s", target_vals[i].strptr);
1988 if (!pinfo->fd->visited) {
1989 obex_profile_data_t *obex_profile_data;
1990
1991 wmem_tree_key_t key[6];
1992 frame_number = pinfo->num;
1993
1994 key[0].length = 1;
1995 key[0].key = &obex_proto_data->interface_id;
1996 key[1].length = 1;
1997 key[1].key = &obex_proto_data->adapter_id;
1998 key[2].length = 1;
1999 key[2].key = &obex_proto_data->chandle;
2000 key[3].length = 1;
2001 key[3].key = &obex_proto_data->channel;
2002 key[4].length = 1;
2003 key[4].key = &frame_number;
2004 key[5].length = 0;
2005 key[5].key = NULL((void*)0);
2006
2007 obex_profile_data = wmem_new(wmem_file_scope(), obex_profile_data_t)((obex_profile_data_t*)wmem_alloc((wmem_file_scope()), sizeof
(obex_profile_data_t)))
;
2008 obex_profile_data->interface_id = obex_proto_data->interface_id;
2009 obex_profile_data->adapter_id = obex_proto_data->adapter_id;
2010 obex_profile_data->chandle = obex_proto_data->chandle;
2011 obex_profile_data->channel = obex_proto_data->channel;
2012 obex_profile_data->profile = target_to_profile[i];
2013
2014 wmem_tree_insert32_array(obex_profile, key, obex_profile_data);
2015 }
2016 }
2017 }
2018 offset += value_length;
2019
2020 break;
2021 case 0x47: /* HTTP */ {
2022 next_tvb = tvb_new_subset_remaining(tvb, offset);
2023
2024 call_dissector(http_handle, next_tvb, pinfo, hdr_tree);
2025
2026 }
2027 break;
2028 case 0x50: /* WAN UUID */
2029 if (value_length == 2) {
2030 proto_tree_add_item(hdr_tree, hf_wan_uuid, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2031 offset += 2;
2032 } else {
2033 proto_tree_add_item(hdr_tree, hf_hdr_val_byte_seq, tvb, offset, value_length, ENC_NA0x00000000);
2034 offset += value_length;
2035 }
2036
2037 break;
2038 case 0x51: /* Object Class */
2039 {
2040 const uint8_t* obj_str;
2041 proto_tree_add_item_ret_string(hdr_tree, hf_object_class, tvb, offset, value_length, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &obj_str);
2042 proto_item_append_text(hdr_tree, ": \"%s\"", obj_str);
2043
2044 offset += value_length;
2045 }
2046 break;
2047 case 0x52: /* Session Parameter */
2048 while (value_length) {
2049 uint8_t parameter_id;
2050 uint8_t sub_parameter_length;
2051 proto_item *parameter_item;
2052 proto_tree *parameter_tree;
2053
2054 parameter_id = tvb_get_uint8(tvb, offset);
2055 sub_parameter_length = tvb_get_uint8(tvb, offset + 1);
2056
2057 parameter_item = proto_tree_add_none_format(hdr_tree, hf_session_parameter, tvb, offset,
2058 2 + sub_parameter_length, "Tag: %s", val_to_str_const(parameter_id,
2059 session_tag_vals, "Unknown"));
2060 parameter_tree = proto_item_add_subtree(parameter_item, ett_obex_session_parameters);
2061
2062 proto_tree_add_item_ret_uint8(parameter_tree, hf_session_parameter_tag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &tag);
2063 offset += 1;
2064
2065 proto_tree_add_item_ret_uint8(parameter_tree, hf_session_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &sub_parameter_length);
2066 offset += 1;
2067
2068 switch (tag) {
2069 case 0x00: /* Device Address */
2070 if (sub_parameter_length == 6) {
2071 offset = dissect_bd_addr(hf_sender_bd_addr, pinfo, parameter_tree, tvb, offset, false0, obex_proto_data->interface_id, obex_proto_data->adapter_id, NULL((void*)0));
2072 } else {
2073 proto_tree_add_item(parameter_tree, hf_session_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2074
2075 offset += sub_parameter_length;
2076 }
2077
2078 break;
2079 case 0x01: /* Nonce */
2080 if (sub_parameter_length >= 4 && sub_parameter_length <= 16) {
2081 proto_tree_add_item(parameter_tree, hf_session_parameter_nonce, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2082
2083 offset += sub_parameter_length;
2084 } else {
2085 proto_tree_add_item(parameter_tree, hf_session_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2086
2087 offset += sub_parameter_length;
2088 }
2089
2090 break;
2091 case 0x02: /* Session ID */
2092 if (sub_parameter_length == 16) {
2093 proto_tree_add_item(parameter_tree, hf_session_parameter_session_id, tvb, offset, 16, ENC_NA0x00000000);
2094
2095 offset += 16;
2096 } else {
2097 proto_tree_add_item(parameter_tree, hf_session_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2098
2099 offset += sub_parameter_length;
2100 }
2101
2102 break;
2103 case 0x03: /* Next Sequence Number */
2104 if (sub_parameter_length == 1) {
2105 proto_tree_add_item(parameter_tree, hf_session_parameter_next_sequence_number, tvb, offset, 1, ENC_NA0x00000000);
2106
2107 offset += 1;
2108 } else {
2109 proto_tree_add_item(parameter_tree, hf_session_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2110
2111 offset += sub_parameter_length;
2112 }
2113
2114 break;
2115 case 0x04: /* Timeout */
2116 if (sub_parameter_length == 4) {
2117 proto_tree_add_item(parameter_tree, hf_session_parameter_timeout, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2118
2119 offset += 4;
2120 } else {
2121 proto_tree_add_item(parameter_tree, hf_session_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2122
2123 offset += sub_parameter_length;
2124 }
2125
2126 break;
2127 case 0x05: /* Session Opcode */
2128 if (sub_parameter_length == 1) {
2129 proto_tree_add_item(parameter_tree, hf_session_parameter_opcode, tvb, offset, 1, ENC_NA0x00000000);
2130
2131 offset += 1;
2132 } else {
2133 proto_tree_add_item(parameter_tree, hf_session_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2134
2135 offset += sub_parameter_length;
2136 }
2137
2138 break;
2139 default:
2140 proto_tree_add_item(parameter_tree, hf_session_parameter_data, tvb, offset, sub_parameter_length, ENC_NA0x00000000);
2141 offset += sub_parameter_length;
2142 break;
2143 }
2144
2145
2146 value_length -= 2 + sub_parameter_length;
2147 }
2148 break;
2149 default:
2150 proto_tree_add_item(hdr_tree, hf_hdr_val_byte_seq, tvb, offset, value_length, ENC_NA0x00000000);
2151 offset += value_length;
2152 }
2153
2154 break;
2155 case 0x80: /* 1 byte */
2156 value = tvb_get_uint8(tvb, offset);
2157
2158 switch (hdr_id) {
2159 case 0x94: /* Action */
2160 proto_tree_add_item(hdr_tree, hf_hdr_val_action, tvb, offset, 1, ENC_NA0x00000000);
2161 proto_item_append_text(hdr_tree, ": %s", val_to_str_const(value, action_vals, "Unknown"));
2162
2163 break;
2164 case 0x97: /* Single Response Mode */
2165 proto_tree_add_item(hdr_tree, hf_hdr_val_single_response_mode, tvb, offset, 1, ENC_NA0x00000000);
2166 proto_item_append_text(hdr_tree, ": %s", val_to_str_const(value, single_response_mode_vals, "Unknown"));
2167
2168 break;
2169 case 0x98: /* Single Response Mode Parameter */
2170 proto_tree_add_item(hdr_tree, hf_hdr_val_single_response_mode_parameter, tvb, offset, 1, ENC_NA0x00000000);
2171 proto_item_append_text(hdr_tree, ": %s", val_to_str_const(value, single_response_mode_parameter_vals, "Unknown"));
2172
2173 break;
2174 case 0x93: /* Session Sequence Number */
2175 default:
2176 proto_tree_add_item(hdr_tree, hf_hdr_val_byte, tvb, offset, 1, ENC_NA0x00000000);
2177 proto_item_append_text(hdr_tree, ": %i", value);
2178 }
2179
2180 offset += 1;
2181
2182 break;
2183 case 0xC0: /* 4 bytes */
2184 switch (hdr_id) {
2185 case 0xC0: /* Count */
2186 proto_item_append_text(hdr_tree, ": %i", tvb_get_ntohl(tvb, offset));
2187 proto_tree_add_item(hdr_tree, hf_count, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2188
2189 break;
2190 case 0xC3: /* Length */
2191 proto_item_append_text(hdr_tree, ": %i", tvb_get_ntohl(tvb, offset));
2192 proto_tree_add_item(hdr_tree, hf_data_length, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2193
2194 break;
2195 case 0xCB: /* Connection Id */
2196 proto_item_append_text(hdr_tree, ": %i", tvb_get_ntohl(tvb, offset));
2197 proto_tree_add_item(hdr_tree, hf_connection_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2198
2199 break;
2200 case 0xC4: /* Time */
2201 case 0xCF: /* Creator */
2202 case 0xD6: /* Permissions */
2203 default:
2204 proto_item_append_text(hdr_tree, ": %i", tvb_get_ntohl(tvb, offset));
2205 proto_tree_add_item(hdr_tree, hf_hdr_val_long, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2206 }
2207
2208 offset += 4;
2209
2210 break;
2211 default:
2212 break;
2213 }
2214 }
2215
2216 return offset;
2217}
2218
2219static int
2220dissect_obex(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
2221{
2222 proto_item *main_item;
2223 proto_tree *main_tree;
2224 proto_item *sub_item;
2225 fragment_head *frag_msg = NULL((void*)0);
2226 fragment_item *frag = NULL((void*)0);
2227 bool_Bool save_fragmented;
2228 bool_Bool complete;
2229 tvbuff_t* new_tvb = NULL((void*)0);
2230 tvbuff_t* next_tvb = NULL((void*)0);
2231 int offset = 0;
2232 int profile = PROFILE_UNKNOWN0;
2233 const char *path = path_unknown;
1
'path' initialized here
2234 obex_profile_data_t *obex_profile_data;
2235 wmem_tree_key_t key[6];
2236 uint32_t frame_number;
2237 obex_last_opcode_data_t *obex_last_opcode_data;
2238 obex_path_data_t *obex_path_data;
2239 uint32_t length;
2240 uint8_t *profile_data;
2241 dissector_handle_t current_handle;
2242 dissector_handle_t default_handle;
2243 int previous_proto;
2244 obex_proto_data_t obex_proto_data;
2245
2246 previous_proto = (GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_frame_prev(wmem_list_tail(pinfo->layers))))((gint) (glong) (wmem_list_frame_data(wmem_list_frame_prev(wmem_list_tail
(pinfo->layers)))))
);
2247 if (previous_proto
1.1
'previous_proto' is not equal to 'proto_btl2cap'
== proto_btl2cap) {
2
Taking false branch
2248 btl2cap_data_t *l2cap_data;
2249
2250 l2cap_data = (btl2cap_data_t *) data;
2251
2252 obex_proto_data.interface_id = l2cap_data->interface_id;
2253 obex_proto_data.adapter_id = l2cap_data->adapter_id;
2254 obex_proto_data.chandle = l2cap_data->chandle;
2255 obex_proto_data.channel = l2cap_data->cid;
2256 } else if (previous_proto
2.1
'previous_proto' is not equal to 'proto_btrfcomm'
== proto_btrfcomm) {
3
Taking false branch
2257 btrfcomm_data_t *rfcomm_data;
2258
2259 rfcomm_data = (btrfcomm_data_t *) data;
2260
2261 obex_proto_data.interface_id = rfcomm_data->interface_id;
2262 obex_proto_data.adapter_id = rfcomm_data->adapter_id;
2263 obex_proto_data.chandle = rfcomm_data->chandle;
2264 obex_proto_data.channel = rfcomm_data->dlci >> 1;
2265 } else {
2266 obex_proto_data.interface_id = HCI_INTERFACE_DEFAULT0;
2267 obex_proto_data.adapter_id = HCI_ADAPTER_DEFAULT0;
2268 obex_proto_data.chandle = 0;
2269 obex_proto_data.channel = 0;
2270 }
2271
2272 col_set_str(pinfo->cinfo, COL_PROTOCOL, "OBEX");
2273
2274 main_item = proto_tree_add_item(tree, proto_obex, tvb, 0, tvb_captured_length(tvb), ENC_NA0x00000000);
2275 main_tree = proto_item_add_subtree(main_item, ett_obex);
2276
2277 save_fragmented = pinfo->fragmented;
2278
2279 frame_number = pinfo->num;
2280
2281 key[0].length = 1;
2282 key[0].key = &obex_proto_data.interface_id;
2283 key[1].length = 1;
2284 key[1].key = &obex_proto_data.adapter_id;
2285 key[2].length = 1;
2286 key[2].key = &obex_proto_data.chandle;
2287 key[3].length = 1;
2288 key[3].key = &obex_proto_data.channel;
2289 key[4].length = 1;
2290 key[4].key = &frame_number;
2291 key[5].length = 0;
2292 key[5].key = NULL((void*)0);
2293
2294 profile_data = (uint8_t *) p_get_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_OBEX_PROFILE0x01);
2295 if (profile_data == NULL((void*)0)) {
4
Assuming 'profile_data' is not equal to NULL
5
Taking false branch
2296 obex_profile_data = (obex_profile_data_t *)wmem_tree_lookup32_array_le(obex_profile, key);
2297 if (obex_profile_data && obex_profile_data->interface_id == obex_proto_data.interface_id &&
2298 obex_profile_data->adapter_id == obex_proto_data.adapter_id &&
2299 obex_profile_data->chandle == obex_proto_data.chandle &&
2300 obex_profile_data->channel == obex_proto_data.channel) {
2301 profile = obex_profile_data->profile;
2302 }
2303
2304 profile_data = wmem_new(wmem_file_scope(), uint8_t)((uint8_t*)wmem_alloc((wmem_file_scope()), sizeof(uint8_t)));
2305 *profile_data = profile;
2306
2307 p_add_proto_data(pinfo->pool, pinfo, proto_obex, PROTO_DATA_OBEX_PROFILE0x01, profile_data);
2308 }
2309
2310 obex_path_data = (obex_path_data_t *)wmem_tree_lookup32_array_le(obex_path, key);
2311 if (obex_path_data && obex_path_data->interface_id == obex_proto_data.interface_id &&
6
Assuming 'obex_path_data' is null
2312 obex_path_data->adapter_id == obex_proto_data.adapter_id &&
2313 obex_path_data->chandle == obex_proto_data.chandle &&
2314 obex_path_data->channel == obex_proto_data.channel) {
2315 path = obex_path_data->path;
2316 }
2317
2318 sub_item = proto_tree_add_uint(main_tree, hf_profile, tvb, 0, 0, profile);
2319 proto_item_set_generated(sub_item);
2320
2321 if (path) {
7
Assuming 'path' is null
8
Taking false branch
2322 sub_item = proto_tree_add_string(main_tree, hf_current_path, tvb, 0, 0, path);
2323 proto_item_set_generated(sub_item);
2324 }
2325
2326 current_handle = dissector_get_uint_handle(obex_profile_table, profile);
2327 default_handle = dissector_get_default_uint_handle("obex.profile", profile);
2328 if (current_handle != default_handle) {
9
Assuming 'current_handle' is equal to 'default_handle'
10
Taking false branch
2329 expert_add_info_format(pinfo, main_item, &ei_decoded_as_profile, "Decoded As %s", dissector_handle_get_protocol_long_name(current_handle));
2330 }
2331
2332 complete = false0;
2333
2334 if (tvb_captured_length(tvb) == tvb_reported_length(tvb)) {
11
Assuming the condition is true
12
Taking true branch
2335 frag_msg = fragment_get_reassembled_id(&obex_reassembly_table, pinfo, pinfo->p2p_dir);
2336 if (frag_msg && pinfo->num != frag_msg->reassembled_in) {
13
Assuming 'frag_msg' is null
2337 /* reassembled but not last */
2338
2339 new_tvb = process_reassembled_data(tvb, 0, pinfo,
2340 "Reassembled Obex packet", frag_msg, &obex_frag_items, NULL((void*)0), main_tree);
2341 } else if (frag_msg
13.1
'frag_msg' is null
&& pinfo->num == frag_msg->reassembled_in) {
2342 /* reassembled and last, so dissect reassembled packet here */
2343
2344 new_tvb = process_reassembled_data(tvb, 0, pinfo,
2345 "Reassembled Obex packet", frag_msg, &obex_frag_items, NULL((void*)0), main_tree);
2346 } else {
2347 frag_msg = fragment_get(&obex_reassembly_table, pinfo, pinfo->p2p_dir, NULL((void*)0));
2348
2349 if (frag_msg) {
14
Assuming 'frag_msg' is null
15
Taking false branch
2350 /* not the first fragment */
2351
2352 /* packet stream is guaranteed to be sequence of fragments, one by one,
2353 so find last fragment for its offset and length */
2354 for (frag = frag_msg->next; frag->next; frag = frag->next) {}
2355
2356 frag_msg = fragment_add_check(&obex_reassembly_table,
2357 tvb, 0, pinfo, pinfo->p2p_dir, NULL((void*)0),
2358 frag->offset + frag->len, tvb_reported_length(tvb),
2359 ((frag->offset + frag->len + tvb_reported_length(tvb)) <
2360 fragment_get_tot_len(&obex_reassembly_table, pinfo, pinfo->p2p_dir, NULL((void*)0))) ? true1 : false0);
2361
2362 new_tvb = process_reassembled_data(tvb, 0, pinfo,
2363 "Reassembled Obex packet", frag_msg, &obex_frag_items, NULL((void*)0), main_tree);
2364
2365 pinfo->fragmented = true1;
2366 } else {
2367 if (tvb_reported_length(tvb) < 3) {
16
Assuming the condition is false
2368 /* Packet length is in the second and the third bye of packet, anything shorter than 3 is bad */
2369 col_add_fstr(pinfo->cinfo, COL_INFO, "%s OBEX packet too short",
2370 (pinfo->p2p_dir==P2P_DIR_SENT0) ? "Sent" : "Rcvd");
2371 call_dissector(data_handle, tvb, pinfo, main_tree);
2372 return tvb_reported_length(tvb);
2373 } else if (tvb_reported_length(tvb) >= 3 && tvb_reported_length(tvb) < tvb_get_ntohs(tvb, offset+1)) {
17
Assuming the condition is false
2374 /* first fragment in a sequence */
2375 frag_msg = fragment_add_check(&obex_reassembly_table,
2376 tvb, 0, pinfo, pinfo->p2p_dir, NULL((void*)0),
2377 0, tvb_reported_length(tvb), true1);
2378
2379 fragment_set_tot_len(&obex_reassembly_table,
2380 pinfo, pinfo->p2p_dir, NULL((void*)0),
2381 tvb_get_ntohs(tvb, offset + 1));
2382
2383 new_tvb = process_reassembled_data(tvb, 0, pinfo,
2384 "Reassembled Obex packet", frag_msg, &obex_frag_items, NULL((void*)0), main_tree);
2385 pinfo->fragmented = true1;
2386 } else if (tvb_reported_length(tvb) == tvb_get_ntohs(tvb, offset+1)) {
18
Assuming the condition is true
19
Taking true branch
2387 /* non-fragmented */
2388 complete = true1;
2389 pinfo->fragmented = false0;
2390 }
2391 }
2392 }
2393 }
2394
2395 if (new_tvb
19.1
'new_tvb' is null
) { /* take it all */
20
Taking false branch
2396 next_tvb = new_tvb;
2397 complete = true1;
2398 } else { /* make a new subset */
2399 next_tvb = tvb_new_subset_remaining(tvb, offset);
2400 }
2401
2402 if (complete
20.1
'complete' is true
) {
21
Taking true branch
2403 uint8_t code;
2404 uint8_t final_flag;
2405
2406 /* fully dissectable packet ready */
2407
2408 /* op/response code */
2409 code = tvb_get_uint8(next_tvb, offset) & OBEX_CODE_VALS_MASK0x7F;
2410 final_flag = tvb_get_uint8(next_tvb, offset) & 0x80;
2411
2412 switch (pinfo->p2p_dir) {
22
Control jumps to the 'default' case at line 2419
2413 case P2P_DIR_SENT0:
2414 col_set_str(pinfo->cinfo, COL_INFO, "Sent ");
2415 break;
2416 case P2P_DIR_RECV1:
2417 col_set_str(pinfo->cinfo, COL_INFO, "Rcvd ");
2418 break;
2419 default:
2420 col_set_str(pinfo->cinfo, COL_INFO, "UnknownDirection ");
2421 break;
23
Execution continues on line 2424
2422 }
2423
2424 col_append_str(pinfo->cinfo, COL_INFO,
2425 val_to_str_ext_const(code, &code_vals_ext, "Unknown"));
2426
2427 if (code < OBEX_CODE_VALS_CONTINUE0x10 || code == OBEX_CODE_VALS_ABORT0x7F) {
24
Assuming 'code' is >= OBEX_CODE_VALS_CONTINUE
25
Assuming 'code' is not equal to OBEX_CODE_VALS_ABORT
26
Taking false branch
2428 proto_tree_add_item(main_tree, hf_opcode, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2429 if (!pinfo->fd->visited &&
2430 (pinfo->p2p_dir == P2P_DIR_SENT0 ||
2431 pinfo->p2p_dir == P2P_DIR_RECV1)) {
2432 frame_number = pinfo->num;
2433
2434 key[0].length = 1;
2435 key[0].key = &obex_proto_data.interface_id;
2436 key[1].length = 1;
2437 key[1].key = &obex_proto_data.adapter_id;
2438 key[2].length = 1;
2439 key[2].key = &obex_proto_data.chandle;
2440 key[3].length = 1;
2441 key[3].key = &obex_proto_data.channel;
2442 key[4].length = 1;
2443 key[4].key = &frame_number;
2444 key[5].length = 0;
2445 key[5].key = NULL((void*)0);
2446
2447 obex_last_opcode_data = wmem_new0(wmem_file_scope(), obex_last_opcode_data_t)((obex_last_opcode_data_t*)wmem_alloc0((wmem_file_scope()), sizeof
(obex_last_opcode_data_t)))
;
2448 obex_last_opcode_data->interface_id = obex_proto_data.interface_id;
2449 obex_last_opcode_data->adapter_id = obex_proto_data.adapter_id;
2450 obex_last_opcode_data->chandle = obex_proto_data.chandle;
2451 obex_last_opcode_data->channel = obex_proto_data.channel;
2452 obex_last_opcode_data->code = code;
2453 obex_last_opcode_data->final_flag = final_flag;
2454 obex_last_opcode_data->request_in_frame = frame_number;
2455 obex_last_opcode_data->response_in_frame = 0;
2456
2457 wmem_tree_insert32_array(obex_last_opcode, key, obex_last_opcode_data);
2458 }
2459 } else {
2460 proto_tree_add_item(main_tree, hf_response_code, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2461 }
2462
2463 proto_tree_add_item(main_tree, hf_final_flag, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2464 offset++;
2465
2466 /* length */
2467 proto_tree_add_item(main_tree, hf_length, next_tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2468 length = tvb_get_ntohs(tvb, offset) - 3;
2469 offset += 2;
2470
2471 frame_number = pinfo->num;
2472
2473 key[0].length = 1;
2474 key[0].key = &obex_proto_data.interface_id;
2475 key[1].length = 1;
2476 key[1].key = &obex_proto_data.adapter_id;
2477 key[2].length = 1;
2478 key[2].key = &obex_proto_data.chandle;
2479 key[3].length = 1;
2480 key[3].key = &obex_proto_data.channel;
2481 key[4].length = 1;
2482 key[4].key = &frame_number;
2483 key[5].length = 0;
2484 key[5].key = NULL((void*)0);
2485
2486 obex_last_opcode_data = (obex_last_opcode_data_t *)wmem_tree_lookup32_array_le(obex_last_opcode, key);
2487 if (obex_last_opcode_data && obex_last_opcode_data->interface_id == obex_proto_data.interface_id &&
27
Assuming 'obex_last_opcode_data' is non-null
28
Assuming 'obex_last_opcode_data->interface_id' is not equal to 'obex_proto_data.interface_id'
2488 obex_last_opcode_data->adapter_id == obex_proto_data.adapter_id &&
2489 obex_last_opcode_data->chandle == obex_proto_data.chandle &&
2490 obex_last_opcode_data->channel == obex_proto_data.channel) {
2491 if (obex_last_opcode_data->request_in_frame > 0 && obex_last_opcode_data->request_in_frame != pinfo->num) {
2492 sub_item = proto_tree_add_uint(main_tree, hf_request_in_frame, next_tvb, 0, 0, obex_last_opcode_data->request_in_frame);
2493 proto_item_set_generated(sub_item);
2494 }
2495
2496 if (!pinfo->fd->visited && obex_last_opcode_data->response_in_frame == 0 && obex_last_opcode_data->request_in_frame < pinfo->num) {
2497 obex_last_opcode_data->response_in_frame = pinfo->num;
2498 }
2499
2500 if (obex_last_opcode_data->response_in_frame > 0 && obex_last_opcode_data->response_in_frame != pinfo->num) {
2501 sub_item = proto_tree_add_uint(main_tree, hf_response_in_frame, next_tvb, 0, 0, obex_last_opcode_data->response_in_frame);
2502 proto_item_set_generated(sub_item);
2503 }
2504 }
2505
2506 switch(code)
29
Control jumps to the 'default' case at line 2544
2507 {
2508 case OBEX_CODE_VALS_CONNECT0x00:
2509 proto_tree_add_item(main_tree, hf_version, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2510 offset++;
2511
2512 proto_tree_add_item(main_tree, hf_flags, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2513 offset++;
2514
2515 proto_tree_add_item(main_tree, hf_max_pkt_len, next_tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2516 offset += 2;
2517 break;
2518
2519 case OBEX_CODE_VALS_PUT0x02:
2520 case OBEX_CODE_VALS_GET0x03:
2521 col_append_fstr(pinfo->cinfo, COL_INFO, " %s", (final_flag == 0x80) ? "final" : "continue");
2522 break;
2523
2524 case OBEX_CODE_VALS_SET_PATH0x05:
2525 proto_tree_add_item(main_tree, hf_flags, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2526 proto_tree_add_item(main_tree, hf_set_path_flags_0, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2527 proto_tree_add_item(main_tree, hf_set_path_flags_1, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2528
2529 if (!pinfo->fd->visited && obex_last_opcode_data) {
2530 obex_last_opcode_data->data.set_data.go_up = tvb_get_uint8(tvb, offset) & 0x01;
2531 obex_last_opcode_data->data.set_data.name = NULL((void*)0);
2532 }
2533
2534 offset++;
2535
2536 proto_tree_add_item(main_tree, hf_constants, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2537 offset++;
2538 break;
2539
2540 case OBEX_CODE_VALS_DISCONNECT0x01:
2541 case OBEX_CODE_VALS_ABORT0x7F:
2542 break;
2543
2544 default:
2545 if (length == 0 && tvb_reported_length_remaining(tvb, offset) > 0) {
30
Assuming 'length' is equal to 0
31
Assuming the condition is false
32
Taking false branch
2546 proto_tree_add_expert(main_tree, pinfo, &ei_unexpected_data, tvb, offset, tvb_reported_length_remaining(tvb, offset));
2547 offset += tvb_reported_length_remaining(tvb, offset);
2548 break;
2549 } else if (length
32.1
'length' is equal to 0
== 0) break;
33
Taking true branch
34
Execution continues on line 2567
2550
2551 if (obex_last_opcode_data && obex_last_opcode_data->code == OBEX_CODE_VALS_CONNECT0x00) {
2552 proto_tree_add_item(main_tree, hf_version, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2553 offset++;
2554
2555 proto_tree_add_item(main_tree, hf_flags, next_tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2556 offset++;
2557
2558 proto_tree_add_item(main_tree, hf_max_pkt_len, next_tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2559 offset += 2;
2560
2561 if (!pinfo->fd->visited)
2562 save_path(pinfo, path, "", false0, &obex_proto_data);
2563 }
2564 break;
2565 }
2566
2567 dissect_headers(main_tree, next_tvb, offset, pinfo, profile, obex_last_opcode_data, &obex_proto_data);
2568 if (!pinfo->fd->visited &&
35
Assuming field 'visited' is 0
39
Taking true branch
2569 obex_last_opcode_data
35.1
'obex_last_opcode_data' is non-null
&&
2570 obex_last_opcode_data->data.set_data.name &&
36
Assuming field 'name' is non-null
2571 obex_last_opcode_data->code == OBEX_CODE_VALS_SET_PATH0x05 &&
37
Assuming field 'code' is equal to OBEX_CODE_VALS_SET_PATH
2572 code == OBEX_CODE_VALS_SUCCESS0x20) {
38
Assuming 'code' is equal to OBEX_CODE_VALS_SUCCESS
2573 save_path(pinfo, path, obex_last_opcode_data->data.set_data.name, obex_last_opcode_data->data.set_data.go_up, &obex_proto_data);
40
Passing null pointer value via 2nd parameter 'current_path'
41
Calling 'save_path'
2574 }
2575 } else {
2576 /* packet fragment */
2577 col_add_fstr(pinfo->cinfo, COL_INFO, "%s OBEX fragment",
2578 (pinfo->p2p_dir==P2P_DIR_SENT0) ? "Sent" : "Rcvd");
2579 call_dissector(data_handle, next_tvb, pinfo, main_tree);
2580
2581 offset = tvb_reported_length(tvb);
2582 }
2583
2584 pinfo->fragmented = save_fragmented;
2585
2586 return offset;
2587}
2588
2589
2590void
2591proto_register_obex(void)
2592{
2593 module_t *module;
2594 expert_module_t *expert_obex;
2595 int proto_raw;
2596 int proto_bpp;
2597 int proto_bip;
2598 int proto_map;
2599 int proto_bt_gpp;
2600 int proto_bt_ctn;
2601 int proto_bt_pbap;
2602
2603 static hf_register_info hf[] = {
2604 { &hf_opcode,
2605 { "Opcode", "obex.opcode",
2606 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &code_vals_ext, OBEX_CODE_VALS_MASK0x7F,
2607 "Request Opcode", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2608 },
2609 { &hf_response_code,
2610 { "Response Code", "obex.resp_code",
2611 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &code_vals_ext, OBEX_CODE_VALS_MASK0x7F,
2612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2613 },
2614 { &hf_final_flag,
2615 { "Final Flag", "obex.final_flag",
2616 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
2617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2618 },
2619 { &hf_length,
2620 { "Packet Length", "obex.pkt_len",
2621 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
2622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2623 },
2624 { &hf_version,
2625 { "Version", "obex.version",
2626 FT_UINT8, BASE_HEX, VALS(version_vals)((0 ? (const struct _value_string*)0 : ((version_vals)))), 0x00,
2627 "Obex Protocol Version", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2628 },
2629 { &hf_flags,
2630 { "Flags", "obex.flags",
2631 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
2632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2633 },
2634 { &hf_constants,
2635 { "Constants", "obex.constants",
2636 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
2637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2638 },
2639 { &hf_max_pkt_len,
2640 { "Max. Packet Length", "obex.max_pkt_len",
2641 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
2642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2643 },
2644 { &hf_set_path_flags_0,
2645 { "Go back one folder (../) first", "obex.set_path_flags_0",
2646 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
2647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2648 },
2649 { &hf_set_path_flags_1,
2650 { "Do not create folder, if not existing", "obex.set_path_flags_1",
2651 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
2652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2653 },
2654 { &hf_headers,
2655 { "Headers", "obex.headers",
2656 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
2657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2658 },
2659 { &hf_header,
2660 { "Header", "obex.header",
2661 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
2662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2663 },
2664 { &hf_hdr_id,
2665 { "Header Id", "obex.header.id",
2666 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &header_id_vals_ext, 0x00,
2667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2668 },
2669 { &hf_hdr_id_encoding,
2670 { "Encoding", "obex.header.id.encoding",
2671 FT_UINT8, BASE_HEX, VALS(header_id_encoding_vals)((0 ? (const struct _value_string*)0 : ((header_id_encoding_vals
))))
, 0xC0,
2672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2673 },
2674 { &hf_hdr_id_meaning,
2675 { "Meaning", "obex.header.id.meaning",
2676 FT_UINT8, BASE_HEX, VALS(header_id_meaning_vals)((0 ? (const struct _value_string*)0 : ((header_id_meaning_vals
))))
, 0x3F,
2677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2678 },
2679 { &hf_hdr_length,
2680 { "Length", "obex.header.length",
2681 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
2682 "Header Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2683 },
2684 { &hf_hdr_val_unicode,
2685 { "Value", "obex.header.value.unicode",
2686 FT_STRING, BASE_NONE, NULL((void*)0), 0,
2687 "Unicode Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2688 },
2689 { &hf_hdr_val_byte_seq,
2690 { "Value", "obex.header.value.byte_sequence",
2691 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2692 "Byte Sequence Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2693 },
2694 { &hf_hdr_val_byte,
2695 { "Value", "obex.header.value.byte",
2696 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0,
2697 "Byte Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2698 },
2699 { &hf_hdr_val_long,
2700 { "Value", "obex.header.value.long",
2701 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
2702 "4-byte Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2703 },
2704 { &hf_count,
2705 { "Count", "obex.count",
2706 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
2707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2708 },
2709 { &hf_data_length,
2710 { "Length", "obex.length",
2711 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
2712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2713 },
2714 { &hf_connection_id,
2715 { "Connection ID", "obex.connection_id",
2716 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
2717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2718 },
2719 { &hf_session_parameter,
2720 { "Session Parameter", "obex.session",
2721 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
2722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2723 },
2724 { &hf_session_parameter_data,
2725 { "Parameter Value", "obex.session.value",
2726 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2728 },
2729 { &hf_session_parameter_tag,
2730 { "Tag", "obex.session.tag",
2731 FT_UINT8, BASE_HEX, VALS(session_tag_vals)((0 ? (const struct _value_string*)0 : ((session_tag_vals)))), 0x00,
2732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2733 },
2734 { &hf_session_parameter_length,
2735 { "Length", "obex.session.length",
2736 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
2737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2738 },
2739 { &hf_session_parameter_nonce,
2740 { "Nonce", "obex.session.nonce",
2741 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2743 },
2744 { &hf_session_parameter_session_id,
2745 { "Session ID", "obex.session.session_id",
2746 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2748 },
2749 { &hf_session_parameter_next_sequence_number,
2750 { "Next Sequence Number", "obex.session.next_sequence_number",
2751 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
2752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2753 },
2754 { &hf_session_parameter_timeout,
2755 { "Timeout", "obex.session.timeout",
2756 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
2757 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2758 },
2759 { &hf_session_parameter_opcode,
2760 { "Opcode", "obex.session.opcode",
2761 FT_UINT8, BASE_HEX, VALS(session_opcode_vals)((0 ? (const struct _value_string*)0 : ((session_opcode_vals)
)))
, 0,
2762 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2763 },
2764 { &hf_authentication_parameter,
2765 { "Authentication Parameter", "obex.authentication",
2766 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
2767 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2768 },
2769 { &hf_authentication_parameter_data,
2770 { "Parameter Value", "obex.authentication.value",
2771 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2772 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2773 },
2774 { &hf_authentication_challenge_tag,
2775 { "Tag", "obex.authentication.challenge_tag",
2776 FT_UINT8, BASE_HEX, VALS(authentication_challenge_tag_vals)((0 ? (const struct _value_string*)0 : ((authentication_challenge_tag_vals
))))
, 0x00,
2777 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2778 },
2779 { &hf_authentication_response_tag,
2780 { "Tag", "obex.authentication.response_tag",
2781 FT_UINT8, BASE_HEX, VALS(authentication_response_tag_vals)((0 ? (const struct _value_string*)0 : ((authentication_response_tag_vals
))))
, 0x00,
2782 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2783 },
2784 { &hf_authentication_length,
2785 { "Length", "obex.authentication.length",
2786 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
2787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2788 },
2789 { &hf_authentication_key,
2790 { "Key", "obex.authentication.key",
2791 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2793 },
2794 { &hf_authentication_result_key,
2795 { "Result Key", "obex.authentication.result_key",
2796 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2798 },
2799 { &hf_authentication_user_id,
2800 { "User Id", "obex.authentication.user_id",
2801 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2803 },
2804 { &hf_authentication_option_reserved,
2805 { "Reserved", "obex.authentication.option.reserved",
2806 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
2807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2808 },
2809 { &hf_authentication_option_read_only,
2810 { "Read Only", "obex.authentication.option.read_only",
2811 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
2812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2813 },
2814 { &hf_authentication_option_user_id,
2815 { "User ID", "obex.authentication.option.user_id",
2816 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
2817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2818 },
2819 { &hf_authentication_info_charset,
2820 { "Charset", "obex.authentication.info.charset",
2821 FT_UINT8, BASE_HEX, VALS(info_charset_vals)((0 ? (const struct _value_string*)0 : ((info_charset_vals)))
)
, 0,
2822 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2823 },
2824 { &hf_authentication_info,
2825 { "Info", "obex.authentication.info",
2826 FT_STRING, BASE_NONE, NULL((void*)0), 0,
2827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2828 },
2829 { &hf_application_parameter,
2830 { "Parameter", "obex.parameter",
2831 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
2832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2833 },
2834 { &hf_application_parameter_id,
2835 { "Parameter Id", "obex.parameter.id",
2836 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
2837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2838 },
2839 { &hf_application_parameter_length,
2840 { "Parameter Length", "obex.parameter.length",
2841 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
2842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2843 },
2844 { &hf_application_parameter_data,
2845 { "Parameter Value", "obex.parameter.value",
2846 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
2847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2848 },
2849 /* application parameters for BPP */
2850 { &hf_bpp_application_parameter_id,
2851 { "Parameter Id", "obex.parameter.id",
2852 FT_UINT8, BASE_HEX | BASE_EXT_STRING0x00000200, &bpp_application_parameters_vals_ext, 0x00,
2853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2854 },
2855 { &hf_bpp_application_parameter_data_offset,
2856 { "Offset", "obex.parameter.value.offset",
2857 FT_UINT32, BASE_DEC_HEX, NULL((void*)0), 0,
2858 "The byte offset into the image or file.", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2859 },
2860 { &hf_bpp_application_parameter_data_count,
2861 { "Count", "obex.parameter.value.count",
2862 FT_INT32, BASE_DEC, NULL((void*)0), 0,
2863 "The number of bytes of the image or file to be sent.", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2864 },
2865 { &hf_bpp_application_parameter_data_job_id,
2866 { "Job ID", "obex.parameter.value.job_id",
2867 FT_UINT32, BASE_DEC_HEX, NULL((void*)0), 0,
2868 "The job identifier of the print job.", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2869 },
2870 { &hf_bpp_application_parameter_data_file_size,
2871 { "File Size", "obex.parameter.value.file_size",
2872 FT_INT32, BASE_DEC, NULL((void*)0), 0,
2873 "The size (in bytes) of object or file.", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2874 },
2875 /* application parameters for BIP */
2876 { &hf_bip_application_parameter_id,
2877 { "Parameter Id", "obex.parameter.id",
2878 FT_UINT8, BASE_HEX | BASE_EXT_STRING0x00000200, &bip_application_parameters_vals_ext, 0x00,
2879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2880 },
2881 { &hf_bip_application_parameter_data_number_of_returned_handles,
2882 { "Number of Returned Handles", "obex.parameter.value.number_of_returned_handles",
2883 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
2884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2885 },
2886 { &hf_bip_application_parameter_data_list_start_offset,
2887 { "List Start Offset", "obex.parameter.value.list_start_offset",
2888 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
2889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2890 },
2891 { &hf_bip_application_parameter_data_latest_captured_images,
2892 { "Latest Captured Images", "obex.parameter.value.latest_captured_images",
2893 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
2894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2895 },
2896 { &hf_bip_application_parameter_data_partial_file_length,
2897 { "Partial File Length", "obex.parameter.value.partial_file_length",
2898 FT_UINT32, BASE_DEC_HEX, NULL((void*)0), 0x00,
2899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2900 },
2901 { &hf_bip_application_parameter_data_partial_file_start_offset,
2902 { "Partial File Start Offset", "obex.parameter.value.partial_file_start_offset",
2903 FT_UINT32, BASE_DEC_HEX, NULL((void*)0), 0x00,
2904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2905 },
2906 { &hf_bip_application_parameter_data_total_file_size,
2907 { "Total File Size", "obex.parameter.value.total_file_size",
2908 FT_UINT32, BASE_DEC_HEX, NULL((void*)0), 0x00,
2909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2910 },
2911 { &hf_bip_application_parameter_data_end_flag,
2912 { "End Flag", "obex.parameter.value.end_flag",
2913 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
2914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2915 },
2916 { &hf_bip_application_parameter_data_remote_display,
2917 { "Remote Display", "obex.parameter.value.remote_display",
2918 FT_UINT8, BASE_HEX, VALS(bip_remote_display_vals)((0 ? (const struct _value_string*)0 : ((bip_remote_display_vals
))))
, 0x00,
2919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2920 },
2921 { &hf_bip_application_parameter_data_service_id,
2922 { "Service ID", "obex.parameter.value.service_id",
2923 FT_UINT16, BASE_HEX | BASE_EXT_STRING0x00000200, &bluetooth_uuid_vals_ext, 0x00,
2924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2925 },
2926 { &hf_bip_application_parameter_data_store_flag,
2927 { "Store Flag", "obex.parameter.value.store_flag",
2928 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
2929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
2930 },
2931 /* application parameters for PBAP */
2932 { &hf_pbap_application_parameter_id,
2933 { "Parameter Id", "obex.parameter.id",
2934 FT_UINT8, BASE_HEX | BASE_EXT_STRING0x00000200, &pbap_application_parameters_vals_ext, 0x00,
2935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2936 },
2937 { &hf_pbap_application_parameter_data_order,
2938 { "Max List Count", "obex.parameter.value.order",
2939 FT_UINT8, BASE_HEX, VALS(pbap_order_vals)((0 ? (const struct _value_string*)0 : ((pbap_order_vals)))), 0x00,
2940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2941 },
2942 { &hf_pbap_application_parameter_data_search_value,
2943 { "Search Value", "obex.parameter.value.search_value",
2944 FT_STRING, BASE_NONE, NULL((void*)0), 0x00,
2945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2946 },
2947 { &hf_pbap_application_parameter_data_search_attribute,
2948 { "Search Attribute", "obex.parameter.value.search_attribute",
2949 FT_UINT8, BASE_HEX, VALS(pbap_search_attribute_vals)((0 ? (const struct _value_string*)0 : ((pbap_search_attribute_vals
))))
, 0x00,
2950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2951 },
2952 { &hf_pbap_application_parameter_data_max_list_count,
2953 { "Max List Count", "obex.parameter.value.max_list_count",
2954 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
2955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2956 },
2957 { &hf_pbap_application_parameter_data_list_start_offset,
2958 { "List Start Offset", "obex.parameter.value.list_start_offset",
2959 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
2960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2961 },
2962 { &hf_pbap_application_parameter_data_filter,
2963 { "Filter", "obex.parameter.value.filter",
2964 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
2965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2966 },
2967 { &hf_pbap_application_parameter_vcard_selector,
2968 { "vCard Selector", "obex.parameter.value.vcard_selector",
2969 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
2970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2971 },
2972 { &hf_pbap_application_parameter_data_filter_version,
2973 { "vCard Version", "obex.parameter.value.filter.version",
2974 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001,
2975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2976 },
2977 { &hf_pbap_application_parameter_data_filter_fn,
2978 { "Formatted Name", "obex.parameter.value.filter.fn",
2979 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002,
2980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2981 },
2982 { &hf_pbap_application_parameter_data_filter_n,
2983 { "Structured Presentation of Name", "obex.parameter.value.filter.n",
2984 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
2985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2986 },
2987 { &hf_pbap_application_parameter_data_filter_photo,
2988 { "Associated Image or Photo", "obex.parameter.value.filter.photo",
2989 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
2990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2991 },
2992 { &hf_pbap_application_parameter_data_filter_birthday,
2993 { "Birthday", "obex.parameter.value.filter.birthday",
2994 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
2995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
2996 },
2997 { &hf_pbap_application_parameter_data_filter_adr,
2998 { "Delivery Address", "obex.parameter.value.filter.adr",
2999 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
3000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3001 },
3002 { &hf_pbap_application_parameter_data_filter_label,
3003 { "Delivery", "obex.parameter.value.filter.label",
3004 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
3005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3006 },
3007 { &hf_pbap_application_parameter_data_filter_tel,
3008 { "Telephone Number", "obex.parameter.value.filter.tel",
3009 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
3010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3011 },
3012 { &hf_pbap_application_parameter_data_filter_email,
3013 { "Electronic Mail Address", "obex.parameter.value.filter.email",
3014 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
3015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3016 },
3017 { &hf_pbap_application_parameter_data_filter_mailer,
3018 { "Electronic Mail", "obex.parameter.value.filter.mailer",
3019 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
3020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3021 },
3022 { &hf_pbap_application_parameter_data_filter_time_zone,
3023 { "Time Zone", "obex.parameter.value.filter.time_zone",
3024 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
3025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3026 },
3027 { &hf_pbap_application_parameter_data_filter_geographic_position,
3028 { "Geographic Position", "obex.parameter.value.filter.geographic_position",
3029 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
3030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3031 },
3032 { &hf_pbap_application_parameter_data_filter_title,
3033 { "Job", "obex.parameter.value.filter.title",
3034 FT_BOOLEAN, 32, NULL((void*)0), 0x00001000,
3035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3036 },
3037 { &hf_pbap_application_parameter_data_filter_role,
3038 { "Role within the Organization", "obex.parameter.value.filter.role",
3039 FT_BOOLEAN, 32, NULL((void*)0), 0x00002000,
3040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3041 },
3042 { &hf_pbap_application_parameter_data_filter_logo,
3043 { "Organization Logo", "obex.parameter.value.filter.logo",
3044 FT_BOOLEAN, 32, NULL((void*)0), 0x00004000,
3045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3046 },
3047 { &hf_pbap_application_parameter_data_filter_agent,
3048 { "vCard of Person Representing", "obex.parameter.value.filter.agent",
3049 FT_BOOLEAN, 32, NULL((void*)0), 0x00008000,
3050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3051 },
3052 { &hf_pbap_application_parameter_data_filter_name_of_organization,
3053 { "Name of Organization", "obex.parameter.value.filter.name_of_organization",
3054 FT_BOOLEAN, 32, NULL((void*)0), 0x00010000,
3055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3056 },
3057 { &hf_pbap_application_parameter_data_filter_comments,
3058 { "Comments", "obex.parameter.value.filter.comments",
3059 FT_BOOLEAN, 32, NULL((void*)0), 0x00020000,
3060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3061 },
3062 { &hf_pbap_application_parameter_data_filter_revision,
3063 { "Revision", "obex.parameter.value.filter.revision",
3064 FT_BOOLEAN, 32, NULL((void*)0), 0x00040000,
3065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3066 },
3067 { &hf_pbap_application_parameter_data_filter_pronunciation_of_name,
3068 { "Pronunciation of Name", "obex.parameter.value.filter.pronunciation_of_name",
3069 FT_BOOLEAN, 32, NULL((void*)0), 0x00080000,
3070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3071 },
3072 { &hf_pbap_application_parameter_data_filter_url,
3073 { "Uniform Resource Locator", "obex.parameter.value.filter.url",
3074 FT_BOOLEAN, 32, NULL((void*)0), 0x00100000,
3075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3076 },
3077 { &hf_pbap_application_parameter_data_filter_uid,
3078 { "Unique ID", "obex.parameter.value.filter.uid",
3079 FT_BOOLEAN, 32, NULL((void*)0), 0x00200000,
3080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3081 },
3082 { &hf_pbap_application_parameter_data_filter_key,
3083 { "Public Encryption Key", "obex.parameter.value.filter.key",
3084 FT_BOOLEAN, 32, NULL((void*)0), 0x00400000,
3085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3086 },
3087 { &hf_pbap_application_parameter_data_filter_nickname,
3088 { "Nickname", "obex.parameter.value.filter.nickname",
3089 FT_BOOLEAN, 32, NULL((void*)0), 0x00800000,
3090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3091 },
3092 { &hf_pbap_application_parameter_data_filter_categories,
3093 { "Categories", "obex.parameter.value.filter.categories",
3094 FT_BOOLEAN, 32, NULL((void*)0), 0x01000000,
3095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3096 },
3097 { &hf_pbap_application_parameter_data_filter_product_id,
3098 { "Product ID", "obex.parameter.value.filter.product_id",
3099 FT_BOOLEAN, 32, NULL((void*)0), 0x02000000,
3100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3101 },
3102 { &hf_pbap_application_parameter_data_filter_class,
3103 { "Class Information", "obex.parameter.value.filter.class",
3104 FT_BOOLEAN, 32, NULL((void*)0), 0x04000000,
3105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3106 },
3107 { &hf_pbap_application_parameter_data_filter_sort_string,
3108 { "String Used For Sorting Operations", "obex.parameter.value.filter.sort_string",
3109 FT_BOOLEAN, 32, NULL((void*)0), 0x08000000,
3110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3111 },
3112 { &hf_pbap_application_parameter_data_filter_timestamp,
3113 { "Timestamp", "obex.parameter.value.filter.timestamp",
3114 FT_BOOLEAN, 32, NULL((void*)0), 0x10000000,
3115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3116 },
3117 { &hf_pbap_application_parameter_data_filter_reserved_29_31,
3118 { "Reserved", "obex.parameter.value.filter.reserved_29_31",
3119 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000,
3120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3121 },
3122 { &hf_pbap_application_parameter_data_filter_reserved_32_38,
3123 { "Reserved", "obex.parameter.value.filter.reserved_32_38",
3124 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000007F,
3125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3126 },
3127 { &hf_pbap_application_parameter_data_filter_proprietary_filter,
3128 { "Proprietary Filter", "obex.parameter.value.filter.proprietary_filter",
3129 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
3130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3131 },
3132 { &hf_pbap_application_parameter_data_filter_reserved_for_proprietary_filter_usage,
3133 { "Reserved for Proprietary Filter Usage", "obex.parameter.value.filter.reserved_for_proprietary_filter_usage",
3134 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFFFFFF00,
3135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3136 },
3137 { &hf_pbap_application_parameter_data_format,
3138 { "Format", "obex.parameter.value.format",
3139 FT_UINT8, BASE_HEX, VALS(pbap_format_vals)((0 ? (const struct _value_string*)0 : ((pbap_format_vals)))), 0x00,
3140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3141 },
3142 { &hf_pbap_application_parameter_data_phonebook_size,
3143 { "Phonebook Size", "obex.parameter.value.phonebook_size",
3144 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
3145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3146 },
3147 { &hf_pbap_application_parameter_data_new_missed_calls,
3148 { "New Missed Calls", "obex.parameter.value.new_missed_calls",
3149 FT_UINT8, BASE_DEC, NULL((void*)0), 0x00,
3150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3151 },
3152 { &hf_pbap_application_parameter_data_primary_version_counter,
3153 { "Primary Version Counter", "obex.parameter.value.primary_version_counter",
3154 FT_BYTES, BASE_NONE, NULL((void*)0), 0x00,
3155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3156 },
3157 { &hf_pbap_application_parameter_data_secondary_version_counter,
3158 { "Secondary Version Counter", "obex.parameter.value.secondary_version_counter",
3159 FT_BYTES, BASE_NONE, NULL((void*)0), 0x00,
3160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3161 },
3162 { &hf_pbap_application_parameter_data_database_identifier,
3163 { "Database Identifier", "obex.parameter.value.database_identifier",
3164 FT_BYTES, BASE_NONE, NULL((void*)0), 0x00,
3165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3166 },
3167 { &hf_pbap_application_parameter_data_vcard_selector_operator,
3168 { "vCard Selector Operator", "obex.parameter.value.vcard_selector_operator",
3169 FT_UINT8, BASE_HEX, VALS(pbap_application_parameter_data_vcard_selector_operator_vals)((0 ? (const struct _value_string*)0 : ((pbap_application_parameter_data_vcard_selector_operator_vals
))))
, 0x00,
3170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3171 },
3172 { &hf_pbap_application_parameter_data_reset_new_missed_calls,
3173 { "vCard Selector Operator", "obex.parameter.value.reset_new_missed_calls",
3174 FT_UINT8, BASE_HEX, VALS(pbap_application_parameter_data_reset_new_missed_calls_vals)((0 ? (const struct _value_string*)0 : ((pbap_application_parameter_data_reset_new_missed_calls_vals
))))
, 0x00,
3175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3176 },
3177 { &hf_pbap_application_parameter_data_supported_features,
3178 { "Supported Features", "obex.parameter.supported_features",
3179 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
3180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3181 },
3182 { &hf_pbap_application_parameter_data_supported_features_reserved,
3183 { "Reserved", "obex.parameter.supported_features.reserved",
3184 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFFFFFC00,
3185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3186 },
3187 { &hf_pbap_application_parameter_data_supported_features_default_contact_image_format,
3188 { "Default Contact Image Format", "obex.parameter.supported_features.default_contact_image_format",
3189 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
3190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3191 },
3192 { &hf_pbap_application_parameter_data_supported_features_contact_referencing,
3193 { "Contact Referencing", "obex.parameter.supported_features.contact_referencing",
3194 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
3195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3196 },
3197 { &hf_pbap_application_parameter_data_supported_features_x_bt_uid_vcard_property,
3198 { "X-BT-UID vCard Property", "obex.parameter.supported_features.x_bt_uid_vcard_property",
3199 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
3200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3201 },
3202 { &hf_pbap_application_parameter_data_supported_features_x_bt_uci_vcard_property,
3203 { "X-BT-UCI vCard Property", "obex.parameter.supported_features.x_bt_uci_vcard_property",
3204 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
3205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3206 },
3207 { &hf_pbap_application_parameter_data_supported_features_enhanced_missed_calls,
3208 { "Enhanced Missed Calls", "obex.parameter.supported_features.enhanced_missed_calls",
3209 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
3210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3211 },
3212 { &hf_pbap_application_parameter_data_supported_features_vcard_selecting,
3213 { "vCard Selecting", "obex.parameter.supported_features.vcard_selecting",
3214 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
3215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3216 },
3217 { &hf_pbap_application_parameter_data_supported_features_folder_version_counters,
3218 { "Folder Version Counters", "obex.parameter.supported_features.folder_version_counters",
3219 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
3220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3221 },
3222 { &hf_pbap_application_parameter_data_supported_features_database_identifier,
3223 { "Database Identifier", "obex.parameter.supported_features.database_identifier",
3224 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
3225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3226 },
3227 { &hf_pbap_application_parameter_data_supported_features_browsing,
3228 { "Browsing", "obex.parameter.supported_features.browsing",
3229 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002,
3230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3231 },
3232 { &hf_pbap_application_parameter_data_supported_features_download,
3233 { "Download", "obex.parameter.supported_features.download",
3234 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001,
3235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3236 },
3237 /* application parameters for MAP */
3238 { &hf_map_application_parameter_id,
3239 { "Parameter Id", "obex.parameter.id",
3240 FT_UINT8, BASE_HEX | BASE_EXT_STRING0x00000200, &map_application_parameters_vals_ext, 0x00,
3241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3242 },
3243 { &hf_map_application_parameter_data_max_list_count,
3244 { "Max List Count", "obex.parameter.value.max_list_count",
3245 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
3246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3247 },
3248 { &hf_map_application_parameter_data_start_offset,
3249 { "Start Offset", "obex.parameter.value.start_offset",
3250 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
3251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3252 },
3253 { &hf_map_application_parameter_data_filter_message_type_reserved,
3254 { "Reserved", "obex.parameter.value.filter_message_type.reserved",
3255 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
3256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3257 },
3258 { &hf_map_application_parameter_data_filter_message_type_mms,
3259 { "MMS", "obex.parameter.value.filter_message_type.mms",
3260 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
3261 "True to filter out, False to listing this type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3262 },
3263 { &hf_map_application_parameter_data_filter_message_type_email,
3264 { "EMAIL", "obex.parameter.value.filter_message_type.sms_email",
3265 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
3266 "True to filter out, False to listing this type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3267 },
3268 { &hf_map_application_parameter_data_filter_message_type_sms_cdma,
3269 { "SMS_CDMA", "obex.parameter.value.filter_message_type.sms_cdma",
3270 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
3271 "True to filter out, False to listing this type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3272 },
3273 { &hf_map_application_parameter_data_filter_message_type_sms_gsm,
3274 { "SMS_GSM", "obex.parameter.value.filter_message_type.sms_gsm",
3275 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3277 },
3278 { &hf_map_application_parameter_data_filter_period_begin,
3279 { "Filter Period Begin", "obex.parameter.value.filter_period_begin",
3280 FT_STRING, BASE_NONE, NULL((void*)0), 0,
3281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3282 },
3283 { &hf_map_application_parameter_data_filter_period_end,
3284 { "Filter Period End", "obex.parameter.value.filter_period_end",
3285 FT_STRING, BASE_NONE, NULL((void*)0), 0,
3286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3287 },
3288 { &hf_map_application_parameter_data_filter_read_status_reserved_6,
3289 { "Filter Read Status: Reserved", "obex.parameter.value.filter_read_status.reserved",
3290 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
3291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3292 },
3293 { &hf_map_application_parameter_data_filter_read_status_get_read,
3294 { "Filter Read Status: Get Read", "obex.parameter.value.filter_read_status.get_read",
3295 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
3296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3297 },
3298 { &hf_map_application_parameter_data_filter_read_status_get_unread,
3299 { "Filter Read Status: Get Unread", "obex.parameter.value.filter_read_status.get_unread",
3300 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3302 },
3303 { &hf_map_application_parameter_data_filter_recipient,
3304 { "Filter Recipient", "obex.parameter.value.filter_recipient",
3305 FT_STRING, BASE_NONE, NULL((void*)0), 0,
3306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3307 },
3308 { &hf_map_application_parameter_data_filter_originator,
3309 { "Filter Originator", "obex.parameter.value.filter_originator",
3310 FT_STRING, BASE_NONE, NULL((void*)0), 0,
3311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3312 },
3313 { &hf_map_application_parameter_data_filter_priority_reserved_6,
3314 { "Filter Priority: Reserved", "obex.parameter.value.filter_priority.reserved",
3315 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
3316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3317 },
3318 { &hf_map_application_parameter_data_filter_priority_get_high,
3319 { "Filter Priority: Get Read", "obex.parameter.value.filter_priority.get_high",
3320 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
3321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3322 },
3323 { &hf_map_application_parameter_data_filter_priority_non_high,
3324 { "Filter Priority: Get Non High", "obex.parameter.value.filter_priority.non_high",
3325 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3327 },
3328 { &hf_map_application_parameter_data_reserved_7,
3329 { "Reserved", "obex.parameter.value.reserved",
3330 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE,
3331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3332 },
3333 { &hf_map_application_parameter_data_attachment,
3334 { "Attachment", "obex.parameter.value.attachment",
3335 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3337 },
3338 { &hf_map_application_parameter_data_transparent,
3339 { "Transparent", "obex.parameter.value.transparent",
3340 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3342 },
3343 { &hf_map_application_parameter_data_retry,
3344 { "Retry", "obex.parameter.value.retry",
3345 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3347 },
3348 { &hf_map_application_parameter_data_new_message,
3349 { "New Message", "obex.parameter.value.new_message",
3350 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3352 },
3353 { &hf_map_application_parameter_data_notification_status,
3354 { "Notification Status", "obex.parameter.value.notification_status",
3355 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3357 },
3358 { &hf_map_application_parameter_data_mas_instance_id,
3359 { "MAS Instance ID", "obex.parameter.value.mas_instance_id",
3360 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0,
3361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3362 },
3363 { &hf_map_application_parameter_data_parameter_mask_reserved,
3364 { "Parameter Mask: Reserved", "obex.parameter.value.parameter_mask.reserved",
3365 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFFFF0000,
3366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3367 },
3368 { &hf_map_application_parameter_data_parameter_mask_reply_to_addressing,
3369 { "Parameter Mask: Reply to Addressing", "obex.parameter.value.parameter_mask.reply_to_addressing",
3370 FT_BOOLEAN, 32, NULL((void*)0), 0x00008000,
3371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3372 },
3373 { &hf_map_application_parameter_data_parameter_mask_protected,
3374 { "Parameter Mask: Protected", "obex.parameter.value.parameter_mask.protected",
3375 FT_BOOLEAN, 32, NULL((void*)0), 0x00004000,
3376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3377 },
3378 { &hf_map_application_parameter_data_parameter_mask_sent,
3379 { "Parameter Mask: Sent", "obex.parameter.value.parameter_mask.sent",
3380 FT_BOOLEAN, 32, NULL((void*)0), 0x00002000,
3381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3382 },
3383 { &hf_map_application_parameter_data_parameter_mask_read,
3384 { "Parameter Mask: Read", "obex.parameter.value.parameter_mask.read",
3385 FT_BOOLEAN, 32, NULL((void*)0), 0x00001000,
3386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3387 },
3388 { &hf_map_application_parameter_data_parameter_mask_priority,
3389 { "Parameter Mask: Priority", "obex.parameter.value.parameter_mask.priority",
3390 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
3391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3392 },
3393 { &hf_map_application_parameter_data_parameter_mask_attachment_size,
3394 { "Parameter Mask: Attachment Size", "obex.parameter.value.parameter_mask.attachment_size",
3395 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
3396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3397 },
3398 { &hf_map_application_parameter_data_parameter_mask_text,
3399 { "Parameter Mask: Text", "obex.parameter.value.parameter_mask.text",
3400 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
3401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3402 },
3403 { &hf_map_application_parameter_data_parameter_mask_reception_status,
3404 { "Parameter Mask: Reception Status", "obex.parameter.value.parameter_mask.reception_status",
3405 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
3406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3407 },
3408 { &hf_map_application_parameter_data_parameter_mask_size,
3409 { "Parameter Mask: Size", "obex.parameter.value.parameter_mask.size",
3410 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
3411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3412 },
3413 { &hf_map_application_parameter_data_parameter_mask_type,
3414 { "Parameter Mask: Type", "obex.parameter.value.parameter_mask.type",
3415 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
3416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3417 },
3418 { &hf_map_application_parameter_data_parameter_mask_recipient_addressing,
3419 { "Parameter Mask: Recipient Addressing", "obex.parameter.value.parameter_mask.recipient_addressing",
3420 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
3421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3422 },
3423 { &hf_map_application_parameter_data_parameter_mask_recipient_name,
3424 { "Parameter Mask: Recipient Name", "obex.parameter.value.parameter_mask.recipient_name",
3425 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
3426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3427 },
3428 { &hf_map_application_parameter_data_parameter_mask_sender_addressing,
3429 { "Parameter Mask: Sender Addressing", "obex.parameter.value.parameter_mask.sender_addressing",
3430 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
3431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3432 },
3433 { &hf_map_application_parameter_data_parameter_mask_sender_name,
3434 { "Parameter Mask: Sender Name", "obex.parameter.value.parameter_mask.sender_name",
3435 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
3436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3437 },
3438 { &hf_map_application_parameter_data_parameter_mask_datetime,
3439 { "Parameter Mask: Datetime", "obex.parameter.value.parameter_mask.datetime",
3440 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002,
3441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3442 },
3443 { &hf_map_application_parameter_data_parameter_mask_subject,
3444 { "Parameter Mask: Subject", "obex.parameter.value.parameter_mask.subject",
3445 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001,
3446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3447 },
3448 { &hf_map_application_parameter_data_folder_listing_size,
3449 { "Folder Listing Size", "obex.parameter.value.folder_listing_size",
3450 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0,
3451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3452 },
3453 { &hf_map_application_parameter_data_messages_listing_size,
3454 { "Messages Listing Size", "obex.parameter.value.messages_listing_size",
3455 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0,
3456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3457 },
3458 { &hf_map_application_parameter_data_subject_length,
3459 { "Subject Length", "obex.parameter.value.subject_length",
3460 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0,
3461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3462 },
3463 { &hf_map_application_parameter_data_charset,
3464 { "Charset", "obex.parameter.value.charset",
3465 FT_UINT8, BASE_HEX, VALS(map_charset_vals)((0 ? (const struct _value_string*)0 : ((map_charset_vals)))), 0x01,
3466 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3467 },
3468 { &hf_map_application_parameter_data_fraction_request,
3469 { "Fraction Request", "obex.parameter.value.fraction_request",
3470 FT_UINT8, BASE_HEX, VALS(map_fraction_request_vals)((0 ? (const struct _value_string*)0 : ((map_fraction_request_vals
))))
, 0x01,
3471 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3472 },
3473 { &hf_map_application_parameter_data_fraction_deliver,
3474 { "Fraction Deliver", "obex.parameter.value.fraction_deliver",
3475 FT_UINT8, BASE_HEX, VALS(map_fraction_deliver_vals)((0 ? (const struct _value_string*)0 : ((map_fraction_deliver_vals
))))
, 0x01,
3476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3477 },
3478 { &hf_map_application_parameter_data_status_indicator,
3479 { "Status Indicator", "obex.parameter.value.status_indicator",
3480 FT_UINT8, BASE_HEX, VALS(map_status_indicator_vals)((0 ? (const struct _value_string*)0 : ((map_status_indicator_vals
))))
, 0x01,
3481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3482 },
3483 { &hf_map_application_parameter_data_status_value,
3484 { "Status Value", "obex.parameter.value.status_value",
3485 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3486 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3487 },
3488 { &hf_map_application_parameter_data_mse_time,
3489 { "MSE Time", "obex.parameter.value.mse_time",
3490 FT_STRING, BASE_NONE, NULL((void*)0), 0,
3491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3492 },
3493 /* application parameters for GPP */
3494 { &hf_gpp_application_parameter_id,
3495 { "Parameter Id", "obex.parameter.gpp.id",
3496 FT_UINT8, BASE_HEX, VALS(gpp_application_parameters_vals)((0 ? (const struct _value_string*)0 : ((gpp_application_parameters_vals
))))
, 0x00,
3497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3498 },
3499 { &hf_gpp_application_parameter_data_max_list_count,
3500 { "Max List Count", "obex.parameter.gpp.value.max_list_count",
3501 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
3502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3503 },
3504 { &hf_gpp_application_parameter_data_list_start_offset,
3505 { "List Start Offset", "obex.parameter.gpp.value.list_start_offset",
3506 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
3507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3508 },
3509 { &hf_gpp_application_parameter_data_reserved_7,
3510 { "Reserved", "obex.parameter.gpp.value.reserved",
3511 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE,
3512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3513 },
3514 { &hf_gpp_application_parameter_data_notification_status,
3515 { "Notification Status", "obex.parameter.gpp.value.notification_status",
3516 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
3517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3518 },
3519 { &hf_gpp_application_parameter_data_instance_id,
3520 { "Instance ID", "obex.parameter.gpp.value.instance_id",
3521 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0,
3522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3523 },
3524 { &hf_gpp_application_parameter_data_listing_size,
3525 { "Listing Size", "obex.parameter.gpp.value.listing_size",
3526 FT_UINT16, BASE_DEC_HEX, NULL((void*)0), 0x00,
3527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3528 },
3529 /* application parameters for CTN */
3530 { &hf_ctn_application_parameter_id,
3531 { "Parameter Id", "obex.parameter.ctn.id",
3532 FT_UINT8, BASE_HEX, VALS(ctn_application_parameters_vals)((0 ? (const struct _value_string*)0 : ((ctn_application_parameters_vals
))))
, 0x00,
3533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3534 },
3535 { &hf_ctn_application_parameter_data_acoustic_alarm_status,
3536 { "Acoustic Alarm Status", "obex.parameter.ctn.acoustic_alarm_status",
3537 FT_UINT8, BASE_HEX, VALS(off_on_vals)((0 ? (const struct _value_string*)0 : ((off_on_vals)))), 0x00,
3538 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3539 },
3540 { &hf_ctn_application_parameter_data_attachment,
3541 { "Attachment", "obex.parameter.ctn.attachment",
3542 FT_UINT8, BASE_HEX, VALS(ctn_application_parameter_data_attachment_vals)((0 ? (const struct _value_string*)0 : ((ctn_application_parameter_data_attachment_vals
))))
, 0x00,
3543 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3544 },
3545 { &hf_ctn_application_parameter_data_send,
3546 { "Attachment", "obex.parameter.ctn.attachment",
3547 FT_UINT8, BASE_HEX, VALS(no_yes_vals)((0 ? (const struct _value_string*)0 : ((no_yes_vals)))), 0x00,
3548 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3549 },
3550 { &hf_ctn_application_parameter_data_filter_period_begin,
3551 { "Filter Period Begin", "obex.parameter.ctn.filter_period_begin",
3552 FT_STRING, BASE_NONE, NULL((void*)0), 0x00,
3553 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3554 },
3555 { &hf_ctn_application_parameter_data_filter_period_end,
3556 { "Filter Period End", "obex.parameter.ctn.filter_period_end",
3557 FT_STRING, BASE_NONE, NULL((void*)0), 0x00,
3558 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3559 },
3560 { &hf_ctn_application_parameter_data_parameter_mask,
3561 { "Parameter Mask", "obex.parameter.ctn.parameter_mask",
3562 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00,
3563 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3564 },
3565 { &hf_ctn_application_parameter_data_parameter_mask_reserved,
3566 { "Reserved", "obex.parameter.ctn.parameter_mask.reserved",
3567 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFFFFFC00,
3568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3569 },
3570 { &hf_ctn_application_parameter_data_parameter_mask_recurrent,
3571 { "Recurrent", "obex.parameter.ctn.parameter_mask.recurrent",
3572 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000200,
3573 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3574 },
3575 { &hf_ctn_application_parameter_data_parameter_mask_send_status,
3576 { "Send Status", "obex.parameter.ctn.parameter_mask.send_status",
3577 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000100,
3578 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3579 },
3580 { &hf_ctn_application_parameter_data_parameter_mask_alarm_status,
3581 { "Alarm Status", "obex.parameter.ctn.parameter_mask.alarm_status",
3582 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000080,
3583 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3584 },
3585 { &hf_ctn_application_parameter_data_parameter_mask_pstatus,
3586 { "pStatus", "obex.parameter.ctn.parameter_mask.pstatus",
3587 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000040,
3588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3589 },
3590 { &hf_ctn_application_parameter_data_parameter_mask_priority,
3591 { "Priority", "obex.parameter.ctn.parameter_mask.priority",
3592 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000020,
3593 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3594 },
3595 { &hf_ctn_application_parameter_data_parameter_mask_originator_address,
3596 { "Originator Address", "obex.parameter.ctn.parameter_mask.originator_address",
3597 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000010,
3598 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3599 },
3600 { &hf_ctn_application_parameter_data_parameter_mask_originator_name,
3601 { "Originator Name", "obex.parameter.ctn.parameter_mask.originator_name",
3602 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000008,
3603 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3604 },
3605 { &hf_ctn_application_parameter_data_parameter_mask_end_time,
3606 { "End Time", "obex.parameter.ctn.parameter_mask.end_time",
3607 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000004,
3608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3609 },
3610 { &hf_ctn_application_parameter_data_parameter_mask_summary,
3611 { "Summary", "obex.parameter.ctn.parameter_mask.summary",
3612 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000002,
3613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3614 },
3615 { &hf_ctn_application_parameter_data_parameter_mask_attachment,
3616 { "Attachment", "obex.parameter.ctn.parameter_mask.attachment",
3617 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000001,
3618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3619 },
3620 { &hf_ctn_application_parameter_data_status_indicator,
3621 { "Status Indicator", "obex.parameter.ctn.status_indicator",
3622 FT_UINT8, BASE_HEX, VALS(ctn_application_parameter_data_status_indicator_vals)((0 ? (const struct _value_string*)0 : ((ctn_application_parameter_data_status_indicator_vals
))))
, 0x00,
3623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3624 },
3625 { &hf_ctn_application_parameter_data_status_value,
3626 { "Status Value", "obex.parameter.ctn.status_value",
3627 FT_UINT8, BASE_HEX, VALS(ctn_application_parameter_data_status_value_vals)((0 ? (const struct _value_string*)0 : ((ctn_application_parameter_data_status_value_vals
))))
, 0x00,
3628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3629 },
3630 { &hf_ctn_application_parameter_data_postpone_val,
3631 { "Postpone Val", "obex.parameter.ctn.postpone_val",
3632 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
3633 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3634 },
3635 { &hf_ctn_application_parameter_data_email_uri,
3636 { "Email URI", "obex.parameter.ctn.email_uri",
3637 FT_STRING, BASE_NONE, NULL((void*)0), 0x00,
3638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3639 },
3640 { &hf_ctn_application_parameter_data_cse_time,
3641 { "CSE Time", "obex.parameter.ctn.cse_time",
3642 FT_STRING, BASE_NONE, NULL((void*)0), 0x00,
3643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3644 },
3645 { &hf_ctn_application_parameter_data_recurrent,
3646 { "Recurrent", "obex.parameter.ctn.recurrent",
3647 FT_UINT8, BASE_HEX, VALS(no_yes_vals)((0 ? (const struct _value_string*)0 : ((no_yes_vals)))), 0x00,
3648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3649 },
3650 { &hf_ctn_application_parameter_data_attach_id,
3651 { "Attach ID", "obex.parameter.ctn.attach_id",
3652 FT_UINT8, BASE_DEC, NULL((void*)0), 0x00,
3653 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3654 },
3655 { &hf_ctn_application_parameter_data_last_update,
3656 { "Last Update", "obex.parameter.ctn.last_update",
3657 FT_STRING, BASE_NONE, NULL((void*)0), 0x00,
3658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3659 },
3660 /* for fragmentation */
3661 { &hf_obex_fragment_overlap,
3662 { "Fragment overlap", "obex.fragment.overlap", FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
3663 "Fragment overlaps with other fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3664 },
3665 { &hf_obex_fragment_overlap_conflict,
3666 { "Conflicting data in fragment overlap", "obex.fragment.overlap.conflict", FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
3667 "Overlapping fragments contained conflicting data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3668 },
3669 { &hf_obex_fragment_multiple_tails,
3670 { "Multiple tail fragments found", "obex.fragment.multipletails", FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
3671 "Several tails were found when defragmenting the packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3672 },
3673 { &hf_obex_fragment_too_long_fragment,
3674 { "Fragment too long", "obex.fragment.toolongfragment", FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
3675 "Fragment contained data past end of packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3676 },
3677 { &hf_obex_fragment_error,
3678 { "Defragmentation error", "obex.fragment.error", FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
3679 "Defragmentation error due to illegal fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3680 },
3681 { &hf_obex_fragment_count,
3682 { "Fragment count", "obex.fragment.count", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
3683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3684 },
3685 { &hf_obex_fragment,
3686 { "OBEX Fragment", "obex.fragment", FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
3687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3688 },
3689 { &hf_obex_fragments,
3690 { "OBEX Fragments", "obex.fragments", FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
3691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3692 },
3693 { &hf_obex_reassembled_in,
3694 { "Reassembled OBEX in frame", "obex.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
3695 "This OBEX frame is reassembled in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3696 },
3697 { &hf_obex_reassembled_length,
3698 { "Reassembled OBEX length", "obex.reassembled.length", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
3699 "The total length of the reassembled payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3700 },
3701 { &hf_profile,
3702 { "Profile", "obex.profile", FT_UINT32, BASE_DEC | BASE_EXT_STRING0x00000200, &profile_vals_ext, 0x0,
3703 "Bluetooth Profile used in this OBEX session", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3704 },
3705 { &hf_type,
3706 { "Type", "obex.type", FT_STRINGZ, BASE_NONE, NULL((void*)0), 0x0,
3707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3708 },
3709 { &hf_object_class,
3710 { "Object Class", "obex.object_class", FT_STRINGZ, BASE_NONE, NULL((void*)0), 0x0,
3711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3712 },
3713 { &hf_time_iso8601,
3714 { "Time", "obex.time", FT_STRINGZ, BASE_NONE, NULL((void*)0), 0x0,
3715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3716 },
3717 { &hf_hdr_val_action,
3718 { "Action", "obex.action", FT_UINT8, BASE_DEC, VALS(action_vals)((0 ? (const struct _value_string*)0 : ((action_vals)))), 0x0,
3719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3720 },
3721 { &hf_hdr_val_single_response_mode,
3722 { "Single Response Mode", "obex.single_response_mode", FT_UINT8, BASE_DEC, VALS(single_response_mode_vals)((0 ? (const struct _value_string*)0 : ((single_response_mode_vals
))))
, 0x0,
3723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3724 },
3725 { &hf_hdr_val_single_response_mode_parameter,
3726 { "Single Response Mode Parameter", "obex.single_response_mode_parameter", FT_UINT8, BASE_DEC, VALS(single_response_mode_parameter_vals)((0 ? (const struct _value_string*)0 : ((single_response_mode_parameter_vals
))))
, 0x0,
3727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3728 },
3729 { &hf_wan_uuid,
3730 { "WAN UUID", "obex.wan_uuid",
3731 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00,
3732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3733 },
3734 { &hf_sender_bd_addr,
3735 { "Sender Address", "obex.sender_bd_addr",
3736 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0,
3737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3738 },
3739 { &hf_name,
3740 { "Name", "obex.name",
3741 FT_STRING, BASE_NONE, NULL((void*)0), 0,
3742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3743 },
3744 { &hf_current_path,
3745 { "Current Path", "obex.current_path",
3746 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
3747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
3748 },
3749 { &hf_request_in_frame,
3750 { "Request in Frame", "obex.request_in_frame", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_REQUEST)((gpointer) (glong) (FT_FRAMENUM_REQUEST)), 0x0,
3751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3752 },
3753 { &hf_response_in_frame,
3754 { "Response in Frame", "obex.response_in_frame", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE)((gpointer) (glong) (FT_FRAMENUM_RESPONSE)), 0x0,
3755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
3756 }
3757 };
3758
3759 /* Setup protocol subtree array */
3760 static int *ett[] = {
3761 &ett_obex,
3762 &ett_obex_hdrs,
3763 &ett_obex_hdr,
3764 &ett_obex_hdr_id,
3765 &ett_obex_filter,
3766 &ett_obex_parameter,
3767 &ett_obex_fragment,
3768 &ett_obex_fragments,
3769 &ett_obex_session_parameters,
3770 &ett_obex_application_parameters,
3771 &ett_obex_authentication_parameters
3772 };
3773
3774 static ei_register_info ei[] = {
3775 { &ei_application_parameter_length_bad, { "obex.parameter.length.bad", PI_PROTOCOL0x09000000, PI_WARN0x00600000, "Parameter length bad", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
3776 { &ei_unexpected_data, { "obex.expert.unexpected_data", PI_PROTOCOL0x09000000, PI_WARN0x00600000, "Unexpected data", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
3777 { &ei_decoded_as_profile, { "obex.expert.decoded_as.profile", PI_PROTOCOL0x09000000, PI_NOTE0x00400000, "Decoded As", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
3778 };
3779
3780 /* Decode As handling */
3781 static build_valid_func obex_profile_da_build_value[1] = {obex_profile_value};
3782 static decode_as_value_t obex_profile_da_values = {obex_profile_prompt, 1, obex_profile_da_build_value};
3783 static decode_as_t obex_profile_da = {"obex", "obex.profile", 1, 0, &obex_profile_da_values, NULL((void*)0), NULL((void*)0),
3784 decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL((void*)0), NULL((void*)0), NULL((void*)0) };
3785
3786 static build_valid_func media_type_da_build_value[1] = {media_type_value};
3787 static decode_as_value_t media_type_da_values = {media_type_prompt, 1, media_type_da_build_value};
3788 static decode_as_t media_type_da = {"obex", "media_type",
3789 1, 0, &media_type_da_values, NULL((void*)0), NULL((void*)0),
3790 decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL((void*)0), NULL((void*)0), NULL((void*)0) };
3791
3792
3793 obex_path = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
3794 obex_profile = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
3795 obex_last_opcode = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
3796
3797 proto_obex = proto_register_protocol("OBEX Protocol", "OBEX", "obex");
3798
3799 obex_handle = register_dissector("obex", dissect_obex, proto_obex);
3800
3801 obex_profile_table = register_dissector_table("obex.profile", "OBEX Profile", proto_obex, FT_UINT8, BASE_DEC);
3802
3803 /* Required function calls to register the header fields and subtrees used */
3804 proto_register_field_array(proto_obex, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
3805 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
3806 expert_obex = expert_register_protocol(proto_obex);
3807 expert_register_field_array(expert_obex, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
3808
3809 reassembly_table_register(&obex_reassembly_table,
3810 &addresses_reassembly_table_functions);
3811
3812 register_decode_as(&obex_profile_da);
3813
3814 proto_raw = proto_register_protocol("OBEX Raw Application Parameters", "Raw Application Parameters", "obex.parameter.raw");
3815 raw_application_parameters_handle = register_dissector("obex.parameter.raw", dissect_obex_application_parameter_raw, proto_raw);
3816
3817 proto_bpp = proto_register_protocol("Bluetooth OBEX BPP Application Parameters", "BT BPP Application Parameters", "obex.parameter.bt.bpp");
3818 bt_bpp_application_parameters_handle = register_dissector("obex.parameter.bt.bpp", dissect_obex_application_parameter_bt_bpp, proto_bpp);
3819
3820 proto_bip = proto_register_protocol("Bluetooth OBEX BIP Application Parameters", "BT BIP Application Parameters", "obex.parameter.bt.bip");
3821 bt_bip_application_parameters_handle = register_dissector("obex.parameter.bt.bip", dissect_obex_application_parameter_bt_bip, proto_bip);
3822
3823 proto_map = proto_register_protocol("Bluetooth OBEX MAP Application Parameters", "BT MAP Application Parameters", "obex.parameter.bt.map");
3824 bt_map_application_parameters_handle = register_dissector("obex.parameter.bt.map", dissect_obex_application_parameter_bt_map, proto_map);
3825
3826 proto_bt_gpp = proto_register_protocol("Bluetooth OBEX GPP Application Parameters", "BT GPP Application Parameters", "obex.parameter.bt.gpp");
3827 bt_gpp_application_parameters_handle = register_dissector("obex.parameter.bt.gpp", dissect_obex_application_parameter_bt_gpp, proto_bt_gpp);
3828
3829 proto_bt_ctn = proto_register_protocol("Bluetooth OBEX CTN Application Parameters", "BT CTN Application Parameters", "obex.parameter.bt.ctn");
3830 bt_ctn_application_parameters_handle = register_dissector("obex.parameter.bt.ctn", dissect_obex_application_parameter_bt_ctn, proto_bt_ctn);
3831
3832 proto_bt_pbap = proto_register_protocol("Bluetooth OBEX PBAP Application Parameters", "BT PBAP Application Parameters", "obex.parameter.bt.pbap");
3833 bt_pbap_application_parameters_handle = register_dissector("obex.parameter.bt.pbap", dissect_obex_application_parameter_bt_pbap, proto_bt_pbap);
3834
3835 register_decode_as(&media_type_da);
3836
3837 module = prefs_register_protocol(proto_obex, NULL((void*)0));
3838 prefs_register_static_text_preference(module, "supported_bluetooth_profiles",
3839 "Protocol OBEX support Bluetooth profiles: BIP 1.2, BPP 1.2, CTN 1.0, FTP 1.3, GOEP 1.3, GPP 1.0, MAP 1.2, OPP 1.2, PBAP 1.2, SYNCH 1.2",
3840 "Versions of Bluetooth profiles supported by this dissector.");
3841}
3842
3843void
3844proto_reg_handoff_obex(void)
3845{
3846 dissector_add_string("bluetooth.uuid", "1104", obex_handle);
3847 dissector_add_string("bluetooth.uuid", "1105", obex_handle);
3848 dissector_add_string("bluetooth.uuid", "1106", obex_handle);
3849 dissector_add_string("bluetooth.uuid", "1107", obex_handle);
3850 dissector_add_string("bluetooth.uuid", "1118", obex_handle);
3851 dissector_add_string("bluetooth.uuid", "1119", obex_handle);
3852 dissector_add_string("bluetooth.uuid", "111a", obex_handle);
3853 dissector_add_string("bluetooth.uuid", "111b", obex_handle);
3854 dissector_add_string("bluetooth.uuid", "111c", obex_handle);
3855 dissector_add_string("bluetooth.uuid", "111d", obex_handle);
3856 dissector_add_string("bluetooth.uuid", "1120", obex_handle);
3857 dissector_add_string("bluetooth.uuid", "1121", obex_handle);
3858 dissector_add_string("bluetooth.uuid", "1122", obex_handle);
3859 dissector_add_string("bluetooth.uuid", "1123", obex_handle);
3860 dissector_add_string("bluetooth.uuid", "112e", obex_handle);
3861 dissector_add_string("bluetooth.uuid", "112f", obex_handle);
3862 dissector_add_string("bluetooth.uuid", "1130", obex_handle);
3863 dissector_add_string("bluetooth.uuid", "1132", obex_handle);
3864 dissector_add_string("bluetooth.uuid", "1133", obex_handle);
3865 dissector_add_string("bluetooth.uuid", "1134", obex_handle);
3866
3867 http_handle = find_dissector_add_dependency("http", proto_obex);
3868 xml_handle = find_dissector_add_dependency("xml", proto_obex);
3869 data_handle = find_dissector("data");
3870 data_text_lines_handle = find_dissector("data-text-lines");
3871
3872 dissector_add_uint("obex.profile", PROFILE_UNKNOWN0, raw_application_parameters_handle);
3873 dissector_add_uint("obex.profile", PROFILE_BPP7, bt_bpp_application_parameters_handle);
3874 dissector_add_uint("obex.profile", PROFILE_BIP6, bt_bip_application_parameters_handle);
3875 dissector_add_uint("obex.profile", PROFILE_CTN9, bt_ctn_application_parameters_handle);
3876 dissector_add_uint("obex.profile", PROFILE_GPP10, bt_gpp_application_parameters_handle);
3877 dissector_add_uint("obex.profile", PROFILE_MAP5, bt_map_application_parameters_handle);
3878 dissector_add_uint("obex.profile", PROFILE_PBAP4, bt_pbap_application_parameters_handle);
3879
3880 dissector_add_uint("obex.profile", PROFILE_OPP1, raw_application_parameters_handle);
3881 dissector_add_uint("obex.profile", PROFILE_FTP2, raw_application_parameters_handle);
3882 dissector_add_uint("obex.profile", PROFILE_SYNCML3, raw_application_parameters_handle);
3883 dissector_add_uint("obex.profile", PROFILE_SYNC8, raw_application_parameters_handle);
3884
3885 dissector_add_for_decode_as("btrfcomm.dlci", obex_handle);
3886 dissector_add_for_decode_as("btl2cap.psm", obex_handle);
3887 dissector_add_for_decode_as("btl2cap.cid", obex_handle);
3888
3889 /* PBAP */
3890 dissector_add_string("media_type", "x-bt/phonebook", data_text_lines_handle);
3891 dissector_add_string("media_type", "x-bt/vcard", data_text_lines_handle);
3892 dissector_add_string("media_type", "x-bt/vcard-listing", xml_handle);
3893 /* MAP */
3894 dissector_add_string("media_type", "x-bt/message", data_text_lines_handle);
3895 dissector_add_string("media_type", "x-bt/messageStatus", data_text_lines_handle);
3896 dissector_add_string("media_type", "x-bt/MAP-messageUpdate", data_text_lines_handle);
3897 dissector_add_string("media_type", "x-bt/MAP-NotificationRegistration", data_text_lines_handle);
3898 dissector_add_string("media_type", "x-bt/MASInstanceInformation", data_text_lines_handle);
3899 dissector_add_string("media_type", "x-bt/MAP-msg-listing", xml_handle);
3900 dissector_add_string("media_type", "x-bt/MAP-event-report", xml_handle);
3901 dissector_add_string("media_type", "x-obex/folder-listing", xml_handle);
3902 /* CTN */
3903 dissector_add_string("media_type", "x-bt/CTN-EventReport", xml_handle);
3904 dissector_add_string("media_type", "x-bt/CTN-Listing", xml_handle);
3905 dissector_add_string("media_type", "x-bt/CTN-NotificationRegistration", data_text_lines_handle);
3906 dissector_add_string("media_type", "x-bt/Calendar", data_text_lines_handle);
3907 dissector_add_string("media_type", "x-bt/CalendarStatus", data_text_lines_handle);
3908 dissector_add_string("media_type", "x-bt/CTN-forward", data_text_lines_handle);
3909 dissector_add_string("media_type", "x-bt/InstanceDescription", data_text_lines_handle);
3910 dissector_add_string("media_type", "x-bt/Update", data_text_lines_handle);
3911 /* BPP */
3912 dissector_add_string("media_type", "text/x-ref-simple", data_text_lines_handle);
3913 dissector_add_string("media_type", "text/x-ref-list", data_text_lines_handle);
3914 dissector_add_string("media_type", "x-obex/RUI", data_text_lines_handle);
3915 dissector_add_string("media_type", "x-obex/bt-SOAP", xml_handle);
3916 /* BIP */
3917 dissector_add_string("media_type", "x-bt/img-listing", xml_handle);
3918 dissector_add_string("media_type", "x-bt/img-properties", xml_handle);
3919 dissector_add_string("media_type", "x-bt/img-capabilities", xml_handle);
3920 dissector_add_string("media_type", "x-bt/img-print", data_text_lines_handle);
3921 dissector_add_string("media_type", "x-bt/img-img", data_handle);
3922 dissector_add_string("media_type", "x-bt/img-thm", data_handle);
3923 dissector_add_string("media_type", "x-bt/img-attachment", data_handle);
3924 dissector_add_string("media_type", "x-bt/img-display", data_handle);
3925 dissector_add_string("media_type", "x-bt/img-partial", data_handle);
3926 dissector_add_string("media_type", "x-bt/img-archive", data_handle);
3927 dissector_add_string("media_type", "x-bt/img-status", data_handle);
3928 dissector_add_string("media_type", "x-bt/img-monitoring", data_handle);
3929
3930 media_type_dissector_table = find_dissector_table("media_type");
3931
3932 dissector_add_for_decode_as("usb.product", obex_handle);
3933 dissector_add_for_decode_as("usb.device", obex_handle);
3934 dissector_add_for_decode_as("usb.protocol", obex_handle);
3935 dissector_add_for_decode_as_with_preference("tcp.port", obex_handle);
3936 dissector_add_for_decode_as_with_preference("udp.port", obex_handle);
3937}
3938
3939/*
3940 * Editor modelines - https://www.wireshark.org/tools/modelines.html
3941 *
3942 * Local variables:
3943 * c-basic-offset: 4
3944 * tab-width: 8
3945 * indent-tabs-mode: nil
3946 * End:
3947 *
3948 * vi: set shiftwidth=4 tabstop=8 expandtab:
3949 * :indentSize=4:tabSize=8:noTabs=true:
3950 */