MCPcopy Create free account
hub / github.com/apache/nuttx / rpmsg_socket_ept_cb

Function rpmsg_socket_ept_cb

net/rpmsg/rpmsg_sockif.c:326–434  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

324}
325
326static int rpmsg_socket_ept_cb(FAR struct rpmsg_endpoint *ept,
327 FAR void *data, size_t len, uint32_t src,
328 FAR void *priv)
329{
330 FAR struct rpmsg_socket_conn_s *conn = ept->priv;
331 FAR struct rpmsg_socket_sync_s *head = data;
332
333 if (head->cmd == RPMSG_SOCKET_CMD_SYNC)
334 {
335 nxmutex_lock(&conn->sendlock);
336 conn->sendsize = head->size;
337 conn->cred.pid = head->pid;
338 conn->cred.uid = head->uid;
339 conn->cred.gid = head->gid;
340
341 conn->sconn.s_flags |= _SF_CONNECTED;
342 _SO_CONN_SETERRNO(conn, OK);
343
344 rpmsg_socket_post(&conn->sendsem);
345 rpmsg_socket_poll_notify(conn, POLLOUT);
346 nxmutex_unlock(&conn->sendlock);
347 }
348 else if (head->cmd == RPMSG_SOCKET_CMD_DATA)
349 {
350 FAR struct rpmsg_socket_data_s *msg = data;
351 FAR uint8_t *buf = msg->data;
352
353 nxmutex_lock(&conn->sendlock);
354 conn->ackpos = msg->pos;
355 if (rpmsg_socket_get_space(conn) > 0)
356 {
357 rpmsg_socket_post(&conn->sendsem);
358 rpmsg_socket_poll_notify(conn, POLLOUT);
359 }
360
361 nxmutex_unlock(&conn->sendlock);
362 if (len > sizeof(*msg))
363 {
364 len -= sizeof(*msg);
365 DEBUGASSERT(len == msg->len || len == msg->len + sizeof(uint32_t));
366
367 nxmutex_lock(&conn->recvlock);
368 if (conn->recvdata)
369 {
370 conn->recvlen = MIN(conn->recvlen, msg->len);
371 if (len == msg->len)
372 {
373 /* SOCK_STREAM */
374
375 conn->recvpos += conn->recvlen;
376 memcpy(conn->recvdata, buf, conn->recvlen);
377 buf += conn->recvlen;
378 len -= conn->recvlen;
379 }
380 else
381 {
382 /* SOCK_DGRAM */
383

Callers

nothing calls this directly

Calls 7

nxmutex_lockFunction · 0.85
rpmsg_socket_postFunction · 0.85
rpmsg_socket_poll_notifyFunction · 0.85
nxmutex_unlockFunction · 0.85
rpmsg_socket_get_spaceFunction · 0.85
circbuf_writeFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected