1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-foundation")]
use objc2_foundation::*;
use crate::*;
extern_class!(
/// An instance of this class represents a single SDP service record.
///
/// As a service record, an instance of this class has an NSDictionary of service attributes.
/// It also has a link to the IOBluetoothDevice that the service belongs to. The service
/// dictionary is keyed off of the attribute ID of each attribute represented as an NSNumber.
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/iobluetooth/iobluetoothsdpservicerecord?language=objc)
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct IOBluetoothSDPServiceRecord;
);
#[cfg(feature = "objc2-foundation")]
extern_conformance!(
unsafe impl NSCoding for IOBluetoothSDPServiceRecord {}
);
extern_conformance!(
unsafe impl NSObjectProtocol for IOBluetoothSDPServiceRecord {}
);
#[cfg(feature = "objc2-foundation")]
extern_conformance!(
unsafe impl NSSecureCoding for IOBluetoothSDPServiceRecord {}
);
impl IOBluetoothSDPServiceRecord {
extern_methods!(
#[cfg(feature = "objc2-foundation")]
/// Adds a service to the local SDP server.
///
/// Returns: Returns an IOBluetoothSDPServiceRecord * with the attributes specified in the provided dictionary.
///
///
/// Each entry in the dictionary representing the service contains the individual attributes. Each
/// attribute in the dict is keyed by a string that must begin with a hex number representing the
/// attribute ID. The key string may contain additional characters if desired as long as they
/// follow a space after the ID hex string. The attribute value must follow the dictionary format
/// described by IOBluetoothSDPDataElement. This dictionary format allows a service dict to be
/// created as a plist file and then loaded into the system rather than built up in code. See the
/// example code for an example of how can be done.
///
/// If the service record handle, L2CAP PSM or RFCOMM channel ID specified in the dictionary are in
/// use, an alternate one will be assigned.
///
/// In addition to attributes that represent the service itself, additional attributes may be specified
/// that control the local behavior of the service. To specify these local attributes, an additional
/// property titled "LocalAttributes" may be added to the root of the service dict. The value of this
/// property must be a dictionary that contains the individual local attributes.
///
/// Currently, only two local attributes are supported: "Persistent" and "TargetApplication".
///
/// The "Persistent" local attribute must be either a boolean or number representing whether the service
/// should be persistent. A persistent service will be saved off and restored any time the Bluetooth
/// hardware is present. It will persist through reboots and can only be removed by calling
/// IOBluetoothRemoveServiceWithRecordHandle(void). This attribute is optional. By default, if no
/// "Persistent" local property is present, the service will only exist temporarily. It will
/// be removed either when IOBluetoothRemoveServiceWithRecordHandle(void) is called or when the client
/// application exits.
///
/// The "TargetApplication" local attribute is used to specify an application to be launched when a
/// remote device attempts to connect to the service (by opening either an L2CAP or RFCOMM channel of
/// the type specified in the service). This value must be a string representing the absolute path to
/// the target executable (not just the .app wrapper - i.e.
/// /System/Library/CoreServices/OBEXAgent.app/Contents/MacOS/OBEXAgent). This attribute is optional.
/// If no "TargetApplication" local attribute is specified, no special action will take place when an
/// incoming connection to the service is created. It is up to the client to be monitoring for the
/// connection and to do the right thing when one appears.
///
/// The "LocalAttributes" property is optional. If it is not specified, by default the created service
/// is transient and will be removed when the client exits.
///
/// Additional local attributes to further control incoming services will be added in the future.
///
///
/// Parameter `serviceDict`: A dictionary containing the attributes for the new service
///
/// # Safety
///
/// - `service_dict` generic should be of the correct type.
/// - `service_dict` might not allow `None`.
#[unsafe(method(publishedServiceRecordWithDictionary:))]
#[unsafe(method_family = none)]
pub unsafe fn publishedServiceRecordWithDictionary(
service_dict: Option<&NSDictionary>,
) -> Option<Retained<Self>>;
/// Removes the service from the local SDP server.
///
/// Returns: Returns kIOReturnSuccess if successful.
#[unsafe(method(removeServiceRecord))]
#[unsafe(method_family = none)]
pub unsafe fn removeServiceRecord(&self) -> IOReturn;
#[cfg(all(
feature = "IOBluetoothDevice",
feature = "IOBluetoothObject",
feature = "objc2-foundation"
))]
/// Returns an IOBluetoothSDPServiceRecord * with the attributes specified in the provided service dictionary. Provide
/// a pointer to an IOBlueotothDevice if you wish to associate the record to a specific IOBluetoothDevice.
///
/// Returns: Returns an IOBluetoothSDPServiceRecord * with the attributes specified in the provided dictionary.
///
/// # Safety
///
/// - `service_dict` generic should be of the correct type.
/// - `service_dict` might not allow `None`.
/// - `device` might not allow `None`.
#[unsafe(method(withServiceDictionary:device:))]
#[unsafe(method_family = none)]
pub unsafe fn withServiceDictionary_device(
service_dict: Option<&NSDictionary>,
device: Option<&IOBluetoothDevice>,
) -> Option<Retained<Self>>;
#[cfg(all(
feature = "IOBluetoothDevice",
feature = "IOBluetoothObject",
feature = "objc2-foundation"
))]
/// Returns an initialized IOBluetoothSDPServiceRecord * with the attributes specified in the provided service dictionary. Provide
/// a pointer to an IOBlueotothDevice if you wish to associate the record to a specific IOBluetoothDevice.
///
/// Returns: Returns an initialized IOBluetoothSDPServiceRecord * with the attributes specified in the provided dictionary.
///
/// # Safety
///
/// - `service_dict` generic should be of the correct type.
/// - `service_dict` might not allow `None`.
/// - `device` might not allow `None`.
#[unsafe(method(initWithServiceDictionary:device:))]
#[unsafe(method_family = init)]
pub unsafe fn initWithServiceDictionary_device(
this: Allocated<Self>,
service_dict: Option<&NSDictionary>,
device: Option<&IOBluetoothDevice>,
) -> Option<Retained<Self>>;
#[cfg(feature = "IOBluetoothUserLib")]
/// Method call to convert an IOBluetoothSDPServiceRecordRef into an IOBluetoothSDPServiceRecord *.
///
/// Parameter `sdpServiceRecordRef`: IOBluetoothSDPServiceRecordRef for which an IOBluetoothSDPServiceRecord * is desired.
///
/// Returns: Returns the IOBluetoothSDPServiceRecord * for the given IOBluetoothSDPServiceRecordRef.
///
/// # Safety
///
/// `sdp_service_record_ref` might not allow `None`.
#[unsafe(method(withSDPServiceRecordRef:))]
#[unsafe(method_family = none)]
pub unsafe fn withSDPServiceRecordRef(
sdp_service_record_ref: Option<&IOBluetoothSDPServiceRecordRef>,
) -> Option<Retained<Self>>;
#[cfg(feature = "IOBluetoothUserLib")]
/// Returns an IOBluetoothSDPServiceRecordRef representation of the target IOBluetoothSDPServiceRecord object.
///
/// Returns: Returns an IOBluetoothSDPServiceRecordRef representation of the target IOBluetoothSDPServiceRecord object.
#[unsafe(method(getSDPServiceRecordRef))]
#[unsafe(method_family = none)]
pub unsafe fn getSDPServiceRecordRef(
&self,
) -> Option<Retained<IOBluetoothSDPServiceRecordRef>>;
#[cfg(all(feature = "IOBluetoothDevice", feature = "IOBluetoothObject"))]
/// Returns the IOBluetoothDevice that the target service belongs to.
///
/// If the service is a local service (i.e. one the current host is vending out), then nil is returned.
///
/// Returns: Returns the IOBluetoothDevice that the target service belongs to. If the service is one the local host
/// is vending, then nil is returned.
#[unsafe(method(device))]
#[unsafe(method_family = none)]
pub unsafe fn device(&self) -> Option<Retained<IOBluetoothDevice>>;
#[cfg(all(feature = "IOBluetoothDevice", feature = "IOBluetoothObject"))]
#[deprecated]
#[unsafe(method(getDevice))]
#[unsafe(method_family = none)]
pub unsafe fn getDevice(&self) -> Option<Retained<IOBluetoothDevice>>;
#[cfg(feature = "objc2-foundation")]
/// Returns an NSDictionary containing the attributes for the service.
///
/// The attribute dictionary is keyed off of the attribute id represented as an NSNumber. The values
/// in the NSDictionary are IOBluetoothSDPDataElement objects representing the data element for the
/// given attribute.
///
/// Returns: Returns an NSDictionary containing the attributes for the target service.
#[unsafe(method(attributes))]
#[unsafe(method_family = none)]
pub unsafe fn attributes(&self) -> Retained<NSDictionary>;
#[cfg(feature = "objc2-foundation")]
#[deprecated]
#[unsafe(method(getAttributes))]
#[unsafe(method_family = none)]
pub unsafe fn getAttributes(&self) -> Option<Retained<NSDictionary>>;
#[cfg(all(feature = "Bluetooth", feature = "IOBluetoothSDPDataElement"))]
/// Returns the data element for the given attribute ID in the target service.
///
/// Parameter `attributeID`: The attribute ID of the desired attribute.
///
/// Returns: Returns the data element for the given attribute ID in the target service. If the service does not
/// contain an attribute with the given ID, then nil is returned.
#[unsafe(method(getAttributeDataElement:))]
#[unsafe(method_family = none)]
pub unsafe fn getAttributeDataElement(
&self,
attribute_id: BluetoothSDPServiceAttributeID,
) -> Option<Retained<IOBluetoothSDPDataElement>>;
#[cfg(feature = "objc2-foundation")]
/// Returns the name of the service.
///
/// This is currently implemented to simply return the attribute with an id of 0x0100. In
/// the future, it will be extended to allow name localization based on the user's chosen
/// language or other languages.
///
/// Returns: Returns the name of the target service.
#[unsafe(method(getServiceName))]
#[unsafe(method_family = none)]
pub unsafe fn getServiceName(&self) -> Option<Retained<NSString>>;
#[cfg(feature = "Bluetooth")]
/// Allows the discovery of the RFCOMM channel ID assigned to the service.
///
/// This method will search through the ProtoclDescriptorList attribute to find an entry
/// with the RFCOMM UUID (UUID16: 0x0003). If one is found, it gets the second element of
/// the data element sequence and sets the rfcommChannelID pointer to it. The channel ID
/// only gets set when kIOReturnSuccess is returned.
///
/// Parameter `rfcommChannelID`: A pointer to the location that will get the found RFCOMM channel ID.
///
/// Returns: Returns kIOReturnSuccess if the channel ID is found.
///
/// # Safety
///
/// `rfcomm_channel_id` must be a valid pointer.
#[unsafe(method(getRFCOMMChannelID:))]
#[unsafe(method_family = none)]
pub unsafe fn getRFCOMMChannelID(
&self,
rfcomm_channel_id: *mut BluetoothRFCOMMChannelID,
) -> IOReturn;
#[cfg(feature = "Bluetooth")]
/// Allows the discovery of the L2CAP PSM assigned to the service.
///
/// This method will search through the ProtoclDescriptorList attribute to find an entry
/// with the L2CAP UUID (UUID16: 0x0100). If one is found, it gets the second element of
/// the data element sequence and sets the outPSM pointer to it. The PSM value
/// only gets set when kIOReturnSuccess is returned.
///
/// Parameter `outPSM`: A pointer to the location that will get the found L2CAP PSM.
///
/// Returns: Returns kIOReturnSuccess if the PSM is found.
///
/// # Safety
///
/// `out_psm` must be a valid pointer.
#[unsafe(method(getL2CAPPSM:))]
#[unsafe(method_family = none)]
pub unsafe fn getL2CAPPSM(&self, out_psm: *mut BluetoothL2CAPPSM) -> IOReturn;
#[cfg(feature = "Bluetooth")]
/// Allows the discovery of the service record handle assigned to the service.
///
/// This method will search through the attributes to find the one representing the
/// service record handle. If one is found the outServiceRecordHandle param is set
/// with the value. The outServiceRecordHandle value only gets set when kIOReturnSuccess
/// is returned.
///
/// Parameter `outServiceRecordHandle`: A pointer to the location that will get the found service record handle.
///
/// Returns: Returns kIOReturnSuccess if the service record handle is found.
///
/// # Safety
///
/// `out_service_record_handle` must be a valid pointer.
#[unsafe(method(getServiceRecordHandle:))]
#[unsafe(method_family = none)]
pub unsafe fn getServiceRecordHandle(
&self,
out_service_record_handle: *mut BluetoothSDPServiceRecordHandle,
) -> IOReturn;
#[cfg(feature = "Bluetooth")]
/// Returns TRUE the UUID16 is found in the target service.
///
/// NOTE: This method is only available in Mac OS X 10.7 or later.
///
/// Parameter `uuid16`: A BluetoothSDPUUID16 to search for in the target service.
///
/// Returns: Returns TRUE if the UUID16 is present in the service.
#[unsafe(method(matchesUUID16:))]
#[unsafe(method_family = none)]
pub unsafe fn matchesUUID16(&self, uuid16: BluetoothSDPUUID16) -> bool;
#[cfg(feature = "objc2-foundation")]
/// Returns TRUE if ALL of the UUIDs in the given array is found in the target service.
///
/// The given array should contain IOBluetoothSDPUUID objects. It only returns TRUE if all of
/// the UUIDs are found. This method is like hasServiceFromArray: except that it requires that
/// all UUIDs match instead of any of them matching.
///
/// NOTE: This method is only available in Mac OS X 10.2.4 (Bluetooth v1.1) or later.
///
/// Parameter `array`: An NSArray of IOBluetoothSDPUUID objects to search for in the target service.
///
/// Returns: Returns TRUE if all of the given UUIDs are present in the service.
///
/// # Safety
///
/// - `uuid_array` generic should be of the correct type.
/// - `uuid_array` might not allow `None`.
#[unsafe(method(matchesUUIDArray:))]
#[unsafe(method_family = none)]
pub unsafe fn matchesUUIDArray(&self, uuid_array: Option<&NSArray>) -> bool;
#[cfg(feature = "objc2-foundation")]
/// Returns TRUE any of the UUID arrays in the search array match the target service.
///
/// The given array should contain NSArray objects. Each sub-NSArray should contain
/// IOBluetoothSDPUUID objects. In turn, each sub-NSArray gets passed to -matchesUUIDArray:
/// If any of those returns TRUE, then the search stops and TRUE is returned.
/// Essentially the master NSArray contains the OR operations and each sub-array contains
/// the AND operations.
///
/// NOTE: This method is only available in Mac OS X 10.2.4 (Bluetooth v1.1) or later.
///
/// Parameter `array`: An NSArray of NSArrays of IOBluetoothSDPUUID objects.
///
/// Returns: Returns TRUE if any of the UUID arrays match.
///
/// # Safety
///
/// - `search_array` generic should be of the correct type.
/// - `search_array` might not allow `None`.
#[unsafe(method(matchesSearchArray:))]
#[unsafe(method_family = none)]
pub unsafe fn matchesSearchArray(&self, search_array: Option<&NSArray>) -> bool;
#[cfg(feature = "objc2-foundation")]
/// Returns TRUE if any one of the UUIDs in the given array is found in the target service.
///
/// The given array should contain IOBluetoothSDPUUID objects. It is currently implemented
/// such that it returns TRUE if any of the UUIDs are found. However in the future, it is likely
/// that this will change to more closely match the functionality in the SDP spec so that it only
/// returns TRUE if all of the given UUIDs are present. That way, both AND and OR comparisons
/// can be implemented. Please make a note of this potential change.
///
/// Parameter `array`: An NSArray of IOBluetoothSDPUUID objects to search for in the target service.
///
/// Returns: Returns TRUE if any of the given UUIDs are present in the service.
///
/// # Safety
///
/// - `array` generic should be of the correct type.
/// - `array` might not allow `None`.
#[unsafe(method(hasServiceFromArray:))]
#[unsafe(method_family = none)]
pub unsafe fn hasServiceFromArray(&self, array: Option<&NSArray>) -> bool;
#[cfg(feature = "objc2-foundation")]
/// Returns a sorted array of SDP attributes
///
/// This method will walk all the elements of the service record and return an array of
/// IOBluetoothSDPServiceAttribute objects sorted by attributeID
///
/// Returns: Returns a sorted array of SDP attributes
#[unsafe(method(sortedAttributes))]
#[unsafe(method_family = none)]
pub unsafe fn sortedAttributes(&self) -> Retained<NSArray>;
);
}
/// Methods declared on superclass `NSObject`.
impl IOBluetoothSDPServiceRecord {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new() -> Retained<Self>;
);
}