mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-26 23:26:23 +00:00
chore(Deps/Acelite): Update to 6.5.10 (#3450)
This commit is contained in:
166
deps/acelite/ace/SOCK_Dgram.cpp
vendored
166
deps/acelite/ace/SOCK_Dgram.cpp
vendored
@@ -8,6 +8,9 @@
|
||||
#include "ace/OS_NS_ctype.h"
|
||||
#include "ace/os_include/net/os_if.h"
|
||||
#include "ace/Truncate.h"
|
||||
#if defined (ACE_HAS_ALLOC_HOOKS)
|
||||
# include "ace/Malloc_Base.h"
|
||||
#endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
|
||||
#if !defined (__ACE_INLINE__)
|
||||
# include "ace/SOCK_Dgram.inl"
|
||||
@@ -63,9 +66,16 @@ ACE_SOCK_Dgram::recv (iovec *io_vec,
|
||||
return -1;
|
||||
else if (inlen > 0)
|
||||
{
|
||||
#if defined (ACE_HAS_ALLOC_HOOKS)
|
||||
ACE_ALLOCATOR_RETURN (io_vec->iov_base,
|
||||
static_cast<char*>(ACE_Allocator::instance()->malloc(sizeof(char) * inlen)),
|
||||
-1);
|
||||
#else
|
||||
ACE_NEW_RETURN (io_vec->iov_base,
|
||||
char[inlen],
|
||||
-1);
|
||||
#endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
|
||||
ssize_t rcv_len = ACE_OS::recvfrom (this->get_handle (),
|
||||
(char *) io_vec->iov_base,
|
||||
inlen,
|
||||
@@ -74,7 +84,11 @@ ACE_SOCK_Dgram::recv (iovec *io_vec,
|
||||
&addr_len);
|
||||
if (rcv_len < 0)
|
||||
{
|
||||
#if defined (ACE_HAS_ALLOC_HOOKS)
|
||||
ACE_Allocator::instance()->free(io_vec->iov_base);
|
||||
#else
|
||||
delete [] (char *)io_vec->iov_base;
|
||||
#endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
io_vec->iov_base = 0;
|
||||
}
|
||||
else
|
||||
@@ -102,10 +116,26 @@ ACE_SOCK_Dgram::recv (iovec *io_vec,
|
||||
|
||||
int
|
||||
ACE_SOCK_Dgram::shared_open (const ACE_Addr &local,
|
||||
int protocol_family)
|
||||
int protocol_family,
|
||||
int ipv6_only)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::shared_open");
|
||||
bool error = false;
|
||||
#if defined (ACE_HAS_IPV6)
|
||||
int setting = !!ipv6_only;
|
||||
if (protocol_family == PF_INET6 &&
|
||||
-1 == ACE_OS::setsockopt (this->get_handle (),
|
||||
IPPROTO_IPV6,
|
||||
IPV6_V6ONLY,
|
||||
(char *)&setting,
|
||||
sizeof (setting)))
|
||||
{
|
||||
this->close();
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
ACE_UNUSED_ARG (ipv6_only);
|
||||
#endif /* defined (ACE_HAS_IPV6) */
|
||||
|
||||
if (local == ACE_Addr::sap_any)
|
||||
{
|
||||
@@ -139,7 +169,8 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
||||
ACE_Protocol_Info *protocolinfo,
|
||||
ACE_SOCK_GROUP g,
|
||||
u_long flags,
|
||||
int reuse_addr)
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
{
|
||||
if (ACE_SOCK::open (SOCK_DGRAM,
|
||||
protocol_family,
|
||||
@@ -150,7 +181,8 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
||||
reuse_addr) == -1)
|
||||
return -1;
|
||||
else if (this->shared_open (local,
|
||||
protocol_family) == -1)
|
||||
protocol_family,
|
||||
ipv6_only) == -1)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
@@ -162,7 +194,8 @@ int
|
||||
ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
||||
int protocol_family,
|
||||
int protocol,
|
||||
int reuse_addr)
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::open");
|
||||
|
||||
@@ -184,7 +217,8 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
||||
return -1;
|
||||
else
|
||||
return this->shared_open (local,
|
||||
protocol_family);
|
||||
protocol_family,
|
||||
ipv6_only);
|
||||
}
|
||||
|
||||
// Here's the general-purpose constructor used by a connectionless
|
||||
@@ -193,14 +227,16 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
||||
ACE_SOCK_Dgram::ACE_SOCK_Dgram (const ACE_Addr &local,
|
||||
int protocol_family,
|
||||
int protocol,
|
||||
int reuse_addr)
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::ACE_SOCK_Dgram");
|
||||
|
||||
if (this->open (local,
|
||||
protocol_family,
|
||||
protocol,
|
||||
reuse_addr) == -1)
|
||||
reuse_addr,
|
||||
ipv6_only) == -1)
|
||||
ACELIB_ERROR ((LM_ERROR,
|
||||
ACE_TEXT ("%p\n"),
|
||||
ACE_TEXT ("ACE_SOCK_Dgram")));
|
||||
@@ -212,7 +248,8 @@ ACE_SOCK_Dgram::ACE_SOCK_Dgram (const ACE_Addr &local,
|
||||
ACE_Protocol_Info *protocolinfo,
|
||||
ACE_SOCK_GROUP g,
|
||||
u_long flags,
|
||||
int reuse_addr)
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::ACE_SOCK_Dgram");
|
||||
if (this->open (local,
|
||||
@@ -221,7 +258,8 @@ ACE_SOCK_Dgram::ACE_SOCK_Dgram (const ACE_Addr &local,
|
||||
protocolinfo,
|
||||
g,
|
||||
flags,
|
||||
reuse_addr) == -1)
|
||||
reuse_addr,
|
||||
ipv6_only) == -1)
|
||||
ACELIB_ERROR ((LM_ERROR,
|
||||
ACE_TEXT ("%p\n"),
|
||||
ACE_TEXT ("ACE_SOCK_Dgram")));
|
||||
@@ -253,11 +291,16 @@ ACE_SOCK_Dgram::send (const iovec iov[],
|
||||
send_msg.msg_control = 0;
|
||||
send_msg.msg_controllen = 0;
|
||||
send_msg.msg_flags = 0;
|
||||
#else
|
||||
#elif !defined ACE_LACKS_SENDMSG
|
||||
send_msg.msg_accrights = 0;
|
||||
send_msg.msg_accrightslen = 0;
|
||||
#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */
|
||||
|
||||
#ifdef ACE_WIN32
|
||||
send_msg.msg_control = 0;
|
||||
send_msg.msg_controllen = 0;
|
||||
#endif
|
||||
|
||||
return ACE_OS::sendmsg (this->get_handle (),
|
||||
&send_msg,
|
||||
flags);
|
||||
@@ -270,11 +313,29 @@ ssize_t
|
||||
ACE_SOCK_Dgram::recv (iovec iov[],
|
||||
int n,
|
||||
ACE_Addr &addr,
|
||||
int flags) const
|
||||
int flags,
|
||||
ACE_INET_Addr *to_addr) const
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::recv");
|
||||
msghdr recv_msg;
|
||||
|
||||
#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG) || defined ACE_WIN32
|
||||
#define ACE_USE_MSG_CONTROL
|
||||
union control_buffer {
|
||||
cmsghdr control_msg_header;
|
||||
#if defined (IP_RECVDSTADDR)
|
||||
u_char padding[ACE_CMSG_SPACE (sizeof (in_addr))];
|
||||
#elif defined (IP_PKTINFO)
|
||||
u_char padding[ACE_CMSG_SPACE (sizeof (in_pktinfo))];
|
||||
#endif
|
||||
#if defined (ACE_HAS_IPV6)
|
||||
u_char padding6[ACE_CMSG_SPACE (sizeof (in6_pktinfo))];
|
||||
#endif
|
||||
} cbuf;
|
||||
#else
|
||||
ACE_UNUSED_ARG (to_addr);
|
||||
#endif
|
||||
|
||||
recv_msg.msg_iov = (iovec *) iov;
|
||||
recv_msg.msg_iovlen = n;
|
||||
#if defined (ACE_HAS_SOCKADDR_MSG_NAME)
|
||||
@@ -284,19 +345,60 @@ ACE_SOCK_Dgram::recv (iovec iov[],
|
||||
#endif /* ACE_HAS_SOCKADDR_MSG_NAME */
|
||||
recv_msg.msg_namelen = addr.get_size ();
|
||||
|
||||
#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG)
|
||||
recv_msg.msg_control = 0 ;
|
||||
recv_msg.msg_controllen = 0 ;
|
||||
#else
|
||||
#ifdef ACE_USE_MSG_CONTROL
|
||||
recv_msg.msg_control = to_addr ? &cbuf : 0;
|
||||
recv_msg.msg_controllen = to_addr ? sizeof (cbuf) : 0;
|
||||
#elif !defined ACE_LACKS_SENDMSG
|
||||
recv_msg.msg_accrights = 0;
|
||||
recv_msg.msg_accrightslen = 0;
|
||||
#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */
|
||||
#endif
|
||||
|
||||
ssize_t status = ACE_OS::recvmsg (this->get_handle (),
|
||||
&recv_msg,
|
||||
flags);
|
||||
addr.set_size (recv_msg.msg_namelen);
|
||||
addr.set_type (((sockaddr_in *) addr.get_addr())->sin_family);
|
||||
|
||||
#ifdef ACE_USE_MSG_CONTROL
|
||||
if (to_addr) {
|
||||
this->get_local_addr (*to_addr);
|
||||
if (to_addr->get_type() == AF_INET) {
|
||||
#if defined (IP_RECVDSTADDR) || defined (IP_PKTINFO)
|
||||
for (cmsghdr *ptr = ACE_CMSG_FIRSTHDR (&recv_msg); ptr; ptr = ACE_CMSG_NXTHDR (&recv_msg, ptr)) {
|
||||
#if defined (IP_RECVDSTADDR)
|
||||
if (ptr->cmsg_level == IPPROTO_IP && ptr->cmsg_type == IP_RECVDSTADDR) {
|
||||
to_addr->set_address ((const char *) (ACE_CMSG_DATA (ptr)),
|
||||
sizeof (struct in_addr),
|
||||
0);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
if (ptr->cmsg_level == IPPROTO_IP && ptr->cmsg_type == IP_PKTINFO) {
|
||||
to_addr->set_address ((const char *) &(((in_pktinfo *) (ACE_CMSG_DATA (ptr)))->ipi_addr),
|
||||
sizeof (struct in_addr),
|
||||
0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if defined (ACE_HAS_IPV6) && defined (IPV6_PKTINFO)
|
||||
else if (to_addr->get_type() == AF_INET6) {
|
||||
for (cmsghdr *ptr = ACE_CMSG_FIRSTHDR (&recv_msg); ptr; ptr = ACE_CMSG_NXTHDR (&recv_msg, ptr)) {
|
||||
if (ptr->cmsg_level == IPPROTO_IPV6 && ptr->cmsg_type == IPV6_PKTINFO) {
|
||||
to_addr->set_address ((const char *) &(((in6_pktinfo *)(ACE_CMSG_DATA (ptr)))->ipi6_addr),
|
||||
sizeof (struct in6_addr),
|
||||
0);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -332,9 +434,14 @@ ACE_SOCK_Dgram::send (const iovec iov[],
|
||||
#if defined (ACE_HAS_ALLOCA)
|
||||
buf = alloca (length);
|
||||
#else
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_ALLOCATOR_RETURN (buf, (buf *)
|
||||
ACE_Allocator::instance ()->malloc (length), -1);
|
||||
# else
|
||||
ACE_NEW_RETURN (buf,
|
||||
char[length],
|
||||
-1);
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
|
||||
char *ptr = buf;
|
||||
@@ -347,7 +454,11 @@ ACE_SOCK_Dgram::send (const iovec iov[],
|
||||
|
||||
ssize_t result = ACE_SOCK_Dgram::send (buf, length, addr, flags);
|
||||
#if !defined (ACE_HAS_ALLOCA)
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_Allocator::instance ()->free (buf);
|
||||
# else
|
||||
delete [] buf;
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
return result;
|
||||
}
|
||||
@@ -359,13 +470,16 @@ ssize_t
|
||||
ACE_SOCK_Dgram::recv (iovec iov[],
|
||||
int n,
|
||||
ACE_Addr &addr,
|
||||
int flags) const
|
||||
int flags,
|
||||
ACE_INET_Addr *to_addr) const
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::recv");
|
||||
|
||||
ssize_t length = 0;
|
||||
int i;
|
||||
|
||||
ACE_UNUSED_ARG (to_addr);
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
#if ! (defined(__BORLANDC__) || defined(ACE_LINUX) || defined(ACE_HAS_RTEMS))
|
||||
// The iov_len is unsigned on Linux, RTEMS and with Borland. If we go
|
||||
@@ -381,9 +495,14 @@ ACE_SOCK_Dgram::recv (iovec iov[],
|
||||
#if defined (ACE_HAS_ALLOCA)
|
||||
buf = alloca (length);
|
||||
#else
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_ALLOCATOR_RETURN (buf, (buf *)
|
||||
ACE_Allocator::instance ()->malloc (length), -1);
|
||||
# else
|
||||
ACE_NEW_RETURN (buf,
|
||||
char[length],
|
||||
-1);
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
|
||||
length = ACE_SOCK_Dgram::recv (buf, length, addr, flags);
|
||||
@@ -408,7 +527,11 @@ ACE_SOCK_Dgram::recv (iovec iov[],
|
||||
}
|
||||
|
||||
#if !defined (ACE_HAS_ALLOCA)
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_Allocator::instance ()->free (buf);
|
||||
# else
|
||||
delete [] buf;
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
return length;
|
||||
}
|
||||
@@ -606,12 +729,11 @@ ACE_SOCK_Dgram::make_multicast_ifaddr6 (ipv6_mreq *ret_mreq,
|
||||
0,
|
||||
sizeof (lmreq));
|
||||
|
||||
#if defined(ACE_LINUX)
|
||||
#ifndef ACE_LACKS_IF_NAMETOINDEX
|
||||
if (net_if != 0)
|
||||
{
|
||||
lmreq.ipv6mr_interface = ACE_OS::if_nametoindex (ACE_TEXT_ALWAYS_CHAR(net_if));
|
||||
lmreq.ipv6mr_interface = ACE_OS::if_nametoindex (ACE_TEXT_ALWAYS_CHAR (net_if));
|
||||
}
|
||||
else
|
||||
#elif defined (ACE_WIN32)
|
||||
if (net_if != 0)
|
||||
{
|
||||
@@ -667,11 +789,9 @@ ACE_SOCK_Dgram::make_multicast_ifaddr6 (ipv6_mreq *ret_mreq,
|
||||
|
||||
delete[] buf; // clean up
|
||||
}
|
||||
else
|
||||
#else /* ACE_WIN32 */
|
||||
ACE_UNUSED_ARG(net_if);
|
||||
#endif /* ACE_WIN32 */
|
||||
lmreq.ipv6mr_interface = 0;
|
||||
|
||||
// now set the multicast address
|
||||
ACE_OS::memcpy (&lmreq.ipv6mr_multiaddr,
|
||||
@@ -684,6 +804,6 @@ ACE_SOCK_Dgram::make_multicast_ifaddr6 (ipv6_mreq *ret_mreq,
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* ACE_LINUX && ACE_HAS_IPV6 */
|
||||
#endif /* ACE_HAS_IPV6 */
|
||||
|
||||
ACE_END_VERSIONED_NAMESPACE_DECL
|
||||
|
||||
Reference in New Issue
Block a user