From c01b6039f44d9e78acc26cd8482b5e0c7b23fe14 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 3 Sep 2006 19:51:41 +0000 Subject: Remove cstate and cstate_len from transaction structure --- src/sdp.c | 53 +++++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/src/sdp.c b/src/sdp.c index 11896cb0..1ce5e81b 100644 --- a/src/sdp.c +++ b/src/sdp.c @@ -3036,14 +3036,11 @@ sdp_record_t *sdp_service_attr_req(sdp_session_t *session, uint32_t handle, * SDP transaction structure for asynchronous search */ struct sdp_transaction { - sdp_callback_t *cb; - void *udata; - sdp_cstate_t *cstate; - uint8_t *reqbuf; + sdp_callback_t *cb; /* called when the transaction finishes */ + void *udata; /* client user data */ + uint8_t *reqbuf; /* pointer to request PDU */ sdp_buf_t rsp_concat_buf; - uint32_t reqsize; - int cstate_len; - int size; + uint32_t reqsize; /* without cstate */ }; /* @@ -3149,7 +3146,7 @@ int sdp_service_search_async(sdp_session_t *session, const sdp_list_t *search, u struct sdp_transaction *t; sdp_pdu_hdr_t *reqhdr; uint8_t *pdata; - int seqlen = 0; + int cstate_len, seqlen = 0; if (!session || !session->priv) { errno = EINVAL; @@ -3187,12 +3184,12 @@ int sdp_service_search_async(sdp_session_t *session, const sdp_list_t *search, u t->reqsize += sizeof(uint16_t); pdata += sizeof(uint16_t); + // set the request header's param length - t->cstate_len = copy_cstate(pdata, t->cstate); - - reqhdr->plen = htons((t->reqsize + t->cstate_len) - sizeof(sdp_pdu_hdr_t)); + cstate_len = copy_cstate(pdata, NULL); + reqhdr->plen = htons((t->reqsize + cstate_len) - sizeof(sdp_pdu_hdr_t)); - if (sdp_send_req(session, t->reqbuf, t->reqsize + t->cstate_len) < 0) { + if (sdp_send_req(session, t->reqbuf, t->reqsize + cstate_len) < 0) { SDPERR("Error sendind data:%s", strerror(errno)); goto end; } @@ -3250,7 +3247,7 @@ int sdp_service_attr_async(sdp_session_t *session, uint32_t handle, sdp_attrreq_ struct sdp_transaction *t; sdp_pdu_hdr_t *reqhdr; uint8_t *pdata; - int seqlen = 0; + int cstate_len, seqlen = 0; if (!session || !session->priv) { errno = EINVAL; @@ -3299,11 +3296,10 @@ int sdp_service_attr_async(sdp_session_t *session, uint32_t handle, sdp_attrreq_ SDPDBG("Attr list length : %d\n", seqlen); // set the request header's param length - t->cstate_len = copy_cstate(pdata, t->cstate); - - reqhdr->plen = htons((t->reqsize + t->cstate_len) - sizeof(sdp_pdu_hdr_t)); + cstate_len = copy_cstate(pdata, NULL); + reqhdr->plen = htons((t->reqsize + cstate_len) - sizeof(sdp_pdu_hdr_t)); - if (sdp_send_req(session, t->reqbuf, t->reqsize + t->cstate_len) < 0) { + if (sdp_send_req(session, t->reqbuf, t->reqsize + cstate_len) < 0) { SDPERR("Error sendind data:%s", strerror(errno)); goto end; } @@ -3362,7 +3358,7 @@ int sdp_service_search_attr_async(sdp_session_t *session, const sdp_list_t *sear struct sdp_transaction *t; sdp_pdu_hdr_t *reqhdr; uint8_t *pdata; - int seqlen = 0; + int cstate_len, seqlen = 0; if (!session || !session->priv) { errno = EINVAL; @@ -3415,11 +3411,10 @@ int sdp_service_search_attr_async(sdp_session_t *session, const sdp_list_t *sear t->reqsize += seqlen; // set the request header's param length - t->cstate_len = copy_cstate(pdata, t->cstate); - - reqhdr->plen = htons((t->reqsize + t->cstate_len) - sizeof(sdp_pdu_hdr_t)); + cstate_len = copy_cstate(pdata, NULL); + reqhdr->plen = htons((t->reqsize + cstate_len) - sizeof(sdp_pdu_hdr_t)); - if (sdp_send_req(session, t->reqbuf, t->reqsize + t->cstate_len) < 0) { + if (sdp_send_req(session, t->reqbuf, t->reqsize + cstate_len) < 0) { SDPERR("Error sendind data:%s", strerror(errno)); goto end; } @@ -3457,6 +3452,7 @@ int sdp_process(sdp_session_t *session) sdp_cstate_t *pcstate = NULL; uint8_t *pdata = NULL, *rspbuf = NULL, *targetPtr = NULL; int rsp_count = 0, err = -1; + size_t size = 0; uint16_t status = 0; if (!session || !session->priv) { @@ -3484,6 +3480,7 @@ int sdp_process(sdp_session_t *session) if (rsphdr->pdu_id == SDP_ERROR_RSP) { status = ntohs(bt_get_unaligned((uint16_t *) pdata)); + size = rsphdr->plen; goto end; } @@ -3500,7 +3497,7 @@ int sdp_process(sdp_session_t *session) tsrc = ntohs(bt_get_unaligned((uint16_t *) ssr_pdata)); csrc = ntohs(bt_get_unaligned((uint16_t *) ssr_pdata)); - if (t->size == 0) { + if (t->rsp_concat_buf.data_size == 0) { /* first fragment */ rsp_count = sizeof(tsrc) + sizeof(csrc) + csrc * 4; SDPDBG("Total svc count: %d\n", tsrc); @@ -3509,7 +3506,6 @@ int sdp_process(sdp_session_t *session) pdata += 2 * sizeof(uint16_t); /* Ignore TSRC and CSRC */ rsp_count = csrc * 4; } - t->size += rsp_count; break; case SDP_SVC_ATTR_RSP: case SDP_SVC_SEARCH_ATTR_RSP: @@ -3517,7 +3513,6 @@ int sdp_process(sdp_session_t *session) SDPDBG("Attrlist byte count : %d\n", rsp_count); pdata += sizeof(uint16_t); // points to attribute list - t->size += rsp_count; break; default: /* FIXME: how handle this situation? */ @@ -3533,7 +3528,6 @@ int sdp_process(sdp_session_t *session) * responses and the last one which will have cstate_len == 0 */ - // build concatenated response buffer t->rsp_concat_buf.data = realloc(t->rsp_concat_buf.data, t->rsp_concat_buf.data_size + rsp_count); targetPtr = t->rsp_concat_buf.data + t->rsp_concat_buf.data_size; @@ -3556,6 +3550,7 @@ int sdp_process(sdp_session_t *session) if (sdp_send_req(session, t->reqbuf, reqsize) < 0) { SDPERR("Error sendind data:%s", strerror(errno)); + /* FIXME: how handle this error ? */ goto end; } err = 0; @@ -3563,12 +3558,14 @@ int sdp_process(sdp_session_t *session) end: if (err) { - if (t->rsp_concat_buf.data_size != 0) + if (t->rsp_concat_buf.data_size != 0) { pdata = t->rsp_concat_buf.data; + size = t->rsp_concat_buf.data_size; + } if (t->cb) t->cb(rsphdr->pdu_id, status, pdata, - t->size, t->udata); + size, t->udata); } if (rspbuf) -- cgit