MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / at_recvpkt_get

Function at_recvpkt_get

components/net/at/at_socket/at_socket.c:195–239  ·  view source on GitHub ↗

get a block from AT socket receive buffer list */

Source from the content-addressed store, hash-verified

193
194/* get a block from AT socket receive buffer list */
195static size_t at_recvpkt_get(rt_slist_t *rlist, char *mem, size_t len)
196{
197 rt_slist_t *node = RT_NULL;
198 rt_slist_t *free_node = RT_NULL;
199 at_recv_pkt_t pkt = RT_NULL;
200 size_t content_pos = 0, page_pos = 0;
201
202 if (rt_slist_isempty(rlist))
203 {
204 return 0;
205 }
206
207 for (node = rt_slist_first(rlist); node;)
208 {
209 pkt = rt_slist_entry(node, struct at_recv_pkt, list);
210
211 free_node = node;
212 node = rt_slist_next(node);
213
214 if (!pkt) continue;
215
216 page_pos = pkt->bfsz_totle - pkt->bfsz_index;
217
218 if (page_pos >= len - content_pos)
219 {
220 rt_memcpy((char *) mem + content_pos, pkt->buff + pkt->bfsz_index, len - content_pos);
221 pkt->bfsz_index += len - content_pos;
222 if (pkt->bfsz_index == pkt->bfsz_totle)
223 {
224 at_recvpkt_node_delete(rlist, free_node);
225 }
226 content_pos = len;
227 break;
228 }
229 else
230 {
231 rt_memcpy((char *) mem + content_pos, pkt->buff + pkt->bfsz_index, page_pos);
232 content_pos += page_pos;
233 pkt->bfsz_index += page_pos;
234 at_recvpkt_node_delete(rlist, free_node);
235 }
236 }
237
238 return content_pos;
239}
240
241static void at_do_event_changes(struct at_socket *sock, at_event_t event, rt_bool_t is_plus)
242{

Callers 2

at_acceptFunction · 0.85
at_recvfromFunction · 0.85

Calls 5

rt_slist_isemptyFunction · 0.85
rt_slist_firstFunction · 0.85
rt_slist_nextFunction · 0.85
rt_memcpyFunction · 0.85
at_recvpkt_node_deleteFunction · 0.85

Tested by

no test coverage detected