xref: /dflybsd-src/lib/libsdp/sdp.h (revision 42c447e672ef6f27c808db0bfcf5c9944c83c3a7)
137f60ad1SHasso Tepper /* $NetBSD: sdp.h,v 1.2 2006/08/17 20:13:31 plunky Exp $ */
237f60ad1SHasso Tepper 
337f60ad1SHasso Tepper /*-
437f60ad1SHasso Tepper  * Copyright (c) 2006 Itronix Inc.
537f60ad1SHasso Tepper  * All rights reserved.
637f60ad1SHasso Tepper  *
737f60ad1SHasso Tepper  * Written by Iain Hibbert for Itronix Inc.
837f60ad1SHasso Tepper  *
937f60ad1SHasso Tepper  * Redistribution and use in source and binary forms, with or without
1037f60ad1SHasso Tepper  * modification, are permitted provided that the following conditions
1137f60ad1SHasso Tepper  * are met:
1237f60ad1SHasso Tepper  * 1. Redistributions of source code must retain the above copyright
1337f60ad1SHasso Tepper  *    notice, this list of conditions and the following disclaimer.
1437f60ad1SHasso Tepper  * 2. Redistributions in binary form must reproduce the above copyright
1537f60ad1SHasso Tepper  *    notice, this list of conditions and the following disclaimer in the
1637f60ad1SHasso Tepper  *    documentation and/or other materials provided with the distribution.
1737f60ad1SHasso Tepper  * 3. The name of Itronix Inc. may not be used to endorse
1837f60ad1SHasso Tepper  *    or promote products derived from this software without specific
1937f60ad1SHasso Tepper  *    prior written permission.
2037f60ad1SHasso Tepper  *
2137f60ad1SHasso Tepper  * THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND
2237f60ad1SHasso Tepper  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2337f60ad1SHasso Tepper  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2437f60ad1SHasso Tepper  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY
2537f60ad1SHasso Tepper  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2637f60ad1SHasso Tepper  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2737f60ad1SHasso Tepper  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
2837f60ad1SHasso Tepper  * ON ANY THEORY OF LIABILITY, WHETHER IN
2937f60ad1SHasso Tepper  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3037f60ad1SHasso Tepper  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3137f60ad1SHasso Tepper  * POSSIBILITY OF SUCH DAMAGE.
3237f60ad1SHasso Tepper  */
3337f60ad1SHasso Tepper /*
3437f60ad1SHasso Tepper  * sdp.h
3537f60ad1SHasso Tepper  *
3637f60ad1SHasso Tepper  * Copyright (c) 2001-2003 Maksim Yevmenkin <m_evmenkin@yahoo.com>
3737f60ad1SHasso Tepper  * All rights reserved.
3837f60ad1SHasso Tepper  *
3937f60ad1SHasso Tepper  * Redistribution and use in source and binary forms, with or without
4037f60ad1SHasso Tepper  * modification, are permitted provided that the following conditions
4137f60ad1SHasso Tepper  * are met:
4237f60ad1SHasso Tepper  * 1. Redistributions of source code must retain the above copyright
4337f60ad1SHasso Tepper  *    notice, this list of conditions and the following disclaimer.
4437f60ad1SHasso Tepper  * 2. Redistributions in binary form must reproduce the above copyright
4537f60ad1SHasso Tepper  *    notice, this list of conditions and the following disclaimer in the
4637f60ad1SHasso Tepper  *    documentation and/or other materials provided with the distribution.
4737f60ad1SHasso Tepper  *
4837f60ad1SHasso Tepper  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
4937f60ad1SHasso Tepper  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
5037f60ad1SHasso Tepper  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
5137f60ad1SHasso Tepper  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
5237f60ad1SHasso Tepper  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
5337f60ad1SHasso Tepper  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
5437f60ad1SHasso Tepper  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5537f60ad1SHasso Tepper  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
5637f60ad1SHasso Tepper  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5737f60ad1SHasso Tepper  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5837f60ad1SHasso Tepper  * SUCH DAMAGE.
5937f60ad1SHasso Tepper  *
6037f60ad1SHasso Tepper  * $Id: sdp.h,v 1.2 2006/08/17 20:13:31 plunky Exp $
6137f60ad1SHasso Tepper  * $FreeBSD: src/lib/libsdp/sdp.h,v 1.5 2005/05/27 19:11:33 emax Exp $
6237f60ad1SHasso Tepper  */
6337f60ad1SHasso Tepper 
6437f60ad1SHasso Tepper #ifndef _SDP_H_
6537f60ad1SHasso Tepper #define _SDP_H_
6637f60ad1SHasso Tepper 
67*42c447e6Szrj #include <stdint.h>
6837f60ad1SHasso Tepper #include <string.h>
69*42c447e6Szrj #include <netbt/bluetooth.h>
7037f60ad1SHasso Tepper 
7137f60ad1SHasso Tepper __BEGIN_DECLS
7237f60ad1SHasso Tepper 
7337f60ad1SHasso Tepper /*
7437f60ad1SHasso Tepper  * Data representation (page 349)
7537f60ad1SHasso Tepper  */
7637f60ad1SHasso Tepper 
7737f60ad1SHasso Tepper /* Nil, the null type */
7837f60ad1SHasso Tepper #define SDP_DATA_NIL					0x00
7937f60ad1SHasso Tepper 
8037f60ad1SHasso Tepper /* Unsigned integer */
8137f60ad1SHasso Tepper #define SDP_DATA_UINT8					0x08
8237f60ad1SHasso Tepper #define SDP_DATA_UINT16					0x09
8337f60ad1SHasso Tepper #define SDP_DATA_UINT32					0x0A
8437f60ad1SHasso Tepper #define SDP_DATA_UINT64					0x0B
8537f60ad1SHasso Tepper #define SDP_DATA_UINT128				0x0C
8637f60ad1SHasso Tepper 
8737f60ad1SHasso Tepper /* Signed two's-complement integer */
8837f60ad1SHasso Tepper #define SDP_DATA_INT8					0x10
8937f60ad1SHasso Tepper #define SDP_DATA_INT16					0x11
9037f60ad1SHasso Tepper #define SDP_DATA_INT32					0x12
9137f60ad1SHasso Tepper #define SDP_DATA_INT64					0x13
9237f60ad1SHasso Tepper #define SDP_DATA_INT128					0x14
9337f60ad1SHasso Tepper 
9437f60ad1SHasso Tepper /* UUID, a universally unique identifier */
9537f60ad1SHasso Tepper #define SDP_DATA_UUID16					0x19
9637f60ad1SHasso Tepper #define SDP_DATA_UUID32					0x1A
9737f60ad1SHasso Tepper #define SDP_DATA_UUID128				0x1C
9837f60ad1SHasso Tepper 
9937f60ad1SHasso Tepper /* Text string */
10037f60ad1SHasso Tepper #define SDP_DATA_STR8					0x25
10137f60ad1SHasso Tepper #define SDP_DATA_STR16					0x26
10237f60ad1SHasso Tepper #define SDP_DATA_STR32					0x27
10337f60ad1SHasso Tepper 
10437f60ad1SHasso Tepper /* Boolean */
10537f60ad1SHasso Tepper #define SDP_DATA_BOOL					0x28
10637f60ad1SHasso Tepper 
10737f60ad1SHasso Tepper /*
10837f60ad1SHasso Tepper  * Data element sequence.
10937f60ad1SHasso Tepper  * A data element whose data field is a sequence of data elements
11037f60ad1SHasso Tepper  */
11137f60ad1SHasso Tepper #define SDP_DATA_SEQ8					0x35
11237f60ad1SHasso Tepper #define SDP_DATA_SEQ16					0x36
11337f60ad1SHasso Tepper #define SDP_DATA_SEQ32					0x37
11437f60ad1SHasso Tepper 
11537f60ad1SHasso Tepper /*
11637f60ad1SHasso Tepper  * Data element alternative.
11737f60ad1SHasso Tepper  * A data element whose data field is a sequence of data elements from
11837f60ad1SHasso Tepper  * which one data element is to be selected.
11937f60ad1SHasso Tepper  */
12037f60ad1SHasso Tepper #define SDP_DATA_ALT8					0x3D
12137f60ad1SHasso Tepper #define SDP_DATA_ALT16					0x3E
12237f60ad1SHasso Tepper #define SDP_DATA_ALT32					0x3F
12337f60ad1SHasso Tepper 
12437f60ad1SHasso Tepper /* URL, a uniform resource locator */
12537f60ad1SHasso Tepper #define SDP_DATA_URL8					0x45
12637f60ad1SHasso Tepper #define SDP_DATA_URL16					0x46
12737f60ad1SHasso Tepper #define SDP_DATA_URL32					0x47
12837f60ad1SHasso Tepper 
12937f60ad1SHasso Tepper /*
13037f60ad1SHasso Tepper  * Protocols UUID (short) http://www.bluetoothsig.org/assigned-numbers/sdp.htm
13137f60ad1SHasso Tepper  * BASE UUID 00000000-0000-1000-8000-00805F9B34FB
13237f60ad1SHasso Tepper  */
13337f60ad1SHasso Tepper 
13437f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_SDP				0x0001
13537f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_UDP				0x0002
13637f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_RFCOMM			0x0003
13737f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_TCP				0x0004
13837f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_TCS_BIN			0x0005
13937f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_TCS_AT			0x0006
14037f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_OBEX				0x0008
14137f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_IP				0x0009
14237f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_FTP				0x000A
14337f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_HTTP				0x000C
14437f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_WSP				0x000E
14537f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_BNEP				0x000F
14637f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_UPNP				0x0010
14737f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_HIDP				0x0011
14837f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_HARDCOPY_CONTROL_CHANNEL	0x0012
14937f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_HARDCOPY_DATA_CHANNEL		0x0014
15037f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_HARDCOPY_NOTIFICATION		0x0016
15137f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_AVCTP				0x0017
15237f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_AVDTP				0x0019
15337f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_CMPT				0x001B
15437f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_UDI_C_PLANE			0x001D
15537f60ad1SHasso Tepper #define SDP_UUID_PROTOCOL_L2CAP				0x0100
15637f60ad1SHasso Tepper 
15737f60ad1SHasso Tepper /*
15837f60ad1SHasso Tepper  * Service class IDs http://www.bluetoothsig.org/assigned-numbers/sdp.htm
15937f60ad1SHasso Tepper  */
16037f60ad1SHasso Tepper 
16137f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_SERVICE_DISCOVERY_SERVER	0x1000
16237f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_BROWSE_GROUP_DESCRIPTOR	0x1001
16337f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_PUBLIC_BROWSE_GROUP		0x1002
16437f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_SERIAL_PORT			0x1101
16537f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_LAN_ACCESS_USING_PPP		0x1102
16637f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_DIALUP_NETWORKING		0x1103
16737f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_IR_MC_SYNC			0x1104
16837f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_OBEX_OBJECT_PUSH		0x1105
16937f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_OBEX_FILE_TRANSFER		0x1106
17037f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_IR_MC_SYNC_COMMAND		0x1107
17137f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HEADSET			0x1108
17237f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_CORDLESS_TELEPHONY		0x1109
17337f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_AUDIO_SOURCE			0x110A
17437f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_AUDIO_SINK			0x110B
17537f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_AV_REMOTE_CONTROL_TARGET	0x110C
17637f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_ADVANCED_AUDIO_DISTRIBUTION	0x110D
17737f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_AV_REMOTE_CONTROL		0x110E
17837f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_VIDEO_CONFERENCING		0x110F
17937f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_INTERCOM			0x1110
18037f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_FAX				0x1111
18137f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HEADSET_AUDIO_GATEWAY		0x1112
18237f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_WAP				0x1113
18337f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_WAP_CLIENT			0x1114
18437f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_PANU				0x1115
18537f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_NAP				0x1116
18637f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_GN				0x1117
18737f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_DIRECT_PRINTING		0x1118
18837f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_REFERENCE_PRINTING		0x1119
18937f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_IMAGING			0x111A
19037f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_IMAGING_RESPONDER		0x111B
19137f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_IMAGING_AUTOMATIC_ARCHIVE	0x111C
19237f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_IMAGING_REFERENCED_OBJECTS	0x111D
19337f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HANDSFREE			0x111E
19437f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HANDSFREE_AUDIO_GATEWAY	0x111F
19537f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_DIRECT_PRINTING_REFERENCE_OBJECTS	0x1120
19637f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_REFLECTED_UI			0x1121
19737f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_BASIC_PRINTING		0x1122
19837f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_PRINTING_STATUS		0x1123
19937f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HUMAN_INTERFACE_DEVICE	0x1124
20037f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HARDCOPY_CABLE_REPLACEMENT	0x1125
20137f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HCR_PRINT			0x1126
20237f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_HCR_SCAN			0x1127
20337f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_COMMON_ISDN_ACCESS		0x1128
20437f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_VIDEO_CONFERENCING_GW		0x1129
20537f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_UDI_MT			0x112A
20637f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_UDI_TA			0x112B
20737f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_AUDIO_VIDEO			0x112C
20837f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_SIM_ACCESS			0x112D
20937f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_PNP_INFORMATION		0x1200
21037f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_GENERIC_NETWORKING		0x1201
21137f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_GENERIC_FILE_TRANSFER		0x1202
21237f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_GENERIC_AUDIO			0x1203
21337f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_GENERIC_TELEPHONY		0x1204
21437f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_UPNP				0x1205
21537f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_UPNP_IP			0x1206
21637f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_ESDP_UPNP_IP_PAN		0x1300
21737f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_ESDP_UPNP_IP_LAP		0x1301
21837f60ad1SHasso Tepper #define SDP_SERVICE_CLASS_ESDP_UPNP_L2CAP		0x1302
21937f60ad1SHasso Tepper 
22037f60ad1SHasso Tepper /*
22137f60ad1SHasso Tepper  * Universal attribute definitions (page 366) and
22237f60ad1SHasso Tepper  * http://www.bluetoothsig.org/assigned-numbers/sdp.htm
22337f60ad1SHasso Tepper  */
22437f60ad1SHasso Tepper 
22537f60ad1SHasso Tepper #define SDP_ATTR_RANGE(lo, hi) \
22637f60ad1SHasso Tepper 	(uint32_t)(((uint16_t)(lo) << 16) | ((uint16_t)(hi)))
22737f60ad1SHasso Tepper 
22837f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_RECORD_HANDLE			0x0000
22937f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_CLASS_ID_LIST			0x0001
23037f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_RECORD_STATE			0x0002
23137f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_ID				0x0003
23237f60ad1SHasso Tepper #define SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST		0x0004
23337f60ad1SHasso Tepper #define SDP_ATTR_BROWSE_GROUP_LIST			0x0005
23437f60ad1SHasso Tepper #define SDP_ATTR_LANGUAGE_BASE_ATTRIBUTE_ID_LIST	0x0006
23537f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_INFO_TIME_TO_LIVE		0x0007
23637f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_AVAILABILITY			0x0008
23737f60ad1SHasso Tepper #define SDP_ATTR_BLUETOOTH_PROFILE_DESCRIPTOR_LIST	0x0009
23837f60ad1SHasso Tepper #define SDP_ATTR_DOCUMENTATION_URL			0x000A
23937f60ad1SHasso Tepper #define SDP_ATTR_CLIENT_EXECUTABLE_URL			0x000B
24037f60ad1SHasso Tepper #define SDP_ATTR_ICON_URL				0x000C
24137f60ad1SHasso Tepper #define SDP_ATTR_ADDITIONAL_PROTOCOL_DESCRIPTOR_LISTS	0x000D
24237f60ad1SHasso Tepper #define SDP_ATTR_GROUP_ID				0x0200
24337f60ad1SHasso Tepper #define SDP_ATTR_IP_SUBNET				0x0200
24437f60ad1SHasso Tepper #define SDP_ATTR_VERSION_NUMBER_LIST			0x0200
24537f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_DATABASE_STATE			0x0201
24637f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_VERSION			0x0300
24737f60ad1SHasso Tepper #define SDP_ATTR_EXTERNAL_NETWORK			0x0301
24837f60ad1SHasso Tepper #define SDP_ATTR_NETWORK				0x0301
24937f60ad1SHasso Tepper #define SDP_ATTR_SUPPORTED_DATA_STORES_LIST		0x0301
25037f60ad1SHasso Tepper #define SDP_ATTR_FAX_CLASS1_SUPPORT			0x0302
25137f60ad1SHasso Tepper #define SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL		0x0302
25237f60ad1SHasso Tepper #define SDP_ATTR_FAX_CLASS20_SUPPORT			0x0303
25337f60ad1SHasso Tepper #define SDP_ATTR_SUPPORTED_FORMATS_LIST			0x0303
25437f60ad1SHasso Tepper #define SDP_ATTR_FAX_CLASS2_SUPPORT			0x0304
25537f60ad1SHasso Tepper #define SDP_ATTR_AUDIO_FEEDBACK_SUPPORT			0x0305
25637f60ad1SHasso Tepper #define SDP_ATTR_NETWORK_ADDRESS			0x0306
25737f60ad1SHasso Tepper #define SDP_ATTR_WAP_GATEWAY				0x0307
25837f60ad1SHasso Tepper #define SDP_ATTR_HOME_PAGE_URL				0x0308
25937f60ad1SHasso Tepper #define SDP_ATTR_WAP_STACK_TYPE				0x0309
26037f60ad1SHasso Tepper #define SDP_ATTR_SECURITY_DESCRIPTION			0x030A
26137f60ad1SHasso Tepper #define SDP_ATTR_NET_ACCESS_TYPE			0x030B
26237f60ad1SHasso Tepper #define SDP_ATTR_MAX_NET_ACCESS_RATE			0x030C
26337f60ad1SHasso Tepper #define SDP_ATTR_IPV4_SUBNET				0x030D
26437f60ad1SHasso Tepper #define SDP_ATTR_IPV6_SUBNET				0x030E
26537f60ad1SHasso Tepper #define SDP_ATTR_SUPPORTED_CAPABALITIES			0x0310
26637f60ad1SHasso Tepper #define SDP_ATTR_SUPPORTED_FEATURES			0x0311
26737f60ad1SHasso Tepper #define SDP_ATTR_SUPPORTED_FUNCTIONS			0x0312
26837f60ad1SHasso Tepper #define SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY		0x0313
26937f60ad1SHasso Tepper 
27037f60ad1SHasso Tepper /*
27137f60ad1SHasso Tepper  * The offset must be added to the attribute ID base (contained in the
27237f60ad1SHasso Tepper  * LANGUAGE_BASE_ATTRIBUTE_ID_LIST attribute) in order to compute the
27337f60ad1SHasso Tepper  * attribute ID for these attributes.
27437f60ad1SHasso Tepper  */
27537f60ad1SHasso Tepper 
27637f60ad1SHasso Tepper #define SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID		0x0100
27737f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_NAME_OFFSET			0x0000
27837f60ad1SHasso Tepper #define SDP_ATTR_SERVICE_DESCRIPTION_OFFSET		0x0001
27937f60ad1SHasso Tepper #define SDP_ATTR_PROVIDER_NAME_OFFSET			0x0002
28037f60ad1SHasso Tepper 
28137f60ad1SHasso Tepper /*
28237f60ad1SHasso Tepper  * Protocol data unit (PDU) format (page 352)
28337f60ad1SHasso Tepper  */
28437f60ad1SHasso Tepper 
28537f60ad1SHasso Tepper #define SDP_PDU_ERROR_RESPONSE				0x01
28637f60ad1SHasso Tepper #define SDP_PDU_SERVICE_SEARCH_REQUEST			0x02
28737f60ad1SHasso Tepper #define SDP_PDU_SERVICE_SEARCH_RESPONSE			0x03
28837f60ad1SHasso Tepper #define SDP_PDU_SERVICE_ATTRIBUTE_REQUEST		0x04
28937f60ad1SHasso Tepper #define SDP_PDU_SERVICE_ATTRIBUTE_RESPONSE		0x05
29037f60ad1SHasso Tepper #define SDP_PDU_SERVICE_SEARCH_ATTRIBUTE_REQUEST	0x06
29137f60ad1SHasso Tepper #define SDP_PDU_SERVICE_SEARCH_ATTRIBUTE_RESPONSE	0x07
29237f60ad1SHasso Tepper 
29337f60ad1SHasso Tepper struct sdp_pdu {
29437f60ad1SHasso Tepper 	uint8_t		pid;	/* PDU ID - SDP_PDU_xxx */
29537f60ad1SHasso Tepper 	uint16_t	tid;	/* transaction ID */
29637f60ad1SHasso Tepper 	uint16_t	len;	/* parameters length (in bytes) */
29737f60ad1SHasso Tepper } __attribute__ ((packed));
29837f60ad1SHasso Tepper typedef struct sdp_pdu		sdp_pdu_t;
29937f60ad1SHasso Tepper typedef struct sdp_pdu *	sdp_pdu_p;
30037f60ad1SHasso Tepper 
30137f60ad1SHasso Tepper /*
30237f60ad1SHasso Tepper  * Error codes for SDP_PDU_ERROR_RESPONSE
30337f60ad1SHasso Tepper  */
30437f60ad1SHasso Tepper 
30537f60ad1SHasso Tepper #define SDP_ERROR_CODE_INVALID_SDP_VERSION		0x0001
30637f60ad1SHasso Tepper #define SDP_ERROR_CODE_INVALID_SERVICE_RECORD_HANDLE	0x0002
30737f60ad1SHasso Tepper #define SDP_ERROR_CODE_INVALID_REQUEST_SYNTAX		0x0003
30837f60ad1SHasso Tepper #define SDP_ERROR_CODE_INVALID_PDU_SIZE			0x0004
30937f60ad1SHasso Tepper #define SDP_ERROR_CODE_INVALID_CONTINUATION_STATE	0x0005
31037f60ad1SHasso Tepper #define SDP_ERROR_CODE_INSUFFICIENT_RESOURCES		0x0006
31137f60ad1SHasso Tepper 
31237f60ad1SHasso Tepper /*
31337f60ad1SHasso Tepper  * SDP int128/uint128 parameter
31437f60ad1SHasso Tepper  */
31537f60ad1SHasso Tepper 
31637f60ad1SHasso Tepper struct int128 {
31737f60ad1SHasso Tepper 	int8_t	b[16];
31837f60ad1SHasso Tepper };
31937f60ad1SHasso Tepper typedef struct int128	int128_t;
32037f60ad1SHasso Tepper typedef struct int128	uint128_t;
32137f60ad1SHasso Tepper 
32237f60ad1SHasso Tepper /*
32337f60ad1SHasso Tepper  * SDP attribute
32437f60ad1SHasso Tepper  */
32537f60ad1SHasso Tepper 
32637f60ad1SHasso Tepper struct sdp_attr {
32737f60ad1SHasso Tepper 	uint16_t	 flags;
32837f60ad1SHasso Tepper #define SDP_ATTR_OK		(0 << 0)
32937f60ad1SHasso Tepper #define SDP_ATTR_INVALID	(1 << 0)
33037f60ad1SHasso Tepper #define SDP_ATTR_TRUNCATED	(1 << 1)
33137f60ad1SHasso Tepper 	uint16_t	 attr;  /* SDP_ATTR_xxx */
33237f60ad1SHasso Tepper 	uint32_t	 vlen;	/* length of the value[] in bytes */
33337f60ad1SHasso Tepper 	uint8_t		*value;	/* base pointer */
33437f60ad1SHasso Tepper };
33537f60ad1SHasso Tepper typedef struct sdp_attr		sdp_attr_t;
33637f60ad1SHasso Tepper typedef struct sdp_attr *	sdp_attr_p;
33737f60ad1SHasso Tepper 
33837f60ad1SHasso Tepper /******************************************************************************
33937f60ad1SHasso Tepper  * User interface
34037f60ad1SHasso Tepper  *****************************************************************************/
34137f60ad1SHasso Tepper 
34237f60ad1SHasso Tepper /* Inline versions of get/put byte/short/long. Pointer is advanced */
34337f60ad1SHasso Tepper #define SDP_GET8(b, cp)		do {			\
34437f60ad1SHasso Tepper 	(b) = *(const uint8_t *)(cp);			\
34537f60ad1SHasso Tepper 	(cp) += sizeof(uint8_t);			\
34637f60ad1SHasso Tepper } while (/* CONSTCOND */0)
34737f60ad1SHasso Tepper 
34837f60ad1SHasso Tepper #define SDP_GET16(s, cp)	do {			\
34937f60ad1SHasso Tepper 	(s) = be16dec(cp);				\
35037f60ad1SHasso Tepper 	(cp) += sizeof(uint16_t);			\
35137f60ad1SHasso Tepper } while (/* CONSTCOND */0)
35237f60ad1SHasso Tepper 
35337f60ad1SHasso Tepper #define SDP_GET32(l, cp)	do {			\
35437f60ad1SHasso Tepper 	(l) = be32dec(cp);				\
35537f60ad1SHasso Tepper 	(cp) += sizeof(uint32_t);			\
35637f60ad1SHasso Tepper } while (/* CONSTCOND */0)
35737f60ad1SHasso Tepper 
35837f60ad1SHasso Tepper #define SDP_GET64(l, cp)	do {			\
35937f60ad1SHasso Tepper 	(l) = be64dec(cp);				\
36037f60ad1SHasso Tepper 	(cp) += sizeof(uint64_t);			\
36137f60ad1SHasso Tepper } while (/* CONSTCOND */0)
36237f60ad1SHasso Tepper 
36337f60ad1SHasso Tepper #if BYTE_ORDER == LITTLE_ENDIAN
36437f60ad1SHasso Tepper #define SDP_GET128(l, cp)	do {			\
365d797dc5dSSascha Wildner 	const uint8_t *t_cp = (const uint8_t *)(cp);	\
36637f60ad1SHasso Tepper 	(l)->b[15] = *t_cp++;				\
36737f60ad1SHasso Tepper 	(l)->b[14] = *t_cp++;				\
36837f60ad1SHasso Tepper 	(l)->b[13] = *t_cp++;				\
36937f60ad1SHasso Tepper 	(l)->b[12] = *t_cp++;				\
37037f60ad1SHasso Tepper 	(l)->b[11] = *t_cp++;				\
37137f60ad1SHasso Tepper 	(l)->b[10] = *t_cp++;				\
37237f60ad1SHasso Tepper 	(l)->b[9]  = *t_cp++;				\
37337f60ad1SHasso Tepper 	(l)->b[8]  = *t_cp++;				\
37437f60ad1SHasso Tepper 	(l)->b[7]  = *t_cp++;				\
37537f60ad1SHasso Tepper 	(l)->b[6]  = *t_cp++;				\
37637f60ad1SHasso Tepper 	(l)->b[5]  = *t_cp++;				\
37737f60ad1SHasso Tepper 	(l)->b[4]  = *t_cp++;				\
37837f60ad1SHasso Tepper 	(l)->b[3]  = *t_cp++;				\
37937f60ad1SHasso Tepper 	(l)->b[2]  = *t_cp++;				\
38037f60ad1SHasso Tepper 	(l)->b[1]  = *t_cp++;				\
38137f60ad1SHasso Tepper 	(l)->b[0]  = *t_cp++;				\
38237f60ad1SHasso Tepper 	(cp) += 16;					\
38337f60ad1SHasso Tepper } while (/* CONSTCOND */0)
38437f60ad1SHasso Tepper 
38537f60ad1SHasso Tepper #define SDP_GET_UUID128(l, cp)	do {			\
38637f60ad1SHasso Tepper 	memcpy(&((l)->b), (cp), 16);			\
38737f60ad1SHasso Tepper 	(cp) += 16;					\
38837f60ad1SHasso Tepper } while (/* CONSTCOND */0)
38937f60ad1SHasso Tepper #elif BYTE_ORDER == BIG_ENDIAN
39037f60ad1SHasso Tepper #define SDP_GET128(l, cp)	do {			\
39137f60ad1SHasso Tepper 	memcpy(&((l)->b), (cp), 16);			\
39237f60ad1SHasso Tepper 	(cp) += 16;					\
39337f60ad1SHasso Tepper } while (/* CONSTCOND */0)
39437f60ad1SHasso Tepper 
39537f60ad1SHasso Tepper #define	SDP_GET_UUID128(l, cp)	SDP_GET128(l, cp)
39637f60ad1SHasso Tepper #else
39737f60ad1SHasso Tepper #error	"Unsupported BYTE_ORDER"
39837f60ad1SHasso Tepper #endif /* BYTE_ORDER */
39937f60ad1SHasso Tepper 
40037f60ad1SHasso Tepper #define SDP_PUT8(b, cp)		do {			\
40137f60ad1SHasso Tepper 	*(uint8_t *)(cp) = (b);				\
40237f60ad1SHasso Tepper 	(cp) += sizeof(uint8_t);			\
40337f60ad1SHasso Tepper } while (/* CONSTCOND */0)
40437f60ad1SHasso Tepper 
40537f60ad1SHasso Tepper #define SDP_PUT16(s, cp)	do {			\
40637f60ad1SHasso Tepper 	be16enc((cp), (s));				\
40737f60ad1SHasso Tepper 	(cp) += sizeof(uint16_t);			\
40837f60ad1SHasso Tepper } while (/* CONSTCOND */0)
40937f60ad1SHasso Tepper 
41037f60ad1SHasso Tepper #define SDP_PUT32(s, cp)	do {			\
41137f60ad1SHasso Tepper 	be32enc((cp), (s));				\
41237f60ad1SHasso Tepper 	(cp) += sizeof(uint32_t);			\
41337f60ad1SHasso Tepper } while (/* CONSTCOND */0)
41437f60ad1SHasso Tepper 
41537f60ad1SHasso Tepper #define SDP_PUT64(s, cp)	do {			\
41637f60ad1SHasso Tepper 	be64enc((cp), (s));				\
41737f60ad1SHasso Tepper 	(cp) += sizeof(uint64_t);			\
41837f60ad1SHasso Tepper } while (/* CONSTCOND */0)
41937f60ad1SHasso Tepper 
42037f60ad1SHasso Tepper #if BYTE_ORDER == LITTLE_ENDIAN
42137f60ad1SHasso Tepper #define SDP_PUT128(l, cp)	do {			\
422d797dc5dSSascha Wildner 	const uint8_t *t_cp = (const uint8_t *)(cp);	\
42337f60ad1SHasso Tepper 	*t_cp++ = (l)->b[15];				\
42437f60ad1SHasso Tepper 	*t_cp++ = (l)->b[14];				\
42537f60ad1SHasso Tepper 	*t_cp++ = (l)->b[13];				\
42637f60ad1SHasso Tepper 	*t_cp++ = (l)->b[12];				\
42737f60ad1SHasso Tepper 	*t_cp++ = (l)->b[11];				\
42837f60ad1SHasso Tepper 	*t_cp++ = (l)->b[10];				\
42937f60ad1SHasso Tepper 	*t_cp++ = (l)->b[9];				\
43037f60ad1SHasso Tepper 	*t_cp++ = (l)->b[8];				\
43137f60ad1SHasso Tepper 	*t_cp++ = (l)->b[7];				\
43237f60ad1SHasso Tepper 	*t_cp++ = (l)->b[6];				\
43337f60ad1SHasso Tepper 	*t_cp++ = (l)->b[5];				\
43437f60ad1SHasso Tepper 	*t_cp++ = (l)->b[4];				\
43537f60ad1SHasso Tepper 	*t_cp++ = (l)->b[3];				\
43637f60ad1SHasso Tepper 	*t_cp++ = (l)->b[2];				\
43737f60ad1SHasso Tepper 	*t_cp++ = (l)->b[1];				\
43837f60ad1SHasso Tepper 	*t_cp   = (l)->b[0];				\
43937f60ad1SHasso Tepper 	(cp) += 16;					\
44037f60ad1SHasso Tepper } while (/* CONSTCOND */0)
44137f60ad1SHasso Tepper 
44237f60ad1SHasso Tepper #define SDP_PUT_UUID128(l, cp)	do {			\
44337f60ad1SHasso Tepper 	memcpy((cp), &((l)->b), 16);			\
44437f60ad1SHasso Tepper 	(cp) += 16;					\
44537f60ad1SHasso Tepper } while (/* CONSTCOND */0)
44637f60ad1SHasso Tepper #elif BYTE_ORDER == BIG_ENDIAN
44737f60ad1SHasso Tepper #define SDP_PUT128(l, cp)	do {			\
44837f60ad1SHasso Tepper 	memcpy((cp), &((l)->b), 16);			\
44937f60ad1SHasso Tepper 	(cp) += 16;					\
45037f60ad1SHasso Tepper } while (/* CONSTCOND */0)
45137f60ad1SHasso Tepper 
45237f60ad1SHasso Tepper #define SDP_PUT_UUID128(l, cp)	SDP_PUT128(l, cp)
45337f60ad1SHasso Tepper #else
45437f60ad1SHasso Tepper #error	"Unsupported BYTE_ORDER"
45537f60ad1SHasso Tepper #endif /* BYTE_ORDER */
45637f60ad1SHasso Tepper 
45737f60ad1SHasso Tepper void *             sdp_open       (bdaddr_t const *l, bdaddr_t const *r);
45837f60ad1SHasso Tepper void *             sdp_open_local (char const *control);
45937f60ad1SHasso Tepper int32_t            sdp_close      (void *xs);
46037f60ad1SHasso Tepper int32_t            sdp_error      (void *xs);
46137f60ad1SHasso Tepper 
46237f60ad1SHasso Tepper int32_t            sdp_search     (void *xs,
46337f60ad1SHasso Tepper                                    uint32_t plen, uint16_t const *pp,
46437f60ad1SHasso Tepper                                    uint32_t alen, uint32_t const *ap,
46537f60ad1SHasso Tepper                                    uint32_t vlen, sdp_attr_t *vp);
46637f60ad1SHasso Tepper 
46737f60ad1SHasso Tepper char const *       sdp_attr2desc  (uint16_t attr);
46837f60ad1SHasso Tepper char const *       sdp_uuid2desc  (uint16_t uuid);
46937f60ad1SHasso Tepper void               sdp_print      (uint32_t level, uint8_t *start,
47037f60ad1SHasso Tepper                                    uint8_t const *end);
47137f60ad1SHasso Tepper 
47237f60ad1SHasso Tepper /******************************************************************************
47337f60ad1SHasso Tepper  * sdpd interface and Bluetooth profiles data
47437f60ad1SHasso Tepper  *****************************************************************************/
47537f60ad1SHasso Tepper 
47637f60ad1SHasso Tepper #define SDP_LOCAL_PATH	"/var/run/sdp"
47737f60ad1SHasso Tepper #define SDP_LOCAL_MTU	4096
47837f60ad1SHasso Tepper 
47937f60ad1SHasso Tepper /*
48037f60ad1SHasso Tepper  * These are NOT defined in spec and only accepted on control sockets.
48137f60ad1SHasso Tepper  * The response to these request always will be SDP_PDU_ERROR_RESPONSE.
48237f60ad1SHasso Tepper  * The first 2 bytes (after PDU header) is an error code (in network
48337f60ad1SHasso Tepper  * byte order). The rest of the data (pdu->len - 2) is a response data
48437f60ad1SHasso Tepper  * and depend on the request.
48537f60ad1SHasso Tepper  *
48637f60ad1SHasso Tepper  * SDP_PDU_SERVICE_REGISTER_REQUEST
48737f60ad1SHasso Tepper  *	pdu_header_t	hdr;
48837f60ad1SHasso Tepper  *	uint16_t	uuid;	service class UUID (network byte order)
48937f60ad1SHasso Tepper  *	bdaddr_t	bdaddr;	local BD_ADDR (or ANY)
49037f60ad1SHasso Tepper  *	profile data[pdu->len - sizeof(uuid) - sizeof(bdaddr)]
49137f60ad1SHasso Tepper  *
49237f60ad1SHasso Tepper  * in successful reponse additional data will contain 4 bytes record handle
49337f60ad1SHasso Tepper  *
49437f60ad1SHasso Tepper  *
49537f60ad1SHasso Tepper  * SDP_PDU_SERVICE_UNREGISTER_REQUEST
49637f60ad1SHasso Tepper  *	pdu_header_t	hdr;
49737f60ad1SHasso Tepper  *	uint32_t	record_handle;	(network byte order)
49837f60ad1SHasso Tepper  *
49937f60ad1SHasso Tepper  * no additional data in response.
50037f60ad1SHasso Tepper  *
50137f60ad1SHasso Tepper  *
50237f60ad1SHasso Tepper  * SDP_PDU_SERVICE_CHANGE_REQUEST
50337f60ad1SHasso Tepper  *	pdu_header_t	hdr;
50437f60ad1SHasso Tepper  *	uint32_t	record_handle;	(network byte order)
50537f60ad1SHasso Tepper  *	profile data[pdu->len - sizeof(record_handle)]
50637f60ad1SHasso Tepper  *
50737f60ad1SHasso Tepper  * no additional data in response.
50837f60ad1SHasso Tepper  */
50937f60ad1SHasso Tepper 
51037f60ad1SHasso Tepper #define SDP_PDU_SERVICE_REGISTER_REQUEST	0x81
51137f60ad1SHasso Tepper #define SDP_PDU_SERVICE_UNREGISTER_REQUEST	0x82
51237f60ad1SHasso Tepper #define SDP_PDU_SERVICE_CHANGE_REQUEST		0x83
51337f60ad1SHasso Tepper 
51437f60ad1SHasso Tepper struct sdp_dun_profile
51537f60ad1SHasso Tepper {
51637f60ad1SHasso Tepper 	uint8_t	server_channel;
51737f60ad1SHasso Tepper 	uint8_t	audio_feedback_support;
51837f60ad1SHasso Tepper 	uint8_t	reserved[2];
51937f60ad1SHasso Tepper };
52037f60ad1SHasso Tepper typedef struct sdp_dun_profile		sdp_dun_profile_t;
52137f60ad1SHasso Tepper typedef struct sdp_dun_profile *	sdp_dun_profile_p;
52237f60ad1SHasso Tepper 
52337f60ad1SHasso Tepper struct sdp_ftrn_profile
52437f60ad1SHasso Tepper {
52537f60ad1SHasso Tepper 	uint8_t	server_channel;
52637f60ad1SHasso Tepper 	uint8_t	reserved[3];
52737f60ad1SHasso Tepper };
52837f60ad1SHasso Tepper typedef struct sdp_ftrn_profile		sdp_ftrn_profile_t;
52937f60ad1SHasso Tepper typedef struct sdp_ftrn_profile *	sdp_ftrn_profile_p;
53037f60ad1SHasso Tepper 
53137f60ad1SHasso Tepper struct sdp_hset_profile
53237f60ad1SHasso Tepper {
53337f60ad1SHasso Tepper 	uint8_t server_channel;
53437f60ad1SHasso Tepper 	uint8_t	reserved[3];
53537f60ad1SHasso Tepper };
53637f60ad1SHasso Tepper typedef struct sdp_hset_profile		sdp_hset_profile_t;
53737f60ad1SHasso Tepper typedef struct sdp_hset_profile *	sdp_hset_profile_p;
53837f60ad1SHasso Tepper 
53937f60ad1SHasso Tepper struct sdp_hf_profile
54037f60ad1SHasso Tepper {
54137f60ad1SHasso Tepper 	uint8_t server_channel;
54237f60ad1SHasso Tepper 	uint16_t supported_features;
54337f60ad1SHasso Tepper };
54437f60ad1SHasso Tepper typedef struct sdp_hf_profile		sdp_hf_profile_t;
54537f60ad1SHasso Tepper typedef struct sdp_hf_profile *		sdp_hf_profile_p;
54637f60ad1SHasso Tepper 
54737f60ad1SHasso Tepper /* Keep this in sync with sdp_opush_profile */
54837f60ad1SHasso Tepper struct sdp_irmc_profile
54937f60ad1SHasso Tepper {
55037f60ad1SHasso Tepper 	uint8_t	server_channel;
55137f60ad1SHasso Tepper 	uint8_t	supported_formats_size;
55237f60ad1SHasso Tepper 	uint8_t	supported_formats[30];
55337f60ad1SHasso Tepper };
55437f60ad1SHasso Tepper typedef struct sdp_irmc_profile		sdp_irmc_profile_t;
55537f60ad1SHasso Tepper typedef struct sdp_irmc_profile *	sdp_irmc_profile_p;
55637f60ad1SHasso Tepper 
55737f60ad1SHasso Tepper struct sdp_irmc_command_profile
55837f60ad1SHasso Tepper {
55937f60ad1SHasso Tepper 	uint8_t	server_channel;
56037f60ad1SHasso Tepper 	uint8_t	reserved[3];
56137f60ad1SHasso Tepper };
56237f60ad1SHasso Tepper typedef struct sdp_irmc_command_profile		sdp_irmc_command_profile_t;
56337f60ad1SHasso Tepper typedef struct sdp_irmc_command_profile *	sdp_irmc_command_profile_p;
56437f60ad1SHasso Tepper 
56537f60ad1SHasso Tepper struct sdp_lan_profile
56637f60ad1SHasso Tepper {
56737f60ad1SHasso Tepper 	uint8_t		server_channel;
56837f60ad1SHasso Tepper 	uint8_t		load_factor;
56937f60ad1SHasso Tepper 	uint8_t		reserved;
57037f60ad1SHasso Tepper 	uint8_t		ip_subnet_radius;
57137f60ad1SHasso Tepper 	uint32_t	ip_subnet;
57237f60ad1SHasso Tepper };
57337f60ad1SHasso Tepper typedef struct sdp_lan_profile		sdp_lan_profile_t;
57437f60ad1SHasso Tepper typedef struct sdp_lan_profile *	sdp_lan_profile_p;
57537f60ad1SHasso Tepper 
57637f60ad1SHasso Tepper /* Keep this in sync with sdp_irmc_profile */
57737f60ad1SHasso Tepper struct sdp_opush_profile
57837f60ad1SHasso Tepper {
57937f60ad1SHasso Tepper 	uint8_t	server_channel;
58037f60ad1SHasso Tepper 	uint8_t	supported_formats_size;
58137f60ad1SHasso Tepper 	uint8_t	supported_formats[30];
58237f60ad1SHasso Tepper };
58337f60ad1SHasso Tepper typedef struct sdp_opush_profile	sdp_opush_profile_t;
58437f60ad1SHasso Tepper typedef struct sdp_opush_profile *	sdp_opush_profile_p;
58537f60ad1SHasso Tepper 
58637f60ad1SHasso Tepper struct sdp_sp_profile
58737f60ad1SHasso Tepper {
58837f60ad1SHasso Tepper 	uint8_t	server_channel;
58937f60ad1SHasso Tepper 	uint8_t	reserved[3];
59037f60ad1SHasso Tepper };
59137f60ad1SHasso Tepper typedef struct sdp_sp_profile	sdp_sp_profile_t;
59237f60ad1SHasso Tepper typedef struct sdp_sp_profile *	sdp_sp_profile_p;
59337f60ad1SHasso Tepper 
59437f60ad1SHasso Tepper int32_t	sdp_register_service	(void *xss, uint16_t uuid,
59537f60ad1SHasso Tepper 				 bdaddr_t *bdaddr, uint8_t *data,
59637f60ad1SHasso Tepper 				 uint32_t datalen, uint32_t *handle);
59737f60ad1SHasso Tepper int32_t	sdp_unregister_service	(void *xss, uint32_t handle);
59837f60ad1SHasso Tepper int32_t	sdp_change_service	(void *xss, uint32_t handle,
59937f60ad1SHasso Tepper 				 uint8_t *data, uint32_t datalen);
60037f60ad1SHasso Tepper 
60137f60ad1SHasso Tepper __END_DECLS
60237f60ad1SHasso Tepper 
60337f60ad1SHasso Tepper #endif /* ndef _SDP_H_ */
604