From c326f938bbf72127885ac09179912b8a2cbfb030 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Mon, 24 Sep 2007 19:46:41 +0000 Subject: Ticket #382: Updated ICE from draft-ietf-mmusic-ice-14 to ice-18 specification, and also done some other tweaks as well git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1450 74dad513-b988-da41-8d7b-12977e46ad98 --- pjlib/src/pj/ip_helper_win32.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'pjlib/src') diff --git a/pjlib/src/pj/ip_helper_win32.c b/pjlib/src/pj/ip_helper_win32.c index 69ff16a2..1a937d72 100644 --- a/pjlib/src/pj/ip_helper_win32.c +++ b/pjlib/src/pj/ip_helper_win32.c @@ -34,16 +34,22 @@ #include #include +#ifndef PJ_IP_HELPER_IGNORE_LOOPBACK_IF +# define PJ_IP_HELPER_IGNORE_LOOPBACK_IF 1 +#endif + typedef DWORD (WINAPI *PFN_GetIpAddrTable)(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize, BOOL bOrder); typedef DWORD (WINAPI *PFN_GetIpForwardTable)(PMIB_IPFORWARDTABLE pIpForwardTable, PULONG pdwSize, BOOL bOrder); +typedef DWORD (WINAPI *PFN_GetIfEntry)(PMIB_IFROW pIfRow); static HANDLE s_hDLL; static PFN_GetIpAddrTable s_pfnGetIpAddrTable; static PFN_GetIpForwardTable s_pfnGetIpForwardTable; +static PFN_GetIfEntry s_pfnGetIfEntry; static void unload_iphlp_module(void) { @@ -85,6 +91,23 @@ static DWORD MyGetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, } +#if PJ_IP_HELPER_IGNORE_LOOPBACK_IF +static DWORD MyGetIfEntry(MIB_IFROW *pIfRow) +{ + if(NULL == s_pfnGetIfEntry) { + s_pfnGetIfEntry = (PFN_GetIfEntry) + GetIpHlpApiProc(PJ_T("GetIfEntry")); + } + + if(NULL != s_pfnGetIfEntry) { + return s_pfnGetIfEntry(pIfRow); + } + + return ERROR_NOT_SUPPORTED; +} +#endif + + static DWORD MyGetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable, PULONG pdwSize, BOOL bOrder) @@ -134,9 +157,23 @@ PJ_DEF(pj_status_t) pj_enum_ip_interface(unsigned *p_cnt, count = (pTab->dwNumEntries < *p_cnt) ? pTab->dwNumEntries : *p_cnt; *p_cnt = 0; for (i=0; itable[i].dwAddr == 0) continue; + +#if PJ_IP_HELPER_IGNORE_LOOPBACK_IF + /* Investigate the type of this interface */ + pj_bzero(&ifRow, sizeof(ifRow)); + ifRow.dwIndex = pTab->table[i].dwIndex; + if (MyGetIfEntry(&ifRow) != 0) + continue; + + if (ifRow.dwType == MIB_IF_TYPE_LOOPBACK) + continue; +#endif + ifs[*p_cnt].s_addr = pTab->table[i].dwAddr; (*p_cnt)++; } -- cgit v1.2.3