[PATCH 2/5] wpcap: Implement some more functions.

Hans Leidekker hans at codeweavers.com
Mon May 10 08:37:24 CDT 2021


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/wpcap/unixlib.c  | 108 ++++++++++++++++++++++++++++++++++++++++++
 dlls/wpcap/unixlib.h  |  18 +++++++
 dlls/wpcap/wpcap.c    | 108 ++++++++++++++++++++++++++++++++++++++++++
 dlls/wpcap/wpcap.spec |  18 +++++++
 4 files changed, 252 insertions(+)

diff --git a/dlls/wpcap/unixlib.c b/dlls/wpcap/unixlib.c
index 64205ea0e94..531fa05941f 100644
--- a/dlls/wpcap/unixlib.c
+++ b/dlls/wpcap/unixlib.c
@@ -40,11 +40,21 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag);
 
 static const struct pcap_callbacks *callbacks;
 
+static int CDECL wrap_activate( void *handle )
+{
+    return pcap_activate( handle );
+}
+
 static void CDECL wrap_breakloop( void *handle )
 {
     return pcap_breakloop( handle );
 }
 
+static int CDECL wrap_can_set_rfmon( void *handle )
+{
+    return pcap_can_set_rfmon( handle );
+}
+
 static void CDECL wrap_close( void *handle )
 {
     pcap_close( handle );
@@ -55,6 +65,11 @@ static int CDECL wrap_compile( void *handle, void *program, const char *buf, int
     return pcap_compile( handle, program, buf, optimize, mask );
 }
 
+static void * CDECL wrap_create( const char *src, char *errbuf )
+{
+    return pcap_create( src, errbuf );
+}
+
 static int CDECL wrap_datalink( void *handle )
 {
     return pcap_datalink( handle );
@@ -114,6 +129,16 @@ static int CDECL wrap_findalldevs( struct pcap_if_hdr **devs, char *errbuf )
     return ret;
 }
 
+static void CDECL wrap_free_datalinks( int *links )
+{
+    pcap_free_datalinks( links );
+}
+
+static void CDECL wrap_free_tstamp_types( int *types )
+{
+    pcap_free_tstamp_types( types );
+}
+
 static void CDECL wrap_freealldevs( struct pcap_if_hdr *devs )
 {
     pcap_freealldevs( (pcap_if_t *)devs );
@@ -124,6 +149,11 @@ static void CDECL wrap_freecode( void *program )
     return pcap_freecode( program );
 }
 
+static int CDECL wrap_get_tstamp_precision( void *handle )
+{
+    return pcap_get_tstamp_precision( handle );
+}
+
 static char * CDECL wrap_geterr( void *handle )
 {
     return pcap_geterr( handle );
@@ -144,6 +174,11 @@ static int CDECL wrap_list_datalinks( void *handle, int **buf )
     return pcap_list_datalinks( handle, buf );
 }
 
+static int CDECL wrap_list_tstamp_types( void *handle, int **types )
+{
+    return pcap_list_tstamp_types( handle, types );
+}
+
 static int CDECL wrap_lookupnet( const char *device, unsigned int *net, unsigned int *mask, char *errbuf )
 {
     return pcap_lookupnet( device, net, mask, errbuf );
@@ -193,11 +228,46 @@ static int CDECL wrap_sendpacket( void *handle, const unsigned char *buf, int si
     return pcap_sendpacket( handle, buf, size );
 }
 
+static int CDECL wrap_set_buffer_size( void *handle, int size )
+{
+    return pcap_set_buffer_size( handle, size );
+}
+
 static int CDECL wrap_set_datalink( void *handle, int link )
 {
     return pcap_set_datalink( handle, link );
 }
 
+static int CDECL wrap_set_promisc( void *handle, int enable )
+{
+    return pcap_set_promisc( handle, enable );
+}
+
+static int CDECL wrap_set_rfmon( void *handle, int enable )
+{
+    return pcap_set_rfmon( handle, enable );
+}
+
+static int CDECL wrap_set_snaplen( void *handle, int len )
+{
+    return pcap_set_snaplen( handle, len );
+}
+
+static int CDECL wrap_set_timeout( void *handle, int timeout )
+{
+    return pcap_set_timeout( handle, timeout );
+}
+
+static int CDECL wrap_set_tstamp_precision( void *handle, int precision )
+{
+    return pcap_set_tstamp_precision( handle, precision );
+}
+
+static int CDECL wrap_set_tstamp_type( void *handle, int type )
+{
+    return pcap_set_tstamp_type( handle, type );
+}
+
 static int CDECL wrap_setfilter( void *handle, void *program )
 {
     return pcap_setfilter( handle, program );
@@ -218,11 +288,34 @@ static int CDECL wrap_stats( void *handle, void *stats )
     return pcap_stats( handle, stats );
 }
 
+static const char * CDECL wrap_statustostr( int status )
+{
+    return pcap_statustostr( status );
+}
+
+static int CDECL wrap_tstamp_type_name_to_val( const char *name )
+{
+    return pcap_tstamp_type_name_to_val( name );
+}
+
+static const char * CDECL wrap_tstamp_type_val_to_description( int val )
+{
+    return pcap_tstamp_type_val_to_description( val );
+}
+
+static const char * CDECL wrap_tstamp_type_val_to_name( int val )
+{
+    return pcap_tstamp_type_val_to_name( val );
+}
+
 static const struct pcap_funcs funcs =
 {
+    wrap_activate,
     wrap_breakloop,
+    wrap_can_set_rfmon,
     wrap_close,
     wrap_compile,
+    wrap_create,
     wrap_datalink,
     wrap_datalink_name_to_val,
     wrap_datalink_val_to_description,
@@ -231,12 +324,16 @@ static const struct pcap_funcs funcs =
     wrap_dump,
     wrap_dump_open,
     wrap_findalldevs,
+    wrap_free_datalinks,
+    wrap_free_tstamp_types,
     wrap_freealldevs,
     wrap_freecode,
+    wrap_get_tstamp_precision,
     wrap_geterr,
     wrap_getnonblock,
     wrap_lib_version,
     wrap_list_datalinks,
+    wrap_list_tstamp_types,
     wrap_lookupnet,
     wrap_loop,
     wrap_major_version,
@@ -245,11 +342,22 @@ static const struct pcap_funcs funcs =
     wrap_next_ex,
     wrap_open_live,
     wrap_sendpacket,
+    wrap_set_buffer_size,
     wrap_set_datalink,
+    wrap_set_promisc,
+    wrap_set_rfmon,
+    wrap_set_snaplen,
+    wrap_set_timeout,
+    wrap_set_tstamp_precision,
+    wrap_set_tstamp_type,
     wrap_setfilter,
     wrap_setnonblock,
     wrap_snapshot,
     wrap_stats,
+    wrap_statustostr,
+    wrap_tstamp_type_name_to_val,
+    wrap_tstamp_type_val_to_description,
+    wrap_tstamp_type_val_to_name,
 };
 
 NTSTATUS CDECL __wine_init_unix_lib( HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out )
diff --git a/dlls/wpcap/unixlib.h b/dlls/wpcap/unixlib.h
index ac51eba3c15..71ee298e689 100644
--- a/dlls/wpcap/unixlib.h
+++ b/dlls/wpcap/unixlib.h
@@ -31,9 +31,12 @@ struct handler_callback
 
 struct pcap_funcs
 {
+    int (CDECL *activate)( void * );
     void (CDECL *breakloop)( void * );
+    int (CDECL *can_set_rfmon)( void * );
     void (CDECL *close)( void * );
     int (CDECL *compile)( void *, void *, const char *, int, unsigned int );
+    void * (CDECL *create)( const char *, char * );
     int (CDECL *datalink)( void * );
     int (CDECL *datalink_name_to_val)( const char * );
     const char * (CDECL *datalink_val_to_description)( int );
@@ -43,12 +46,16 @@ struct pcap_funcs
     void (CDECL *dump)( unsigned char *, const void *, const unsigned char * );
     void * (CDECL *dump_open)( void *, const char * );
     int (CDECL *findalldevs)( struct pcap_if_hdr **, char * );
+    void (CDECL *free_datalinks)( int * );
+    void (CDECL *free_tstamp_types)( int * );
     void (CDECL *freealldevs)( struct pcap_if_hdr * );
     void (CDECL *freecode)( void * );
+    int (CDECL *get_tstamp_precision)( void * );
     char * (CDECL *geterr)( void * );
     int (CDECL *getnonblock)( void *, char * );
     const char * (CDECL *lib_version)( void );
     int (CDECL *list_datalinks)( void *, int ** );
+    int (CDECL *list_tstamp_types)( void *, int ** );
     int (CDECL *lookupnet)( const char *, unsigned int *, unsigned int *, char * );
     int (CDECL *loop)( void *, int, void (CALLBACK *)(unsigned char *, const void *, const unsigned char *),
                        unsigned char * );
@@ -58,11 +65,22 @@ struct pcap_funcs
     int (CDECL *next_ex)( void *, void **, const unsigned char ** );
     void * (CDECL *open_live)( const char *, int, int, int, char * );
     int (CDECL *sendpacket)( void *, const unsigned char *, int );
+    int (CDECL *set_buffer_size)( void *, int );
     int (CDECL *set_datalink)( void *, int );
+    int (CDECL *set_promisc)( void *, int );
+    int (CDECL *set_rfmon)( void *, int );
+    int (CDECL *set_snaplen)( void *, int );
+    int (CDECL *set_timeout)( void *, int );
+    int (CDECL *set_tstamp_precision)( void *, int );
+    int (CDECL *set_tstamp_type)( void *, int );
     int (CDECL *setfilter)( void *, void * );
     int (CDECL *setnonblock)( void *, int, char * );
     int (CDECL *snapshot)( void * );
     int (CDECL *stats)( void *, void * );
+    const char * (CDECL *statustostr)( int );
+    int (CDECL *tstamp_type_name_to_val)( const char * );
+    const char * (CDECL *tstamp_type_val_to_description)( int );
+    const char * (CDECL *tstamp_type_val_to_name)( int );
 };
 
 struct pcap_callbacks
diff --git a/dlls/wpcap/wpcap.c b/dlls/wpcap/wpcap.c
index ea9146d7d0d..cb064512e08 100644
--- a/dlls/wpcap/wpcap.c
+++ b/dlls/wpcap/wpcap.c
@@ -50,12 +50,24 @@ static inline WCHAR *heap_strdupAtoW(const char *str)
     return ret;
 }
 
+int CDECL wine_pcap_activate( void *handle )
+{
+    TRACE( "%p\n", handle );
+    return pcap_funcs->activate( handle );
+}
+
 void CDECL wine_pcap_breakloop( void *handle )
 {
     TRACE( "%p\n", handle );
     pcap_funcs->breakloop( handle );
 }
 
+int CDECL wine_pcap_can_set_rfmon( void *handle )
+{
+    TRACE( "%p\n", handle );
+    return pcap_funcs->can_set_rfmon( handle );
+}
+
 void CDECL wine_pcap_close( void *handle )
 {
     TRACE( "%p\n", handle );
@@ -68,6 +80,12 @@ int CDECL wine_pcap_compile( void *handle, void *program, const char *buf, int o
     return pcap_funcs->compile( handle, program, buf, optimize, mask );
 }
 
+void * CDECL wine_pcap_create( const char *src, char *errbuf )
+{
+    TRACE( "%s, %p\n", src, errbuf );
+    return pcap_funcs->create( src, errbuf );
+}
+
 int CDECL wine_pcap_datalink( void *handle )
 {
     TRACE( "%p\n", handle );
@@ -138,6 +156,18 @@ int CDECL wine_pcap_findalldevs_ex( char *source, void *auth, struct pcap_if_hdr
     return pcap_funcs->findalldevs( devs, errbuf );
 }
 
+void CDECL wine_pcap_free_datalinks( int *links )
+{
+    TRACE( "%p\n", links );
+    pcap_funcs->free_datalinks( links );
+}
+
+void CDECL wine_pcap_free_tstamp_types( int *types )
+{
+    TRACE( "%p\n", types );
+    pcap_funcs->free_tstamp_types( types );
+}
+
 void CDECL wine_pcap_freealldevs( struct pcap_if_hdr *devs )
 {
     TRACE( "%p\n", devs );
@@ -156,6 +186,12 @@ void * CDECL wine_pcap_get_airpcap_handle( void *handle )
     return NULL;
 }
 
+int CDECL wine_pcap_get_tstamp_precision( void *handle )
+{
+    TRACE( "%p\n", handle );
+    return pcap_funcs->get_tstamp_precision( handle );
+}
+
 char * CDECL wine_pcap_geterr( void *handle )
 {
     TRACE( "%p\n", handle );
@@ -190,6 +226,12 @@ int CDECL wine_pcap_list_datalinks( void *handle, int **buf )
     return pcap_funcs->list_datalinks( handle, buf );
 }
 
+int CDECL wine_pcap_list_tstamp_types( void *handle, int **types )
+{
+    TRACE( "%p, %p\n", handle, types );
+    return pcap_funcs->list_tstamp_types( handle, types );
+}
+
 char * CDECL wine_pcap_lookupdev( char *errbuf )
 {
     static char *ret;
@@ -304,12 +346,54 @@ int CDECL wine_pcap_sendpacket( void *handle, const unsigned char *buf, int size
     return pcap_funcs->sendpacket( handle, buf, size );
 }
 
+int CDECL wine_pcap_set_buffer_size( void *handle, int size )
+{
+    TRACE( "%p, %d\n", handle, size );
+    return pcap_funcs->set_buffer_size( handle, size );
+}
+
 int CDECL wine_pcap_set_datalink( void *handle, int link )
 {
     TRACE( "%p, %d\n", handle, link );
     return pcap_funcs->set_datalink( handle, link );
 }
 
+int CDECL wine_pcap_set_promisc( void *handle, int enable )
+{
+    TRACE( "%p, %d\n", handle, enable );
+    return pcap_funcs->set_promisc( handle, enable );
+}
+
+int CDECL wine_pcap_set_rfmon( void *handle, int enable )
+{
+    TRACE( "%p, %d\n", handle, enable );
+    return pcap_funcs->set_rfmon( handle, enable );
+}
+
+int CDECL wine_pcap_set_snaplen( void *handle, int len )
+{
+    TRACE( "%p, %d\n", handle, len );
+    return pcap_funcs->set_snaplen( handle, len );
+}
+
+int CDECL wine_pcap_set_timeout( void *handle, int timeout )
+{
+    TRACE( "%p, %d\n", handle, timeout );
+    return pcap_funcs->set_timeout( handle, timeout );
+}
+
+int CDECL wine_pcap_set_tstamp_precision( void *handle, int precision )
+{
+    TRACE( "%p, %d\n", handle, precision );
+    return pcap_funcs->set_tstamp_precision( handle, precision );
+}
+
+int CDECL wine_pcap_set_tstamp_type( void *handle, int type )
+{
+    TRACE( "%p, %d\n", handle, type );
+    return pcap_funcs->set_tstamp_type( handle, type );
+}
+
 int CDECL wine_pcap_setbuff( void *handle, int size )
 {
     FIXME( "%p, %d\n", handle, size );
@@ -340,6 +424,30 @@ int CDECL wine_pcap_stats( void *handle, void *stats )
     return pcap_funcs->stats( handle, stats );
 }
 
+const char * CDECL wine_pcap_statustostr( int status )
+{
+    TRACE( "%d\n", status );
+    return pcap_funcs->statustostr( status );
+}
+
+int CDECL wine_pcap_tstamp_type_name_to_val( const char *name )
+{
+    TRACE( "%s\n", debugstr_a(name) );
+    return pcap_funcs->tstamp_type_name_to_val( name );
+}
+
+const char * CDECL wine_pcap_tstamp_type_val_to_description( int val )
+{
+    TRACE( "%d\n", val );
+    return pcap_funcs->tstamp_type_val_to_description( val );
+}
+
+const char * CDECL wine_pcap_tstamp_type_val_to_name( int val )
+{
+    TRACE( "%d\n", val );
+    return pcap_funcs->tstamp_type_val_to_name( val );
+}
+
 int CDECL wsockinit( void )
 {
     WSADATA wsadata;
diff --git a/dlls/wpcap/wpcap.spec b/dlls/wpcap/wpcap.spec
index fc11a798871..bfa07aad57c 100644
--- a/dlls/wpcap/wpcap.spec
+++ b/dlls/wpcap/wpcap.spec
@@ -6,10 +6,13 @@
 @ stub eproto_db
 @ stub getservent
 @ stub install_bpf_program
+@ cdecl pcap_activate(ptr) wine_pcap_activate
 @ cdecl pcap_breakloop(ptr) wine_pcap_breakloop
+@ cdecl pcap_can_set_rfmon(ptr) wine_pcap_can_set_rfmon
 @ cdecl pcap_close(ptr) wine_pcap_close
 @ cdecl pcap_compile(ptr ptr str long long) wine_pcap_compile
 @ stub pcap_compile_nopcap
+@ cdecl pcap_create(str ptr) wine_pcap_create
 @ stub pcap_createsrcstr
 @ cdecl pcap_datalink(ptr) wine_pcap_datalink
 @ cdecl pcap_datalink_name_to_val(str) wine_pcap_datalink_name_to_val
@@ -26,15 +29,19 @@
 @ stub pcap_fileno
 @ cdecl pcap_findalldevs(ptr ptr) wine_pcap_findalldevs
 @ cdecl pcap_findalldevs_ex(ptr ptr ptr ptr) wine_pcap_findalldevs_ex
+@ cdecl pcap_free_datalinks(ptr) wine_pcap_free_datalinks
+@ cdecl pcap_free_tstamp_types(ptr) wine_pcap_free_tstamp_types
 @ cdecl pcap_freealldevs(ptr) wine_pcap_freealldevs
 @ cdecl pcap_freecode(ptr) wine_pcap_freecode
 @ cdecl pcap_get_airpcap_handle(ptr) wine_pcap_get_airpcap_handle
+@ cdecl pcap_get_tstamp_precision(ptr) wine_pcap_get_tstamp_precision
 @ cdecl pcap_geterr(ptr) wine_pcap_geterr
 @ stub pcap_getevent
 @ cdecl pcap_getnonblock(ptr ptr) wine_pcap_getnonblock
 @ stub pcap_is_swapped
 @ cdecl pcap_lib_version() wine_pcap_lib_version
 @ cdecl pcap_list_datalinks(ptr ptr) wine_pcap_list_datalinks
+@ cdecl pcap_list_tstamp_types(ptr ptr) wine_pcap_list_tstamp_types
 @ stub pcap_live_dump
 @ stub pcap_live_dump_ended
 @ cdecl pcap_lookupdev(ptr) wine_pcap_lookupdev
@@ -63,7 +70,14 @@
 @ stub pcap_sendqueue_destroy
 @ stub pcap_sendqueue_queue
 @ stub pcap_sendqueue_transmit
+@ cdecl pcap_set_buffer_size(ptr long) wine_pcap_set_buffer_size
 @ cdecl pcap_set_datalink(ptr long) wine_pcap_set_datalink
+@ cdecl pcap_set_promisc(ptr long) wine_pcap_set_promisc
+@ cdecl pcap_set_rfmon(ptr long) wine_pcap_set_rfmon
+@ cdecl pcap_set_snaplen(ptr long) wine_pcap_set_snaplen
+@ cdecl pcap_set_timeout(ptr long) wine_pcap_set_timeout
+@ cdecl pcap_set_tstamp_precision(ptr long) wine_pcap_set_tstamp_precision
+@ cdecl pcap_set_tstamp_type(ptr long) wine_pcap_set_tstamp_type
 @ cdecl pcap_setbuff(ptr long) wine_pcap_setbuff
 @ cdecl pcap_setfilter(ptr ptr) wine_pcap_setfilter
 @ stub pcap_setmintocopy
@@ -74,5 +88,9 @@
 @ cdecl pcap_snapshot(ptr) wine_pcap_snapshot
 @ cdecl pcap_stats(ptr ptr) wine_pcap_stats
 @ stub pcap_stats_ex
+@ cdecl pcap_statustostr(long) wine_pcap_statustostr
 @ cdecl pcap_strerror(long) msvcrt.strerror
+@ cdecl pcap_tstamp_type_name_to_val(str) wine_pcap_tstamp_type_name_to_val
+@ cdecl pcap_tstamp_type_val_to_description(long) wine_pcap_tstamp_type_val_to_description
+@ cdecl pcap_tstamp_type_val_to_name(long) wine_pcap_tstamp_type_val_to_name
 @ cdecl wsockinit()
-- 
2.30.2




More information about the wine-devel mailing list