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