mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-25 21:24:16 +08:00
Added sdp_create for async searches
This commit is contained in:
parent
2b3d5cfe01
commit
8be090b298
@ -111,6 +111,12 @@ int sdp_get_socket(const sdp_session_t *session);
|
||||
|
||||
uint16_t sdp_gen_tid(sdp_session_t *session);
|
||||
|
||||
/*
|
||||
* SDP transaction: functions for asynchronous search.
|
||||
*/
|
||||
typedef void sdp_callback_t(uint8_t type, sdp_list_t *rsp, void *udata, int err);
|
||||
sdp_session_t *sdp_create(int sk, uint32_t flags);
|
||||
|
||||
/*
|
||||
* find all devices in the piconet
|
||||
*/
|
||||
|
73
src/sdp.c
73
src/sdp.c
@ -3032,6 +3032,59 @@ sdp_record_t *sdp_service_attr_req(sdp_session_t *session, uint32_t handle,
|
||||
return rec;
|
||||
}
|
||||
|
||||
/*
|
||||
* SDP transaction structure for asynchronous search
|
||||
*/
|
||||
struct sdp_transaction {
|
||||
sdp_callback_t *cb;
|
||||
void *udata;
|
||||
sdp_cstate_t *cstate;
|
||||
uint8_t *reqbuf;
|
||||
sdp_buf_t rsp_concat_buf;
|
||||
uint32_t reqsize;
|
||||
int cstate_len;
|
||||
int attr_list_len;
|
||||
};
|
||||
|
||||
/*
|
||||
* Creates a new sdp session for asynchronous search
|
||||
* INPUT:
|
||||
* int sk
|
||||
* non-blocking L2CAP socket
|
||||
*
|
||||
* RETURN:
|
||||
* sdp_session_t *
|
||||
* NULL - On memory allocation failure
|
||||
*/
|
||||
sdp_session_t *sdp_create(int sk, uint32_t flags)
|
||||
{
|
||||
|
||||
struct sdp_transaction *t;
|
||||
sdp_session_t *session = malloc(sizeof(sdp_session_t));
|
||||
if (!session) {
|
||||
errno = ENOMEM;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(session, 0, sizeof(*session));
|
||||
|
||||
session->flags = flags;
|
||||
session->sock = sk;
|
||||
|
||||
t = malloc(sizeof(struct sdp_transaction));
|
||||
if (!t) {
|
||||
errno = ENOMEM;
|
||||
free(session);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(t, 0, sizeof(*t));
|
||||
|
||||
session->priv = t;
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a service search request combined with the service
|
||||
* attribute request. First a service class match is done and
|
||||
@ -3256,7 +3309,25 @@ int sdp_general_inquiry(inquiry_info *ii, int num_dev, int duration, uint8_t *fo
|
||||
|
||||
int sdp_close(sdp_session_t *session)
|
||||
{
|
||||
int ret = close(session->sock);
|
||||
struct sdp_transaction *t;
|
||||
int ret;
|
||||
|
||||
if (!session)
|
||||
return -1;
|
||||
|
||||
ret = close(session->sock);
|
||||
|
||||
t = session->priv;
|
||||
|
||||
if (t) {
|
||||
if (t->reqbuf)
|
||||
free(t->reqbuf);
|
||||
|
||||
if (t->rsp_concat_buf.data)
|
||||
free(t->rsp_concat_buf.data);
|
||||
|
||||
free(t);
|
||||
}
|
||||
free(session);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user