mirror of
https://github.com/digarok/gsplus.git
synced 2024-06-14 18:29:40 +00:00
cleanup to build under msys2/mingw64
This commit is contained in:
parent
ecf6c58661
commit
4923efb5fc
|
@ -52,6 +52,8 @@ set(DRIVER "SDL" CACHE STRING "Driver (SDL, X11, WIN32, FB, or HEADLESS")
|
||||||
option(DEBUGGER "Enable the debugger" ON)
|
option(DEBUGGER "Enable the debugger" ON)
|
||||||
option(HOST_FST "Enable host fst support" ON)
|
option(HOST_FST "Enable host fst support" ON)
|
||||||
option(TOGGLE_STATUS "Enable F10 Toggle Status support (win32/x11)" OFF)
|
option(TOGGLE_STATUS "Enable F10 Toggle Status support (win32/x11)" OFF)
|
||||||
|
option(WITH_RAWNET "Enable Uthernet emulation" OFF)
|
||||||
|
option(WITH_ATBRIDGE "Enable AT Bridge" OFF)
|
||||||
|
|
||||||
|
|
||||||
set(generated_headers 8inst_c.h 16inst_c.h 8inst_s.h 16inst_s.h size_c.h size_s.h 8size_s.h 16size_s.h)
|
set(generated_headers 8inst_c.h 16inst_c.h 8inst_s.h 16inst_s.h size_c.h size_s.h 8size_s.h 16size_s.h)
|
||||||
|
@ -82,7 +84,8 @@ if(CYGWIN OR MSYS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
add_definitions(-D__USE_W32_SOCKETS -D_WINSOCK2API_)
|
# WTF?
|
||||||
|
#add_definitions(-D__USE_W32_SOCKETS -D_WINSOCK2API_)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
@ -151,13 +154,19 @@ SET_SOURCE_FILES_PROPERTIES(
|
||||||
MACOSX_PACKAGE_LOCATION Resources
|
MACOSX_PACKAGE_LOCATION Resources
|
||||||
)
|
)
|
||||||
|
|
||||||
# target_link_libraries(GSplus atbridge)
|
if (WITH_RAWNET)
|
||||||
target_link_libraries(GSplus rawnet)
|
target_link_libraries(GSplus rawnet)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (WITH_ATBRIDGE)
|
||||||
|
target_link_libraries(GSplus atbridge)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (DRIVER MATCHES "WIN32")
|
if (DRIVER MATCHES "WIN32")
|
||||||
target_link_libraries(GSplus comdlg32 Shlwapi IPHlpApi
|
target_link_libraries(GSplus comdlg32 Shlwapi IPHlpApi
|
||||||
winmm gdi32 dsound comctl32 ws2_32 shell32
|
winmm gdi32 dsound comctl32 ws2_32 shell32
|
||||||
)
|
)
|
||||||
|
target_compile_definitions(GSplus PRIVATE WIN_SOUND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (DRIVER MATCHES "SDL")
|
if (DRIVER MATCHES "SDL")
|
||||||
|
@ -170,9 +179,15 @@ if (APPLE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (TOGGLE_STATUS)
|
if (TOGGLE_STATUS)
|
||||||
target_compile_options(GSplus PUBLIC -DTOGGLE_STATUS)
|
target_compile_definitions(GSplus PUBLIC TOGGLE_STATUS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (DEBUGGER)
|
||||||
|
target_compile_definitions(GSplus PRIVATE GSPLUS_DEBUGGER)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if (APPLE AND DRIVER MATCHES "SDL")
|
#if (APPLE AND DRIVER MATCHES "SDL")
|
||||||
# target_compile_options(GSplus PRIVATE -F${CMAKE_CURRENT_SOURCE_DIR} )
|
# target_compile_options(GSplus PRIVATE -F${CMAKE_CURRENT_SOURCE_DIR} )
|
||||||
# target_link_libraries(GSplus -F${CMAKE_CURRENT_SOURCE_DIR} "-framework SDL2" -Wl,-rpath,@executable_path/../Frameworks)
|
# target_link_libraries(GSplus -F${CMAKE_CURRENT_SOURCE_DIR} "-framework SDL2" -Wl,-rpath,@executable_path/../Frameworks)
|
||||||
|
|
|
@ -3,3 +3,8 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
add_library(atbridge aarp.c atbridge.c elap.c llap.c pcap_delay.c port.c)
|
add_library(atbridge aarp.c atbridge.c elap.c llap.c pcap_delay.c port.c)
|
||||||
|
|
||||||
target_compile_definitions(atbridge PUBLIC HAVE_ATBRIDGE)
|
target_compile_definitions(atbridge PUBLIC HAVE_ATBRIDGE)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
target_include_directories(atbridge PRIVATE ../rawnet/include)
|
||||||
|
target_link_libraries(atbridge ws2_32) # winsock2
|
||||||
|
endif()
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include "aarp.h"
|
#include "aarp.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <winsock.h>
|
#include <winsock2.h>
|
||||||
#elif __linux__
|
#elif __linux__
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "aarp.h"
|
#include "aarp.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <winsock.h>
|
#include <winsock2.h>
|
||||||
#elif __linux__
|
#elif __linux__
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -16,12 +16,12 @@
|
||||||
#include "elap_defs.h"
|
#include "elap_defs.h"
|
||||||
#include "pcap_delay.h"
|
#include "pcap_delay.h"
|
||||||
|
|
||||||
#ifdef __CYGWIN__
|
// #ifdef __CYGWIN__
|
||||||
#include <Windows.h>
|
// #include <Windows.h>
|
||||||
#include <NspAPI.h>
|
// #include <NspAPI.h>
|
||||||
#endif
|
// #endif
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <winsock.h>
|
#include <winsock2.h>
|
||||||
#include <IPHlpApi.h>
|
#include <IPHlpApi.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
|
|
@ -15,7 +15,7 @@ Feel free to extend the wrapper.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include "../arch/win32/pcap.h"
|
#include <pcap.h>
|
||||||
#elif __linux__
|
#elif __linux__
|
||||||
#include <pcap.h>
|
#include <pcap.h>
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
|
|
|
@ -14,6 +14,8 @@ target_compile_definitions(rawnet PUBLIC HAVE_RAWNET)
|
||||||
target_compile_definitions(rawnet PRIVATE CS8900_DEBUG RAWNET_DEBUG_FRAMES)
|
target_compile_definitions(rawnet PRIVATE CS8900_DEBUG RAWNET_DEBUG_FRAMES)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
|
target_include_directories(rawnet PRIVATE include)
|
||||||
|
target_link_libraries(rawnet ws2_32) # winsock2
|
||||||
elseif(APPLE)
|
elseif(APPLE)
|
||||||
#target_link_libraries(rawnet PRIVATE pcap)
|
#target_link_libraries(rawnet PRIVATE pcap)
|
||||||
target_link_libraries(rawnet PRIVATE "-framework vmnet")
|
target_link_libraries(rawnet PRIVATE "-framework vmnet")
|
||||||
|
|
|
@ -411,10 +411,10 @@ int rawnet_arch_read(void *buffer, int nbyte) {
|
||||||
int rawnet_arch_write(const void *buffer, int nbyte) {
|
int rawnet_arch_write(const void *buffer, int nbyte) {
|
||||||
|
|
||||||
#ifdef RAWNET_DEBUG_PKTDUMP
|
#ifdef RAWNET_DEBUG_PKTDUMP
|
||||||
debug_output("Transmit frame: ", txframe, txlength);
|
debug_output("Transmit frame: ", buffer, nbyte);
|
||||||
#endif /* #ifdef RAWNET_DEBUG_PKTDUMP */
|
#endif /* #ifdef RAWNET_DEBUG_PKTDUMP */
|
||||||
|
|
||||||
if (pcap_sendpacket(rawnet_pcap_fp, txframe, txlength) < 0) {
|
if (pcap_sendpacket(rawnet_pcap_fp, buffer, nbyte) < 0) {
|
||||||
log_message(rawnet_arch_log, "WARNING! Could not send packet!");
|
log_message(rawnet_arch_log, "WARNING! Could not send packet!");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,17 @@
|
||||||
|
|
||||||
/* #define WPCAP */
|
/* #define WPCAP */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <pcap.h>
|
#include <pcap.h>
|
||||||
|
/* prevent bpf redeclaration in packet32 */
|
||||||
|
#ifndef BPF_MAJOR_VERSION
|
||||||
|
#define BPF_MAJOR_VERSION
|
||||||
|
#endif
|
||||||
|
#include <Packet32.h>
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <Ntddndis.h>
|
||||||
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -45,7 +55,7 @@
|
||||||
#include "rawnetsupp.h"
|
#include "rawnetsupp.h"
|
||||||
|
|
||||||
typedef pcap_t *(*pcap_open_live_t)(const char *, int, int, int, char *);
|
typedef pcap_t *(*pcap_open_live_t)(const char *, int, int, int, char *);
|
||||||
typedef void *(*pcap_close_t)(pcap_if_t *);
|
typedef void *(*pcap_close_t)(pcap_t *);
|
||||||
typedef int (*pcap_dispatch_t)(pcap_t *, int, pcap_handler, u_char *);
|
typedef int (*pcap_dispatch_t)(pcap_t *, int, pcap_handler, u_char *);
|
||||||
typedef int (*pcap_setnonblock_t)(pcap_t *, int, char *);
|
typedef int (*pcap_setnonblock_t)(pcap_t *, int, char *);
|
||||||
typedef int (*pcap_datalink_t)(pcap_t *);
|
typedef int (*pcap_datalink_t)(pcap_t *);
|
||||||
|
@ -54,6 +64,13 @@ typedef void (*pcap_freealldevs_t)(pcap_if_t *);
|
||||||
typedef int (*pcap_sendpacket_t)(pcap_t *p, u_char *buf, int size);
|
typedef int (*pcap_sendpacket_t)(pcap_t *p, u_char *buf, int size);
|
||||||
typedef char *(*pcap_lookupdev_t)(char *);
|
typedef char *(*pcap_lookupdev_t)(char *);
|
||||||
|
|
||||||
|
|
||||||
|
typedef VOID (*PacketCloseAdapter_t)(LPADAPTER lpAdapter);
|
||||||
|
typedef LPADAPTER (*PacketOpenAdapter_t)(PCHAR AdapterName);
|
||||||
|
typedef BOOLEAN (*PacketSendPacket_t)(LPADAPTER AdapterObject, LPPACKET pPacket, BOOLEAN Sync);
|
||||||
|
typedef BOOLEAN (*PacketRequest_t)(LPADAPTER AdapterObject, BOOLEAN Set, PPACKET_OID_DATA OidData);
|
||||||
|
|
||||||
|
|
||||||
/** #define RAWNET_DEBUG_ARCH 1 **/
|
/** #define RAWNET_DEBUG_ARCH 1 **/
|
||||||
/** #define RAWNET_DEBUG_PKTDUMP 1 **/
|
/** #define RAWNET_DEBUG_PKTDUMP 1 **/
|
||||||
|
|
||||||
|
@ -71,7 +88,13 @@ static pcap_sendpacket_t p_pcap_sendpacket;
|
||||||
static pcap_datalink_t p_pcap_datalink;
|
static pcap_datalink_t p_pcap_datalink;
|
||||||
static pcap_lookupdev_t p_pcap_lookupdev;
|
static pcap_lookupdev_t p_pcap_lookupdev;
|
||||||
|
|
||||||
|
static PacketCloseAdapter_t p_PacketCloseAdapter;
|
||||||
|
static PacketOpenAdapter_t p_PacketOpenAdapter;
|
||||||
|
static PacketSendPacket_t p_PacketSendPacket;
|
||||||
|
static PacketRequest_t p_PacketRequest;
|
||||||
|
|
||||||
static HINSTANCE pcap_library = NULL;
|
static HINSTANCE pcap_library = NULL;
|
||||||
|
static HINSTANCE packet_library = NULL;
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
/* variables needed */
|
/* variables needed */
|
||||||
|
@ -81,6 +104,7 @@ static HINSTANCE pcap_library = NULL;
|
||||||
static pcap_if_t *EthernetPcapNextDev = NULL;
|
static pcap_if_t *EthernetPcapNextDev = NULL;
|
||||||
static pcap_if_t *EthernetPcapAlldevs = NULL;
|
static pcap_if_t *EthernetPcapAlldevs = NULL;
|
||||||
static pcap_t *EthernetPcapFP = NULL;
|
static pcap_t *EthernetPcapFP = NULL;
|
||||||
|
static char *rawnet_device_name = NULL;
|
||||||
|
|
||||||
static char EthernetPcapErrbuf[PCAP_ERRBUF_SIZE];
|
static char EthernetPcapErrbuf[PCAP_ERRBUF_SIZE];
|
||||||
|
|
||||||
|
@ -118,6 +142,9 @@ static void EthernetPcapFreeLibrary(void)
|
||||||
}
|
}
|
||||||
pcap_library = NULL;
|
pcap_library = NULL;
|
||||||
|
|
||||||
|
if (packet_library) FreeLibrary(packet_library);
|
||||||
|
packet_library = NULL;
|
||||||
|
|
||||||
p_pcap_open_live = NULL;
|
p_pcap_open_live = NULL;
|
||||||
p_pcap_close = NULL;
|
p_pcap_close = NULL;
|
||||||
p_pcap_dispatch = NULL;
|
p_pcap_dispatch = NULL;
|
||||||
|
@ -127,12 +154,17 @@ static void EthernetPcapFreeLibrary(void)
|
||||||
p_pcap_sendpacket = NULL;
|
p_pcap_sendpacket = NULL;
|
||||||
p_pcap_datalink = NULL;
|
p_pcap_datalink = NULL;
|
||||||
p_pcap_lookupdev = NULL;
|
p_pcap_lookupdev = NULL;
|
||||||
|
|
||||||
|
p_PacketOpenAdapter = NULL;
|
||||||
|
p_PacketCloseAdapter = NULL;
|
||||||
|
p_PacketSendPacket = NULL;
|
||||||
|
p_PacketRequest = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* since I don't like typing too much... */
|
/* since I don't like typing too much... */
|
||||||
#define GET_PROC_ADDRESS_AND_TEST( _name_ ) \
|
#define GET_PROC_ADDRESS_AND_TEST( _name_ ) \
|
||||||
p_##_name_ = (_name_##_t) GetProcAddress(pcap_library, #_name_); \
|
p_##_name_ = (_name_##_t) GetProcAddress(x, #_name_); \
|
||||||
if (!p_##_name_ ) { \
|
if (!p_##_name_ ) { \
|
||||||
log_message(rawnet_arch_log, "GetProcAddress " #_name_ " failed!"); \
|
log_message(rawnet_arch_log, "GetProcAddress " #_name_ " failed!"); \
|
||||||
EthernetPcapFreeLibrary(); \
|
EthernetPcapFreeLibrary(); \
|
||||||
|
@ -146,6 +178,7 @@ static BOOL EthernetPcapLoadLibrary(void)
|
||||||
* winpcap is c:\System32\wpcap.dll
|
* winpcap is c:\System32\wpcap.dll
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
HINSTANCE x = NULL;
|
||||||
if (!pcap_library) {
|
if (!pcap_library) {
|
||||||
/* This inserts c:\System32\Npcap\ into the search path. */
|
/* This inserts c:\System32\Npcap\ into the search path. */
|
||||||
char buffer[512];
|
char buffer[512];
|
||||||
|
@ -163,6 +196,7 @@ static BOOL EthernetPcapLoadLibrary(void)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x = pcap_library;
|
||||||
GET_PROC_ADDRESS_AND_TEST(pcap_open_live);
|
GET_PROC_ADDRESS_AND_TEST(pcap_open_live);
|
||||||
GET_PROC_ADDRESS_AND_TEST(pcap_close);
|
GET_PROC_ADDRESS_AND_TEST(pcap_close);
|
||||||
GET_PROC_ADDRESS_AND_TEST(pcap_dispatch);
|
GET_PROC_ADDRESS_AND_TEST(pcap_dispatch);
|
||||||
|
@ -174,6 +208,21 @@ static BOOL EthernetPcapLoadLibrary(void)
|
||||||
GET_PROC_ADDRESS_AND_TEST(pcap_lookupdev);
|
GET_PROC_ADDRESS_AND_TEST(pcap_lookupdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!packet_library) {
|
||||||
|
packet_library = LoadLibrary(TEXT("Packet.dll"));
|
||||||
|
|
||||||
|
if (!packet_library) {
|
||||||
|
log_message(rawnet_arch_log, "LoadLibrary Packet.dll failed!");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
x = packet_library;
|
||||||
|
GET_PROC_ADDRESS_AND_TEST(PacketOpenAdapter);
|
||||||
|
GET_PROC_ADDRESS_AND_TEST(PacketCloseAdapter);
|
||||||
|
GET_PROC_ADDRESS_AND_TEST(PacketSendPacket);
|
||||||
|
GET_PROC_ADDRESS_AND_TEST(PacketRequest);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,6 +279,10 @@ int rawnet_arch_enumadapter(char **ppname, char **ppdescription)
|
||||||
*ppname = lib_stralloc(EthernetPcapNextDev->name);
|
*ppname = lib_stralloc(EthernetPcapNextDev->name);
|
||||||
*ppdescription = lib_stralloc(EthernetPcapNextDev->description);
|
*ppdescription = lib_stralloc(EthernetPcapNextDev->description);
|
||||||
|
|
||||||
|
printf("%s: %s\n",
|
||||||
|
EthernetPcapNextDev->name ? EthernetPcapNextDev->name : "",
|
||||||
|
EthernetPcapNextDev->description ? EthernetPcapNextDev->description : ""
|
||||||
|
);
|
||||||
EthernetPcapNextDev = EthernetPcapNextDev->next;
|
EthernetPcapNextDev = EthernetPcapNextDev->next;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -284,19 +337,20 @@ static BOOL EthernetPcapOpenAdapter(const char *interface_name)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*p_pcap_setnonblock)(EthernetPcapFP, 1, EthernetPcapErrbuf) < 0) {
|
|
||||||
log_message(rawnet_arch_log, "WARNING: Setting PCAP to non-blocking failed: '%s'", EthernetPcapErrbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check the link layer. We support only Ethernet for simplicity. */
|
/* Check the link layer. We support only Ethernet for simplicity. */
|
||||||
if ((*p_pcap_datalink)(EthernetPcapFP) != DLT_EN10MB) {
|
if ((*p_pcap_datalink)(EthernetPcapFP) != DLT_EN10MB) {
|
||||||
log_message(rawnet_arch_log, "ERROR: Ethernet works only on Ethernet networks.");
|
log_message(rawnet_arch_log, "ERROR: Ethernet works only on Ethernet networks.");
|
||||||
rawnet_enumadapter_close();
|
rawnet_enumadapter_close();
|
||||||
*(p_pcap_close(EthernetPcapFP));
|
(*p_pcap_close)(EthernetPcapFP);
|
||||||
EthernetPcapFP = NULL;
|
EthernetPcapFP = NULL;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((*p_pcap_setnonblock)(EthernetPcapFP, 1, EthernetPcapErrbuf) < 0) {
|
||||||
|
log_message(rawnet_arch_log, "WARNING: Setting PCAP to non-blocking failed: '%s'", EthernetPcapErrbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
rawnet_device_name = strdup(EthernetPcapDevice->name);
|
||||||
rawnet_enumadapter_close();
|
rawnet_enumadapter_close();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -463,10 +517,10 @@ int rawnet_arch_read(void *buffer, int nbyte) {
|
||||||
int rawnet_arch_write(const void *buffer, int nbyte) {
|
int rawnet_arch_write(const void *buffer, int nbyte) {
|
||||||
|
|
||||||
#ifdef RAWNET_DEBUG_PKTDUMP
|
#ifdef RAWNET_DEBUG_PKTDUMP
|
||||||
debug_output("Transmit frame: ", txframe, txlength);
|
debug_output("Transmit frame: ", buffer, nbyte);
|
||||||
#endif /* #ifdef RAWNET_DEBUG_PKTDUMP */
|
#endif /* #ifdef RAWNET_DEBUG_PKTDUMP */
|
||||||
|
|
||||||
if ((*p_pcap_sendpacket)(EthernetPcapFP, txframe, txlength) == -1) {
|
if ((*p_pcap_sendpacket)(EthernetPcapFP, (u_char *)buffer, nbyte) == -1) {
|
||||||
log_message(rawnet_arch_log, "WARNING! Could not send packet!");
|
log_message(rawnet_arch_log, "WARNING! Could not send packet!");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -474,88 +528,6 @@ int rawnet_arch_write(const void *buffer, int nbyte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
rawnet_arch_receive()
|
|
||||||
|
|
||||||
This function checks if there was a frame received.
|
|
||||||
If so, it returns 1, else 0.
|
|
||||||
|
|
||||||
If there was no frame, none of the parameters is changed!
|
|
||||||
|
|
||||||
If there was a frame, the following actions are done:
|
|
||||||
|
|
||||||
- at maximum *plen byte are transferred into the buffer given by pbuffer
|
|
||||||
- *plen gets the length of the received frame, EVEN if this is more
|
|
||||||
than has been copied to pbuffer!
|
|
||||||
- if the dest. address was accepted by the hash filter, *phashed is set, else
|
|
||||||
cleared.
|
|
||||||
- if the dest. address was accepted by the hash filter, *phash_index is
|
|
||||||
set to the number of the rule leading to the acceptance
|
|
||||||
- if the receive was ok (good CRC and valid length), *prx_ok is set,
|
|
||||||
else cleared.
|
|
||||||
- if the dest. address was accepted because it's exactly our MAC address
|
|
||||||
(set by rawnet_arch_set_mac()), *pcorrect_mac is set, else cleared.
|
|
||||||
- if the dest. address was accepted since it was a broadcast address,
|
|
||||||
*pbroadcast is set, else cleared.
|
|
||||||
- if the received frame had a crc error, *pcrc_error is set, else cleared
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* uint8_t *pbuffer - where to store a frame */
|
|
||||||
/* int *plen - IN: maximum length of frame to copy;
|
|
||||||
OUT: length of received frame
|
|
||||||
OUT can be bigger than IN if received frame was
|
|
||||||
longer than supplied buffer */
|
|
||||||
/* int *phashed - set if the dest. address is accepted by the hash filter */
|
|
||||||
/* int *phash_index - hash table index if hashed == TRUE */
|
|
||||||
/* int *prx_ok - set if good CRC and valid length */
|
|
||||||
/* int *pcorrect_mac - set if dest. address is exactly our IA */
|
|
||||||
/* int *pbroadcast - set if dest. address is a broadcast address */
|
|
||||||
/* int *pcrc_error - set if received frame had a CRC error */
|
|
||||||
|
|
||||||
int rawnet_arch_receive(uint8_t *pbuffer, int *plen, int *phashed, int *phash_index, int *prx_ok, int *pcorrect_mac, int *pbroadcast, int *pcrc_error)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
|
|
||||||
Ethernet_PCAP_internal_t internal;
|
|
||||||
|
|
||||||
internal.len = *plen;
|
|
||||||
internal.buffer = pbuffer;
|
|
||||||
|
|
||||||
#ifdef RAWNET_DEBUG_ARCH
|
|
||||||
log_message(rawnet_arch_log, "rawnet_arch_receive() called, with *plen=%u.", *plen);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
assert((*plen & 1) == 0);
|
|
||||||
|
|
||||||
len = rawnet_arch_receive_frame(&internal);
|
|
||||||
|
|
||||||
if (len != -1) {
|
|
||||||
|
|
||||||
#ifdef RAWNET_DEBUG_PKTDUMP
|
|
||||||
debug_output("Received frame: ", internal.buffer, internal.len);
|
|
||||||
#endif /* #ifdef RAWNET_DEBUG_PKTDUMP */
|
|
||||||
|
|
||||||
if (len & 1) {
|
|
||||||
++len;
|
|
||||||
}
|
|
||||||
|
|
||||||
*plen = len;
|
|
||||||
|
|
||||||
/* we don't decide if this frame fits the needs;
|
|
||||||
* by setting all zero, we let ethernet.c do the work
|
|
||||||
* for us
|
|
||||||
*/
|
|
||||||
*phashed = *phash_index = *pbroadcast = *pcorrect_mac = *pcrc_error = 0;
|
|
||||||
|
|
||||||
/* this frame has been received correctly */
|
|
||||||
*prx_ok = 1;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *rawnet_arch_get_standard_interface(void)
|
char *rawnet_arch_get_standard_interface(void)
|
||||||
{
|
{
|
||||||
char *dev, errbuf[PCAP_ERRBUF_SIZE];
|
char *dev, errbuf[PCAP_ERRBUF_SIZE];
|
||||||
|
@ -575,19 +547,28 @@ extern int rawnet_arch_get_mtu(void) {
|
||||||
|
|
||||||
extern int rawnet_arch_get_mac(uint8_t mac[6]) {
|
extern int rawnet_arch_get_mac(uint8_t mac[6]) {
|
||||||
|
|
||||||
|
int rv = -1;
|
||||||
|
LPADAPTER outp = NULL;
|
||||||
char buffer[sizeof(PACKET_OID_DATA) + 6];
|
char buffer[sizeof(PACKET_OID_DATA) + 6];
|
||||||
PPACKET_OID_DATA data = (PPACKET_OID_DATA)data;
|
PPACKET_OID_DATA data = (PPACKET_OID_DATA)buffer;
|
||||||
|
|
||||||
|
|
||||||
|
if (!packet_library) return -1;
|
||||||
|
|
||||||
/* 802.5 = token ring, 802.3 = wired ethernet */
|
/* 802.5 = token ring, 802.3 = wired ethernet */
|
||||||
data->Oid = OID_802_3_CURRENT_ADDRESS; // OID_802_3_CURRENT_ADDRESS ? OID_802_3_PERMANENT_ADDRESS ?
|
data->Oid = OID_802_3_CURRENT_ADDRESS; // OID_802_3_CURRENT_ADDRESS ? OID_802_3_PERMANENT_ADDRESS ?
|
||||||
data->Length = 6;
|
data->Length = 6;
|
||||||
|
|
||||||
if (PacketRequest(EthernetPcapFP, FALSE, data)) {
|
|
||||||
memcpy(mac, data->Data, 6);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
outp = p_PacketOpenAdapter(rawnet_device_name);
|
||||||
|
if (!outp || outp->hFile == INVALID_HANDLE_VALUE) return -1;
|
||||||
|
|
||||||
|
if (p_PacketRequest(outp, FALSE, data)) {
|
||||||
|
memcpy(mac, data->Data, 6);
|
||||||
|
rv = 0;
|
||||||
|
}
|
||||||
|
p_PacketCloseAdapter(outp);
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rawnet_arch_status(void) {
|
int rawnet_arch_status(void) {
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
extern Scc scc_stat[2];
|
extern Scc scc_stat[2];
|
||||||
extern int g_serial_modem[];
|
extern int g_serial_modem[];
|
||||||
|
|
||||||
#if !(defined _MSC_VER || defined __CYGWIN__)
|
#if !(defined _WIN32)
|
||||||
extern int h_errno;
|
extern int h_errno;
|
||||||
#else
|
#else
|
||||||
#define socklen_t int
|
#define socklen_t int
|
||||||
|
|
|
@ -33,6 +33,20 @@ extern char g_config_gsplus_screenshot_dir[];
|
||||||
extern void get_cwd(LPTSTR buffer, int size);
|
extern void get_cwd(LPTSTR buffer, int size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ENABLE_DEBUGGER
|
||||||
|
int g_dbg_step = 0;
|
||||||
|
int g_dbg_enable_port = 0;
|
||||||
|
|
||||||
|
void debug_server_poll(void) { }
|
||||||
|
int debug_events_waiting(void) { return 0; }
|
||||||
|
void debug_handle_event(void) { }
|
||||||
|
void debug_init(void) { }
|
||||||
|
void do_go_debug(void) { }
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define PC_LOG_LEN (8*1024)
|
#define PC_LOG_LEN (8*1024)
|
||||||
|
|
||||||
int g_speed_fast; // OG Expose fast parameter
|
int g_speed_fast; // OG Expose fast parameter
|
||||||
|
|
|
@ -4,3 +4,7 @@ add_library(tfe tfe.c tfearch.c tfesupp.c)
|
||||||
|
|
||||||
target_compile_definitions(tfe PUBLIC HAVE_TFE)
|
target_compile_definitions(tfe PUBLIC HAVE_TFE)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
target_include_directories(tfe PRIVATE ../rawnet/include)
|
||||||
|
target_link_libraries(tfe ws2_32) # winsock2
|
||||||
|
endif()
|
Loading…
Reference in New Issue
Block a user