⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ksockaddr.cpp

📁 将konqueror浏览器移植到ARM9 2410中
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    }#ifdef AF_INET6  else    {      inet_pton(family, addr.latin1(), (void*)&(d->sin6.sin6_addr));      fromV6();    }#endif  d->sockfamily = family;  return true;}bool KInetSocketAddress::setPort(unsigned short port){  // set port on all socket types  d->sin.sin_port = htons(port);#ifdef AF_INET6  d->sin6.sin6_port = htons(port);#endif  return true;}bool KInetSocketAddress::setFamily(int _family){  if (_family != AF_INET #ifdef AF_INET6      && _family != AF_INET6#endif      )    {      kdWarning() << "KInetSocketAddress::setFamily(int) called with unknown family\n";      return false;    }  d->sockfamily = _family;  if (_family == AF_INET)    fromV4();#ifdef AF_INET6  else if (_family == AF_INET6)    fromV6();#endif  return true;}bool KInetSocketAddress::setFlowinfo(Q_UINT32 flowinfo){#ifdef AF_INET6  if (d->sockfamily == AF_INET6)    {      d->sin6.sin6_flowinfo = flowinfo;      return true;    }#endif  return false;}bool KInetSocketAddress::setScopeId(int scopeid){#if defined(AF_INET6) && defined(HAVE_SOCKADDR_IN6_SCOPE_ID)  if (d->sockfamily == AF_INET6)    {      d->sin6.sin6_scope_id = scopeid;      return true;    }#endif  (void)scopeid;  return false;}const sockaddr_in* KInetSocketAddress::addressV4() const{  if (d->sockfamily == AF_INET)    return &d->sin;#ifdef AF_INET6  else if (d->sockfamily == AF_INET6)    {      // check if this IPv6 address was converted without loss      if (V6_CAN_CONVERT_TO_V4(&d->sin6.sin6_addr))	return &d->sin;      else	return NULL;		// there was loss, so return nothing    }#endif  kdWarning() << "KInetSocketAddress::addressV4() called on uninitialized socket\n";  return NULL;}const sockaddr_in6* KInetSocketAddress::addressV6() const{#ifdef AF_INET6  return &d->sin6;#else  return NULL;#endif}in_addr KInetSocketAddress::hostV4() const{  // this might be empty  return d->sin.sin_addr;}/* * ATTENTION * This function is left undefined if no IPv6 support exists * This is intentional */#ifdef AF_INET6in6_addr KInetSocketAddress::hostV6() const{  return d->sin6.sin6_addr;}#endifQString KInetSocketAddress::pretty() const{  if (d->sockfamily != AF_INET #ifdef AF_INET6      && d->sockfamily != AF_INET6#endif      )    {      kdWarning() << "KInetSocketAddress::pretty() called on uninitialized class\n";      return i18n("<empty>");    }  return i18n("1: hostname, 2: port number", "%1 port %2").arg(nodeName()).arg(serviceName());}QString KInetSocketAddress::nodeName() const{  char buf[INET6_ADDRSTRLEN];	// INET6_ADDRSTRLEN > INET_ADDRSTRLEN  if (d->sockfamily == AF_INET)    inet_ntop(d->sockfamily, (void*)&d->sin.sin_addr, buf, sizeof(buf));#ifdef AF_INET6  else if (d->sockfamily == AF_INET6)    inet_ntop(d->sockfamily, (void*)&d->sin6.sin6_addr, buf, sizeof(buf));#endif  else    {      kdWarning() << "KInetSocketAddress::prettyHost() called on uninitialized class\n";      return i18n("<empty>");    }  return QString::fromLocal8Bit(buf); // FIXME! What's the encoding?}QString KInetSocketAddress::serviceName() const{  return QString::number(port());}unsigned short KInetSocketAddress::port() const{#ifdef AF_INET6  // we prefer sin6 here because fromV6() might make sin.sin_port be 0  return ntohs(d->sin6.sin6_port);#else  return ntohs(d->sin.sin_port);#endif}Q_UINT32 KInetSocketAddress::flowinfo() const{#ifdef AF_INET6  if (d->sockfamily == AF_INET6)    return (Q_UINT32)d->sin6.sin6_flowinfo;#endif  return 0;}ksocklen_t KInetSocketAddress::size() const{  if (d->sockfamily == AF_INET)    return sizeof(d->sin);#ifdef AF_INET6  else if (d->sockfamily == AF_INET6)    return sizeof(d->sin6);#endif  else    return 0;}bool KInetSocketAddress::areEqualInet(const KSocketAddress &s1, const KSocketAddress &s2, bool coreOnly){   if (s1.family() != s2.family())      return false;   if ((s1.size() < sizeof(sockaddr_in)) || (s2.size() < sizeof(sockaddr_in)))      return false;   struct sockaddr_in *sin1 = (sockaddr_in *) s1.address();   struct sockaddr_in *sin2 = (sockaddr_in *) s2.address();   if (coreOnly)      return (memcmp(&sin1->sin_addr, &sin2->sin_addr, sizeof(struct in_addr))  == 0);   else      return (sin1->sin_port == sin2->sin_port) &&              (memcmp(&sin1->sin_addr, &sin2->sin_addr, sizeof(struct in_addr))  == 0);}bool KInetSocketAddress::areEqualInet6(const KSocketAddress &s1, const KSocketAddress &s2, bool coreOnly){#ifdef AF_INET6   if (s1.family() != s2.family())      return false;   if ((s1.size() < sizeof(sockaddr_in6)) || (s2.size() < sizeof(sockaddr_in6)))      return false;   struct sockaddr_in6 *sin1 = (sockaddr_in6 *) s1.address();   struct sockaddr_in6 *sin2 = (sockaddr_in6 *) s2.address();   if (coreOnly)     return (memcmp(&sin1->sin6_addr, &sin2->sin6_addr, sizeof(struct in6_addr))  == 0);   else     return (sin1->sin6_port == sin2->sin6_port) &&             (sin1->sin6_flowinfo == sin2->sin6_flowinfo) && #ifdef HAVE_SOCKADDR_IN6_SCOPE_ID            (sin1->sin6_scope_id == sin2->sin6_scope_id) && #endif            (memcmp(&sin1->sin6_addr, &sin2->sin6_addr, sizeof(struct in6_addr))  == 0);#else   return false;#endif}// KDE 3.0: Remove me!bool KInetSocketAddress::isCoreEqual(const KSocketAddress& other) const{  return KSocketAddress::isCoreEqual(other);}void KInetSocketAddress::fromV4(){  // converts an address from v4#ifdef AF_INET6  d->sin6.sin6_port = d->sin.sin_port;  // Make this a v4-mapped address  ((Q_UINT32*)&d->sin6.sin6_addr)[0] = ((Q_UINT32*)&d->sin6.sin6_addr)[1] = 0;  ((Q_UINT32*)&d->sin6.sin6_addr)[2] = htonl(0xffff);  ((Q_UINT32*)&d->sin6.sin6_addr)[3] = *(Q_UINT32*)&d->sin.sin_addr;#endif  // data == KSocketAddress::data  data = (sockaddr*)&d->sin;  datasize = sizeof( sockaddr_in );}void KInetSocketAddress::fromV6(){#ifdef AF_INET6  // convert to v4 only if this is a v4-mapped or v4-compat address  if (V6_CAN_CONVERT_TO_V4(&d->sin6.sin6_addr))    {      d->sin.sin_port = d->sin6.sin6_port;      *(Q_UINT32*)&d->sin.sin_addr = ((Q_UINT32*)&d->sin6.sin6_addr)[3];    }  else    {      d->sin.sin_port = 0;      memset(&d->sin.sin_addr, 0, sizeof(d->sin.sin_addr));    }  data = (sockaddr*)&d->sin6;  datasize = sizeof( sockaddr_in6 );#endif}QString KInetSocketAddress::addrToString(int family, const void* addr){  char buf[INET6_ADDRSTRLEN+1];  return QString::fromUtf8(inet_ntop(family, addr, buf, INET6_ADDRSTRLEN));}bool KInetSocketAddress::stringToAddr(int family, const char *text, void *dest){  return inet_pton(family, text, dest) != 0;}/** * class KUnixSocketAddress */class KUnixSocketAddress::Private{public:  sockaddr_un *m_sun;  Private() : m_sun(NULL)  { }};KUnixSocketAddress::KUnixSocketAddress() :  d(new Private){}KUnixSocketAddress::KUnixSocketAddress(const sockaddr_un* _sun, ksocklen_t size) :  d(new Private){  setAddress(_sun, size);}KUnixSocketAddress::KUnixSocketAddress(QCString pathname) :  d(new Private){  setAddress(pathname); }KUnixSocketAddress::~KUnixSocketAddress(){  delete d;}bool KUnixSocketAddress::setAddress(const sockaddr_un* _sun, ksocklen_t _size){  if (_sun->sun_family != AF_UNIX)    {      kdWarning() << "KUnixSocketAddress::setAddress called with invalid socket\n";      return false;    }  if (owndata && (d->m_sun != NULL) && (datasize >= _size))    {      // reuse this without reallocating      memcpy(d->m_sun, _sun, _size);    }  else    {      if (owndata && (d->m_sun != NULL))	free(d->m_sun);      d->m_sun = (sockaddr_un*)malloc(_size);      if (d->m_sun == NULL)	{	  // problems	  owndata = false;	  return false;	}      memcpy(d->m_sun, _sun, _size);    }  datasize = _size;  data = (sockaddr*)d->m_sun;  owndata = true;#ifdef HAVE_SOCKADDR_SA_LEN  data->sa_len = _size;#endif  return 1;}bool KUnixSocketAddress::setAddress(QCString path){  ksocklen_t newsize = offsetof(sockaddr_un, sun_path) + path.length();  if (owndata && (d->m_sun != NULL) && (datasize >= newsize))    {      // we can reuse this      strcpy(d->m_sun->sun_path, path);#ifdef HAVE_SOCKADDR_SA_LEN      data->sa_len = newsize;#endif      return true;    }  // nah, we have to do better  if (owndata && (d->m_sun != NULL))    free(d->m_sun);  d->m_sun = (sockaddr_un*) malloc(newsize);  if (d->m_sun == NULL)    {      owndata = false;      return false;    }  d->m_sun->sun_family = AF_UNIX;  strcpy(d->m_sun->sun_path, path);  data = (sockaddr*)d->m_sun;  datasize = newsize;#ifdef HAVE_SOCKADDR_SA_LEN  data->sa_len = newsize;#endif  return 1;}QCString KUnixSocketAddress::pathname() const{  if (d->m_sun != NULL)    {      if (datasize > offsetof(sockaddr_un, sun_path))	return d->m_sun->sun_path;      return "";    }  return QCString(0);}QString KUnixSocketAddress::pretty() const{  QCString pname = pathname();  if (pname.isEmpty())    return i18n("<empty Unix socket>");  return QFile::decodeName(pathname());}QString KUnixSocketAddress::serviceName() const{  return QString::fromUtf8(pathname());}const sockaddr_un* KUnixSocketAddress::address() const{  return d->m_sun;}bool KUnixSocketAddress::areEqualUnix(const KSocketAddress &s1, const KSocketAddress &s2, bool /* coreOnly */){   if (s1.family() != s2.family())      return false;      if ((s1.size() < sizeof(sockaddr_un)) || (s2.size() < sizeof(sockaddr_un)))      return false;   struct sockaddr_un *sun1 = (sockaddr_un *) s1.address();   struct sockaddr_un *sun2 = (sockaddr_un *) s2.address();       return (strcmp(sun1->sun_path, sun2->sun_path) == 0);}#include "ksockaddr.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -