IPv6 support is available in the following platforms: - Windows XP, Windows Server 2003, and Windows Vista, using Microsoft Platform SDK for Windows Server 2003 SP1 - Symbian - Linux, and probably other Unix platforms Windows 2000 does not have IPv6 installed, but it may be added by installing [http://msdn.microsoft.com/downloads/sdks/platform/tpipv6/ReadMe.asp Microsoft IPv6 Technology Preview for Windows 2000 (IPv6Kit)]. For information on how to install IPv6Kit on Win2K SP4, please see [http://www.microsoft.com/technet/network/ipv6/ipv6faq.mspx IPv6 FAQ]. IPv6 is '''NOT''' supported by SDK that comes with Microsoft Visual Studio 6. To use Visual Studio 6, you must install and download the newer Platform SDK above. == IPv6 Support in pjlib == pjlib supports IPv6, but this has to be enabled. To enable IPv6, the {{{PJ_HAS_IPV6}}} macro needs to be enabled in {{{pj/config_site.h}}}: {{{ #define PJ_HAS_IPV6 1 }}} '''Socket Addresses''': - An IPv4 socket address is represented by {{{pj_sockaddr_in}}} structure, while an IPv6 socket address is represented by {{{pj_sockaddr_in6}}} structure. The {{{pj_sockaddr}}} structure is a union which may contain IPv4 or IPv6 socket address, depending on the address family field. - Various new socket address API's have been added which can work on both IPv4 and IPv6 address, such as: - pj_inet_pton() - pj_inet_ntop() - pj_inet_ntop2() - pj_sockaddr_init() - pj_sockaddr_get_addr() - pj_sockaddr_has_addr() - pj_sockaddr_get_addr_len() - pj_sockaddr_set_str_addr() - pj_sockaddr_get_port() - pj_sockaddr_set_port() - pj_sockaddr_get_len() '''Socket and IOQueue API''': - The {{{pj_sockaddr}}} structure is a union which may contain IPv4 or IPv6 socket address. Application may pass this structure to various pjlib socket functions which take {{{pj_sockaddr_t}}} as an argument, such as {{{pj_sock_bind()}}}, {{{pj_sock_sendto()}}}, {{{pj_sock_recvfrom()}}}, {{{pj_sock_accept()}}}, etc. - The ''ioqueue'' is also capable of supporting IPv6. '''Address Resolution API''': - A new API {{{pj_getaddrinfo()}}} has been added to resolve both IPv4 and IPv6 addresses, in addition to existing {{{pj_gethostbyname()}}} API which resolves IPv4 address, - The {{{pj_gethostip()}}} and {{{pj_getdefaultipinterface()}}} API has been modified to take an additional address family argument. '''IP Helper API''': - The {{{pj_enum_ip_interface()}}} API has been modified to take an additional address family argument. == IPv6 Support in pjsip == '''IPv6 SIP Transport''': - The SIP UDP transport now supports IPv6 sockets, and new API's have been added to facilitate IPv6 transport creation ({{{pjsip_udp_transport_start6()}}} and {{{pjsip_udp_transport_attach2()}}}). Note that if application wants to support both IPv4 and IPv6 UDP transports, two separate UDP transport instances must be created, one for each address family. '''IPv6 Address Representation''': - IPv6 address may appear in two types of places in the SIP message: in a host part of a header field (such as host part of an URI, or host part in a Via header), and as a parameter value (such as the value of ''received'' and ''maddr'' parameter). - Although in the SIP ABNF grammar an IPv6 may or may not be enclosed in square brackets ('''[''' and ''']''' characters), in pjsip all IPv6 addresses will be represented '''without''' the square brackets, for consistency. This means pjsip will remove the square brackets, if they are present, during parsing process, and will enclose the address with square brackets as necessary when pjsip prints the Ipv6 address in a packet for transmission. When application inspects a message component that contains IPv6 address, it will always find it without the enclosing brackets. == IPv6 Support in pjlib-util (DNS SRV and AAAA resolution) == To be done. == IPv6 Support in pjmedia (SDP, media transport) == To be done. == IPv6 Support in pjnath (STUN and ICE) == To be done.