IOBluetoothSDPServiceRecord

Struct IOBluetoothSDPServiceRecord 

Source
#[repr(C)]
pub struct IOBluetoothSDPServiceRecord { /* private fields */ }
Available on crate features IOBluetoothSDPServiceRecord and objc2 only.
Expand description

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

Implementations§

Source§

impl IOBluetoothSDPServiceRecord

HandsFreeSDPServiceRecordAdditions.

Source

pub unsafe fn handsFreeSupportedFeatures(&self) -> u16

Available on crate feature IOBluetoothHandsFree only.

Return the hands free supported features

Returns the hands free supported features bitmap stored in the SDP record. See “IOBluetoothHandsFreeDeviceFeatures and IOBluetoothHandsFreeAudioGatewayFeatures.”

Returns: The supported features bitmap.

Source§

impl IOBluetoothSDPServiceRecord

Source

pub unsafe fn publishedServiceRecordWithDictionary( service_dict: Option<&NSDictionary>, ) -> Option<Retained<Self>>

Available on crate feature objc2-foundation only.

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

Source

pub unsafe fn removeServiceRecord(&self) -> c_int

Removes the service from the local SDP server.

Returns: Returns kIOReturnSuccess if successful.

Source

pub unsafe fn withServiceDictionary_device( service_dict: Option<&NSDictionary>, device: Option<&IOBluetoothDevice>, ) -> Option<Retained<Self>>

Available on crate features IOBluetoothDevice and IOBluetoothObject and objc2-foundation only.

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.

Source

pub unsafe fn initWithServiceDictionary_device( this: Allocated<Self>, service_dict: Option<&NSDictionary>, device: Option<&IOBluetoothDevice>, ) -> Option<Retained<Self>>

Available on crate features IOBluetoothDevice and IOBluetoothObject and objc2-foundation only.

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.

Source

pub unsafe fn withSDPServiceRecordRef( sdp_service_record_ref: Option<&IOBluetoothSDPServiceRecordRef>, ) -> Option<Retained<Self>>

Available on crate feature IOBluetoothUserLib only.

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.

Source

pub unsafe fn getSDPServiceRecordRef( &self, ) -> Option<Retained<IOBluetoothSDPServiceRecordRef>>

Available on crate feature IOBluetoothUserLib only.

Returns an IOBluetoothSDPServiceRecordRef representation of the target IOBluetoothSDPServiceRecord object.

Returns: Returns an IOBluetoothSDPServiceRecordRef representation of the target IOBluetoothSDPServiceRecord object.

Source

pub unsafe fn device(&self) -> Option<Retained<IOBluetoothDevice>>

Available on crate features IOBluetoothDevice and IOBluetoothObject only.

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.

Source

pub unsafe fn getDevice(&self) -> Option<Retained<IOBluetoothDevice>>

👎Deprecated
Available on crate features IOBluetoothDevice and IOBluetoothObject only.
Source

pub unsafe fn attributes(&self) -> Retained<NSDictionary>

Available on crate feature objc2-foundation only.

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.

Source

pub unsafe fn getAttributes(&self) -> Option<Retained<NSDictionary>>

👎Deprecated
Available on crate feature objc2-foundation only.
Source

pub unsafe fn getAttributeDataElement( &self, attribute_id: BluetoothSDPServiceAttributeID, ) -> Option<Retained<IOBluetoothSDPDataElement>>

Available on crate features Bluetooth and IOBluetoothSDPDataElement only.

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.

Source

pub unsafe fn getServiceName(&self) -> Option<Retained<NSString>>

Available on crate feature objc2-foundation only.

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.

Source

pub unsafe fn getRFCOMMChannelID( &self, rfcomm_channel_id: *mut BluetoothRFCOMMChannelID, ) -> c_int

Available on crate feature Bluetooth only.

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.

Source

pub unsafe fn getL2CAPPSM(&self, out_psm: *mut BluetoothL2CAPPSM) -> c_int

Available on crate feature Bluetooth only.

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.

Source

pub unsafe fn getServiceRecordHandle( &self, out_service_record_handle: *mut BluetoothSDPServiceRecordHandle, ) -> c_int

Available on crate feature Bluetooth only.

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.

Source

pub unsafe fn matchesUUID16(&self, uuid16: BluetoothSDPUUID16) -> bool

Available on crate feature Bluetooth only.

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.

Source

pub unsafe fn matchesUUIDArray(&self, uuid_array: Option<&NSArray>) -> bool

Available on crate feature objc2-foundation only.

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.

Source

pub unsafe fn matchesSearchArray(&self, search_array: Option<&NSArray>) -> bool

Available on crate feature objc2-foundation only.

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.

Source

pub unsafe fn hasServiceFromArray(&self, array: Option<&NSArray>) -> bool

Available on crate feature objc2-foundation only.

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.

Source

pub unsafe fn sortedAttributes(&self) -> Retained<NSArray>

Available on crate feature objc2-foundation only.

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

Source§

impl IOBluetoothSDPServiceRecord

Methods declared on superclass NSObject.

Source

pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>

Source

pub unsafe fn new() -> Retained<Self>

Methods from Deref<Target = NSObject>§

Source

pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !

Handle messages the object doesn’t recognize.

See Apple’s documentation for details.

Methods from Deref<Target = AnyObject>§

Source

pub fn class(&self) -> &'static AnyClass

Dynamically find the class of this object.

§Panics

May panic if the object is invalid (which may be the case for objects returned from unavailable init/new methods).

§Example

Check that an instance of NSObject has the precise class NSObject.

use objc2::ClassType;
use objc2::runtime::NSObject;

let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Source

pub unsafe fn get_ivar<T>(&self, name: &str) -> &T
where T: Encode,

