FreeBSD Manual Pages
SDP(3) BSD Library Functions Manual SDP(3) NAME SDP_GET8, SDP_GET16, SDP_GET32, SDP_GET64, SDP_GET128 -- get SDP integer SDP_PUT8, SDP_PUT16, SDP_PUT32, SDP_PUT64, SDP_PUT128 -- put SPD integer sdp_open, sdp_open_local, sdp_close sdp_error -- control SDP session sdp_search -- perform SDP query sdp_attr2desc, sdp_uuid2desc -- convert numeric SDP attribute/UUID value into human readable description LIBRARY Bluetooth Service Discovery Protocol User Library (libsdp, -lsdp) SYNOPSIS #include <bluetooth.h> #include <sdp.h> SDP_GET8(b, cp); SDP_GET16(s, cp); SDP_GET32(l, cp); SDP_GET64(l, cp); SDP_GET128(l, cp); SDP_PUT8(b, cp); SDP_PUT16(s, cp); SDP_PUT32(l, cp); SDP_PUT64(l, cp); SDP_PUT128(l, cp); void * sdp_open(bdaddr_t const *l, bdaddr_t const *r); void * sdp_open_local(void); int32_t sdp_close(void *xs); int32_t sdp_error(void *xs); int32_t sdp_search(void *xs, u_int32_t plen, u_int16_t const *pp, u_int32_t alen, u_int32_t const *ap, u_int32_t vlen, sdp_attr_t *vp); char const * const sdp_attr2desc(u_int16_t attr); char const * const sdp_uuid2desc(u_int16_t uuid); DESCRIPTION The SDP_GET8(), SDP_GET16(), SDP_GET32(), SDP_GET64() and SDP_GET128() macros are used to get byte, short, long, long long and 128-bit integer from the buffer pointed by cp pointer. The pointer is automatically ad- vanced. The SDP_PUT8(), SDP_PUT16(), SDP_PUT32(), SDP_PUT64() and SDP_PUT128() macros are used to put byte, short, long, long long and 128-bit integer into the buffer pointed by cp pointer. The pointer is automatically ad- vanced. sdp_open() and sdp_open_local() functions each return a pointer to an opaque object describing SDP session. The l argument passed to sdp_open() function should point to a source BD_ADDR. If source BD_ADDR is NULL then source address NG_HCI_BDADDR_ANY is used. The r argument passed to sdp_open() function should point to a non NULL remote BD_ADDR. Remote BD_ADDR can not be NG_HCI_BDADDR_ANY. The sdp_open_local() func- tion takes no arguments and opens a connection to a local SDP server. The sdp_close() function terminates active SDP session and deletes SDP session object. The xs parameter should point to a valid SDP session ob- ject created with sdp_open() or sdp_open_local(). The sdp_error() function returns last error that is stored inside SDP session object. The xs parameter should point to a valid SDP session ob- ject created with sdp_open() or sdp_open_local(). The error value re- turned can be converted to a human readable message by calling strerror(3) function. The sdp_search() function is used to perform SDP Service Search Attribute Request. The xs parameter should point to a valid SDP session object created with sdp_open() or sdp_open_local(). The pp parameter is a Ser- vice Search Pattern - an array of one or more Service Class IDs. The maximum number of Service Class IDs in the array is 12. The plen parame- ter is the length of the Service Search pattern. The ap parameter is a Attribute ID Range List - an array of one or more SDP Attribute ID Range. Each attribute ID Range is encoded as a 32-bit unsigned integer data ele- ment, where the high order 16 bits are interpreted as the beginning at- tribute ID of the range and the low order 16 bits are interpreted as the ending attribute ID of the range. The attribute IDs contained in the At- tribute ID Ranges List must be listed in ascending order without duplica- tion of any attribute ID values. Note that all attributes may be re- quested by specifying a range of 0x0000-0xFFFF. The alen parameter is the length of the Attribute ID Ranges List. The SDP_ATTR_RANGE(lo, hi) macro can be used to prepare Attribute ID Range. The vp parameter should be an array of sdp_attr_t structures. Each sdp_attr_t structure de- scribes single SDP attribute and defined as follows: struct sdp_attr { u_int16_t flags; #define SDP_ATTR_OK (0 << 0) #define SDP_ATTR_INVALID (1 << 0) #define SDP_ATTR_TRUNCATED (1 << 1) u_int16_t attr; /* SDP_ATTR_xxx */ u_int32_t vlen; /* length of the value[] in bytes */ u_int8_t *value; /* base pointer */ }; typedef struct sdp_attr sdp_attr_t; typedef struct sdp_attr * sdp_attr_p; The caller of the sdp_search() function is expected to prepare the array of sdp_attr structures and for each element of the array both vlen and value must be set. The sdp_search() function will fill each sdp_attr_t structure with attribute and value, i.e. it will set flags, attr and vlen fields. The actual value of the attribute will be copied into value buf- fer. Note: attributes are returned in the order they appear in the Ser- vice Search Attribute Response. SDP server could return several at- tributes for the same record. In this case the order of the attributes will be: all attributes for the first records, then all attributes for the secord record etc. The sdp_attr2desc() and sdp_uuid2desc() functions each take a numeric at- tribute ID/UUID value and convert it to a human readable description. EXAMPLES The following example shows how to get SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST attribute for the SDP_SERVICE_CLASS_SERIAL_PORT service from the remote device. bdaddr_t remote; u_int8_t buffer[1024]; void *ss = NULL; u_int16_t serv = SDP_SERVICE_CLASS_SERIAL_PORT; u_int32_t attr = SDP_ATTR_RANGE( SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST, SDP_ATTR_PROTOCOL_DESCRIPTOR_LIST); sdp_attr_t proto = { SDP_ATTR_INVALID,0,sizeof(buffer),buffer }; /* Obtain/set remote BDADDR here */ if ((ss = sdp_open(NG_HCI_BDADDR_ANY, remote)) == NULL) /* exit ENOMEM */ if (sdp_error(ss) != 0) /* exit spd_error(ss) */ if (sdp_search(ss, 1, &serv, 1, &attr, 1, &proto) != 0) /* exit sdp_error(ss) */ if (proto.flags != SDP_ATTR_OK) /* exit see proto.flags for details */ /* If we got here then we have attribute value in proto.value */ DIAGNOSTICS Both sdp_open() and sdp_open_local() will return NULL if memory alloca- tion for the new SDP session object fails. If the new SDP object was created then caller is still expected to call sdp_error() to check if there was connection error. The sdp_search() function returns non-zero value on error. The caller is expected to call sdp_error() to find out more about error. SEE ALSO bluetooth(3), strerror(3) BUGS This is client only library for now. Please report bugs if found. AUTHORS Maksim Yevmenkin <m_evmenkin@yahoo.com> BSD September 7, 2003 BSD
NAME | LIBRARY | SYNOPSIS | DESCRIPTION | EXAMPLES | DIAGNOSTICS | SEE ALSO | BUGS | AUTHORS
Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=sdp&sektion=3&manpath=FreeBSD+5.2.1-RELEASE>