~ubuntu-branches/ubuntu/wily/bluez/wily

« back to all changes in this revision

Viewing changes to lib/sdp.h

ImportĀ upstreamĀ versionĀ 4.81

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *
 
3
 *  BlueZ - Bluetooth protocol stack for Linux
 
4
 *
 
5
 *  Copyright (C) 2001-2002  Nokia Corporation
 
6
 *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
 
7
 *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
 
8
 *  Copyright (C) 2002-2003  Stephen Crane <steve.crane@rococosoft.com>
 
9
 *
 
10
 *
 
11
 *  This program is free software; you can redistribute it and/or modify
 
12
 *  it under the terms of the GNU General Public License as published by
 
13
 *  the Free Software Foundation; either version 2 of the License, or
 
14
 *  (at your option) any later version.
 
15
 *
 
16
 *  This program is distributed in the hope that it will be useful,
 
17
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
18
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
19
 *  GNU General Public License for more details.
 
20
 *
 
21
 *  You should have received a copy of the GNU General Public License
 
22
 *  along with this program; if not, write to the Free Software
 
23
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
24
 *
 
25
 */
 
26
 
 
27
#ifndef __SDP_H
 
28
#define __SDP_H
 
29
 
 
30
#ifdef __cplusplus
 
31
extern "C" {
 
32
#endif
 
33
 
 
34
#include <stdint.h>
 
35
 
 
36
#define SDP_UNIX_PATH "/var/run/sdp"
 
37
#define SDP_RESPONSE_TIMEOUT    20
 
38
#define SDP_REQ_BUFFER_SIZE     2048
 
39
#define SDP_RSP_BUFFER_SIZE     65535
 
40
#define SDP_PDU_CHUNK_SIZE      1024
 
41
 
 
42
/*
 
43
 * All definitions are based on Bluetooth Assigned Numbers
 
44
 * of the Bluetooth Specification
 
45
 */
 
46
#define SDP_PSM                 0x0001
 
47
 
 
48
/*
 
49
 * Protocol UUIDs
 
50
 */
 
51
#define SDP_UUID        0x0001
 
52
#define UDP_UUID        0x0002
 
53
#define RFCOMM_UUID     0x0003
 
54
#define TCP_UUID        0x0004
 
55
#define TCS_BIN_UUID    0x0005
 
56
#define TCS_AT_UUID     0x0006
 
57
#define OBEX_UUID       0x0008
 
58
#define IP_UUID         0x0009
 
59
#define FTP_UUID        0x000a
 
60
#define HTTP_UUID       0x000c
 
61
#define WSP_UUID        0x000e
 
62
#define BNEP_UUID       0x000f
 
63
#define UPNP_UUID       0x0010
 
64
#define HIDP_UUID       0x0011
 
65
#define HCRP_CTRL_UUID  0x0012
 
66
#define HCRP_DATA_UUID  0x0014
 
67
#define HCRP_NOTE_UUID  0x0016
 
68
#define AVCTP_UUID      0x0017
 
69
#define AVDTP_UUID      0x0019
 
70
#define CMTP_UUID       0x001b
 
71
#define UDI_UUID        0x001d
 
72
#define MCAP_CTRL_UUID  0x001e
 
73
#define MCAP_DATA_UUID  0x001f
 
74
#define L2CAP_UUID      0x0100
 
75
#define ATT_UUID        0x1801
 
76
 
 
77
/*
 
78
 * Service class identifiers of standard services and service groups
 
79
 */
 
80
#define SDP_SERVER_SVCLASS_ID           0x1000
 
81
#define BROWSE_GRP_DESC_SVCLASS_ID      0x1001
 
82
#define PUBLIC_BROWSE_GROUP             0x1002
 
83
#define SERIAL_PORT_SVCLASS_ID          0x1101
 
84
#define LAN_ACCESS_SVCLASS_ID           0x1102
 
85
#define DIALUP_NET_SVCLASS_ID           0x1103
 
86
#define IRMC_SYNC_SVCLASS_ID            0x1104
 
87
#define OBEX_OBJPUSH_SVCLASS_ID         0x1105
 
88
#define OBEX_FILETRANS_SVCLASS_ID       0x1106
 
89
#define IRMC_SYNC_CMD_SVCLASS_ID        0x1107
 
90
#define HEADSET_SVCLASS_ID              0x1108
 
91
#define CORDLESS_TELEPHONY_SVCLASS_ID   0x1109
 
92
#define AUDIO_SOURCE_SVCLASS_ID         0x110a
 
93
#define AUDIO_SINK_SVCLASS_ID           0x110b
 
94
#define AV_REMOTE_TARGET_SVCLASS_ID     0x110c
 
95
#define ADVANCED_AUDIO_SVCLASS_ID       0x110d
 
96
#define AV_REMOTE_SVCLASS_ID            0x110e
 
97
#define VIDEO_CONF_SVCLASS_ID           0x110f
 
98
#define INTERCOM_SVCLASS_ID             0x1110
 
99
#define FAX_SVCLASS_ID                  0x1111
 
100
#define HEADSET_AGW_SVCLASS_ID          0x1112
 
101
#define WAP_SVCLASS_ID                  0x1113
 
102
#define WAP_CLIENT_SVCLASS_ID           0x1114
 
103
#define PANU_SVCLASS_ID                 0x1115
 
104
#define NAP_SVCLASS_ID                  0x1116
 
105
#define GN_SVCLASS_ID                   0x1117
 
106
#define DIRECT_PRINTING_SVCLASS_ID      0x1118
 
107
#define REFERENCE_PRINTING_SVCLASS_ID   0x1119
 
108
#define IMAGING_SVCLASS_ID              0x111a
 
109
#define IMAGING_RESPONDER_SVCLASS_ID    0x111b
 
110
#define IMAGING_ARCHIVE_SVCLASS_ID      0x111c
 
111
#define IMAGING_REFOBJS_SVCLASS_ID      0x111d
 
112
#define HANDSFREE_SVCLASS_ID            0x111e
 
113
#define HANDSFREE_AGW_SVCLASS_ID        0x111f
 
114
#define DIRECT_PRT_REFOBJS_SVCLASS_ID   0x1120
 
115
#define REFLECTED_UI_SVCLASS_ID         0x1121
 
116
#define BASIC_PRINTING_SVCLASS_ID       0x1122
 
117
#define PRINTING_STATUS_SVCLASS_ID      0x1123
 
118
#define HID_SVCLASS_ID                  0x1124
 
119
#define HCR_SVCLASS_ID                  0x1125
 
120
#define HCR_PRINT_SVCLASS_ID            0x1126
 
121
#define HCR_SCAN_SVCLASS_ID             0x1127
 
122
#define CIP_SVCLASS_ID                  0x1128
 
123
#define VIDEO_CONF_GW_SVCLASS_ID        0x1129
 
124
#define UDI_MT_SVCLASS_ID               0x112a
 
125
#define UDI_TA_SVCLASS_ID               0x112b
 
126
#define AV_SVCLASS_ID                   0x112c
 
127
#define SAP_SVCLASS_ID                  0x112d
 
128
#define PBAP_PCE_SVCLASS_ID             0x112e
 
129
#define PBAP_PSE_SVCLASS_ID             0x112f
 
130
#define PBAP_SVCLASS_ID                 0x1130
 
131
#define PNP_INFO_SVCLASS_ID             0x1200
 
132
#define GENERIC_NETWORKING_SVCLASS_ID   0x1201
 
133
#define GENERIC_FILETRANS_SVCLASS_ID    0x1202
 
134
#define GENERIC_AUDIO_SVCLASS_ID        0x1203
 
135
#define GENERIC_TELEPHONY_SVCLASS_ID    0x1204
 
136
#define UPNP_SVCLASS_ID                 0x1205
 
137
#define UPNP_IP_SVCLASS_ID              0x1206
 
138
#define UPNP_PAN_SVCLASS_ID             0x1300
 
139
#define UPNP_LAP_SVCLASS_ID             0x1301
 
140
#define UPNP_L2CAP_SVCLASS_ID           0x1302
 
141
#define VIDEO_SOURCE_SVCLASS_ID         0x1303
 
142
#define VIDEO_SINK_SVCLASS_ID           0x1304
 
143
#define VIDEO_DISTRIBUTION_SVCLASS_ID   0x1305
 
144
#define HDP_SVCLASS_ID                  0x1400
 
145
#define HDP_SOURCE_SVCLASS_ID           0x1401
 
146
#define HDP_SINK_SVCLASS_ID             0x1402
 
147
#define APPLE_AGENT_SVCLASS_ID          0x2112
 
148
#define GENERIC_ATTRIB_SVCLASS_ID       0x1801
 
149
 
 
150
/*
 
151
 * Standard profile descriptor identifiers; note these
 
152
 * may be identical to some of the service classes defined above
 
153
 */
 
154
#define SDP_SERVER_PROFILE_ID           SDP_SERVER_SVCLASS_ID
 
155
#define BROWSE_GRP_DESC_PROFILE_ID      BROWSE_GRP_DESC_SVCLASS_ID
 
156
#define SERIAL_PORT_PROFILE_ID          SERIAL_PORT_SVCLASS_ID
 
157
#define LAN_ACCESS_PROFILE_ID           LAN_ACCESS_SVCLASS_ID
 
158
#define DIALUP_NET_PROFILE_ID           DIALUP_NET_SVCLASS_ID
 
159
#define IRMC_SYNC_PROFILE_ID            IRMC_SYNC_SVCLASS_ID
 
160
#define OBEX_OBJPUSH_PROFILE_ID         OBEX_OBJPUSH_SVCLASS_ID
 
161
#define OBEX_FILETRANS_PROFILE_ID       OBEX_FILETRANS_SVCLASS_ID
 
162
#define IRMC_SYNC_CMD_PROFILE_ID        IRMC_SYNC_CMD_SVCLASS_ID
 
163
#define HEADSET_PROFILE_ID              HEADSET_SVCLASS_ID
 
164
#define CORDLESS_TELEPHONY_PROFILE_ID   CORDLESS_TELEPHONY_SVCLASS_ID
 
165
#define AUDIO_SOURCE_PROFILE_ID         AUDIO_SOURCE_SVCLASS_ID
 
166
#define AUDIO_SINK_PROFILE_ID           AUDIO_SINK_SVCLASS_ID
 
167
#define AV_REMOTE_TARGET_PROFILE_ID     AV_REMOTE_TARGET_SVCLASS_ID
 
168
#define ADVANCED_AUDIO_PROFILE_ID       ADVANCED_AUDIO_SVCLASS_ID
 
169
#define AV_REMOTE_PROFILE_ID            AV_REMOTE_SVCLASS_ID
 
170
#define VIDEO_CONF_PROFILE_ID           VIDEO_CONF_SVCLASS_ID
 
171
#define INTERCOM_PROFILE_ID             INTERCOM_SVCLASS_ID
 
172
#define FAX_PROFILE_ID                  FAX_SVCLASS_ID
 
173
#define HEADSET_AGW_PROFILE_ID          HEADSET_AGW_SVCLASS_ID
 
174
#define WAP_PROFILE_ID                  WAP_SVCLASS_ID
 
175
#define WAP_CLIENT_PROFILE_ID           WAP_CLIENT_SVCLASS_ID
 
176
#define PANU_PROFILE_ID                 PANU_SVCLASS_ID
 
177
#define NAP_PROFILE_ID                  NAP_SVCLASS_ID
 
178
#define GN_PROFILE_ID                   GN_SVCLASS_ID
 
179
#define DIRECT_PRINTING_PROFILE_ID      DIRECT_PRINTING_SVCLASS_ID
 
180
#define REFERENCE_PRINTING_PROFILE_ID   REFERENCE_PRINTING_SVCLASS_ID
 
181
#define IMAGING_PROFILE_ID              IMAGING_SVCLASS_ID
 
182
#define IMAGING_RESPONDER_PROFILE_ID    IMAGING_RESPONDER_SVCLASS_ID
 
183
#define IMAGING_ARCHIVE_PROFILE_ID      IMAGING_ARCHIVE_SVCLASS_ID
 
184
#define IMAGING_REFOBJS_PROFILE_ID      IMAGING_REFOBJS_SVCLASS_ID
 
185
#define HANDSFREE_PROFILE_ID            HANDSFREE_SVCLASS_ID
 
186
#define HANDSFREE_AGW_PROFILE_ID        HANDSFREE_AGW_SVCLASS_ID
 
187
#define DIRECT_PRT_REFOBJS_PROFILE_ID   DIRECT_PRT_REFOBJS_SVCLASS_ID
 
188
#define REFLECTED_UI_PROFILE_ID         REFLECTED_UI_SVCLASS_ID
 
189
#define BASIC_PRINTING_PROFILE_ID       BASIC_PRINTING_SVCLASS_ID
 
190
#define PRINTING_STATUS_PROFILE_ID      PRINTING_STATUS_SVCLASS_ID
 
191
#define HID_PROFILE_ID                  HID_SVCLASS_ID
 
192
#define HCR_PROFILE_ID                  HCR_SCAN_SVCLASS_ID
 
193
#define HCR_PRINT_PROFILE_ID            HCR_PRINT_SVCLASS_ID
 
194
#define HCR_SCAN_PROFILE_ID             HCR_SCAN_SVCLASS_ID
 
195
#define CIP_PROFILE_ID                  CIP_SVCLASS_ID
 
196
#define VIDEO_CONF_GW_PROFILE_ID        VIDEO_CONF_GW_SVCLASS_ID
 
197
#define UDI_MT_PROFILE_ID               UDI_MT_SVCLASS_ID
 
198
#define UDI_TA_PROFILE_ID               UDI_TA_SVCLASS_ID
 
199
#define AV_PROFILE_ID                   AV_SVCLASS_ID
 
200
#define SAP_PROFILE_ID                  SAP_SVCLASS_ID
 
201
#define PBAP_PCE_PROFILE_ID             PBAP_PCE_SVCLASS_ID
 
202
#define PBAP_PSE_PROFILE_ID             PBAP_PSE_SVCLASS_ID
 
203
#define PBAP_PROFILE_ID                 PBAP_SVCLASS_ID
 
204
#define PNP_INFO_PROFILE_ID             PNP_INFO_SVCLASS_ID
 
205
#define GENERIC_NETWORKING_PROFILE_ID   GENERIC_NETWORKING_SVCLASS_ID
 
206
#define GENERIC_FILETRANS_PROFILE_ID    GENERIC_FILETRANS_SVCLASS_ID
 
207
#define GENERIC_AUDIO_PROFILE_ID        GENERIC_AUDIO_SVCLASS_ID
 
208
#define GENERIC_TELEPHONY_PROFILE_ID    GENERIC_TELEPHONY_SVCLASS_ID
 
209
#define UPNP_PROFILE_ID                 UPNP_SVCLASS_ID
 
210
#define UPNP_IP_PROFILE_ID              UPNP_IP_SVCLASS_ID
 
211
#define UPNP_PAN_PROFILE_ID             UPNP_PAN_SVCLASS_ID
 
212
#define UPNP_LAP_PROFILE_ID             UPNP_LAP_SVCLASS_ID
 
213
#define UPNP_L2CAP_PROFILE_ID           UPNP_L2CAP_SVCLASS_ID
 
214
#define VIDEO_SOURCE_PROFILE_ID         VIDEO_SOURCE_SVCLASS_ID
 
215
#define VIDEO_SINK_PROFILE_ID           VIDEO_SINK_SVCLASS_ID
 
216
#define VIDEO_DISTRIBUTION_PROFILE_ID   VIDEO_DISTRIBUTION_SVCLASS_ID
 
217
#define HDP_PROFILE_ID                  HDP_SVCLASS_ID
 
218
#define HDP_SOURCE_PROFILE_ID           HDP_SOURCE_SVCLASS_ID
 
219
#define HDP_SINK_PROFILE_ID             HDP_SINK_SVCLASS_ID
 
220
#define APPLE_AGENT_PROFILE_ID          APPLE_AGENT_SVCLASS_ID
 
221
#define GENERIC_ACCESS_PROFILE_ID       0x1800
 
222
#define GENERIC_ATTRIB_PROFILE_ID       GENERIC_ATTRIB_SVCLASS_ID
 
223
 
 
224
/*
 
225
 * Compatibility macros for the old MDP acronym
 
226
 */
 
227
#define MDP_SVCLASS_ID                  HDP_SVCLASS_ID
 
228
#define MDP_SOURCE_SVCLASS_ID           HDP_SOURCE_SVCLASS_ID
 
229
#define MDP_SINK_SVCLASS_ID             HDP_SINK_SVCLASS_ID
 
230
#define MDP_PROFILE_ID                  HDP_PROFILE_ID
 
231
#define MDP_SOURCE_PROFILE_ID           HDP_SOURCE_PROFILE_ID
 
232
#define MDP_SINK_PROFILE_ID             HDP_SINK_PROFILE_ID
 
233
 
 
234
/*
 
235
 * Attribute identifier codes
 
236
 */
 
237
#define SDP_SERVER_RECORD_HANDLE                0x0000
 
238
 
 
239
/*
 
240
 * Possible values for attribute-id are listed below.
 
241
 * See SDP Spec, section "Service Attribute Definitions" for more details.
 
242
 */
 
243
#define SDP_ATTR_RECORD_HANDLE                  0x0000
 
244
#define SDP_ATTR_SVCLASS_ID_LIST                0x0001
 
245
#define SDP_ATTR_RECORD_STATE                   0x0002
 
246
#define SDP_ATTR_SERVICE_ID                     0x0003
 
247
#define SDP_ATTR_PROTO_DESC_LIST                0x0004
 
248
#define SDP_ATTR_BROWSE_GRP_LIST                0x0005
 
249
#define SDP_ATTR_LANG_BASE_ATTR_ID_LIST         0x0006
 
250
#define SDP_ATTR_SVCINFO_TTL                    0x0007
 
251
#define SDP_ATTR_SERVICE_AVAILABILITY           0x0008
 
252
#define SDP_ATTR_PFILE_DESC_LIST                0x0009
 
253
#define SDP_ATTR_DOC_URL                        0x000a
 
254
#define SDP_ATTR_CLNT_EXEC_URL                  0x000b
 
255
#define SDP_ATTR_ICON_URL                       0x000c
 
256
#define SDP_ATTR_ADD_PROTO_DESC_LIST            0x000d
 
257
 
 
258
#define SDP_ATTR_GROUP_ID                       0x0200
 
259
#define SDP_ATTR_IP_SUBNET                      0x0200
 
260
#define SDP_ATTR_VERSION_NUM_LIST               0x0200
 
261
#define SDP_ATTR_SUPPORTED_FEATURES_LIST        0x0200
 
262
#define SDP_ATTR_SVCDB_STATE                    0x0201
 
263
 
 
264
#define SDP_ATTR_SERVICE_VERSION                0x0300
 
265
#define SDP_ATTR_EXTERNAL_NETWORK               0x0301
 
266
#define SDP_ATTR_SUPPORTED_DATA_STORES_LIST     0x0301
 
267
#define SDP_ATTR_DATA_EXCHANGE_SPEC             0x0301
 
268
#define SDP_ATTR_FAX_CLASS1_SUPPORT             0x0302
 
269
#define SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL    0x0302
 
270
#define SDP_ATTR_MCAP_SUPPORTED_PROCEDURES      0x0302
 
271
#define SDP_ATTR_FAX_CLASS20_SUPPORT            0x0303
 
272
#define SDP_ATTR_SUPPORTED_FORMATS_LIST         0x0303
 
273
#define SDP_ATTR_FAX_CLASS2_SUPPORT             0x0304
 
274
#define SDP_ATTR_AUDIO_FEEDBACK_SUPPORT         0x0305
 
275
#define SDP_ATTR_NETWORK_ADDRESS                0x0306
 
276
#define SDP_ATTR_WAP_GATEWAY                    0x0307
 
277
#define SDP_ATTR_HOMEPAGE_URL                   0x0308
 
278
#define SDP_ATTR_WAP_STACK_TYPE                 0x0309
 
279
#define SDP_ATTR_SECURITY_DESC                  0x030a
 
280
#define SDP_ATTR_NET_ACCESS_TYPE                0x030b
 
281
#define SDP_ATTR_MAX_NET_ACCESSRATE             0x030c
 
282
#define SDP_ATTR_IP4_SUBNET                     0x030d
 
283
#define SDP_ATTR_IP6_SUBNET                     0x030e
 
284
#define SDP_ATTR_SUPPORTED_CAPABILITIES         0x0310
 
285
#define SDP_ATTR_SUPPORTED_FEATURES             0x0311
 
286
#define SDP_ATTR_SUPPORTED_FUNCTIONS            0x0312
 
287
#define SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY    0x0313
 
288
#define SDP_ATTR_SUPPORTED_REPOSITORIES         0x0314
 
289
 
 
290
#define SDP_ATTR_SPECIFICATION_ID               0x0200
 
291
#define SDP_ATTR_VENDOR_ID                      0x0201
 
292
#define SDP_ATTR_PRODUCT_ID                     0x0202
 
293
#define SDP_ATTR_VERSION                        0x0203
 
294
#define SDP_ATTR_PRIMARY_RECORD                 0x0204
 
295
#define SDP_ATTR_VENDOR_ID_SOURCE               0x0205
 
296
 
 
297
#define SDP_ATTR_HID_DEVICE_RELEASE_NUMBER      0x0200
 
298
#define SDP_ATTR_HID_PARSER_VERSION             0x0201
 
299
#define SDP_ATTR_HID_DEVICE_SUBCLASS            0x0202
 
300
#define SDP_ATTR_HID_COUNTRY_CODE               0x0203
 
301
#define SDP_ATTR_HID_VIRTUAL_CABLE              0x0204
 
302
#define SDP_ATTR_HID_RECONNECT_INITIATE         0x0205
 
303
#define SDP_ATTR_HID_DESCRIPTOR_LIST            0x0206
 
304
#define SDP_ATTR_HID_LANG_ID_BASE_LIST          0x0207
 
305
#define SDP_ATTR_HID_SDP_DISABLE                0x0208
 
306
#define SDP_ATTR_HID_BATTERY_POWER              0x0209
 
307
#define SDP_ATTR_HID_REMOTE_WAKEUP              0x020a
 
308
#define SDP_ATTR_HID_PROFILE_VERSION            0x020b
 
309
#define SDP_ATTR_HID_SUPERVISION_TIMEOUT        0x020c
 
310
#define SDP_ATTR_HID_NORMALLY_CONNECTABLE       0x020d
 
311
#define SDP_ATTR_HID_BOOT_DEVICE                0x020e
 
312
 
 
313
/*
 
314
 * These identifiers are based on the SDP spec stating that
 
315
 * "base attribute id of the primary (universal) language must be 0x0100"
 
316
 *
 
317
 * Other languages should have their own offset; e.g.:
 
318
 * #define XXXLangBase yyyy
 
319
 * #define AttrServiceName_XXX  0x0000+XXXLangBase
 
320
 */
 
321
#define SDP_PRIMARY_LANG_BASE           0x0100
 
322
 
 
323
#define SDP_ATTR_SVCNAME_PRIMARY        0x0000 + SDP_PRIMARY_LANG_BASE
 
324
#define SDP_ATTR_SVCDESC_PRIMARY        0x0001 + SDP_PRIMARY_LANG_BASE
 
325
#define SDP_ATTR_PROVNAME_PRIMARY       0x0002 + SDP_PRIMARY_LANG_BASE
 
326
 
 
327
/*
 
328
 * The Data representation in SDP PDUs (pps 339, 340 of BT SDP Spec)
 
329
 * These are the exact data type+size descriptor values
 
330
 * that go into the PDU buffer.
 
331
 *
 
332
 * The datatype (leading 5bits) + size descriptor (last 3 bits)
 
333
 * is 8 bits. The size descriptor is critical to extract the
 
334
 * right number of bytes for the data value from the PDU.
 
335
 *
 
336
 * For most basic types, the datatype+size descriptor is
 
337
 * straightforward. However for constructed types and strings,
 
338
 * the size of the data is in the next "n" bytes following the
 
339
 * 8 bits (datatype+size) descriptor. Exactly what the "n" is
 
340
 * specified in the 3 bits of the data size descriptor.
 
341
 *
 
342
 * TextString and URLString can be of size 2^{8, 16, 32} bytes
 
343
 * DataSequence and DataSequenceAlternates can be of size 2^{8, 16, 32}
 
344
 * The size are computed post-facto in the API and are not known apriori
 
345
 */
 
346
#define SDP_DATA_NIL            0x00
 
347
#define SDP_UINT8               0x08
 
348
#define SDP_UINT16              0x09
 
349
#define SDP_UINT32              0x0A
 
350
#define SDP_UINT64              0x0B
 
351
#define SDP_UINT128             0x0C
 
352
#define SDP_INT8                0x10
 
353
#define SDP_INT16               0x11
 
354
#define SDP_INT32               0x12
 
355
#define SDP_INT64               0x13
 
356
#define SDP_INT128              0x14
 
357
#define SDP_UUID_UNSPEC         0x18
 
358
#define SDP_UUID16              0x19
 
359
#define SDP_UUID32              0x1A
 
360
#define SDP_UUID128             0x1C
 
361
#define SDP_TEXT_STR_UNSPEC     0x20
 
362
#define SDP_TEXT_STR8           0x25
 
363
#define SDP_TEXT_STR16          0x26
 
364
#define SDP_TEXT_STR32          0x27
 
365
#define SDP_BOOL                0x28
 
366
#define SDP_SEQ_UNSPEC          0x30
 
367
#define SDP_SEQ8                0x35
 
368
#define SDP_SEQ16               0x36
 
369
#define SDP_SEQ32               0x37
 
370
#define SDP_ALT_UNSPEC          0x38
 
371
#define SDP_ALT8                0x3D
 
372
#define SDP_ALT16               0x3E
 
373
#define SDP_ALT32               0x3F
 
374
#define SDP_URL_STR_UNSPEC      0x40
 
375
#define SDP_URL_STR8            0x45
 
376
#define SDP_URL_STR16           0x46
 
377
#define SDP_URL_STR32           0x47
 
378
 
 
379
/*
 
380
 * The PDU identifiers of SDP packets between client and server
 
381
 */
 
382
#define SDP_ERROR_RSP           0x01
 
383
#define SDP_SVC_SEARCH_REQ      0x02
 
384
#define SDP_SVC_SEARCH_RSP      0x03
 
385
#define SDP_SVC_ATTR_REQ        0x04
 
386
#define SDP_SVC_ATTR_RSP        0x05
 
387
#define SDP_SVC_SEARCH_ATTR_REQ 0x06
 
388
#define SDP_SVC_SEARCH_ATTR_RSP 0x07
 
389
 
 
390
/*
 
391
 * Some additions to support service registration.
 
392
 * These are outside the scope of the Bluetooth specification
 
393
 */
 
394
#define SDP_SVC_REGISTER_REQ    0x75
 
395
#define SDP_SVC_REGISTER_RSP    0x76
 
396
#define SDP_SVC_UPDATE_REQ      0x77
 
397
#define SDP_SVC_UPDATE_RSP      0x78
 
398
#define SDP_SVC_REMOVE_REQ      0x79
 
399
#define SDP_SVC_REMOVE_RSP      0x80
 
400
 
 
401
/*
 
402
 * SDP Error codes
 
403
 */
 
404
#define SDP_INVALID_VERSION             0x0001
 
405
#define SDP_INVALID_RECORD_HANDLE       0x0002
 
406
#define SDP_INVALID_SYNTAX              0x0003
 
407
#define SDP_INVALID_PDU_SIZE            0x0004
 
408
#define SDP_INVALID_CSTATE              0x0005
 
409
 
 
410
/*
 
411
 * SDP PDU
 
412
 */
 
413
typedef struct {
 
414
        uint8_t  pdu_id;
 
415
        uint16_t tid;
 
416
        uint16_t plen;
 
417
} __attribute__ ((packed)) sdp_pdu_hdr_t;
 
418
 
 
419
/*
 
420
 * Common definitions for attributes in the SDP.
 
421
 * Should the type of any of these change, you need only make a change here.
 
422
 */
 
423
typedef struct {
 
424
        uint8_t data[16];
 
425
} uint128_t;
 
426
 
 
427
typedef struct {
 
428
        uint8_t type;
 
429
        union {
 
430
                uint16_t  uuid16;
 
431
                uint32_t  uuid32;
 
432
                uint128_t uuid128;
 
433
        } value;
 
434
} uuid_t;
 
435
 
 
436
#define SDP_IS_UUID(x) ((x) == SDP_UUID16 || (x) == SDP_UUID32 || (x) ==SDP_UUID128)
 
437
 
 
438
typedef struct _sdp_list sdp_list_t;
 
439
struct _sdp_list {
 
440
        sdp_list_t *next;
 
441
        void *data;
 
442
};
 
443
 
 
444
/*
 
445
 * User-visible strings can be in many languages
 
446
 * in addition to the universal language.
 
447
 *
 
448
 * Language meta-data includes language code in ISO639
 
449
 * followed by the encoding format. The third field in this
 
450
 * structure is the attribute offset for the language.
 
451
 * User-visible strings in the specified language can be
 
452
 * obtained at this offset.
 
453
 */
 
454
typedef struct {
 
455
        uint16_t code_ISO639;
 
456
        uint16_t encoding;
 
457
        uint16_t base_offset;
 
458
} sdp_lang_attr_t;
 
459
 
 
460
/*
 
461
 * Profile descriptor is the Bluetooth profile metadata. If a
 
462
 * service conforms to a well-known profile, then its profile
 
463
 * identifier (UUID) is an attribute of the service. In addition,
 
464
 * if the profile has a version number it is specified here.
 
465
 */
 
466
typedef struct {
 
467
        uuid_t uuid;
 
468
        uint16_t version;
 
469
} sdp_profile_desc_t;
 
470
 
 
471
typedef struct {
 
472
        uint8_t major;
 
473
        uint8_t minor;
 
474
} sdp_version_t;
 
475
 
 
476
typedef struct {
 
477
        uint8_t *data;
 
478
        uint32_t data_size;
 
479
        uint32_t buf_size;
 
480
} sdp_buf_t;
 
481
 
 
482
typedef struct {
 
483
        uint32_t handle;
 
484
 
 
485
        /* Search pattern: a sequence of all UUIDs seen in this record */
 
486
        sdp_list_t *pattern;
 
487
        sdp_list_t *attrlist;
 
488
 
 
489
        /* Main service class for Extended Inquiry Response */
 
490
        uuid_t svclass;
 
491
} sdp_record_t;
 
492
 
 
493
typedef struct sdp_data_struct sdp_data_t;
 
494
struct sdp_data_struct {
 
495
        uint8_t dtd;
 
496
        uint16_t attrId;
 
497
        union {
 
498
                int8_t    int8;
 
499
                int16_t   int16;
 
500
                int32_t   int32;
 
501
                int64_t   int64;
 
502
                uint128_t int128;
 
503
                uint8_t   uint8;
 
504
                uint16_t  uint16;
 
505
                uint32_t  uint32;
 
506
                uint64_t  uint64;
 
507
                uint128_t uint128;
 
508
                uuid_t    uuid;
 
509
                char     *str;
 
510
                sdp_data_t *dataseq;
 
511
        } val;
 
512
        sdp_data_t *next;
 
513
        int unitSize;
 
514
};
 
515
 
 
516
#ifdef __cplusplus
 
517
}
 
518
#endif
 
519
 
 
520
#endif /* __SDP_H */