Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.sbin/bluetooth/sdpd/gn.c
103829 views
1
/*
2
* gn.c
3
*/
4
5
/*-
6
* SPDX-License-Identifier: BSD-2-Clause
7
*
8
* Copyright (c) 2008 Maksim Yevmenkin <[email protected]>
9
* All rights reserved.
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions
13
* are met:
14
* 1. Redistributions of source code must retain the above copyright
15
* notice, this list of conditions and the following disclaimer.
16
* 2. Redistributions in binary form must reproduce the above copyright
17
* notice, this list of conditions and the following disclaimer in the
18
* documentation and/or other materials provided with the distribution.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30
* SUCH DAMAGE.
31
*
32
* $Id: gn.c,v 1.1 2008/03/11 00:02:42 max Exp $
33
*/
34
35
#include <sys/queue.h>
36
#define L2CAP_SOCKET_CHECKED
37
#include <bluetooth.h>
38
#include <sdp.h>
39
#include <string.h>
40
#include "profile.h"
41
#include "provider.h"
42
43
static int32_t
44
gn_profile_create_service_class_id_list(
45
uint8_t *buf, uint8_t const * const eob,
46
uint8_t const *data, uint32_t datalen)
47
{
48
static uint16_t service_classes[] = {
49
SDP_SERVICE_CLASS_GN
50
};
51
52
return (common_profile_create_service_class_id_list(
53
buf, eob,
54
(uint8_t const *) service_classes,
55
sizeof(service_classes)));
56
}
57
58
static int32_t
59
gn_profile_create_bluetooth_profile_descriptor_list(
60
uint8_t *buf, uint8_t const * const eob,
61
uint8_t const *data, uint32_t datalen)
62
{
63
static uint16_t profile_descriptor_list[] = {
64
SDP_SERVICE_CLASS_GN,
65
0x0100
66
};
67
68
return (common_profile_create_bluetooth_profile_descriptor_list(
69
buf, eob,
70
(uint8_t const *) profile_descriptor_list,
71
sizeof(profile_descriptor_list)));
72
}
73
74
static int32_t
75
gn_profile_create_service_name(
76
uint8_t *buf, uint8_t const * const eob,
77
uint8_t const *data, uint32_t datalen)
78
{
79
static char service_name[] = "Group Ad-hoc Network";
80
81
return (common_profile_create_string8(
82
buf, eob,
83
(uint8_t const *) service_name, strlen(service_name)));
84
}
85
86
static int32_t
87
gn_profile_create_service_description(
88
uint8_t *buf, uint8_t const * const eob,
89
uint8_t const *data, uint32_t datalen)
90
{
91
static char service_descr[] =
92
"Personal Group Ad-hoc Network Service";
93
94
return (common_profile_create_string8(
95
buf, eob,
96
(uint8_t const *) service_descr,
97
strlen(service_descr)));
98
}
99
100
static int32_t
101
gn_profile_create_protocol_descriptor_list(
102
uint8_t *buf, uint8_t const * const eob,
103
uint8_t const *data, uint32_t datalen)
104
{
105
provider_p provider = (provider_p) data;
106
sdp_gn_profile_p gn = (sdp_gn_profile_p) provider->data;
107
108
return (bnep_profile_create_protocol_descriptor_list(
109
buf, eob, (uint8_t const *) &gn->psm,
110
sizeof(gn->psm)));
111
}
112
113
static int32_t
114
gn_profile_create_security_description(
115
uint8_t *buf, uint8_t const * const eob,
116
uint8_t const *data, uint32_t datalen)
117
{
118
provider_p provider = (provider_p) data;
119
sdp_gn_profile_p gn = (sdp_gn_profile_p) provider->data;
120
121
return (bnep_profile_create_security_description(buf, eob,
122
(uint8_t const *) &gn->security_description,
123
sizeof(gn->security_description)));
124
}
125
126
static int32_t
127
gn_profile_create_service_availability(
128
uint8_t *buf, uint8_t const * const eob,
129
uint8_t const *data, uint32_t datalen)
130
{
131
provider_p provider = (provider_p) data;
132
sdp_gn_profile_p gn = (sdp_gn_profile_p) provider->data;
133
134
return (common_profile_create_service_availability(buf, eob,
135
&gn->load_factor, 1));
136
}
137
138
static int32_t
139
gn_profile_data_valid(uint8_t const *data, uint32_t datalen)
140
{
141
sdp_gn_profile_p gn = (sdp_gn_profile_p) data;
142
143
return ((gn->psm == 0)? 0 : 1);
144
}
145
146
static attr_t gn_profile_attrs[] = {
147
{ SDP_ATTR_SERVICE_RECORD_HANDLE,
148
common_profile_create_service_record_handle },
149
{ SDP_ATTR_SERVICE_CLASS_ID_LIST,
150
gn_profile_create_service_class_id_list },
151
{ SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST,
152
gn_profile_create_protocol_descriptor_list },
153
{ SDP_ATTR_LANGUAGE_BASE_ATTRIBUTE_ID_LIST,
154
common_profile_create_language_base_attribute_id_list },
155
{ SDP_ATTR_SERVICE_AVAILABILITY,
156
gn_profile_create_service_availability },
157
{ SDP_ATTR_BLUETOOTH_PROFILE_DESCRIPTOR_LIST,
158
gn_profile_create_bluetooth_profile_descriptor_list },
159
{ SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_NAME_OFFSET,
160
gn_profile_create_service_name },
161
{ SDP_ATTR_PRIMARY_LANGUAGE_BASE_ID + SDP_ATTR_SERVICE_DESCRIPTION_OFFSET,
162
gn_profile_create_service_description },
163
{ SDP_ATTR_SECURITY_DESCRIPTION,
164
gn_profile_create_security_description },
165
{ 0, NULL } /* end entry */
166
};
167
168
profile_t gn_profile_descriptor = {
169
SDP_SERVICE_CLASS_GN,
170
sizeof(sdp_gn_profile_t),
171
gn_profile_data_valid,
172
(attr_t const * const) &gn_profile_attrs
173
};
174
175
176