
int ppl_dns_get_local_fqdn (char **servername, char **serverip, char **netmask, unsigned int WIN32_interface)
数据结构有:MIB_IPADDRTABLE,MIB_IFROW,调用win32 api,
int eXosip_guess_ip_for_via (int family, char *address, int size)
遍历MIB_IPFORWARDTABLE。首先检查同yahoo英国网站ip的连接,获得最佳interface。没有的话查找缺省路由的interface,没有的话查找非局域网ip的interface,再没有的话查找ip的interface。调用ppl_dns_get_local_fqdn,参数为ipfwdt->table[ipf_cnt].dwForwardIfIndex。
对于BSD,Linux等
static int ppl_dns_default_gateway_ipv4 (char *address, int size);
static int ppl_dns_default_gateway_ipv6 (char *address, int size);
调用socket ,setsockopt,connect,getsockname(获得iface_out)。通过osip_strncpy,把iface_out.sin_addr拷贝到参数address中。
int eXosip_guess_ip_for_via (int familiy, char *address, int size)
根据family,调用上面两个函数。
int eXosip_get_localip_for (const char *address_to_reach, char *loc, int size)
调用getaddrinfo (获得res),socket(根据res得到sock),setsockopt (设置sock),connect ,getsockname(填充addr),getnameinfo(获得loc)。
void eXosip_get_localip_from_via (osip_message_t * mesg, char *locip, int size)
向via->host发起连接,获得本地ip,调用eXosip_get_localip_for。
int eXosip_get_addrinfo (struct addrinfo **addrinfo, const char *hostname, int service, int protocol)
为socket绑定准备addrinfo,并解析hostname。要设置hint。调用getaddrinfo ,获得addrinfo。
char * strdup_printf (const char *fmt, ...)
自定义的printf。