本文整理汇总了C++中QHostAddress::toIPv6Address方法的典型用法代码示例。如果您正苦于以下问题:C++ QHostAddress::toIPv6Address方法的具体用法?C++ QHostAddress::toIPv6Address怎么用?C++ QHostAddress::toIPv6Address使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QHostAddress
的用法示例。
在下文中一共展示了QHostAddress::toIPv6Address方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: bindSocket
bool LimitedSocket::bindSocket(QAbstractSocket* sock, QHostAddress addr)
{
if(addr.isNull())
return true;
int error;
if(addr.protocol() == QAbstractSocket::IPv4Protocol)
{
sockaddr_in in;
memset(&in, 0, sizeof(in));
in.sin_addr.s_addr = addr.toIPv4Address();
in.sin_family = AF_INET;
error = ::bind(sock->socketDescriptor(), (sockaddr*) &in, sizeof(in));
}
else
{
sockaddr_in6 in6;
Q_IPV6ADDR a = addr.toIPv6Address();
memset(&in6, 0, sizeof(in6));
memcpy(in6.sin6_addr.s6_addr, a.c, 16);
in6.sin6_family = AF_INET6;
error = ::bind(sock->socketDescriptor(), (sockaddr*) &in6, sizeof(in6));
}
return !error;
}
示例2: SerializeSocksAddress
bool SocksConnection::SerializeSocksAddress(const QString &host,
quint16 port, QByteArray &socks_addr)
{
socks_addr.clear();
QDataStream stream(&socks_addr, QIODevice::WriteOnly);
QHostAddress addr;
if(addr.setAddress(host)) {
switch(addr.protocol()) {
case QAbstractSocket::IPv4Protocol:
stream << static_cast<quint8>(SocksAddress_IPv4);
stream << addr.toIPv4Address();
break;
case QAbstractSocket::IPv6Protocol:
stream << static_cast<quint8>(SocksAddress_IPv6);
stream.writeRawData(reinterpret_cast<const char *>
(addr.toIPv6Address().c), 16);
break;
default:
stream << static_cast<quint8>(SocksAddress_Illegal);
}
} else {
stream << static_cast<quint8>(SocksAddress_DomainName);
stream << static_cast<quint8>(host.size());
stream.writeRawData(host.toUtf8().constData(), host.size());
}
stream << port;
return true;
}
示例3: setPortAndAddress
void setPortAndAddress(quint16 port, const QHostAddress &address, QAbstractSocket::NetworkLayerProtocol socketProtocol, qt_sockaddr *aa, int *sockAddrSize)
{
if (address.protocol() == QAbstractSocket::IPv6Protocol
|| address.protocol() == QAbstractSocket::AnyIPProtocol
|| socketProtocol == QAbstractSocket::IPv6Protocol
|| socketProtocol == QAbstractSocket::AnyIPProtocol) {
memset(&aa->a6, 0, sizeof(sockaddr_in6));
aa->a6.sin6_family = AF_INET6;
//#if QT_CONFIG(networkinterface)
// aa->a6.sin6_scope_id = scopeIdFromString(address.scopeId());
//#endif
aa->a6.sin6_port = htons(port);
Q_IPV6ADDR tmp = address.toIPv6Address();
memcpy(&aa->a6.sin6_addr, &tmp, sizeof(tmp));
*sockAddrSize = sizeof(sockaddr_in6);
SetSALen::set(&aa->a, sizeof(sockaddr_in6));
} else {
memset(&aa->a, 0, sizeof(sockaddr_in));
aa->a4.sin_family = AF_INET;
aa->a4.sin_port = htons(port);
aa->a4.sin_addr.s_addr = htonl(address.toIPv4Address());
*sockAddrSize = sizeof(sockaddr_in);
SetSALen::set(&aa->a, sizeof(sockaddr_in));
}
}
示例4: memset
/*! \internal
Sets the port and address to a sockaddr. Requires that sa point to the IPv6 struct if the address is IPv6.
*/
static inline void qt_socket_setPortAndAddress(SOCKET socketDescriptor, sockaddr_in * sockAddrIPv4, qt_sockaddr_in6 * sockAddrIPv6,
quint16 port, const QHostAddress & address, sockaddr ** sockAddrPtr, QT_SOCKLEN_T *sockAddrSize)
{
#if !defined(QT_NO_IPV6)
if (address.protocol() == QAbstractSocket::IPv6Protocol) {
memset(sockAddrIPv6, 0, sizeof(qt_sockaddr_in6));
sockAddrIPv6->sin6_family = AF_INET6;
sockAddrIPv6->sin6_scope_id = address.scopeId().toInt();
WSAHtons(socketDescriptor, port, &(sockAddrIPv6->sin6_port));
Q_IPV6ADDR tmp = address.toIPv6Address();
memcpy(&(sockAddrIPv6->sin6_addr.qt_s6_addr), &tmp, sizeof(tmp));
*sockAddrSize = sizeof(qt_sockaddr_in6);
*sockAddrPtr = (struct sockaddr *) sockAddrIPv6;
} else
#endif
if (address.protocol() == QAbstractSocket::IPv4Protocol
|| address.protocol() == QAbstractSocket::UnknownNetworkLayerProtocol) {
memset(sockAddrIPv4, 0, sizeof(sockaddr_in));
sockAddrIPv4->sin_family = AF_INET;
WSAHtons(socketDescriptor, port, &(sockAddrIPv4->sin_port));
WSAHtonl(socketDescriptor, address.toIPv4Address(), &(sockAddrIPv4->sin_addr.s_addr));
*sockAddrSize = sizeof(sockaddr_in);
*sockAddrPtr = (struct sockaddr *) sockAddrIPv4;
} else {
// unreachable
}
}
示例5: sp_set_request
// connectRequest
static QByteArray sp_set_request(const QHostAddress &addr, unsigned short port, unsigned char cmd1)
{
int at = 0;
QByteArray a;
a.resize(4);
a[at++] = 0x05; // socks version 5
a[at++] = cmd1;
a[at++] = 0x00; // reserved
if(addr.protocol() == QAbstractSocket::IPv4Protocol || addr.protocol() == QAbstractSocket::UnknownNetworkLayerProtocol) {
a[at++] = 0x01; // address type = ipv4
quint32 ip4 = htonl(addr.toIPv4Address());
a.resize(at+4);
memcpy(a.data() + at, &ip4, 4);
at += 4;
}
else {
a[at++] = 0x04;
Q_IPV6ADDR ip6 = addr.toIPv6Address();
a.resize(at+16);
for(int i = 0; i < 16; ++i)
a[at++] = ip6[i];
}
// port
a.resize(at+2);
quint16 p = htons(port);
memcpy(a.data() + at, &p, 2);
return a;
}
示例6: nativeSendDatagram
qint64 QNativeSocketEnginePrivate::nativeSendDatagram(const char *data, qint64 len,
const QHostAddress &host, quint16 port)
{
struct sockaddr_in sockAddrIPv4;
struct sockaddr *sockAddrPtr = 0;
QT_SOCKLEN_T sockAddrSize = 0;
#if !defined(QT_NO_IPV6)
struct sockaddr_in6 sockAddrIPv6;
if (host.protocol() == QAbstractSocket::IPv6Protocol) {
memset(&sockAddrIPv6, 0, sizeof(sockAddrIPv6));
sockAddrIPv6.sin6_family = AF_INET6;
sockAddrIPv6.sin6_port = htons(port);
Q_IPV6ADDR tmp = host.toIPv6Address();
memcpy(&sockAddrIPv6.sin6_addr.s6_addr, &tmp, sizeof(tmp));
QString scopeid = host.scopeId();
bool ok;
sockAddrIPv6.sin6_scope_id = scopeid.toInt(&ok);
#ifndef QT_NO_IPV6IFNAME
if (!ok)
sockAddrIPv6.sin6_scope_id = ::if_nametoindex(scopeid.toLatin1());
#endif
sockAddrSize = sizeof(sockAddrIPv6);
sockAddrPtr = (struct sockaddr *)&sockAddrIPv6;
} else
#endif
if (host.protocol() == QAbstractSocket::IPv4Protocol) {
memset(&sockAddrIPv4, 0, sizeof(sockAddrIPv4));
sockAddrIPv4.sin_family = AF_INET;
sockAddrIPv4.sin_port = htons(port);
sockAddrIPv4.sin_addr.s_addr = htonl(host.toIPv4Address());
sockAddrSize = sizeof(sockAddrIPv4);
sockAddrPtr = (struct sockaddr *)&sockAddrIPv4;
}
// ignore the SIGPIPE signal
qt_ignore_sigpipe();
ssize_t sentBytes = qt_safe_sendto(socketDescriptor, data, len,
0, sockAddrPtr, sockAddrSize);
if (sentBytes < 0) {
switch (errno) {
case EMSGSIZE:
setError(QAbstractSocket::DatagramTooLargeError, DatagramTooLargeErrorString);
break;
default:
setError(QAbstractSocket::NetworkError, SendDatagramErrorString);
}
}
#if defined (QNATIVESOCKETENGINE_DEBUG)
qDebug("QNativeSocketEngine::sendDatagram(%p \"%s\", %lli, \"%s\", %i) == %lli", data,
qt_prettyDebug(data, qMin<int>(len, 16), len).data(), len, host.toString().toLatin1().constData(),
port, (qint64) sentBytes);
#endif
return qint64(sentBytes);
}
示例7: targetConnectedHandler
void Worker::targetConnectedHandler(void)
{
this->m_target = new QTcpSocket(this);
this->m_connector->assignTo(this->m_target);
delete this->m_connector;
this->m_connector = 0;
union {
quint32 v4;
Q_IPV6ADDR v6;
quint16 port;
char ptr;
} data;
QByteArray response("\x05\x00\x00", 3);
QHostAddress a;
if (qobject_cast<QAbstractSocket*>(this->m_peer)) {
a = (qobject_cast<QAbstractSocket*>(this->m_peer))->peerAddress();
}
if (a.protocol() == QAbstractSocket::IPv4Protocol) {
response.append('\x01');
data.v4 = qToBigEndian(a.toIPv4Address());
response.append(QByteArray::fromRawData(&data.ptr, sizeof(data.v4)));
}
else if (a.protocol() == QAbstractSocket::IPv6Protocol) {
response.append('\x04');
data.v6 = a.toIPv6Address();
response.append(QByteArray::fromRawData(&data.ptr, sizeof(data.v6)));
}
else {
Q_ASSERT(false);
}
if (qobject_cast<QAbstractSocket*>(this->m_peer)) {
data.port = qToBigEndian<quint16>((qobject_cast<QAbstractSocket*>(this->m_peer))->peerPort());
}
else {
data.port = 0;
}
response.append(QByteArray::fromRawData(&data.ptr, sizeof(data.port)));
QObject::connect(this->m_target, SIGNAL(readyRead()), this, SLOT(targetReadyReadHandler()));
QObject::connect(this->m_target, SIGNAL(disconnected()), this, SLOT(disconnectHandler()));
if (this->writeAndFlush(this->m_peer, response) == response.size()) {
this->m_state = Worker::ConnectionProxiedState;
}
else {
if (this->m_peer) {
this->m_peer->close();
}
this->m_state = Worker::FatalErrorState;
}
}
示例8: htonl
HostAddress::HostAddress(const QHostAddress &address) {
if (address.protocol() == QAbstractSocket::IPv6Protocol) {
const Q_IPV6ADDR &a = address.toIPv6Address();
memcpy(qip6.c, a.c, 16);
} else {
addr[0] = 0ULL;
shorts[4] = 0;
shorts[5] = 0xffff;
hash[3] = htonl(address.toIPv4Address());
}
}
示例9:
QByteArray NetworkManager::Utils::ipv6AddressFromHostAddress(const QHostAddress &address)
{
// Q_ASSERT(address.protocol() == QAbstractSocket::IPv6Protocol);
Q_IPV6ADDR tmp = address.toIPv6Address();
QByteArray assembledAddress;
for (int i = 0; i < 16; ++i) {
assembledAddress[i] = tmp[i];
}
return assembledAddress;
}
示例10: QHostAddress
///Fonction auxiliaire pour appliquer les masques
QHostAddress operator&(const QHostAddress& network, const QHostAddress& netmask)
{
if(network.isNull() || netmask.isNull() || network.protocol() != netmask.protocol())
return QHostAddress();
switch(network.protocol())
{
case QAbstractSocket::IPv4Protocol:
return QHostAddress(network.toIPv4Address() & netmask.toIPv4Address());
case QAbstractSocket::IPv6Protocol:
{
Q_IPV6ADDR networkValue = network.toIPv6Address();
Q_IPV6ADDR netmaskValue = netmask.toIPv6Address();
for(int i = 0 ; i < 16 ; i++)
networkValue[i] &= netmaskValue[i];
return QHostAddress(networkValue);
}
default:
return QHostAddress();
}
}
示例11: packAddress
std::string Common::packAddress(const QHostAddress &addr,
const uint16_t &port)
{
std::string addrBin;
char typeChar;
std::string portNs(2, '\0');
qToBigEndian(port, reinterpret_cast<uchar*>(&portNs[0]));
if (addr.protocol() == QAbstractSocket::IPv4Protocol) {
uint32_t ipv4Address = qToBigEndian(addr.toIPv4Address());
typeChar = static_cast<char>(Address::IPV4);
addrBin = std::string(reinterpret_cast<char*>(&ipv4Address), 4);
} else {
typeChar = static_cast<char>(Address::IPV6);
Q_IPV6ADDR ipv6Address = addr.toIPv6Address();
addrBin = std::string(reinterpret_cast<char*>(ipv6Address.c), 16);
}
return typeChar + addrBin + portNs;
}
示例12: lookup
QString GeoIPDatabase::lookup(const QHostAddress &hostAddr) const
{
Q_IPV6ADDR addr = hostAddr.toIPv6Address();
const uchar *ptr = m_data;
for (int i = 0; i < 16; ++i) {
for (int j = 0; j < 8; ++j) {
bool right = static_cast<bool>((addr[i] >> (7 - j)) & 1);
// Interpret the left/right record as number
if (right)
ptr += m_recordBytes;
quint32 id = 0;
uchar *idPtr = reinterpret_cast<uchar *>(&id);
memcpy(&idPtr[4 - m_recordBytes], ptr, m_recordBytes);
fromBigEndian(idPtr, 4);
if (id == m_nodeCount) {
return QString();
}
else if (id > m_nodeCount) {
QString country = m_countries.value(id);
if (country.isEmpty()) {
const quint32 offset = id - m_nodeCount - sizeof(DATA_SECTION_SEPARATOR);
quint32 tmp = offset + m_indexSize + sizeof(DATA_SECTION_SEPARATOR);
QVariant val = readDataField(tmp);
if (val.userType() == QMetaType::QVariantHash) {
country = val.toHash()["country"].toHash()["iso_code"].toString();
m_countries[id] = country;
}
}
return country;
}
else {
ptr = m_data + (id * m_nodeSize);
}
}
}
return QString();
}
示例13: isIPInRange
bool isIPInRange(const QHostAddress &addr, const QList<Subnet> &subnets)
{
QHostAddress protocolEquivalentAddress;
bool addrConversionOk = false;
if (addr.protocol() == QAbstractSocket::IPv4Protocol) {
// always succeeds
protocolEquivalentAddress = QHostAddress(addr.toIPv6Address());
addrConversionOk = true;
}
else {
// only succeeds when addr is an ipv4-mapped ipv6 address
protocolEquivalentAddress = QHostAddress(addr.toIPv4Address(&addrConversionOk));
}
for (const Subnet &subnet : subnets)
if (addr.isInSubnet(subnet) || (addrConversionOk && protocolEquivalentAddress.isInSubnet(subnet)))
return true;
return false;
}
示例14: adjustAddressProtocol
/*!
\internal
Adjusts the incoming \a address family to match the currently bound address
(if any). This function will convert v4-mapped IPv6 addresses to IPv4 and
vice-versa. All other address types and values will be left unchanged.
*/
QHostAddress QNativeSocketEnginePrivate::adjustAddressProtocol(const QHostAddress &address) const
{
QAbstractSocket::NetworkLayerProtocol targetProtocol = socketProtocol;
if (Q_LIKELY(targetProtocol == QAbstractSocket::UnknownNetworkLayerProtocol))
return address;
QAbstractSocket::NetworkLayerProtocol sourceProtocol = address.protocol();
if (targetProtocol == QAbstractSocket::AnyIPProtocol)
targetProtocol = QAbstractSocket::IPv6Protocol;
if (targetProtocol == QAbstractSocket::IPv6Protocol && sourceProtocol == QAbstractSocket::IPv4Protocol) {
// convert to IPv6 v4-mapped address. This always works
return QHostAddress(address.toIPv6Address());
}
if (targetProtocol == QAbstractSocket::IPv4Protocol && sourceProtocol == QAbstractSocket::IPv6Protocol) {
// convert to IPv4 if the source is a v4-mapped address
quint32 ip4 = address.toIPv4Address();
if (ip4)
return QHostAddress(ip4);
}
return address;
}
示例15: fromName
QHostInfo QHostInfoAgent::fromName(const QString &hostName)
{
QHostInfo results;
#if defined(QHOSTINFO_DEBUG)
qDebug("QHostInfoAgent::fromName(%s) looking up...",
hostName.toLatin1().constData());
#endif
// Load res_init on demand.
static volatile bool triedResolve = false;
if (!triedResolve) {
QMutexLocker locker(QMutexPool::globalInstanceGet(&local_res_init));
if (!triedResolve) {
resolveLibrary();
triedResolve = true;
}
}
// If res_init is available, poll it.
if (local_res_init)
local_res_init();
QHostAddress address;
if (address.setAddress(hostName)) {
// Reverse lookup
// Reverse lookups using getnameinfo are broken on darwin, use gethostbyaddr instead.
#if !defined (QT_NO_GETADDRINFO) && !defined (Q_OS_DARWIN)
sockaddr_in sa4;
#ifndef QT_NO_IPV6
sockaddr_in6 sa6;
#endif
sockaddr *sa = 0;
QT_SOCKLEN_T saSize = 0;
if (address.protocol() == QAbstractSocket::IPv4Protocol) {
sa = (sockaddr *)&sa4;
saSize = sizeof(sa4);
memset(&sa4, 0, sizeof(sa4));
sa4.sin_family = AF_INET;
sa4.sin_addr.s_addr = htonl(address.toIPv4Address());
}
#ifndef QT_NO_IPV6
else {
sa = (sockaddr *)&sa6;
saSize = sizeof(sa6);
memset(&sa6, 0, sizeof(sa6));
sa6.sin6_family = AF_INET6;
memcpy(sa6.sin6_addr.s6_addr, address.toIPv6Address().c, sizeof(sa6.sin6_addr.s6_addr));
}
#endif
char hbuf[NI_MAXHOST];
if (sa && getnameinfo(sa, saSize, hbuf, sizeof(hbuf), 0, 0, 0) == 0)
results.setHostName(QString::fromLatin1(hbuf));
#else
in_addr_t inetaddr = qt_safe_inet_addr(hostName.toLatin1().constData());
struct hostent *ent = gethostbyaddr((const char *)&inetaddr, sizeof(inetaddr), AF_INET);
if (ent)
results.setHostName(QString::fromLatin1(ent->h_name));
#endif
if (results.hostName().isEmpty())
results.setHostName(address.toString());
results.setAddresses(QList<QHostAddress>() << address);
return results;
}
// IDN support
QByteArray aceHostname = QUrl::toAce(hostName);
results.setHostName(hostName);
if (aceHostname.isEmpty()) {
results.setError(QHostInfo::HostNotFound);
results.setErrorString(hostName.isEmpty() ?
QCoreApplication::translate("QHostInfoAgent", "No host name given") :
QCoreApplication::translate("QHostInfoAgent", "Invalid hostname"));
return results;
}
#if !defined (QT_NO_GETADDRINFO)
// Call getaddrinfo, and place all IPv4 addresses at the start and
// the IPv6 addresses at the end of the address list in results.
addrinfo *res = 0;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
#ifdef Q_ADDRCONFIG
hints.ai_flags = Q_ADDRCONFIG;
#endif
int result = getaddrinfo(aceHostname.constData(), 0, &hints, &res);
# ifdef Q_ADDRCONFIG
if (result == EAI_BADFLAGS) {
// if the lookup failed with AI_ADDRCONFIG set, try again without it
hints.ai_flags = 0;
result = getaddrinfo(aceHostname.constData(), 0, &hints, &res);
}
# endif
if (result == 0) {
addrinfo *node = res;
//.........这里部分代码省略.........