Big code refactoring #10
@ -17,9 +17,10 @@ extern "C" {
|
||||
#include <netinet/in.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
// #include <malloc.h>
|
||||
#include <string.h>
|
||||
#include <iostream>
|
||||
#include <sys/ioctl.h>
|
||||
#include <net/if.h>
|
||||
|
||||
std::string getWireguardVersion() {
|
||||
return "Kernel";
|
||||
@ -76,7 +77,7 @@ void WireguardConfig::getWireguardConfig() {
|
||||
if ((status = wg_get_device(&devConfig, this->name.c_str())) < 0) throw std::string("It was not possible to get the Wireguard interface settings, code: ").append(std::to_string(status));
|
||||
if (devConfig->flags & WGDEVICE_HAS_PRIVATE_KEY) this->privateKey = wgKeys::toString(devConfig->private_key);
|
||||
if (devConfig->flags & WGDEVICE_HAS_PUBLIC_KEY) this->publicKey = wgKeys::toString(devConfig->public_key);
|
||||
if (devConfig->flags & WGDEVICE_HAS_LISTEN_PORT) this->portListen = devConfig->listen_port;
|
||||
if (!!devConfig->listen_port && devConfig->listen_port > 0) this->portListen = devConfig->listen_port;
|
||||
this->interfaceAddress.GetInInterface(this->name);
|
||||
|
||||
for ((peer) = (devConfig)->first_peer; (peer); (peer) = (peer)->next_peer) {
|
||||
@ -395,10 +396,25 @@ void IpManeger::SetInInterface(std::string interfaceName) {
|
||||
lcl.bitlen = (req.ifa.ifa_family == AF_INET) ? 32 : 128;
|
||||
|
||||
if (inet_pton(req.ifa.ifa_family, ip.Address.c_str(), &lcl.data) <= 0) throw std::string("Invalid IP address: ").append(ip.Address);
|
||||
|
||||
if (req.ifa.ifa_family == AF_UNSPEC) req.ifa.ifa_family = lcl.family;
|
||||
|
||||
addattr_l(&req.n, sizeof(req), IFA_LOCAL, &lcl.data, lcl.bytelen);
|
||||
if ((err = rtnl_talk(rth, &req.n, 0, 0, NULL)) < 0) throw std::string("Cannot set interface IP, code: ").append(std::to_string(err));
|
||||
}
|
||||
|
||||
// Get INET socket
|
||||
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (sockfd < 0) throw std::string("Error creating socket to set interface flags");
|
||||
|
||||
struct ifreq ifr;
|
||||
strcpy(ifr.ifr_name, interfaceName.c_str());
|
||||
|
||||
// Set interface flags
|
||||
ifr.ifr_flags = IFF_POINTOPOINT | IFF_NOARP | IFF_UP | IFF_RUNNING;
|
||||
if (ioctl(sockfd, SIOCSIFFLAGS, &ifr) < 0) {
|
||||
close(sockfd);
|
||||
throw std::string("Error setting interface flags");
|
||||
}
|
||||
|
||||
close(sockfd);
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
#include "wginterface.hh"
|
||||
#include "genKey/wgkeys.hh"
|
||||
|
||||
void WireguardDevices::getInterfaces() {}
|
||||
void WireguardDevices::deleteInterface(std::string wgName) {
|
||||
throw std::string("Use userspace module");
|
||||
}
|
||||
|
||||
void WireguardConfig::getWireguardConfig() {
|
||||
throw std::string("Use userspace module");
|
||||
}
|
||||
|
||||
void WireguardConfig::setWireguardConfig() {
|
||||
throw std::string("Use userspace module");
|
||||
}
|
30
addon/win/wgip.cpp
Normal file
30
addon/win/wgip.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
#include "wginterface.hh"
|
||||
#include <windows.h>
|
||||
#include <iostream>
|
||||
#include <comdef.h>
|
||||
#include <Wbemidl.h>
|
||||
#include <vector>
|
||||
|
||||
#pragma comment(lib, "wbemuuid.lib")
|
||||
|
||||
void SetIPAddress(IWbemServices* pSvc, IWbemClassObject* pclsObj, const wchar_t* propertyName, const wchar_t* ip) {
|
||||
VARIANT vtProp;
|
||||
HRESULT hres = pclsObj->Get(propertyName, 0, &vtProp, 0, 0);
|
||||
if (SUCCEEDED(hres)) {
|
||||
vtProp.vt = VT_BSTR;
|
||||
vtProp.bstrVal = SysAllocString(ip);
|
||||
hres = pclsObj->Put(propertyName, 0, &vtProp, 0);
|
||||
VariantClear(&vtProp);
|
||||
|
||||
if (FAILED(hres)) {
|
||||
std::cerr << "Failed to set " << propertyName << ". Error code: " << hres << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void IpManeger::SetInInterface(std::string interfaceName) {
|
||||
}
|
||||
|
||||
void IpManeger::GetInInterface(std::string interfaceName) {
|
||||
throw std::string("Use userspace module");
|
||||
}
|
10
binding.yaml
10
binding.yaml
@ -24,6 +24,16 @@ target:
|
||||
- "-w"
|
||||
- "-fpermissive"
|
||||
- "-fPIC"
|
||||
windows:
|
||||
sources:
|
||||
- "!addon/dummy/wginterface.cpp"
|
||||
- "addon/win/wginterface.cpp"
|
||||
- "addon/win/wgip.cpp"
|
||||
libraries:
|
||||
- wbemuuid.lib
|
||||
defines:
|
||||
- "_HAS_EXCEPTIONS=1"
|
||||
- "ONSTARTADDON"
|
||||
macos:
|
||||
flags:
|
||||
- "!-fno-exceptions"
|
||||
|
Loading…
x
Reference in New Issue
Block a user