[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)
     {
     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.