👎Deprecated: this is difficult to use correctly, use Ivar::load instead.

Use Ivar::load instead.

§Safety

The object must have an instance variable with the given name, and it must be of type T.

See Ivar::load_ptr for details surrounding this.

Source

pub fn downcast_ref<T>(&self) -> Option<&T>
where T: DowncastTarget,

Attempt to downcast the object to a class of type T.

This is the reference-variant. Use Retained::downcast if you want to convert a retained object to another type.

§Mutable classes

Some classes have immutable and mutable variants, such as NSString and NSMutableString.

When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.

So using this method to convert a NSString to a NSMutableString, while not unsound, is generally frowned upon unless you created the string yourself, or the API explicitly documents the string to be mutable.

See Apple’s documentation on mutability and on isKindOfClass: for more details.

§Generic classes

Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.

You can, however, safely downcast to generic collections where all the type-parameters are AnyObject.

§Panics

This works internally by calling isKindOfClass:. That means that the object must have the instance method of that name, and an exception will be thrown (if CoreFoundation is linked) or the process will abort if that is not the case. In the vast majority of cases, you don’t need to worry about this, since both root objects NSObject and NSProxy implement this method.

§Examples

Cast an NSString back and forth from NSObject.

use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};

let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();

Try (and fail) to cast an NSObject to an NSString.

use objc2_foundation::{NSObject, NSString};

let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());

Try to cast to an array of strings.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();

This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.

Downcast when processing each element instead.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);

for elem in arr {
    if let Some(data) = elem.downcast_ref::<NSString>() {
        // handle `data`
    }
}

Trait Implementations§

Source§

impl AsRef<AnyObject> for IOBluetoothSDPServiceRecord

Source§

fn as_ref(&self) -> &AnyObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<IOBluetoothSDPServiceRecord> for IOBluetoothSDPServiceRecord

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<NSObject> for IOBluetoothSDPServiceRecord

Source§

fn as_ref(&self) -> &NSObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Borrow<AnyObject> for IOBluetoothSDPServiceRecord

Source§

fn borrow(&self) -> &AnyObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<NSObject> for IOBluetoothSDPServiceRecord

Source§

fn borrow(&self) -> &NSObject

Immutably borrows from an owned value. Read more
Source§

impl ClassType for IOBluetoothSDPServiceRecord

Source§

const NAME: &'static str = "IOBluetoothSDPServiceRecord"

The name of the Objective-C class that this type represents. Read more
Source§

type Super = NSObject

The superclass of this class. Read more
Source§

type ThreadKind = <<IOBluetoothSDPServiceRecord as ClassType>::Super as ClassType>::ThreadKind

Whether the type can be used from any thread, or from only the main thread. Read more
Source§

fn class() -> &'static AnyClass

Get a reference to the Objective-C class that this type represents. Read more
Source§

fn as_super(&self) -> &Self::Super

Get an immutable reference to the superclass.
Source§

impl Debug for IOBluetoothSDPServiceRecord

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for IOBluetoothSDPServiceRecord

Source§

type Target = NSObject

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hash for IOBluetoothSDPServiceRecord

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Message for IOBluetoothSDPServiceRecord

Source§

fn retain(&self) -> Retained<Self>
where Self: Sized,

Increment the reference count of the receiver. Read more
Source§

impl NSObjectProtocol for IOBluetoothSDPServiceRecord

Source§

fn isEqual(&self, other: Option<&AnyObject>) -> bool
where Self: Sized + Message,

Check whether the object is equal to an arbitrary other object. Read more
Source§

fn hash(&self) -> usize
where Self: Sized + Message,

An integer that can be used as a table address in a hash table structure. Read more
Source§

fn isKindOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of the class, or one of its subclasses. Read more
Source§

fn is_kind_of<T>(&self) -> bool
where T: ClassType, Self: Sized + Message,

👎Deprecated: use isKindOfClass directly, or cast your objects with AnyObject::downcast_ref
Check if the object is an instance of the class type, or one of its subclasses. Read more
Source§

fn isMemberOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of a specific class, without checking subclasses. Read more
Source§

fn respondsToSelector(&self, aSelector: Sel) -> bool
where Self: Sized + Message,

Check whether the object implements or inherits a method with the given selector. Read more
Source§

fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
where Self: Sized + Message,

Check whether the object conforms to a given protocol. Read more
Source§

fn description(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object. Read more
Source§

fn debugDescription(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object to use when debugging. Read more
Source§

fn isProxy(&self) -> bool
where Self: Sized + Message,

Check whether the receiver is a subclass of the NSProxy root class instead of the usual NSObject. Read more
Source§

fn retainCount(&self) -> usize
where Self: Sized + Message,

The reference count of the object. Read more
Source§

impl NSSecureCoding for IOBluetoothSDPServiceRecord

Source§

unsafe fn supportsSecureCoding() -> bool
where Self: Sized + ClassType,

Source§

impl PartialEq for IOBluetoothSDPServiceRecord

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RefEncode for IOBluetoothSDPServiceRecord

Source§

const ENCODING_REF: Encoding = <NSObject as ::objc2::RefEncode>::ENCODING_REF

The Objective-C type-encoding for a reference of this type. Read more
Source§

impl DowncastTarget for IOBluetoothSDPServiceRecord

Source§

impl Eq for IOBluetoothSDPServiceRecord

Source§

impl NSCoding for IOBluetoothSDPServiceRecord

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T> AnyThread for T
where T: ClassType<ThreadKind = dyn AnyThread + 'a> + ?Sized,

Source§

fn alloc() -> Allocated<Self>
where Self: Sized + ClassType,

Allocate a new instance of the class. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,