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

📄 old_win_sdk_compat.hpp

📁 这是国外的resip协议栈
💻 HPP
字号:
//// old_win_sdk_compat.hpp// ~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2007 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#ifndef ASIO_DETAIL_OLD_WIN_SDK_COMPAT_HPP#define ASIO_DETAIL_OLD_WIN_SDK_COMPAT_HPP#if defined(_MSC_VER) && (_MSC_VER >= 1200)# pragma once#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)#include "asio/detail/push_options.hpp"#include "asio/detail/push_options.hpp"#include <boost/config.hpp>#include "asio/detail/pop_options.hpp"#if defined(BOOST_WINDOWS) || defined(__CYGWIN__)// Guess whether we are building against on old Platform SDK.#if !defined(IN6ADDR_ANY_INIT)#define ASIO_HAS_OLD_WIN_SDK 1#endif // !defined(IN6ADDR_ANY_INIT)#if defined(ASIO_HAS_OLD_WIN_SDK)// Emulation of types that are missing from old Platform SDKs.namespace asio {namespace detail {enum{  sockaddr_storage_maxsize = 128, // Maximum size.  sockaddr_storage_alignsize = (sizeof(__int64)), // Desired alignment.  sockaddr_storage_pad1size = (sockaddr_storage_alignsize - sizeof(short)),  sockaddr_storage_pad2size = (sockaddr_storage_maxsize -      (sizeof(short) + sockaddr_storage_pad1size + sockaddr_storage_alignsize))};struct sockaddr_storage_emulation{  short ss_family;  char __ss_pad1[sockaddr_storage_pad1size];  __int64 __ss_align;  char __ss_pad2[sockaddr_storage_pad2size];};struct in6_addr_emulation{  u_char s6_addr[16];};struct sockaddr_in6_emulation{  short sin6_family;  u_short sin6_port;  u_long sin6_flowinfo;  in6_addr_emulation sin6_addr;  u_long sin6_scope_id;};struct ipv6_mreq_emulation{  in6_addr_emulation ipv6mr_multiaddr;  unsigned int ipv6mr_interface;};#if !defined(IN6ADDR_ANY_INIT)# define IN6ADDR_ANY_INIT { 0 }#endif#if !defined(IN6ADDR_LOOPBACK_INIT)# define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }#endifstruct addrinfo_emulation{  int ai_flags;  int ai_family;  int ai_socktype;  int ai_protocol;  size_t ai_addrlen;  char* ai_canonname;  sockaddr* ai_addr;  addrinfo_emulation* ai_next;};#if !defined(AI_PASSIVE)# define AI_PASSIVE 0x1#endif#if !defined(AI_CANONNAME)# define AI_CANONNAME 0x2#endif#if !defined(AI_NUMERICHOST)# define AI_NUMERICHOST 0x4#endif#if !defined(EAI_AGAIN)# define EAI_AGAIN WSATRY_AGAIN#endif#if !defined(EAI_BADFLAGS)# define EAI_BADFLAGS WSAEINVAL#endif#if !defined(EAI_FAIL)# define EAI_FAIL WSANO_RECOVERY#endif#if !defined(EAI_FAMILY)# define EAI_FAMILY WSAEAFNOSUPPORT#endif#if !defined(EAI_MEMORY)# define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY#endif#if !defined(EAI_NODATA)# define EAI_NODATA WSANO_DATA#endif#if !defined(EAI_NONAME)# define EAI_NONAME WSAHOST_NOT_FOUND#endif#if !defined(EAI_SERVICE)# define EAI_SERVICE WSATYPE_NOT_FOUND#endif#if !defined(EAI_SOCKTYPE)# define EAI_SOCKTYPE WSAESOCKTNOSUPPORT#endif#if !defined(NI_NOFQDN)# define NI_NOFQDN 0x01#endif#if !defined(NI_NUMERICHOST)# define NI_NUMERICHOST 0x02#endif#if !defined(NI_NAMEREQD)# define NI_NAMEREQD 0x04#endif#if !defined(NI_NUMERICSERV)# define NI_NUMERICSERV 0x08#endif#if !defined(NI_DGRAM)# define NI_DGRAM 0x10#endif#if !defined(IPPROTO_IPV6)# define IPPROTO_IPV6 41#endif#if !defined(IPV6_UNICAST_HOPS)# define IPV6_UNICAST_HOPS 4#endif#if !defined(IPV6_MULTICAST_IF)# define IPV6_MULTICAST_IF 9#endif#if !defined(IPV6_MULTICAST_HOPS)# define IPV6_MULTICAST_HOPS 10#endif#if !defined(IPV6_MULTICAST_LOOP)# define IPV6_MULTICAST_LOOP 11#endif#if !defined(IPV6_JOIN_GROUP)# define IPV6_JOIN_GROUP 12#endif#if !defined(IPV6_LEAVE_GROUP)# define IPV6_LEAVE_GROUP 13#endifinline int IN6_IS_ADDR_UNSPECIFIED(const in6_addr_emulation* a){  return ((a->s6_addr[0] == 0)      && (a->s6_addr[1] == 0)      && (a->s6_addr[2] == 0)      && (a->s6_addr[3] == 0)      && (a->s6_addr[4] == 0)      && (a->s6_addr[5] == 0)      && (a->s6_addr[6] == 0)      && (a->s6_addr[7] == 0)      && (a->s6_addr[8] == 0)      && (a->s6_addr[9] == 0)      && (a->s6_addr[10] == 0)      && (a->s6_addr[11] == 0)      && (a->s6_addr[12] == 0)      && (a->s6_addr[13] == 0)      && (a->s6_addr[14] == 0)      && (a->s6_addr[15] == 0));}inline int IN6_IS_ADDR_LOOPBACK(const in6_addr_emulation* a){  return ((a->s6_addr[0] == 0)      && (a->s6_addr[1] == 0)      && (a->s6_addr[2] == 0)      && (a->s6_addr[3] == 0)      && (a->s6_addr[4] == 0)      && (a->s6_addr[5] == 0)      && (a->s6_addr[6] == 0)      && (a->s6_addr[7] == 0)      && (a->s6_addr[8] == 0)      && (a->s6_addr[9] == 0)      && (a->s6_addr[10] == 0)      && (a->s6_addr[11] == 0)      && (a->s6_addr[12] == 0)      && (a->s6_addr[13] == 0)      && (a->s6_addr[14] == 0)      && (a->s6_addr[15] == 1));}inline int IN6_IS_ADDR_MULTICAST(const in6_addr_emulation* a){  return (a->s6_addr[0] == 0xff);}inline int IN6_IS_ADDR_LINKLOCAL(const in6_addr_emulation* a){  return ((a->s6_addr[0] == 0xfe) && ((a->s6_addr[1] & 0xc0) == 0x80));}inline int IN6_IS_ADDR_SITELOCAL(const in6_addr_emulation* a){  return ((a->s6_addr[0] == 0xfe) && ((a->s6_addr[1] & 0xc0) == 0xc0));}inline int IN6_IS_ADDR_V4MAPPED(const in6_addr_emulation* a){  return ((a->s6_addr[0] == 0)      && (a->s6_addr[1] == 0)      && (a->s6_addr[2] == 0)      && (a->s6_addr[3] == 0)      && (a->s6_addr[4] == 0)      && (a->s6_addr[5] == 0)      && (a->s6_addr[6] == 0)      && (a->s6_addr[7] == 0)      && (a->s6_addr[8] == 0)      && (a->s6_addr[9] == 0)      && (a->s6_addr[10] == 0xff)      && (a->s6_addr[11] == 0xff));}inline int IN6_IS_ADDR_V4COMPAT(const in6_addr_emulation* a){  return ((a->s6_addr[0] == 0)      && (a->s6_addr[1] == 0)      && (a->s6_addr[2] == 0)      && (a->s6_addr[3] == 0)      && (a->s6_addr[4] == 0)      && (a->s6_addr[5] == 0)      && (a->s6_addr[6] == 0)      && (a->s6_addr[7] == 0)      && (a->s6_addr[8] == 0)      && (a->s6_addr[9] == 0)      && (a->s6_addr[10] == 0xff)      && (a->s6_addr[11] == 0xff)      && !((a->s6_addr[12] == 0)        && (a->s6_addr[13] == 0)        && (a->s6_addr[14] == 0)        && ((a->s6_addr[15] == 0) || (a->s6_addr[15] == 1))));}inline int IN6_IS_ADDR_MC_NODELOCAL(const in6_addr_emulation* a){  return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_addr[1] & 0xf) == 1);}inline int IN6_IS_ADDR_MC_LINKLOCAL(const in6_addr_emulation* a){  return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_addr[1] & 0xf) == 2);}inline int IN6_IS_ADDR_MC_SITELOCAL(const in6_addr_emulation* a){  return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_addr[1] & 0xf) == 5);}inline int IN6_IS_ADDR_MC_ORGLOCAL(const in6_addr_emulation* a){  return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_addr[1] & 0xf) == 8);}inline int IN6_IS_ADDR_MC_GLOBAL(const in6_addr_emulation* a){  return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_addr[1] & 0xf) == 0xe);}} // namespace detail} // namespace asio#endif // defined(ASIO_HAS_OLD_WIN_SDK)// Even newer Platform SDKs that support IPv6 may not define IPV6_V6ONLY.#if !defined(IPV6_V6ONLY)# define IPV6_V6ONLY 27#endif#endif // defined(BOOST_WINDOWS) || defined(__CYGWIN__)#include "asio/detail/pop_options.hpp"#endif // ASIO_DETAIL_OLD_WIN_SDK_COMPAT_HPP

⌨️ 快捷键说明

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