[network/libktorrent] src: ABI/API break: use QByteArrayView for socket sendto functions
Jack Hill <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 3d829b2b97fff0a8521ad70923d6ec770bf881aa by Jack Hill.
Committed on 29/07/2026 at 21:37.
Pushed by jackh into branch 'master'.
ABI/API break: use QByteArrayView for socket sendto functions
No downstream changes required.
M +1 -1 src/dht/rpcserver.cpp
M +2 -12 src/net/serversocket.cpp
M +3 -11 src/net/serversocket.h
M +2 -2 src/net/socket.cpp
M +1 -1 src/net/socket.h
M +14 -9 src/tracker/udptrackersocket.cpp
M +1 -1 src/utp/outputqueue.cpp
M +1 -5 src/utp/tests/congestiontest.cpp
https://invent.kde.org/network/libktorrent/-/commit/3d829b2b97fff0a8521ad70923d6ec770bf881aa
diff --git a/src/dht/rpcserver.cpp b/src/dht/rpcserver.cpp
index 17bd02b9..d49c252d 100644
--- a/src/dht/rpcserver.cpp
+++ b/src/dht/rpcserver.cpp
@@ -120,7 +120,7 @@ public:
void send(const net::Address &addr, const QByteArray &msg)
{
for (const net::ServerSocket::Ptr &sock : std::as_const(sockets)) {
- if (sock->sendTo((const bt::Uint8 *)msg.data(), msg.size(), addr) == msg.size()) {
+ if (sock->sendTo(msg, addr) == msg.size()) {
break;
}
}
diff --git a/src/net/serversocket.cpp b/src/net/serversocket.cpp
index c0d9cada..e45ee340 100644
--- a/src/net/serversocket.cpp
+++ b/src/net/serversocket.cpp
@@ -156,24 +156,14 @@ void ServerSocket::readyToWrite(int)
d->dhandler->readyToWrite(this);
}
-int ServerSocket::sendTo(const QByteArray &data, const net::Address &addr)
+int ServerSocket::sendTo(QByteArrayView data, const net::Address &addr)
{
// Only UDP server socket can send
if (!d->dhandler) {
return 0;
}
- return d->sock->sendTo((const Uint8 *)data.data(), data.size(), addr);
-}
-
-int ServerSocket::sendTo(const bt::Uint8 *buf, int size, const net::Address &addr)
-{
- // Only UDP server socket can send
- if (!d->dhandler) {
- return 0;
- }
-
- return d->sock->sendTo(buf, size, addr);
+ return d->sock->sendTo(data, addr);
}
bool ServerSocket::setTOS(unsigned char type_of_service)
diff --git a/src/net/serversocket.h b/src/net/serversocket.h
index f9b06d11..8f73370d 100644
--- a/src/net/serversocket.h
+++ b/src/net/serversocket.h
@@ -7,8 +7,10 @@
#ifndef NET_SERVERSOCKET_H
#define NET_SERVERSOCKET_H
+#include <QByteArrayView>
#include <QObject>
#include <QSharedPointer>
+
#include <ktorrent_export.h>
#include <util/bufferpool.h>
#include <util/constants.h>
@@ -111,17 +113,7 @@ public:
\param addr The address to send to
\return The number of bytes sent
*/
- int sendTo(const QByteArray &data, const net::Address &addr);
-
- /*!
- Method to send data with the socket. Only use this when
- the socket is a UDP socket. It will fail for TCP server sockets.
- \param buf The data to send
- \param size The size of the data
- \param addr The address to send to
- \return The number of bytes sent
- */
- int sendTo(const bt::Uint8 *buf, int size, const net::Address &addr);
+ int sendTo(QByteArrayView data, const net::Address &addr);
/*!
Enable write notifications.
diff --git a/src/net/socket.cpp b/src/net/socket.cpp
index 9be2f401..4f5ac13c 100644
--- a/src/net/socket.cpp
+++ b/src/net/socket.cpp
@@ -303,12 +303,12 @@ int Socket::recv(bt::Uint8 *buf, int max_len)
return ret;
}
-int Socket::sendTo(const bt::Uint8 *buf, int len, const Address &a)
+int Socket::sendTo(QByteArrayView buf, const Address &a)
{
int alen = 0;
struct sockaddr_storage ss;
a.toSocketAddress(&ss, alen, dualstack);
- const int ret = ::sendto(m_fd, (char *)buf, len, 0, (struct sockaddr *)&ss, alen);
+ const int ret = ::sendto(m_fd, buf.data(), buf.size(), 0, (struct sockaddr *)&ss, alen);
if (ret < 0) {
const int err = errno;
if (err == EAGAIN || err == EWOULDBLOCK) {
diff --git a/src/net/socket.h b/src/net/socket.h
index 5dafdccb..a52b1c0d 100644
--- a/src/net/socket.h
+++ b/src/net/socket.h
@@ -58,7 +58,7 @@ public:
bool bind(const Address &addr, bool also_listen);
int accept(Address &a);
- int sendTo(const bt::Uint8 *buf, int size, const Address &addr);
+ int sendTo(QByteArrayView buf, const Address &addr);
int recvFrom(bt::Uint8 *buf, int max_size, Address &addr);
[[nodiscard]] bool isIPv4() const
diff --git a/src/tracker/udptrackersocket.cpp b/src/tracker/udptrackersocket.cpp
index 3709be1b..e84ebe95 100644
--- a/src/tracker/udptrackersocket.cpp
+++ b/src/tracker/udptrackersocket.cpp
@@ -3,7 +3,12 @@
SPDX-License-Identifier: GPL-2.0-or-later
*/
+
#include "udptrackersocket.h"
+
+#include <array>
+#include <cstddef>
+
#include <KLocalizedString>
#include <QHostAddress>
#include <QRandomGenerator>
@@ -45,10 +50,10 @@ public:
}
}
- bool send(const Uint8 *buf, int size, const net::Address &addr)
+ bool send(QByteArrayView buf, const net::Address &addr)
{
for (const net::ServerSocket::Ptr &sock : std::as_const(sockets)) {
- if (sock->sendTo(buf, size, addr) == size) {
+ if (sock->sendTo(buf, addr) == buf.size()) {
return true;
}
}
@@ -123,25 +128,25 @@ UDPTrackerSocket::~UDPTrackerSocket()
void UDPTrackerSocket::sendConnect(Int32 tid, const net::Address &addr)
{
const Int64 cid = 0x41727101980LL;
- Uint8 buf[16];
+ std::array<std::byte, 16> buf;
- WriteInt64(buf, 0, cid);
- WriteInt32(buf, 8, CONNECT);
- WriteInt32(buf, 12, tid);
+ WriteInt64(buf.data(), 0, cid);
+ WriteInt32(buf.data(), 8, CONNECT);
+ WriteInt32(buf.data(), 12, tid);
- d->send(buf, 16, addr);
+ d->send(buf, addr);
d->transactions.insert(tid, CONNECT);
}
void UDPTrackerSocket::sendAnnounce(Int32 tid, const Uint8 *data, const net::Address &addr)
{
- d->send(data, 98, addr);
+ d->send(QByteArrayView{data, 98}, addr);
d->transactions.insert(tid, ANNOUNCE);
}
void UDPTrackerSocket::sendScrape(Int32 tid, const bt::Uint8 *data, const net::Address &addr)
{
- d->send(data, 36, addr);
+ d->send(QByteArrayView{data, 36}, addr);
d->transactions.insert(tid, SCRAPE);
}
diff --git a/src/utp/outputqueue.cpp b/src/utp/outputqueue.cpp
index 6817343e..a081fc29 100644
--- a/src/utp/outputqueue.cpp
+++ b/src/utp/outputqueue.cpp
@@ -44,7 +44,7 @@ void OutputQueue::send(net::ServerSocket *sock)
continue;
}
- const int ret = sock->sendTo(packet.data.data(), packet.data.bufferSize(), conn->remoteAddress());
+ const int ret = sock->sendTo(QByteArrayView{packet.data.data(), packet.data.bufferSize()}, conn->remoteAddress());
if (ret == net::SEND_WOULD_BLOCK) {
break;
} else if (ret == net::SEND_FAILURE) {
diff --git a/src/utp/tests/congestiontest.cpp b/src/utp/tests/congestiontest.cpp
index a61c1af3..fced3f1e 100644
--- a/src/utp/tests/congestiontest.cpp
+++ b/src/utp/tests/congestiontest.cpp
@@ -38,11 +38,7 @@ public:
{
}
- virtual bool sendTo(const QByteArray &data, const net::Address &addr)
- {
- }
-
- virtual bool sendTo(const bt::Uint8 *data, const bt::Uint32 size, const net::Address &addr)
+ virtual bool sendTo(QByteArrayView data, const net::Address &addr)
{
}