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