Lines Matching +full:cs +full:- +full:3

1 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
52 * uint16 value16 - 3 bytes (attribute)
53 * value - N bytes (value)
61 profile_attr_create_p cf = profile_get_attr(provider->profile, attr);
67 if (buf + 3 > eob)
68 return (-1);
75 return (-1);
77 return (3 + len);
81 * seq16 value16 - 3 bytes
82 * attr value - 3+ bytes
91 uint8_t *ptr = rsp + 3;
95 return (-1);
103 return (-1);
111 return (-1);
118 return (-1);
125 return (-1);
131 len = ptr - rsp; /* we put this much bytes in rsp */
135 SDP_PUT16(len - 3, rsp);
147 uint8_t const *req = srv->req + sizeof(sdp_pdu_t);
148 uint8_t const *req_end = req + ((sdp_pdu_p)(srv->req))->len;
149 uint8_t *rsp = srv->fdidx[fd].rsp;
155 int32_t type, rsp_limit, aidlen, cslen, cs;
160 * value32 - 4 bytes ServiceRecordHandle
161 * value16 - 2 bytes MaximumAttributeByteCount
162 * seq8 len8 - 2 bytes
163 * uint16 value16 - 3 bytes AttributeIDList
164 * value8 - 1 byte ContinuationState
167 if (req_end - req < 12)
203 if (cslen != 2 || req_end - ptr != 2)
206 SDP_GET16(cs, ptr);
208 cs = 0;
211 if (srv->fdidx[fd].rsp_cs != cs)
213 if (srv->fdidx[fd].rsp_size > 0)
223 * value16 - 2 bytes AttributeListByteCount (not incl.)
224 * seq8 len16 - 3 bytes
225 * attr value - 3+ bytes AttributeList
229 cs = server_prepare_attr_list(provider, req, req+aidlen, rsp, rsp_end);
230 if (cs < 0)
234 srv->fdidx[fd].rsp_limit = srv->fdidx[fd].omtu - sizeof(sdp_pdu_t) - 2;
235 if (srv->fdidx[fd].rsp_limit > rsp_limit)
236 srv->fdidx[fd].rsp_limit = rsp_limit;
238 srv->fdidx[fd].rsp_size = cs;
239 srv->fdidx[fd].rsp_cs = 0;
251 uint8_t *rsp = srv->fdidx[fd].rsp + srv->fdidx[fd].rsp_cs;
252 uint8_t *rsp_end = srv->fdidx[fd].rsp + srv->fdidx[fd].rsp_size;
257 uint8_t cs[3];
261 size = rsp_end - rsp;
262 srv->fdidx[fd].rsp_cs += size;
264 if (size + 1 > srv->fdidx[fd].rsp_limit) {
266 * We need to split out response. Add 3 more bytes for the
270 while ((rsp_end - rsp) + 3 > srv->fdidx[fd].rsp_limit) {
271 rsp_end --;
272 srv->fdidx[fd].rsp_cs --;
275 cs[0] = 2;
276 cs[1] = srv->fdidx[fd].rsp_cs >> 8;
277 cs[2] = srv->fdidx[fd].rsp_cs & 0xff;
279 cs[0] = 0;
283 bcount = rsp_end - rsp;
285 if (((sdp_pdu_p)(srv->req))->pid == SDP_PDU_SERVICE_ATTRIBUTE_REQUEST)
290 pdu.tid = ((sdp_pdu_p)(srv->req))->tid;
291 pdu.len = htons(sizeof(bcount) + bcount + 1 + cs[0]);
302 iov[2].iov_len = rsp_end - rsp;
304 iov[3].iov_base = cs;
305 iov[3].iov_len = 1 + cs[0];
312 if (srv->fdidx[fd].rsp_cs == srv->fdidx[fd].rsp_size) {
313 srv->fdidx[fd].rsp_cs = 0;
314 srv->fdidx[fd].rsp_size = 0;
315 srv->fdidx[fd].rsp_limit = 0;