diff options
author | Liang Qi <liang.qi@qt.io> | 2019-04-10 08:16:20 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2019-04-10 08:16:20 +0200 |
commit | a20da2353cc308aab15e3efa05ab7d899e9c6ca7 (patch) | |
tree | 63881eb44f19384ebfb0e0443291b8f9ab82f149 /src/network | |
parent | 95f787bfdc890c259e8b347bdad9123d534efe0f (diff) | |
parent | eaf20420f8a4d72c804a9d3725c3e294b34c78c8 (diff) |
Merge remote-tracking branch 'origin/5.13' into dev
Conflicts:
mkspecs/win32-clang-msvc/qmake.conf
src/gui/image/qpnghandler.cpp
Change-Id: Ied79d02912ffb3a307a99483df7db08c7f9d0cd8
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/doc/snippets/code/src_network_socket_qudpsocket.cpp | 4 | ||||
-rw-r--r-- | src/network/kernel/kernel.pri | 3 | ||||
-rw-r--r-- | src/network/kernel/qdnslookup_unix.cpp | 41 | ||||
-rw-r--r-- | src/network/kernel/qhostinfo_unix.cpp | 33 | ||||
-rw-r--r-- | src/network/socket/qudpsocket.cpp | 3 |
5 files changed, 60 insertions, 24 deletions
diff --git a/src/network/doc/snippets/code/src_network_socket_qudpsocket.cpp b/src/network/doc/snippets/code/src_network_socket_qudpsocket.cpp index a98e31b10b..f6a28ce46c 100644 --- a/src/network/doc/snippets/code/src_network_socket_qudpsocket.cpp +++ b/src/network/doc/snippets/code/src_network_socket_qudpsocket.cpp @@ -54,8 +54,8 @@ void Server::initSocket() udpSocket = new QUdpSocket(this); udpSocket->bind(QHostAddress::LocalHost, 7755); - connect(udpSocket, SIGNAL(readyRead()), - this, SLOT(readPendingDatagrams())); + connect(udpSocket, &QUdpSocket::readyRead, + this, &Server::readPendingDatagrams); } void Server::readPendingDatagrams() diff --git a/src/network/kernel/kernel.pri b/src/network/kernel/kernel.pri index f7269e5070..b86119b200 100644 --- a/src/network/kernel/kernel.pri +++ b/src/network/kernel/kernel.pri @@ -39,8 +39,11 @@ qtConfig(dnslookup) { unix { !integrity:qtConfig(dnslookup): SOURCES += kernel/qdnslookup_unix.cpp + SOURCES += kernel/qhostinfo_unix.cpp + qtConfig(dlopen): QMAKE_USE_PRIVATE += libdl + qtConfig(linux-netlink): SOURCES += kernel/qnetworkinterface_linux.cpp else: SOURCES += kernel/qnetworkinterface_unix.cpp } diff --git a/src/network/kernel/qdnslookup_unix.cpp b/src/network/kernel/qdnslookup_unix.cpp index ce1ec6442a..ee7484ab35 100644 --- a/src/network/kernel/qdnslookup_unix.cpp +++ b/src/network/kernel/qdnslookup_unix.cpp @@ -59,6 +59,10 @@ # include <gnu/lib-names.h> #endif +#if defined(Q_OS_FREEBSD) || QT_CONFIG(dlopen) +# include <dlfcn.h> +#endif + #include <cstring> QT_BEGIN_NAMESPACE @@ -87,6 +91,18 @@ struct QDnsLookupStateDeleter } }; +static QFunctionPointer resolveSymbol(QLibrary &lib, const char *sym) +{ + if (lib.isLoaded()) + return lib.resolve(sym); + +#if defined(RTLD_DEFAULT) && (defined(Q_OS_FREEBSD) || QT_CONFIG(dlopen)) + return reinterpret_cast<QFunctionPointer>(dlsym(RTLD_DEFAULT, sym)); +#else + return nullptr; +#endif +} + static bool resolveLibraryInternal() { QLibrary lib; @@ -96,31 +112,30 @@ static bool resolveLibraryInternal() #endif { lib.setFileName(QLatin1String("resolv")); - if (!lib.load()) - return false; + lib.load(); } - local_dn_expand = dn_expand_proto(lib.resolve("__dn_expand")); + local_dn_expand = dn_expand_proto(resolveSymbol(lib, "__dn_expand")); if (!local_dn_expand) - local_dn_expand = dn_expand_proto(lib.resolve("dn_expand")); + local_dn_expand = dn_expand_proto(resolveSymbol(lib, "dn_expand")); - local_res_nclose = res_nclose_proto(lib.resolve("__res_nclose")); + local_res_nclose = res_nclose_proto(resolveSymbol(lib, "__res_nclose")); if (!local_res_nclose) - local_res_nclose = res_nclose_proto(lib.resolve("res_9_nclose")); + local_res_nclose = res_nclose_proto(resolveSymbol(lib, "res_9_nclose")); if (!local_res_nclose) - local_res_nclose = res_nclose_proto(lib.resolve("res_nclose")); + local_res_nclose = res_nclose_proto(resolveSymbol(lib, "res_nclose")); - local_res_ninit = res_ninit_proto(lib.resolve("__res_ninit")); + local_res_ninit = res_ninit_proto(resolveSymbol(lib, "__res_ninit")); if (!local_res_ninit) - local_res_ninit = res_ninit_proto(lib.resolve("res_9_ninit")); + local_res_ninit = res_ninit_proto(resolveSymbol(lib, "res_9_ninit")); if (!local_res_ninit) - local_res_ninit = res_ninit_proto(lib.resolve("res_ninit")); + local_res_ninit = res_ninit_proto(resolveSymbol(lib, "res_ninit")); - local_res_nquery = res_nquery_proto(lib.resolve("__res_nquery")); + local_res_nquery = res_nquery_proto(resolveSymbol(lib, "__res_nquery")); if (!local_res_nquery) - local_res_nquery = res_nquery_proto(lib.resolve("res_9_nquery")); + local_res_nquery = res_nquery_proto(resolveSymbol(lib, "res_9_nquery")); if (!local_res_nquery) - local_res_nquery = res_nquery_proto(lib.resolve("res_nquery")); + local_res_nquery = res_nquery_proto(resolveSymbol(lib, "res_nquery")); return true; } diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp index d22608e22f..e4810d68ee 100644 --- a/src/network/kernel/qhostinfo_unix.cpp +++ b/src/network/kernel/qhostinfo_unix.cpp @@ -66,6 +66,10 @@ # include <gnu/lib-names.h> #endif +#if defined(Q_OS_FREEBSD) || QT_CONFIG(dlopen) +# include <dlfcn.h> +#endif + QT_BEGIN_NAMESPACE // Almost always the same. If not, specify in qplatformdefs.h. @@ -115,6 +119,18 @@ struct LibResolv }; } +static QFunctionPointer resolveSymbol(QLibrary &lib, const char *sym) +{ + if (lib.isLoaded()) + return lib.resolve(sym); + +#if defined(RTLD_DEFAULT) && (defined(Q_OS_FREEBSD) || QT_CONFIG(dlopen)) + return reinterpret_cast<QFunctionPointer>(dlsym(RTLD_DEFAULT, sym)); +#else + return nullptr; +#endif +} + LibResolv::LibResolv() { QLibrary lib; @@ -124,31 +140,30 @@ LibResolv::LibResolv() #endif { lib.setFileName(QLatin1String("resolv")); - if (!lib.load()) - return; + lib.load(); } // res_ninit is required for localDomainName() - local_res_ninit = res_ninit_proto(lib.resolve("__res_ninit")); + local_res_ninit = res_ninit_proto(resolveSymbol(lib, "__res_ninit")); if (!local_res_ninit) - local_res_ninit = res_ninit_proto(lib.resolve("res_ninit")); + local_res_ninit = res_ninit_proto(resolveSymbol(lib, "res_ninit")); if (local_res_ninit) { // we must now find res_nclose - local_res_nclose = res_nclose_proto(lib.resolve("res_nclose")); + local_res_nclose = res_nclose_proto(resolveSymbol(lib, "res_nclose")); if (!local_res_nclose) - local_res_nclose = res_nclose_proto(lib.resolve("__res_nclose")); + local_res_nclose = res_nclose_proto(resolveSymbol(lib, "__res_nclose")); if (!local_res_nclose) local_res_ninit = nullptr; } if (ReinitNecessary || !local_res_ninit) { - local_res_init = res_init_proto(lib.resolve("__res_init")); + local_res_init = res_init_proto(resolveSymbol(lib, "__res_init")); if (!local_res_init) - local_res_init = res_init_proto(lib.resolve("res_init")); + local_res_init = res_init_proto(resolveSymbol(lib, "res_init")); if (local_res_init && !local_res_ninit) { // if we can't get a thread-safe context, we have to use the global _res state - local_res = res_state_ptr(lib.resolve("_res")); + local_res = res_state_ptr(resolveSymbol(lib, "_res")); } } } diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index 85c4f4cbfd..0e3d516535 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -381,6 +381,7 @@ qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddre */ /*! + \since 5.8 \overload Sends the datagram \a datagram to the host address and port numbers @@ -431,6 +432,8 @@ qint64 QUdpSocket::writeDatagram(const QNetworkDatagram &datagram) } /*! + \since 5.8 + Receives a datagram no larger than \a maxSize bytes and returns it in the QNetworkDatagram object, along with the sender's host address and port. If possible, this function will also try to determine the datagram's |