Implement missing wpcap pcap_set_immediate_mode
From: Ellington Santos ellingtonsantos@gmail.com
--- dlls/wpcap/tests/wpcap.c | 5 +++++ dlls/wpcap/unixlib.c | 8 ++++++++ dlls/wpcap/unixlib.h | 7 +++++++ dlls/wpcap/wpcap.c | 12 ++++++++++++ dlls/wpcap/wpcap.spec | 2 +- 5 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/dlls/wpcap/tests/wpcap.c b/dlls/wpcap/tests/wpcap.c index 4977f785a7c..717b640a4d2 100644 --- a/dlls/wpcap/tests/wpcap.c +++ b/dlls/wpcap/tests/wpcap.c @@ -111,6 +111,7 @@ static int (CDECL *ppcap_loop)( pcap_t *, int, unsigned char * ); static int (CDECL *ppcap_set_buffer_size)( pcap_t *, int ); static int (CDECL *ppcap_set_datalink)( pcap_t *, int ); +static int (CDECL *ppcap_set_immediate_mode)( pcap_t *, int ); static int (CDECL *ppcap_set_promisc)( pcap_t *, int ); static int (CDECL *ppcap_set_timeout)( pcap_t *, int ); static int (CDECL *ppcap_set_tstamp_precision)( pcap_t *, int ); @@ -142,6 +143,9 @@ static void test_capture( void ) pcap = ppcap_create( dev, errbuf ); ok( pcap != NULL, "got NULL (%s)\n", errbuf );
+ ret = ppcap_set_immediate_mode( pcap, 1 ); + ok( !ret, "got %d\n", ret ); + ret = ppcap_set_promisc( pcap, 1 ); ok( !ret, "got %d\n", ret );
@@ -361,6 +365,7 @@ START_TEST( wpcap ) ppcap_loop = (void *)GetProcAddress( module, "pcap_loop" ); ppcap_set_buffer_size = (void *)GetProcAddress( module, "pcap_set_buffer_size" ); ppcap_set_datalink = (void *)GetProcAddress( module, "pcap_set_datalink" ); + ppcap_set_immediate_mode = (void *)GetProcAddress( module, "pcap_set_immediate_mode" ); ppcap_set_promisc = (void *)GetProcAddress( module, "pcap_set_promisc" ); ppcap_set_timeout = (void *)GetProcAddress( module, "pcap_set_timeout" ); ppcap_set_tstamp_precision = (void *)GetProcAddress( module, "pcap_set_tstamp_precision" ); diff --git a/dlls/wpcap/unixlib.c b/dlls/wpcap/unixlib.c index 6db4800d16b..87a37af3f96 100644 --- a/dlls/wpcap/unixlib.c +++ b/dlls/wpcap/unixlib.c @@ -366,6 +366,12 @@ static NTSTATUS wrap_set_datalink( void *args ) return pcap_set_datalink( (pcap_t *)(ULONG_PTR)params->handle, params->link ); }
+static NTSTATUS wrap_set_immediate_mode( void *args ) +{ + const struct set_immediate_mode_params *params = args; + return pcap_set_immediate_mode( (pcap_t *)(ULONG_PTR)params->handle, params->mode ); +} + static NTSTATUS wrap_set_promisc( void *args ) { const struct set_promisc_params *params = args; @@ -509,6 +515,7 @@ const unixlib_entry_t __wine_unix_call_funcs[] = wrap_sendpacket, wrap_set_buffer_size, wrap_set_datalink, + wrap_set_immediate_mode, wrap_set_promisc, wrap_set_rfmon, wrap_set_snaplen, @@ -974,6 +981,7 @@ const unixlib_entry_t __wine_unix_call_wow64_funcs[] = wow64_sendpacket, wrap_set_buffer_size, wrap_set_datalink, + wrap_set_immediate_mode, wrap_set_promisc, wrap_set_rfmon, wrap_set_snaplen, diff --git a/dlls/wpcap/unixlib.h b/dlls/wpcap/unixlib.h index d13d62a97aa..f8d4b41dd1a 100644 --- a/dlls/wpcap/unixlib.h +++ b/dlls/wpcap/unixlib.h @@ -260,6 +260,12 @@ struct set_promisc_params int enable; };
+struct set_immediate_mode_params +{ + UINT64 handle; + int mode; +}; + struct set_rfmon_params { UINT64 handle; @@ -366,6 +372,7 @@ enum pcap_funcs unix_sendpacket, unix_set_buffer_size, unix_set_datalink, + unix_set_immediate_mode, unix_set_promisc, unix_set_rfmon, unix_set_snaplen, diff --git a/dlls/wpcap/wpcap.c b/dlls/wpcap/wpcap.c index 4274e9c90eb..e8b6e4193f7 100644 --- a/dlls/wpcap/wpcap.c +++ b/dlls/wpcap/wpcap.c @@ -1163,6 +1163,18 @@ int CDECL pcap_set_datalink( struct pcap *pcap, int link ) return PCAP_CALL( set_datalink, ¶ms ); }
+int CDECL pcap_set_immediate_mode( struct pcap *pcap, int mode ) +{ + struct set_immediate_mode_params params; + + TRACE( "%p, %d\n", pcap, mode ); + + if (!pcap) return PCAP_ERROR; + params.handle = pcap->handle; + params.mode = mode; + return PCAP_CALL( set_immediate_mode, ¶ms ); +} + int CDECL pcap_set_promisc( struct pcap *pcap, int enable ) { struct set_promisc_params params; diff --git a/dlls/wpcap/wpcap.spec b/dlls/wpcap/wpcap.spec index ec2e17dc16e..41a84bc2aa4 100644 --- a/dlls/wpcap/wpcap.spec +++ b/dlls/wpcap/wpcap.spec @@ -84,7 +84,7 @@ @ stub pcap_sendqueue_transmit @ cdecl pcap_set_buffer_size(ptr long) @ cdecl pcap_set_datalink(ptr long) -@ stub pcap_set_immediate_mode +@ cdecl pcap_set_immediate_mode(ptr long) @ cdecl pcap_set_promisc(ptr long) @ cdecl pcap_set_rfmon(ptr long) @ cdecl pcap_set_snaplen(ptr long)
This merge request was approved by Hans Leidekker.