Skip to content

Commit 1f2727c

Browse files
mrfuchsnashif
authored andcommitted
net: tls: Add sendmsg
Add an implementation for `sendmsg`, so secure sockets can be used together with the WebSocket module to implement secure WebSockets ("wss"). Fixes #20431 Signed-off-by: Markus Fuchs <[email protected]>
1 parent 57f7801 commit 1f2727c

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

subsys/net/lib/sockets/sockets_tls.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,6 +1455,29 @@ ssize_t ztls_sendto_ctx(struct net_context *ctx, const void *buf, size_t len,
14551455
#endif /* CONFIG_NET_SOCKETS_ENABLE_DTLS */
14561456
}
14571457

1458+
ssize_t ztls_sendmsg_ctx(struct net_context *ctx, const struct msghdr *msg,
1459+
int flags)
1460+
{
1461+
ssize_t len;
1462+
ssize_t ret;
1463+
int i;
1464+
1465+
len = 0;
1466+
if (msg) {
1467+
for (i = 0; i < msg->msg_iovlen; i++) {
1468+
ret = ztls_sendto_ctx(ctx, msg->msg_iov[i].iov_base,
1469+
msg->msg_iov[i].iov_len, flags,
1470+
msg->msg_name, msg->msg_namelen);
1471+
if (ret < 0) {
1472+
return ret;
1473+
}
1474+
len += ret;
1475+
}
1476+
}
1477+
1478+
return len;
1479+
}
1480+
14581481
static ssize_t recv_tls(struct net_context *ctx, void *buf,
14591482
size_t max_len, int flags)
14601483
{
@@ -1982,6 +2005,12 @@ static ssize_t tls_sock_sendto_vmeth(void *obj, const void *buf, size_t len,
19822005
return ztls_sendto_ctx(obj, buf, len, flags, dest_addr, addrlen);
19832006
}
19842007

2008+
static ssize_t tls_sock_sendmsg_vmeth(void *obj, const struct msghdr *msg,
2009+
int flags)
2010+
{
2011+
return ztls_sendmsg_ctx(obj, msg, flags);
2012+
}
2013+
19852014
static ssize_t tls_sock_recvfrom_vmeth(void *obj, void *buf, size_t max_len,
19862015
int flags, struct sockaddr *src_addr,
19872016
socklen_t *addrlen)
@@ -2014,6 +2043,7 @@ static const struct socket_op_vtable tls_sock_fd_op_vtable = {
20142043
.listen = tls_sock_listen_vmeth,
20152044
.accept = tls_sock_accept_vmeth,
20162045
.sendto = tls_sock_sendto_vmeth,
2046+
.sendmsg = tls_sock_sendmsg_vmeth,
20172047
.recvfrom = tls_sock_recvfrom_vmeth,
20182048
.getsockopt = tls_sock_getsockopt_vmeth,
20192049
.setsockopt = tls_sock_setsockopt_vmeth,

0 commit comments

Comments
 (0)