1 /* This file is part of Netwib. Read and honor its license.
2 */
3
4 /*-------------------------------------------------------------*/
5 /* This critical section is for PacketOpenAdapter
6 (PacketGetAdapterNames and pcap_open_live internally call it).
7 We also use it for close functions. */
8 CRITICAL_SECTION netwib_priv_criticalsection_packetdll;
9
10 /*-------------------------------------------------------------*/
netwib_priv_cs_init(void)11 netwib_err netwib_priv_cs_init(void)
12 {
13 InitializeCriticalSection(&netwib_priv_criticalsection_packetdll);
14 return(NETWIB_ERR_OK);
15 }
16
17 /*-------------------------------------------------------------*/
netwib_priv_cs_close(void)18 netwib_err netwib_priv_cs_close(void)
19 {
20 DeleteCriticalSection(&netwib_priv_criticalsection_packetdll);
21 return(NETWIB_ERR_OK);
22 }
23
24 /*-------------------------------------------------------------*/
netwib_priv_cs_PacketOpenAdapter(LPTSTR AdapterName,LPADAPTER * plp)25 netwib_err netwib_priv_cs_PacketOpenAdapter(LPTSTR AdapterName,
26 LPADAPTER *plp)
27 {
28 if (!netwib_global_dll_packet.isloaded) {
29 return(NETWIB_ERR_LONOTSUPPORTED);
30 }
31
32 EnterCriticalSection(&netwib_priv_criticalsection_packetdll);
33 *plp = netwib_global_dll_packet.PacketOpenAdapter(AdapterName);
34 LeaveCriticalSection(&netwib_priv_criticalsection_packetdll);
35
36 if (*plp == NULL)
37 return(NETWIB_ERR_FUPACKETOPENADAPTER);
38
39 return(NETWIB_ERR_OK);
40 }
41
42 /*-------------------------------------------------------------*/
netwib_priv_cs_PacketCloseAdapter(LPADAPTER lpAdapter)43 netwib_err netwib_priv_cs_PacketCloseAdapter(LPADAPTER lpAdapter)
44 {
45 if (!netwib_global_dll_packet.isloaded) {
46 return(NETWIB_ERR_LONOTSUPPORTED);
47 }
48
49 EnterCriticalSection(&netwib_priv_criticalsection_packetdll);
50 netwib_global_dll_packet.PacketCloseAdapter(lpAdapter);
51 LeaveCriticalSection(&netwib_priv_criticalsection_packetdll);
52 return(NETWIB_ERR_OK);
53 }
54
55 /*-------------------------------------------------------------*/
netwib_priv_cs_pcap_open_live(char * dev,int mtu,int promisc,int toms,char * err,pcap_t ** ppc)56 netwib_err netwib_priv_cs_pcap_open_live(char *dev,
57 int mtu,
58 int promisc,
59 int toms,
60 char *err,
61 pcap_t **ppc)
62 {
63 if (!netwib_global_dll_winpcap.isloaded) {
64 return(NETWIB_ERR_LONOTSUPPORTED);
65 }
66
67 EnterCriticalSection(&netwib_priv_criticalsection_packetdll);
68 *ppc = netwib_global_dll_winpcap.pcap_open_live(dev, mtu, promisc, toms, err);
69 LeaveCriticalSection(&netwib_priv_criticalsection_packetdll);
70
71 return(NETWIB_ERR_OK);
72 }
73
74 /*-------------------------------------------------------------*/
netwib_priv_cs_pcap_close(pcap_t * pt)75 netwib_err netwib_priv_cs_pcap_close(pcap_t *pt)
76 {
77 #if 0
78 netwib_bool bugged;
79 netwib_err ret;
80
81 /* special case of RAS under Win95 : does not work */
82 ret = netwib_priv_conf_winras_w95bugged(&bugged);
83 if (ret == NETWIB_ERR_OK && bugged) {
84 return(NETWIB_ERR_OK);
85 }
86 #endif
87 if (!netwib_global_dll_winpcap.isloaded) {
88 return(NETWIB_ERR_LONOTSUPPORTED);
89 }
90
91 EnterCriticalSection(&netwib_priv_criticalsection_packetdll);
92 netwib_global_dll_winpcap.pcap_close(pt);
93 LeaveCriticalSection(&netwib_priv_criticalsection_packetdll);
94 return(NETWIB_ERR_OK);
95 }
96
97