1 /* This file is part of Netwib. Read and honor its license.
2 */
3 
4 /*-------------------------------------------------------------*/
5 netwib_priv_dll_iphlpapi netwib_global_dll_iphlpapi;
6 
7 /*-------------------------------------------------------------*/
netwib_priv_dll_iphlpapi_init(netwib_priv_dll_iphlpapi * pdll_iphlpapi)8 netwib_err netwib_priv_dll_iphlpapi_init(netwib_priv_dll_iphlpapi *pdll_iphlpapi)
9 {
10   netwib_windowstype windowstype;
11 
12   pdll_iphlpapi->isloaded = NETWIB_FALSE;
13   pdll_iphlpapi->sendarp_avail = NETWIB_FALSE;
14 
15   /* load the DLL */
16   netwib_er(netwib_priv_dll_loadlibrary("iphlpapi.dll",
17                                         &pdll_iphlpapi->hinstance));
18 
19   /* init functions */
20   netwib__priv_dll_f(pdll_iphlpapi, GetIfTable,
21                      pGetIfTable, "GetIfTable");
22   netwib__priv_dll_f(pdll_iphlpapi, GetIpAddrTable,
23                      pGetIpAddrTable, "GetIpAddrTable");
24   netwib__priv_dll_f(pdll_iphlpapi, GetIpNetTable,
25                      pGetIpNetTable, "GetIpNetTable");
26   netwib__priv_dll_f(pdll_iphlpapi, GetIpForwardTable,
27                      pGetIpForwardTable, "GetIpForwardTable");
28 
29   netwib_er(netwib_windowstype_init(&windowstype));
30   if (windowstype != NETWIB_WINDOWSTYPE_95 &&
31       windowstype != NETWIB_WINDOWSTYPE_98 &&
32       windowstype != NETWIB_WINDOWSTYPE_ME) {
33     pdll_iphlpapi->SendARP =
34       (pSendARP) GetProcAddress(pdll_iphlpapi->hinstance, "SendARP");
35     if (pdll_iphlpapi->SendARP != NULL) {
36       pdll_iphlpapi->sendarp_avail = NETWIB_TRUE;
37     }
38   }
39 
40   pdll_iphlpapi->isloaded = NETWIB_TRUE;
41   return(NETWIB_ERR_OK);
42 }
43 
44 /*-------------------------------------------------------------*/
netwib_priv_dll_iphlpapi_close(netwib_priv_dll_iphlpapi * pdll_iphlpapi)45 netwib_err netwib_priv_dll_iphlpapi_close(netwib_priv_dll_iphlpapi *pdll_iphlpapi)
46 {
47   int reti;
48 
49   if (!pdll_iphlpapi->isloaded)
50     return(NETWIB_ERR_OK);
51 
52   /* unload the DLL */
53   reti = FreeLibrary(pdll_iphlpapi->hinstance);
54   if (!reti)
55     return(NETWIB_ERR_FUFREELIBRARY);
56 
57   return(NETWIB_ERR_OK);
58 }
59