diff options
author | Arisotura <thetotalworm@gmail.com> | 2019-03-04 20:58:13 +0100 |
---|---|---|
committer | Arisotura <thetotalworm@gmail.com> | 2019-03-04 20:58:13 +0100 |
commit | 8448e6bea0c19c384d217fea34592db315929536 (patch) | |
tree | 530cfd8536b9f8f2eba5ac7bbcdcb7d833e76e7b | |
parent | 1e108ad7fba0a7a84ec24d436203eeccde8163c3 (diff) |
take it further
-rw-r--r-- | src/libui_sdl/LAN_PCap.cpp | 6 | ||||
-rw-r--r-- | src/libui_sdl/LAN_Socket.cpp | 77 |
2 files changed, 14 insertions, 69 deletions
diff --git a/src/libui_sdl/LAN_PCap.cpp b/src/libui_sdl/LAN_PCap.cpp index f621acf..b6bbdc5 100644 --- a/src/libui_sdl/LAN_PCap.cpp +++ b/src/libui_sdl/LAN_PCap.cpp @@ -16,7 +16,7 @@ with melonDS. If not, see http://www.gnu.org/licenses/. */ -// LAN interface. Currently powered by libpcap, may change. +// direct LAN interface. Currently powered by libpcap, may change. #include <stdio.h> #include <stdlib.h> @@ -24,7 +24,7 @@ #include <SDL2/SDL.h> #include <pcap/pcap.h> #include "Wifi.h" -#include "LAN.h" +#include "LAN_PCap.h" #include "../Config.h" #ifdef __WIN32__ @@ -55,7 +55,7 @@ DECL_PCAP_FUNC(int, pcap_dispatch, (pcap_t* dev, int num, pcap_handler callback, DECL_PCAP_FUNC(const u_char*, pcap_next, (pcap_t* dev, struct pcap_pkthdr* hdr), (dev,hdr)) -namespace LAN +namespace LAN_PCap { const char* PCapLibNames[] = diff --git a/src/libui_sdl/LAN_Socket.cpp b/src/libui_sdl/LAN_Socket.cpp index f621acf..d1e99e1 100644 --- a/src/libui_sdl/LAN_Socket.cpp +++ b/src/libui_sdl/LAN_Socket.cpp @@ -16,15 +16,14 @@ with melonDS. If not, see http://www.gnu.org/licenses/. */ -// LAN interface. Currently powered by libpcap, may change. +// indirect LAN interface, powered by BSD sockets. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <SDL2/SDL.h> -#include <pcap/pcap.h> #include "Wifi.h" -#include "LAN.h" +#include "LAN_Socket.h" #include "../Config.h" #ifdef __WIN32__ @@ -34,55 +33,19 @@ #endif -// welp -#ifndef PCAP_OPENFLAG_PROMISCUOUS -#define PCAP_OPENFLAG_PROMISCUOUS 1 -#endif - - -#define DECL_PCAP_FUNC(ret, name, args, args2) \ - typedef ret (*type_##name) args; \ - type_##name ptr_##name = NULL; \ - ret name args { return ptr_##name args2; } - -DECL_PCAP_FUNC(int, pcap_findalldevs, (pcap_if_t** alldevs, char* errbuf), (alldevs,errbuf)) -DECL_PCAP_FUNC(void, pcap_freealldevs, (pcap_if_t* alldevs), (alldevs)) -DECL_PCAP_FUNC(pcap_t*, pcap_open_live, (const char* src, int snaplen, int flags, int readtimeout, char* errbuf), (src,snaplen,flags,readtimeout,errbuf)) -DECL_PCAP_FUNC(void, pcap_close, (pcap_t* dev), (dev)) -DECL_PCAP_FUNC(int, pcap_setnonblock, (pcap_t* dev, int nonblock, char* errbuf), (dev,nonblock,errbuf)) -DECL_PCAP_FUNC(int, pcap_sendpacket, (pcap_t* dev, const u_char* data, int len), (dev,data,len)) -DECL_PCAP_FUNC(int, pcap_dispatch, (pcap_t* dev, int num, pcap_handler callback, u_char* data), (dev,num,callback,data)) -DECL_PCAP_FUNC(const u_char*, pcap_next, (pcap_t* dev, struct pcap_pkthdr* hdr), (dev,hdr)) - - -namespace LAN +namespace LAN_Socket { -const char* PCapLibNames[] = -{ -#ifdef __WIN32__ - // TODO: name for npcap in non-WinPCap mode - "wpcap.dll", -#else - // Linux lib names - "libpcap.so.1", - "libpcap.so", -#endif - NULL -}; +u8 PacketBuffer[2048]; +int PacketLen; +volatile int RXNum; -AdapterData* Adapters = NULL; -int NumAdapters = 0; - -void* PCapLib = NULL; -pcap_t* PCapAdapter = NULL; -AdapterData* PCapAdapterData; +u16 IPv4ID; -u8 PCapPacketBuffer[2048]; -int PCapPacketLen; -volatile int PCapRXNum; -u16 IPv4ID; +// TODO: UDP sockets +// * use FIFO list +// * assign new socket when seeing new IP/port typedef struct @@ -96,26 +59,8 @@ typedef struct } TCPSocket; -TCPSocket TCPSocketList[64]; - - -#define LOAD_PCAP_FUNC(sym) \ - ptr_##sym = (type_##sym)SDL_LoadFunction(lib, #sym); \ - if (!ptr_##sym) return false; +TCPSocket TCPSocketList[16]; -bool TryLoadPCap(void* lib) -{ - LOAD_PCAP_FUNC(pcap_findalldevs) - LOAD_PCAP_FUNC(pcap_freealldevs) - LOAD_PCAP_FUNC(pcap_open_live) - LOAD_PCAP_FUNC(pcap_close) - LOAD_PCAP_FUNC(pcap_setnonblock) - LOAD_PCAP_FUNC(pcap_sendpacket) - LOAD_PCAP_FUNC(pcap_dispatch) - LOAD_PCAP_FUNC(pcap_next) - - return true; -} bool Init() { |