diff options
author | emax <emax@FreeBSD.org> | 2008-03-11 16:51:07 +0000 |
---|---|---|
committer | emax <emax@FreeBSD.org> | 2008-03-11 16:51:07 +0000 |
commit | a88b6bb8244c59add966d053d3d3ad386d86a90c (patch) | |
tree | 9c89df9a20d482253fdb95c5644e82c90a7ed602 /usr.sbin | |
parent | e08f380381023b1a22b3d0d44884b22e52079ee8 (diff) | |
download | FreeBSD-src-a88b6bb8244c59add966d053d3d3ad386d86a90c.zip FreeBSD-src-a88b6bb8244c59add966d053d3d3ad386d86a90c.tar.gz |
Add support for the NAP, GN and PANU profiles to the sdpd(8).
It should be mentioned that a somewhat similar patch was
submitted by Rako < rako29 at gmail dot com >
MFC after: 1 week
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bluetooth/sdpd/Makefile | 6 | ||||
-rw-r--r-- | usr.sbin/bluetooth/sdpd/gn.c | 146 | ||||
-rw-r--r-- | usr.sbin/bluetooth/sdpd/nap.c | 183 | ||||
-rw-r--r-- | usr.sbin/bluetooth/sdpd/panu.c | 131 | ||||
-rw-r--r-- | usr.sbin/bluetooth/sdpd/profile.c | 95 | ||||
-rw-r--r-- | usr.sbin/bluetooth/sdpd/profile.h | 7 |
6 files changed, 562 insertions, 6 deletions
diff --git a/usr.sbin/bluetooth/sdpd/Makefile b/usr.sbin/bluetooth/sdpd/Makefile index db97aa9..c47441f 100644 --- a/usr.sbin/bluetooth/sdpd/Makefile +++ b/usr.sbin/bluetooth/sdpd/Makefile @@ -3,9 +3,9 @@ PROG= sdpd MAN= sdpd.8 -SRCS= bgd.c dun.c ftrn.c irmc.c irmc_command.c lan.c log.c main.c \ - opush.c profile.c provider.c sar.c scr.c sd.c server.c sp.c \ - srr.c ssar.c ssr.c sur.c uuid.c +SRCS= bgd.c dun.c ftrn.c gn.c irmc.c irmc_command.c lan.c log.c \ + main.c nap.c opush.c panu.c profile.c provider.c sar.c scr.c \ + sd.c server.c sp.c srr.c ssar.c ssr.c sur.c uuid.c CFLAGS+= -I${.CURDIR} WARNS?= 2 diff --git a/usr.sbin/bluetooth/sdpd/gn.c b/usr.sbin/bluetooth/sdpd/gn.c new file mode 100644 index 0000000..618388d --- /dev/null +++ b/usr.sbin/bluetooth/sdpd/gn.c @@ -0,0 +1,146 @@ +/* + * gn.c + */ + +/*- + * Copyright (c) 2008 Maksim Yevmenkin <m_evmenkin@yahoo.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: gn.c,v 1.1 2008/03/11 00:02:42 max Exp $ + * $FreeBSD$ + */ + +#include <sys/queue.h> +#include <bluetooth.h> +#include <sdp.h> +#include <string.h> +#include "profile.h" +#include "provider.h" + +static int32_t +gn_profile_create_service_class_id_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static uint16_t service_classes[] = { + SDP_SERVICE_CLASS_GN + }; + + return (common_profile_create_service_class_id_list( + buf, eob, + (uint8_t const *) service_classes, + sizeof(service_classes))); +} + +static int32_t +gn_profile_create_bluetooth_profile_descriptor_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static uint16_t profile_descriptor_list[] = { + SDP_SERVICE_CLASS_GN, + 0x0100 + }; + + return (common_profile_create_bluetooth_profile_descriptor_list( + buf, eob, + (uint8_t const *) profile_descriptor_list, + sizeof(profile_descriptor_list))); +} + +static int32_t +gn_profile_create_service_name( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static char service_name[] = "Group Ad-hoc Network"; + + return (common_profile_create_string8( + buf, eob, + (uint8_t const *) service_name, strlen(service_name))); +} + +static int32_t +gn_profile_create_service_description( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static char service_descr[] = + "Personal Group Ad-hoc Network Service"; + + return (common_profile_create_string8( + buf, eob, + (uint8_t const *) service_descr, + strlen(service_descr))); +} + +static int32_t +gn_profile_create_protocol_descriptor_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + return (bnep_profile_create_protocol_descriptor_list( + buf, eob, NULL, 0)); +} + +static int32_t +gn_profile_create_security_description( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + provider_p provider = (provider_p) data; + sdp_gn_profile_p gn = (sdp_gn_profile_p) provider->data; + + return (bnep_profile_create_security_description(buf, eob, + (uint8_t const *) &gn->security_description, + sizeof(gn->security_description))); +} + +static attr_t gn_profile_attrs[] = { + { SDP_ATTR_SERVICE_RECORD_HANDLE, + common_profile_create_service_record_handle }, + { SDP_ATTR_SERVICE_CLASS_ID_LIST, + gn_profile_create_service_class_id_list }, + { SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST, + gn_profile_create_protocol_descriptor_list }, + { SDP_ATTR_LANGUAGE_BASE_ATTRIBUTE_ID_LIST, + common_profile_create_language_base_attribute_id_list }, + { SDP_ATTR_BLUETOOTH_PROFILE_DESCRIPTOR_LIST, + gn_profile_create_bluetooth_profile_descriptor_list }, + { SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_NAME_OFFSET, + gn_profile_create_service_name }, + { SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_DESCRIPTION_OFFSET, + gn_profile_create_service_description }, + { SDP_ATTR_SECURITY_DESCRIPTION, + gn_profile_create_security_description }, + { 0, NULL } /* end entry */ +}; + +profile_t gn_profile_descriptor = { + SDP_SERVICE_CLASS_GN, + sizeof(sdp_gn_profile_t), + common_profile_always_valid, + (attr_t const * const) &gn_profile_attrs +}; + diff --git a/usr.sbin/bluetooth/sdpd/nap.c b/usr.sbin/bluetooth/sdpd/nap.c new file mode 100644 index 0000000..45c0c6d --- /dev/null +++ b/usr.sbin/bluetooth/sdpd/nap.c @@ -0,0 +1,183 @@ +/* + * nap.c + */ + +/*- + * Copyright (c) 2008 Maksim Yevmenkin <m_evmenkin@yahoo.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: nap.c,v 1.1 2008/03/11 00:02:42 max Exp $ + * $FreeBSD$ + */ + +#include <sys/queue.h> +#include <bluetooth.h> +#include <sdp.h> +#include <string.h> +#include "profile.h" +#include "provider.h" + +static int32_t +nap_profile_create_service_class_id_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static uint16_t service_classes[] = { + SDP_SERVICE_CLASS_NAP + }; + + return (common_profile_create_service_class_id_list( + buf, eob, + (uint8_t const *) service_classes, + sizeof(service_classes))); +} + +static int32_t +nap_profile_create_bluetooth_profile_descriptor_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static uint16_t profile_descriptor_list[] = { + SDP_SERVICE_CLASS_NAP, + 0x0100 + }; + + return (common_profile_create_bluetooth_profile_descriptor_list( + buf, eob, + (uint8_t const *) profile_descriptor_list, + sizeof(profile_descriptor_list))); +} + +static int32_t +nap_profile_create_service_name( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static char service_name[] = "Network Access Point"; + + return (common_profile_create_string8( + buf, eob, + (uint8_t const *) service_name, strlen(service_name))); +} + +static int32_t +nap_profile_create_service_description( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static char service_descr[] = "Personal Ad-hoc Network Service"; + + return (common_profile_create_string8( + buf, eob, + (uint8_t const *) service_descr, + strlen(service_descr))); +} + +static int32_t +nap_profile_create_protocol_descriptor_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + return (bnep_profile_create_protocol_descriptor_list( + buf, eob, NULL, 0)); +} + +static int32_t +nap_profile_create_security_description( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + provider_p provider = (provider_p) data; + sdp_nap_profile_p nap = (sdp_nap_profile_p) provider->data; + + return (bnep_profile_create_security_description(buf, eob, + (uint8_t const *) &nap->security_description, + sizeof(nap->security_description))); +} + +static int32_t +nap_profile_create_net_access_type( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + provider_p provider = (provider_p) data; + sdp_nap_profile_p nap = (sdp_nap_profile_p) provider->data; + + if (buf + 3 > eob) + return (-1); + + SDP_PUT8(SDP_DATA_UINT16, buf); + SDP_PUT16(nap->net_access_type, buf); + + return (3); +} + +static int32_t +nap_profile_create_max_net_access_rate( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + provider_p provider = (provider_p) data; + sdp_nap_profile_p nap = (sdp_nap_profile_p) provider->data; + + if (buf + 3 > eob) + return (-1); + + SDP_PUT8(SDP_DATA_UINT16, buf); + SDP_PUT16(nap->max_net_access_rate, buf); + + return (3); +} + +static attr_t nap_profile_attrs[] = { + { SDP_ATTR_SERVICE_RECORD_HANDLE, + common_profile_create_service_record_handle }, + { SDP_ATTR_SERVICE_CLASS_ID_LIST, + nap_profile_create_service_class_id_list }, + { SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST, + nap_profile_create_protocol_descriptor_list }, + { SDP_ATTR_LANGUAGE_BASE_ATTRIBUTE_ID_LIST, + common_profile_create_language_base_attribute_id_list }, + { SDP_ATTR_BLUETOOTH_PROFILE_DESCRIPTOR_LIST, + nap_profile_create_bluetooth_profile_descriptor_list }, + { SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_NAME_OFFSET, + nap_profile_create_service_name }, + { SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_DESCRIPTION_OFFSET, + nap_profile_create_service_description }, + { SDP_ATTR_SECURITY_DESCRIPTION, + nap_profile_create_security_description }, + { SDP_ATTR_NET_ACCESS_TYPE, + nap_profile_create_net_access_type }, + { SDP_ATTR_MAX_NET_ACCESS_RATE, + nap_profile_create_max_net_access_rate }, + { 0, NULL } /* end entry */ +}; + +profile_t nap_profile_descriptor = { + SDP_SERVICE_CLASS_NAP, + sizeof(sdp_nap_profile_t), + common_profile_always_valid, + (attr_t const * const) &nap_profile_attrs +}; + diff --git a/usr.sbin/bluetooth/sdpd/panu.c b/usr.sbin/bluetooth/sdpd/panu.c new file mode 100644 index 0000000..196b369 --- /dev/null +++ b/usr.sbin/bluetooth/sdpd/panu.c @@ -0,0 +1,131 @@ +/* + * panu.c + */ + +/*- + * Copyright (c) 2008 Maksim Yevmenkin <m_evmenkin@yahoo.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: panu.c,v 1.1 2008/03/11 00:02:42 max Exp $ + * $FreeBSD$ + */ + +#include <sys/queue.h> +#include <bluetooth.h> +#include <sdp.h> +#include <string.h> +#include "profile.h" +#include "provider.h" + +static int32_t +panu_profile_create_service_class_id_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static uint16_t service_classes[] = { + SDP_SERVICE_CLASS_PANU + }; + + return (common_profile_create_service_class_id_list( + buf, eob, + (uint8_t const *) service_classes, + sizeof(service_classes))); +} + +static int32_t +panu_profile_create_bluetooth_profile_descriptor_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static uint16_t profile_descriptor_list[] = { + SDP_SERVICE_CLASS_PANU, + 0x0100 + }; + + return (common_profile_create_bluetooth_profile_descriptor_list( + buf, eob, + (uint8_t const *) profile_descriptor_list, + sizeof(profile_descriptor_list))); +} + +static int32_t +panu_profile_create_service_name( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static char service_name[] = "Personal Ad-hoc User Service"; + + return (common_profile_create_string8( + buf, eob, + (uint8_t const *) service_name, strlen(service_name))); +} + +static int32_t +panu_profile_create_service_description( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + static char service_descr[] = + "Personal Ad-hoc User Service"; + + return (common_profile_create_string8( + buf, eob, + (uint8_t const *) service_descr, + strlen(service_descr))); +} + +static int32_t +panu_profile_create_protocol_descriptor_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + return (bnep_profile_create_protocol_descriptor_list( + buf, eob, NULL, 0)); +} + +static attr_t panu_profile_attrs[] = { + { SDP_ATTR_SERVICE_RECORD_HANDLE, + common_profile_create_service_record_handle }, + { SDP_ATTR_SERVICE_CLASS_ID_LIST, + panu_profile_create_service_class_id_list }, + { SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST, + panu_profile_create_protocol_descriptor_list }, + { SDP_ATTR_LANGUAGE_BASE_ATTRIBUTE_ID_LIST, + common_profile_create_language_base_attribute_id_list }, + { SDP_ATTR_BLUETOOTH_PROFILE_DESCRIPTOR_LIST, + panu_profile_create_bluetooth_profile_descriptor_list }, + { SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_NAME_OFFSET, + panu_profile_create_service_name }, + { SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_DESCRIPTION_OFFSET, + panu_profile_create_service_description }, + { 0, NULL } /* end entry */ +}; + +profile_t panu_profile_descriptor = { + SDP_SERVICE_CLASS_PANU, + sizeof(sdp_panu_profile_t), + common_profile_always_valid, + (attr_t const * const) &panu_profile_attrs +}; + diff --git a/usr.sbin/bluetooth/sdpd/profile.c b/usr.sbin/bluetooth/sdpd/profile.c index 3ba0159..e388efa 100644 --- a/usr.sbin/bluetooth/sdpd/profile.c +++ b/usr.sbin/bluetooth/sdpd/profile.c @@ -1,6 +1,8 @@ /* * profile.c - * + */ + +/*- * Copyright (c) 2004 Maksim Yevmenkin <m_evmenkin@yahoo.com> * All rights reserved. * @@ -50,6 +52,9 @@ profile_get_descriptor(uint16_t uuid) extern profile_t lan_profile_descriptor; extern profile_t opush_profile_descriptor; extern profile_t sp_profile_descriptor; + extern profile_t nap_profile_descriptor; + extern profile_t gn_profile_descriptor; + extern profile_t panu_profile_descriptor; static const profile_p profiles[] = { &dun_profile_descriptor, @@ -58,7 +63,10 @@ profile_get_descriptor(uint16_t uuid) &irmc_command_profile_descriptor, &lan_profile_descriptor, &opush_profile_descriptor, - &sp_profile_descriptor + &sp_profile_descriptor, + &nap_profile_descriptor, + &gn_profile_descriptor, + &panu_profile_descriptor }; int32_t i; @@ -352,6 +360,16 @@ obex_profile_create_supported_formats_list( } /* + * do not check anything + */ + +int32_t +common_profile_always_valid(uint8_t const *data, uint32_t datalen) +{ + return (1); +} + +/* * verify server channel number (the first byte in the data) */ @@ -383,3 +401,76 @@ obex_profile_data_valid(uint8_t const *data, uint32_t datalen) return (1); } +/* + * BNEP protocol descriptor + */ + +int32_t +bnep_profile_create_protocol_descriptor_list( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + /* supported protocol types */ + uint16_t ptype[] = { + 0x0800, /* IPv4 */ + 0x0806, /* ARP */ +#ifdef INET6 + 0x86dd, /* IPv6 */ +#endif + }; + + uint16_t i, psm = 15, version = 0x0100, + nptypes = sizeof(ptype)/sizeof(ptype[0]), + nptypes_size = nptypes * 3; + + if (18 + nptypes_size > 255 || buf + 20 + nptypes_size > eob) + return (-1); + + SDP_PUT8(SDP_DATA_SEQ8, buf); + SDP_PUT8(18 + nptypes_size, buf); + + SDP_PUT8(SDP_DATA_SEQ8, buf); + SDP_PUT8(6, buf); + SDP_PUT8(SDP_DATA_UUID16, buf); + SDP_PUT16(SDP_UUID_PROTOCOL_L2CAP, buf); + SDP_PUT8(SDP_DATA_UINT16, buf); + SDP_PUT16(psm, buf); + + SDP_PUT8(SDP_DATA_SEQ8, buf); + SDP_PUT8(8 + nptypes_size, buf); + SDP_PUT8(SDP_DATA_UUID16, buf); + SDP_PUT16(SDP_UUID_PROTOCOL_BNEP, buf); + SDP_PUT8(SDP_DATA_UINT16, buf); + SDP_PUT16(version, buf); + SDP_PUT8(SDP_DATA_SEQ8, buf); + SDP_PUT8(nptypes_size, buf); + for (i = 0; i < nptypes; i ++) { + SDP_PUT8(SDP_DATA_UINT16, buf); + SDP_PUT16(ptype[i], buf); + } + + return (20 + nptypes_size); +} + +/* + * BNEP security description + */ + +int32_t +bnep_profile_create_security_description( + uint8_t *buf, uint8_t const * const eob, + uint8_t const *data, uint32_t datalen) +{ + uint16_t security_descr; + + if (datalen != 2 || buf + 3 > eob) + return (-1); + + memcpy(&security_descr, data, sizeof(security_descr)); + + SDP_PUT8(SDP_DATA_UINT16, buf); + SDP_PUT16(security_descr, buf); + + return (3); +} + diff --git a/usr.sbin/bluetooth/sdpd/profile.h b/usr.sbin/bluetooth/sdpd/profile.h index 0ca4221..e72d2c2 100644 --- a/usr.sbin/bluetooth/sdpd/profile.h +++ b/usr.sbin/bluetooth/sdpd/profile.h @@ -1,6 +1,8 @@ /* * profile.h - * + */ + +/*- * Copyright (c) 2004 Maksim Yevmenkin <m_evmenkin@yahoo.com> * All rights reserved. * @@ -82,7 +84,10 @@ profile_attr_create_t common_profile_create_string8; profile_attr_create_t rfcomm_profile_create_protocol_descriptor_list; profile_attr_create_t obex_profile_create_protocol_descriptor_list; profile_attr_create_t obex_profile_create_supported_formats_list; +profile_attr_create_t bnep_profile_create_protocol_descriptor_list; +profile_attr_create_t bnep_profile_create_security_description; +profile_data_valid_t common_profile_always_valid; profile_data_valid_t common_profile_server_channel_valid; profile_data_valid_t obex_profile_data_valid; |